10.11某小厂

1.项目中心跳机制的作用

2.项目中客户端在什么情况下断开服务器是不知道的?为什么不知道客户端断开?

1.网络故障导致的意外断开

网络设备故障:如果路由器、交换机等网络设备出现故障,可能会导致数据包无法正确转发,客户端与服务器之间的通信中断。由于客户端通常不会持续监测网络设备的状态,所以很难立即察觉这种类型的断开。

2.服务器意外关闭或崩溃

软件错误或崩溃:服务器上运行的软件可能会出现错误,导致服务器进程意外终止。如果这种情况发生得很突然,服务器可能没有机会向客户端发送断开连接的消息。客户端可能会继续等待响应,直到超时或进行下一次通信尝试时才意识到连接已断开。

3.TCP中的校验码?

TCP的校验码是用于确保传输数据完整性和准确性的一种机制。它通过计算数据的校验值来检测在数据传输过程中是否发生了错误。

当接收方收到TCP段时,会同样计算该段的校验码,并与接收到的校验码进行比较:

**一致:**如果校验码一致,表明数据可能没有发生错误,接收方可以继续处理数据。

**不一致:**如果校验码不匹配,接收方会丢弃该TCP段,并不会发送确认应答,发送方将会重新发送该数据段。

4.如何防止不同的TCP段进行乱序?(tcp发送时是a,b,c,如果因为网络问题导致到达顺序是b,c,a,TCP是如何解决的?)

序列号:每个TCP段都包含一个序列号,用于标识该段数据在整个数据流中的位置。当接收方收到数据时,会根据序列号将数据重新排序,从而确保数据的顺序。

5.系统调用send()函数时,程序是由用户态到内核态,send什么时候从内核态返回到应用态?

一旦数据被成功放入发送缓冲区准备好发送 ,内核会返回到用户态,send 返回成功或失败的结果

6.怎么理解同步与阻塞?

同步:同步指的是操作在执行时,调用者必须等待操作完成后才能继续执行后续代码。在这种情况下,调用者与被调用的操作处于同一时间线。

阻塞:阻塞指的是在某些条件未满足时,程序的执行会暂停,直到条件满足为止。阻塞通常用于等待某些资源(如I/O操作、锁等)。

**同步与阻塞的关系:**在同步操作中,调用者必须等待操作完成,因此它是阻塞的。

同步强调的是请求和处理在同一时间线上的执行。

阻塞则强调程序在等待某些条件满足时的暂停状态。

7.信号量的用法?

**计数信号量:**可以取任意非负整数值,表示可以同时访问的资源数量。

基本操作:

**1.初始化:**设置信号量初值:

**2.等待:**使信号量的值减1,如果值为0,则阻塞线程,直到信号量大于0。

**3.释放:**使信号量的值加1,并唤醒一个等待的线程(如果有的话)。

8.说一下互斥锁(mutex):

互斥锁(Mutex)是一种用于保护共享资源的同步机制,确保在同一时刻只有一个线程可以访问该资源。它主要用于防止多个线程同时读写共享数据,从而避免数据竞争和不一致性。

9.在同一个线程可以多次上锁吗?

**允许多次上锁的实现:**有些互斥锁的实现允许同一个线程多次获取同一个锁。例如,在 POSIX 线程(pthreads)中,使用 pthread_mutex_lock 函数对一个互斥锁进行多次上锁是允许的。每次上锁会增加一个锁的计数,只有当线程调用了相同次数的 pthread_mutex_unlock 函数时,锁才会真正被释放,其他线程才能获取该锁。

但有可能会出现死锁等问题。

10.什么是死锁?

两个或多个线程竞争同一资源所造成的一种僵持的状态。

举例:有两个进程 P1 和 P2,以及两个资源 R1 和 R2。P1 先占用了 R1,P2 先占用了 R2,然后 P1 又请求 R2,P2 又请求 R1,这时就可能发生死锁

11.如何理解面向对象

12.在一个类中相同的函数参数,相同的函数名,不同的返回值,是重载吗?

不是重载

13.在一个类中不相同的函数参数,相同的函数名,相同的返回值,是重载吗?

是重载

重载定义:指在同一个作用域内,可以有一组具有相同函数名,但参数列表不同的函数。

14.虚函数

15.纯虚函数的作用

16.构造函数能是虚函数吗?析构函数能是虚函数吗?

当通过基类指针或引用来删除指向派生类对象的内存时,如果析构函数不是虚函数,那么只会调用基类的析构函数,而不会调用派生类的析构函数。这可能导致派生类中分配的资源没有被正确释放

17.如何防止内存泄漏?

18.智能指针

19.举一个循环引用的例子

20.unique_ptr可以赋值吗?

std::unique_ptr 不能直接赋值,因为它是独占所有权的智能指针,不能被复制。这意味着你无法将一个 std::unique_ptr 直接赋值给另一个 std::unique_ptr。但是,你可以通过移动语义来转移所有权。move()函数

21.声明一个赋值拷贝构造函数

22.声明一个拷贝构造函数

23.如何实现unique_ptr不能拷贝和赋值

24.unique_ptr可以作为函数的返回值吗

25.static关键字

26.static可以修饰普通的函数吗?

static 可以修饰普通的函数。在 C++ 中,当你将一个函数声明为 static 时,这个函数的链接性将被限制为定义它的翻译单元(通常是源文件),这意味着它不能被其他源文件访问。

27.static修饰的成员函数可不可以访问静态成员?

可以,但不可以访问非静态成员。

28.指针和引用的区别?

29.sizeof作用在引用和指针有何区别?

sizeof 应用于指针时,它返回的是指针本身所占用的字节数,而不是指针所指向的数据类型所占的字节数。

sizeof 应用于引用时,它返回的是引用所引用的类型的大小,而不是引用本身的大小。

30.左值引用和右值引用

31.stl容器

32.vector,list,map随机插入最快

是list快。O1

vector在末尾插入元素的时间复杂度为 O(1)(摊销),而在中间或开头插入的时间复杂度为 O(n)

map是O(logN)

相关推荐
Hacker_LaoYi37 分钟前
【漏洞分析】DDOS攻防分析(四)——TCP篇
网络·tcp/ip·ddos
爱吃水果蝙蝠汤38 分钟前
DATACOM-IP单播路由(BGP)-复习-实验
网络·网络协议·tcp/ip
Sun_12_21 小时前
SQL注入(SQL lnjection Base)21
网络·数据库
网络安全Jack2 小时前
网络安全概论——身份认证
网络·数据库·web安全
易我数据恢复大师2 小时前
如何彻底删除电脑数据以防止隐私泄露
网络·电脑·数据删除·擦除
学习溢出3 小时前
【网络安全】逆向工程 练习示例
网络·安全·网络安全·渗透测试·逆向工程
_微风轻起3 小时前
linux下网络编程socket&select&epoll的底层实现原理
linux·网络
vortex55 小时前
Burp与其他安全工具联动及代理设置教程
网络·安全
xserver26 小时前
ensp 基于端口安全的财务部网络组建
网络·安全