字节面试记录

Posted 邹进颖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节面试记录相关的知识,希望对你有一定的参考价值。


2020.08.07

字节

字节电商

一面
考验动手能力:
当场写SQL、当场设计索引、写算法题,又考知识深度
面试题:

synchronized锁升级?
分布式事务如何解决如何设计?
给了一个场景,当场写SQL
select a,b,c,d from t where a=x and b=y order by c,如何设计索引?
编程题:三个线程交替打印ABC三个字母,循环打印100轮
分析mq消费者推、拉两种模式的优缺点
redis string类型的底层实现
mysq|三种日志的区别和实现
算法题最长上升子序列

二面

数据同步怎么做的?怎么保证一致性?
有没有在JVM上跑过非Java语言的其他脚本?(我说没有,没继续问)
dubbo怎么做的负载均衡?有没有更好的方式?比如根据机器实际的负载情况去分配,怎么实现?
AQS的实现原理,cas有什么问题?
分布式调度系统怎么设计?
垃圾回收器怎么选择,考虑哪些因素?(吞吐量、响应时间)
要求承载1000qps、rt不超过50ms容量的系统,怎么做JVM调优,内存具体设置多少怎么去确定?
手写一致性hash算法的应用场景,请求进来怎么通过一致性哈希算法找到实际的机器Ip的代码实现过程(写出来了,不是最优解法,问有没有更好的方式,想了会,他说跳过)
有没有做过大数据开发(我说使用过大数据平台做过报表,就没继续问)
kafka为什么topic多了,性能会下降?怎么设计才能保证消息只投递一次,不是能使用业务上的幂等。

西瓜视频

一面

讲讲HashMap的底层原理?hash冲突是怎么解决的?
在Java8中,HashMap的结构有什么样的优化?
HashMap与HashTable的区别?
高并发下HashMap会出现什么问题?
除了HashTable,还有什么样的map实现类可以保证线程安全呢?结构是什么样子的?
在并发场景下,ConcurrentHashMap是怎么保证线程安全的?又是怎么实现高性能读写的呢?
有没有有顺序的Map实现类?是如何保证它的顺序的?

连环炮似的,一个话题追问到低。
面试官:讲讲HashMap的底层原理?hash冲突是怎么解决的?
小A:HashMap是一个用于存储Key-Value键值对的集合。是一个主干为数组table,table的每一个元素是一个存储这些键值对(Entry)的链表。利用hash函数和table长度计算数组下标index。put操作时,若table[index]为null,则形成一个链表赋值给table[index]。否则意味着hash冲突,采用头插法插入到table[index]对应的链表中。
get操作时:若table[index]对应的链表中含有多个entry,则顺着链表通过equals方法一个个向下查找,找到符合的entry。
面试官:HashMap默认初始化长度是多少?为什么长度一定是2的幂?如何将key映射到HashMap数组的对应位置的?
小A:默认初始化长度是16,且每次自动扩展时的长度必须为2的幂。考虑到hash函数很重要,要保证尽量均匀的分布在数组的各个单元格中。通过求key的HashCode值解决了均匀的问题,但该值可能会很大超出了数组下标的最大值。若再通过取模运算的方式:index=HashCode(Key)%length,虽然简单但效率不高。HashMap为了高效采用了位运算:index=HashCode(Key)&(Length-1)。但这样做,要保证Length必须为2的幂,length-1的值所有二进制位才全为1。
这种一旦二进制位出现了0,任何数与0求位与都是0,将导致index有些结果根本不出现(如0011),有些结果出现的概率会更大。
面试官:在Java8中,HashMap的结构有什么样的优化?
小A:jdk8中,当链表上结点数量>8时会转为红黑树。加快了查找速度。
面试官:HashMap与HashTable的区别?
小A:Hashtable每个方法都加了sychronized,是线程安全的,不接受null的key。而HashMap则非线程安全,相对而言HashMap性能会高一些。HashMap以null作为key时,都放在table[0]的位置。
面试官:高并发下HashMap会出现什么问题?
小A:为了减少了Key映射位置发生冲突的几率,当插入新元素时,HashMap发现已经超过了一定饱和度时会发生扩容(数组中非null单元格个数>=数组总长度*负载因子)。重新创建一个2倍长度的table,将每个entry重新计算index放到新的table中。两个线程同时rehash时容易造成循环链表,让下一次读操作出现死循环。
面试官:除了HashTable,还有什么样的map实现类可以保证线程安全呢?结构是什么样子的?
小A:Hashtable或Collections.synchronizedMap无论是读操作还是写操作,都会给整个集合加锁,导致同一时间的其它操作为之阻塞,而ConcurrentHashMap能兼顾线程安全和运行效率。ConcurrentHashMap是在一个总的哈希表下面有若干个子哈希表的一个二级哈希表,每个子哈希表称为segment,每一次读写操作都需要进行两次hash运算(首先定位到Segment,之后定位到Segment内的具体数组下标)。
面试官:在并发场景下,ConcurrentHashMap是怎么保证线程安全的?又是怎么实现高性能读写的呢?
小A:segment锁分段技术。每个segment各自持有一把锁,降低了锁的粒度。写线程才需要锁定而读线程不需要,put方法两次hash运算之间获得重入锁。求size方法:遍历每一个Segment,把Segment的元素数量和修改次数都累加起来,如果总修改次数大于上次修改的总次数,说明统计过程修改过,则重新计算。否则说明没有修改,统计结束。若N次都没有统计好,这对每一个Segment加锁并重新统计,这种先用乐观锁再用悲观锁的方式。
面试官:有没有有顺序的Map实现类?是如何保证它的顺序的?
小A:TreeMap:能够把它保存的记录根据键排序。基于红黑二叉树实现,key不允许null。元素需实现Comparable(内比较器)接口或Comparator接口。LinkedHashMap:保存了记录的插入顺序。内部依赖哈希表和链表列实现,由hash保证键的唯一性,由LinkedList保证有序性。key允许为null。
面试官:TreeMap是线程安全的么?高并发程序,有没有更好的实现方式?
小A:非也!使用ConcurrentSkipListMap替代TreeMap。ConcurrentSkipListMap提供了一种线程安全的并发访问的排序映射表。内部是SkipList(跳跃表)结构实现,时间复杂度为O(log(n))。线程安全的原理是利用底层的插入、删除的CAS原子性操作。

data广告

一面

字符串匹配算法(KMP算法);
mysql索引类型,Innodb的索引结构;
微信发红包系统的架构设计;
广告库搜索架构,动态扩容
Solr和Elasticsearch的用法;
ADX的收费模式;
Redis的实现模式;
广告请求流程,广告如何排序,倒排如何建立;
这是总结的头条面试问题,其他的主要是沟通项目问题

二面

几种常见mysql存储引擎的区别
kafka和常用mq如rabbitmq的区别 
mysql索引的实现原理
给出一个sql, 判断是否使用索引优化,为什么
介绍下zookeeper的特点, 使用了什么分布式协议?协议原理? 
介绍下redis的特点,redis的基本数据结构,数据持久化方式,主从之间如何同步
 
设计nginx日志查询服务,每条日志对应一个request id. 用户输入request id, 服务返回该id对应的日志
要求:request id唯一,效率尽量高,   最好考虑冷热数据查询分离。

效率工程EE

一面

JMM内存模型原子性,可见性,有序性如何保证
volatile,重排序举例
synchronized和Lock的区别 
synchronized内部实现,偏向锁,轻量锁,重量锁为什么需要自旋?
HashMap,HashSet,TreeSet,ConcurrentHashMap 
Spring事务是怎么实现的?
类加载机制?双亲委派机制
自定义了一个String,那么会加载哪个String? 
HTTPS和HTTP区别?非对称加密有哪些缺点?
XSS和CSRF攻击 
NIO,Linux网络IO模型五种 
Redis持久化
MySQL隔离级别,一致性视图,undo log,redo log和binglog 
MySQL索引结构,回表,最左前缀原则
算法
不使用第三个变量交换a和b的方式 
算法题目一:a+b+c=0 
算法题目二:链表倒数第N个节点 

二面
经过了一轮面试对基础知识点的狂轰乱炸,二面面试官主要考察对于项目的理解。涉及到的知识点如下:

多个项目的技术架构,不是业务架构MySQL,Redis,Nginx,Kafka这些技术架构 
项目技术点,学到了哪些?也要具体知识点。
MySQL中为什么是最左前缀?
有没有接触过一些自动熔断工具
502可能的原因有哪些?
线上问题怎么排查?Full GC频繁怎么办? 
服务的QPS,数据库的架构和版本。
SpringBoot的优缺点分析
SpringBoot的启动源码分析
服务的部署方式?
算法题目:按照之字形分层遍历二叉树,要求bug free,并且构造二叉树进行测试。

三面
进行了一面 面试官对我基础知识的肯定,二面面试官对我业务逻辑和处理问题能力的肯定。三面面试官主要考察一些开放性系统设计类型问题,
涉及到的知识点如下:

项目介绍,从技术点和安全方面的考虑。
有研究过哪些算法?
CAP理论的理解
如何设计实现中国象棋?
如何设计一个排队系统?
平时都是怎么学习的?最近都在关注哪些技术?为什么?
HRBP面
HR面试主要考察了一些个人基本情况以及未来的规划等,涉及到的问题如下:
自我介绍 
为什么在看机会呢?在看什么类型的机会呢?
为什么看头条的机会?
你觉得头条是一家什么样的公司?
朋友同事如何评价你?
平时都有哪些兴趣爱好呢?
在原公司最享受的阶段是什么时候?为什么
你对我们的业务方向了解吗?
你对我们的业务方向和技术感兴趣吗?

总结
一面主要是在考察基础知识点的掌握,
二面主要是在考察对项目的理解与掌握,
三面在考察面向对象的系统设计能力。

效率工程lark(上海)P6

算法考试,顺序和逆序依次打印树的每一层,说思路就可以;
两个数据库题目。出了一个题目后,我说不太会数据库,又出一个;
java实现动态代理方式;
java spring的Bean是单例还是多例,支持多例吗;

抖音一

一面

redis集群的实现原理
mysql事务底层的实现原理
手写:按照K步长反转单向链表,要求空间复杂度O(1)
Mysql的索引如何保证查询效率一样
手写:最小堆
手写:四个数组,找出里面数字相加等于0的组合
手写:找出长字符串的最长不重复的子字符串
http协议各个版本的区别
协程
redis各个数据结构的实现原理,以及支持的数据结构
linux操作系统:常用命令,以及具体如何实现的
微博的相互关注如何设计
MQ的使用场景

抖音二

一面

Java HashMap的数据结构
HashMap多线程情况下会有什么问题
HashMap put操作为什么会出现死循环
ConcurrentHashMap原理设计
ConcurrentHashMap如何保证多线程高并发
ConcurrentHashMap底层锁的实现原理是啥
MySQL数据库的索引数据结构
主键索引和非主键索引操作上有没有什么区别
数据库是如何做的优化
redis 
1.查询某一天某个用户的所有订单 
2.分页(时间排序)
有序集合底层实现的数据结构是啥

Bloom过滤器会有误判吗
Bloom过滤器实现原理
还问了一到算法题,题就不写了

二面

编程题,说思路,有点类似公共前缀,写得有点小问题
你在项目中的亮点有哪些
限流算法说下
分别说下有哪些限流算法
分别介绍下限流算法的优缺点
kafka优缺点
消息队列优缺点
微服务优缺点
Docker和虚拟机的缺点 

三面

一个100G的文件里面是url,你的机器只有8G内存,要对这个文件排序;
MySQL事务相关问题,隔离级别;
Redis的zset原理;
Lrucache;
分布式存储相关问题;
Innodb和myisam的区别;
索引如何设计;

四面

jvm的问题 gc问题 图的便利;
安卓手机解锁问题 如何算出所有的解锁点;
微博问题 如何根据热度查询;
如何查询好友的微博 系统结构和数据表如何设计;
如何对好友微博热度排序;

五面

无序数组中查询topK; Web安全相关,CSRF原理;
Cookie原理;
MySQL索引相关问题;
Tcp协议相关;
LRU实现;
两个有序列表,找出第K个最大值;还有些数据库的;
项目中的开放性问题;

以上是关于字节面试记录的主要内容,如果未能解决你的问题,请参考以下文章

2020年 腾讯/网易/字节 春招秋招 面试记录

字节SDN网络实习面试记录

字节SDN网络实习面试记录

面试常用的代码片段

字节跳动社招面试记录,java调用spark

面向面试编程代码片段之GC