主页: 写程序的小王叔叔的博客欢迎来访
支持: 点赞
收藏
关注
目录
一、头条Java
【1】
一面、
Java多线程 创建线程、线程池、锁(synchroized、reentrantlock等)、volatile作用与原理、atomic原理、CountDownLatch作用于原理(这个用的少,答的不好)
算法题 广度优先遍历打印二叉树,一层打一行(一层一回车),每层中节点间打逗号(节点后有逗号,每层最后一个除外)。
回答锁的时候自己加了用redis、mysql、zookeeper实现分布式锁
二面、
编程求解:小数点后保留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实现redis的get/incr函数等
商业化部,广告组Java
一面:项目为主
1.个人介绍
3.redis和tair的区别?
4.是否有考虑冷热数据的方案
5.算法题:abc*d,只考虑结合律,不考虑交换,共有多少种计算方法?
如ab(cd), 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优化 消息队列
垃圾收集器 和收集算法
nio和bio的区别
jvm调优
秒杀系统的设计
候选人四
1.redis内存结构,redis持久化方案,如何解决数据最终一致性问题的各种解决方案;
2.模块或者系统请求链条中,如何保证处理要么完成,要么回滚;
3.分布式锁;
- 消息队列,rabbitMQ;
5.redis集群的水平扩展方案;
-
soa服务的设计;
-
多线程问题;大模块就这些 其他的都是细节
六、贝壳
一面
1.简短自我介绍
2.请从你做过的项目中找一个难度最大,技术含量最高的介绍一下。
3.JVM原理了解都有哪些?
4.介绍下ZK的选主机制。
5.分布式情况下,如何生成带业务意义的全局唯一id?
6.介绍下微服务的概念,如何实现?
二面
1.根据需求设计数据库表。
2.然后根据设计的表,写sql,展示当前用户能申请的物品(已经申请的不能再次
申请)。
3.现在要给开发同学介绍这个设计,要怎么跟他们说,注意点有哪些
三面
1.JVM内存实战题:两个线程同时执for循环的i++,不加任何同步,i可能出现
的最小值是多少?
2.工作中与PM沟通会有哪些问题。
3.带领团队时,遇到的最大挑战是什么?
七、KEEP
算法题\
- 寻找二叉树的最近公共父节点 用set\
- 计算内嵌list的加权和 比较简单\
- 寻找离指定点p距离最近的n个点,p和n固定。使用最大堆。\
- 给定一个无序序列和指定值a,寻找序列中两个元素和等于a的所有组合。使用map寻找差值是否存在。如果是有序序列,使用两个指针分别指向开始和结尾两个元素,计算两者的和,如果比a大高位往低位移动,如果小于a低位向高位移动\
- 给定一个数值数组,有正数和负数,求最大连续和。 设计另一个数组,存放原数组对应位置最大子序列的和,当前位置的值和前一个位置的最大和加上当前值的和作比较,取最大值。\
- 设计LRU Cache。最近常用缓存。 双向链表+hashmap。 hashmap实现读取的o(1),双向链表的头结点防止最新,每次读取后都把最新的放到最前面。删除时直接删除最后一个,同样o(1)。
架构设计题
1 一个大服务器集群(万台级别),每台服务器会产生不同类型的异常。有一个监控界面,显示24小时内异常数量最多的前100种异常类型,5秒更新一次。
思路: redis,键值是异常类型+时间刻度,时间刻度5s一次。比如nonepointer-20180101080005;key的失效时间是24小时。使用incr递增方式。在每个containor本地添加一个统计模块,5秒更新一次当前containor的信息。然后统计redis中相同类型的计数总和。
⚠️注意 ~
💯本期内容就结束了,如果内容有误,麻烦大家评论区指出!
如有疑问❓可以在评论区留言💬或私信留言💬,尽我最大能力🏃♀️帮大家解决👨🏫!
如果我的文章有帮助到您,欢迎打赏✔️鼓励博主🏃,您的鼓励是我分享的动力🏃🏃🏃~