![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
维欣~
这个作者很懒,什么都没留下…
展开
-
【Linux】多线程与线程池的区别
多线程1、解决多任务同时执行的需求,合理使用CPU资源。多线程的运行是由CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。2、由于不同进程中的线程可能并发执行,因而Windows支持进程间的并发性。此外,同一个进程中的多个线程可以分配给不同的处理器并且同时执行。一个含有多线程的进程在实现并发时,不需要使用多进程的开销。同一个进程中的线程可以通过它们的公共地址空间交换信息,并访问进程中的共享资源。不同进程中的线程可以通过在两个进程间建立的共享内存交换信息。3、(插入)并发与并行的关系:原创 2020-06-30 23:25:38 · 623 阅读 · 0 评论 -
【计算机网络】零窗口、糊涂窗口以及Nagle算法
滑动窗口发送方发送数据速率与接收方接收数据速率相匹配。零窗口问题定义TCP报头结构中有1 6位的窗口大小:由接收方填充, 用来告知发送方当前本端还能接收的数据长度。如果接收方不断从网络中接收并缓存数据,但是应用程序并没有处理缓存的数据。直到最后,接收方就会向发送方发送一个0窗口的报文段。如何处理?持续计时器 +零窗口探测报文段为了解决这个问题,TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设原创 2020-06-26 12:11:06 · 1900 阅读 · 0 评论 -
【计算机网络】TCP的报文头部
怎样保证TCP的可靠性?(1)保证数据能够到达对方(2)保证数据不重复、不乱序应答确认、超时重传滑动窗口:发送方发送数据,接收方速率匹配拥塞控制算法:发送方发送数据的速率,与当前网络情况的匹配(3)保证数据不失真16位校验和,冗余检验、TCP头部和数据部分TCP的报文头部1、序号(seq):在一个TCP连接中传送的每一个字节流中的每一个字节都按顺序编号。序号值由系统初始化的某一个随机值ISN和本报文段第一个字节数据在整个字节流中的偏移量组成。2、确认号(ack):用作对另一方发送的tc原创 2020-06-25 16:23:00 · 708 阅读 · 0 评论 -
【面试题】TCP的建立和断开连接(三次握手和四次挥手)相关考点
TCP建立连接的三次握手客户端①[CLOSED -> SYN_SENT] 客户端调用connect, 发送同步报文段;③[SYN_SENT -> ESTABLISHED] 接收到服务器端发送的SYN报文,并向服务器端发送SYN确认报文。此时connect调用成功, 则进入ESTABLISHED状态, 开始读写数据;服务器端①[CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN(监听)状态, 等待客户端连接;②[LISTEN -> SYN原创 2020-06-22 17:35:18 · 316 阅读 · 0 评论 -
【Linux】线程与fork的联系以及线程中子进程的锁的状态?
多线程中有一个线程调用fork,创建的子进程中会有几个线程?创建的子进程中,只有调用fork的线程被启动,其他线程并没有执行。实例:多线程创建子进程,并且在创建之前有对互斥锁加锁,子进程中锁的状态如何?答案:在子进程中出现了死锁,因为在子进程中只有一个线程被启动起来,而执行时他已经是加锁状态。即子进程会继承父进程的锁状态。实例:如何解决子进程中出现的死锁?有一个线程库的方法prepre对所有的锁执行加锁操作。其保证在fork执行过程中,所有的锁都是加锁状态的。...原创 2020-05-28 20:10:20 · 373 阅读 · 0 评论 -
【Linux】对线程同步的总结
一、前言1、 一个进程在同一时刻能够处理多个线程,每个线程处理各自独立的任务,用线程操作能够简化异步事件。2、程序可以通过使用线程得以简化,即使多线程程序在串行化任务时不得不阻塞, 由于某些线程在阻塞的时候还有另外一些线程可以运行。所以多线程程序在单处理器上运行仍然能够改善,响应时间和吞吐量。3、每一个进程有一个进程ID,是唯一的,进程ID用pid_t数据类型来表示。每一个线程有一个线程ID,但线程ID只在他所属的进程环境有效,线程ID用pthread_t数据类型来表示。4、当多个线程共享相同的内原创 2020-05-27 22:47:31 · 250 阅读 · 0 评论 -
【Linux】【面试题】进程与线程的区别
进程与线程的区别1、进程是资源分配的最小单位,线程是CPU调度的最小单位。2、进程有自己的独立地址空间,线程共享进程中的地址空间。进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间;而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。3、进程的创建消耗资源大,线程的创建消耗相对较小。4、进程的切换开销大,同一个进程中的线程的切换相对较小。5、进程是在CPU上实现共享,对CPU的操作只有操作系统内核原创 2020-05-25 17:15:44 · 737 阅读 · 1 评论 -
【Linux】总结进程间通信以及相关面试考点
一、相关知识点1、进程地址空间分布图:2、什么是临界资源?临界资源同一时刻只允许一个进程访问的资源叫临界资源。3、什么是临界区?临界区访问临界资源的代码段叫临界区。4、全双工和半双工通信有什么区别?半双工数据可以从A到B发送,也可以从B到A发送,但同一时刻只能是一个方向的。全双工数据在任意时刻都可以在两个方向同时进行。即A到B和B到A二、管道详细讲述管道以及实现1、什么是有名管道?有名管道FIFO:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,没有血缘关系的进程也可以原创 2020-05-19 15:29:46 · 532 阅读 · 0 评论 -
【面试题】总结C++中const和static这两个关键字
C++中的const和static一、const关键字1、const修饰变量(1)修饰全局变量(2)修饰局部变量(3)修饰成员变量2、const修饰函数(1)类成员方法二、static关键字1、static修饰变量(1)修饰全局变量(2)修饰局部变量(3)修饰成员变量2、static修饰函数(1)类成员方法一、const关键字1、const修饰变量(1)修饰全局变量const修饰全局变量...原创 2020-05-04 21:36:45 · 460 阅读 · 0 评论 -
【面试题】将两个升序链表合并为一个新的升序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。struct ListNode { int val; struct ListNode *next;};struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ if (l1 == NULL...原创 2020-05-01 21:03:37 · 837 阅读 · 0 评论 -
【面试题】排序后将数组中相加为K的数据下标输出
使用了快速排序将无序的数组进行排序后,在从里面找相加为K的数字下标。但这个代码还不完善,因为如果有多组数据,没有将所有可能性都输出。//快排后的数组中两个值相加为k的数字,返回这两个数字的下标#include<stdio.h>typedef struct ADD{ int left;//第一个满足条件数的下标 int right;//第二个满足条件数的下标}ADD;...原创 2020-04-29 21:58:12 · 246 阅读 · 1 评论 -
【面试题】判断合法的IP地址(IPV4)
分析:首先我们要知道IP地址(IPV4)的条件:(除去特殊的主机和广播地址)1、IP地址只有三个 ’ . ',如果不是三个点,就不是IP地址2、例如:A.B.C.DA不能为0,且每一位都不能大于2553、所以要用一个函数单独对 **’ . '**进行判断4、特别说明一下isdigit函数,主要用于检查其参数是否为十进制数字字符,C语言中要加上头文件<ctype.h>代码如...原创 2020-04-28 20:37:22 · 3082 阅读 · 0 评论 -
【数据结构】【面试题】单链表的逆置思想与代码实现
一、设计思想这是逆置前我们得到的链表(1)定义一个指针pCur,让他指向第一个数据结点(2)生成一个指针pNext,指向pCur的下一个结点(3)把头结点和第一个数据结点的指向断开,这样前面的部分生成了一个新的空链表,而后面的部分变成了一个结点集合(4)把pCur和pNext之间的指向断开,把pCur头插在前面的空链表中(5)最后把pCur指向pNext,等待下一次操作(6)依...原创 2020-04-17 19:07:53 · 216 阅读 · 0 评论