> 文档中心 > 【面试】(Java面试)部分大厂面试总结

【面试】(Java面试)部分大厂面试总结


主页:写程序的小王叔叔的博客欢迎来访

支持:点赞收藏关注

社区:JAVA全栈进阶学习社区欢迎加入

目录

一、头条Java:

二、抖音Java

三、快手

四、滴滴

五、饿了么

六、贝壳

七、KEEP


 一、头条Java

 【1

一面、

Java多线程 创建线程、线程池、锁(synchroizedreentrantlock等)、volatile作用与原理atomic原理、CountDownLatch作用于原理(这个用的少,答的不好)

算法 广度优先遍历打印二叉树,一层打一行(一层一回车),每层中节点间打逗号(节点后有逗号,每层最后一个除外)。 

回答锁的时候自己加了用redismysqlzookeeper实现分布式锁 

二面 

编程求解:小数点后保留30位,求3/7的结果。(边界条件答的不太完美、算法被质疑31/71的情况不适用,但当场也没看出问题,回来试了下没这个问题,跟计算器比较了下,四舍五入没考虑,边界条件的确少了点)

 快速排序的过程,大概表述过程

 在有序数组中查找一个数据,有序矩阵呢?有序的立方体?(一直在用二分法套用,不太清楚有什么更好的方法)

其他如在学校干了什么、在之前的公司干了什么、为什么离职。

期望在学到什么东西,对语言怎么看。

平常干什么?工作中干什么?

三面

怎样实现一个通用的统计访问次数的功能,

答:Redis实现、key可以由部门、系统的前缀+业务id组成,value是访问次数。 

如果同一用户反复访问要不重复记录呢?

如果数据量很大、历史数据很多怎么办

答:mysql存数据,redis当缓存,顺便提了redis数据过期的原理

如果数据结构变动也很大。

答:mongodb替换mysql,之后对比了下两个引擎,还有mysql innodb怎样加锁等问题

一个时段内限流怎么设计?

峰值限流怎么设计?

前后端分离是怎么实现的?

Jvm gc相关问题,gc发生时间,gc对象,堆内空间划分,gc算法记得的都讲了。

还有看怎样查看线上gc情况  打开gc日志、 jstat -gc命令

2

一面

java线程池有哪些参数,具体含义。我结合我做的项目解释了一遍。

线程同步有哪些问题,如何解决。我把锁,队列以及底层原理详细解释了一下

voliate原理,java队列原理

线程数多少如何确定

mysql索引原理,mysql事物类型。幻读,不了重复读怎么解决的

详细介绍一下你自己主要开发的系统,遇到的问题,如何解决的

二面

说一下你业务部门的系统架构,各模块如何通信

写一个sql

表1  学生id,分数

表2  学生id,名字

找出分数唯一(不重复)的学生名字


 二、抖音Java 

【1】

1面. 1. 介绍下项目?你项目里的分布式事务是怎么实现的?状态机是怎么实现的?

 2. CMS和G1有什么区别?你们现在用哪个?他相比有什么优势

 3. ConcurrentHashMap看过吗?看过哪个版本的?JDK 7中怎么实现的?读的时候会加锁吗?

 4. 了解过AQS吗?说下它的原理?他和原生锁相比有什么优势?synchronized有哪些优化?

 5. kafka了解吗?说下kafka的架构吧?副本是怎么复制的?leader挂了是怎么选举的?

 6. 了解什么是聚集索引吗?InnoDB的页结构?为什么用B+树不用B树?了解间隙锁吗?什么情况下会用next-key lock?

 7. 算法:一个单链表,奇数位升序,偶数位降序,奇偶位之间无关系,写一个算法,变为升序

2面:

 1. Redis了解吗?都有哪些数据结构?

 2. Redis有序集合如果不用跳表和压缩列表,你能想到用其他的什么数据结构?你这种数据结构的getRankByScore怎么实现,时间复杂度多少?

 3. thrift RPC原理?你这个thrift mock Server原理?为什么不用client mock,它有什么问题?

 4. 你有在稳定性上做过什么东西吗?(服务端:限流、缓存、故障演练,客户端:异步、熔断)

 5. 你限流是用什么实现的?集群限流是怎么实现的?QPS怎么统计的?

 6. 能讲讲熔断的原理吗?熔断开关什么时候关闭?

 7. 你了解故障演练吗?怎么实现的?

 8. 算法:两个单链表代表两个大数,头结点是最高位,返回两个链表大数和的链表

3

3.InnoDB 事务是怎么实现的(ACID :redolog/undolog/锁/double write)

 4. 隔离性只用锁实现吗?MVCC怎么实现的?

 5. 有没有遇到热key问题?怎么解决?

【2】

1面

hashmap怎么实现的. 使用什么样的扩容机制,为什么使用这样的扩容机智

java内存结构什么,什么东西存在栈中,一个简单函数的栈操作,堆有什么,为什么这么设计。回收算法。

并发包,可见性,锁级别,lock synchronized区别,什么情况使用。lock锁怎么实现的。读写锁怎么实现。

算法,链表题

2面

数据库结构,索引怎么实现的。

acid是什么,innodb怎么解决的repeat read,幻读。

redis map使用了什么数据结构,有什么好处。你怎么设计。

算法,二叉树变双向链表。

3面

介绍项目

如何解决产品和研发的冲突

对机票行业怎么理解的,什么是核心

算法,二叉树广度优先蛇形遍历

注:随着回答,还问了一些细节的东西,比如我回答了,栈中有局部变量、入参。面试官会问多线程的话成员变量放到哪里?都放到一个栈中吗? 多个栈中?线程本地栈和内存模型中的栈什么关系?


三、快手

主要集中在java基础,mysql数据库基础知识,网络通信协议,zookeeper相关实践等。

相关技术问题:

1.mysql?主键?和普通索引?区别。?

2.公司内部服务交互方式?

3.zookeeper相关使用经验?

4.HashMap?

底层数据结构?

5.设计方案:获取三个月内有有订单,一个月无订单的用户

6.数据库锁级别、乐观锁

7.Java实现redisget/incr函数等

商业化部,广告组Java

一面:项目为主

1.个人介绍

3.redistair的区别?

4.是否有考虑冷热数据的方案

5.算法题:a*b*c*d,只考虑结合律,不考虑交换,共有多少种计算方法?

a*b*(c*d), a*(b*c)*d

6.介绍了广告组的组织架构

二面:基础知识为主

1.个人介绍

2.zab协议的优缺点?

3.mysql数据隔离级别?

4.https的原理?

5.tcp四次握手为什么不能是三次?

6.线上time wait状态的连接很多,如何处理?

7.短链接是如何实现的?

8.分布式一致性算法有哪些

9.算法题:1.判断一个字符串是否是另一个字符串的子串

10.一堆无序整数,找出两数和为n的两个整数。


四、滴滴

 基础技术问题

volatile 作用

countdownlatch, cyclebarrier 区别

concurrenthashmap 原理,为什么get能保证获取最新值

mysql锁的分类

threadlocal 了解吗,用途、实现原理

Rpc用的什么,服务发现原理

kafka:topic是什么,多个消费者消费逻辑

http 接口幂等性

jvm 内存模型(内存分为哪些区域)

垃圾回收器、算法

线上问题诊断 套路

线上机器cpu idle掉底,内存打满(查看内存都是可回收对象),可能是什么问题?

算法&编程题

两个线程,一个只打印奇数,另一个只打印偶数,如何按顺序打出1,2,3,4,5,6...

数组中第k小的数字

3面

面试题:

1、二叉树删除节点 

2、你做的这个项目,怎么分模块能展示你的技术点(这个我理解是这么个问题,那面试官表达不清楚)

3、职业生涯规划  

4、滴滴补贴,给什么样的人发会收到成效,补贴多少钱,具体效果和改造之前如何进行对比

5、国际化这块业务,你认为怎么才能实现变现或有哪几种变现形式


五、饿了么

 候选人一:

mysql的优化

消息队列

分布式事务

数据库主从

zk的事务机制

微服务化

候选人二:

redis的内存原理

lru算法

候选人三:

hashmap的源码

 线程安全锁的实现原理

mysql优化 消息队列

垃圾收集器 和收集算法

niobio的区别

jvm调优

秒杀系统的设计

候选人四

1.redis内存结构,redis持久化方案,如何解决数据最终一致性问题的各种解决方案;

2.模块或者系统请求链条中,如何保证处理要么完成,要么回滚;

3.分布式锁;

4. 消息队列,rabbitMQ

5.redis集群的水平扩展方案;

6. soa服务的设计;

7. 多线程问题;大模块就这些  其他的都是细节


六、贝壳

 一面

1.简短自我介绍

2.请从你做过的项目中找一个难度最大,技术含量最高的介绍一下。

3.JVM原理了解都有哪些?

4.介绍下ZK的选主机制。

5.分布式情况下,如何生成带业务意义的全局唯一id?

6.介绍下微服务的概念,如何实现?

二面

1.根据需求设计数据库表。

2.然后根据设计的表,写sql,展示当前用户能申请的物品(已经申请的不能再次

申请)。

3.现在要给开发同学介绍这个设计,要怎么跟他们说,注意点有哪些

三面

1.JVM内存实战题:两个线程同时执for循环的i++,不加任何同步,i可能出现

的最小值是多少?

2.工作中与PM沟通会有哪些问题。

3.带领团队时,遇到的最大挑战是什么?


七、KEEP

 

 算法题
1. 寻找二叉树的最近公共父节点 用set
2. 计算内嵌list的加权和 比较简单
3. 寻找离指定点p距离最近的n个点,p和n固定。使用最大堆。
4. 给定一个无序序列和指定值a,寻找序列中两个元素和等于a的所有组合。使用map寻找差值是否存在。如果是有序序列,使用两个指针分别指向开始和结尾两个元素,计算两者的和,如果比a大高位往低位移动,如果小于a低位向高位移动
5. 给定一个数值数组,有正数和负数,求最大连续和。 设计另一个数组,存放原数组对应位置最大子序列的和,当前位置的值和前一个位置的最大和加上当前值的和作比较,取最大值。
6. 设计LRU Cache。最近常用缓存。 双向链表+hashmap。 hashmap实现读取的o(1),双向链表的头结点防止最新,每次读取后都把最新的放到最前面。删除时直接删除最后一个,同样o(1)。
架构设计题
1 一个大服务器集群(万台级别),每台服务器会产生不同类型的异常。有一个监控界面,显示24小时内异常数量最多的前100种异常类型,5秒更新一次。
思路: redis,键值是异常类型+时间刻度,时间刻度5s一次。比如nonepointer-20180101080005;key的失效时间是24小时。使用incr递增方式。在每个containor本地添加一个统计模块,5秒更新一次当前containor的信息。然后统计redis中相同类型的计数总和。


如果我的文章有帮助到您,欢迎打赏一下鼓励博

https://img-blog.csdnimg.cn/bd28e83d05e646b69bc9b6f0c0917d96.gif