恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团、微软…
https://www.nowcoder.com/discuss/580423415450849280
去年秋招结束后没怎么更新笔经面经了,21、22年就关注的老粉应该了解,工作之后时间很有限,经常on call,难得有一个安静的周末午后也想要放空下脑子,读读闲书,或者出门逛逛,固定更新的时间少了很多。下面这张图是21年底冲单+护堤完后,凌晨两点多回家在出租车上拍的照片,天正下着小雨,那时因为刚工作不久,而且是第一次参与这么大的活动,声哥竟然在疲惫中还夹杂着一点点激动,这或许是应届年轻人的冲劲吧~
从面试小白到大厂offer拿个遍的往届校招生,再到工作三年多的开发(不多不少,刚刚积累了一些工作实战经验,但又没和学校培养完全脱节),确实有很多想要总结出来的东西,比如转专业、刷题、笔试面试、简历、offer选择等等大家正在经历的问题,到晋升、涨薪、向上管理、okr、绩效、年终奖、活水、跳槽等大家即将面对的问题,声哥希望在2024可以慢慢呈现给大家,到了社会才知道,懂行的人点拨一下,比自己瞎鼓捣大半年都管用,职场的坑和机会都太多太多,刚工作三年内的应该有同感。
回到问题,明明感觉面试官很友善,也有互动,但还是挂啦?为什么???
理由很简单,因为决定你拿到offer,或者说进入下一轮的因素,不仅仅局限于你和面试官之间,更要考虑团队需求、招聘成本、横向比较、老板个人偏好等等因素。这个问题展开有很复杂了,但是稍微换成面试官视角你大概就明白了,我作为面试官,通常是问老板,或者业务要hc,但也有可能是有人离职空出hc,我会拿着这个hc让hr提供人选给我面试,招聘渠道也是五花八门,内推、活水、社招等等,所以我肯定同阶段会面试多个人,所以单个面的时候我可能觉得都不错,但是全部面完后我会拿着多个面评问问老板,综合比较下,众所周知,海量=1hc,往往淘汰是在面试那一小时以外发生的,所以即便我面试的时候觉得你答的还可以,但可能另一个候选人的项目经历更匹配,甚至可能是更近的一所985,老板就直接拍板子要了,这时候作为第一轮面试官也是很无奈。。。还有可能是你以往的面评太差了,并且还都是近期的面试。。这可能也是一个因素。总之,我给大家的建议是,做好最全的准备,呈现最佳的自己,就够了,其他就看运气和眼缘了,千万不要精神内耗+怀疑自己,毕竟一个坑的团队和老板,你没进去,也是一种运气?
下面简单回顾下面试的问题,我在每个问题后面简单说明了下,大家可以发散思考,主要还是些八股,核心是要弄懂原理。
投递岗位:Java开发工程师
投递部门:快手
招聘类型:日常实习
说了一些最基础的然后就扯到了HashMap和ConcurrentHashMap,就说了底层的实现以及1.7、1.8版本前后有啥不同(但面试官只问了我list和map有啥不同,我有点紧张一下子想不起来太多,就往底层我知道的引导了)。
List是有序集合,元素可重复;Map是键值对集合,无序,键唯一。
太紧张竟然一下子想不太起来了,就随便扯了扯。
List适合有序需求,Map适用键值对存储,根据需求选择。
只记得synchronized和ReentrantLock,就说了说这两个以及有啥区别
synchronized和ReentrantLock是Java锁机制的两种实现。
锁的状态有偏向锁、轻量级锁、重量级锁。
synchronized可以修饰方法和代码块。
CAS(Compare and Swap)是一种无锁算法,通过比较并替换实现。
synchronized本地锁显然不能用在集群里,得用分布式锁
setnx、Redisson那些东西
只用过线程池
可以通过继承Thread类或实现Runnable接口启动线程。
先说了下原理,然后自然带出了参数,同时说了常用的阻塞队列和拒绝策略以及项目里怎么用的
线程池核心参数有核心线程数、最大线程数、阻塞队列、拒绝策略等。
答得不好,就记得个堆、方法区和虚拟机栈
说了标记清除、标记复制、标记清理
监控JVM可以使用jstat、jvisualvm等工具,调优需要根据具体情况分析。
Full GC是指对整个堆区进行垃圾回收。
Full GC频繁可能是内存泄漏或堆设置不合理,可通过堆栈分析工具定位问题。
对象初始在新生代,经过垃圾回收后可能晋升到老年代。
答了大对象会直接创建在老年代,但是面试官提醒其实是会先对新生代进行minor gc。
MySQL索引使用B+树结构,B+树对范围查找优化。
最左匹配原则是指联合索引时,查询条件从左到右匹配索引。
说了OR、聚合函数、模糊查询的时候使用%xx、建了联合索引时使用了>、<
就记得个别用子查询,剩下忘了。面试官引导下想起来个覆盖索引
回表是指根据索引查找到主键后,再根据主键到表中查找数据。
用联合索引实现覆盖索引
事务隔离级别有读未提交、读已提交、可重复读和串行化。
MySQL默认的隔离级别是可重复读,实现通过MVCC机制。
没太懂啥意思,就说有命令执行出错时会回滚
@Transactional注解在方法抛出RuntimeException时会回滚事务。
不会,事务回滚需要异常抛出到事务管理器。
只记得一个aop失效的场景,类内部方法a调用方法b,方法b注解失效。要想生效必须获得代理类使用代理类调用。
Java实现动态代理有JDK动态代理和CGLIB动态代理。
听错了,听成了问我了解啥设计模式
没有,但看过博客(怕说有被拷打)
IoC(Inversion of Control)是一种控制反转的设计模式。
缓存、分布式锁、限流
说了先写数据库再删缓存、缓存双删、通过监控binlog
没部署过,就在idea里跑跑
先用生成10w个token,然后用jmeter模拟同时抢票或者秒杀。
12306没怎么测过,怕她继续延伸,所以就自己说了下12306怎么解决超卖的问题,她也没打断我
就说了延迟消息特性
雀食可能存在这个问题,那你要问我怎么解决我只能说不会了,于是扯了扯其他的东西
简单说了说xxl-job、redis过期监听、RabbitMQ、kafka以及缺点
最长递增子数组可以通过动态规划求解。定义一个数组dp,其中dp[i]表示以第i个元素结尾的最长递增子数组的长度。具体代码可以查看力扣原题300:最长递增子序列
刚过完考试周八股都忘得差不多了,第一次面试,拷打1小时八股。面试官人挺好的,每次答完会给反馈,我延伸也不会打断我。答出来80%(jvm调优这种根本没想到实习会问),算法也a了。
面完之后两个工作日挂,后面再投其他的岗位直接简历挂,说好的ks无限复活呢?