目录
Java 面经
字节跳动
字节一面
1、自我介绍
2、问项目
3、写算法题
4、问java :
5、Retrofit怎么使用
6、Retrofit的接口层怎么实现的
7、如何定义一个注解
8、Java 多态
9、运行时多态的底层原理
10、什么是泛型
11、什么情况下选择使用泛型什么时候使用多态
12、看过哪些数据结构的源码
13、ArrayList扩容机制:为什么会new 一个新的数组
14、哪些数据结构是线程安全的:concurrentHashmap
15、concurrentHashmap怎么实现线程安全的
16、乐观锁和悲观锁
17、你怎么实现一个乐观锁,比如多线程下使用list
18、hashmap原理
19、负载因子
20、一个进程里线程结束后,进程会不会结束
21、线程crash进程会不会crash
字节二面
1、问项目
2、这个项目是做什么的
3、Java 泛型,泛型上界下界
4、Volatile 哪里使用
5、双重校验锁里的volatile ,创建对象是这么个危险的操作吗
6、哪里还用到了volatile
7、说一下hashmap put方法
8、怎么判断两个元素相同
9、阈值是桶元素个数,还是全部元素个数
10、为什么树化的阈值为8 (面试官说前后链表前后查找为n/2,和log8 差不多 我心存疑虑
11、ActivityA 启动 Activity b A B生命周期
12、onSaveInstance 调用的场景,onPause之后调用
13、requestLayout 和invalidate 的区别
14、GC新生代和年老代的回收算法有什么不同(新生代复制清除、年老代标记整理)
15、内存分配担保策略
16、你有什么优势,有什么劣势
17、个人经历之类的
Vivo
vivo一面 45分钟
1、面向对象三大特性,多态怎么实现
2、静态方法与变量是否可以继承,原因
3、Java代理是否用过,怎么实现
4、Java异常详解
5、项目中遇到的异常
6、线程安全的队列
7、类加载的过程
8、类加载器,双亲委派模型
9、对象生命周期
10、判断对象是否可以回收的方法
11、有哪些GC roots
12、Java引用类型
13、抽象类与接口区别,各自优缺点
14、Java线程间通信, volatile详解、synchronized详解
15、线程的状态
16、进程、线程、协程
17、死锁怎么造成的
18、线程池详解
19、线程池怎么做到线程复用
20、thread local详解
21、Java泛型,泛型擦除机制
22、TCP与UDP区别,优缺点
23、TCP可靠传输机制
24、介绍http协议
25、https请求流程
26、b树、b+树、红黑树
27、红黑树怎么增加、删除节点
28、输入一个URL到网页显示的过程
29、localhost 与127.0.0.1的区别
30、MVVM、MVC、MVP的区别与联系,各自优缺点
31、activity的生命周期
32、安卓中的数据存储,sharedpreference详解
字节
字节一面 1小时
1、进程、线程、协程
2、进程间能共享内存吗
3、安卓中挂起函数怎么实现的
4、安卓中实现多线程的方法
5、线程池详解
6、线程池设计模式,怎么自己设计一个线程池
7、handler详解,是否会内存泄漏,泄露的原理
8、匿名内部类,原理是什么
9、Java GC算法
10、Java引用类型,弱引用的作用,引用队列。
11、安卓图片缓存,加载
12、安卓中的布局,布局优化方法,常用标签
13、安卓四大组件
14、activity四大启动模式
15、onnewintent方法
16、本地广播
17、jetpack组件
18、viewmodel设计模式,mvc,mvp,mvvm介绍
19、retrofit的具体实现,其中接口的作用,注解的作用
20、hashtable,hashmap与 concurrenthashmap详解
21、哈希冲突解决方法,
22、算法题:随机生成不重复的100个数0-99
字节二面,50分钟
1、https详细介绍
2、get与post区别
3、请求状态码
4、cookie与session
5、Java内部类
6、泛型擦除机制
7、Java内存回收
8、GC roots
9、Java加锁方式
10、线程安全的单例模式(双重检测),为什么要两次判断,volatile作用
11、安卓的事件分发机制
腾讯
腾讯一面
1、 项目经历
2、 java 三大特性?java 可以多继承吗?如何实现多继承?多态有哪些类型?
封装,继承,多态;不可以;接口;静态绑定、动态绑定。
3、 青蛙跳台阶, n个台阶,每次可以跳一步或两步,共有多少种跳法?
f(n) = f(n-1) + f(n-2)
4、 如何快速找到链表的中间结点?
快慢指针
5、 数学问题:1000瓶酒,用最少的小白鼠找1瓶毒酒
腾讯二面
1、 自己讲项目。用到的技术,遇到的困难。
2、 Java\C++的区别?
3、 C++ 什么时候可能发生内存泄漏。
4、 开发中有没有用过多线程?
5、 多线程为什么不安全?
6、 HTTP GET/POST方法。HTTP在哪一层。
腾讯三面
1、 项目
2、 处理屏幕点击事件的过程?
3、 Activity的启动方式
4、 刷题:输入m, n,(m%2n == 0), 初始符号sign = -1, 1到n,每m个数进行一次符号翻转,求和。
C++面经
字节抖音
字节一面
1、 自我介绍
2、 shell会吗 答不会,随便问了个 答的好像也不对。。。
3、 Linux端口范围
4、 中间问了几个常规八股实在记不起来了。。。
5、 数学题:一个均质硬币,如何扔出一个2/3的概率?
6、 撕题:股票买卖无限次和一次
7、 反问
字节二面
1、 自我介绍
2、 好像问了下项目?(经典服务器)
3、 传统八股,数据库索引等
4、 智力题:1-10个机器,正常生产硬币为5g,现在有一个机器坏了 生产的是4g的,请问给一把带刻度的称 怎么一次找出有问题的机器?
5、 用 Rand7() 实现 Rand10()
6、 下面语句查询索引的过程有什么区别?
select * from table where b = xx; b is index
select id from table where b = xx; id is primary key
7、 下降路径最小和 力扣931
字节三面
1、 自我介绍
2、 实习干的啥
3、 数据库用的多不多?
读者可以来看书,并给书打标签。
每个读者给每一本书可以打多个不同的标签。
同一个读者给同一本书打同一个标签只算一次。
要求设计表,并写出以下查询语句
查询一本指定的书下,被打次数最多的10个标签。
查询一个标签下,被打次数最多的10本书。
4、 智力题 100狼和羊,统计战机弹孔 分析后发现机翼弹孔比较多机身弹孔比较少,如果现在要加固,那优先加固机身还是机翼(问这种题有何意义。。。)
5、 手撕 41、 缺失的第一个正数 加了限制条件 大于k的最小正整数。这题差点栽了,一开始被k迷惑了,其实就在原题基础上偏移k就好
字节教育
字节一面
1、你的项目说用到了reactor,说一下reactor是什么?跟proactor的区别?
2、所以说你的主线程只负责监听客户端连接啰?后面处里数据都是子线程处里?
3、你用到epoll,说一下IO多路复用解决了什么问题?
4、说一下除了epoll还有什么其他的多路复用嘛?(把select,poll,epoll仔细介绍了一遍)
5、你的有限状态机是怎么实现的说一下
6、你的线程池线程调度的算法是什么
基础:
1、UDP,TCP的区别说一下
2、https 跟http的区别在哪里
3、https的SSL建连过程会导致效率下降要怎么优化
4、https整个握手交互的过程总共花了多少rtt
算法:
股票买卖I和II (秒A了面试官问我是不是写过我很诚实的说对 )
反问:
国际化电商是做什么的? 就想成写tiktok,不知道tiktok的话就想成海外版抖音
字节二面
1、指针和引用的区别?
2、为什么要有指针和引用?C++推荐指针还是引用?
3、智能指针说一下?
4、你说到unique_ptr有移动语义,那你说一下move是干吗的?
5、你说move是将左值转换成右值为什么要有move?move最根本解决什么问题
6、你说到右值引用,那你说一下左值右值的区别
7、好那为什么C要有左值右值?C的开发者为什么当初要设定左值右值目的是什么要解决什么问题
8、你设计一下shared_ptr
9、虚函数、纯虚函数区别?
10、多态说一下?虚表?
class A
{
int test(int);
};
class B : public A
{
int test(int);
};
int main()
{
A* p = new B;
p->test(1);
}
会调用哪个test?
OS:
1、线程进程的区别?
2、为什么要有线程?当时设计操作系统的人设计线程的目的是什么?线程解决什么问题?
3、让你设计一个操作系统你会设计线程嘛?为什么?
4、死锁是什么?
5、解决死锁方法?(回答预分配资源,自己找死说了个线程要访问另一个共享资源时要先释放原先占有资源)
6、你说要先释放原先占有资源?那你怎么保证这个线程的业务完整性?(大型社死现场)
7、i++线程安全嘛?
字节三面
(3:00PM, 1hr57min):面试官人挺好的,也很明显感觉出来是个技术大佬
自我介绍;
1、http和https区别?说一下TSL握手过程
2、https还有什么安全问题?
3、https怎么保证证书可靠性(答了证书怎么验证)
4、面试官不满意,说我这个是在说有没有被篡改,但我想问的是,证书是一个证书链,权威机构给予子机构权限让他给服务器发证书,怎么保证说这个子机构是可靠的?或者换句话说怎么保证这个子机构发给服务器的时候,服务器怎么知道是权威机构授权的?
5、SQL注入(数据库不会)
设计模式:
6、设计模式会吗,写一个单例模式(很偷懒的写了饿汉,面试官说要懒汉 )
7、好的那这个是DCL,为什么要有两次判断?(拆开来说没有第一个判断会怎样,没有第二个会怎样)
OS:
8、虚拟内存和物理内存的区别和关联?
9、栈和堆的区别?生长方向?
10、堆可以申请多大?栈一般多大?
(答:栈默认是4M的样子,堆最大可以和虚拟内存一样大32为元4G
面试官:那64呢?我:、、、、、)
C++:
11、说一下野指针,内存泄漏,栈溢出都是些什么?(面试官频频点头看来很满意)
算法题:
无序数组找出所有K, K代表比左边大比右边小的元素?规定O(n)时间复杂度测试用例是:[2,3,1,8,9,20,12] 输出是:[8,9]
反问:
字节针对客户端0基础怎么培养?
面试反馈:基础可以挺好的除了数据库不熟,但你的算法思路对,也写出来了,搞不明白让反转个答案写这么久还没出来是为什么?所以我感觉你可能代码调试的经验不够(面字节都知道听到这个基本就是凉了),但我们还是会综合考虑的。
字节跳动
字节一面
1、 自我介绍
2、 shell会吗 (答不会,随便问了个 答的好像也不对。。。)
3、 Linux端口范围
4、 中间问了几个常规八股实在记不起来了。。。
5、 数学题:一个均质硬币,如何扔出一个2/3的概率?
6、 撕题:股票买卖无限次和一次
7、 反问
C++:
C++虚函数原理
虚函数的开销
子类对象的基类子对象内存布局在前还是后
实习过程中用过cgo吗
Golang中channel的底层实现及工作原理
channel是如何做到协程安全的
channel底层为什么采用环形队列而不采用普通队列
channel如何阻塞和唤醒Goroutine的
OS:
epoll水平触发和边缘触发模式区别
水平触发相较于边缘触发多了哪几个系统调用
如何实现一个系统调用
epoll底层实现
红黑树怎么使用的,为何epoll_wait复杂度为O(1)
线程安全函数、可重入函数、信号安全函数的区别
浏览器中点击+号创建新的标签页,是开启了一个新线程还是新进程,以及原因
网络:
TCP和UDP哪个协议有包长限制
IP数据分片有什么弊端
TCP连接两端一个突然断连,另一端如何感知
什么情况下会出现半开连接,如何解决
数据库:
a、b字段建立联合索引,a、b、a and b、 a or b四种情况哪种会走索引
项目:
难点在哪里,为什么CKV+性能优于redis
服务器性能有哪些优化思路
无锁编程应该怎么实现
CAS操作和内存屏障底层实现原理
设计题:
算法
如何设计一个哈希表【可从表长、哈希碰撞、扩容时机来分析】
插入、更新、删除哈希表中一个元素,底层怎么操作【相当于insert、erase、get方法的实现】
Redis是如何实现rehash的
求整数的立方根,返回结果向下取整。
给定一个矩阵,和一个坐标(x,y),顺时针打印元素。【lc885,只不过面试时出界就不用再往下走了】
字节二面
语言+操作系统+网络:
C++虚函数的性能开销【两面都问了,估计是想问CPU流水线分支预测失败时的额外开销】
内存池解决了什么问题
IO多路复用原理
epoll水平触发和边缘触发模式区别
URL输入到渲染的过程
设计题【全程围绕此设计题展开,没看过STL内存分配器和malloc实现原理就难顶了】
如何实现一个内存池?
为什么空闲内存要采用不同内存块大小的链表维护?
内存块大小为什么都是2的幂次方?
动态内存分配算法
首次适应分配算法和最佳适应分配算法的实现逻辑是什么?
红黑树只能保证logn复杂度,有更低复杂度方案?
内存池在多线程情况下怎么保证线程安全性
多个线程频繁申请分配并释放4字节块时,如何避免锁开销
100M大小的数组,顺序下标访问和随机下标访问的性能区别
算法:
实现memcpy函数【写了快半个小时,面试官指引下要考虑内存区间重叠情况】
字节三面
C++:
C++多态
基类的析构函数为什么通常定义为虚函数
指针和引用的区别
讲讲inline函数
inline函数和宏有什么区别
C++中volatile含义
操作系统:
线程安全如何保证
CAS操作是如何保证原子性的
硬件层面有哪些原子指令
C++中有哪些锁?读写锁、自旋锁什么场景使用
线程切换时的上下文切换具体指什么,包含哪些东西
线程有哪些私有数据
虚拟内存和物理内存
各个进程地址空间是如何保证独立不影响的
网络:
TCP和UDP的区别
TCP流量控制
TCP拥塞控制
HTTPS握手过程
DNS采用TCP还是UDP
算法:
普通二叉树中找到第k小元素【讲思路(遍历保存节点+TopK)】
TopK【讲思路(堆或快速选择)】,快速选择找TopK的时间复杂度为什么是O(n)
二叉搜索树找第K小元素【讲思路(中序遍历到第k小元素停止)】,时间复杂度多少(O(h+k),h为树高),空间复杂度多少(O(h))
K个一组翻转链表【手撕(ACM模式,写测试用例)】
字节实习
字节一面
自我介绍
项目介绍
讲讲时间轮定时器,如何执行的,一个槽精度多少?
如果处理器阻塞了5秒,会不会影响定时器的执行效果?
非磁盘IO下,多线程和单线程的QPS差这么大,原因在哪里?
讲讲项目中的线程池
线程间的同步能不能不用锁?
无锁队列怎么实现的?
C++:
C和C++在内存分配方面有何区别
讲讲C++的多态
子类对父类的非虚函数重写,通过基类指针调用的函数版本是哪版?为什么?
dynamic_cast讲一讲,如果指针类型是基类,转换为子类后,指针地址改变吗
使用dynamic_cast进行指针类型转换的类中需定义什么?
vector相较于数组的优劣有哪些?
C++类内数据成员的初始化有哪些方式
成员初始化顺序与类内声明顺序有关还是和构造函数初始化列表中的初始化顺序有关?
C的结构体和C++的类有哪些区别
网络:
URL输入后的执行过程
TCP粘包问题,原因,如何解决?
HTTP协议底层基于什么协议?能不能用其他协议?
数据库:
讲讲关系型数据库和非关系型数据库的区别
算法:
二叉树的最近公共祖先
建树、自己写下输入输出
非递归怎么做
用数组存储树节点,尝试写一下
其他:
如何降低游戏服务器的低延迟?
大概能实习多久
字节二面
自我介绍
比赛
介绍:
服务器为何购买1、5倍?
还有哪些参数是手动设置的?
其他问题
项目
C++:
项目来源,为什么做此项目?
定时器除了时间轮以外还有其他数据结构可以实现吗
讲讲堆的原理
线程同步除了加锁以外,能不能不用锁?
无锁队列怎么实现?
智能指针是否用过?
多线程环境下使用智能指针需要注意哪些问题?
智能指针在哪些字段需要加锁?引用计数需要加锁吗?
你觉得动态语言和静态语言间差别在哪里,动态语言的GC机制是怎么实现的?
操作系统:
malloc底层实现原理
分配内存时什么时候会调用brk?空闲链表的分配和维护是在用户态完成还是内核态完成?
讲讲程序中的bss段
讲讲程序加载运行的全过程
其他:
TopK(快排和堆两种思路,讲堆思路)
为什么选择投递字节游戏部门
最近在学习的技术
你是非科班,计算机专业知识是如何学习的?
你觉得看过的技术书籍中帮助最大的一本书是哪个?(CSAPP)
能来实习多久
字节飞书实习
字节一面
自我介绍
项目
如果项目要实现HTTPS功能的话,有没有思路?
其他问题忘掉了。
C++:
STL中容器插入元素时push_back和emplace_back的区别
emplace_back的参数是什么(本人回答是构造函数的参数,面试官进一步追问三个点代表什么,后来才明白
问的是可变参数列表)
可变参数列表的实现原理
讲讲C++11智能指针有哪些,使用场景?
智能指针的实现原理
算法:
C++代码题,报输出结果(lambda表达式和std::function相关) 略难【问了10多分钟】
判断链表是否有环
分隔金条的最小花费(在面试官提示下做出来了,本质考数据结构—堆)【耗时10多分钟】
字节二面
自我介绍
项目(略过,问题和前几面大同小异)
C++:(C++11特性问的很广泛很深入)
类内数据成员在构造函数初始化列表中赋值和在构造函数体内赋值的区别
构造函数可以是虚函数吗,为什么
析构函数可以是虚函数吗,为什么
什么时候需要自定义拷贝构造函数
类内重载运算符怎么写,写个类重载赋值运算符(撕题第一道)
函数重载时返回值能否用于区分重载函数,为什么
讲讲虚函数运行机制
讲讲虚函数如何解析
extern “C” 的作用
讲讲C++11或14特性
左值和右值的区别
const左值引用可以绑定到字面值上吗?
引用折叠了解吗?什么情况下会推导为右值引用?
讲讲完美转发,std::forward的作用是什么?
编译器的返回值优化RVO机制了解吗?
操作系统:
线程同步方式
进程通讯方式
信号量工作原理
共享内存工作原理
管道工作原理
套接字工作原
算法:
C++写一个类,类内有一个int成员和int*成员,让重载operator=操作符
线程安全的单例模式
最长回文子串
其他:
能实习多久
C++是自学的吗
字节电商
字节一面
面试官很nice,不了解的问题会跳过,手撕算法惨遭hard题,面试官也很耐心地给了提示。
1、linux如何杀掉一个进程,具体的系统调用是怎样的
2、32位和64位操作系统处理浮点数有什么区别
3、www、douyin、com浏览器提示找不到ip地址,分析一下可能的原因。
4、DNS解析 递归vs迭代
5、DNS主要使用的传输层协议是什么?为什么不用TCP?
6、TCP time_wait?这个状态的设计目的是什么?
7、SQL题,记不太清了。
8、手撕1、给定正整数n,找到若干个完全平方数使得他们的和等于n,求最少的个数。
9、手撕2、给定一个未排序的整数数组,找出其中没有出现的最小正整数。O(N)时间,O(1)空间。
字节二面
感觉这一面有点压力,面试官比较严肃,好像是leader 。
1、手撕1、判断是否是二叉搜索树
2、手撕2、带精度的开平方根
感恩的心,这次的代码题都做过而且不难,秒了,但是被吐槽写代码感觉生疏,不敢顶嘴hhh
3、C++多态,展开询问了一下多级继承和菱形继承的问题及解决方法。
4、static,编译原理
5、内存的组织结构
6、智力题、7瓶药水和3只小白鼠,找出有毒的一瓶
7、粘包,keepalive
8、之后问了一些数据库的八股,记不太清了。
字节三面
三面一波三折,从上午11点推到下午两点再推到下午5点,而且来了台风,担心面试官心情不佳把我挂了hh
1、介绍一下MYSQL常用的存储引擎
2、介绍一下它们索引的实现方法
3、隔离级别,以及其实现方式,一致性实现方式
4、B+树,红黑树
5、hash方式,冲突解决
6、map和unordered_map
7、redis数据持久化方法
8、系统调用方法
9、HTTPS,详细说两种加密方法
10、手撕:1-n的数字序列,求所有子序列。