面试准备
简历
重点放在专业技能和项目经验两块
算法
这个该刷还是得刷 , 别偷懒 , 我个人感觉刷完下面几个已经够了 , 大家可以根据自己的基础情况选择
1. 剑指 Offer:https://www.nowcoder.com/ta/coding-interviews
2. 刷 Leetcode, 刷 Leetcode, 刷 Leetcode! 重要的事情说三遍 ,Leetcode 前 200 道
3. 经典排序算法 :https://blog.csdn.net/qq_35508033/article/details/109399281
Java 并发编程
https://ifeve.com/java-concurrency-cookbook/
JVM: 深入理解 Java 虚拟机
https://blog.csdn.net/belongtocode/article/details/104234810
Redis:Redis 设计与实现 ,Redis 开发与运维
https://blog.csdn.net/a724888/article/details/80878882
MySQL: 高性能 MySQL,MySQL 技术内幕
https://blog.csdn.net/zhuguang10/article/details/97652295
SpringBoot 和 SpringCloud:
https://blog.didispace.com/
Kafka:Apache Kafka 实战
设计模式 : 大话设计模式 , 设计模式之禅
分布式 : 从 Paxos 到 Zookeeper 分布式一致性原理与实践
需要书籍的 pdf 文档可以关注我的公众号 , 月伴飞鱼 , 回复 666 获取
项目经验
社招面试项目很重要 , 不光是你项目本身的技术复杂度 , 还有业务复杂度 , 你本身在项目中担任的什么角色 , 遇到过什么问题 , 瓶颈在哪 , 怎么解决的 , 这几个问题是非常重要的 , 很多公司到最后基本上都是围绕着你的项目在问 , 给面试官讲明白你的项目是必须具备的能力
总结下社招面试问项目最主要的问题套路 :
1. 你项目为什么这么设计 , 你这样设计有什么好处 , 解决了什么问题 , 会产生什么问题 , 还有什么可以优化的
2. 这么设计有什么瓶颈吗 , 遇到了什么问题 , 有什么改善的方案
3. 项目遇到的难点 , 技术挑战 , 你是怎么解决的 , 为什么用这种方式解决 , 还有更好的方式么
4. 根据你简历上提到的具体功能去扣细节
面试技巧
1. 面试得自信且谦虚 , 声音自信 , 面试表现谦虚 , 得给面试官一种你啥都会 , 很稳的感觉(实际内心很慌 ), 然后语言表达流畅 , 吐字清晰 , 回答问题也要有逻辑性 , 不能支支吾吾半天说不明白 , 面试官都听不懂 , 这就很尴尬了 , 这个可以自己多练习一下
2. 面试本质是一个自我优势展示的过程 , 不要让面试官问一句自己回答一句 , 主动抛出一些可能的点让面试官来主动问你 , 还有就是不会的问题就说不会 , 这个没关系的 , 千万别瞎说
3. 不要眼高手低 , 不少小伙伴看面经觉得自己啥都会 , 但是会与面试过程中能清晰有层次的说出来是两回事 , 费曼学习法可以了解一下 , 举个例子 : 比如 sychronized 的原理 , 能不能说出点面试官眼前一亮的东西 , 这还是不容易的 , 其实面试主要是证明你比别人更有技术的深度 , 广度 , 不然都是背八股文 , 那面试官看不出你有什么不一样的 , 这个面试过的概率就大大降低了
个人建议 , 面试没准备好 , 不要随便面试 , 一些大厂都会有面试评价记录 , 太多差评影响以后的面试 , 同时面完之后要多总结 , 复盘 , 整理知识点 , 查漏补缺
面试最后
面试结束时问面试官什么问题
我一般会问 :
我面试的岗位的具体工作是什么
使用的技术栈有哪些
面试总结
阿里的面试更倾向于实用性 , 基本是从各种场景出发 , 来给你一个场景 , 让你来解决实际的问题 , 那么在解决问题的过程中 , 对于各种知识的应用就是亮点了
头条更看重计算机基础 , 算法 , 以及对各种中间件的了解
面试也有不少的运气成分的 , 毕竟每个面试官的侧重点可能不一样 , 大家放平心态就好
学习建议
学习要形成自己的知识体系 , 不要天天盯着别人的面经 (当然 , 我的面经可以看 , 哈哈) 做碎片化学习 , 面经只是辅助作用 , 查漏补缺的 , 一旦你的知识体系有了 , 很多问题都能举一反三 , 这时候面试就很稳了
个人技术博客
公众号 : 月伴飞鱼
掘金主页 :https://juejin.cn/user/2946346892396120
大家都可以关注下 , 不定期分享干货
最后大家如果有问题可以直接私信我 , 有问必答 , 祝大家都能拿到心仪的 offer, 前程似锦
下面是热乎乎的面经
注意 : 有些面试的题目比较少 , 因为有些面试题因为会被多个公司重复问 , 就不重复写了
美团
一面
1. 线程安全的类有哪些 , 平时有使用么 , 用来解决什么问题
2.mysql 日志文件有哪些 , 分别介绍下作用
3. 你们项目为什么用 redis, 快在哪 , 怎么保证高性能 , 高并发的
4.redis 字典结构 ,hash 冲突怎么办 ,rehash, 负载因子
5.jvm 了解哪些参数 , 用过哪些指令
6.zookeeper 的基本原理 , 数据模型 ,znode 类型 , 应用场景有哪些
7. 一个热榜功能怎么设计 , 怎么设计缓存 , 如何保证缓存和数据库的一致性
8. 容器化技术了解么 , 主要解决什么问题 , 原理是什么
算法 : 对于一个字符串 , 计算其中最长回文子串的长度
一面
1.redis 集群 , 为什么是 16384, 哨兵模式 , 选举过程 , 会有脑裂问题么 ,raft 算法 , 优缺点
2.jvm 类加载器 , 自定义类加载器 , 双亲委派机制 , 优缺点 ,tomcat 类加载机制
3.tomcat 热部署 , 热加载了解么 , 怎么做到的
4.cms 收集器过程 ,g1 收集器原理 , 怎么实现可预测停顿的 ,region 的大小 , 结构
5. 内存溢出 , 内存泄漏遇到过么 , 什么场景产生的 , 怎么解决的
6. 锁升级过程 , 轻量锁可以变成偏向锁么 , 偏向锁可以变成无锁么 , 自旋锁 , 对象头结构 , 锁状态变化过程
7.kafka 重平衡 , 重启服务怎么保证 kafka 不发生重平衡 , 有什么方案
8. 怎么理解分布式和微服务 , 为什么要拆分服务 , 会产生什么问题 , 怎么解决这些问题
9. 你们用的什么消息中间件 ,kafka, 为什么用 kafka, 高吞吐量 , 怎么保证高吞吐量的 , 设计模型 , 零拷贝
算法 1 : 给定一个长度为 N 的整形数组 arr, 其中有 N 个互不相等的自然数 1 -N, 请实现 arr 的排序 , 但是不要把下标 0∼N−1 位置上的数通过直接赋值的方式替换成 1∼N
算法 2 : 判断一个树是否是平衡二叉树
二面
1.Innodb 的结构了解么 , 磁盘页和缓存区是怎么配合 , 以及查找的 , 缓冲区和磁盘数据不一致怎么办 ,mysql 突然宕机了会出现数据丢失么
2.redis 字符串实现 ,sds 和 c 区别 , 空间预分配
3.redis 有序集合怎么实现的 , 跳表是什么 , 往跳表添加一个元素的过程 , 添加和获取元素 , 获取分数的时间复杂度 , 为什么不用红黑树 , 红黑树有什么特点 , 左旋右旋操作
4.io 模型了解么 , 多路复用 ,selete,poll,epoll,epoll 的结构 , 怎么注册事件 ,et 和 lt 模式
5. 怎么理解高可用 , 如何保证高可用 , 有什么弊端 , 熔断机制 , 怎么实现
6. 对于高并发怎么看 , 怎么算高并发 , 你们项目有么 , 如果有会产生什么问题 , 怎么解决
7. 项目介绍
算法 : 给定一个二叉树 , 请计算节点值之和最大的路径的节点值之和是多少 , 这个路径的开始节点和结束节点可以是二叉树中的任意节点
三面
项目介绍
算法 : 求一个 float 数的立方根 , 牛顿迭代法
什么时候能入职 , 你对岗位的期望是什么
你还在面其他公司么 , 目前是一个什么流程
阿里
一面
1.synchronized 原理 , 怎么保证可重入性 , 可见性 , 抛异常怎么办 , 和 lock 锁的区别 ,2 个线程同时访问 synchronized 的静态方法 ,2 个线程同时访问一个 synchronized 静态方法和非静态方法 , 分别怎么进行
2.volatile 作用 , 原理 , 怎么保证可见性的 , 内存屏障
3. 你了解那些锁 , 乐观锁和悲观锁 , 为什么读要加锁 , 乐观锁为什么适合读场景 , 写场景不行么 , 会有什么问题 ,cas 原理
4. 什么情况下产生死锁 , 怎么排查 , 怎么解决
5. 一致性 hash 原理 , 解决什么问题 , 数据倾斜 , 为什么是 2 的 32 次方 ,20 次方可以么
6.redis 缓存穿透 , 布隆过滤器 , 怎么使用 , 有什么问题 , 怎么解决这个问题
7.redis 分布式锁 , 过期时间怎么定的 , 如果一个业务执行时间比较长 , 锁过期了怎么办 , 怎么保证释放锁的一个原子性 , 你们 redis 是集群的么 , 讲讲 redlock 算法
8.mysql 事务 ,acid, 实现原理 , 脏读 , 脏写 , 隔离级别 , 实现原理 ,mvcc, 幻读 , 间隙锁原理 , 什么情况下会使用间隙锁 , 锁失效怎么办 , 其他锁了解么 , 行锁 , 表锁
9.mysql 索引左前缀原理 , 怎么优化 , 哪些字段适合建索引 , 索引有什么优缺点
10. 线上遇到过慢查询么 , 怎么定位 , 优化的 ,explain,using filesort 表示什么意思 , 产生原因 , 怎么解决
11. 怎么理解幂等性 , 有遇到过实际场景么 , 怎么解决的 , 为什么用 redis,redis 过期了或者数据没了怎么办
二面
1.hashmap 原理 ,put 和 get, 为什么是 8 转红黑树 , 红黑树节点添加过程 , 什么时候扩容 , 为什么是 0.75, 扩容步骤 , 为什么分高低位 ,1.7 到 1.8 有什么优化 ,hash 算法做了哪些优化 , 头插法有什么问题 , 为什么线程不安全
2.arraylist 原理 , 为什么数组加 transient,add 和 get 时间复杂度 , 扩容原理 , 和 linkedlist 区别 , 原理 , 分别在什么场景下使用 , 为什么
3. 了解哪些并发工具类
4.reentrantlock 的实现原理 , 加锁和释放锁的一个过程 ,aqs, 公平和非公平 , 可重入 , 可中断怎么实现的
5.concurrenthashmap 原理 ,put,get,size, 扩容 , 怎么保证线程安全的 ,1.7 和 1.8 的区别 , 为什么用 synchronized, 分段锁有什么问题 ,hash 算法做了哪些优化
6.threadlocal 用过么 , 什么场景下使用的 , 原理 ,hash 冲突怎么办 , 扩容实现 , 会有线程安全问题么 , 内存泄漏产生原因 , 怎么解决
7. 垃圾收集算法 , 各有什么优缺点 ,gc roots 有哪些 , 什么情况下会发生 full gc
8. 了解哪些设计模式 , 工厂 , 策略 , 装饰者 , 桥接模式讲讲 , 单例模式会有什么问题
9. 对 spring aop 的理解 , 解决什么问题 , 实现原理 ,jdk 动态代理 ,cglib 区别 , 优缺点 , 怎么实现方法的调用的
10.mysql 中有一个索引(a,b,c), 有一条 sql,where a = 1 and b > 1 and c =1; 可以用到索引么 , 为什么没用到 ,B+ 树的结构 , 为什么不用红黑树 ,B 树 , 一千万的数据大概多少次 io
11.mysql 聚簇索引 , 覆盖索引 , 底层结构 , 主键索引 , 没有主键怎么办 , 会自己生成主键为什么还要自定义主键 , 自动生成的主键有什么问题
12.redis 线程模型 , 单线程有什么优缺点 , 为什么单线程能保证高性能 , 什么情况下会出现阻塞 , 怎么解决
13.kafka 是怎么保证高可用性的 , 讲讲它的设计架构 , 为什么读写都在主分区 , 这样有什么优缺点
了解 DDD 么 , 不是很了解
你平时是怎么学习的
项目介绍
三面
1. 线程有哪些状态 , 等待状态怎么产生 , 死锁状态的变化过程 , 中止状态 ,interrupt() 方法
2. 你怎么理解线程安全 , 哪些场景会产生线程安全问题 , 有什么解决办法
3.mysql 多事务执行会产生哪些问题 , 怎么解决这些问题
4. 分库分表做过么 , 怎么做到不停机扩容 , 双写数据丢失怎么办 , 跨库事务怎么解决
5. 你们用的 redis 集群么 , 扩容的过程 , 各个节点间怎么通信的
6. 对象一定分配在堆上么 ,JIT, 分层编译 , 逃逸分析
7.es 的写入 , 查询过程 , 底层实现 , 为什么这么设计
8.es 集群 , 脑裂问题 , 怎么产生的 , 如何解决
9.while(true)里面一直 new thread().start()会有什么问题
10.socket 了解么 ,tcp 和 udp 的实现区别 , 不了解 , 用的不多
11. 设计一个秒杀系统能承受千万级并发 , 如果 redis 也扛不住了怎么办
项目介绍
四面
1. 讲讲你最熟悉的技术 ,jvm,mysql,redis, 具体哪方面
2.new Object[100]对象大小 , 它的一个对象引用大小 , 对象头结构
3.mysql 主从复制 , 主从延时怎么解决
4. 怎么保证 redis 和 mysql 的一致性 ,redis 网络原因执行超时了会执行成功么 , 那不成功怎么保证数据一致性
5.redis 持久化过程 ,aof 持久化会出现阻塞么 , 一般什么情况下使用 rdb,aof
6. 线上有遇到大流量的情况么 , 产生了什么问题 , 为什么数据库 2000qps 就撑不住了 , 有想过原因么 , 你们当时怎么处理的
7. 限流怎么做 , 如果让你设计一个限流系统 , 怎么实现
8.dubbo 和 spring cloud 区别 , 具体区别 , 分别什么场景使用
9. 给了几个场景解决分布式事务问题
项目介绍
你觉得你们的业务对公司有什么实际价值 , 体现在哪 , 有什么数据指标么
五面
hr 面完后又来了一面 , 说是交叉面
1. 怎么理解用户态 , 内核态 , 为什么要分级别 , 有几种转换的方式 , 怎么转换的 , 转换失败怎么办
2. 怎么理解异常 , 它的作用是什么 , 你们工作中是怎么使用的
3. 你们用 redis 么 , 用来做什么 , 什么场景使用的 , 遇到过什么问题 , 怎么解决的
4.jvm 元空间内存结构 , 永久代有什么问题
5. 你平时开发中怎么解决问题 , 假如现在线上有一个告警 , 你的解决思路 , 过程
6. 你们为什么要用 mq, 遇到过什么问题么 , 怎么就解决的
你觉得和友商相比 , 你们的优势在哪
聊天 : 炒股么 , 为什么买 B 站 , 天天用 , 看好他
菜鸟
不知道为啥可以同时两个流程 , 可能真的缺人(想去阿里的大家抓紧机会)
算是给我 2 次选择机会了 , 面了几面(2 面只用了 11 分钟 , 哈哈), 主要问项目了
抖音
感觉头条不怎么问项目 , 或许是我项目太 low 了 , 比较喜欢问计算机基础和中间件知识
一面
1.http 请求头 ,expire,cache-control 字段 , 状态码 ,301,302,401,403
2.https 原理 , 数字签名 , 数字证书 , 非对称加密算法过程 , 有什么问题
3.tcp 连接 client 和 server 有哪些状态 ,time_wait 状态
4. 虚拟内存 , 虚拟地址和物理地址怎么转换 , 内存分段 , 内存分页 , 优缺点
5.linux 最多可以建立多少个 tcp 连接 ,client 端 ,server 端 , 超过了怎么办
6.eureka 原理 , 强一致性么 , 为什么 , 怎么保证强一致性 , 多级缓存怎么保证一致性 ,eureka 集群 , 宕机了服务还能调用么
7.hystrix 原理 , 半开状态知道么 , 具体的一个转换过程 , 它的隔离是怎么实现的
8.zookeeper 一致性保证 ,zab 协议原理 , 半数原则如果查询到另外一半呢 , 那 zookeeper 属于哪种一致性 , 强一致性么 , 还是最终一致性
9.zookeeper 选举机制 , 选举过程有什么问题
算法 : 最长不重复的连续子串
聊天 : 头条为什么用 go, 对 java 和 go 怎么看 , 愿意转 go 么
二面
1. 函数 a 调用函数 b 的过程 , 是怎么传参的
2.java 里面的函数调用有哪些 ,io 流里面有函数调用么
3.fork 函数 , 父子进程的区别 , 孤儿进程 , 僵尸进程会有什么问题 , 进程有哪些状态 , 进程间怎么同步 , 通信 , 消息队列 , 管道怎么实现的 , 进程调度算法 , 各有什么优缺点
4.dos 攻击 ,ddos 攻击 ,drdos 攻击 , 怎么解决 ,syn flood
5. 自旋锁 , 线程上下文切换的开销具体是什么 , 中断 , 有哪些中断 , 用户态和内核态切换过程
6. 一张大表怎么更改表的数据结构 , 字段 , 用 alter 会有什么问题 , 怎么解决呢 , 有什么好的方案 , 双写的话会有什么问题 , 还有其他方案么
7.redis 管道用过么 , 用来做什么 , 它的原理是 , 保证原子性么 , 和事务的区别 ,redis 事务保证原子性么
8.redis 强一致性么 , 怎么保证强一致性 , 有什么方案
9.kafka 怎么保证消息不丢失的
算法 : 找出所有相加之和为 n 的 k 个数的组合 , 组合中只允许含有 1 – 9 的正整数 , 并且每种组合中不存在重复的数字 , 输入: k = 3, x = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
三面
感觉面试官很忙 , 就问了几个电商场景的技术解决方案
算法 : 一个环上有 10 个点, 编号为 0 -9, 从 0 点出发, 每步可以顺时针到下一个点, 也可以逆时针到上一个点, 求: 经过 n 步又回到 0 点有多少种不同的走法
举例 :
如果 n =1, 则从 0 出发只能到 1 或者 9 , 不可能回到 0 , 共 0 种走法
如果 n =2, 则从 0 出发有 4 条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0, 其中有两条回到了 0 点 , 故一共有 2 种走法
快手
感觉像刷 kpi 的 , 一看 JD 发现招的资深研发工程师 , 我对快手的印象又不好了
一面
手写 hashmap( 卒 )
滴滴
一面
1. 排序算法了解哪些 , 快排 , 快排复杂度 , 优化 , 堆排序 , 建堆过程
2. 反射了解么 , 原理是什么
3.treemap 和 linkdedhashmap 区别 , 实现原理
4.jvm 类加载的过程讲讲 , 符号引用是什么 , 哪些情况会发生初始化
5.spring 的循环依赖 , 怎么解决的 , 为什么需要加个三级缓存 , 二级不行么
6.springboot 有什么特点 , 相比与 spring, 了解 springboot 的自动装配的一个原理么
7.kafka 支持事务么 , 你们项目中有使用么 , 它的原理是什么
8. 怎么统计一亿用户的日活 ,hyperloglog 有什么缺点 ,bitmap 不行么
算法 : 求一个环形链表的环的长度
二面
1.redis 的几种数据类型 , 你们用过哪些 ,zset 有用来做什么
2. 垃圾收集器 ,cms 垃圾收集过程 , 为什么停顿时间短 , 有什么缺点 ,concurrent mode failure 怎么办 , 内存碎片怎么解决 , 为什么不用标记整理法
3. 线程池原理 , 核心参数 , 线程数设置 , 参数动态调整后变化过程 ,Tomcat 线程池原理 , 常用的线程池 , 你们一般使用哪种 , 为什么 , 会有什么问题 , 线程抛异常怎么办 , 阻塞队列原理
4. 做过分库分表么 , 为什么要分库分表 , 会有什么问题 , 多少数据适合分库分表 , 跨库 , 聚合操作怎么做
项目介绍
算法 : 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
你对自己有什么规划 , 想学习什么技术 , 最近在看什么书
三面
1.nio 讲讲 , 实现原理 , 优缺点
2. 了解 netty 么 , 讲讲 netty 的设计模型 , 架构 , 使用场景
3.zookeeper 读写数据过程
项目介绍
京东
一面
1.tcp 和 udp 的区别 ,tcp 怎么保证可靠连接的 , 出现网络拥塞怎么解决
2.tcp 和 udp 的报文结构了解么
3. 给了一个业务场景写 sql 语句
4. 你们建表会定义自增 id 么 , 为什么 , 自增 id 用完了怎么办
5. 一般你们怎么建 mysql 索引 , 基于什么原则 , 遇到过索引失效的情况么 , 怎么优化的
6.jvm 内存结构 , 堆结构 , 栈结构 ,a+b 操作数栈过程 , 方法返回地址什么时候回收 , 程序计数器什么时候为空
7.redis 实现分布式锁 , 还有其他方式么 ,zookeeper 怎么实现 , 各有什么有缺点 , 你们为什么用 redis 实现
算法 : 返回一个树的左视图
二面
1.spring 你比较了解哪方面 , 讲讲 , 生命周期 ,bean 创建过程
2. 使用过事务么 , 遇到过事务失效的情况么 , 原因是什么
3.springboot 是怎么加载类的 , 通过什么方式
4. 什么对象会进入老年代 ,eden 和 survivor 比例可以调整么 , 参数是什么 , 调整后会有什么问题
5. 微信朋友圈设计 , 点赞 , 评论功能实现 , 拉黑呢 ,redis 数据没了怎么办
项目介绍
算法 : 给你两个非空的链表 , 表示两个非负的整数。它们每位数字都是按照逆序的方式存储的 , 并且每个节点只能存储一位数字。
请你将两个数相加 , 并以相同形式返回一个表示和的链表
三面
感觉面试官对 es 很熟悉 , 一直问 es 问题
1.es 倒排索引 , 原理 ,lucene, 分词 , 分片 , 副本
2.es 写数据原理 , 数据实时么 , 为什么不实时 , 会丢数据么 ,segment,cache,buffer,translog 关系
3.es 深度分页 , 优化
项目介绍
算法 : 验证二叉搜索树
原文链接:https://blog.csdn.net/hljczm/article/details/114962993