最新字节跳动社招精选面试题及参考谜底
作者:竞博app 发布时间:2022-10-28 06:16
本文摘要:1. C++智能指针如何解决内存泄露问题.1.shared_ptr共享的智能指针std::shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。在最后一个shared_ptr析构的时候,内存才会被释放。

竞博官网网站

1. C++智能指针如何解决内存泄露问题.1.shared_ptr共享的智能指针std::shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。在最后一个shared_ptr析构的时候,内存才会被释放。可以通过结构函数、std_make_shared辅助函数和reset方法来初始化shared_ptr:// 结构函数初始化std::shared_ptrp ( new int(1) ) ;std::shared_ptrp2 = p ;// 对于一个未初始化的智能指针,可以通过reset方法来初始化。

std::shared_ptrptr; ptr.reset ( new int (1) ) ;if (ptr) {cout << “ptr is not null.n” ; }不能将一个原始指针直接赋值给一个智能指针:std::shared_ptrp = new int(1) ;// 编译报错,不允许直接赋值获取原始指针:通过get方法来返回原始指针std::shared_ptrptr ( new int(1) ) ;int * p =ptr.get () ;指针删除器:智能指针初始化可以指定删除器void DeleteIntPtr ( int * p ) {delete p ;}std::shared_ptrp ( new int , DeleteIntPtr ) ;当p的引用技术为0时,自动挪用删除器来释放工具的内存。删除器也可以是一个lambda表达式,例如std::shared_ptrp ( new int , [](int * p){delete p} ) ;注意事项:(1).不要用一个原始指针初始化多个shared_ptr。

(2).不要再函数实参中建立shared_ptr,在挪用函数之前先界说以及初始化它。(3).不要将this指针作为shared_ptr返回出来。(4).要制止循环引用。

2.unique_ptr 独占的智能指针unique_ptr是一个独占的智能指针,他不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另外一个unique_ptr。unique_ptr不允许复制,但可以通过函数返回给其他的unique_ptr,还可以通过std::move来转移到其他的unique_ptr,这样它自己就不再拥有原来指针的所有权了。

如果希望只有一个智能指针治理资源或治理数组就用unique_ptr,如果希望多个智能指针治理同一个资源就用shared_ptr。3.weak_ptr弱引用的智能指针弱引用的智能指针weak_ptr是用来监视shared_ptr的,不会使引用计数加一,它不治理shared_ptr内部的指针,主要是为了监视shared_ptr的生命周期,更像是shared_ptr的一个助手。

weak_ptr没有重载运算符*和->,因为它不共享指针,不能操作资源,主要是为了通过shared_ptr获得资源的监测权,它的结构不会增加引用计数,它的析构不会淘汰引用计数,纯粹只是作为一个旁观者来监视shared_ptr中关离得资源是否存在。weak_ptr还可以用来返回this指针息争决循环引用的问题。2. linux中软毗连和硬链接的区别.原理上,硬链接和源文件的inode节点号相同,两者互为硬链接。软毗连和源文件的inode节点号差别,进而指向的block也差别,软毗连block中存放了源文件的路径名。

实际上,硬链接和源文件是同一份文件,而软毗连是独立的文件,类似于快捷方式,存储着源文件的位置信息便于指向。使用限制上,不能对目录建立硬链接,不能对差别文件系统建立硬链接,不能对不存在的文件建立硬链接;可以对目录建立软毗连,可以跨文件系统建立软毗连,可以对不存在的文件建立软毗连。3. TCP的拥塞控制机制是什么?请简朴说说我们知道TCP通过一个定时器(timer)采样了RTT并盘算RTO,可是,如果网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,然而重传会导致网络的肩负更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴” —— TCP的拥塞控制机制就是用于应对这种情况。

首先需要相识一个观点,为了在发送端调治所要发送的数据量,界说了一个“拥塞窗口”(Congestion Window),在发送数据时,将拥塞窗口的巨细与吸收端ack的窗口巨细做比力,取较小者作为发送数据量的上限。拥塞控制主要是四个算法:1.慢启动:意思是刚刚加入网络的毗连,一点一点地提速,不要一上来就把路占满。

毗连建好的开始先初始化cwnd = 1,讲明可以传一个MSS巨细的数据。每当收到一个ACK,cwnd++; 呈线性上升每当过了一个RTT,cwnd = cwnd*2; 呈指数让升阈值ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞制止算法”2.拥塞制止:当拥塞窗口 cwnd 到达一个阈值时,窗口巨细不再呈指数上升,而是以线性上升,制止增长过快导致网络拥塞。每当收到一个ACK,cwnd = cwnd + 1/cwnd每当过了一个RTT,cwnd = cwnd + 1拥塞发生:当发生丢包举行数据包重传时,表现网络已经拥塞。分两种情况举行处置惩罚:等到RTO超时,重传数据包。


本文关键词:最新,字节,跳动,社招,精选,面,试题,竞博app,及,参考

本文来源:竞博app-www.tuke365.com

电话
080-36054854