自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代码兴国

勤能补拙

  • 博客(107)
  • 收藏
  • 关注

原创 【Linux】孤儿进程|守护进程|Shell脚本设置守护进程开机自启

🔥❤️守护进程是孤儿进程的一种特殊情况,开发者创建父子进程模型,让父进程退出,子进程变为守护进程。是一种人为的孤儿进程。守护进程(Daemon Process)是在计算机系统中以后台方式运行的特殊进程,经典的后台服务进程。持续执行在后台完成特定服务,不干预前台任务。不依赖于终端或会话,它独立于终端控制并在系统级别执行特定的任务。普通的软件进程随用户持续,生命周期较短。守护进程的生命周期较长,开机启动关机结束,持续服务于平台。守护进程不能持续占用系统资源(CPU、内存等),长时间处于低开销模式。

2024-06-22 10:10:05 1893 10

原创 【C++核心编程】C++入门关键基础知识

🔥❤️C语言是面向过程,C是面向对象。C++是一门面向对象编程的语言,把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为,更注重的是程序的整体设计,方便程序后期维护、优化和管理,让一个功能尽可能的通用。面向对象编程只有一个价值: 应对需求的变化,本意是要处理大型复杂系统的设计和实现。常说的面向过程和面向对象,其本质还是在其设计思想上

2024-06-04 20:00:50 1217 14

原创 【Linux】深入剖析Linux文件系统

🔥❤️块组描述符表(Block Group Descriptor Table)是在 ext2、ext3 和 ext4 等文件系统中用于存储关于文件系统块组的信息的数据结构。块组描述符表存储了每个块组的描述符Block bitmap起始位置。块组中空闲inode(理论存储文件数量)和已分配inode的数量。inode bitmap起始位置。inode table起始位置。data block起始位置。块组描述符表通常存储在文件系统的固定位置,以便文件系统在挂载时能够快速访问。它是文件系统的

2024-05-29 10:23:09 1367 1

原创 【计算机网络】深入解析TCP协议

🔥❤️TCP三次握手中可以携带有效数据吗?为什么是三次握手?不是两次或四次?为什么ACK和FIN要分两次发送(为什么是四次挥手)?为什么TIME_WAIT状态要等待2MSL?TCP如何解决粘包问题?

2024-05-24 23:09:34 1617 2

原创 【力扣】最小栈

🔥❤️设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

2024-07-19 19:11:58 440 4

原创 【高性能服务器】poll模型

🔥❤️poll 不再用 BitsMap 来存储所关注的文件描述符,取而代之用动态数组,以链表形式来组织,突破了 select 的文件描述符个数限制,当然还会受到系统文件描述符限制。但是 poll 和 select 并没有太大的本质区别,都是使用「线性结构」存储进程关注的 Socket 集合,因此都需要遍历文件描述符集合来找到可读或可写的 Socket,时间复杂度为 O(n),而且也需要在用户态与内核态之间拷贝文件描述符集合,这种方式随着并发数上来,性能的损耗会呈指数级增长。

2024-07-19 18:51:09 1075 7

原创 【高性能服务器】select模型

🔥❤️IO多路复用就是复用一个线程,从原先一个客户端需要一个线程去调用recv询问内核数据是否已经就绪,那么多个客户端就需要多个线程,转变成现在多个客户端都用一个线程使用select/poll去统一管理,主动通知用户哪些数据已经就绪(read,write,accept等事件),所以复用了这个线程,减少了系统开销。。

2024-07-05 15:52:02 1460 29

原创 【力扣】逆波兰表达式求值

🔥❤️给你一个字符串数组 tokens ,表示一个根据表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。

2024-07-05 15:51:53 388 2

原创 【力扣】同构字符串

🔥❤️给定两个字符串 s 和 t ,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

2024-07-05 15:50:52 358 3

原创 【力扣】快乐数

🔥❤️编写一个算法来判断一个数 n 是不是快乐数。如果 n 是快乐数就返回 true;不是,则返回 false。

2024-07-05 15:49:38 443 1

原创 【高性能服务器】多进程并发模型

🔥❤️对于常见的C/S模型,一个服务端通常需要服务多个客户端。如果使用单行的处理模型,当新的客户端请求服务端的服务时,就必须等待比它先到的客户端的请求全部完成。因此引入多进程并发服务器模型。多进程并发服务器模型的简单流程图如下所示。父进程创建一个套接字,然后与自己的IP地址、端口号进行绑定。之后调用开始监听来自客户端的敲门,当有客户端来敲门时,accept()接收客户端的连接并创建一个新套接字用于与客户端通信。

2024-07-02 10:41:16 1357 29

原创 【力扣】赎金信

🔥❤️​给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true;否则返回 false。magazine 中的每个字符只能在 ransomNote 中使用一次。

2024-07-02 10:33:18 583 5

原创 【力扣】最长连续序列

🔥❤️​给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n)的算法解决此问题。

2024-07-02 10:32:23 394 1

原创 【高性能服务器】多线程并发模型

🔥❤️在子进程,关闭从父进程中复制下来监听套接字,这个套接字在子进程中没有用了,纯属浪费资源,之后再进行与客户端的通信。而同一进程的所有线程共享相同的内存空间,线程数据共享和通信更加方便,创建和管理线程的资源消耗较少,尤其是内存开销较小。对于常见的C/S模型,一个服务端通常需要服务多个客户端。如果使用单行的处理模型,当新的客户端请求服务端的服务时,就必须等待比它先到的客户端的请求全部完成。在多进程+多线程代码的基础上,将进行accept的进程修改为创建的线程工作,socket通信的功能放在线程工作函数内。

2024-07-02 10:25:55 1200 9

原创 【高性能服务器】单进程服务器

🔥❤️​处理流程:1、客户端发送请求2、服务端处理请求3、服务端发送响应4、客户端接收响应

2024-06-29 10:06:49 1141 14

原创 【高性能服务器】服务器概述

🔥❤️服务器是典型的后台服务软件,可以为客户端提供数据和业务支持,服务器可以帮助用户缓存数据(个人信息,账号信息,用户使用数据和配置都可以在云端存储)CS架构(client客户端,server服务端)传输层协议为包裹的TCP或UDP,业务编号、协议划分都是自定义的BS架构(Browser浏览器,Web服务器模型)协议固定使用HTTP or HTTPS超文本传输协议。

2024-06-29 10:01:22 835

原创 【力扣】两个数组的交集Ⅱ

🔥❤️给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

2024-06-29 09:54:46 261

原创 【力扣】两个数组的交集

🔥❤️给定两个数组 nums1 和 nums2 ,返回它们的 交集。输出结果中的每个元素一定是的。我们可以。

2024-06-29 09:53:41 318 1

原创 【力扣】有效的字母异位词

🔥❤️给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。

2024-06-27 21:32:59 514 9

原创 【Linux】Linux下使用套接字进行网络编程

🔥❤️在自定义的头文件中重新声明一个函数,函数名与接口函数不同,返回值、参数均与接口函数相同。在相应的源文件中定义我们的函数,将逻辑判断的过程放在函数中。这样在调用函数时就省去大量的if else判断int# endifint# endifintprotocol);

2024-06-27 21:30:59 1271 12

原创 【Linux】锁|死锁|生产者消费者模型

🔥❤️​​互斥锁可以避免多线程同时访问资源,避免资源异常,结果异常。在读写全局数据时加上锁,读写完成后解锁。pthread_mutex_t lock 互斥锁的数据类型

2024-06-26 21:41:37 1183 10

原创 【Linux】线程Thread

🔥❤️线程是进程中的一个执行单元经典的并发模型,多进程模型,占用大量的内存开销,庞大的进程间调度开销,提供一种开销更小,更轻量级的并发解决方案,多线程技术。线程在进程中,与进程共享资源和数据,进程是容器,线程是执行单元,进程退出可能导致所有线程退出。​每个进程中都有一个主控线程,还有其他的普通线程,操作系统会给进程分配需要的内存单元。​不支持线程技术的操作系统可以忽略线程概念,进程是调度单位。多线程操作系统下,进程是内存管理单位,线程才是唯一的调度单元。

2024-06-26 21:27:59 1177 2

原创 【操作系统】信号处理与阻塞函数|时序竞态问题

🔥❤️​阻塞函数处于等待状态,等待系统通知或事件消息,如果接收到信号,信号处理函数会中断阻塞函数的执行。这可能导致阻塞函数提前返回。

2024-06-25 18:24:15 1188 4

原创 【Linux】使用信号进行进程间通信

🔥❤️父进程屏蔽SIGUSR1,然后将这个屏蔽集继承给子进程,子进程创建后默认屏蔽SIGUSR1,而后子进程完成信号捕捉。捕捉设定完毕,解除对SIGUSR1的屏蔽。这样可以避免子进程还未捕捉完成,就被先抵达的信号杀死。函数是一个用于向指定进程发送信号的函数,并附带一个额外的整数或指针值。提供了一个更高级的接口,可以携带附加数据,从而实现更复杂的进程间通信。结构体用于绑定捕捉函数,可以绑定的捕捉函数的原型取决于结构体中的。联合体,可以包含一个整数或一个指针值。函数可以携带数据进行传递,整型或者指针,取决于。

2024-06-25 18:12:28 435

原创 【力扣】盛最多水的容器

🔥❤️​​给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。​。

2024-06-23 19:17:23 566 2

原创 【操作系统】信号Signal超详解|捕捉函数

🔥❤️内核层与用户层就是不同级别的CPU访问权限。可以参考 Intel单核处理器的特权级别(Privilege Levels),也称为保护环(Protection Rings)。这种模式在操作系统中也存在,用于管理和限制不同层次的软件对硬件资源的访问权限。防止低权限的代码(如用户进程)直接访问高权限的资源(如操作系统内核),减少系统被恶意攻击。Level 0(环0)特权级别:最高级别的CPU权限,内核层(Kernel Mode)。访问权限:可以访问所有的硬件资源和执行所有的CPU指令。

2024-06-23 18:58:27 1181 8

原创 【操作系统】进程组Group|进程会话Session

🔥❤️一个进程组一般由一个组长和若干组员组成。终端进程被创建,默认就是进程组的组长进程(系统会分配一个进程组)。组长进程的唯一标志:组id==进程id

2024-06-21 13:57:50 548

原创 【操作系统】MMAP内存映射|零拷贝

🔥❤️MMAP:将文件映射到进程的用户空间,使得进程之间可以直接通过内存访问文件内容,从而实现文件内容的共享,而不需要通过传统的读写方式来操作。适用于大型数据的共享和持久化。使用mmap完成进程间的通信,也是确定通信方向,一个负责编辑修改映射内存,一个负责打印映射内存数据,不要让两端同时修改访问映射内存,会出现数据异常。私有映射:拷贝映射,将映射文件的数据拷贝一份到映射内存,两份数据独立无关联。

2024-06-20 14:59:01 1175 6

原创 【力扣】岛屿数量

🔥❤️给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

2024-06-20 14:55:48 234

原创 【力扣】所有可能的路径

🔥❤️给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

2024-06-19 19:59:02 390 6

原创 【操作系统】pipe&mkfifo|管道详解

🔥❤️在进程的内核块创建管道缓冲区,由循环队列(circular buffer)实现。遵循先进先出,具有一定的暂存能力。管道缓冲区的大小是4k,老版本Ubuntu的管道大小都是64k管道通过pipe函数创建的读写文件描述符实现向管道写入和读取数据。

2024-06-19 11:27:59 1258

原创 【操作系统】进程间通信IPC

🔥❤️进程间通信(Inter-Process Communication)的简写是IPC,可以利用这种技术完成多个进程间的数据传递,信息收发。

2024-06-19 11:20:22 882 1

原创 【操作系统】多进程拷贝|进程重载

🔥❤️多进程模式下,如果某个进程失败,只需重新启动该进程或重新分配任务,而不必重新开始整个文件拷贝,提高了拷贝任务的健壮性。:通过将文件拷贝任务分散到多个进程,可以减小单个进程的负载,使系统在执行大文件拷贝时仍能保持较好的响应性。:在多进程环境下,进程在时间片内与CPU进行交互,时间片用完时进程会被中断,等待下一次CPU使用权限。:通过多进程处理,可以更高效地利用系统资源(CPU、内存),减少大文件拷贝任务的完成时间。在需要同时执行多个文件拷贝任务的场景,多进程可以同时处理多个任务,提高整体处理效率。

2024-06-18 16:00:47 1027 1

原创 【力扣】从前序与中序遍历序列构造二叉树

🔥❤️给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的, inorder 是同一棵树的,请构造二叉树并返回其根节点。

2024-06-18 09:52:39 475 2

原创 【力扣】重排链表

🔥❤️给定一个单链表L的头节点head,单链表L表示为:请将其重新排列后变为:不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。[1,4,2,3]

2024-06-17 23:21:09 746 2

原创 【力扣】二叉树的右视图

给定一个二叉树的root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2024-06-17 23:05:08 358 2

原创 【Linux】僵尸进程|wait&waitpid函数详解

🔥❤️僵尸进程(Zombie Process)是指一个已经完成执行(终止)的子进程,在父进程没有调用wait()或waitpid()来获取子进程的终止状态之前,该子进程的进程描述符仍然存在于系统中的状态。

2024-06-17 17:40:34 935 6

原创 【Linux】execl函数详解|进程重载

🔥❤️execl函数用于执行一个新的程序,为一个进程的0-3G用户空间进行重载。执行一个指定的可执行文件,来替代当前进程,也就是说,它会加载一个新的程序映像并运行它,取代当前进程。

2024-06-17 12:39:40 735

原创 【力扣】二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(

2024-06-17 11:38:22 338

原创 【Linux】fork函数详解|多进程

🔥❤️fork()函数用于创建一个新的进程,该进程称为子进程。原有的进程称为父进程。子进程是父进程的副本,但是它们有不同的进程ID(PID)。默认情况下所有进程都有父进程,除了init进程,init是系统启动初始化首个服务进程,所有系统下的进程都是它的子集fork()fork()fork()我们写一段demo程序,发现会输出两次Running。fork()函数被调用一次,导致当前进程(父进程)被复制出一个新的进程(子进程)。子进程会复制父进程的地址空间、寄存器状态,包括父进程的输出缓冲区。

2024-06-16 11:55:03 1254 2

空空如也

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

TA关注的人

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