字节一面 (1.11面试,当天晚上20:42约我1.12下午面)
1.不同版本的hashmap有什么区别
2.HashMap哈希冲突怎么解决
3由于上面提到了红黑树,追问红黑树,然后问平衡树的定义
4.哈希冲突除了拉链法还有什么方法
4.1问ThreadLocal
5.问项目:秒杀 数据丢失怎么处理 宕机怎么处理。我提了redis增减的原子性+rocketmq事物+秒杀完之后通知openresty直接拦截请求进行服务降级,中途问了几个问题,反正也和数据丢失有关,我回答我的数据不丢失的前提只保证不超卖,然后反正围绕着redis原子性操作和rocketmq的事物消息答出去了,答完面试官没追问了
6.redis消息丢失?这个感觉问的很泛,不过再我的回答里面,是提到了主从防丢失 还有哨兵和cluster,然后补充了redis集群/哨兵是AP的系统
7.解释redis RDB AOF
8.追问主从节点里面,从节点同步主节点是一个怎么样的过程。我答了个psync。
8.1追问了psync的过程,然后继续追问什么时候主节点向从节点同步消息。
8.2看我说了psync之后,问了我,什么时候全量同步什么时候增量同步,我的回答是从节点连上去的时候发psync看情况全量还是增量,然后再之后就是主节点收到消息异步发送到各从节点了
8.3 redis 是单线程的么。我是说6.0.0之后提供了多线程,但是默认还是多线程。我以为要追问epoll和redis单线程为什么快的时候,不过居然没有问下去了
8.4 redis hyperloglog
9.问哨兵的作用
10.问哨兵一般几个节点,我说至少三个,一般是奇数个。这个我没答出为什么是奇数个
11.问分布式选举算法。答了paxos,raft,zab。然后他看我回答出来了,然后他问我,那你应该答的出为什么哨兵节点数量应该是奇数个,然后我才反应过来,回答了要大多数节点
12.问我平时用什么中间件或组件,dubbo zk elasticsearch springboot springcloud kubernetes mysql
13.问mysql 有哪几种引擎 我直答了 myisam innodb 哈希的内存引擎
14.innodb有哪几种日志?(redo log,undo log,relay log binlog(x))
15.redo log 在server层还是引擎层
15.1 追问redo log的作用 我回答的崩溃恢复
16.是否听过 crash safe
17.一条消息写mysql的全流程 这个我感觉我回答的和网上有点偏差,下面是我的答案:消息来的时候,先写redo log 和 undo log,redo log 进入prepare阶段,然后写binlog,写binlog之后会把binlog交给dump thread线程,然后dump thread线程会把binlog同步给从节点的一个线程,然后这个线程会把主节点发过来的消息写到relay log,然后从节点的另外一个线程把relay log写到从库里,然后回到主流程就是binlog写完就commit redo log
18.追问binlog写完之后操作redolog么(两阶段提交那套)
19.算法题
形如这样的无序数组[1,1,2,2,3,4,4,5,5,6,6,8,8],除了一个数字只会出现一次,其他数字成对出现而且相邻排列,找出只出现一次的这个数字,二分法(要求时间logn,空间n),这个算是写出来了,不过代码有点bug,超过了5分钟把问题改过来了
提到了 dubbo自己的SPI 注册中心
2.(简历)其他微服务上下线,dubbo是怎么感知到的
这个我说根据注册中心的不同,dubbo的策略有所不同,我回答了两个注册中心,一种是Zookeeper,补充了他是CP的中间件,然后提到了Zookeeper临时节点和他的监听器机制,然后dubbo会在zookeeper里注册监听器来感知其他节点的上下线,然后说了如果用eureka这种AP的注册中心,就是定时到eureka里面的读缓存里获取
3.微服务中网关的作用 鉴权 认证 转发 过滤 作为统一入口的那些
4.(简历)netty高性能的原理,然后这里扯了挺多的NIO 操作系统的多路服用(nio在linux上和在windows上的多路服用api不一样,nio都做了封装),然后提到了epoll,然后说了netty的reactor线程模型,有一个接受连接的线程,分发给NioEventLoop的那些线程,那些线程循环select 读写事件,然后经过自定义的pipeline逻辑去处理。
5.看我知道epoll,就追问epoll和select的区别,这里我把epoll和select的原理都说了一遍,他也没有追问
6.(简历)rocketmq 保证消息不丢 和 消息的幂等性(这个好像是) 的原理,这题我直接把rocketmq整个架构答了一遍,然后说了消息不丢的所有情况,然后说了rocketmq原生无法保证绝对的不重复性要在业务保证,这里我连续说了5分钟没停,因为说了整个架构
7.追问我业务怎么保证消息的幂等性,redis标志位(不完美方案),或者在业务上设计成幂等性的
8.(简历)K8S有状态服务是什么 这个就是定义问题
9.追问K8S有状态服务包不包括数据在内存的情况
10.追问K8S的数据如果放在内存里,有状态服务挂掉了或者扩容的时候会有什么问题,扯了个数据丢失,不过应该不太正确
11.追问除了数据丢失还会造成什么问题吗?这个是真答不出来了。
12.redis一次性获取多条消息的命令,这个我答的是mget,pipeline,lua
13.追问追问上面那三种方式的优缺点
14.jvm的原理,这个问题感觉太大了,就随便说了点jvm相关的底层
15.class文件加载过程
16.追问类最终是从哪里加载的
17.java new一个object的过程
18.操作系统的虚拟地址
19.操作系统保护模式及其实现原理
19.1 有了解过字节对齐吗
20.内存碎片是什么,操作系统对内存碎片的解决方案,后面那个问题其实问的是操作系统的对内存、文件这种空间的分配策略比如最好适应和最坏适应(最好适应是找到能用的最小的内存,最坏适应是找到能用的最大的空间),这个其实是操作系统课上的内容了
21.
static int g = 12;
int add(int a,int b){
int c = a+b;
String str = new String();
return c;
}
上面涉及的变量和对象分别在哪些空间
22.不用写代码的算法题:合并K个有序链表,并分析时间复杂度和空间复杂度
23.算法题:
数组中重复次数最多的数字
找出一个int数组中重复次数
最多的数字(多个时取最大),
数组长度n,
数组元素m满足 0<m<=n<50000.
要求时间复杂度O(n),
空间复杂度O(1)。
测试样例:
输入 [2,3,1,3,5], 输出 3
输入 [2,3,1,3,4,5,4,6], 输出 4
这个题是用原本的数组当hashmap
字节三面(1.14面完,1.19收到l感谢信)
1.连接linux的服务器如果连打字都卡了该怎么排查
2.问iowait(mpstat里的)和wait()
3.问有什么排序算法和他们的时间空间复杂度
4.追问冒泡排序优化
4.1追问希尔排序 基数排序 计数排序
5.快排空间复杂度答错了,追问快排,手写了快排代码之后,才反应过来是logn
6.让我写桶排的代码
7.大顶堆、小顶堆的定义
8.写题目,用定长数组实现一个队列,有push,pop,isEmpty方法,让我实现,尽可能的减少时间复杂度和空间复杂度
面试体验:第一次感受到了字节效率确实很高,一二面面完都是当晚就打电话了,一二面追问的问题也很浅,都是按着简历问,也能答出个百分之80-90,第三面比较奇怪,不知道为什么难度骤降,算法题给的也简单,时间大概是45分钟,面完我以为我有机会的,但是最后还是凉了,只能乖乖去准备春招的暑期实习了。
失败原因:也许一起投这个岗位的,也有很多,而且实力比我强,而且语言方向也匹配,再或者是,我的道路选错了吧,java太卷了🙃,除了字节我也去投了cvte,cvte一面面完当天就通知我过了,结果差不多两个星期了,还是没有回音,问了下师兄,去应聘的百分之80的都是java的,人太多了安排不过来。现在也挺迷茫的,真的很想进大厂,但是技术路线繁多,也不知道从何下手,和好几个腾讯的师兄交流过,有的觉得纯刷题就完事了,有的觉得把底层(redis源码,流式计算源码,os内核)吃透了比较好找,有的师兄说不能偏离业务,我曾经选了第三条为主线,可惜我接触不到什么很高深的业务,刷题也是我的弱点,底层的话,也就了解一点粗浅的,和一些java生态独有的源码,有点高不成低不就的无力感,复习的时候也感觉自己漏洞还是比较多的,但是需要长时间填补。我还投了个杭州的淘系电商,二月底才面试,我看那个内推人给我发的资料,对业务比较看重,这假期还是押宝一下环绕业务的技术方案,希望能通过二月底的面试吧,再不过的话春招再战,真的很想要一份大厂的实习😔
全部评论
(48) 回帖