面试时间:6月4日
面试形式: 电话面
一面
- 自我介绍一下
- 介绍一下项目,说了项目描述、技术难点以及是如何解决的。介绍完没有对项目进行发问。
- 说一下HashMap的底层原理。 这个很熟,从hash值计算、为什么要用低16位与高16位异或到怎么解决Hash冲突的以及扩容和填充因子都讲了一遍。面试官表示很满意~~ hha
- JVM了解吗? 说一下JVM的组成?
- 你刚刚说到堆,堆是用来干什么的?
有哪些垃圾回收算法来管理堆对象?
为什么要进行GC分代? - 说一下从Http请求的过程。 讲了三次握手过程。
- 多线程了解吗?
说一下线程池的几个参数及其作用。
然后问了一下锁的知识。 问到这块真是知识盲区。 😅多线程本身就不怎么了解,线程池也是硬着头皮答的。只好实话实说,这一块不怎么了解。
会去马上就恶补了。 - 来一道算法题。 100亿的数据量要你选出前100大的数据,怎么实现?
心想这不是一个topK 问题吗? 选择排序使用partition每次选出第1大、第2大 以次类推……
面试官提醒存在IO问题,确实如果是比较小的数据量topK还过得去。但如果是海量数据处理,这样的做***存在: 多余的比较、使用单个服务器IO读入问题
9. 来一道场景题。1万个用户抢1千个商品,问设计这个功能的时候会考虑哪些问题?
一道秒杀系统的原题 哭了😭这方面没有过多思考过 真是凭自己的理解答的七零八碎,答了临界资源加锁、限流(流量控制)、服务器集群解决单点故障。面试官还提示了负载均衡、安全问题,面试官真的挺好的,会一步步引导!
现在来概述一下吧:
秒杀系统的设计基本围绕着三个维度进行: 高性能、高可用、一致性
面试官评价: 基础挺好的,但是多线程方面要去多了解。
反问环节:
1. 面试结果多久会出? 回答2~3个工作日(注意是工作日哦)
2. 对实习生在技术上有哪些要求? 答: 首先Java基础要好,一些原理要了解,因为很多地方是有坑的。还有存储数据库例如MySQL方面的。 这边技术栈是SpringBoot+Dubbo。
3. 面试官评价怎么样?
后面复盘听录音的时候 发现其实自己后面两道题答得没有想象中的那么差劲 然后反问技巧需要提升一下。
面试官结束后就说了基础不错,我在反问3的时候还提问面试官评价怎么样? 真替自己尴尬。
然后比较精巧的既能获得自己面试评价和自己努力的方向的的反问如下:
1. 感谢您对我这次的面试,请问我的经历跟能力还有哪些不太符合公司预期的吗?或者您觉得我还哪些方面需要加强的?
2. 如果我有幸入职,对于我这个岗位,您对我未来3~5年的职业规划是怎么样子的?