坐标魔都,15 年本科毕业于普通一本,毕业后就职于一家传统电信公司,17 年后就职于美团点评。
面试情况
========
相比于 17 年,由于有了美团的背景,今年在简历这关顺利了很多,不得不感叹大厂背景真香?。
本着尽量少请假的原因,所以面试的公司比较少,只面了 3 家:阿里、网易考拉、拼多多。
3 家公司都走完了面试流程,最后拿到了阿里和拼多多的 offer,自己还是比较满意的。
至于网易,面试发挥的还行,BOSS 面的时候可以看出对我还是比较满意,但最终由于一些特殊的原因没有发 offer。
如果对于这三家公司的面试流程有问题的,可以在公众号上留言,能解答的我会第一时间解答。
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 分别说下你知道的线程安全类和线程不安全的类
真题解析:
问遍了身边的面试官朋友,我整理出这份 Java 集合高频面试题(2021年最新版)
多线程、锁
-
线程池使用的是哪种
-
线程池参数怎么配置
-
线程池各个参数的作用
-
线程池的参数配置要注意什么
-
线程池的工作流程
-
JDK 中的并发类知道哪些
-
AQS 的底层原理
-
介绍下悲观锁和乐观锁
-
使用过哪些锁
-
synchronized 和 Lock 的区别、使用场景
-
synchronized 原理
-
synchronized 作用于静态方法、普通方法、this、Lock.class 的区别
-
为什么引入偏向锁、轻量级锁,介绍下升级流程
-
死锁的必要条件,如何预防死锁
-
介绍下 CountDownLatch 和 CyclicBarrier
-
介绍下 CAS,存在什么问题
-
介绍下 ThreadLocal,存在什么问题
真题解析:
网络
-
HTTPS 是怎么加密的
-
普通 Hash 和一致性 Hash 原理
-
一致性 Hash 的缺点
-
TCP 三次握手过程,为什么需要三次握手
-
为什么 TIME_WAIT 状态需要经过 2MSL 才能返回到 CLOSE 状态
-
TCP 的拥塞控制
-
TCP 如何解决流控、乱序、丢包问题
-
为什么会出现粘包和拆包,如何解决
真题解析:待补充,可关注:原创汇总#面试题解析
Spring、Mybatis
-
Mybatis 中 # 和 $ 的区别
-
怎么防止 SQL 注入
-
使用 Mybatis 时,调用 DAO(Mapper)接口时是怎么调用到 SQL 的
-
介绍下 Spring IoC 的流程
-
BeanFactory 和 FactoryBean 的区别
-
Spring 的 AOP 是怎么实现的
-
Spring 的事务传播行为有哪些,讲下嵌套事务
-
什么情况下对象不能被代理
-
Spring 怎么解决循环依赖的问题
-
要在 Spring IoC 容器构建完毕之后执行一些逻辑,怎么实现
-
@Resource 和 @Autowire 的区别
-
@Autowire 怎么使用名称来注入
-
bean 的 init-method 属性指定的方法里用到了其他 bean 实例,会有问题吗
-
@PostConstruct 修饰的方法里用到了其他 bean 实例,会有问题吗
-
Spring 中,有两个 id 相同的 bean,会报错吗,如果会报错,在哪个阶段报错
-
Spring 中,bean 的 class 属性指定了一个不存在的 class,会报错吗,如果会报错,在哪个阶段
-
Spring 中的常见扩展点有哪些
真题解析:
面试题:mybatis 中的 DAO 接口和 XML 文件里的 SQL 是如何建立关系的?
面试题:mybatis 中的 DAO 接口和 XML 文件里的 SQL 是如何建立关系的?
MySQL
-
MySQL 索引的数据结构
-
为什么使用 B+ 树,与其他索引相比有什么优点
-
各种索引之间的区别
-
B+ 树在进行范围查找时怎么处理
-
MySQL 索引叶子节点存放的是什么
-
联合索引(复合索引)的底层实现
-
MySQL 如何锁住一行数据
-
SELECT 语句能加互斥锁吗
-
多个事务同时对一行数据进行 SELECT FOR UPDATE 会阻塞还是异常
-
MySQL 使用的版本和执行引擎
-
MySQL 不同执行引擎的区别
-
MySQL 的事务隔离级别
-
MySQL 的可重复读是怎么实现的
-
MySQL 是否会出现幻读
-
MySQL 的 gap 锁
-
MySQL 的主从同步原理
-
分库分表的实现方案
-
分布式唯一 ID 方案
-
如何优化慢查询
-
explain 中每个字段的意思
-
explain 中的 type 字段有哪些常见的值
-
explain 中你通常关注哪些字段,为什么
真题解析:
JVM
-
运行时数据区
-
服务器使用的什么垃圾收集器
-
CMS 垃圾收集的原理
-
G1 垃圾收集的特点,为什么低延迟
-
有哪些垃圾回收算法,优缺点
-
哪些对象可以作为 GC Roots
-
有哪些类加载器
-
双亲委派模式,哪些场景是打破双亲委派模式
-
线上服务器出现频繁 Full GC,怎么排查
-
定位问题常用哪些命令
-
介绍下 JVM 调优的过程
真题解析:待补充,可关注:原创汇总#面试题解析
Kafka
-
为什么使用 Kafka
-
介绍下 Kafka 的各个组件
-
如何保证写入 Kafka 的数据不丢失
-
如何保证从 Kafka 消费的数据不丢失
-
Kafka 为什么性能这么高
-
零拷贝技术使用哪个方法实现
-
Java 中也有类似的零拷贝技术,是哪个方法
-
Kafka 怎么保证消息的顺序消费
-
Kafka 怎么避免重复消费
-
什么是 HighWatermark 和 LEO
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/3f103c5f8a7499dcca28ba82b094ee1b.jpeg)
最后如何让自己一步步成为技术专家
说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。
当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。
推荐一份Java架构之路必备的学习笔记,内容相当全面!!!
成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。
你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
【关注】+【转发】+【点赞】支持我!创作不易!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/3f103c5f8a7499dcca28ba82b094ee1b.jpeg)
最后如何让自己一步步成为技术专家
说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。
当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。
推荐一份Java架构之路必备的学习笔记,内容相当全面!!!
[外链图片转存中…(img-WwHGyTaz-1712559030245)]
成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。
你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
【关注】+【转发】+【点赞】支持我!创作不易!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!