首页 > 阿里面经一面、伯乐已过、止于二面
头像
gezeqi
编辑于 2021-04-17 16:13
+ 关注

阿里面经一面、伯乐已过、止于二面 内部员工回复

一面:

问:熟悉Java基础是吧,那就先不多问Java了。

计网学过是吧,聊一聊吧

1、输入www.taobao.com会发生什么?

当时只说出了七步,追问DNS解析过程,当时答不出来。

图片说明

2、HTTP常见状态码

图片说明

3、重定向和转发

图片说明

4、三次握手与四次挥手

图片说明

5、发生错误时异常

图片说明

聊聊MySQL吧

1、MySQL为什么使用B+树?

(思路:从二叉树-->AVL树-->红黑树-->B树-->B+树,分别说出前者缺点,从而引出后者优点)

简要回答:二叉查找树在极端情况会产生链表,AVL树自平衡旋转过于耗时消耗性能,红黑树较为优秀,因此被HashMap采纳,但是由于单个结点,因此引出B树(B树是MongoDB的底层存储),B树特点...,因此出现了B+树,B+树特点...。最后对比B树和B+树特点。

图片说明

2、为什么推荐主键使用自增的整型?

(思路:分为三个方面:为什么要主键?为什么要自增?为什么要整型?)

图片说明

3、最左前缀原则?(原题是abc三个列,建立了索引(a,b),(a,b,c),当select时where条件是a=XXX时会走哪个索引?)

呃,只知道where a = XXX会走索引,where b = XXX and a = XXX不会建索引,这个问题当时没答出来,因为分不清

4、锁相关,(共享锁和排他锁)

图片说明

意向锁呢?--->聊到行锁和表锁--->聊到InnoDB引擎和MyISAM的区别

图片说明

图片说明

5、MVCC?

思路:事务隔离级别(MySQL默认为RR,SqlServer、Oracle为RC)--->MySQL中没有幻读,如何解决的?--->MVCC

图片说明

图片说明

Redis学过,说说吧

我就很自觉地大概从头到尾把知道的说了一遍

1、Redis为什么是单线程的?为什么效率还那么快?

单线程不需要上下文切换,Redis将所有数据都放在内存中,所以使用单线程效率就是最高的,多线程上下文切换是耗时操作,对于内存而言,没有上下文切换效率就是最高的。

2、数据类型

图片说明

3、持久化:RDB和AOF

RDB:默认的持久化方式,生成的文件名默认为dump.rdb,

​ 主要两种保存指令,手动保存save和自动保存bgsave,默认自动保存

AOF:以独立日志方式写入(只保存对数据进行修改的数据,即get等命令不保存),开启需要在配置文件中更改生效,生成的文件名默认为appendonly.aof,

​ 写数据的三种策略:always、everysec、no,默认使用everysec。由于AOF记录的是日志会导致其文件大小较大,因此有AOF重写机制,重写规则:已超时的数据不写入、忽略无效指令、对同一数据的多条写合并为一条;重写方式也有手动重写bgsave指令和自动重写(修改配置文件生效)

4、事务:开启事务multi、执行事务exec、取消事务discard

5、锁:watch必须在unwatch之后才能使用;

​ 分布式锁:利用setnx设置一个公共锁,有值返回设置失败,无值返回设置成功,操作完毕通过del释放锁;

​ 死锁的解决:使用expire为锁设置过期时间限制

6、删除策略:过期数据并不是真正删除了,而是由删除策略决定

​ 三种删除策略:定时删除、惰性删除、定期删除,redis采用的有第2和3种

​ 逐出算法:

图片说明

7、主从复制的大体过程

8、哨兵模式及哨兵的作用

9、缓存预热、缓存雪崩、缓存击穿、缓存穿透的相关概念及解决方式

Java方面聊一下吧

1、介绍一下HashMap?

思路:默认容量,负载因子,扩容阈值,红黑树与链表转换阈值,JDK1.7与1.8的区别,为什么引入红黑树

2、HashMap的是先put还是先resize?

详细介绍resize方法,扩容达到上限时,将扩容阈值直接设置为Integer.MAX_VALUE以此来避免扩容。
详细介绍put方法,底层调用putVal方法,先进行插入(判断是否哈希冲突,是否红黑树结点,否就进行链表插入),又因为resize方法放在较尾部,所以综上所述先put再resize。

JVM也了解是吧

(因为说《深入了解JVM》看了好几遍,感觉面试官以为我飘了吧。。)

1、简单说一下堆?

逻辑上:年轻代(Eden、S0、S1)、老年代(对象阈值为15进入老年代)、方法区(落地实现在永久代)

物理上:年轻代与老年代,方法区JDK1.7在永久代,1.8被元空间替换

为什么要分代、分区?IBM的研究表明绝大多数对象都是朝生夕死的

2、String s = new String("a");创建了几个对象?分别在哪?

两个,new在堆,a在字符串常量池

追问:字符串常量池在哪?

JDK1.6时字符串常量池在方法区中;JDK1.7开始着手去永久代,将字符串常量池移到了堆中;JDK1.8替换为元空间,字符串常量池还是留在堆中,没有移回去。

伯乐系统:
图片说明
图片说明
后面省略了。。。

二面:

1、两个Integer类型如何比较,使用“==”还是equals()

==是比较基本数据类型是比较值,比较引用类型是比较地址;equals比较引用类型是比较值

int与int比较,直接使用==比较

Integer与int比较,==比较时,Integer将会发生自动拆箱(调用intValue()方法)

两个Integer比较时,当它们都在[-128,127]之间,使用"=="比较和equals比较返回的都是true;在此区间范围之外"=="比较为false,equals比较为true。原因是因为Integer中有一个内部类IntegerCache,当处于此区间的值都是相同的地址和值,因此此区间的==与equals都为true

2、一个网站的架构模型是怎样的?

(我裂开来,这说不出来啊,只能瞎编)

Nginx集群请求转发,MySQL集群存储,Redis集群做缓存,SpringCloud中的Eureka注册中心负责调度,Gateway网关以及Hystrix实现服务限流服务熔断,但是Nacos可以完全替代Eureka+Config+Bus,Sentinel代替Hystrix,以及配上Seata来实现完整的服务。

现在来看,真的是在瞎扯。嗨,败在了这个问题上。
看完Dubbo2.7版本的官网架构图大家懂的都懂了。

图片说明

图片说明

然后就没有然后了,哎,第一次,败在了还未曾入门的微服务架构演变上。
不过也是第一次而已,未来继续加油努力。

更多模拟面试

全部评论

(45) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐