2021-java面试整理

1 : 背景

笔者2020年末在猎聘开始着手面试, 于2021年4月21日从猎聘离职,入职京东.
期间面试过 明略科技集团、蚂蚁金服、钉钉、美团(多部门)、华为、去哪儿、五八、京东、微博、老虎集团、贝壳、快手等


笔者拿到了 明略科技 26×15 华为18×15 五八 24×15 京东26×14 美团27*15.5

早期蚂蚁金服非常可惜, 虽然当时很菜,但是机会很好,可惜挂在了四面上(下一面就是hr了o(╥﹏╥)o )
而微博也是薪资低 拒掉了.


笔者工作四年,能力非常菜,但面试了好几个月也有一些资料和实战, 这里也只能是抛砖引玉 给一些朋友和同学一些面试心得和个人反馈。

2 : 技术栈

笔者只整理我接触到的和重要的点, 没整理的不代表不重要, 整理的也不会说答案 具体答案可以见资料区, 这里说明大概的技术栈和怎么问。也希望读者可以自己思考 不然面试官夺命连问很容易给自己问懵。

1.JAVA基础 :

集合 : 一般问常用数据结构,一些ArrayList LinkedList 等区别 比较基础 有的公司喜欢这么从基础问到深入, 所以集合相关就大概说下日常的即可。


JUC : 并发相关的,比如问你常用 并发包什么类啊, AQS知道吗 ,讲讲原理和实现子类, 比如 CountDownLatch CyclicBarrier Semaphore三兄弟 这个问的还挺多的 最好自己有了解相关原理 也有手动写过线程并发相关的经验。

锁与线程 : 这个一般就是 LOCK synchronized 区别, 重入不可重入 锁等级 八股文背就完了


HashMap : 这个单拿出来是因为 面试必问, 都很喜欢问这个,包括数据类型 java8区别 解决什么问题 底层原理 , 我在去哪儿面试时 让我手写一个 hash方法 ( 也是醉了 )


线程池 : 常用参数 , 怎么初始化线程池, 了解原理吗 之类的

2.spring :

设计模式 : 单例 代理 装饰 模板 工厂 等等

IOC AOP : 老生八股

BEAN生命周期 : 八股背

三级缓存循环依赖 : 不看源码不太容易背,建议啃一啃

3.redis :

数据类型、集群高可用、模型、三大场景(穿透击穿雪崩)、删除策略、持久化策略

数据类型 : 几大数据类型 常用哪些,给你一些场景你怎么用之类的

集群高可用 : 哨兵集群,槽slot相关

三大场景(穿透击穿雪崩) : 见资料 八股

删除策略 : 主动 被动 还有 LRU 惰性删除

持久化: AOF RDB 不解释

4. mysql :

引擎区别 、锁、事务及问题及解决方式、索引、分库分表、mysql架构、优化慢sql

引擎区别 : 无非 INNODB MYISAM 事务 count保存 唯一索引 其他八股

锁: 表锁行锁 独享排他 乐观悲观 间隙锁

事务及问题及解决方式 : 四大事务, 脏度 重复读 幻读 默认重复读 通过 model view + undo log 以及mvcc 间隙锁 这几个都整明白。

索引: b+树 hash b+树 b树区别 数据类型 怎么选, 怎么建立索引 优化索引 由左往右的排序 ,最左原则 联合索引 二级索引 聚簇索引 唯一索引 回表这些概念都整明白

分库分表: 你知道怎么分吗? 了解下mycat 分库分表的场景和带来的问题

mysql架构 : 比如 为什么这么快 知道 cost 怎么算的吗 有玩过吗? 各种log (undolog redo log bin log) 底层的刷盘 内存写入等 结构了解下

慢sql: 基本上是sql优化嘛, mysql自带慢sql配置检测, 然后开始说sql问题 怎么看sql 表关联, 子查询 驱动表, explain使用(具体字段都要知道 比如type有那些值 你关注那些指标) 排序file sort 内存排序 limit优化 等

5. 消息队列(MQ KAFKA)

MQ KAFKA区别 场景及问题解决 、架构及原理、消费积压、持久化 快


笔者掌握较少 见八股

6. JVM

常用参数 JVM内存结构及说明、 CMS执行过程、类加载及对象分配过程、对象相关、垃圾回收器、实战 OOM及FULLGC排查

笔者简历有jvm实战 所以这块准备的多一些

常用参数 : 说出常用的那些, 比如 用什么垃圾回收器啊(这里更多是parnew +cms)
堆大小配置啊, eden s区 默认8:1:1 配置啊 , 大对象晋升配置 cms only cms阈值 碎片化 压缩
元空间配置(笔者比较了解这一块 会和面试官深挖这里) gc日志打印 class加载卸载 等等 说个差不多就可以

JVM内存结构及说明 : 栈 堆 程序计数器 本地方法区 常量池等等 记住每个区域干啥用的 会有啥问题, 比如 堆 分配对象 还有对象标量替换到栈上, 分配对象又包含对象头 示例数据 对其填充 和class的引用 还有 64位压缩32位技术, 还有 垃圾回收器回收 ; 栈的话 有栈溢出 线程私有 栈本身的数据结构等等;

CMS执行过程 : 初始标记 并发标记 重新标记 并发清理 最终回收 并发的都不stw 不是并发的初始标记和 重新标记是stw 的 如果能说出每个过程具体干啥了更佳, 比如关于 卡表 跨代引用 三色标记法 写屏障 CAS 原理等



类加载及对象分配过程 : 这里就是类加载过程 怎么加载的( 源码: findClass loadClass ) 怎么从磁盘拿走, 什么时候加载卸载 ; 对象分配过程(new关键字 先类加载 再去初始化对象 等等 八股)
对象结构(对象头 markword gc标识 偏向锁 等等),所占字节数(有压缩技术 32G 等概念在这里 )

垃圾回收器: 其他垃圾回收器 比如 串行俩兄弟, 并行俩兄弟 parnew cms g1 Shenandoah zgc 等 知道就行, 能说出来g1 和cms 区别 更佳

实战: full gc 怎么办 OOM 怎么办

fullgc思路

1 :了解该项目参数 : 比如什么垃圾回收器 什么堆大小配置 等等

2 : 了解该项目流量模型: 比如一分钟多少对象进来 回收情况如何 观察对象区域图(公司有监控更佳, 没有就说 jgc jstack 等命令查看)

3 : 定位fullgc原因, 比如 过早晋升, 碎片化 回收阈值设置有问题 还有内存泄漏

一个一个问题

OOM : 分析OOM区域 (元空间也可能OOM) 然后定位解决问题

7.网络 :

一次请求、TCPIP 设计RPC 、BIO NIO AIO

八股背起来

其他: 缓存一致性 根据简历擅长角度及过往项目来问





3 : 面试实战


京东物流-人工智能大数据部门 一面

1 : 自我介绍下

2: 基础问题(集合 锁 AQS 并发相关)

3 : 中间件(kafka原理 消费积压等 redis集群)

4 : MYSQL(索引建立 索引优化 慢sql)

5 :spring bean加载 IOC AOP

6: JVM相关(根据简历来 实战)

京东物流-人工智能大数据部门 二面

1 : 自我介绍下

2 : JVM相关实战(根据简历来)

3: 你在之前部门做什么, 什么架构 你负责的项目

4: 你负责的项目你遇到的问题及解决方案

5: 其他零碎问题(记不太清)

美团总部-到店事业部一面

1 : 自我介绍下吧

2 : jvm我看你有熟悉, 大概介绍下吧

3 : 你怎么排查jvm问题的?

4 : 说一次你这个GC实战的脉络吧

5 : mysql相关 平时优化sql吗 慢sql优化解决方案

6 : 索引 引擎 锁相关小问题

7 : MYSQL主从相关了解吗

8 : redis 你一般怎么用的

9 : 缓存一致性有解决方案吗

10 : 你认为除了JVM mysql redis 还有你擅长的哪些吗? 说下

11 : 其他简历中业务问题

美团总部-到店事业部二面

1 : 自我介绍下吧

2 : 简历中关于JVM实战,排查问题分析细节深挖(大概二十分钟,涉及到GC实战,元空间内存区域,里面是啥为什么增加,怎么解决 参数配置, 实战背景,总结输出)


3 : GC log 看吗 你关注哪些?

4: MYSQL 怎么解决ACID? REDIS集群怎么实现 主从同步怎么玩的

5: 读写怎么玩的? 切换时业务需要注意什么?

6: 画一下你最近项目的这个总体技术架构

7 : 你平时怎么学习的?

8 : 你的优点和不足?

9 : 做个题吧(动态分析题 有限空间里的选择最优解、或者叫最优路线规划)

4 : 资料相关

由于时间原因 资料请加我微信私聊
完全免费请放心

5 : 总结

1 : 简历要好好写, 花点时间对自己的过去负责任

2 : 几个高频也是我们需要掌握的技能 : JAVA基础 、数据库、spring相关、及其他中间件

3:搞一个自己擅长的模块, 比较加分 但凡聊上了 就自信输出, 有的面试官不一定有你知道的多

4: 自信 诚实

最后 有感兴趣的 或者 任何意见交流的可以微信私聊 交流学习!

打赏
  • © 2020-2021 Hewie-梅浩 京ICP备17013690号
  • Powered by Hexo Theme Ayer
    • PV:
    • UV:

一杯咖啡,与君共享~

支付宝
微信