常见问题解答
对一些常见问题的解答
学习上的Monkey
这个作者很懒,什么都没留下…
展开
-
LRU用什么数据结构实现更合理?
LRU用什么数据结构实现更合理?解:最原始的方式是用数组,数组的每一项中有数据最近的使用频次,数据的使用频次可以用计时器计算。每次置换的时候查询整个数组实现。另一种更好的做法是利用双向链表实现,将使用到的数据移动到链表头部,每次置换时从链表尾部拿走数据,链表头部是最近使用的,链表尾部是最近没有被使用到的数据。...原创 2022-01-18 11:11:57 · 832 阅读 · 0 评论 -
记一次数据库 MySQL Server has gone away的解决过程
MySQL Server has gone away问题产生?在一次清理完 数据库表的碎片之后,并重启了Mysql实例 线上项目进行sql查询时则产生了下面的问题。 MySQL Server has gone away问题排查。MySQL服务宕机了 (因为已经重启 所以排除)Mysql的链接进程被主动kill掉。(这个也排除了 因为无人操作)Mysql 链接超时 ,在某个mysql长连接的很久没有新的请求,达到了server端的timeout,被server强行关闭,此后再通过这个c原创 2022-01-18 10:12:51 · 784 阅读 · 0 评论 -
如何控制同一时间只有2个线程运行?
如何控制同一时间只有2个线程运行?解析:同时控制两个线程进入临界区,一种方式可以考虑用信号量。另一种方式是考虑生产者、消费者模型。想要进入临界区的线程先在一个等待队列中等待,然后由消费者每次消费两个。这种实现方式,类似于实现一个线程池,所以也可以考虑实现一个 ThreadPool类,然后再实现一个调度器类,最后实现一个每次选择两个线程执行的调度算法。...原创 2022-01-13 11:18:56 · 333 阅读 · 0 评论 -
TCP协议是如何恢复数据顺序的,TCP拆包和粘包的作用是什么
TCP协议是如何恢复数据顺序的,TCP拆包和粘包的作用是什么?解析:TCP拆包的作用是将任务拆分处理,降低整体任务出错的概率,以及减小底层网络处理的压力。拆包过程需要保证数据经过网络的传输,又能恢复到原始的顺序。这中间,需要数学提供保证顺序的理论依据。TCP利用(发送字节数、接收字节数)的唯一性来确定封包之间的顺序关系。粘包是为了防止数据量过小,导致大量的传输,而将多个TCP段合并成一个发送。...原创 2022-01-12 14:35:41 · 1069 阅读 · 0 评论 -
MySQL中的B树和B+树有什么区别?
MySQL中的B树和B+树有什么区别?解析:B+树继承于B树,都限定了节点中数据数目和子节点的数目。B树所有节点都可以映射数据,B+树只有叶子节点可以映射数据。为了B+树创造了很多冗余的索引(所有非叶子节点都是冗余索引),这些冗余索引让B+树在插入、删除的效率都更高,而且可以自动平衡,因此B+树的所有叶子节点总是在一个层级上。所以B+树可以用一条链表串联所有的叶子节点,也就是索引数据,这让B+树的范围查找和聚合运算更快。...原创 2022-01-04 16:37:32 · 1432 阅读 · 0 评论 -
进程的开销比线程大在了哪里?
进程的开销比线程大在了哪里?解析:Linux中创建一个进程自然会创建一个线程,也就是主线程。创建进程需要为进程划分出一块完整的内存空间,有大量的初始化操作,比如要把内存分段(堆栈、正文区等)。创建线程则简单得多,只需要确定PC指针和寄存器得值,并且给线程分配一个栈用于执行程序、同一个进程得多个线程间可以复用堆栈。因此,创建进程比创建线程慢,而且进程得内存开销更大。...原创 2021-12-31 11:38:54 · 435 阅读 · 0 评论 -
什么情况下会触发饥饿和死锁?
什么情况下会触发饥饿和死锁?解析:线程需要资源没有拿到,无法进行下一步,就是饥饿。死锁和活锁都是饥饿的一种形式。非抢占的系统中,互斥的资源获取,形成循环依赖就会产生死锁。死锁发生后,如果利用抢占解决,导致资源频繁被转让,有一定概率触发活锁。死锁、活锁、都可以通过设计并发控制算法解决,比如哲学家就餐问题。...原创 2021-12-29 16:55:34 · 288 阅读 · 0 评论 -
如何抵御SYN拒绝攻击?
DDoS 分布式拒绝服务攻击原创 2021-12-27 11:08:46 · 817 阅读 · 0 评论 -
是不是每发送一个http请求,都建立一个TCP连接?
HTTP保持连接复用原创 2021-12-25 09:17:53 · 2597 阅读 · 0 评论 -
TCP/IP 采用层次结构模型的优点
TCP/IP采用分层的优点易维护与实现,这种结构结构使得实现,调试和维护一个庞大而复杂的系统变得容易。灵活性好,任何一层发生变化时,只要层间接口关系保持不变,则在这层以上或以下各层均不影响。各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅需要知道该层通过层间接口所提供的服务。每一层实现相对独立的功能,将一个难以处理的复杂问题分解为若干个较容易处理的更小的问题。结构上可分割,各层都可以采用最合适的技术实现能促进标准化工作,每一层的功能及其所提供的服务都已有了精确的说明。.原创 2021-12-11 20:52:05 · 2616 阅读 · 0 评论 -
TCP为什么是3次握手 4次挥手
问:为什么TCP是三次握手 4次挥手解析:TCP是一个全双工协议,为了让双方都保证,建立连接的时候,连接双发都需要向对方发送SYN(同步请求)和ACK(响应)。握手阶段:双方都没有繁琐的工作,因此一方向另一方发起同步(SYN)之后,另一方可以将自己的ACK和SYN打包作为一条消息回复。因此是3次握手 需要三次数据传输。挥手阶段双方可能可能都存在没有完成的工作,收到挥手请求的一方,由于必须马上响应(ACK),表示收到了挥手请求,类比现实中你收到一个快递,你可能会先收下,然后再使用一段时间才会给原创 2021-12-10 11:21:41 · 1525 阅读 · 0 评论 -
滑动窗口和流速控制是怎么回事?
滑动窗口和流速控制是怎么回事?解析:滑动窗口是tcp协议控制可靠性的核心。发送方将数据拆包,变成多个分组,然后将数据放入一个拥有滑动窗口的数组,依次发出,仍然遵循先入先出(FIFO)的顺序,但是窗口中的分组会一次性发送,窗口中序号最小的分组如果收到ACK,窗口就会发生滑动;如果最小序号的分组长时间没有收到ACK,就会触发整个窗口的数据重新发送。另一方面,在多次传输中,网络的平均延迟往往是相对固定的,这样TCP协议可以通过双方协商窗口大小控制流速。分组和TCP段是一个意思。...原创 2021-12-10 15:07:11 · 850 阅读 · 0 评论