10.12
自我介绍
我的建议是:如果没有特别认真组织过语言的,把简历上的内容稍微提一下就ok了!
然后尽量:提一下个人的优点和缺点
集合
问了我是否了解过集合中hashmap的扩容和put方法的原理(他原话是有没有看过这些内容的源码,请讲一讲)
参考答案:
首先我讲了一些补充的知识例如:hashmap1.7版本和1.8+版本的区别以及三种构造方法
- hashmap扩容:
①.底层维护的是一个Node类型的数组table ,默认为null
transient Node<K,V>[] table;
②.加载因子是0.75
static final float DEFAULT_LOAD_FACTOR = 0.75f;
③.当执行第一次添加的时候,扩容table为16,临界值为16x加载因子0.75=12
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
④.扩容倍数为2倍
⑤.当数组长度>=64且当前链表长度>8,链表转为红黑树(红黑树的特征?)
2.put方法原理
①.当添加了一个key和value的时候,通过key去hash找到所在的数组的索引
②.判断该索引上有无元素,如果无,则直接添加
③.如果有元素,判断加入的元素的key和该索引上元素的key是否相等,如果相等则直接替换该元素,如果不相等,则需要判断是树结构还是链表结构,做出相应处理,如果添加时发现容量不够,则需要扩容
JVM
JVM内存模型,垃圾回收算法(MinorGC如何在新生代进行回收垃圾),如果在垃圾回收时新生代有一个很大很大的对象;
线程私有: 虚拟机栈 程序计数器
线程共享:本地方法区 元空间(方法区) 堆
2 .新生代:Eden区 ,S0区,S1区 垃圾收集过程:新来的垃圾都会放在Eden区和S0区。第一次回收的时候,将这两个区域的存活的对象放到s1区,并替换s0和s1区,然后继续对eden区和s1区进行垃圾回收,最后将存活的对象放到另一块空白的区域,重复以上过程;
3 .最后一个问题回答的模棱两可,我说的是jvm对象分配有个默认条件 当一个对象达到某个区域的内存一半以上会直接放到了老年代…
Redis
Redis哨兵机制 ,以及当主节点挂了之后,哨兵的选举方案
首先哨兵是基于主从模式的 ,例如我们配置了一个一主三从,此时启动一个哨兵,通过sentinel monitor mymaster 172.16.xx.xxx 6379 1 监听一个master主机,后面带的参数1是指只要有一票哨兵通过即可上位
选举条件:1.根据优先级别(可在redis.conf中配置);
2.根据偏移量,优先选择偏移量较大的;
3.若前两个条件都相等,会根据runid最小的(随机的不重复)
排序算法
问了解过哪些排序算法 ,原理是否还清晰
我只讲了 插入和快排,答得不是很标准就不讲了,各位可以百度
Spirngboot
有没有了解过springboot的启动加载?
Mysql
哪些字段适合建立索引 ? 索引的使用规则?
- 经常做查询的列适合做索引
- 避免在索引列上进行运算操作 ;通过or连接 的前后都必须是索引 ;尽量使用前缀索引;尽量创建联合索引;
这里有个性别的字段,适不适合做索引?
不适合,因为索引的初衷是为了快速检索,性别最多三种,男、女、未知;所以通过性别字段建立索引没有任何意义
Nginx
Nginx的反向代理 和 动静分离的静指的是什么 (我项目中写的内容)
反向代理是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
动静分离的静指的是静态资源 css js 图片页面等等(这个答案不唯一,我讲的是我项目所做的动静分离)
漏桶算法
他问了项目中的漏铜算法怎么实现的
这个没答上来 ,项目做的太久了 把漏铜算法原理简述了一遍
总结
面试官人挺好的 很能聊 不严肃
问了很多“会不会”底层的一些问题 ----偏底层
照着简历来问的 -----根据项目中使用的技术来追问偏多
10.12
自我介绍
我的建议是:如果没有特别认真组织过语言的,把简历上的内容稍微提一下就ok了!
然后尽量:提一下个人的优点和缺点
集合
问了我是否了解过集合中hashmap的扩容和put方法的原理(他原话是有没有看过这些内容的源码,请讲一讲)
参考答案:
首先我讲了一些补充的知识例如:hashmap1.7版本和1.8+版本的区别以及三种构造方法
- hashmap扩容:
①.底层维护的是一个Node类型的数组table ,默认为null
transient Node<K,V>[] table;
②.加载因子是0.75
static final float DEFAULT_LOAD_FACTOR = 0.75f;
③.当执行第一次添加的时候,扩容table为16,临界值为16x加载因子0.75=12
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
④.扩容倍数为2倍
⑤.当数组长度>=64且当前链表长度>8,链表转为红黑树(红黑树的特征?)
2.put方法原理
①.当添加了一个key和value的时候,通过key去hash找到所在的数组的索引
②.判断该索引上有无元素,如果无,则直接添加
③.如果有元素,判断加入的元素的key和该索引上元素的key是否相等,如果相等则直接替换该元素,如果不相等,则需要判断是树结构还是链表结构,做出相应处理,如果添加时发现容量不够,则需要扩容
JVM
JVM内存模型,垃圾回收算法(MinorGC如何在新生代进行回收垃圾),如果在垃圾回收时新生代有一个很大很大的对象;
线程私有: 虚拟机栈 程序计数器
线程共享:本地方法区 元空间(方法区) 堆
2 .新生代:Eden区 ,S0区,S1区 垃圾收集过程:新来的垃圾都会放在Eden区和S0区。第一次回收的时候,将这两个区域的存活的对象放到s1区,并替换s0和s1区,然后继续对eden区和s1区进行垃圾回收,最后将存活的对象放到另一块空白的区域,重复以上过程;
3 .最后一个问题回答的模棱两可,我说的是jvm对象分配有个默认条件 当一个对象达到某个区域的内存一半以上会直接放到了老年代…
Redis
Redis哨兵机制 ,以及当主节点挂了之后,哨兵的选举方案
首先哨兵是基于主从模式的 ,例如我们配置了一个一主三从,此时启动一个哨兵,通过sentinel monitor mymaster 172.16.xx.xxx 6379 1 监听一个master主机,后面带的参数1是指只要有一票哨兵通过即可上位
选举条件:1.根据优先级别(可在redis.conf中配置);
2.根据偏移量,优先选择偏移量较大的;
3.若前两个条件都相等,会根据runid最小的(随机的不重复)
排序算法
问了解过哪些排序算法 ,原理是否还清晰
我只讲了 插入和快排,答得不是很标准就不讲了,各位可以百度
Spirngboot
有没有了解过springboot的启动加载?
Mysql
哪些字段适合建立索引 ? 索引的使用规则?
- 经常做查询的列适合做索引
- 避免在索引列上进行运算操作 ;通过or连接 的前后都必须是索引 ;尽量使用前缀索引;尽量创建联合索引;
这里有个性别的字段,适不适合做索引?
不适合,因为索引的初衷是为了快速检索,性别最多三种,男、女、未知;所以通过性别字段建立索引没有任何意义
Nginx
Nginx的反向代理 和 动静分离的静指的是什么 (我项目中写的内容)
反向代理是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
动静分离的静指的是静态资源 css js 图片页面等等(这个答案不唯一,我讲的是我项目所做的动静分离)
漏桶算法
他问了项目中的漏铜算法怎么实现的
这个没答上来 ,项目做的太久了 把漏铜算法原理简述了一遍
总结
面试官人挺好的 很能聊 不严肃
问了很多“会不会”底层的一些问题 ----偏底层
照着简历来问的 -----根据项目中使用的技术来追问偏多