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)

相关推荐
深思慎考9 分钟前
Linux网络——socket网络通信udp
linux·网络·udp
孤寂大仙v11 分钟前
【计算机网络】NAT、代理服务器、内网穿透、内网打洞、局域网中交换机
网络·计算机网络·智能路由器
LuckyRich112 分钟前
【websocket】安装与使用
网络·websocket·网络协议
KIDAKN14 分钟前
理解网络协议
网络·网络协议
s_little_monster1 小时前
【Linux】网络--数据链路层--以太网
linux·运维·网络·经验分享·笔记·学习·计算机网络
明金同学10 小时前
电脑wifi显示已禁用怎么点都无法启用
运维·服务器·网络
秋水丶秋水10 小时前
GlobalSign、DigiCert、Sectigo三种SSL安全证书有什么区别?
运维·服务器·网络
电鱼智能的电小鱼11 小时前
虚拟现实教育终端技术方案——基于EFISH-SCB-RK3588的全场景国产化替代
linux·网络·人工智能·分类·数据挖掘·vr
你无法关注此用户12 小时前
华为设备OSPF配置与实战指南
运维·网络
试剂界的爱马仕12 小时前
软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
网络·人工智能·科技·机器学习·ci/cd·ai写作