字节跳动六面上岸(算法三面挂),奉上客户端面经
一面:
自我介绍
进程和线程的区别
进程的通信方式,线程的通信方式
线程有哪些锁
http和https的区别
Tcp和Udp的区别
Tcp的拥塞控制和流量控制
算法题:反转链表、二分法计算根号二
为什么转客户端
上面的题目都是经典的必考题。还考了一个浮点数二分
二面:
自我介绍
如何实现Udp的可靠传输
UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响。
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。
详细说明:送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。
目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。
虚拟内存、缺页置换、LRU
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片
在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。
最近最少使用的页面被先换出
内存管理
线程的局部变量如何隔离
访问越界数组会发生什么现象
unicode、utf8的区别
三面:
自我介绍
unicode、utf8的区别
rgb888、rgb565代表什么
了解数据库吗,不同的join方式有什么区别,索引的底层实现
了解设计模式吗
算法题:n个红球m个白球,求所有可能的组合
为什么想转客户端
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 树。
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 个网格左上角。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。
问有多少条不同的路径?
美团的本科生面试比较简单
自我介绍
hdfs读写原理
HA高可用
情景:我备份了元数据,当整个集群崩溃,只剩下几个datanode的时候,是否可以恢复?
zookeeper原理 干什么的 在大数据生态下有什么用
HashMap实现原理
集合框架中线程安全的类有哪些
JVM内存模型
Hadoop1.x和Hadoop2.x的区别
Kafka的弊端
Java垃圾回收
自我介绍
项目
接下来就是引导我说一个我从来没听过的知识
Kafka如何实现幂等性,如果是要你实现,你怎么实现?
DStream和DStreamGraph的区别(SparkStreaming的知识)
之后面试官让我去看Kafka蓄水池机制(真的很长)
自我介绍
如何实现线程安全?(Java锁机制)
Kafka的幂等性?(这个幸亏二面的面试官考我了,我回去特意看了一下)
自我介绍
自己的优缺点
期望薪资
还有什么要问我
一面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要身份证,同部门同岗位的正式批已经发意向书,而我却还是没有收到,现在不抱有希望了,深水备胎。
主要就是项目问的多
至今提前批的现场面,流程快,每轮面试间隔就5分钟,屁股都没有坐热,面完之后,自我感觉挺好的,问的也不难,9.4问HR结果,挂了
8.24:
菜鸟网络内推
自我介绍
互联网加班怎么看?
项目
给定一个正整数n, 输出1到n的所有排列
输入 3
输出
123, 132, 213, 231, 312, 321
用什么语言开发?
如果让你建议小白学习Java,你推荐看什么书?
Java的缺点,跟c++和c比?
排序算法,哪些是稳定的
解决哈希冲突的方法?
有其他公司的offer吗?
做了我们的IQ测试,感觉如何,感觉难不难,是不是提前时间完成的
自我介绍
分代收集算法
什么参数能够调整新生代的比例?
如何一个程序频繁的发生Full GC,有什么办法改善这个情况?
标记-清除和标记整理区别?
Java如何实现线程池
Java实现线程同步有哪些方式?
原子类你用过吗?
进程和线程调度算法?
你自己还可以讲一下其他SQL语句优化
Redis基本数据类型
发现服务器上TIMEWAIT(我听成摊位)状态的TCP过多是什么问题?
说说项目吧,不用太详细,讲一个难点吧
Java集合说一说吧set ,list,map都问了一遍
TreeSet和HashSet区别
hashmap和concurrenthashmap
线程池用过没,线程池的参数什么意思,每个都问了一遍
拒绝策略说一说
synchroBlockQueue 到底可以存几个
锁用过没
lock的公平锁和非公平锁的怎么实现的(源码级别),不限于概念
类加载机制,不是类加载几个过程
如果多个类加载器加载同一个类,会出现什么情况
tomcat的加载过程
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+树的区别
磁盘上怎么存储这些数据的
你了解什么文件格式
手撕翻转树,递归+递推
手撕最小路径和
自我介绍
面向对象聊聊吧
构造函数能不能继承
Java基本类型
那基本类型的比较用什么进行比较的啊,是否比较
对象比较呢
对象的比较是用的什么原理比较吗
hashcode了解过吗
简单介绍一下list和set的区别吗
项目
MySQL语法,海量数据分页吧,用什么实现
MySQL常见的引擎,两者区别
查询效率来说,哪个快一点