远景智能Java一面面经
1.TCP拥塞控制算法,能讲一下吗,就是那四个算法。
那你平时开发的过程中用这个理论解决过什么问题吗? (我说没有用到过,面试官笑了:那你不就是背概念了吗?也没有用到实际中)
项目
2.你做过项目开发了吗?那你来讲讲这个聊天室是怎么实现的?或者有什么技术难点?
架构方面,数据是怎么存储的?聊天记录是怎么存的呢?(我答了缓存)
3.如果数据量比较多,用缓存怎么存呢?一旦OutOfMemory了怎么保证持久化,不丢消息呢?
缓存你觉得用什么缓存比较好呢?Java自带的缓存,还是持久化的缓存?
(我说的用Redis持久化缓存,然后面试官问:Redis怎么持久化呢,怎么保证消息不丢呢?)
4.如果有一份文件,T是身份证号,value是名字,想快速地通过身份证号找到名字应该怎么做呢?
我答:哈希表 面试官:哈希表会很占资源,耗内存,有没有更省资源的算法?
我答:数组可以嘛 面试官:难道要一亿个节点放在数组里吗,这样也会比较大。
我答:B+树? 面试官:你觉得B+树会怎么存呢?但是范围查找B+树效率也会比较低。
最后面试官揭晓答案:Trie树听过吗?
BitMap听过吗?
5.MySQL为什么会用B+树呢?
面试官:你刚才提到分页,那如果MySQL去查的话,是先去解析索引还是先解析MySQL的语法?
我:解析语法
面试官:解析语法之后是会有什么操作呢?如果用InnoDB引擎的话。或者有没有用过一些MySQL索引的优化?为什么索引会提高查询速度?
如果写数据的话会用到索引吗?
那既然写数据查数据都需要索引,那写操作不就会比较慢了吗,应该怎么去用索引呢?(索引的建立有什么规则吗?)
我:可以用自增索引
面试官:为什么可以用自增索引
我:可以减少分页
面试官:除了这个呢?为什么会减少分页?
如果用字符串去存索引会有什么影响吗?比如是一个连环索引,会有几棵树还是只是一棵树?
我:只是一棵树
面试官:那怎么区分呢?比如第一个也是ABC,第二个也是ABC。那索引查找是怎么查呢?
6.索引能加锁吗?
你用到的MySQL里有几种锁?什么情况下会引起这两种锁?有几种隔离等级?
Next-key-Lock 解释一下是做什么的,为什么能解决幻读?
7.消息队列用过吗?MQ Kafka
8.Java和其他语言相比有什么优点和特点
9.JVM调优调过吗
10.讲讲Java的锁机制,有几种锁,讲讲独享锁和共享锁,自旋锁(红黑树)。
#面经##远景能源有限公司##Java工程师#