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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值