集体状况
- 学历:二本
- 工作年限:2 年半
- 面试后果:拿到了字节、拼多多、美团、滴滴、欧科云链 …. 等公司的 offer
面试筹备
温习
你信我,真学习还得看书,看书能让你的常识体系更加健全。
当然,平时也能够看一些大佬的文章裁减一下知识库。
我看过的 Java 相干的书单如下:
- Java:《Java 并发编程的艺术》、《Java 并发编程实战》
- JVM:《深刻了解 Java 虚拟机》第三版、《深刻 Java 虚拟机:JVM G1GC 的算法与实现》、《新一代垃圾回收器 ZGC 设计与实现》、美团技术团队相干 JVM 的文章、R 大相干 JVM 文章
- MySQL:《MySQL 技术底细:InnoDB 存储引擎》、《高性能 MySQL》、《MySQL 实战 45 讲》、《从根儿上了解 MySQL》、《从零开始带你成为 MySQL 实战优化高手》
- Redis:《Redis 设计与实现》、《Redis 开发与运维》、水滴与银弹Redis 系列文章
- Kafka:半兽人博客、《Apache Kafka 实战》
- Zookeeper:《从 Paxos 到 Zookeeper:分布式一致性原理与实际》
- 架构:《凤凰架构》、《畛域驱动设计:软件外围复杂性应答之道》
还有一个点是,看书的时候能够尝试记一下笔记,这样效率会高一些,不至于看完就遗记了。
下面提到的书籍和文章,开源局部的后盾回复“书籍”自取就行,我整顿的局部思维导图也在外面,有趣味也能够看一看。
没有开源的书籍,我倡议能够反对一下原创,去买一下实体书或者对应的课程。
算法
算法的话,没有那么多高超的技巧,LeetCode 前 200 道重复刷就行了,应酬社招入不敷出。
我只刷了 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+DMA Scatter/Gather。
- 发散:深刻后再发散,聊一下为什么 RocketMQ 写日志用到了零拷贝,然而 Kafka 写日志的时候不必零拷贝。
深刻是展示你对技术的理解水平,发散是展现你的视线宽度。
答复完一个问题之后,能够小小的总结一下,这样不至于你一个人在那里讲的云里雾里,让面试官都找不到你想要表白的重点了。
编程环节
如果你的工作年限不是太长,技术探讨环节过后个别会有一个编程环节(这个环节也有可能会放到技术探讨之前)。
编程题分为两种,一种是算法题,一种是语言技巧题。
算法题可能大家都能了解,像什么“两个线程穿插打印 A 和 B”、“手写单例模式”、“手写一个简略工厂设计模式”就属于语言技巧题。
算法题下面提过了,狂刷就行;语言技巧题也就那几个,背一下就好。
反诘环节
集体认为,反诘环节没啥用,基本就不能扭转整个面试后果。
所以我个别就固定两个问题:
- 我面试的这个岗位须要用到哪些技术栈?
- 我面试的这个岗位的最大挑战是什么
面经
面经奉上,不是很全,心愿有帮忙。
顺丰
- HashMap,扩容过程,怎么解决哈希抵触?
- 聊了一篇之前写过的 MySQL 的一篇博客,讲讲 MySQL 慢 SQL 优化思路?解决流程,应该从哪些方面思考?
- APM,怎么监控,原理是什么?Java Agent 理解过吗?
- G1,最大的特点,标记位图,卡表卡页,SATB。
- 介绍 TiDB,什么是分布式数据库?和 MySQL 比优缺点是什么?
- 怎么做数据冷热拆散?怎么做分库分表?为什么要用 ES?
- 分布式事务几种实现形式,讲讲本地音讯表、尽最大致力告诉、TCC。你们选用的是什么?AT 有什么问题?
- 报表 DSL 优化,享元模式优化过程,优化成果怎么样?
- 单机和微服务的区别,微服务有什么问题?数据一致性问题怎么解决?幂等问题怎么解决?
- 当初负责的零碎分为几个模块?如何划分?怎么治理?
- MQ 应用场景有哪些?在我的项目中具体哪些地方用到了?
- MQ 音讯发送不在 MySQL 事务中如何保障一致性?
- Kafka 四个选举,Controller 选举、Partition leader 选举、GroupCoordinator 选举、生产组协调器选举。整体设计问题,应用场景,流量布局怎么做的?
- 缓存应用的具体场景,一致性问题,缓存应用常见问题有哪些?
- 熔断和降级的区别,具体应用场景有哪些?
- QPS 和 TPS 的区别是什么?你们零碎的最大 QPS 是多少?QPS 大了会有什么问题,怎么解决?
- 如何设计一个 RPC 框架?须要思考哪些点?
- 有没有关注新技术?log4j2 问题关注没有?能简略介绍一下吗?
总结:面试难度偏低,总监面根本是聊一下场景设计问题,面试体验很好,总监特地尊重人,强烈好评。待遇还行。
拼多多
- 介绍本人做过的最称心的一个我的项目
- 介绍 TiDB、RocksDb、levelDB、LSM 树、SSTable。
- XXL-Job 二次分片怎么做的?有些什么问题?怎么去优化的?
- HashMap 的位操作,HashSet 的 contains 办法复杂度是多少,红黑树简略讲一下?
- byte[] a = new byte[10 * 1024]内存调配过程?多大的对象间接进入老年代?通过什么参数配置?
- 介绍 TLAB,PLAB,CAS 调配。
- 为什么要指针压缩,为什么能指针压缩?原理是什么?
- 类加载过程?类隔离理解过吗?
- 多态和重载的底层实现原理,字节码层面的理解过吗?
- Springboot 主动拆卸,SPI 原理讲一下?
- 拦截器和过滤器的区别?应用场景?
- Spring 事务实现原理,Spring 的 ACID 如何实现的?如果让你用 JDBC 实现事务怎么实现?
- MySQL 的锁,表级锁是哪一层的锁?行锁是哪一层的锁?
- MySQL 索引?B+ 树?主键索引每一个节点的大小?一个 page 多大?如果一条数据大于 16KB 怎么存?text 最多存多少数据?行溢出问题?数据存储格局有哪些?溢出页如何治理?
- Redis ssd,Redis 内存空间优化的点,embstr 和 row、intset、ziplist。
- Kafka 的服务端的物理存储架构是什么?零拷贝,mmap,sendfile、DMA gather。
- 你做的计划怎么让他人服气?要思考哪些点?你是怎么做的?有哪些你感觉能够改良的中央?
- 如果零碎流量忽然回升 10 倍,怎么解决?100 倍呢?
- 白板编程:单例模式,为什么要加 volatile
- 白板编程:用栈实现一个 线程平安、高效的队列
- 白板编程:二叉树两个节点的间隔
总结:一面难度较高,会始终诘问问到你不会为止,后几轮的面试偏业务和设计,比拟轻松。待遇拉满。
美团
- 多少个服务,多少台机器?K8S,怎么做到隔离?
- 服务之间的数据一致性怎么做?业务上怎么保障?
- TCC?二阶段提交,三阶段提交?
- Synchronized,偏差锁聊了很久聊到了源码,降级过程,Synchronized 的 JVM 源码?(面试官对 JVM 很感兴趣)
- 平安点,平安点的作用?一些 JVM 源码(之前的文章写过,面试官和感兴趣)
- 垃圾回收算法;PS+PO,CMS 为什么要用标记革除算法?CMS 的前身,R 大的文章。
- ZGC,聊到了彭寒成的《新一代垃圾回收器 ZGC 设计与实现》和美团技术团队的文章。
- G1,聊到了中村成洋的《深刻 Java 虚拟机:JVM G1GC 的算法与实现》。
- 写屏障和读屏障的区别是什么?
- JMV 优化过程,成果。为什么要降级垃圾收集器?
- 介绍一下 Spring IOC,注解和 XML 两种形式有什么区别?后置处理器,扩大点有什么用?在我的项目中有用到过吗?
- MySQL 的 binlog、redo log、undo log 写入过程?刷盘机制和参数设置。MVCC 机制理解吗?
- 遇到的死锁问题?惟一键抵触导致的死锁问题,MySQL 为什么要这么设计?隐式锁是什么理解吗?
- 还理解 MySQL 的哪些锁?间隙锁、临检锁 …..
- ZK 的选举过程是怎么样的?如果选举过程中网络故障怎么办?ZAB 和 RAFT 的最大区别是什么?
- Redis 用的 Gossip 协定有哪些具体音讯?流言流传,为什么要去中心化?有哪些优缺点?
- Redis 分布式锁和 ZK 分布式锁的比拟。AP 和 CP,CAP 实践讲一下?
- Kafka 的劣势是什么?RocketMQ 提早队列怎么做的?如果让你优化你会怎么做?Kafka 能实现提早队列吗?
- Kafka 能保证数据一条都不失落吗?为什么?业务上丢数据了怎么办?
- 白板编程:顺时针打印矩阵
总结:美团的面试官很喜爱问并发编程和 JVM,一面始终在聊这些货色,后几轮的面试偏业务和场景问题,比拟轻松。
面试官很尊重人,还加了面试官的微信,起初面试官还给我打电话要我去美团,因为有其余抉择了就拒掉了,祝好!
字节
略
总结:算法难度拉满,一轮一道算法,因为面的是 GO 岗位,对根底要求比拟高,没有问太多 Java 的知识点。待遇不错。
58 团体
- MySQL 迁徙到 TiDB 做了哪些工作,自增主键,数据量多大?
- TiDB 的性能问题,做了哪些调研?TP90、TP95 是多少。
- TiDB 上线步骤是怎么样?怎么做到数据不失落?怎么保障可靠性?
- XXL-Job 怎么封装的?工作跑失败了怎么办?
- DAG 是如何实现的?二次分片怎么做的?
- Redis 应用场景、缓存什么数据?怎么保证数据一致性?
- 还理解 Redis 哪些常识、Redis 的劣势、CP 还是 AP?CAP 实践。
- Redis 存储数据须要留神哪些问题?热 key 问题、大 key 问题怎么解决?
- Redis 分布式锁、红锁。红锁有什么问题?
- 介绍 SpringBean 创立过程、AOP 实现原理?
- BeanFactory 和 FactoryBean 的区别?
- Spring 是怎么解决循环依赖的?Spring 解决构造方法注入的循环依赖了吗?解决多例下的循环依赖了吗?
- 动静代理,JDK 动静代理和 CGlib 动静代理的区别?Spring 是如何选用的?怎么配置?
- 如何做降级的?如何做限流?
- 负载平衡算法有哪些?自适应负载平衡怎么做的?有什么问题?怎么优化的?
- Java 的汇合都有哪些,都有什么特点?
- HashMap、ConcurrentHashMap 的区别?扩容过程是怎么样的?
- 介绍 AQS、CountDownLatch、Semaphore、volatile、synchronized
- 线程池、自定义线程池、自定义回绝策略有理解过吗?什么场景用?
总结:面的是风控部门,老牌公司了,面试难度较低,钱也给的少。
滴滴
- 过程和线程的区别是什么?过程之间怎么通信的?线程之间呢?
- HTTPS 和 HTTP 比照;CA 数字证书;对称加密非对称加密过程?
- 常见的加密算法有哪些?
- MySQL 测试,TiDB 测试,如何做到平滑迁徙?如何保证数据不失落?
- 工作调用核心怎么做的?负载平衡?怎么收集执行器的 CPU 和内存应用状况?工作分片是怎么做的?
- 工作幂等性革新?ZK 怎么部署的,几台机器,挂了一台怎么办?
- ZAB 协定,ZK 选举过程,ZXID 的构造是怎么样的?ZXID 有什么用?
- Redis 的 String 底层构造,hash 底层构造,rehash 过程是怎么样的?
- Redis 的 AOF 和 RDB 区别,能配合应用吗?热 key 问题和大 key 问题怎么解决?
- Kafka 的 log,index,稠密索引。零拷贝,mmap,sendfile、DMA gather
- Kafka rebalance 策略,具体过程。GroupCoordinator 选举、生产组协调器选举过程?kafka 默认 topic 干什么用的?
- Spring 的循环依赖怎么解决的,为什么须要加个三级缓存,二级不行么?
- Springboot 有什么特点,理解 springboot 的主动拆卸原理么?
- 写了一道 LeetCode 原题,替换链表节点。
总结:面的是网约车部门,次要语言是 GO,面试体验不错,面试官比拟尊重人,钱给的还行。
欧科云链
- QUIC/HTTP3 理解吗?
- 用笔画 MySQL 一条记录的入库过程,写日志过程,日志两阶段提交?
- JVM 调优过程?怎么发现 JVM 的问题的?怎么做预警解决?
- Minor GC 与 Full GC 的触发机制是什么?
- Eden 和 Survivor 比例能够调整么,参数是什么?还用到了哪些参数?
- 介绍 TiDB 和 MySQL 的迁徙过程?遇到了些什么问题?怎么解决的?
- 理解 RocksDb 吗?levelDB、LSM 树、SSTable?
- Paxos 算法理解吗?介绍 RAFT 和 ZAB,以及它们之间的区别?会有脑裂问题吗?为什么?
- Kafka 音讯的写入过程简略介绍一下,Kafka 为什么这么快?
- Kafka 几种选举过程简略介绍一下?
- Kafka 高水位理解过吗?为什么 Kafka 须要 Leader Epoch?
- Netty 用到过吗?讲讲 reactor。Netty 的空轮询 bug 有理解吗?
- 讲讲 BIO、NIO、AIO 的区别?
- Dubbo 的服务发现是怎么做的?
- Redis 的几种数据结构,底层别离是怎么做的?用 Redis 缓存什么数据?怎么更新数据?怎么淘汰数据?
- 缓存和数据库一致性问题怎么解决?为什么要删缓存而不是更新缓存?删缓存删失败了怎么办?
- 有一个蕴含 100 亿个 URL 的大文件,假如每个 URL 占用 64B,请找出其中所有反复的 URL。
- 给了一张纸,下面有一段并发的代码,问执行后果是什么,考的是 volatile。
总结:面的是数字货币交易系统,去现场面的试,画了很多架构图。面试体验很好,还加了面试官的微信。待遇不错,而且能够居家办公。
京东
- 介绍一下你做的我的项目?
总结:这个面试官放了我两次鸽子,前面忽然打电话过去,我匆匆忙忙接电话,介绍完我的项目之后,他轻易问了几个问题就完结了,整个过程不超过 10 分钟。可能是因为我不是东哥的兄弟?
后果
说一下后果吧,除了京东,其余的都拿到了口头 offer。
至于为什么没有面阿里和腾讯,因为那个时候阿里和腾讯在进行财年清理,锁 HC 了,也就没有面了。
至于为什么字节的面试题没写,懂得都懂,能够私下交换。
最初,祝大家都能成为 offer 收割机!
作者介绍:某大厂后端工程师,公众号【CoderW】,玩过前端,搞过 Java、Python 和 C ++,当初在深圳写 Golang。一个热爱生活、喜爱满仓炒股、幻想是宇宙核心买房的打工人。