2019秋招Java面经(凭记忆回忆, 可能不准)
随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了.
到现在我玩了差不多十多天了, 总想着总结一下面经, 一直懒. 现在就以这篇面经来宣告我的秋招结束吧.....
我在整个秋招期间在技术面没有挂过(贝壳 去哪儿 美团 百度, 百度金融. ...), 不喜欢收割offer, 觉得没意思而且浪费时间, 我只去参加自己中意的公司的面试.
而且我也不看钱(年薪二十万以上就可以了, 挣大钱是以后的事情), 我现在更关注公司的技术对我的发展会不会有很多帮助.
学历情况
双非, 本科
算法学习情况
剑指offer只看了前4道题 (现在是看到了第9题了).
左程云的书只看了前2道题.
贝壳 提前批一面(大概80分钟?)
这是我秋招面的第一个公司, 而且也是发挥最好的面试. 完全由我自己发挥, 让我发挥自己的擅长之处.
1.面试官笑
我傻笑
2. 请你自我介绍吧
balabala.....(我哪方面怎么怎么厉害, 多厉害什么的)
3. Java集合你都熟悉哪些
util包下的基本都说了...看过几个源码
4. 请你介绍一下HashMap和jdk里与其结构相似的集合
1> 我就讲了讲Hash的冲突解决方法都有哪些, HashMap采用的是链表解决...红黑树优化....为什么是8, 泊松定理什么的....
2> 负载因子和扩容策略, 连续扩容到64之类的...也就是介绍了各个变量的作用..
3> 然后说了说 jdk7 和 jdk8 两个版本之间HashMap的区别.
4> 讲了讲和HashTable的区别.
5> 和ConcurrentHashMap的区别.
6> 和IdentityHashMap的区别,
7> 和WeakHashMap的区别. 然后聊了一下Weak弱引用.
8> 接着又说了HashSet等set集合底层使用的是HashMap.
5. 讲讲你实习中在公司做的这个项目.
balabala....
(就是涉及到:
1> 分布式
2> netty
3> rpc
4> protobuf
5> http
6> redis
7> 手写lru缓存和优化
这几个关键词...)
6. 你对synchronized关键词的了解和对并发的看法.
谈了一下多线程的概念, 线程和进程的区别. 举了一个死锁的demo, 举了一个线程不安全的demo.
然后我就开始介绍synchronized关键词, 我还比较擅长这块, 就答得比较多:
1> 讲了讲锁的语义.
2> synchronized关键词加在成员方法上的时候, 底层是在方法表的访问标志中增加了ACC_SYNCHORONIZED.
3> synchronized关键词用在代码块的时候, 底层是直接在上下代码中插入了monitorenter和monitorexit.
4> 其实本质上都是moniter.
5> 还讲了一下synchronized加在静态方法(类方法)上和成员方法上的区别.
6> synchronized相关的知识点--对象头结构
7> 偏向锁 轻量级锁 重量级锁的 场景和升级的情况. 而且只可升级不可降级
8> synchronized相关的jvm参数 比如关闭偏向锁 -XX:UseBiasedLocking=false 之类的...还有更改默认自旋次数的一个...忘了...
9> wait()方法的底层实现. 讲了讲底层的 _EntryList 和 WaitSet
10> 说了说我的理解: 为什么对象都可以作为synchronized代码块的锁. 为什么wait方法是在Object类下
11> 和lock的区别. 比如不能响应中断什么的...
12> 锁的粗化
13> 锁的细化
14> 自旋优化
15> 锁消除. 用StringBuffer举的例子.
7. 写个sql查询.
我: sql不太会, nosql比较会.
面试官: 没事, 给你个简单的俩表连接查询
8. nosql你是熟悉哪种?
我: redis
9. 讲讲redis任意一个数据结构吧
我挑了最简单的SDS讲的...跟java的AbstractStringBuilder作对比, 讲了讲两个的扩容策略和细节上的区别.
10. redis的字典和java的HashMap做个比较吧
(我当时没想出来...面试官说了值后我才想起来....扩容的时候增量同步之类的...)
11. redis的持久化
讲了两种持久化的格式, 和优缺点, 和新版的优化. (之前可以肉眼看持久化文件的, 所以就讲了讲持久化文件的格式....现在不行了, 好久都忘了)
12. 线程池你用过吗?
我就介绍了一下java的线程池ThreadPoolExecutor里的每个参数...
13. 介绍一下线程池的拒绝策略...
我就讲了jdk实现的四种. 然后讲了一下我再github上看到的另一种实现...就是放进新队列里, 以更低优先权的方式进行调度.
14. 线程池什么时候回收线程? 怎么回收线程?
这块没答好....不太会...
15. 链表如何优化查询效率
跳跃表
16. 来写个代码吧. 手写个小算法. 两个有序链表合并为一个有序链表.
送分题...假装不会...一脸认真地写....
贝壳 提前批二面(大概一个小时)
贝壳二面面试官人很直爽, 很不错. 只是对我简历中的第二个项目很不满意, 而且我表述又不清. 聊得很不好.
1. Java反射, 比如如何修改一个变量. 如何修改static+final同时修饰的变量.
因为static和final同时修饰时, 直接用反射是无法进行修改的..回报异常. 应该反射Method来去掉final修饰符. 然后用反射来修改该变量. 修改完了后再反射Method把final修饰符加上.
2. 你为了这个项目自己实现了一个Objenesis? 讲讲呗. 为什么这么做...
从这里开始和面试官聊得很不来....一直在聊项目....
3. 谈谈你项目的架构.
从客户端到缓存到redis持久化和mysql持久化等等, 一致性hash等等....
4. 你还有没有什么问题
有. 讲了讲面试中的误解. 面试官说我不能答到问题的点上. 说我技术本身没有大问题, 说我的沟通能力很差.
我就解释了一下我母语不是中文, 面试官突然惊讶一下...
二面还是给我通过了...
贝壳 hr面(大概20分钟)
1. 你是哪里人
2. 对加班的看法
3. 为什么不留在上一家公司(我实习的公司)
4. 你还有什么问题?
我: 没有
去哪儿网 一面(大概80分钟)
1. 自我介绍
2. 讲解项目
1> 一致性哈希
2> 缓存
3> 微服务
4> ......
3. 来写个算法吧
然后我没写出来.......
4. 写个sql吧, 根据业务进行一个查找
墨迹了半天, 我也没写出来....(中间伴随着面试官烧热水...喝热水...还听到隔壁在聊布隆过滤器... 分神了)
5. linux 你用过吗?
我: 用过, 实习的时候在服务器上查个日志什么的
面试官: 用过哪些命令?
我: grep top tcpdump
面试官: 想只要一个关键词在文章中出现的行数, 怎么统计?
我: 不会....
6. 讲一下HashMap吧
1> 我就讲了讲Hash的冲突解决方法都有哪些, HashMap采用的是链表解决...红黑树优化
2> 负载因子和扩容策略, 介绍了各个变量的作用..
3> jdk7 和 jdk8 两个版本之间HashMap的区别.
4> 和HashTable的区别.
7. gc你熟悉吗?
我: 一般吧(其实我还是挺擅长gc和jvm的, 我怕骄傲了不好...)
面试官: 两个垃圾对象互相引用的时候, jvm会不会成功回收这两个对象.
我: 会. 因为不是引用计数, 是根据可达性.
(然后就下一题了...我还想继续往下讲呢....jvm就这样问完了....