自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 如何避免死锁

如何避免死锁什么是死锁由于两个或多个线程,互相持有对方所需要的资源,而导致线程一直处于等待状态无法前行,死锁通常出现在多个锁的情况下;死锁如何产生互斥条件:一个资源每次只能被一个进程使用;请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;不剥夺条件:进程已获得的资源,在没有使用完之前,不能强行剥夺;循环等待条件:多个进程之间形成一种互相循环等待资源的关系。如何避免线程死锁破坏不剥夺条件:让对面放弃自己已有的资源;破坏请求与保持条件:在自己需要的锁拿不到时,主动

2021-10-02 09:02:11 246

原创 进程间通信方式

管道模型匿名管道:Linux 命令行的 | (前一个命令的输出,作为后一个命令的输入),这种类型的管道通常是没有名字的,用完了就销毁了命名管道(FIFO):使用 mkfifo() 函数创建,管道以文件的形式存在消息队列模型通常用在多线程中生产者消费者模型中内核创建的一个队列,多个进程可以往里面发送消息,也可以从里面接收消息共享内存 + 信号量多个进程共享一片连续的内存空间速度快,性能高会出现进程不安全的情况,所以需要引入信号量避免冲突(互斥)同一共享资源,同一刻只能被一个.

2021-10-02 08:59:35 122

原创 TCP 四次挥手的过程

TCP 四次挥手的过程为什么建立连接只要三次挥手,断开连接需要四次挥手?这是因为 TCP 四次挥手的过程,它除了确认双方都是确认关闭之后,它还会为服务端关闭提供一个异步的等待时间;就是客户端发完了最后的数据之后准备关闭连接,服务端在接受到客户端的请求后,回复客户端他已经知道了,但是这个时候服务端还是可以继续发送数据的;这个时候就处于一个半关闭的状态,客户端可以选择再接收一些数据关闭也可以直接关闭。四次挥手的大致过程如下:客户端发送 FIN 包后,进入 FIN-WAIT-1 状态之后,客户端就

2021-10-02 08:56:52 623

原创 如何创建守护进程

如何创建守护进程使用 nohup 命令创建守护进程,使得程序挂在后台,但是程序执行完成后就会退出,程序的输出会存入 log 文件。从 fork 开始按按步骤创建在父进程中执行 fork 函数,并且父进程退出,子进程将被 init 进程托管;在子进程中使用 setsid 函数创建新的会话,目的是让子进程脱离终端的控制,并且摆脱父进程的影响;进程是属于进程组的,进程组的组号 gid 就是进程组组长的 pid,登录会话可以包括多个进程组,这些进程组共享一个控制终端,如果想要创建守护进程

2021-09-06 17:53:34 428

原创 map 和 unordered_map 的区别

map 和 unordered_map 的区别map 的底层是基于红黑树来实现的增删改查的时间复杂度很稳定 O(logn)可以得到有序序列为什么不使用 BST 和 AVL 呢?BST(二叉搜索树) 可能会退化成为链表AVL(二叉平衡搜索树) 的平衡过于严格,导致每次删除插入操作对于整棵树的调整过于频繁,会带来不必要的时间消耗unordered_map 的底层是基于哈希表来实现的unordered_map 的查询效率可以达到接近 O(1)虽然 unordered_ma

2021-09-03 16:04:23 150

原创 C++ 为什么不像 Java 一样有垃圾回收机制

C++ 里有一个 RAII 机制(资源获取就是初始化),是 C++ 用来管理资源、避免内存泄漏的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。也就是在使用一个对象的时候,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。函数在执行完毕的时候会自动清理栈空间内的内容,自动的去调用资源管理类的析构函数,RAII 就是结合了栈和析构函数来对所有资源进行管理,所以 C++ 就不需要像 Java 那样的垃圾回收机制,也能有效对资源进行管理。void.

2021-09-03 15:36:30 194

原创 TCP 与 UDP 的区别

TCP 和 UDP 的区别TCP 是面向连接的协议TCP 通过三次握手来建立连接所谓的建立连接,就是会在客户端和服务端之间去维护这个连接,具体建立一定数据结构来维护双方的交互状态,保证双方的连接是一个可靠的连接TCP 是面向字节流的协议TCP 具有拥塞控制和流量控制TCP 是一个有状态的服务,它关注数据包的收发是否成功,数据的收发对象等UDP 是一个面向无连接的协议UDP 它不能保证不丢失,也不能保证按时到达;它不管包是否到达和网络状况到底如何UDP

2021-09-02 19:38:45 168

原创 单例模式的实现(C++)

实现单例模式单例模式的目的是使得类的一个对象成为系统中的唯一实例。通过单例模式的方法创建的类在当前进程中只有一个实例 (根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)1、饿汉模式/* * 饿汉模式 * 1. 线程安全的因为代码在跑起来的时候,类就已经被实例化出来了 * 2. 但是不支持延迟加载,即不能在使用时才创建它 */class Singleton {public: static Singleton *getInstance();private:

2021-08-31 16:57:53 506

原创 链表判环--求环的起点 LeetCode #142

链表求环的起点–LeetCode #142. 环形链表 II 快慢指针指针法快指针走的路程是慢指针的 2 倍;第一次相遇时,设此时慢指针的走的路程是 x;指定一个指针 p 放在链表的头部(p 每次走一步和慢指针一样)如果 p 和 慢指针都再走一个 x 路程那么慢指针现在到达的位置就是 2xp 到达 x 位置,慢指针和 p 相遇了往回想一想,因为 p 和 慢指针的速度一样所以在环的入口位置它们就已经相遇了p 和慢指针从环入口处开始重叠走了一段距离到达 x 位置

2021-08-31 15:31:25 110

原创 链表判环--LeetCode #141

链表判环–LeetCode #141. 环形链表 快慢指针快指针一次向前走 2 个节点,慢指针一次向前走 1 个节点有环: 快指针与慢指针一定会在环中相遇,快指针路程等于慢指针路程的 2 倍无环: 快指针会先走到链表的结尾...

2021-08-31 15:30:15 57

原创 tcp的流量控制相关算法

2、简述tcp的流量控制相关算法流量控制就是让发送方的发送速度不要太快,要让接收方来得及接收原理就是通过确认报文中的窗口字段,发送方的发送窗口字段不能超过接收方的窗口大小,这个机制有点类似滑动窗口的机制。如果窗口开的太大,且发送方发送的速度过快了,使得窗口饱和,未发送的部分长度为 0,这时候接收方的压力也会变大,窗口内全都是已发送未确认的包,也会对缓存造成负担,未确认的部分也会一直放在发送方的缓存里,这个时候就需要通过确认信息来减小窗口大小,或者缩小为 0,让发送方的速率变慢;如果发送方的发送速度

2021-08-24 21:10:34 443

原创 TCP 为什么需要 3 次握手, 为什么 2 次不行, 4 次呢?

1、TCP 为什么需要 3 次握手, 为什么 2 次不行, 4 次呢?TCP 的三次握手是为了保证数据的可靠传输的,TCP 是全双工的协议,也就是说通过 TCP 协议发送的协议是要得到回复的,一来一回,所以说对于需要建立 TCP 连接的两端来说,每一端都需要进行一来一回的确认,这就进行三次握手。1、A 给 B 发送需要建立连接的请求;2、B 给 A 发送可以建立连接的回复;3、A 给 B 发送确认收到回复的信息;如果只进行二次握手:1、A 给 B 发送需要建立连接的请求;2、B 给 A 发

2021-08-24 15:56:00 1835

原创 Leetcode: 34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置1、思路因为是要找出给定目标值在数组中的开始位置和结束位置。所以开始位置的寻找,可以理解为在数组中寻找第一个满足条件的 targettargettarget结束位置的寻找可以理解为在数组中寻找最后一个满足条件的 targettargettarget至此就可以将题目简化成二分查找的特殊情况 (当 l=rl = rl=r)时找到。在寻找第一个满足条件的 targettargettarget 的时候,满足 target≤nums[mid

2021-04-23 16:13:13 174

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除