为了保证制作简历的安全性和流畅性,建议您使用Chrome浏览器进行访问
Smell Billy 2021届
APP 内打开
分享
5
25

字节跳动客户端一面面经(附带答案)

2020.01.05 字节跳动 客户端 第一轮面试


C++:

t1. 拷贝构造函数?

1. 定义:拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。

2. 作用:用来复制对象,使用这个对象的实例来初始化这个对象的一个新的实例。

3. 调用时机:(1)当函数的参数为类的对象时(2)函数的返回值是类的对象(3)对象需要通过另外一个对象进行初始化。

4. 拷贝有两种:深拷贝,浅拷贝。当出现类的等号赋值时,会调用拷贝函数,在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数即浅拷贝,它能够完成静态成员的复制。当数据成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象。所以这时必须采用深拷贝。

5. 深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。简而言之,当数据成员中有指针时,必须要用深拷贝。

6. 拷贝构造函数必须是引用传递,不能是值传递,这是为了防止递归引用。


t2. 智能指针

1. c++里面的四个智能指针,auto_ptr,unique_ptr,shared_ptr,weak_ptr,其中后三个是c++11支持,并且第一个已经被c++11弃用。


2. 使用原因:智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针是一个类,当超出了类的实例对象的作用域时,会自动调用对象的析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。


3. auto_ptr:采用所有权模式。p2剥夺了p1的所有权,但是当程序运行时访问p1将会报错。所以auto_ptr的缺点是:存在潜在的内存崩溃问题。


4. unique_ptr:实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用,可以通过标准库的move()函数实现指针转移。


5. shared_ptr:实现共享式拥有概念。多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。从名字share就可以看出了资源可以被多个指针共享,它使用计数机制来表明资源被几个指针共享。


6. weak_ptr:是一种不控制对象生命周期的智能指针, weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。


t3. 如何实现一个Hashmap?(回答了链式存储)时间复杂度是多少?

1. 如何避免哈希碰撞:


(1)开放地址法:开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入


(2)再哈希法:当哈希地址发生冲突用其他的函数计算另一个哈希函数地址,直到冲突不在产生为止


(3)链地址法:将哈希表的每个单元作为链表的头结点,所有哈希地址为 i 的元素构成一个同义词链表。即发生冲突时就把该关键字链在以该单元为头节点的链表的尾部


(4)建立公共溢出区:将哈希表分为基本表和溢出表两部分,发生冲突的元素都放在溢出表中


2. 不管插入还是查找,由key获取hash值然后定位到桶的时间复杂度都是O(1),那么真正决定时间复杂度的实际上是桶里面链表/红黑树的情况。如果桶里面没有元素,那么直接将元素插入或者直接返回未查找到,时间复杂度就是O(1),如果里面有元素,那么就沿着链表进行遍历,时间复杂度就是O(n),链表越短时间复杂度越低,如果是红黑树的话那就是O(logn)。


3. 因此HashMap的查找时间复杂度只有在最理想的情况下才会为O(1)。



操作系统:

t1. 进程的通信方式有哪些?(管道、消息队列、共享存储区、信号量、套接字)

t2. 消息队列是怎么实现的?

t3. 为什么要区分内核态和用户态?是如何划分的?

t4. HTTPS请求的过程?

t5. HTTP协议是怎么保证可靠传输的?说一下拥塞控制?


算法:

t1. 给定一个降序链表和一个升序链表,合并成一个升序链表

t2. 求一个二叉树的最大宽度(节点数最多的一层)

t3. 进阶:在2的基础上再增加一个二叉树高度


为了给大家良好的阅读体验,我们为大家总结了完整版面经的标准答案,可通过扫描图中二维码观看,还可下载PDF噢!!!

发布时间:2021年01月13日
用户头像
我来说两句…
共 5 条评论
小柒 电信云·高级测试开发工程师
2021年01月20日 回复
是谁在唱Rap 西安交通大学·2022届
硬货啊
2021年01月14日 回复
Smell Billy 是谁在唱Rap: 那必须硬兄弟
2021年01月15日 回复
莫盛卜 西南财经大学·2022届
ddddddddddddd
2021年01月14日 回复
Smell Billy 莫盛卜: 欢迎关注我们!!!
2021年01月15日 回复