专门刷高频题,事半功倍。
自我介绍;
项目介绍;(问的比较浅)
Http和Https的区别?(ca申请证书、端口、ssl加密传输协议)
了解哪些加密、解密算法?(散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、Triple DES),AES、,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape)
Redis的数据结构有哪些?为什么Redis那么快?(纯内存、单线程、高效的数据结构、多路复用io阻塞)
Java1.7和1.8的区别,仔细讲讲HashMap和CurrentHashMap在1.7和1.8的区别。(已摒弃Segment,用Node数组+链表+红黑树来实现,并发控制使用Synchronized和CAS来操作)
乐观锁和悲观锁,以及CAS是什么,怎么体现在HashMap中?
TCP三次握手、四次挥手的具体过程,以及TCP有哪些保护机制,具体是怎么样的?
JVM内存结构了解多少,GC垃圾回收呢?新生代和老年代的区别是怎么样?
手撕算法:NC54 数组中相加和为0的三元组(顺便手撕快排和归并);
一面
1.Java如何实现线程安全(synchronized,ReentrantLock,AtomicInteger,ThreadLocal,CAS)
2.CAS如何解决ABA问题(版本号)
3.AtomicInteger的原理(UnSafe类,底层是一句CPU指令,避免了并发问题)
4.可重入锁是什么,非可重入锁又是什么(略
5.代码,实现生产者和消费者,一个长度100的buffer,10个生产者线程,10个消费者线程
(我用了ReentrantLock跟Condition,结果忘记了锁的包路径是啥了,我写成了java.util.concurrent.,后来才知道是java.util.concurrent.locks.。。。)
6.对着代码提问,判定条件的while能不能换成if,为什么?为什么用signalAll,可不可以换成signal,二者有什么区别?
7.Spring,AOP是什么,IOC是什么
8.二叉树的概念?红黑树又是什么,红黑树和其他平衡树的区别在哪(红黑树,读取略逊于AVL,维护强于AVL,每次插入和删除的平均旋转次数应该是远小于平衡树。)
9.TCP三次握手的过程,重发报文的过程。
10.TCP和UDP的区别
11.说一下哪个项目觉得最有挑战,有几个模块,介绍一下
12.代码,LeetCode76
二面
1.MySQL的事务特性,事务隔离级别,分别解决了什么问题
2.间隙锁是什么,具体什么时候会加锁(对于键值在条件范围内但并不存在的记录,叫做“间隙锁,当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时加间隙锁)
3.SQLite如何加锁
4.Java里的锁,有哪几种(synchronized和Reentrantlock)
5.ReentrantLock有哪些特性(可重入,公平锁),可重入是如何实现的(有一个引用数,非可重入只有01值)
6.当某个线程获取ReentrantLock失败时,是否会从内核态切换回用户态?ReentrantLock如何存储阻塞的线程的?(AQS,不断轮询前一个结点是否状态发生了变化)所以什么是自旋锁?
7.JVM,说一下最熟悉的GC(我说了CMS,讲了并行回收,浮动垃圾,最短STW等等),然后追问我CMS的整个回收流程,标记,清理等等,年轻代怎么回收等等。(被问倒了。
7.Redis的持久化如何做到的?(RDB+AOF)
8.RDB具体是如何实现的,RDB生成快照的时候,Redis会阻塞掉吗?(使用BgSave,fork一个子进程去并行生成快照,不会阻塞)
9.既然生成快照的中途依然可以执行Redis,那么从节点获取到快照是不完整的,如何同步?(主从同步,先建立连接,然后命令传播,两个结点中的buffer队列里存储一个offset,差值就是需要同步的值)
10.设计题,设计一个扫码登陆(不会)那换成设计微信红包功能(MySQL的字段,Redis缓存一致性,发红包如何add字段,抢红包如何修改字段,通过一个唯一的版本号去保证CAS的ABA得到解决。但说了很久,面试官依然认为思路混乱)
11.算法题,n*n的矩阵,只能向右或向下移动,从最左上方移动到最右下方,把所有的路径输出(回溯,但剪枝忘了。前面的也答得不好,差不多就溜溜球了,也没有继续挣扎了。。)
从自我介绍出发问些相关问题,过往项目、如何学习?
数据库索引,索引失效,B+树与hash
(1.有or必全有索引;
2.复合索引未用左列字段;
3.like以%开头;
4.需要类型转换;
5.where中索引列有运算;
6.where中索引列使用了函数;
7.如果mysql觉得全表扫描更快时)
mysql 事务、mvcc
redis 那些数据类型,zset 原理
解决过那些问题,最难的是那些? 如何定位?
线程池有哪些,配置、原理;要实现一个使用最大线程数的线程池。
hashmap 扩容机制,为什么要在0.75的时候扩容;
hashmap 是线程安全的吗? 为什么?
ArrayList、LinkedList 区别、原理;ArrayList 扩容
说说JVM 、gc root,为什么要有gc root?
场景:某个服务调用压力大,设计一个服务实现限流、缓冲。
算法: NC50链表中的节点每k个一组翻转
后端研发工程师
一面:
1 写一个题,找一个无序数组的中位数
2 写了个快排,然后让我找到无序数组第k大的一个数,我说先排序再找,实际上可以用快排的partition函数。
3 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少,nlgn。
4 操作系统了解么,Linux和windows
5 说说Linux的磁盘管理,一脸懵逼
6 Linux有哪些进程通信方式,五大件(管道,信号,信号量,消息队列,共享内存)
7 Linux的共享内存如何实现,大概说了一下。(共享内存是通过把同一块内存分别映射到不同的进程空间中实现进程间通信。)
8 共享内存实现的具体步骤,我说没用过
9 socket网络编程,说一下TCP的三次握手和四次挥手,中间网络不好,面试官都没听清楚,很尴尬
10 跳过网络,问了项目的一些东西
11 问我如何把docker讲的很清楚,我从物理机,虚拟机到容器具体实现稍微说了下。
12 问我cgroup在linux的具体实现,不会。
13 多线程用过哪些,chm和countdownlatch在实习用过
二面:
1 自我介绍
2 Java的集合类哪些是线程安全
3 分别说说这些集合类,hashmap怎么实现的,扯了很多
4 MySQL索引的实现,innodb的索引,b 树索引是怎么实现的,为什么用b 树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
5 MySQL的事务隔离级别,分别解决什么问题。
6 Redis了解么,如果Redis有1亿个key,使用keys命令是否会影响线上服务,我说会,因为是单线程模型,可以部署多个节点。(使用scan指令可以无阻塞的提取出指定模式的key列表,但重复,需去重)
2 你谈到的并发技术,chm和countdownlatch怎么使用的
3 为什么要这么处理,使用线程池是不是也可以。我说也可以
4 操作系统的进程通信方式,僵尸进程和孤儿进程是什么,如何避免僵尸进程,我说让父进程显示通知,那父进程怎么知道子进程结束了,答不会。
5 计算机网络TCP和UDP有什么区别,为什么迅雷下载是基于UDP的,我说FTP是基于TCP,而迅雷是p2p不需要TCP那么可靠的传输保证。
6 他说不对,我说是不是因为要建立连接,开销比较大,他说不对
7 我说p2p的发送节点很多,所以不是那么需要各种传输保证,他说不对。
8 我说TCP会自动分包而TCP可以自己定义数据长度。。他还是说不对。
最后他说算了。我们问下一个吧。
9 操作系统的死锁必要条件,如何避免死锁。
10 写一个LRU的缓存,需要完成超时淘汰和LRU淘汰。
我说用lhm行不行,他说用linkedlist和hashmap可以。
于是我就写了put和get函数,进行了队头队尾操作。
他说get复杂度会不会太高,我瞎掰了半天没找到办法,他说那就这样吧,今天面试到这。
8 Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么,不清楚。
9 Redis的list是怎么实现的,我说用ziplist quicklist实现的,ziplist压缩空间,quicklist实现链表。
10 sortedset怎么实现的,使用dict skiplist实现的,问我skiplist的数据结构,大概说了下是个实现简单的快速查询结构。
11 了解什么消息队列,rmq和kafka,没细问
12 写题时间到。第一题:写一个层序遍历。
13 第二题:写一个插入树节点到一颗排序树的插入方法,使用递归方式找到插入位置即可。
14 第三题:一个有向图用邻接矩阵表示,并且是有权图,现在问怎么判断图中有没有环。
15 我说直接dfs走到原点即为有环,刚开始写的时候我又问了一嘴是不是只要找到一个就行,面试官说是的,然后我说这样应该用bfs,有一次访问到原节点就是有环了。
16面试官问我不用递归能不能做这个题,其实我都还没开始写。然后我就说没有思路,他提示我拓扑图。我没明白拓扑图能带来什么好处。现在一想,好像当访问过程中找不到下一个节点时就说明有环。做一个访问标记应该就可以。
17 第四题:一个二叉树,找到二叉树中最长的一条路径。
我先用求树高的方式求出了根节点的左右子树高度,加起来便是。
18 然后面试官提示需要考虑某个子树深度特别大的情况,于是我用遍历的方式刷新最大值,用上面那个方法遍历完整个树即可。
19 面试官说复杂度比较高,但是由于时间问题就说结束了。
一面A部门
讲项目,串起来讲,可能遇到的问题,怎么解决,怎么实现,讲了发送客服消息
Spring里面的bean怎么回事
HashMap和ConcurrentHashMap,HashMap中的红黑树,两者rehash的区别
Mysql的一致性是什么,数据库redolog,undo log,MySQL的索引结构,为什么二级索引叶子节点不能直接存储行数据的指针,这样可以不回表,怎么考虑的?
redis里面的zset,跳表怎么实现,怎么增删,
redis是怎么rehash的
算法,二叉树转双向链表
二面A部门
自我介绍
再一次聊项目,功能,架构,角色,量级
Spring里面有哪些设计模式
SpringMVC和SpringBoot有什么区别
SpringBoot的自动配置是怎么实现的
刚刚你说了线程池,你线程池是用的什么,参数有哪些,为什么这么设置
线程池核心线程满了怎么办,里面的阻塞队列是干什么的
说说ThreadLocal是什么
CAP理论知道吗,为什么不能同时满足
Redis里面的数据结构有什么场景
Redis怎么实现锁(redis锁的所有坑都说了一遍)
分布式事务知道吗,有哪些方案(说了2PC,3PC,TCC,MQ)
算法题,树的直径
有什么要问我的
三面A部门
介绍项目
场景题,设计一个朋友圈,读QPS 1000w,写QPS 10w
算法题LFU
你有什么问题
这个面试官是个leader,比较强势,很多细节回答的不是很好,所以脸色一直不好,给人压力较大,面完就觉得凉了。果然面完之后和前两次不一样,HR那里就没有任何通知了,到这里还是很失落,准备了那么久,因为最后一面没表现好导致挂掉。之后等了一个月,这一个月没有任何消息,一个月过后又接到字节HR的电话,说我之前两面面评都不错,让我试试他们部门,我就同意了。
一面B部门
介绍项目,细节
怎么做服务拆分,边界怎么划分的
分布式之后会遇到什么问题,CAP的各个情况介绍一下
dubbo调用过程是怎样的,PB知道吗
thrift了解过吗
zk介绍一下,有哪些节点类型,特点
怎么知道项目中接口的重要性,怎么做监控,你说的自动化测试是怎么做到的(这个问题回答完,他笑了。。。)
你所理解的SLA是什么,要达到什么等级
说说你理解的k8s
nginx的upstream是干什么的
nginx有哪些负载均衡策略
算法题:岛屿数量
你有什么问题要问我
二面B部门
介绍项目,细节
锁有哪些实现方式
分布式锁的实现方式
JVM的内存模型,垃圾回收算法
MySQL的事务介绍,ACID的实现原理是什么(想问MySQL的日志)
HashMap的原理,其他线程安全的Map
Redis的高可用,有哪些持久化方式
Redis的数据结构,线程模型
用过什么消息队列,有什么特点
怎么保证消息幂等消费
docker的网络模式
算法题:比较版本号
提问
三面B部门(交叉面)
介绍项目,细节
Linux的内存管理
浏览器打开一个网站的过程中会经历哪些网络处理,DNS的具体过程是啥
zk是什么分布式模型(想问的CAP定理),主从怎么做选举
zk只有一个主节点,写性能不高,zk怎么解决的
etcd或consul知道吗
多个服务中如何快速排查问题
Redis中的淘汰方式有哪些,Redis性能高的原因是啥
docker的实现原理
算法题:相交链表
四面B部门 (leader面)
介绍项目,细节
项目量级多大,QPS最高的接口是怎么做的
rpc怎么实现服务发现
zk中的watch机制是怎么实现的
分布式锁有哪些实现,MySQL,zk,Redis都说了一遍,并且分析了各自的优缺点,这个问题问的频率太高了
怎么提高数据库读写性能
k8s了解吗
servicemesh有做过吗
五面B部门(HR面)
离职原因
职业规划
期望薪资
基础知识
常用集合、数据结构(数据增删改查操作的原理具体实现、各参数的含义,以及如何组合使用)
Java的语法,OO的思想要熟悉,常用设计模式要知道场景
JVM内存模型,垃圾回收算法,垃圾收集器的区别,GC调优
线程模型
IO模型(包括操作系统底层IO模型和常见BIO、NIO、AIO、IO多路复用的原理)
Redis(数据结构的内部实现、淘汰原理策略、持久化、集群、扩容、数据同步、以及一些常见缓存问题的解决方案)
MySQL(索引原理,查询优化,三大日志)
消息队列(内部原理,常见消息问题解决方案)
分布式原理、算法、rpc原理(paxos、raft、zookeeper的原理)
分布式场景题(高可用,高性能相关)
其他知识
位运算
大数据量操作(在有限时间内完成、在有限空间内完成)
设计题(看一些常见的分布式ID、分布式计数服务等等)
算法
数组
链表
位运算
二叉树(dfs,bfs,相当重要,只要会了二叉树,回溯那些算法也会了)
设计题
LRU/LFU
排序
查找
一面:
1、final是干嘛的,用在什么地方,你们项目中有用到过吗
2、有那些集合,一个一个说linkedlist,arraylist,hashmap
3、说一下hashmap基本结构,和hashmap的扩容,hashmap的并发
4、说一下jvm的垃圾回收器,有那些,算法有哪些,他们的优缺点
5、线程池用过吗?用来干什么?说一下线程池。
6、做过sql优化吗(我简历上写了),说一下吧。
7、mysql的索引说一下,b+树的优缺点
8、说一下dubbo的架构(简历上有写)
9、说一下kafka的topic,partition,broker概念
10、kafka的主从选举机制
11、redis用过吗?有哪些数据类型,常用什么数据类型?我有说zset,那说一下zset的底层原理吧
12、linux中你用哪些命令
13、linux中想看一个文件中某个关键字出现的次数(我不会,后面还会问到。。)
15、做题:leetcode56题,合并区间。
二面:
直接先做题:leetcode70 跳台阶,这个我做过所以写的很快,还说了下递归和动态规划的优缺点,
然后特别,面试官发给了一个飞书文档的连接,上面有很多实际的问题,大致有这些:
1、给一个实习生写的代码,请指出他的问题
2、给定一个订单和商品的要求,请设计表结构,然后有三个问题,分别写3条sql来。根据联合索引来设计索引。
3、接着第二题,用redis来存储上面问题查询出来的结果,该怎么写redis
然后:
1、问一个之前问过你当时你没回答上来的: linux中想看一个文件中某个关键字出现的次数,嘻嘻,那天面试完我去百度了!
2、说一下redis的主从复制,缓冲区大小,超过缓冲区大小怎么办?
3、tcp三次握手,为什么三次,为什么四次
4、tcp快速恢复,快速启动,慢启动
5、进程和线程的区别(这一部分没细问,他说看你是搞java,如果是搞c的会问的更加深入。)
我算法题做的比较快,问完上面的问题后就花了30分钟,面试官看太快了,就说你还有什么比较拿手的,我就说了说我做过一点mysql的治理。然后又聊了10分钟
三面:
直接先做题:合并两个有序链表。。
1、你做过哪些项目?
2、说一个你觉得难度最大的项目,你是怎么解决技术难点问题的。
3、你做过微服务项目吗?用的什么技术?
4、你说一下springcloud 的 hytrix的原理是什么?
5、说一下dubbo的原理。
6、用过redis吗,项目中怎么用的。
7、知道微服务网格吗,知道微服务治理吗?
8、你的优点和缺点
MySQL 的索引?B+树的结构介绍下?B+树与B树有什么优势?
事务的四个特性?事务的隔离级别?讲讲MySQL 的事务隔离?RR解决了什么问题?
MVCC & 锁
MySQL 平滑水平扩容方案?
Redis 线程模型?持久化方案?
Redis Cluster?其他开源集群方案?
Redis Cluster 是如何进行扩容的?
Redis hash、zset 数据结构?跳表是怎么构建的?
并发修改数据库并回写Redis 如何保证数据一致性?
Redis 加锁方案?Zookeeper 加锁方案?各有什么优缺点?
JVM 垃圾回收机制?CMS 收集器?
Netty 的优势在哪?有什么问题吗?
HashMap 的结构?ConcurrentHashMap 读写加锁吗?
ThreadLocal 的结构?
流量控制算法了解吗?介绍下
设计一个短链接生成系统?数据如何存储?高并发如何处理?
讲讲 ZK 的结构?如何进行选主的?从 CAP 分析下
算法:股票收益、str2int、树的最大路径
先做一下自我介绍
你这个项目的QPS、订单量有多少
如何解决超卖问题
假如让你设计一个秒杀系统,怎么设计才能承受百万级并发
Redis也扛不住了,万级流量会打到DB上,该怎么处理
分库分表怎么设计
水平分表依据什么分?时间还是数据
分库分表之后我想查询近期的订单,怎么查
数据存储引擎有哪些
InnoDB和MylSAM的区别
select count(*)时InnoDB和MylSAM分别是怎么处理的
聚簇索引和非聚簇索引的区别
假如数据库某个字段是String类型,读的时候用int类型去接收会有什么问题?反过来呢?
事务有哪些隔离级别,分别解决了什么问题
可重复读是怎么解决脏读的
有俩事务,事务A:读、写(张三)、读 事务B:读、写(李四)、读,假如俩事务同时执行,结果如何
Redis有哪5种数据类型
Set、Zset分别用于哪些场景
Redis是怎么删除过期key的
Redis有哪些持久化方式
你用过哪些队列
说一下AMQP协议是怎么定义一个MQ的
交换机有哪些消息转发模式(大体是这个意思)
HTTPS工作原理
编程题:最小覆盖子串,时间控制在25分钟之内
你还有什么想问的吗
一面
-
介绍一下自己, 为什么选择出来看看机会
-
聊项目, 警报怎么做的, 统一接入监控项怎么做的
-
聊项目, 配置中心项目, 问实时配置推送怎么做
-
讨论为什么选择所有的组件依赖放在配置中心中控制
-
我现在要做一个限流功能, 怎么做?
-
这个限流要做成分布式的, 怎么做?
-
怎么抢锁?锁怎么释放?
-
加了超时之后有没有可能在没有释放的情况下, 被人抢走锁?怎么解决?
-
不用 zk 的心跳,可以怎么解决这个问题呢?
-
假如这个限流希望做成可配置的, 需要有一个后台管理系统随意对某个 api 配置全局流量, 怎么做?
-
某一个业务中现在需要生成全局唯一的递增 ID, 并发量非常大, 怎么做?
-
算法题, M*N 横向纵向均递增的矩阵找指定数
-
有什么想问我的?
二面
-
平时用的工具链和技术栈是什么?
-
golang 踩过坑吗?
-
这段 golang 代码有没有 bug?
-
Java 中 HashMap 的存储, 冲突, 扩容, 并发访问分别是怎么解决的?
-
拉链法中链表过长时变形为红黑树有什么优缺点?
-
HashMap 的并发不安全体现在哪?
-
HashMap 在扩容时, 对读写操作有什么特殊处理?
-
ConcurrentHashMap 是怎么做到并发安全的?
-
Java 有哪些锁机制, 分别有什么特点?
-
知道 CAS 吗? Java 中 CAS 是怎么实现的?
-
MySQL 的存储引擎用的是什么?为什么选 InnoDB?
-
MySQL 的聚簇索引和非聚簇索引有什么区别?
-
B+树和二叉树有什么区别和优劣?
-
针对一个场景设计索引,考察的是联合索引与列选择性的知识
-
现有一个新的查询场景, 要怎么解决?
-
假如要查 A in () AND B in (), 怎么建索引?
-
查 A in () AND B in () 时, MySQL 是怎么利用索引的?
-
假如查询 A in (), MySQL 是针对 N 个值分别查一次索引, 还是有更好的操作?
-
用过 Redis 的哪几种数据结构?ZSET 是怎么实现的?
-
zrange start, stop, 总长度为 n, 复杂度是多少?
-
Kafka 的消费者如何做消息去重?
-
介绍一下 Kafka 的 ConsumerGroup
-
Kubernetes 和 Docker 用得怎么样?
-
时序型数据库的存储结构是怎么样的?
-
LSM 树了解吗? 是一种什么存储结构?
-
在生产中用过 Cassandra 和 RocksDB 吗? 量有多大?
-
Cassandra 的墓碑机制是什么 ?
-
算法题:牛客题霸上的原题,可以去看看:NC76用两个栈实现队列
三面
-
聊项目和工作经验
-
用 Kubernetes 的过程中踩过哪些坑?
-
考虑一个业务场景: 头条的文章的评论量非常大, 比如说一篇热门文章就有几百万的评论, 设计一个后端服务, 实现评论的时序展示与分页
-
假如用 id 翻页的方式, 数据库表如何设计? 索引如何设计?
-
假如量很大, 你觉得需要分库分表吗? 怎么分?
-
分库分表后怎么查询分页?
-
分库分表后怎么保证主键仍然是递增的?
-
现在需要支持深分页, 页码直接跳转, 怎么实现?
-
瞬时写入量很大可能会打挂存储, 怎么保护?
-
断路器内部怎么实现的?
-
断路器会造成写入失败, 假如我们不允许写入失败呢?
-
算法题: N 场演唱会, 以 [{startTime, endTime}…] 的形式给出, 计算出最多能听几场演唱会。用你最熟悉的语言把这个算法实现
-
你用了贪心法, 贪心可能会存在什么问题?
一面:
自我介绍,做的项目价值,架构设计,给你一个集群你会怎么分布,考虑哪些因素,容灾、负载均衡
让你来设计咸鱼,你会怎么设计?模型设计
linux常用指令
二面:
算法在线编程
项目,主要做了什么,项目中碰到的问题有哪些,都市怎么解决?你觉得那个项目是最有挑战的
java多线程,线程池的选型,为什么要选这个,底层实现原理
三面:
你最熟悉的项目,做了什么,为什么这么做,怎么体现你项目的价值
让你来推广广告,你会怎么设计?
java基础问了些,JVM内存模型 G1和CMS垃圾回收器
如何中断线程,await和sleep区别
设计一个秒杀系统
spring生命周期,几种scope区别
四面:
跟上面差不多
五面:
主管面,主要问项目,然后说下他们在做什么
六面HR:
期望薪资,为什么要离职,现在的级别,会考北京的原因
自我介绍
你对全栈的理解
离职原因,为什么这个时间离职
技术上没有学到东西吗?
哪块儿比较熟?
synchronized?mute lock怎么实现的
Java看过哪些源码?线程池好处?多创线程就怎么了?压测的时候创建几千个线程才几毫秒这点儿开销有必要节省吗?内存开销,时间开销?线程池参数,execute执行流程,work?没有工作会删除吗?睡眠状态?idl怎么配置的?最大线程满了之后?
有哪些Map?还有啥Map?用的jdk几?说一下HashMap数据结构,put值散列冲突怎么解决?链表树化转移数量?为什么是8为什么是6??为什么数组要是二次幂?怎么扩容的?扩容rehash的流程?
concurrentHashMap的散列流程?concurrentHashMap怎么实现的线程安全?CAS什么意思,怎么实现的?Unsafe怎么实现?concurrentHashMap什么时候用到CAS?并发情况下两个线程都到之后怎么插入的?初始化的时候两个线程都检测到需要初始化了,然后怎么做的?
算法题 coins硬币 / 一句都没写出来,做了20min白卷交的,(我:该用动态规划做,但不知道怎么下手了,面试官:转移方程怎么写?我:对不起,忘记了)
怎么学习的?
最常看的博客?网站?
有什么好书?技术和非技术都行
怎么看待学习和看书?
你有什么问我的?
我进入您的部门哪方面需要提高?
大概什么时候出结果?
字节跳动 二面 30min 没算法题 挂
「忘记录音了,只记得这些了」
自我介绍
为什么离职?
你觉得自己有什么可以拿出来讲的点吗?
你做的主要工作有什么?最复杂的一个业务讲一下流程?
并发度提100倍有哪些优化的点?
限流怎么做的?令牌桶的算法实现?限流还有哪些方式?
接口450ms 优化到了 360 ms怎么优化的?
tomcat只是修改了一下参数吗?
redis集群部署方式?主从和哨兵的区别?
缓存方式还有哪些?
redis数据结构,string底层实现,跳表复杂度?
redis使用过程中出现过变慢的情况吗?
nginx后面的形态是怎么样的?
网关层还了解什么技术?
对自己的定位,技术发展?
别人对你的评价?
你有什么问我的?
一面
面试形式:牛客网
特别说明:头条是唯一一家需要你的代码在牛客网那个IDE下AC的公司,直接面试官可能会给你测试样例让你测试,一般给20分钟
算法:找零钱
Redis为什么这么快?多路复用io模型?跟多线程对比?select epoll模型?
epoll怎么实现的?都用了哪些存储结构?什么时候就绪事件?回掉函数在哪里注册?epoll是怎么使用的步骤?epoll wait干了什么?给redis服务端发送get数据请求,是如何处理的?
zset数据结构是什么样的?为什么采用跳表?insert一个数据是怎么样的流程?get一个数据是怎么样的流程?多级索引是怎么更新的?如何确定一个数据在第几层?各自的时间复杂度是多少?你觉得还有什么优化的地方?
Redis的高性能是怎么实现的?多主多从?一主多从?各自插入一个key的时候是什么样的流程?主从复制是什么样的?怎么强一致性?什么情况下不适合?主挂了,各自的选举是什么样的?怎么完成主备切换的?如果主挂了,从没复制完全,会出现什么问题?什么样的情况下可以使用这样的组群方式?什么样的情况下不适合?
raft协议 paxos算法
http状态码 300 400 500 499
dos ddos drdos 如何避免?怎么预防?怎么发现?利用了TCP什么特点?怎么改进TCP可以预防?服务端处理不了的请求怎么办?连接数最大值需要设置吗?怎么设置?
Thrift RPC过程是什么样子的?异构系统怎么完成通信?跟http相比什么优缺点?了解grpc吗?
https http1.1 2.0 3.0
hashmap如果的确需要很大容量的数据去操作的时候,怎么办?怎么优化?
二面
面试形式:牛客网
linux fork子进程 如果在线程中fork会怎么样?如果总共就4g内存,一个进程有10个线程,在线程中fork,能不能fork出来?
TCP连接server端跟client端都有几种状态
linux作为client端可以最多建立多少个tcp连接?作为server端呢?
建立tcp连接时,如何connect时候阻塞了,那么怎么能不阻塞,去干别的事情?
linux怎么监控cpu运行情况?端口连接情况?tcp连接情况?占用了多少内存?
epoll 多个请求怎么处理?fd什么时候可读,什么时候可写?epoll模型有没有用到什么队列去等待的,来一个请求处理一个吗?能写处理流程的一些伪代码吗?
Redis是怎么处理请求的?单机的qps是多少?如果一直用get,你觉得达到qps的顶点,它的限制点在哪里?怎么能够突破峰值qps?怎么用单线程处理的请求?如何解决单机qps达到峰值的问题?
redis分布式锁,怎么样实现?怎么理解?不用redis可以吗?有什么问题?生产上出现过问题吗?为什么会出现?怎么优化?考虑过zk吗?单机redis分布式锁?集群状态下分布式锁?主从下分布式锁?都是什么情况?redlock怎么理解?
系统怎么算高可用?多部署机器能实现什么?有什么弊端?有什么优势?怎么实现高可用?多部署机器能实现高可用吗?熔断机制是什么?怎么实现?
三面
面试形式:牛客网
算法:两个有序数组间相加和的Topk问题
分库分表 数量级 系统qps 聚合怎么做?
扩容怎么做?
redis 淘汰策略?超过最大内存限制发生什么?redis什么时候会慢?redis持久化机制
nosql es能解决什么问题?hbase呢?
一面 一般是同事面,知识比较简单,但是回答一定要多扩展。
jvm 用了哪些参数。调整JVM内存占用整个容器的比率
容器内存的大小根据什么配置
jvm内存划分有哪些?
线程私有的有哪些?
实例化之后运行一个方法?
项目 日志告警是如何实现的?
redis 跳跃表是如何实现的
setnx 做分布式锁有什么问题
在主从模式下,分布式锁会有什么问题?
mysql索引有哪些?
主键索引和唯一索引有什么不同?
b+树了解吗?是什么一个数据结构?为什么使用使用b+树?
电商一面
算法题
剑指 Offer 52. 两个链表的第一个公共节点
Leetcode 31. 给定一组数字,任意组合,求比给定组合M大的最小值
Linux
统计当前目录下(包含子目录) java 的文件的代码总行数。
wc -l find . -name "*.java"
| awk '{ sum=sum+$1 } END { print sum }'
管道的理解,管道除了存内容还存什么?
Linux管道是一个操作方式为文件的内存缓冲区
| 是匿名管道,父子进程间使用,父进程先打开一个管道,然后fork出子进程,子进程通过拷贝父进程的地址空间拿到管道的描述符,从而可以读写
程序正在跑
ctrl + c,会发送SIGINT的信号,等同于kill -2(interrupt),程序那边接收到这个信号后做处理
ctrl + z,会发送SIGTSTP的信号
MySQL
Innodb 索引结构
普通索引,唯一索引 之间的性能差异
唯一索引需要保证插入前没有数据,普通索引可以在写入磁盘前加 change buffer
事务级别,MVCC
二阶段提交
用户表t_user表,年龄age(int类型),求哪个年龄的用户最多
select age, count(1) from t_user group by age order by count(1) desc limit 1;
网络
访问 https://toutiao.com 过程中发生了什么
dns(nslookup, dig) -> tcp -> http -> https(SSL)
网关 -> service -> client
浏览器渲染
成长
最近阅读的相关书籍
Dubbo官方文档,美团技术博客,其他大厂技术博客,effictive go,Java并发编程实战
电商二面
项目
毕业1年的成长与经历
Redis相关经历
算法
开根运算 (误差1e-5)
判断二叉搜索树
堆排序
数学
两枚硬币,甲乙分别扔,然后谁扔正面谁赢,求甲赢的概率
1/2 + 1/(2^3) + 1/(2^5) + ... = 2/3(1-(1/4)^n) => 2/3
http
get和post区别(是否可以缓存)
http和https区别
中间人攻击
https如何抓包(Fiddler or Charles)
Redis
单线程模型
数据结构
跳表实现,如何插入节点
mget和pipeline区别
mget和pipeline都是多命令一起执行,只有一次往返的网络IO
mget在集群下可以并行去获取,pipeline还是串行
主从同步的细节
全同步
增量同步
可以试试Memcached或者多线程的Redis
电商三面
类Leetcode 718. 最长重复子数组,求两个字符串的最大相同子串
Java
讲一下ConcurrentHashMap
为什么比HashTable的效率高
CAS操作,有什么问题,解决方案
线程池
处理流程
为什么先corePoolSize,再入队列,最后maxPoolSize
类加载机制
为什么需要双亲委派
MySQL
给定表T (id name salary city)
salary > 10000 && avg city salary > 5000
索引的数据结构实现
InnoDB默认事务隔离级别RR,实现方式(MVCC+间隙锁)
Redis
数据结构,使用场景
一致性hash
Dubbo负载均衡算法里面的一致性hash,虚拟节点,另外强调了不能加权
网友评论