2020大厂面试题-高级Java开发篇

188 阅读16分钟

腾讯面试

流程概述:内推简历 -> 一面现场面 -> 二面腾讯会议 ->三面现场 -> 四面腾讯会议 -> HR面腾讯会议 -> HR通知定薪和定级 ->offer审批(4天) -> 背调(1周) -> 入职指引 -> 入职提醒

一面(组长)

1.自我介绍

2.手画出项目的架构图, 并介绍每一层的作用

3.介绍下项目的难点和亮点(接下来的很多提问都是基于这个, 所以这个需要好好准备, 可以起到引导面试官作用)

4.redis是单线程的还是多线程的?

5.你们项目中选用redis做缓存的动机是什么, 听过Memcached吗? 为何不用Memcached, 这俩选型如何做的?

6.你们会有缓存击穿吗? 缓存雪崩和穿透呢?

7.当时消息中间件的选型有参与吗? 为啥选用RabbitMQ?

8.RabbitMQ的在你们项目中起到什么样的作用?

9.微服务的拆分是如何做的? 拆分的维度和依据是什么?

10.你们注册中心用的是哪个? 服务注册和发现是如何实现的?

11.遇到过mysql 死锁吗? 排查和解决的过程简单描述下?

12.MySQL是如何实现事务的? 事务的隔离是如何实现的?

13.git 常用命令有哪些? rebase和merge有啥区别?

14.linux你常用的命令有哪些? 接下来我会根据你说的命令深入考察一下奥(ll. ps -ef, top)

15.某个进程内存占用很高, 如何排查?

16.看你简历写会用python, 你们项目中是在哪些场景下使用了python脚本而不是Java?

17.TCP和UDP的区别

18.TCP 的三次握手四次挥手简单说说, 为什么一定要三次握手和四次挥手, 不这么做会有什么问题吗?

19.docker 和 虚拟机的区别, docker 和 k8s的区别, 如何实现的有了解过吗?

20.http 和 https 的区别?

21.如果要让一个http网站支持https, ngixn的配置大概需要如何写? 有哪些关键的点?

22.你们数据安全怎么做的? 22.平时开发的时候会考虑哪些数据安全问题?以及采取的措施是什么?

23.线上出现了问题, 你一般都是如何排查的, 用到了哪些工具

24.给你一个没文档的老旧的项目, 然后你接到了需求, 你该如何维护如何开发?

25.说说工作中有哪个是你做的最不好的地方? 如果再给你一次机会你会如何去做?

26.白纸手写算法: 现由很多的网络访问记录,主要是记录的有ip 和 端口,请写一个程序筛选出访问量前10的ip和端口(本问题的实质是Top K 的问题)

27.你有啥要问我的吗?

二面(总监)

1.自我介绍

2.简历上哪个项目收获最多? 介绍下这个项目

3.你们这个app(kredit pintar) 会有多少个接口, 走完这整个流程大概会请求多少次?(问: 算埋点吗? 答: 算)

4.你们这一天的PV有多少, 接口的压力大吗? 有做监控吗? 如何做的?

5.看你提到微服务拆分, 为啥做拆分, 当时遇到什么困难了吗? 拆分之后效果好吗?

6.你们会有并发吗? 并发是如何控制的?(这里我展开谈了,分布式锁的实现原理,跟事务一起用分布式锁失效的问题, 以及自己如何排查的, 以及解决方案,后续引申了事务和分布式缓存使用的一些问题)

7.因为我不太懂你们这个业务啊, 你可以给我详细介绍介绍吗? (感觉是在考察表达能力)

8.写个算法吧, LeetCode原题(第300题), 最长上升子序列

9.说说spring 吧, 核心的东西介绍介绍

10.我给你介绍我们的业务吧, 他们大概是干啥的......

11.你有啥想问我的不? 我会尽快给你约下一面

三面(主管)

1.自我介绍

2.介绍下你做的项目, 重点讲遇到的技术难点和挑战

3.你提到了分布式事务的问题, 这个可以说说细节吗? 详细说说你们的分布式事务的解决方案

4.针对分布式事务中提到的问题,会详细的聊细节,比如:短暂的数据不一致你们是如何解决的?(其他的有些记不清了.)

5.你们redis是单点还是集群? 知道哨兵吗? 简单聊聊

6.分布式一致性算法简单聊聊? 主要是为了解决什么问题的?

7.你们线上一共有多少台机器, 你知道容灾是怎么做的吗? 会有扩缩容的问题吗? 如何做的?

8.听过领域建模吗? (DDD)

9.你们触发过熔断吗? 如何做的?

10.下面我们聊聊java 基础, volatile 和 synchronized 的区别?

11.抽象类和接口有啥区别?

12.听说过管程模型吗? 简单说说?

13.AQS的基本实现原理

14.HashMap内部数据结构, HashMap的查找过程, 对比下ConcurrentHashMap?

15.你说到ConcurrentHashMap 是主要是为了线程安全, 那HashTable 也是线程安全的, 而且现代的synchronized 优化的效果已经很不错了, 什么时候用那HashTable, 什么时候用ConcurrentHashMap? 还是说ConcurrentHashMap能完全取代HashTable?

16.时间也差不多了, 你有啥想问我的不?

四面(GM)

1.自我介绍

2.说一下你收获最多的这个项目, 你在这个项目中承担的主要职责和收获

3.这个项目中你提到还款, 你们还款的时候有可能发生逾期吗? 因为东南亚那边的基建比较差, 比如出现还款延迟, 像这种业务边界你们是如何处理的?

4.你们RabbitMQ的路由规则是如何设计的?

5.你们RabbitMQ发生过消息堆积吗? 如何监控和处理的?

6.你们是如何管理接口定义的?

7.你可以详细说说你们app 的整个流程吗?(从新用户登录注册到被催收, 分了首贷用户和复贷用户, 正常还款和被催收等问题) (问: 从登陆注册说起可以吗? 答: 嗯, 就从注册登录说起)

8.我看你对你们项目都熟的, 包括业务细节和架构演进啊之类的, 但是我们这边架构设计工作少, 多数是业务, 相对来说比较无聊, 你是咋考虑的? 因为招一个人和员工离职的成本挺高的.

HR面

自我介绍

常规离职原因和职业发展规划等这些问题

阿里面试

流程概述:内推简历 -> 一面电话面 -> 二面线上做题 ->三面电话 -> 四面电话 -> HR面+额外技术面 -> HR通知定薪和定级 ->offer审批(1周) -> 背调(1周) -> 预入职系统

一面

1.自我介绍

2.拿你最近正在做的项目聊聊吧(交易系统)

3.你们分这么多系统, 是怎么做链路追踪的

4.交易系统的模块这么多, 会有分布式事务的问题吗? 如何解决的

5.说说降级和熔断

6.你们当初是如何考虑选用springcloud的? 为啥没有使用dubbo

7.spring cloud 是如何实现远程服务调用的, 详细说说一个调用的过程

8.你们使用注册中心了吗? 选型有参与吗?

9.下面我们考察下Java基础, 聊聊ArrayList, Linklist, 还有数组之间的区别

10.知道锁升级吗? 说一下锁升级的过程和条件

11.volatile 和 synchronized 的区别?

12.你刚提到指令重排, 为什么需要指令重排? 不这么做有什么影响吗?

13.谈谈volatile 的实现原理

14.说说AQS的基本实现原理是怎样的

15.简单聊聊类加载过程

16.说说JVM的分区, 分别有什么特点? 哪块区域不会发生OOM

17.你了解的垃圾回收算法有哪些

18.full gc 触发的条件是什么

19.知道双亲委派模型吗? 简单聊聊

20.谈谈你对Spring IOC, AOP的了解

21.简单描述下bean的生命周期

22.Spring 是如何解决循环依赖的

23.Spring 事务的隔离级别和传播方式有哪些

24.BeanFatory 和ApplicationContext有哪些区别

25.你知道的设计模式有哪些, 拿Spring 的举一些例子

26.说说脏读和幻读

27.说说MySQL 的加锁规则, 主键索引和普通索引有不一样吗?

28.听过MySQL的意向锁吗? 它是为了解决什么问题的?

29.看你简历写到有MySQL优化经历, 谈谈你都做过哪些优化?

30.开放性题目: 设计一个淘宝用户订单查询页面的系统, 考虑查询量非常大, 每天的新增数据到千万级(考虑分库分表, 如果采用分库分表的话, 策略要讲清楚, 重在反复沟通, 到底要考察什么, 比如说是不是有热点数据之类的

二面

这轮面试纯线上做题, 是阿里的阿里伯乐在线评测系统, 类似纯文本编辑器, 没有任何代码提示, 纯手写代码, 在1个小时内写完提交即可, 没有问答环节

1.给定一个字符串,输出不含有重复字符的最长子串的长度。例如: 输入: "abcabcbb" 输出: 3; 输入:"aaaaa" 输出:1(LeetCode题目序列号: 3)

2.评测题目:java策略模式的实现,场景:为实现校验,需要生成一个8位长度的token,有随机策略、时间戳策略两种

3.共计9个香蕉,有2只猴子,一个猴子每次拿2个香蕉,一个猴子每次拿3个香蕉,如果剩余的香蕉不够猴子每次拿的数量,则2只猴子停止拿香蕉,请用java多线程模拟上面的描述并打印出过程

三面

1.自我介绍

2.详细介绍下你收获最多的项目

3.你们项目中的redis是单点还是集群? 知道redis的哨兵吗?

4.说说redis缓存的击穿和穿透, 以及你们采用的解决方案是怎样的?

5.你们分布式锁用什么实现的? redis还是zk? (答: redis), 说说实现的细节

6.了解过zk吗?

7.你参与了你们消息中间件的选型吗? 简单说说为什么最后选了rabbitmq

8.redis能实现rabbitmq的功能吗? (答: 能) 为啥不用redis做这个事情, 而是通过rabbitmq, 这样有什么样的好处

9.如果让你实现一个rabbitmq, 在设计的时候需要考虑哪些问题

10.如何保证消息接收方消费了消息的? 如何保证消息的可靠传输的?

11.知道redis 中zset的实现细节不, 基本数据结构?

12.你们的监控是如何做的? 简述下如果让你自己设计一个监控系统, 应该如何做

13.阅读过HashMap的源码吗? 1.7和1.8有什么样的区别

14.阅读过Spring 的源码吗? 谈谈你最擅长的那一块

15.除了这些, 你还阅读过哪些源码. 有给开源项目提过pr吗?

16.知道分库分表的方案有哪些吗? 使用过相关的中间件吗?

四面

1.自我介绍

2.大概介绍些你最了解的项目的架构和流程, 重点谈一下你遇到的困难和挑战

3.然后面试官介绍了下他们部门的业务..

4.知道逃逸分析吗? 简单谈谈

while(true){
  new Thread().start();
}

5.上面的这段代码执行会发生什么, 有哪些现象?

6.java 的死锁如何排查, 会借助哪些工具?

7.死锁产生的条件有哪些?

8.如何查看java线程的内存占用情况, 对象占用内存的详情?

9.一个接口, 时快时慢, 如何排查?

10.某个Java进程的CPU暴增, 如何排查?

11.你们平时写文档吗? 用啥管理的?

12.谈谈你未来的职业规划

HR面+额外技术面(交叉面)

1.自我介绍

2.谈一下你最熟悉的一个业务流程, 简单描述下

3.看你简历里面提到了接口权限管理, 能谈谈你们是怎么做的?

4.你们服务拆分是怎么做的?

5.为啥不用dubbo, 而选用spring cloud?

6.你是如何立即分布式和微服务的?

7.你们会有流量洪峰吗? 如何应对的?

8.你们redis 主要用来干嘛的? 有做过缓存预热吗? 如何做的?

9.会用python? 平时都用python做了哪些工作

10.你们项目是用maven 管理的吗? gradle 啊? 与maven对比感觉怎么样?

剩下的就换hr了, 常规hr面试题

快手面试

快手的面试都是在牛客网上进行的, 是为了方便考察代码的能力

一面

1.给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。Leetcode 原题: 25题

-- user 用户表
--  id 主键 age 年龄 gender 性别 1-男 2-女 height 身高  xxx  ...
select 
  id, 
  age, 
  gender, 
  height 
from user 
where age >18 and gender =1 
order by height;

索引建立的顺序如下:

age, gender

gender, age

height, age, gender

gender, age, height

2.根据sql建立合适的索引, 主要考虑索引的规则, 联合所以的好处, 唯一索引和普通索引的区别, 索引带来的好处和坏处

3.如果这一列存储的数据非常大, 如何建立索引?

4.索引的模型

5.索引为啥采用n 叉树, 二叉树行不行? 为什么? 你还知道哪些常见索引模型?

全字段排序和rowid排序

-- course 学生选课表
-- id 主键 stu_id 学生ID course_name 课程 xxx

-- student 学生表
-- id 主键 name 姓名 xxx

1.查询选课超过3门的学生姓名列表, 手写sql

2.说一下这条sql的整个执行过程(从客户端到连接器一直到存储引擎的细节都在考察)

3.Mysql常见的锁有哪些? 简单聊聊

4.sql优化的常见手段有哪些?

5.explain出来的结果, 我们一般重点关注哪几列, 大概有哪些可能的值?

6.你提到了自增主键, 用随机值当主键可以不? 为什么, 会有什么问题?

7.谈谈binlog 和 redolog, binlog的几种模式?

8.有这么一个场景, 明明只查了一行数据, 但是还是非常的慢? 有哪些可能的原因?

9.假如有一列是唯一索引, 但是频繁的去更新, 会有什么问题, 会进一步引发哪些可能的问题?

10.在一个千万级别的视频列表的单表里, 取随机的几个视频, 如果这个需求给到你, 你准备怎么做? 11.如果随机取得视频不能包含用户已经看过或者划走的呢?

12.了解mysql 的主从同步吗?

手写算法和聊mysql 以及各种方案聊了很久, 差不多还剩最后10分钟了, 就问了以下Java的题

13.谈谈Spring 的DI, IOC, AOP, 以及aop的应用场景有哪些

14.Bean的生命周期

15.@autowire是如何实现的

16.final 关键字有什么作用, final finally finalize关键字区别

17.String类型设计成不可变有什么好处?

18.常见的垃圾回收器

19.类加载过程

二面

1.自我介绍

2.介绍下项目以及项目中难点

3.redis 的缓存异常等问题, 缓存穿透, 缓存雪崩, 缓存击穿等问题以及其解决方案

4.大并发访问下的缓存更新问题

5.redis 的内存淘汰策略有哪些? 如何监控redis的内存使用情况?

6.redis 的持久化机制是什么? 各自的优缺点?

7.redis分布式锁的实现细节

8.你们用到注册中心了吗? (答:没,我们用的docker-swarm),docker-swarm能做服务注册发现吗?如何做的?如果让你实现一个注册中心有哪些考量?

9.看你简历写到用到了feign, 谈谈你对feign的掌握程度

10.服务调用失败的手段有哪些, 你们项目中用到了哪些? 服务容错的策略呢?

11.你知道的池化技术实现有哪些? 池化技术有什么好处, 如果是你的话, 如何实现

12.ThreadLocal的实现原理. 使用的注意事项. 为什么要用弱引用?

13.有两个有序的数组,现在将他们合并成一个有序数组int[] merge(int[] array1, int[] array2); LeetCode原题: 88

三面

1.自我介绍

2.介绍一下你最熟悉的项目

3.详细介绍下你们的服务拆分, 遇到什么问题去拆分的, 拆分之后遇到了什么问题?

4.详细说一下你觉得最复杂的那块业务

5.你们项目中的熔断是如何做的

6.你们项目中的rabbitmq会有消息消费顺序的问题吗? 如何控制的?

7.你们会有重复消费的问题吗? 如何解决的?

8.有没有思考过为什么你们要引入消息中间件? 不用的话会有什么问题吗?

9.说一下你线上排查过的最难的问题, 怎么发现和解决的

10.一个网络请求, 从客户端到你们服务端的过程怎样的, 越详细越好

11.手写线程安全的单例, 并会基于手写的单例进一步的提问,比如为什么要双重检查,第二遍不检查会有什么问题, 为啥用volitile修饰等问题?

12.平时都是如何学习的, 最近在看什么书?

13.然后面试官聊了下职业规划, 问还有哪些offer在手上等等..

HR面

1.自我介绍

2.常规HR面试套路