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)

相关推荐
半夏知半秋1 小时前
rz&sz&scp端对端文件传输整理
linux·运维·服务器·网络
IT农民工~2 小时前
《网络基础之 HTTP 协议:常见 HTTP 方法详解》
服务器·前端·网络·网络协议·http·html5
妍妍的宝贝3 小时前
k8s 的网络通信
网络·容器·kubernetes
钢铁小狗侠3 小时前
网络编程(14)——基于单例模板实现的逻辑层
网络·c++·单例模式·网络编程·asio
墨染8665 小时前
深信服上网行为管理AC无法注销在线用户
运维·网络·安全
大G哥5 小时前
探索IP协议的神秘面纱:Python中的网络通信
开发语言·网络·网络协议·tcp/ip·php
暮志未晚Webgl6 小时前
98. UE5 GAS RPG 实现闪电链技能负面效果
android·网络·ue5
网络工程师俱乐部6 小时前
TCP连接重置,到底是怎么回事?
网络·网络协议·tcp/ip·华为·网络工程师·华为认证·交换机