Skip to content

字节提前批后台开发-技术中台

一面

https://www.nowcoder.com/discuss/684864?type=post&order=time&pos=&page=2&ncTraceId=&channel=-1&source_id=search_post_nctrack&subType=2

1.求根号2

2.数据库 (×)

3.DNS解析过程

4.HTTP和HTTPS的区别,HTTPS握手的过程

二面

1.自我介绍

2.项目

3.进程间通信方式

4.NIO? IO模型

6.做题:力扣395 至少有K个重复字符的最长字串

三面

1.自我介绍

2.指针和引用的区别

3.new和delete

4.TCP三次握手流程

5.TCP和UDP的区别,TCP怎么保证可靠

6.替换隐藏数字得到的最晚时间

字节客户端凉经一面

https://www.nowcoder.com/discuss/689560?source_id=discuss_experience_nctrack&channel=-1

  1. 自我介绍

  2. 地址总线、数据总线、控制总线的作用(不会,第一个问题就不会,尴尬的开端)

  3. IP路由器寻址过程,可以结合个例子说下(不会)

  4. HTTPS加密的方式,加密的究竟是什么

  5. const 和 constexpr的作用和区别

  6. const_cast、static_cast、 reinterpreter_cast、dynamic_cast

  7. 智能指针

  8. 虚函数和纯虚函数的作用和区别

  9. C++中的锁有哪些,你用过哪些

  10. 项目

  11. 给一个二叉搜索树的后序遍历,重建该二叉搜索树,有点类似于这个leetcode1008,只不过给定的是后续遍历序列(做出来了,并解释了下思路)

字节实习面经

https://www.nowcoder.com/discuss/696961?source_id=discuss_experience_nctrack&channel=-1

字节提前批客户端凉经(技术中台)

https://www.nowcoder.com/discuss/454157?type=post&order=time&pos=&page=1&ncTraceId=&channel=-1&source_id=search_post_nctrack&subType=2

7.6一面

  1. 自我介绍 聊[项目]
  2. 简要介绍mvcc
  3. 多线程怎么实现? 做一个高可用系统要考虑什么?(这儿完全不知道自己在说啥)
  4. 通信过程中安全性如何保证?加密时密钥如何分发保证不被中间人攻击?(忘了 gg)
  5. 数据传输时如何保证可靠性?消息摘要有什么作用?
  6. 数据库如何优化效率?什么情况下要建索引?B树和B+树的区别,索引为什么不用二叉树红黑树等?
  7. 为什么要用线程池?如何实现?
  8. 算法题:按字典序全排列输出

7.12二面

  1. 自我介绍

  2. 对称加密与非对称加密的区别?

  3. 消息摘要的作用?SHA256为什么比MD5安全?RSA与DSA有什么区别?

  4. http与https的区别?具体证书是怎么获取的?密钥如何分发?

  5. wireshark用过吗?实现原理是什么?(完全不会)

  6. java中实现多线程的方法?使用线程池时参数有哪些?继承和实现接口哪个更好?

  7. 非static的内部类如何访问static的外部成员变量或方法?原理是什么?(忘了)

  8. base64算法与其他加密算法的区别?base64的流程是什么?

  9. 了解哪些编码?utf-8和utf-16有什么区别?(凉凉)

  10. 算法题:跳台阶 变种如果能跳1、2、3级台阶怎么实现?

字节国际化电商客户端提前批1,2,3面面经(已凉)

作者:小林是小林 链接:https://www.nowcoder.com/discuss/697312?channel=-1&source_id=profile_follow_post_nctrack

一面(7/18 10:30AM , 50min)

项目

1.你的项目说用到了reactor,说一下reactor是什么?跟proactor的区别?

2.所以说你的主线程只负责监听客户端连接啰?后面处里数据都是子线程处里?

3.你用到epoll,说一下IO多路复用解决了什么问题?

4.说一下除了epoll还有什么其他的多路复用嘛?(把select,poll,epoll仔细介绍了一遍)

5.你的有限状态机是怎么实现的说一下

6.你的线程池线程调度的算法是什么(尴尬用的最阳春的就是个队列判断。。。)

基础

1.UDP,TCP的区别说一下

2.https 跟http的区别在哪里

2.https的SSL建连过程会导致效率下降要怎么优化

3.https整个握手交互的过程总共花了多少rtt(可能是我面经看太少第一次看到求RTT的,还愣了一下RTT是什么)

算法

股票买卖I和II (秒A了面试官问我是不是写过我很诚实的说对 😂)

二面(7/19 3:00PM, 1hr5min):面试官是个还挺帅的小哥(楼主是直的但确实挺帅)

自我介绍:

1.指针和引用的区别?

2.为什么要有指针和引用? C++推荐指针还是引用?

3.智能指针说一下?

4.你说到unique_ptr有移动语义,那你说一下move是干吗的?

5.你说move是将左值转换成右值为什么要有move?move最根本解决什么问题

6.你说到右值引用,那你说一下左值右值的区别

7.好那为什么C++要有左值右值?C++的开发者为什么当初要设定左值右值目的是什么要解决什么问题(我真的不知道这时候已经被问蒙了)

8.你设计一下shared_ptr(支支呜呜讲了半天看来面试官不满意)

9.虚函数、纯虚函数区别?

  1. 多态说一下?虚表?

  2. 会调用哪个test?(我答B的,面试官问为什么?这个不是虚函数阿应该不是多态呀为什么还是B)(此时已被问蒙了)

class A
{  
    int test(int); 
}; 

class B : public A
{  
    int test(int); 
}; 
 int main() 
{
   A* p = new B;  
   p->test(1);  
} 

面试官:别紧张你就把你的想法说出来就行(心想:快点结束C++吧)

OS:(终于结束C++了松口气)

1.线程进程的区别?

2.为什么要有线程?当时设计操作系统的人设计线程的目的是什么?线程解决什么问题?

3.让你设计一个操作系统你会设计线程嘛?为什么?

4.死锁是什么?

5.解决死锁方法?(回答预分配资源,自己找死说了个线程要访问另一个共享资源时要先释放原先占有资源)

6.你说要先释放原先占有资源?那你怎么保证这个线程的业务完整性?(大型社死现场)

7.i++线程安全嘛?

算法

leetcode 1143 (讲了思路面试官表示认可,但说我想太久了)

反问:

技术栈:swift

面试评价:基础知识掌握的不错,基本都答的出来,就是有点太紧张了,然后要更多的去想为什么要这么做,算法思路是对的就是想太久

(二面的穷追猛打面完直接倒头睡到晚上)

隔天中午收到HR电话约了三面

7/26(三面,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] (也不知道当时是怎么想的一直书出[9,8]。。。。。。。)

思路(可以),算法:写出来了但可是输出一直是9,8但虽然K的确是9,8但可是面试官要8,9这个答案让我改(改老半天没出来.....)

其实这题就是lc接雨水的变种题(感谢 生而很菜我很抱歉 的提醒)

反问:

字节针对客户端0基础怎么培养?

字节客户端提前批二面三面面经

作者:Ctz 链接:https://www.nowcoder.com/discuss/692552?channel=-1&source_id=profile_follow_post_nctrack

二面

1.自我介绍

2.C++

  1. 左值引用和右值引用的区别?

  2. 给一段代码,让判断i是左值还是右值,print输出什么?(i是左值,不会输出,编译报错,没有匹配的函数)

  3. 在一个类中,const修饰的函数作用是什么?对象a可以访问func函数吗?(在函数内不会修改数据成员,不会调用其它非const成员函数,a是普通对象,可以访问const函数)

  4. move语义的作用是什么?怎么实现的?

  5. 你提到的move语义里,指针会被置空,这个是move里面做的吗?

  6. 介绍下完美转发?在什么场景下可以用到完美转发?

  7. C++友元函数介绍下?

  8. C++类中访问控制符介绍下?

  9. C++ NULL和nullptr的区别?

3.OS

(1)进程和线程的区别?

(2)线程切换时都有哪些内容?

(3)线程上下文切换时,寄存器是否会保存全局变量a?

(4)寄存器SP的作用?(堆栈寄存器,指向栈顶地址)

(5)堆和栈的区别?

(6)多线程同步的方法?

(7)互斥锁和信号量的区别?

(8)什么情况下会发生死锁?

(9)OS是怎么做到原子操作的?(回答关中断,面试官说不是想要这个答案,然后又问关中断是怎么做的?不会)

(10)虚拟内存和物理内存的区别?

(11)MMU的作用?

(12)TLB介绍下?

4.手撕代码

实现二叉树的层次遍历和后序遍历

三面

1.C++ (1)move语义是怎么实现的? (2)shared_ptr里引用计数器是怎么实现共享的? (3)shared_ptr是线程安全的吗?(不会) (4)了解atomic吗?(不会) (5)static是线程安全的吗(不会) (6)让你实现malloc和free的内存分配和释放,你怎么设计,考虑内存碎片问题?(链表,内存块从小到大排列,但会存在内碎片) (7)外碎片如何处理?(内存块合并)

2.OS (1)mmap了解吗?(不会) (2)线程池怎么设计? (3)线程池里的同步和调度怎么做?( 不会) (4)读写锁是怎么实现的?(不会) (5)CAS介绍下

3.网络 (1)假设客户端和服务器通过TCP通信,这时客户端突然断电,服务器是如何关闭这个连接的?(超时重传超过阈值后,主动断开连接) (2)TCP怎么断开连接的?(不理解问的是啥)

4.数据结构 (1)C++ vector是如何实现扩容的? (2)priority_queue底层是怎么实现的?(堆) (3)priority_queue插入一个元素,底层怎么做的?

5.设计模式 (1)单例模式介绍下 (2)口述懒汉式 (3)懒汉式是线程安全的吗? (4)怎么实现线程安全的懒汉式?

6.数据库 (1)Redis跳表介绍下?(不会)

7.思考题 (1)三维空间中,如何判断两个三角形是垂直的?(不会) (2)如何用rand5实现rand7?(不会)

8.手撕代码 (Leetcode 113)给定一个sum,找出从根结点到叶子结点的路径和 = sum的所有路径

9.反问 (1)部门、业务、技术栈? 影像团队,做剪映、轻颜等工具类App开发,技术栈有音视频、图像、架构等

(2)我看广州和深圳都有这个团队,在业务上有啥区别? 没区别,深圳这边人更多一点,广州HC少

字节跳动提前批客户端开发一二三面凉经

作者:Run_Forrest 链接:https://www.nowcoder.com/discuss/691902?channel=-1&source_id=profile_follow_post_nctrack 来源:牛客网

一面

  1. 多态实现,虚函数原理,虚函数表
  2. 指针和引用区别
  3. new 和malloc区别
  4. 堆和栈区别
  5. 智能指针作用,原理,weak_ptr了解吗
  6. 容器底层实现
  7. 算法题:合并有序链表

一面就记得这么多,但是感觉一面的时候面试官每个问题都问的很深,深挖到底层原理实现,感觉答的并不好,但是面试官很温和,意外让我进了二面。

二面

全程没有技术性问题,把我的项目仔细的问了一遍,写了个二分查找,并让我写出他的测试用例。

三面

C++的default,delete

单例模式(不会)

智力题:一副扑克54张,分成三堆,求一堆中同时出现大小王的概率(不会,答错了)

算法题链表中有两个元素只出现了一次,其他元素都出现了两次,找出这两个元素。

​ 最后面试官问了你还有什么想问的吗?问了客户端开发岗开发的是什么的音视频客户端。因为觉得抖音是移动端的,那还有什么需要开发的桌面音视频客户端吗?原来是给抖音开发底层SDK的

​ 面完总体感觉凉凉,但是三面下来感觉面试官都很nice,都比较温和,耐心等你想出思路,而且前面两面都竟然让我过了(可能看我的学校面子上...)。不对过三面抱有任何幻想了,毕竟自己什么水平我太清楚了。。。

​ 最后只想说一声,菜鸡的offer之路还很长啊...

字节跳动客户端面经!保佑我能过!!!

作者:GTAlgorithm 链接:https://www.nowcoder.com/discuss/688210?channel=-1&source_id=profile_follow_post_nctrack 来源:牛客网

C++

t1. int a[10]; 这个数组的数组变量和数组内容都是存在哪里的?

若是全局数组,则会被创建在静态存储区;其他情况会被分配在栈上。

t2.指针数组和数组指针的区别?

t3. STL中vector和list的区别?

操作系统

t1. 介绍一下一个进程的内存管理

  1. 在操作系统中,系统会给每个进程分配虚拟地址,虚拟地址的大小与处理器的位数有关,如32位处理器进程可分配4GB的虚拟内存供程序正常运行。这4GB的虚拟内存,存储单元从地址0开始进行排序,此地址为虚拟地址。
  2. 该虚拟地址可分为五个部分:

(1)栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。线程也有自己维护的栈。

(2)堆区:程序动态申请的空间,由程序释放或其他方式释放,若没有释放,可能导致内存泄露。

(3)全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放 。

(4)文字常量区:常量字符串就是放在这里的,程序结束后由系统释放。

(5)程序代码区:存放函数体的二进制代码。

t2. 介绍下程序的内存释放

t3. Linux下的常用命令

t4. 谈一谈同步和异步

计算机网络

  1. 介绍下TCP三次握手、四次挥手
  2. 四次挥手过程理解
  3. 浏览器输入URL到显示网页,发生了什么?
  4. 提到了DNS查询,本地有存放域名和IP地址的映射吗,在哪里?
  5. HTTP1.1 和 HTTP2.0 的区别

字节客户端开发面经 —— 一二三面&offe

作者:茗_ 链接:https://www.nowcoder.com/discuss/687184?channel=-1&source_id=profile_follow_post_nctrack

一面

  1. 首先自我介绍一下吧,讲讲你的项目
  2. 知道TCP吗?介绍一下TCP,包括三次握手的原理和意义
  3. UDP呢?它和TCP的区别?
  4. TCP的拥塞控制和流量控制是怎么样的?
  5. HTTP是一种什么样的协议?
  6. HTTPS和HTTP区别?
  7. 7层模型和5层模型
  8. 操作系统方面,知道进程和线程吗?它们的区别和联系?
  9. 协程是怎么样的?
  10. 作业调度和页面置换的算法有哪些?
  11. 什么是死锁?解决办法有哪些?
  12. 数据库事务的隔离级别?
  13. 代码题:冒泡排序、归并排序、堆排序、快排

二面

  1. 自我介绍
  2. 项目当中用到的编程语言是什么?技术难点在哪?
  3. 项目是个人完成还是团队完成?团队完成的话,你们的分工合作是怎么安排的?
  4. TCP协议报文的字段有哪些?它们的作用?
  5. HTTPS有了解吗?它具体是怎么加密的?
  6. 堆和栈的区别?
  7. 多线程和多进程有什么区别?
  8. 进程之间怎么通信?
  9. LRU算法的原理和实现?
  10. 内存泄漏是怎么造成的?如何避免?
  11. 各大排序算法的时间复杂度和空间复杂度?稳定性?
  12. 知道智能指针吗?它的原理是怎么样的?
  13. 代码题:求连续子序列的和的最大值

三面

  1. 自我介绍
  2. 讲讲面向过程、面向对象的区别?
  3. 队列和栈的区别和用途?
  4. 数组和链表的区别以及优缺点?
  5. 什么是线程安全?它的机制是怎么样的?
  6. 线程池是怎么样的?
  7. 进程的通信方式有哪些?
  8. 内核态和用户态的区别?为什么要这样区分?
  9. 数据库乐观锁和悲观锁是怎么样的?
  10. 数据库索引?
  11. 算法题:根据规则实现一个游戏

字节跳动飞书秋招提前批一面(应该凉了)

作者:何海风 链接:https://www.nowcoder.com/discuss/686985?channel=-1&source_id=profile_follow_post_nctrack

如果一个流程需要多个人审批,并且有顺序,应该用什么数据结构实现呢?怎么实现呢?(我说的是树)

如果一个人可以指定其他人在他之前先审批,或者在他之后审批,应该怎么修改呢?(我先说给树加同层级的节点,好像他不太认同,然后他引导我说可以给他加左孩子和右孩子这样)

我想按照指定的顺序来排序咋办呢?(我说先左后右再中这样,然后他又说那有他指定的其他人来审批啊,应该先从最底层开始,我就说先从左往右层序遍历,并且先左后右再中的遍历)

你觉得大学学的比较好的科目有哪些?

你比较喜欢哪门课?

你最近在学习哪些知识?

你为什么要做C++?

你觉得java和C++的区别在哪?

数据库的特性

数据库日志

数据库事务

数据结构有哪几种(我听说字节比较喜欢问B树之类的,提前准备了,结果他没问)

数组和链表的区别

面向对象型、结构型、函数型编程。函数型输入是不可更改的,你知道为什么他是这样的,或者说适用哪些场景吗?(我说就是可以防止一个函数读的时候另外一个函数改了,导致读的值不对)

那应该怎么实现?(这个问题优点记不清了,反正我说信号量,在修改之前上锁,修改之后再放开锁)

代码咋实现?

你说到信号量,你还知道别的吗?(我说管道,唉,这里忘记了)

进程和线程有了解吗?有做过什么多线程的项目吗?

cpu多级缓存你知道吗?

缓存的作用你知道吗?(提升查询效率)

比如一个电脑很卡,你知道怎么优化他吗,或者一个算法消耗时间很久。(他暗示了很久,我说的不太在点子上,他说都是用空间换时间嘛)

经历过最疯狂的事?

职业规划,你知道啥是初级工程师,啥是中级什么的吗?

设计模式?

算法题

一个链表L0->L1->L2->....->LN,换成L0->LN->L1->LN-1->L2....

字节7月19日客户端开发工程师一面面经

作者:WHUTcxw 链接:https://www.nowcoder.com/discuss/686665?channel=-1&source_id=profile_follow_post_nctrack

1、自我介绍

2、比赛经历

3、const char,const * char,char const 的区别

4、c++简化管理内存的方法

5、智能指针:

shared_ptr和weak_ptr分别说一下

weak_ptr指针没有强引用不小心释放掉怎么办

如何设计shared_ptr,(加是改变计数,减怎么减),指向的变量不是一种,怎么实现(泛型)

6、说一下面向对象

7、TCP的三次握手把最后一次握手去掉会怎么样

只会造成资源拥堵吗, 造成资源拥堵后会怎么样

两次握手就认为成功会有什么问题

8、 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),假设只有一个重复的整数,找出这个重复的数,不能排序,不能用额外空间

(其实很简单,1~n异或一遍,再和数组所有元素异或一遍,最后得到的结果就是;面试时候太紧张,反而想的过于复杂了)

9、给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…,要求O(n)的复杂度

(没有想出来,最后提示说是用反转链表

字节跳动 c++ iOS客户端开发

作者:牛客363388608号 链接:https://www.nowcoder.com/discuss/686044?channel=-1&source_id=profile_follow_post_nctrack

1、自我介绍

2、在浏览器地址栏输入URL,按下回车发生了什么?

3、线程 进程

4、串行 并行 并发

5、编译过程

6、介绍哈希表,哈希冲突怎么解决?

7、n个人围成一圈,1-m报数,叫到m的出圈,剩下继续报数,剩最后一个人的时候 他的编号是多少?

8、手撕快排 归并 时间空间复杂度各是多少?

9、3.15的时候 时针分针夹脚多少?

字节客户端提前批面经

作者:你要看看太阳 链接:https://www.nowcoder.com/discuss/685787?channel=-1&source_id=profile_follow_post_nctrack

一面 7.12 晚上8点 48min

c++

指针与引用,三个基本特性,public,private 区别,const 的用法,内存布局,为什莫分堆栈呢,c++11新特性,

计网

经典TCP,UDP,HTTP,知道什么是拜占庭将军问题吗(当然不知道)

操作系统

进程与线程,通信方式,虚拟内存实现方式、[算法]

写题

最大子序列和,最长公共子序列(你这码风有点问题啊,太随意了(确实,)

看你这边9点还有一场面试啊,我这边就问这么多了,你先休息一下,你有什么问题吗(我咋不知道我九点还要面。。)

二面 7.12 晚上9点 1h12min

c++

一个类会系统默认生成的成员函数,c++新特性(一看你就是背的啊,移动构造函数刚才没说啊(确实,),虚函数被覆盖了,虚表会存父类的虚函数吗(不会吧//那你要怎么用子类对象访问父类的虚函数//直接放弃),c++编译时的产生的各种文件是神摸(一窍不通)

操作系统

进程调度算法,通信方式,调度时操作系统发生了什么(中断//再详细一点,),32位系统内存是多大,什么限制了它呢(是系统自身还是硬件), CPU的多少GHz是什么意思,虚拟内存,页面的调度信息存在哪里,以及一大堆我听不懂也没记住的名词(没办法就是这么摆烂了 😁)

中间还有各种闲聊,扯到其他的问题,面试官总说一半说先不聊这个了 😁

写题

输出合法的ip地址,合并有序链表,你这码风有点随意啊,(确实,

你这边还有什么问题吗,(没了

三面 7.14 晚上8点 1h20分钟

写题

把一段任意的字符串改成合法的整数,我写了一个小时,为了debug提交了60多次,最后过了90的样例,面试官实在是看不下去了( 😁,我也看不下去

你这码风有问题啊(确实,

之后就是闲聊了,你遇到最困难的事情,最近有什么收获,

如果你找的代码有bug呢,比如他在华为能跑,vivo跑不了,怎么解决(自己测试

你这边有什么问题吗(没了//你就不想了解一下字节的自研引擎吗,刚才既然聊到了(然后就聊起来了

中间还有各种闲聊,东一句西一句的 😄

这回是真没什么问题了(面试官大笑//你了解过字节的游戏吗(没有,我还以为是新部门,傻笑(格局又小了)//我们去年有一款游戏口碑流水第六哦(原来是航海王热血航线)

其实三面表现挺差的,本以为是寄了

hr面 7.15 晚上8点 30min

各种闲聊,

你这码风有点问题啊(确实, 😁

你实习转正难吗(太难了

评价自己

如果拿到了offer,接下来还会投递其它吗,(不面了,好好学习去了

还有很多忘记了

4.14字节客户端实习一面

作者:LibertySheldon 链接:https://www.nowcoder.com/discuss/641495?channel=-1&source_id=profile_follow_post_nctrack

1.C语言中指针和引用的区别(我都记得不太清楚了,从方法调用时形参的角度扯了扯
2.有双指针吗?我说有
3.那有双引用吗?(我说我不知道
4.那你讲讲Java的反射吧,反射的机制(我又裂开咯,反射我根本没复习,我以为不会考
5.讲一下OOP(我讲了3个特性,然后让我写代码演示
6.讲一下生产者消费者(给他用Java里的syncronized讲了讲
7.进程与线程的区别
8.进程的通信方式有哪些
9.进程可以拥有多个线程吗,一个线程可以属于多个进程吗?
10.用过抖音,微信吧,当你的手机打开抖音和微信时,你觉得后台在做一些什么事情?(给我整懵了
11.讲一下osi的七层模型,具体每层的作用是什么
12.讲一下http吧,http有几个版本
13.http1.1解决了什么问题,http2.0呢?
14.浏览器发http请求一个页面用的是TCP还是UDP?TCP是3次挥手对吧,这么说TCP包含了http对吧?
15.TCP建立连接是3次,为什么断开却要4次?
16.http的长连接是什么策略,长连接会一直保持着吗?
17.知道哈希表吗,讲一讲它的原理 18.哈希表的时间复杂度,遇到冲突的解决办法 19.手撕算法剑指offer34,求一棵树中从根到叶子节点的值加起来等于某一值的所有路径

字节客户端一二三面面经(已oc,还愿)

作者:MRWu_haha 链接:https://www.nowcoder.com/discuss/521518?channel=-1&source_id=profile_follow_post_nctrack

一面( 50min)

1、 线程之间的同步机制

2、 有哪几种锁,每种锁的使用场景,你用过哪几种锁,用过信号量吗

3、 IPv4和IPv6的区别

4、 掩码的作用

5、 广播地址是多少

6、 程序的编译连接,静态链接和动态链接,分别什么时候链接的

7、 TCP和UDP的区别,TCP怎么保证可靠性

8、 DNS解析过程以及DNS劫持

9、 HTTP2.0与HTTP1.0和HTTP1.1的区别,有什么优势

10、 算法题

最长无重复子串(子串长度超过long long长度)

二面(50min)

1、 虚函数与纯虚函数的区别

2、 平时怎么使用虚函数的

3、 缓存的管理方式(LRU,LFU)

4、 手撕LRU

5、 上述写的LRU是不是线程安全的,怎么改成线程安全的

6、 Unordered_map的底层实现,哈希冲突

7、 有没有遇到过死锁,怎么解决的

8、 死锁的必要条件

9、 网络七层模型

10、 阻塞socket和非阻塞socket的区别

11、 反转字符串,字符串中的单词不用反转(“HERE IS BYTEDANCE”------>“BYTEDANCE IS HERE”)时间复杂度分析

12、 倾向于安卓还是IOS

13、 想参与独立app客户端开发还是技术中台之类的工作

14、 对工作地点有要求吗

三面(40min)

1、 介绍项目

2、 项目框架(烂大街的reactor模型Web服务器)

3、 生产者和消费者是哪些线程

4、 消费者是怎么处理读写事件的

5、 IO多路复用的底层机制

6、 如果每个socket都是活跃的,这个模型相比于简单的多线程模型(一个socket一个线程)的优势是什么

7、 C++多态,重载重写

8、 虚函数表和虚函数指针存放在那个位置

9、 派生类的虚函数表与基类的虚函数表是同一个虚函数表吗,子类重写的虚函数怎么覆盖基类的

10、 算法题

升序序列的查找出现目标target第一次出现的位置

11、删除一个数组中指定出现的某个数

字节跳动 客户端中台(C++) 超详细面经

作者:klaxxi 链接:https://www.nowcoder.com/discuss/476592?channel=-1&source_id=profile_follow_post_nctrack

一面

1.手写单例模式

C++ 静态局部变量 能保证线程安全

问了别的方式std::call_once或者静态成员变量,但是一般都会用静态局部变量

C++没有java的volatile能阻止指令重排,不能用DCL

2.malloc和new

malloc分配内存

new是操作符重载 分配内存+构造函数

3.多态

C++可以用继承和模板实现 个人更倾向于模板

4.继承

讲了下虚表

5.构造函数和析构函数能不能是虚函数

继承场景下,一般析构必须为虚,防止内存泄露。构造函数不能,结合虚表和构造析构的调用顺序来讲。

6.模板和继承的对比

模板默认内联,且没有虚表指针,调用开销小

7.模板的缺点

一个是编译慢一个是编译产物更占用内存

8.模板是怎么编译的

编译期碰到了就生成需要的代码,每个.o都会有用到的定义

所以链接的时候要去掉重定义,因此编的慢

9.智能指针

stl的三种 还有android的sp/wp都讲了一下,这块讲的比较细,面试官一直打断问细节

10.手写智能指针

11.左值右值的区别

12.完美转发

13.聊项目

  1. 算法 leetcode 92 反转链表 从m到n

二面

1. 虚继承虚表

2. C++ 4种cast 区别和主要使用场景

3. 场景类算法题 有依赖关系的进程启动管理 类似leetcode 1136 平行课程

4. 项目

5.算法题 LFU leetcode 460