字节跳动六面上岸(算法三面挂),奉上客户端面经
一面:
自我介绍
进程和线程的区别
进程的通信方式,线程的通信方式
线程有哪些锁
http和https的区别
Tcp和Udp的区别
Tcp的拥塞控制和流量控制
算法题:反转链表、二分法计算根号二
为什么转客户端
上面的题目都是经典的必考题。还考了一个浮点数二分
二面:
自我介绍
如何实现Udp的可靠传输
UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响。
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。
- 1、添加seq/ack机制,确保数据发送到对端
- 2、添加发送和接收缓冲区,主要是用户超时重传。
- 3、添加超时重传机制。
详细说明:送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。
目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。
虚拟内存、缺页置换、LRU
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片
在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。
最近最少使用的页面被先换出
内存管理
线程的局部变量如何隔离
访问越界数组会发生什么现象
unicode、utf8的区别
三面:
自我介绍
unicode、utf8的区别
rgb888、rgb565代表什么
了解数据库吗,不同的join方式有什么区别,索引的底层实现
了解设计模式吗
算法题:n个红球m个白球,求所有可能的组合
为什么想转客户端
Spring
3. 开始问 Spring Boot 和 Spring 的区别,你觉得 Spring Boot 哪里好。
网络
4. 访问一个网站,比如 www.baidu.com 的时候,是怎么个流程。这个问题我被问了两次,给同学整理要点的时候也整理进去了,可我TM就是没去看,该死。
5. HTTP 1.0/1.1 的区别。长连接是怎么实现的。
心跳检测
数据结构
6. 有哪些数据结构
7. HashMap 的数据结构是什么。
8. 有哪些树;B 、红黑、AVL 树的区别。
9. LinkedList 的数据结构是什么;逆序输出它的时间空间复杂度多少。 O(N)
10. 索引的数据结构是什么;为什么用 B 树,不用其他的树,比如红黑、二叉树、AVL 树。
Java
11. 有哪些创建线程的方式。
12. 三个线程,A、B同时 start,要求 C 在 A、B 运行完之后才运行,求解决方案。
join 方法
13. 线程通信的方式。
互斥锁,信号量,条件变量
14. JVM 的结构模型是什么。
15. 哪些是线程共享的。
堆
16. 内存分为哪几块(指的是新生代这种)
好像就这些了,好像没有说“有什么要问我的”。剩下的再多的也想不起来了。
go切片如何扩容
如何阻止painc
defer延迟顺序
error判断nil会出现的问题
protobuf协议
http协议
tcp三次握手 如何保证可靠性
TCP 可靠传输
1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
2、数据校验
3、数据合理分片和排序:
一个数组 怎么屏蔽里面敏感词汇 复杂度 Hash?
链表实现LRU
数据库为什么建索引 索引优缺点 什么时候建
悲观锁 乐观锁
里氏替换原则 依赖倒置原则 为什么这样设计
JAVA设计模式
JAVA辣鸡回收机制
hashmap底层实现 put 扩容 什么时候用红黑树 为什么不用数组或者链表而用红黑树
1.自我介绍
2.jvm介绍一下,包含哪些;
3.运行时数据区说一下;
4.说一下堆的具体内容,Eden区、survival from 和 survival to什么区别,默认内存比多少,我想修改的话怎么修改;
5.对象怎么分配内存,基于什么原则;
6.GC说一下;
7.手撕代码:不借用其他变量的怎么交换两个变量值; 比较基础的题目
8.手撕代码:不知道链表长度的情况下怎么删除倒数第k个链表(回答先遍历获取长度,不是想要的答案,提示用两个指针,一直纠结步长应该多少,就是没有想到为K...)
9.字符串不借用现有数据结构怎么判断有没有重复字符(数组实现即可)
数组实现Hash表?
10. 求字符串最长连续不重复子序列(实在没思路)
11.反问环节
12.如果过了能来实习吗;
前面漏掉的问题还有什么时候会触发full gc,还有线程有哪几种状态。
这个题目比较简单,Leetcode刷少了。。。
哈啰单车java开发一面面经
38min
自我介绍
如何做那个项目,你得工作,数据库如何去设计的?
重写和重载的区别?
返回值不同的重载,可以吗?为什么?
不可以
equals和==
arraylist和linkedlist的不同?为什么arraylist快?
hashmap了解吗?说一说
hashmap多线程中为什么会发生死循环?
object的有哪些方法?
volatile了解哪些?它是如何实现你说的可见性?
用volatile修饰的a,多线程调用a++会不会出现问题?为什么?
会,不保证原子性
类中两方法,一个public synchrnoized修饰,一个publis static synchrnoized修饰,两线程分别调用,会出现正常还是死锁还是?
get和post有哪些区别?
spring中@autoware和@resource的区别
数据库中MYISAM和InnoDB的区别?
为啥用b+树而不用b树
题:n*m矩阵,每行每列都有序,查找某个数
二面:
自我介绍吧
说一下项目吧
mysql索引实现原理 B+树和B树的区别
给你出个算法吧 给你一个字符串ip地址 需要把他转换成int类型 然后要再能转回来
先把字符串ip转化32位无符号整数。
你是软件工程专业的是吗 学过算法吧 来一道算法题做做
a='abcdsfasdfa'
b='abcsdfews'
求两个字符串的公共子串最大长度? 最长公共子串
我不是太会,就跟他说我可以用动态规划求一个数组的不连续递增子串
最长上升子序列
Java线程池有几个类型 有一个参数是拒绝策略有几个参数
说一下事务的隔离级别
Read Uncommitted(读取未提交内容)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
Read Committed(读取提交内容)
它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
Repeatable Read(可重读)
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
熟悉Linux吗 说一下常用的指令
你用java多长时间了? 我说两年 熟练吗?
我说还行 我知道一些原理
volatile关键字的意义?
熟悉JVM吧 说说我main方法new了一个类 并调用他的run方法 JVM中都发生了什么
表示我只会到类加载 就把类加载给他说了一下 后面的就不会了
java官方给提供了几种线程池 他们各自的作用
线程池的拒绝策略?
mysql事务的隔离级别?
mysql的引擎都有什么? 各自的特点?
接下来四道题
1.有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
2.给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
3.实现观察者模式。
4.有一个机器人的位于一个 m × n 个网格左上角。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。
问有多少条不同的路径?
美团的本科生面试比较简单
深信服(一面+二面+三面+HR面):
一面:
自我介绍
hdfs读写原理
HA高可用
情景:我备份了元数据,当整个集群崩溃,只剩下几个datanode的时候,是否可以恢复?
zookeeper原理 干什么的 在大数据生态下有什么用
HashMap实现原理
集合框架中线程安全的类有哪些
JVM内存模型
Hadoop1.x和Hadoop2.x的区别
Kafka的弊端
Java垃圾回收
二面:
自我介绍
项目
接下来就是引导我说一个我从来没听过的知识
Kafka如何实现幂等性,如果是要你实现,你怎么实现?
DStream和DStreamGraph的区别(SparkStreaming的知识)
之后面试官让我去看Kafka蓄水池机制(真的很长)
三面:
自我介绍
如何实现线程安全?(Java锁机制)
Kafka的幂等性?(这个幸亏二面的面试官考我了,我回去特意看了一下)
HR面:
自我介绍
自己的优缺点
期望薪资
还有什么要问我
一面9.8
先问了项目方面的知识,听不太懂面试官描述的什么意思。记得一个问题:如果前端反应一切正常,但是数据库没有相应动作,问我一般怎么排查?我说的打断点。。面试官说生产过程中不能打断点,可以看日志。感觉他要放弃我了,就开始问基础。
hashmap,hashtable,concurrentmap的实现;
数据库隔离级别,以及解决的问题;
mysql数据库默认隔离级别,哪个隔离级别可以解决幻读;
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read-uncommitted) | 是 | 是 | 是 |
读取提交内容(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是() |
串行化(serializable) | 否 | 否 | 否 |
为什么可重复读可以解决幻读;
索引的数据结构有哪些,分别适用于什么情况;
b树与b+树的区别;
redis是单线程还是多线程;
有多线程的情况吗;
什么时候会fork出新线程;
怎么保证fork新线程的时候数据一致;
写了两个算法题,比较简单忘记了。还有一些问题也忘记了。后面的基础知识基本能答出来,面试官觉得我基础很好(其实是运气比较好,他问得正好那最近复习到了),问我有哪些offer,跟我说快手待遇很好之类的。
二面9.10
可能看了前面面试官的评价,没有问我项目。
计算机网络的每一层作用,协议及相关问题一边回答一边问,比较细也比较基础;
出了一个关于return的题,问return什么,就是考察return的时候会将数据保存起来,finally后面的动作不影响return的结果。
为什么不建议连表操作;
select */count(1)/id from table 得到的结果;
出了几个关于连表操作的题,具体的忘记了;
又问了数据库隔离级别相关问题;
数据库传播属性;
jvm动态代理与cglib的区别;
出了两个算法题,第一个比较简单,第二个判断一个字符串最多能删除一个字符,能否变成回文串;
有些问题忘记了,不过感觉很喜欢问数据库方面的知识呀。
三面9.17
问了一些项目相关的,听不懂。。
可能看到前面面试官的评价就没问项目了,聊了一下人生理想,问了一些基础知识。让我写了两个懒汉式线程安全的单例模式。我写了一个双重检查,一个静态内部类。问我怎么实现延迟加载和线程安全的。
这一面技术比较少,然后说后面hr会再跟我聊一下。
hr面9.19
问我对面试官的印象,想去的城市,目前几个offer等常规hr面问题。
京东提前批(深水备胎)
8.13 14智能供应链一二面,8.28HR面,9.5HR要身份证,同部门同岗位的正式批已经发意向书,而我却还是没有收到,现在不抱有希望了,深水备胎。
一面
- 项目构成
- 作为项目组长怎么分工的
- 采用什么开发
- 讲讲volatile,可见性举个例子
- 你说你了解juc,你说说juc,举个例子 Java并发编程
- ArrayList和LinkedList
- 说了增删改查的时间复杂度
- 面试官说ArrayList增加时间复杂度真的是O(1),,有个值保存了下标,下次增加直接插入
- 设计模式,项目中运用了吗
- 说说你的优势吧
- 说了自己喜欢看基础,面试官说那是底层,是加分项,
- 应该重运用,不能纯理论
- 最后问了面试官建议,让我多运用运用,底层是加分项,首先得基础好
8.13 智能供应链部一面
- 自我介绍
- jvm内存模型,GC
- 类加载机制
- ClassLoader的分类
- JDK1.8新特性,主要问了流Stream
- hashmap
- 聊聊框架,SpringBoot,spring,springmvc三者关系
- spring AOP
- 基于spring的应用,我想让这个程序启动之后,然后再打印一个log,或者一个定时任务,这个怎么实现
- AOP 两种代理的区别,什么时候用
- mybatis的一个接口,一个xml文件,执行SQL语句是怎么实现
- synchronized和volatile
- maven的scope有几种
- MySQL优化
- Redis的数据类型
- 项目经验,登录页面怎么做的,越细越好
- 后台怎么获取到登录人的
- 我说了requestparam,好像不是很好
- 后台怎么获取到登录人的
- cookie和session
8.14 智能供应链部二面
- 项目
- 根据项目负责的一些点提新的需求让我设计
- MySQL索引B+树问题,为什么B+
主要就是项目问的多
贝壳找房(三轮面过后挂)
至今提前批的现场面,流程快,每轮面试间隔就5分钟,屁股都没有坐热,面完之后,自我感觉挺好的,问的也不难,9.4问HR结果,挂了
8.24:
一面:
- 自我介绍
- 项目
- 手撕反转链表
- Java基础你还了解哪些
- 我说了多态的两种形式
- 看过ArrayList和LinkedList源码
- AOP
- tcp三次握手
- 索引你用过吗
- 高并发知识你了解什么
- 说了synchronized、ReentrantLock、volatile
- volatile的原理知道是什么吗?
- 我说了JMM,面试官说不是
- volatile的原理知道是什么吗?
- 说了synchronized、ReentrantLock、volatile
- 线程池几种你了解过吗
- 说了几种线程池
- 继续问我线程池的区别,线程池参数的各自含义
- 什么时候才会达到最大线程数
- 说了几种线程池
- GC说一说吧
- 类加载机制
二面:感觉很重业务运用
- 自我介绍
- 抽象类和接口的区别
- 能不能用一个设计模式来说明
- 设计模式你都了解哪些
- int和Integer区别
- Session和cookies的区别
- HTTP在哪一层
- 我说了应用层
- HTTP的状态码说一说
- OOA,OOD,OOP是什么说一下
- 数据库的乐观锁和悲观锁了解吗
- 如果给数据库加行级锁,怎么操作
- 索引了解吗
- 高并发说一说吧
- 我说了synchronized、volatile、ReentrantLock
- 说说你的优点和缺点吧
- 你认为最开心和最难过的事是什么
- 你认为有什么书对你影响比较大,不限类型
- 有什么想问我的
HR面:
- 你感觉前两轮面试如何
- 你家里人对你工作的看法
- 想去什么公司
- 了解贝壳吗
- 优缺点
- 为什么不考研
- 能提前来实习是吧
- 有什么想问我的
阿里(二面挂):
菜鸟网络内推
8.22:一面:
- 全程就撕项目,提新的需求给方案
- tcp udp区别
- session和cookie区别
8.26:二面:
- 哈夫曼树原理
- 一致性哈希算法
- UDP不可靠会丢包,为什么还用它
- 后面就是开始聊人生了,具体忘记了
8.28:拒信:
多益网络(挂)
7.17一面:
-
自我介绍
-
互联网加班怎么看?
-
项目
-
给定一个正整数n, 输出1到n的所有排列
输入 3
输出
123, 132, 213, 231, 312, 321 -
用什么语言开发?
-
如果让你建议小白学习Java,你推荐看什么书?
- Java核心技术卷和视频相结合
-
Java的缺点,跟c++和c比?
- Java比c++慢
-
排序算法,哪些是稳定的
-
解决哈希冲突的方法?
-
有其他公司的offer吗?
- 没有,目前就投了多益
-
做了我们的IQ测试,感觉如何,感觉难不难,是不是提前时间完成的
Bigo(二面挂)
9.2一面:
-
自我介绍
-
分代收集算法
-
什么参数能够调整新生代的比例?
-
如何一个程序频繁的发生Full GC,有什么办法改善这个情况?
-
标记-清除和标记整理区别?
- 程序发生内存泄漏,你会怎么去查这个问题?
- 讲一下hashmap的数据结构吧
- ConcurrentHashMap
-
Java如何实现线程池
-
Java实现线程同步有哪些方式?
-
原子类你用过吗?
- 用过,AtomicInteger,底层是用的CAS实现的
- CAS怎么实现的
- CAS本质性实现原理是什么?
- 是这样的,但是不是我想问的,哈哈哈(邪恶的笑)
-
进程和线程调度算法?
- 讲讲数据库吧,数据库引擎
- select count(*) form 表 用哪个引擎快一点
- 组合索引是a,b,select 语句 where b = 1 and c = 2
- like 走索引吗
- 邪恶一笑,where a = 1 ,b = 2 OR b =3 走索引吧
- 如何查看慢查询
- 如何查看SQL语句的每一个查询计划,就是每一步消化多少毫秒
-
你自己还可以讲一下其他SQL语句优化
-
Redis基本数据类型
-
发现服务器上TIMEWAIT(我听成摊位)状态的TCP过多是什么问题?
-
说说项目吧,不用太详细,讲一个难点吧
9.12二面:
- 根据前序中序生成树
- 还有一个算法题忘了
- 线程池参数,execute(),里面那个是实现了什么接口
- 单例模式
- 设计题:在控制层,记录访问次数,每次访问,count++,我说这个不安全,加锁可以保证安全,他说还有其他的吗
滴滴(目前没有收到结果,也没有二面)
9.16:一面(1小时20分钟)
-
Java集合说一说吧set ,list,map都问了一遍
-
TreeSet和HashSet区别
-
hashmap和concurrenthashmap
-
线程池用过没,线程池的参数什么意思,每个都问了一遍
-
拒绝策略说一说
-
synchroBlockQueue 到底可以存几个
-
锁用过没
- 锁的什么方法你用过
- lock和tryLock区别
-
lock的公平锁和非公平锁的怎么实现的(源码级别),不限于概念
-
类加载机制,不是类加载几个过程
-
如果多个类加载器加载同一个类,会出现什么情况
-
tomcat的加载过程
- spring的生命周期,不是bean
-
AOP
-
ASM怎么实现cglib
-
mybatis的插件用过没,
-
项目,
背景:暂存数据,每一次把用户填写的数据暂存到数据库,暂存字段,0暂存,1正式存
-
如果实现a用户暂存数据1,b用户暂存数据2,实现a下次只能看见数据1,
给car表加一个操作人字段,每次判断
-
car表怎么设计的,
id,车牌号,xxx,xx,暂存标记
-
car表主键是什么
主键id
-
主键id有什么规则吗?
自增长
-
如果一个车牌号重复了,添加的时候怎么处理的
每次填入的时候,都会在数据库里查询一下,判断是否有
-
如果4个人同时填入车牌号为888的车,怎么处理这个问题
叭叭叭半天,给添加这个操作加锁,给判断重复车牌号方法加锁,
-
加锁为消化资源,你考虑一下在数据库进行操作吧
叭叭了隔离级别,说了mysql默认隔离级别(可重复读)
此时感觉不对了,没有get到点上了
-
隔离级别是解决什么问题的啊
-
并发的时候问题,脏读,幻读,不可重复读等问题,
-
隔离级别什么时候才出来啊?
不知道
这个点没有回答好
-
-
数据库索引,索引类别
唯一索引,聚簇索引,非聚簇索引
-
聚簇索引和非聚簇索引区别
-
二叉树和B+树的区别
- 那如果把二叉树弄成,所有数据都存在叶子节点呢
- 那如果平衡二叉树呢
- 怎么减少IO操作的
- 磁盘上所有文件都是B+树存储吗?
-
磁盘上怎么存储这些数据的
-
你了解什么文件格式
- Linux操作系统了解过吗
- Linux命令用过哪些
- Linux根目录下有哪些文件夹
-
手撕翻转树,递归+递推
-
手撕最小路径和
网易互娱(目前没有收到结果,也没有二面)
9.26 一面:27分钟
-
自我介绍
-
面向对象聊聊吧
-
构造函数能不能继承
-
Java基本类型
-
那基本类型的比较用什么进行比较的啊,是否比较
-
对象比较呢
-
对象的比较是用的什么原理比较吗
-
hashcode了解过吗
-
简单介绍一下list和set的区别吗
- 查找大量数据里是否存在某一数据
- 优化高效的办法
-
项目
-
MySQL语法,海量数据分页吧,用什么实现
-
MySQL常见的引擎,两者区别
-
查询效率来说,哪个快一点
- MySQL用的什么版本,5.5和5.7版本的一个区别
- 平常用到json吗?