字节跳动 后端开发 校招 凉经
一面 1h
多线程
线程池的核心参数
new一个线程进入线程池的整体流程
volatile的作用,JMM模型和内存屏障
ReentrantLock的源码分析
Synchronized的原理
sleep()和wait()的区别
计算机网络
OSI模型和TCP/IP模型
网络层和常见协议,传输层协议
HTTP协议和HTTPS协议的区别
HTTPS的对称加密和非对称加密的流程
数据库
InnoDB引擎主键索引和非主键索引的区别
如何对SQL语句进行慢查询优化
写一个SQL统计某一天,看视频次数排名前五的用户,扩展到重复的视频不算
Redis和MySQL如何保证同步性
算法题
面试题 10.03. 搜索旋转数组 - 力扣(LeetCode) (leetcode-cn.com)
二面 1h30min
自己实现一个lang.String类,调用的时候能否成功,类的双亲委派机制
Map有几种,TreeMap的使用场景和底层结构
HashMap和衍生结构,线程安全的结构
多线程的volatile方法实现原理
线程池的运行机制,线程池的IO密集型和CPU密集型如何设置最大和核心线程
锁机制,synchronized和ReentrantLock的原理比较,效率比较
类加载机制如何比较,getClass()方法的使用
InnoDB结构的B+树如何查询数据
limit的用法下,写一个分页查询SQL
如何判断查询语句是否走索引,索引的失效情况
OOM出问题如何排查,有哪些Java查看堆和栈的工具,jps,jmap之类的作用
如何修改堆的大小和栈的大小
判断题:
index<a,b,c> select b>100 and a >100 是否走索引
public static void main(String[] args){ List<Integer> list1 = new ArrayList<>(); List<Double> list2 = new ArrayList<>(); List<Boolean> list3 = new LinkedList<>(); list1.add(1); list1.add(2); list2.add((double)1); list2.add((double)2); System.out.println(list1.getClass()==list2.getClass()); System.out.println(list3.getClass()==list2.getClass()); }
算法题:
1.最长升序子集,可以不相邻,前后两数需要相差1
【8,3,4,5,2,5,6】
(3,4,5,6)是目标集
输出长度和下标
4
2,3,6,7
102. 二叉树的层序遍历 - 力扣(LeetCode) (leetcode-cn.com)
三面 45min
系统设计:
设计一个爬虫爬取所有网页数据
算法题:
在一个String数组中有很多单词,现在给你另外一些单词,找到与String数组中相差一个字母的单词
例如:build[hello,eallo,sex]
search(aello):true //aello和数组中的hello相差一个字母,返回true
search(hello):fasle//找不到修改一个字母能匹配上字典集中的任何单词
https协议具体介绍
1.1.1.1和10.1.1.1的区别
401状态码是什么意思
输入一个URL,客户端和服务端如何交互
论证技术,如何实现微信扫码PC端微信,然后让PC端电脑登录
论证要点,PC端客户端如何与微信服务端建立连接
#字节跳动##面试题目#