3.5年java后端面试总结-成都
今年(9102)行情不好,在boss直聘上看到的招聘其中有一半以上在一周内都是未读,读了的有一半都没有回复,要了简历好大一部分也没了后续。
个人情况:自己定位是未到高级;当前薪资:11k,目标15k,底线14k。
坐标:成都
技术问题
领域 | 问题分类: | 详细内容 |
java基础 | concurrentHashMap and hashMap and hashTable | 数据结构,红黑树只被问过一次,熟悉下它的五个特点就行了 hashMap 1.7和1.8差别 concurrentHashMap put过程,涉及到初始化,helpTransfer,扩容,数据添加,treefy等 |
线程和锁 | 线程的状态,各个行为下分别是什么状态 wait 和 sleep的区别 Lock 和 sync 的区别 锁升级 * 3 | |
AQS | 实现原理 CountDownLatch的用法等,熟悉可以回答底层源码 | |
线程池 | 线程池的核心参数用法 主要有几种线程池,了解的比较多可以回复下底层原理 | |
jvm | 内存构造,回收算法,常用配置 oom问题排查 如何优化,在某个场景下如何优化,比如新老比例3:1 类加载机制如何,双亲委派模型 如何定位cpu问题 | |
java框架 | spring | bean生命周期 容器启动的过程 onRefresh方法以及内部的 finishBeanFactoryInitialization 以及 invokeBeanFactoryPostProcessors beanFactoryPostProcessor 和 beanPostProcessor |
spring mvc | 启动 请求执行流程,一般自己会多说参数解析,因为这块有研究过 | |
mybatis | #和$的差别 sql查询的流程 插件的实现原理 | |
数据库 | redis | redis常用数据类型 底层数据结构 持久化, 数据过期策略 主从 sentinel 和 集群 原理 缓存击穿与雪崩发生场景及解决方案 |
mysql | 常用的优化方法 某些场景下索引如何创建(主要考虑复合索引,最左匹配原则) explain主要看哪些内容 b树和b+树的区别,为什么innodb用b+而不是b树,二叉树 hash索引和b+树索引差别 主从延迟怎么解决 | |
其他 | 算法 | 实现 解析运算表达式(一次) 优先级队列的使用场景,当场回答有点蒙,后面反应过来是它的数据结构 散列,即HashMap |
设计模式 | 在项目中使用过的设计模式,场景说明 随便提个设计模式问是否了解,常问的是观察者/单例 | |
分布式 | 分布式事务,cap 和 base 分布式主键生成策略,见推特snow flake, 美团leaf | |
项目 | 做过的复杂的项目;怎么优化的项目 | |
系统设计 | 用例图,流程图,类图设计订单系统/简单系统 | |
docker | 由于自己写了了解,很多都会问这个,回答只会基本使用,然后给的建议就是深入学习。。 | |
其他 | 自我定位,周围同事的评价; 写代码时候注意些什么,有什么是不能有的,有什么是一定要有的。; | |
被问一次的问题 | rabbitMq (rabbitMq只被问过一次,也许是的确没什么人用) | 死信 生产者消费者如何消息防重 和其他消息队列对比的优缺点,rabbitMq主要问题是:不支持消息堆积! |
其他 | UDP协议;servlet生命周期 |
面试公司汇总
- 三月:中非网(一面挂)
- 四月:滴普科技(13k * (13-15)),嗨学网(一面挂),某国企(14k * 12+10),某国企(hr面挂)
- 五月:铁皮人(14k * 14),G7(一面挂),oppo(二面挂),客如云(14k * (12-16))
- 六月:神话传媒(一面挂),致远软件(wait)
面试官的建议
有些还是不错的面试官给的建议,当然不是所有面试官都给了建议,有些给的offer,有些是两周内给答复 = =,
个人理解,一个好的面试官应该能够引导回答,不满足需求时可以给一些较好的建议,缘分一场。
面试官 | 建议 | 响应 |
致远软件 | 计算机组成原理较重要,需要有 | 这个其实和以前的leader,现在在美团做leader,得到的答复是当需要的时候可以深入底层学习,所以一直放着 |
管理经验需要提前准备 | 当时没反驳,或许这个在成为一个小leader之前,不用太考虑 | |
需要有长期的规划 | ||
神话传媒 | 深入学习docker | 这个还要考虑一下,有很多都可以深入学习,但是具体能不能给自己的职业生涯和以后的工作带来价值? |
对springboot的看法,表示高级开发应该有深入的见解 | springboot就曾用过4个月,没有什么深入看法啊,后面积累吧! | |
oppo二面 | 给的建议是增加业务敏感性,因为谈到了营销工具这个功能,它没有效果统计,还问到了数据挖掘,蒙蔽 | 的确业务的敏感性太差,总觉得需求都是产品定,其实不是,自己可以有更好得建议, 也需要考虑兼容,扩展,数据报表,效果统计之类得东西 |
oppo一面 | 深入jvm,docker等,认为很多方面都有学到,但缺乏一些深度。 | jvm其实还是有些深入的,自己表述的是没有机会接触生产环境,而且工作中遇到问题,被直接加内存处理了!! |
中非网(18k岗位) | 提高系统边界的感知,如何减少系统间的耦合(让做一个下单系统) | 这个也很重要,微服务盛行,如何划分边界很重要 |
总结 | 需要有短长期的规划,很多事情需要提前规划。 需要增加业务敏感性,思考如何把业务做的更好,业界有没有更好的解决方案。 需要加强系统边界划分的思考,减少耦合。 |
其他问题
找工作看重什么
薪资;稳定性;业务发展,部门盈利的模式是什么;薪资成长性;技术氛围
职业规划
想走技术,希望能在两年内做个小组长,那这也必须要去个稳定的公司,如果频繁变动,去另一家公司也只有当小弟的份,周围太多这样的同事。
和同事相比,怎么样
这个问题比较难,往好了说容易给人一种吹逼的假象,往低了说又会让人觉得不自信,自己一开始也没回答好,思考后觉得这样回答或许更好
其实大家能在一家公司,在能力上差异是有,但不会特别大,这个有时候也很难辨别谁强谁弱多少,在以前看到一篇文章,
说能力的强弱就是解决问题的能力,如果遇到一个问题能很快解决,或者说能通过其他途径有效的解决,那么这就是能力的体现,
这的根本其实就是基础技术能力怎么样,对业务的了解怎么样,对工具的了解怎么样等等。
当被一个小问题卡住了,面试官提示了结果,而你本来是知道的,怎么办?
有时候由于沟通问题,常常回答不上一些简单问题,比如上次就被问到“spring 怎么开启注解扫描”,
没想到他问的是component-scan,当面试官给了答案之后自己也没做什么表示。
面试结束后想,当时应该补充一下它的用法,还可以配置的属性(includeFilter,excludeFilter之类的)等,
避免给人一种这么简单都不知道的感觉 = =
还有被问“在工作中使用过什么设计模式”回答了用过工厂方法,策略等,
然后再被问"单例模式用过吗",我居然只回答了说在工作中其实还没有用过,就没有后续了,
其实自己是知道几种实现方式的,回答工作中没有用过,给人的感觉就是“这个我不太熟悉,您问下一个问题吧。。。”
当自己回答正确,面试官却坚持说没有答对,怎么应对?
之前去一家国企二面,其中问了“StringBuilder 和 StringBuffer 的区别”自己其实是正确回答了的,
面试官一直否定,质疑基础不牢,他的意见是“如果在单线程环境下,没有线程竞争,那不是用StringBuffer也没毛病,
就没有用StringBuilder的机会?”,
当时没有拿出有力的证据来推翻对方,或许说出sync的实现原理就可以了,但是没忘这方面想。。