4 年经验应该具备哪些技能
首先,简单的聊一下我认为的 4 年经验左右、优秀的 Java 程序员应该具备的技能有哪些,按“专业技能”和“项目”两块,包括但不限于以下内容。
专业技能方面
- 基础:JDK 常用类的原理、源码、使用场景。
- 设计模式:常用几种的原理、使用场景,单例、动态代理、模板、责任链等。
- 数据结构:数组、链表、栈、队列、树。
- 络:TCP、HTTP、HTTPS、负载均衡算法。
- 框架:Spring IoC 原理、Spring AOP 原理和使用、Spring 常用的扩展点、MyBatis 的核心流程。
- 中间件:常用中间件的核心原理与最佳实践,并对其中的 1 到 2 个有深入的学习,Redis、Kafka(RocketMQ、RabbitMQ)、Dubbo、Zookeeper。
- 数据库(MySQL):索引原理、隔离级别、锁机制、分库分表、慢 SQL 定位及优化、线上问题解决。
- Netty:NIO 原理、核心组件、I/O 多路复用(epoll)、零拷贝。
- JVM:运行时数据区、垃圾回收算法、垃圾回收器(CMS、G1)、常用配置参数、线上问题定位及解决。
- 稳定性保障:隔离、限流、熔断、降级等。
- Linux:基本命令的使用、快速定位和排查问题。
- 分布式理论:CAP、BASE、2PC、3PC、TCC。
项目方面
- 能独立完成一个复杂模块的需求分析、方案设计和最终落地实现。
- 能不断思考,寻找更优的设计和解决方案,积极优化慢 SQL、慢服务。
- 具备排查问题的能力,遇到线上问题能及时定位和修复上线,例如:数据库死锁、服务器宕机、服务器 Full GC 频繁等。
- 具备难题攻关的能力,能不断解决项目遇到的挑战,能给予初级工程师技术上的指导。
- 初步具备带领团队(1-3人左右)的能力,能合理分配需求,做好进度把控、风险评估、Code Review。
严格来说,要完全做到上面这些有点难,我自己也并不具备,但是,我们可以将其视为目标,不断去努力。
面试常见形式
大厂面试通常是“连环炮”的形式,举个栗子:
面试官:用过哪些 Map
我:LinkedHashMap、ConcurrentHashMap、HashMap、TreeMap
面试官:这四种 Map 的区别
我:ConcurrentHashMap 线程安全,LinkedHashMap 可以记录插入顺序和访问顺序,TreeMap 可以自定义排序,除了这几个场景,其他场景基本都可以使用 HashMap
面试官:ConcurrentHashMap 怎么保证线程安全
我:JDK 1.8 以前通过分段锁,JDK 1.8 以后通过 CAS + Synchronized
面试官:ConcurrentHashMap 在 JDK 1.8 前后的锁有什么区别
我:JDK 1.8 以前锁分段,JDK 1.8 以后锁单个节点,锁粒度降低,并发度变高
这种模式的问法,其实就是想了解候选人对一个知识点的理解是仅仅停留在表面,还是真的去深入研究过。
面试内容
下面介绍下一些常见的面试内容,其中的面试题不一定是我真实遇到的,有可能是从别人的面试题中收集的,也有可能是我自己觉得重要的知识点,仅供参考。
1、项目
项目对于一个 3 – 5 年经验的开发来说是非常重要的,面试官也非常看重这一块。这个经验的开发基本是各大公司的编码主力,因此面试这个年限的候选人,通常项目是很重要的一块。面试官通常会让你先自己介绍下自己参与度最高(或者最牛逼)的项目,然后从中进行提问。常见的如以下:
- 介绍下你参与度最高的项目
- 画下项目的架构图
- 如果核心流程处理到一半,服务器崩溃了,会怎么处理
- 项目中遇到过哪些挑战或问题,怎么解决的
- 项目的稳定性和可用性怎么保障
- 数据安全这块怎么设计
- 项目的技术选型,为什么选这些
- …
2、场景题
越到后面的面试官,越喜欢问场景题,场景题比较考验候选人平时的积累和解决问题能力。这个环节很容易挂掉一批人,特别是容易紧张的同学,很容易脑子会一片空白。场景题的核心一般是处理大数据量的问题、解决性能方面的问题。
场景题本质上是比较开放的,没有什么标准答案,只要自己的方案能够解决问题,能够“自圆其说”就行。
这个环节面试官可能会将线上真实的场景拿出来提问,我自己就遇到过。
3、专业技能
集合
- 经常用到哪些 Map
- 这几种 Map 的区别
- CocurrentHashMap 怎么保证线程安全
- CocurrentHashMap 在 JDK 1.8 前后的锁有什么区别
- 聊下 HashMap 的原理
- HashMap 在 Put 时,新链表节点是放在头部还是尾部
- HashMap 扩容时的流程
- HashMap 在 JDK 1.8 有什么改变
- CocurrentHashMap 在 JDK 1.8 有什么改变
- TreeMap 的原理
- Map、List、Set 分别说下你知道的线程安全类和线程不安全的类
多线程、锁
- 线程池使用的是哪种
- 线程池参数怎么配置
- 线程池各个参数的作用
- 线程池的参数配置要注意什么
- 线程池的工作流程
- JDK 中的并发类知道哪些
- AQS 的底层原理
- 介绍下悲观锁和乐观锁
- 使用过哪些锁
- synchronized 和 Lock 的区别、使用场景
- synchronized 原理
- synchronized 作用于静态方法、普通方法、this、Lock.class 的区别
- 为什么引入偏向锁、轻量级锁,介绍下升级流程
- 死锁的必要条件,如何预防死锁
- 介绍下 CountDownLatch 和 CyclicBarrier
- 介绍下 CAS,存在什么问题
- 介绍下 ThreadLocal,存在什么问题
络
- HTTPS 是怎么加密的
- 普通 Hash 和一致性 Hash 原理
- 一致性 Hash 的缺点
- TCP 三次握手过程,为什么需要三次握手
- 为什么 TIME_WAIT 状态需要经过 2MSL 才能返回到 CLOSE 状态
- TCP 的拥塞控制
- TCP 如何解决流控、乱序、丢包问题
- 为什么会出现粘包和拆包,如何解决

有没有学习的习惯,怎么学习的,现在在学习什么
- 未来的规划
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案免费分享给大家,希望能帮助到大家,有需要的朋友可以看下面的免费领取方式!
资料领取方式:狂戳这里
[外链图片转存中…(img-ch6EFGLd-1627456535423)]
[外链图片转存中…(img-NoP46nf6-1627456535423)]
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92881 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!