4 年 Java 经验,阿里网易拼多多面试总结、心得体会

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 由于个人发展的原因和工作上的变动,产生了想出来看看机会的想法。经过了一段时间的准备,5 月下旬开始出来面试,面到了 7 月上旬,如愿拿到了自己心仪公司的 offer。按照自己的习惯,将这次面试过程中的一些经验总结、心得体会记录下来,自己留个记录,也希望可以帮助到一些同学。

目录

前言

个人情况

面试情况

4 年经验应该具备哪些技能

专业技能方面

项目方面

面试常见形式

面试内容

1、项目

2、场景题

3、专业技能

集合

多线程、锁

网络

SpringMybatis

MySQL

JVM

Kafka

Redis

Zookeeper

分布式

4Hr

一些经验心得



前言


由于个人发展的原因和工作上的变动,产生了想出来看看机会的想法。经过了一段时间的准备,5 月下旬开始出来面试,面到了 7 月上旬,如愿拿到了自己心仪公司的 offer。按照自己的习惯,将这次面试过程中的一些经验总结、心得体会记录下来,自己留个记录,也希望可以帮助到一些同学。


另外,在两年前第一次跳槽的时候也将当时的心得体会记录了下来,这边放个传送门:两年Java发工作经验面试总结

 

好消息,本文列出的面试题目,已经陆续推出文章进行深度解析,具体请见原创汇总#面试题解析后续的面试题解析、经验分享也会汇总到该文章,喜欢的同学请点赞收藏

 

个人情况


坐标魔都,15年本科毕业于普通一本,毕业后就职于一家传统电信公司,17 年后就职于美团点评。

 

面试情况



相比于17 年,由于有了美团的背景,今年在简历这关顺利了很多,不得不感叹大厂背景真香?

本着尽量少请假的原因,所以面试的公司比较少,只面了 3 家:阿里、网易考拉、拼多多。

3 家公司都走完了面试流程,最后拿到了阿里和拼多多的 offer,自己还是比较满意的。

至于网易,面试发挥的还行,BOSS 面的时候可以看出对我还是比较满意,但最终由于一些特殊的原因没有发offer

如果对于这三家公司的面试流程有问题的,可以在公众号上留言,能解答的我会第一时间解答。

 

4 年经验应该具备哪些技能



首先,简单的聊一下我认为的 4 年经验左右、优秀的 Java 程序员应该具备的技能有哪些,按专业技能项目两块,包括但不限于以下内容。

 

专业技能方面


·       基础:JDK 常用类的原理、源码、使用场景。

·       设计模式:常用几种的原理、使用场景,单例、动态代理、模板、责任链等。

·       数据结构:数组、链表、栈、队列、树。

·       网络:TCPHTTPHTTPS、负载均衡算法。

·       框架:Spring IoC 原理、Spring AOP 原理和使用、Spring 常用的扩展点、MyBatis 的核心流程。

·       中间件:常用中间件的核心原理与最佳实践,并对其中的1 2 个有深入的学习,RedisKafkaRocketMQRabbitMQ)、DubboZookeeper

·       数据库(MySQL):索引原理、隔离级别、锁机制、分库分表、慢 SQL 定位及优化、线上问题解决。

·       NettyNIO原理、核心组件、I/O 多路复用(epoll)、零拷贝。

·       JVM:运行时数据区、垃圾回收算法、垃圾回收器(CMSG1)、常用配置参数、线上问题定位及解决。 

·       稳定性保障:隔离、限流、熔断、降级等。

·       Linux:基本命令的使用、快速定位和排查问题。

·       分布式理论:CAPBASE2PC3PCTCC

 

项目方面


·       能独立完成一个复杂模块的需求分析、方案设计和最终落地实现。

·       能不断思考,寻找更优的设计和解决方案,积极优化慢SQL、慢服务。

·       具备排查问题的能力,遇到线上问题能及时定位和修复上线,例如:数据库死锁、服务器宕机、服务器 Full GC 频繁等。

·       具备难题攻关的能力,能不断解决项目遇到的挑战,能给予初级工程师技术上的指导。

·       初步具备带领团队(1-3人左右)的能力,能合理分配需求,做好进度把控、风险评估、Code Review

 

严格来说,要完全做到上面这些有点难,我自己也并不具备,但是,我们可以将其视为目标,不断去努力。

 

面试常见形式


大厂面试通常是连环炮的形式,举个栗子:

面试官:用过哪些 Map

我:LinkedHashMapConcurrentHashMapHashMapTreeMap

 

面试官:这四种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 的原理

·       MapListSet分别说下你知道的线程安全类和线程不安全的类

真题解析:

问遍了身边的面试官朋友,我整理出这份 Java 集合高频面试题(2021年最新版)

面试阿里,HashMap 这一篇就够了

史上最详细的 JDK 1.8 HashMap 源码解析

 

多线程、锁


·       线程池使用的是哪种

·       线程池参数怎么配置

·       线程池各个参数的作用

·       线程池的参数配置要注意什么

·       线程池的工作流程

·       JDK 中的并发类知道哪些

·       AQS 的底层原理

·       介绍下悲观锁和乐观锁

·       使用过哪些锁

·       synchronized Lock 的区别、使用场景

·       synchronized 原理

·       synchronized 作用于静态方法、普通方法、thisLock.class 的区别

·       为什么引入偏向锁、轻量级锁,介绍下升级流程

·       死锁的必要条件,如何预防死锁

·       介绍下 CountDownLatch CyclicBarrier

·       介绍下 CAS,存在什么问题

·       介绍下 ThreadLocal,存在什么问题

真题解析:

面试必问的线程池,你懂了吗?

面试必问的CAS,你懂了吗?

 

网络

·       HTTPS 是怎么加密的

·       普通 Hash 和一致性 Hash 原理

·       一致性 Hash 的缺点

·       TCP 三次握手过程,为什么需要三次握手

·       为什么 TIME_WAIT 状态需要经过2MSL 才能返回到 CLOSE 状态

·       TCP 的拥塞控制

·       TCP 如何解决流控、乱序、丢包问题

·       为什么会出现粘包和拆包,如何解决

真题解析:待补充,可关注:原创汇总#面试题解析

 

SpringMybatis

·       Mybatis # $ 的区别

·       怎么防止 SQL 注入

·       使用 Mybatis 时,调用DAOMapper)接口时是怎么调用到 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 中的常见扩展点有哪些


真题解析:

面试必问的 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 中你通常关注哪些字段,为什么


真题解析:

面试必问的 MySQL,你懂了吗?

MySQL 8.0 MVCC 核心原理解析(核心源码)

 

JVM

·       运行时数据区

·       服务器使用的什么垃圾收集器

·       CMS 垃圾收集的原理

·       G1 垃圾收集的特点,为什么低延迟

·       有哪些垃圾回收算法,优缺点

·       哪些对象可以作为 GC Roots

·       有哪些类加载器

·       双亲委派模式,哪些场景是打破双亲委派模式

·       线上服务器出现频繁 Full GC,怎么排查

·       定位问题常用哪些命令

·       介绍下 JVM 调优的过程

真题解析:待补充,可关注:原创汇总#面试题解析

 

Kafka

·       为什么使用 Kafka

·       介绍下 Kafka 的各个组件

·       如何保证写入 Kafka 的数据不丢失

·       如何保证从 Kafka 消费的数据不丢失

·       Kafka 为什么性能这么高

·       零拷贝技术使用哪个方法实现

·       Java 中也有类似的零拷贝技术,是哪个方法

·       Kafka 怎么保证消息的顺序消费

·       Kafka 怎么避免重复消费

·       什么是 HighWatermark LEO

·       什么是 ISR,为什么需要引入ISR

真题解析:待补充,可关注:原创汇总#面试题解析

 

Redis

·       项目中使用的 Redis 版本

·       Redis 在项目中的使用场景

·       Redis 怎么保证高可用

·       Redis 的选举流程

·       Redis Memcache 的区别

·       Redis 的集群模式

·       Redis 集群要增加分片,槽的迁移怎么保证无损

·       Redis 分布式锁的实现

·       Redis 删除过期键的策略

·       Redis 的内存淘汰策略

·       Redis Hash 对象底层结构

·       Redis Hash 对象的扩容流程

·       Redis Hash 对象的扩容流程在数据量大的时候会有什么问题吗

·       Redis 的持久化机制有哪几种

·       RDB AOF 的实现原理、优缺点

·       AOF 重写的过程

·       哨兵模式的原理

·       使用缓存时,先操作数据库还是先操作缓存

·       为什么是让缓存失效,而不是更新缓存

·       缓存穿透、缓存击穿、缓存雪崩

·       更新缓存的几种设计模式


真题解析:


面试必问的分布式锁,你懂了吗?

面试必问的缓存使用:如何保证数据一致性、缓存设计模式

面试必问的 RedisMemcached VS Redis

面试必问的 Redis:高可用解决方案哨兵、集群

面试必问的 Redis:主从复制

面试必问的 RedisRDBAOF、混合持久化

面试必问的 Redis:数据结构和基础概念

 

Zookeeper


·       Zookeeper 的使用场景

·       Zookeeper 怎么实现分布式锁

·       Zookeeper 怎么保证数据的一致性

·       ZAB 协议的原理

·       Zookeeper 遵循CAP 中的哪些

·       Zookeeper Eureka 的区别

·       Zookeeper Leader选举

·       Observer 的作用

·       Leader 发送了 commit 消息,但是所有的 follower 都没有收到这条消息,Leader 就挂了,后续会怎么处理

真题解析:待补充,可关注:原创汇总#面试题解析

 

分布式


·       CAP 理论

·       BASE 理论

·       分布式事务 2PC TCC 的原理

·       TCC cancel 阶段如果出现失败怎么处理

·       Paxos 算法、Raft算法

真题解析:待补充,可关注:原创汇总#面试题解析

 

4、Hr


如果你一路过五关斩六将,最终来到了 Hr 面,那么恭喜你,你已经离 offer 非常非常近了。可以开始畅想自己升职加薪,当上总经理,出任 CEO,迎娶白富美,走上人生巅峰的场景了。

Hr 面主要是了解候选人的一些通用素质,经常会问的问题如下:

·       介绍下自己投入最多的项目(当时我就惊了,Hr 也开始问项目了[doge]  

·       离职的原因

·       当前的薪资、绩效

·       当前在面试的其他公司的情况

·       平时有没有学习的习惯,怎么学习的,现在在学习什么

·       未来的规划

关于这些问题,没有什么标准答案,但是很重要的原则是,在整个过程中要保持积极向上的态度,不能有负面的情绪。

关于当前薪资的问题,由于诸多的原因,可能有些人会想着稍微多报一点,对于这种做法我持中立态度,但是要把握好度,毕竟大厂基本都有背景调查。大厂对于诚信问题一般是零容忍,而且可能会拉黑名单,进黑名单意味着你再也无缘这家公司了。

 

一些经验心得


1.    先挑几个小公司找下面试感觉,太久没面,需要找找面试的感觉,我自己一开始就面的不太好,就很慌张?

2.    面试时紧张是正常的,但是不要过于紧张,如果面试官问完你大脑瞬间一片空白,你可以跟面试官说自己要思考下,然后回答的时候语速可以慢点,但是要条理清晰。

3.    在面试的过程中回答面试官问题是一方面;另一方面,你要在回答的过程中让面试官感受到你身上一些优秀的特质,例如:有潜力、很灵活、热爱学习、学习能力强、解决问题能力强、基础扎实等等。这些特质都会影响面试官对你的评价。

4.    平时项目中遇到难题要积极去解决,解决问题的过程能让人快速成长,并且解决的问题可能会成为你面试时的亮点,特别是对于那些项目没什么亮点的。

5.    准备项目时,挑几个自己做过最牛逼的功能、或者解决过最有挑战的问题,并且要对这些内容理解的非常透彻,不能在给面试官介绍的时候支支吾吾

6.    框架也好、中间件也好,必须要有几个特别深入研究过的,也就是说你除了广度之外,还必须在某些方面有足够的深度。面试时经常碰到的问题是:你对哪个框架或中间件理解的最深。然后面试官会在这个方向上一直问下去,如果你很多东西只是看了个大概,在这边就很有可能会被问倒。

7.    自己讲出来的每个功能点、知识点,都要做好被挑战的心里准备,因此对于每个功能点、知识点都要多思考。

8.    如果问的问题是线上实际的场景,有时候面试官会给出他们当前线上的解决方案,如果你能在这个时候给出一些自己的思考和观点,可能会给面试官留下不错的印象。

9.    判断自己是否已经准备好的一个比较简单粗暴的方法:自己是否能将看到的面试题回答个 9 成左右,例如本文上面专业技能列举的这些题目。

10. 如果你是真想跳槽,或者说你已经裸辞了,那么在收到电子 offer 前都不要停止面试,即使收到口头 offer 也不稳,特别是在这个寒冬。

11. 在平时工作中多思考,无论是写代码还是方案设计,多思考更优的解决方案。特别是工作年限越久之后,思考对于我们的职业发展越重要。

12. 面试前的准备非常重要,但更重要的是平时工作的积累,4 年经验问的问题很多是无法通过临时准备的,很多都是需要你不断去积累,才能有好的方案。

13. 专注于自身的成长,不要轻易受到别人的影响,只要你不断的积累,总有一天你也能成为你眼中的那些大神。

14. 学如逆水行舟,不进则退。不要停下学习的脚步,特别是趁着自己还年轻,趁着自己还是个单身狗的时候,逼自己一把,将来的你一定会感激现在拼命的自己。

15. 程序员是一份很单纯的工作,不需要搞什么花里胡哨的,只要你付出努力了,你通常就能收获回报。

16. 对于没有大厂背景,并且处于传统行业(就如 2 年前的我),想直接进入大厂比较难,除非你像我一样踩了狗屎运,但是这种几率不大,我觉得比较现实的途径是先找一个互联网独角兽沉淀一段时间。

17. 大公司的部门非常多,各部门的招聘通常都是独立的,如果想进大公司可以多投,每个部门的需求紧张度不同,如果碰到急需招人的,可能就是一个非常好的机会。

18. 大公司的面试通常会有存档,面试官可能会看到你之前的面试评价。如果你经常一轮游,肯定会给面试官不好的印象。因此请做好准备再去面试,不要轻易浪费机会。

19. 2019 年互联网行业的行情不太好,也有可能接下去会一直这样,特别是对于没有大厂背景的同学来说,所以请记住一个很重要的原则:不要裸辞

20. Last but not least,如果你觉得本文对你有帮助,欢迎关注我的微信公众号、右下角在看、分享到朋友圈,帮助更多的小伙伴。

 

推荐阅读



字节、美团、快手核心部门面试总结(真题解析)

两年Java开发工作经验面试总结

面试阿里,HashMap 这一篇就够了

面试必问的 MySQL,你懂了吗?

面试必问的线程池,你懂了吗?

相关文章
|
4天前
|
存储 缓存 Java
面试官:什么是Java内存模型?
面试官:什么是Java内存模型?
40 0
面试官:什么是Java内存模型?
|
1月前
|
监控 网络协议 Java
《Java工程师成神之路》阿里技术专家之作,囊括Java所有知识点!
很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。
|
1月前
|
Java 调度 Windows
JAVA面试八股文之多线程基础知识
JAVA面试八股文之多线程基础知识
|
5天前
|
缓存 监控 架构师
阿里面试:Java开发中,应如何避免OOM
在Java开发中,OutOfMemoryError(OOM)错误一直是令开发者头疼的问题,也是Java面试中出现核心频率很高的问题。 那么我们究竟怎么样才能够有效正确的管理内存,日常开发中究竟要注意哪些核心技巧来避免OOM错误。 本文将带大家一起学习10个避免OOM的实用小技巧,让大家在工作中能够有的放矢,避免OOM错误的飞来横祸。
26 1
|
7天前
|
SQL 存储 Java
[Java]细节、经验
[Java]细节、经验
40 0
[Java]细节、经验
|
26天前
|
Java
【面试问题】用过Java 中哪些原子类?
【1月更文挑战第27天】【面试问题】用过Java 中哪些原子类?
|
26天前
|
安全 Java
【面试问题】Java 中的阻塞队列用过哪些?
【1月更文挑战第27天】【面试问题】Java 中的阻塞队列用过哪些?
|
26天前
|
设计模式 消息中间件 缓存
2024年Java架构师面试宝典 图文并茂 10G面试题 请收藏
2024年Java架构师面试宝典 图文并茂 10G面试题 请收藏
86 1
|
28天前
|
Java 数据库连接 数据库
【万字长文】Java面试八股文:深入剖析常见问题与解答
【万字长文】Java面试八股文:深入剖析常见问题与解答
99 0
|
28天前
|
算法 搜索推荐 Java
太实用了!阿里内部强推的超全Java算法学习指南,已被彻底征服
算法和数据结构一直以来都是程序员的基本内功。 数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。