当前位置: 首页 > 后端技术 > Java

社招两年半10个公司28轮面试面经(含字节、拼多多、美团、滴滴......)

时间:2023-04-01 17:51:52 Java

社招两年半,10家公司28轮面试(包括字节,拼多多,美团,滴滴……):拿到了字节,拼多多,美团,滴滴,欧客云联……等offer面试公司。相信我,你必须要读书才能真正地学习,而读书可以让你的知识体系更加完整。当然你也可以看一些大佬的文章来扩充自己的知识面。我看过的Java相关书籍列表如下:Java:《Java 并发编程的艺术》、《Java 并发编程实战》JVM:《深入理解 Java 虚拟机》第三版、《深入 Java 虚拟机:JVM G1GC 的算法与实现》、《新一代垃圾回收器 ZGC 设计与实现》、美团技术团队JVM相关文章、以及JVM相关R大学篇MySQL:《MySQL 技术内幕:InnoDB 存储引擎》、《高性能 MySQL》、《MySQL 实战 45 讲》、《从根儿上理解 MySQL》、《从零开始带你成为 MySQL 实战优化高手》Redis:《Redis 设计与实现》、《Redis 开发与运维》、水滴和银弹Redis系列文章Kafka:半兽人博客,《Apache Kafka 实战》Zookeeper:《从 Paxos 到 Zookeeper:分布式一致性原理与实践》架构:《凤凰架构》,《领域驱动设计:软件核心复杂性应对之道》还有一点就是看书的时候可以尝试做笔记,这样效率会高一些,看完也不会忘记.上面提到的书籍和文章,开源部分后台可以回复“书籍”即可领取。我整理的一些思维导图也在里面。如果你有兴趣,也可以看看。如果没有开源书籍,我建议大家可以支持原创,购买实体书或者相应的课程。在算法算法方面,没有那么多精湛的技巧。反复刷前200个LeetCode就够了,应付社招绰绰有余。只刷了170题,面试了十几家大公司。大部分算法题都是原题。刚开始刷牙的时候会很痛。坚持了几天,没有想法就看答案。看完答案,继续写代码。如果您不会编写代码,请继续阅读答案。至于简历,我从大学毕业就一直在用超级简历:https://www.wondercv.com/,我觉得很有用。至于简历怎么写,我不是专家,不说花里胡哨的东西,给个简历模板,仅供参考。提一点,你写的简历就是画一个知识范围,然后让面试官从题库中选择题目。自己抽到的知识点自己都不知道,那面试肯定没把握。因此,你必须对简历上的每一个字负责,熟悉你写在简历上的每一个技术点。面试时的自我介绍自我介绍是一份浓缩的简历。没必要说些无意义的话。面试官不关心你是喜欢打篮球还是喜欢唱歌。你只需要描述你做过的最令人惊奇的事情,就足以讲述已经解决的最复杂的问题。例如:面试官你好,我叫CoderW,19年毕业于哈佛大学。毕业后一直从事背景研发相关工作。19-22年在谷歌中间件团队工作,主要负责xx中间件的设计和开发。期间完成了xxx的改造优化,整体性能提升了80%。22年去了微软电子商务团队。负责微软电子商务系统的设计,两年时间完成了微软电子商务从0到1的搭建过程。自上线以来,日活已达10亿,系统平均QPS达到1W。本次应聘贵公司中间件团队高级专家职位。在业务方向和技术栈上,我个人认为我的匹配度是比较高的。非常希望能加入贵公司,共同建设xx系统。谢谢!技术讨论在自我介绍之后,通常会有一个技术讨论环节。这个环节通常持续30到50分钟,是整个面试中最重要的部分。1、不卑不亢。请记住,本次会议是技术讨论会议,而不是问答会议。好的技术讨论一定是来来回回的,而不是片面的你要我回答。在尊重面试官的前提下,可以对面试官的一些结论进行质疑和讨论。在我看来,敢于提出自己的不同观点是加分项。如果遇到不尊重你甚至侮辱你的面试官,我建议你直接索要简历。人人都是工人,装什么?2.真诚。有些面试官喜欢问一些冷门知识来验证应聘者的技术深度。这是很正常的事情。你不必太紧张。要真诚。是的,没关系。不要自作聪明强加,真诚永远是第一位的!3.深入发散。讲一个自己熟悉的知识点,一定要把握好。可以尝试深入发散,让面试官慢慢进入你的节奏。例如,在谈论Kafka零副本时。深入:可以再深入一点,讲sendfile+DMAScatter/Gather。Divergence:深化后发散,说说为什么RocketMQ写日志时使用零拷贝,而Kafka写日志时不使用零拷贝。深入是展示你对技术的理解,发散是展示你视野的宽度。回答完一个问题后,可以做一个小总结,这样就不会自己一个人云里雾里,面试官找不到你想表达的重点。Programmingsession如果你的工作经验不是太长,通常在technicaldiscussionsession之后会有一个programmingsession(这个session也可以放在technicaldiscussion之前)。编程题分两种,一种是算法题,一种是语言技能题。算法题大家可能都懂,比如“双线程交叉打印A和B”、“手写单例模式”、“手写一个简单的工厂设计模式”都是语言技能题。算法题上面说了,随便刷一下;语文题只有几道,背一下就可以了。反问环节,个人认为反问环节没什么用,根本改变不了整个面试结果。所以我一般固定两个问题:我面试的职位需要用到什么技术栈?我面试的职位最大的挑战是什么?它不是很完整。我希望它能有所帮助。SFHashMap,扩容过程中hash冲突如何解决?谈谈我之前写的一篇MySQL博客,谈谈MySQL慢SQL优化思路?解决过程中应该考虑哪些方面?APM,如何监控,原理是什么?了解Java代理?G1,最大的特点,标记位图,卡表卡页,SATB。介绍TiDB,什么是分布式数据库?与MySQL相比有哪些优势和劣势?如何分离冷热数据?分库分表怎么办?为什么要使用ES?分布式事务的几种实现方式,讲一下本地消息表,besteffortnotification,TCC。你选择了什么?AT有什么问题?报告DSL优化,享元模式优化过程,优化效果如何?单机和微服务的区别,微服务有什么问题?如何解决数据一致性问题?如何解决幂等问题?现在系统负责多少个模块?怎么分?如何治理?MQ的使用场景有哪些?它在项目中的什么地方使用?MQ消息发送不在MySQL事务中如何保证一致性?Kafka有四种选举:Controller选举、Partitionleader选举、GroupCoordinator选举和consumergroupcoordinator选举。你如何处理整体设计问题、使用场景和流量规划?缓存使用的具体场景、一致性问题、缓存使用的常见问题有哪些?fuse和downgrade有什么区别,具体的使用场景是什么?QPS和TPS有什么区别?您系统的最大QPS是多少?QPS过大会出现什么问题,如何解决?如何设计一个RPC框架?需要考虑哪些点?你关注过新技术吗?log4j2与您有关吗?能简单介绍一下吗?总结:面试难度比较低。采访导演基本上就是聊场景设计的问题。面试体验非常好。导演非常恭敬,给予高度评价。治疗没问题。拼多多介绍了TiDB、RocksDb、levelDB、LSMtree、SSTable,是我做过最满意的项目之一。XXL-Job二次分片是如何工作的?怎么了?如何优化呢?HashMap的位操作、HashSet的contains方法、红黑树的复杂度是多少?byte[]a=newbyte[10*1024]内存分配过程?多大的对象直接去老年代?通过什么参数配置?介绍TLAB、PLAB、CAS分配。为什么指针压缩,为什么指针可以压缩?原理是什么?类加载过程?你了解阶级隔离吗?你了解过字节码层面的多态和重载的底层实现原理吗?springboot自动组装,SPI的原理是什么?拦截器和过滤器有什么区别?使用场景?Spring事务实现原理,Spring的ACID是如何实现的?如果使用JDBC,如何实现事务?MySQL锁,哪一级锁是表级锁?行锁是哪一级锁?MySQL索引?B+树?每个节点的主键索引大小?一个页面有多大?一条大于16KB的数据如何保存?文本最多可以存储多少数据?行溢出问题?数据存储格式有哪些?如何管理溢出页面?Redisssd、Redis内存空间优化点、embstr和row、intset、ziplist。Kafka的服务器的物理存储架构是怎样的?零拷贝、mmap、sendfile、DMA收集。你如何用你的计划说服别人?应该考虑哪些要点?你怎么做呢?您认为有什么可以改进的地方吗?系统流量突然增加10倍怎么办?100次呢?白板编程:单例模式,为什么要加volatile白板编程:用栈实现线程安全高效的队列接下来几轮面试偏业务偏设计,相对容易。待遇满分。美团有多少服务和机器?K8S,如何实现隔离?服务之间如何做数据一致性?如何保障业务?台积电?两阶段提交,三阶段提交?同步,偏向锁。聊了半天,聊到源码,升级过程,JVMforSynchronized的源码?(面试官对JVM很感兴趣)Safepoint,安全点的作用?一些JVM源码(上一篇写的,面试官感兴趣)垃圾回收算法;PS+PO,为什么CMS要用标记清除算法?CMS的前身,RBigArticles。ZGC,聊了彭汉城的《新一代垃圾回收器 ZGC 设计与实现》和美团技术团队的文章。G1,我们聊到了中村的《深入 Java 虚拟机:JVM G1GC 的算法与实现》。写屏障和读屏障有什么区别?JMV优化流程,效果。为什么要升级垃圾收集器?介绍SpringIOC,注解和XML有什么区别?后处理器,扩展点是做什么用的?有在项目中使用过吗?MySQL的binlog、redolog、undolog的写入过程?刷盘机制及参数设置。你了解MVCC机制吗?遇到死锁问题?唯一键冲突导致的死锁问题,MySQL为什么要这样设计?你明白什么是隐式锁吗?还知道MySQL中有哪些锁?间隙锁、临时校验锁……ZK的选举过程是怎样的?如果在选举过程中网络出现故障怎么办?ZAB和RAFT最大的区别是什么?Redis使用的Gossip协议具体有哪些消息?谣言四起,为什么要去中心?优缺点都有什么?Redis分布式锁和ZK分布式锁的比较。AP和CP,说说CAP理论?卡夫卡有什么优势?RocketMQ延迟队列是怎么实现的?如果让你优化,你会怎么做?Kafka可以实现延迟队列吗?Kafka能保证数据不丢失吗?为什么?业务丢失数据怎么办?白板编程:顺时针打印矩阵总结:美团的面试官喜欢问并发编程和JVM,一直在聊这些东西。接下来几轮面试比较宽松的是业务和场景的问题。面试官很尊重,加了面试官的微信。后来面试官给我打电话,让我去美团,他拒绝了,因为他有别的选择。祝你好运!字节小结:算法难度全,每轮一个算法,因为面试是GO位,基础要求比较高,也没有问太多关于Java的知识点。治疗效果很好。58群MySQL迁移TiDB做了哪些工作,自增主键,多少数据?TiDB性能问题,做了哪些研究?TP90和TP95多少钱。TiDB上线步骤是什么?如何防止数据丢失?如何保证可靠性?XXL-Job是如何打包的?任务失败怎么办?DAG是如何实现的?二次分片怎么做?Redis使用场景,缓存了哪些数据?如何保证数据的一致性?关于Redis,你了解哪些知识,Redis、CP还是AP的优势?上限理论。Redis存储数据需要注意哪些问题?如何处理热键问题和大键问题?Redis分布式锁,红锁。红锁有什么问题?介绍一下SpringBean的创建过程和AOP实现原理?BeanFactory和FactoryBean的区别?Spring是如何解决循环依赖的?Spring是否解决了构造函数注入的循环依赖?多实例下的循环依赖问题解决了吗?动态代理,JDK动态代理和CGlib动态代理的区别?Spring是如何选择的?如何配置?降级怎么做?如何做限流?负载均衡算法有哪些?自适应负载平衡如何工作?问题是什么?如何优化呢?Java的集合有哪些,它们有什么特点?HashMap和ConcurrentHashMap有什么区别?扩容过程是怎样的?你了解AQS、CountDownLatch、Semaphore、volatile、同步线程池、自定义线程池、自定义拒绝策略吗?用于什么场景?总结:面试的是风控部,老牌公司,面试难度比较低,给的钱也少。滴滴进程和线程有什么区别?进程如何通信?线程之间呢?HTTPS和HTTP的比较;CA数字证书;对称加密非对称加密过程?常见的加密算法有哪些?MySQL测试,TiDB测试,如何实现平滑迁移?如何保证数据不丢失?任务呼叫中心是怎么做的?负载均衡?如何收集执行器的CPU和内存使用率?任务分片是如何完成的?任务幂等性改造?ZK是怎么部署的,多少台机器,一台挂了怎么办?ZAB协议,ZK选举过程,ZXID的结构是什么?ZXID是做什么用的?Redis的String底层结构和hash底层结构是怎样的,rehash过程是怎样的?Redis的AOF和RDB的区别,可以一起用吗?如何解决热键问题和大键问题?Kafka的日志、索引、稀疏索引。零拷贝、mmap、sendfile、DMAgatherKafkarebalance策略,具体流程。GroupCoordinator选举,消费者组协调者选举过程?kafka的默认主题是什么?如何解决Spring的循环依赖,为什么要加三级缓存,二级缓存不行?springboot有什么特点,你了解springboot的自动组装原理吗?我写了一道LeetCode原题,交换链表节点。总结:面试网约车部门,主要语言是GO。面试体验不错,面试官比较尊重,钱还可以。你了解欧凯云链QUIC/HTTP3吗?用笔画出一个MySQL记录存储过程、日志写入过程、日志两阶段提交?JVM调优过程?您是如何发现JVM的问题的?如何做好预警?MinorGC和FullGC的触发机制是什么?Eden和Survivor的比例可以调整吗?参数是什么?使用了哪些其他参数?介绍一下TiDB和MySQL的迁移过程?你遇到了什么问题?你是怎么解决的?知道RocksDb吗?levelDB、LSM树、SSTable?你了解Paxos算法吗?介绍RAFT和ZAB,它们的区别?会不会出现脑裂问题?为什么?下面简单介绍一下Kafka消息的写入过程。为什么卡夫卡这么快?简单介绍一下Kafka的几个选举过程?你知道Kafka的高水位吗?为什么Kafka需要LeaderEpoch?你用过Netty吗?谈论反应堆。你知道Netty的空轮询bug吗?说说BIO、NIO、AIO的区别?Dubbo的服务发现是如何工作的?Redis的底层数据结构是如何工作的?Redis缓存了哪些数据?如何更新数据?如何消除数据?如何解决缓存和数据库的一致性问题?为什么要删除缓存而不是更新缓存?删除缓存失败怎么办?有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。给了一张纸,上面写了一段并发代码,问执行结果是什么,测试volatile。摘要:面试是关于数字货币交易系统的。去现场面试,画了很多架构图。面试体验很好,加了面试官微信。薪水不错,你可以在家工作。京东,可以介绍一下你们的项目吗?总结:这个面试官让我去了两次,然后突然给我打电话。我连忙接了电话。介绍完项目,他随便问了几个问题就结束了。整个过程不超过10分钟。或许是因为我不是东哥的弟弟?结果,让我们谈谈结果。除了京东,其余都是口头offer。至于为什么没有和阿里、腾讯面对面,因为当时阿里和腾讯都在做财年清算,HC被锁,所以没有面对面。至于字节为什么不写面试题,我都明白,可以私下交流。最后祝大家都能成为offer收割机!作者简介:大厂后端工程师,公众号【CoderW】,玩过前端,Java,Python,C++,现在深圳写Golang。一个热爱生活的打工仔,喜欢满仓炒股,梦想在宇宙中心买房子。