字节跳动抖音三轮面试
第一轮:
-
影响一个Http服务最大连接数的因素是什么
-
一台服务器如何辨认一个请求是谁发送的
-
如何进行Token认证
-
说一下cookie,为什么要有cookie,cookie中放什么,cookie与session的区别
-
Https是什么,建立连接的过程
-
算法题:给出一个n*n数字矩阵,寻找一条最长上升路径(数字越来越大),每个位置只能向上下左右四个位置移动(Leetcode329)
-
智力题:2n个人围成一圈,两两握手,形成n条线段,线段没有交点。 一共多少种握手方式?
(2)在圆上选择2n个点,将这些点成对连接起来,使得所得到的n条线段不相交的方法数(h(n))
思路:以其中一个点为基点,编号为0,然后按顺时针方向将其他点依次编号。那么与编号为0相连点的编号一定是奇数,否则,这两个编号间含有奇数个点,势必会有个点被孤立,即在一条线段的两侧分别有一个孤立点,从而导致两线段相交。设选中的基点为A,与它连接的点为B,那么A和B将所有点分成两个部分,一部分位于A、B的左边,另一部分位于A、B的右边。然后分别对这两部分求解即可。
设问题的解f(n),那么f(n) = f(0)*f(n-2) + f(2)*f(n-4) + f(4)*f(n-6) + ......f(n-4)*f(2) + f(n-2)*f(0)。f(0)*f(n-2)表示编号0的点与编号1的点相连,此时位于它们右边的点的个数为0,而位于它们左边的点为2n-2。依次类推。f(0) = 1, f(2) = 1, f(4) = 2。结合递归式,不难发现f(2n) 等于h(n)。
问答题都是计算机网络,算法题很快写完而且测试通过,智力题也很快做出,5分钟后二面。
第二轮:
-
说说你所知道的Java中线程安全的集合类
-
Java中有什么办法使对象在各线程中隔离
-
说一下ThreadLocal是什么,如何实现的
-
Redis为什么速度快,多路复用讲一下
-
项目中为什么用ES,ES在超大数据量下如何优化
-
操作系统的分页存储,地址转换
-
概率题:两人抛硬币,抛到正面的人获胜,问先抛的人获胜的概率
-
算法题:给定一个非空二叉树,返回其最大路径和。 (Leetcode 原题)
二面面试官人超好,回答完每个问题会有一个反馈,算法也都是一次通过,1小时后三面
第三轮:
-
实习项目中的难点(面试官不满意,他觉得没什么难度......)
-
一个算法题,回想一下其实不难,通过公式打印出图像,但面试官都没有把题目文字发出来,直接说的题目,而且各种条件也没说清楚,卡了很久,在我不断提问下才明白题目要干什么,面试官已经看出不耐烦了,我就知道凉了。最后题是写出来了,不过时间也过了很久。
-
下一个算法题是上面的改进,很快写出来了
-
最后还剩10分钟,写了个青蛙跳格子 (爬楼梯)
-
最后反问环节面试官对我的提问回答也很敷衍
第三面表现不好,和面试官交流起来很难受,面试体验也一般,问了一下内推人,三面没过,继续努力。
8月5日一面
-
SpringBoot相对于Spring的优势在哪
-
Spring中的依赖注入是如何实现的,实现的原理是什么
-
Spring中运用了哪些设计模式
-
说一说自动拆装箱是如何实现的,是在编译期还是在运行时
-
深入问了一下Redis实现分布式锁(简历上写了),主从问题,脑裂问题,Redis能否解决脑裂
-
计算机网络:三次握手如果第三次的ACK丢了会怎样
-
堆和栈的区别,都会出现哪些异常,JVM中栈的默认大小,如何设置
-
JVM中的常量池放在哪,元空间和永久代
-
JVM问题的排查工工具
-
算法:已知一棵二叉树,如果选择一个节点,则不能选择与之有连边的节点,那么最多能选择多少个节点
第一面面试官态度很好,而且英文特别好,问题很有深度,好多问题都会让我去思考用到的设计模式
5分钟后二面,二面面试官比较忙,没有开视频
-
一个视频传输和存储的编码有什么不同(不会...)
-
聊了聊项目,项目规模大概如何,你所做的工作有哪些价值(答的不好,实习生做的业务不够核心)
-
说一说你为什么用ActiveMQ,消息队列如何保证可靠
-
消息队列如何保证不丢,你们是怎么做的
-
ActiveMQ用LevelDB如何实现集群(不会...)
-
算法:给出两个字符串,求最短编辑距离(Leetcode原题,要是之前没做过我估计当场我肯定不会)
-
算法:上面在求出最短编辑距离的同时,给出编辑的过程
-
计算机组成原理:计算机由哪些部分组成,32位操作系统内存大小
-
一个编译原理的问题,完全不会...
-
路由器和交换机的区别
-
会不会机器学习,你的未来打算
这一面好多不会的,面试官的问题真的很底层,估计评价不高,但竟然过了
8月6日三面
因为上次三面挂了,这次特别紧张,但面试官人很好,首先活跃了以下气氛,问我之前的三面为什么挂,这段时间有什么提高,你觉得自己前两面表现的怎么样。
-
对比一下SpringBoot和SpringMVC
-
设计题:如果你自己实现一个MVC框架,你会如何实现
-
写个伪代码:如何把请求的url映射到Controller层方法上(这个写的不好,面试官说写的太死了,框架不会这么实现的,但也没为难)
-
写个SQL,统计全中国重名最多的十个名字
-
数据库的分表,排序查询的优化,你做过哪些数据库的优化
-
实习用到的RPC框架是什么,序列化方式有哪些,hessian,JDK原生,JSON,Protobuf对比
-
InnoDB与MySLAM的区别,你还知道哪些存储引擎
-
你知道哪些Java虚拟机
-
如果你的用户反应页面刷不出来你会如何排查
-
判断一颗二叉树是否为平衡二叉树
-
你还会哪些语言,能来实习吗
下班前HR通知三面过了
8月7日HR面
-
自我介绍
-
非科班为什么选择做后端
-
都做过哪些项目
-
你的优点和缺点
-
你的未来规划
特别感谢捞我的HR,每一次面试结果都第一时间反馈给我,还主动帮我早点约面和催结果!
写个面经攒攒人品,大家一起加油,哪里跌倒哪里爬起来。'
1.vector底层实现原理 怎么扩容 插入时间复杂度是多少 扩容会有影响吗?
2.输入网址到页面生成发生的事情?
3.ip寻址和mac寻址有什么不同,怎么实现的?
4.ping需要100ms 则从输入地址到返回页面需要多久?
5.内存结构怎么分布的 全局变量和静态变量放在一起吗?堆和栈之间是什么?线程共用栈吗?不共用的话栈都放在哪?
6.程序有bug 可以修改代码段吗?
7.字节序是什么 有什么用 怎么写代码区分大端还是小端?
8.tcp和udp的区别?
9.tcp怎么保证可靠?
可能有些记不清了,就这些
不到二十分钟结束
自己太菜😂