自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高并发内存池

2.central cache 中心缓存是所有线程共享 thread cache是按需从central cache中获取的对象 central cache合适的时机回收thread cache中的对象 避免一个线程占有太多资源。thread cache是哈希桶结构,每个同桶是一个按桶位置映射大小的内存块对象的自由链表,每个线程都会有一个thread cache对象,这样每个线程在这里获取对象和释放对象是无锁的。每次对象的对齐值越大,单次内碎片可能越大,但size_class可能越少,查找越快。

2025-11-28 14:12:13 114

原创 线程概念与控制

隐藏的损耗是上下文的切换会扰乱处理器的缓存机制,一旦去切换上下文,处理器中所有已经缓存的内存地址作废,改变虚拟内存空间时,TLB会被全部刷新,但是线程的切换中不会这样。如果是硬缺页错误,此时物理内存中没有对应的物理页,需要CPu打开磁盘设备读取到物理内存中,再让MMU建立虚拟地址和物理地址的映射。如果是软缺页错误,此时物理内存中存在对应物理页,但是可能是其他进程调入的,发生却也异常的进程不知道。线程切换时虚拟内存空间仍然是相同的,进程切换是不同的,这种损耗是将寄存器中的内容切换出。线程具有独立的上下文。

2025-11-07 23:31:25 159

原创 动态规划算法题总结

for循环到i,dp[i]等于num[i]与dp[i-1]+num[i]的最大值。维护一个ret作为返回值 在每次更新dp[i]时实时更新。维护一个dp[i]表示包含i位置的最大连续子数组和,

2025-11-04 16:16:02 108

原创 Linux进程信号

volatile 的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值。外设就绪时 向中断控制器发起中断 中断控制器通知cpu cpu得知中断后获取中断号 cpu保护现场。根据中断号 执行中断处理例程 执行中断方法 执行完毕后恢复现场 处理完毕中断 继续之前的工作。如果信号的处理动作是自定义的信号处理函数,则回到用户模式,执行信号处理函数;键盘产生信号 ctrl+c给目标进程发送信号,很多信号的处理动作是终止。a.合适的时候处理信号 进程从内核态,返回到用户态的时候。

2025-10-31 13:24:10 192

原创 贪心算法题总结

对应的原数比较 nums1当前元素x大于index[left]索引的数则 位置就index[left] 若小于则把x放到index[right]的位置。先把数字转化为字符串 然后遍历找到第一个不满足递增的数字 把它前面的一个数字减一 再把后面的数字全部置成9。动态规划可以给出一个on2的做法 dp[i]=dp[k]+1 if(k+nums[k]>i)先把nums1排序 再把nums2的索引按照nums2索引的元素的大小排序。贪心 碰到I就插入当前最小的数 碰到D就插当前最大的数。

2025-10-26 16:06:15 250

原创 进程间通信方案

写管道时,读端全部关闭,进程异常终止,信号为SIGPIPE(管道破裂)。因为我们在创建多个子进程和管道的时候 子进程会拷贝父进程的文件描述符表。写管道时,如果管道已满,write阻塞等待。在内核中,共享内存在创建的时候大小必须是 4kb的整数倍。写管道时,如果管道未满,write返回实际写入的字节数。以后每个继承的父进程都会拷贝 指向之前管道的写端。2.写快,读慢 满了的时候,写就要阻塞等待·管道中无数据,但写端没有关闭,read阻塞等待。管道中有数据,read返回实际读取到的字节数。

2025-10-25 15:57:47 401

原创 695 岛屿的最大面积

我的问题在哪 我的问题在于把path当作子树的深度 其实这是一片区域 需要递归所有子树累加 我这个只能往一条路走然后又变成0了。

2025-10-23 22:11:11 105

原创 79.单词搜索

aaa代码批发

2025-10-21 16:30:00 205

原创 库制作与原理小总结

动态链接就是把链接的整个过程推迟到了程序加载的时候,运行程序时,操作系统会首先将程序的数据代码连同它用到的一系列动态库先加载到内存,其中每个动态库的加载地址都是不固定的,操作系统会根据当前地址空间使用情况动态分配一段内存。一个可执行程序可能用到许多的库,有静有动,我们的编译默认是动态链接库,只有找不到动态.so的时候才会采用同名静态库,我们也可以用gcc的-static强转设置链接静态库。库是写好的现有的,成熟的,可以复用的代码,库的本质是把很多.o文件打包。静态链接 就是把库中的.o合并。

2025-10-18 16:22:38 179

原创 Ext文件系统小总结

存放文件系统本身的结构信息,描述整个分区的文件系统信息 主要有block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载时间,最近一次写入数据时间,最近一次检验磁盘的时间。块组描述符表,描述块组属性信息,整个分区分为多少个块组就有多少个块描述符,描述该块组中哪里开始是inode Table,哪里开始是Data Blocks,空闲的inode和数据块还有多少个,块描述符在每个块组的开头都有一份拷贝。软链接文件的内容非常特殊,它只存储了目标文件的路径。

2025-10-17 16:45:47 126

原创 494目标和

因为如果过程vector<string>作为参数的话 每一次都要创建一个vector。什么时候作为全局变量 什么时候作为参数。当需要记录过程时建议作为全局变量。当只是计算结果时建议传参。

2025-10-14 17:18:38 170

原创 77.组合

所以我们dfs的时候从pos位置开始递归。组合里面(1,2)和(2,1)是一样的。这样就永远不会递归到之前重复的。下一层应当是pos+1。

2025-10-14 16:38:04 67

原创 17电话号码的字母组合

vector<string>搞定。开始先打个表 后面正常做就行。

2025-10-13 23:19:07 73

原创 1863找出子集的异或和

恢复现场就是利用异或的特性把自己再异或一次。和找子集那一题差不多。

2025-10-13 17:29:11 190

原创 47全排列Ⅱ

就是在进行dfs时 如果发现i位置数字 前面一个相同的已经被遍历过了就跳过。注意此时i-1位置的数字的标记数组为0 因为已经递归到上一层。和全排列一差不多 但要进行剪枝。

2025-10-13 16:21:28 163

原创 leetcode78子集

主要是理解一下恢复现场的时机 建立一颗树 轮流对一个值选与不选 所有的情况都在叶子节点。然后开始主逻辑 选与不选 选就加上 然后dfs下一个位置 然后恢复现场。为什么在这里恢复现场 因为这里已经递归完选的情况了 要回去考虑不选了。进入dfs就可以判断一下是否遍历到最后一个位置了。不选就直接下一个位置。

2025-10-12 17:31:17 389

原创 对库的理解

然后调用_libc_start_main 进行一些额外的初始化操作。进行动态链接 调用动态链接器的代码来解析和加载程序依赖的动态库。那么所有seg 所有函数 变量编址起始偏移量都从0开始。一个可执行程序 如果没有被加载到内存中 它也有地址。动态连接实际上将链接的过程推迟到了程序加载的时候。程序刚开始运行时 其实先去_start。该函数会先设置堆栈 然后初始化数据段。所有的可执行程序 就是一个seg。动态库如何与可执行程序关联。然后上者才调用main。

2025-09-23 10:05:49 110

原创 leetcode493翻转对

当nums[cur1]>2*nums[cur2]时 则nums[cur1]>所有nums[cur2]以后的数的两倍。此时结果ret数量=左数组翻转对+右数组翻转对+一左一右数组合翻转对。当nums[cur1]<=2*nums[cur2]时。双指针 左数组cur1 右数组cur2。则ret+=right-cur2+1。以左指针为主往后遍历 与右指针比较。同时要维护一个临时数组进行归并排序。一边归并排序一边计算逆序对个数。递归地将数组一分为二。

2025-09-18 16:10:34 187

原创 leetcode143重排链表

先把链表一分为二 快慢指针 快指针一下移两步 慢指针一下移一步 快指针到终点时慢指针刚好到一半。再把第二个链表逆序 定义一个前驱 把每个节点都头插在这个前驱后面。再合并两个链表 把第二个链表插到第一个里面去。

2025-09-14 10:11:25 144

原创 数组的逆序对个数

【代码】数组的逆序对个数。

2025-09-09 20:34:14 92

原创 一切皆文件

如果不开辟对文件操作的缓冲区 直接通过系统调用来对磁盘操作 那么每次对文件进行一次读写时 都需要使用读写系统调用来处理此操作。linux中 进程 磁盘 显示器 键盘这些硬件设备也被抽象成了文件。缓冲区 在内存空间中预留了一定的存储空间 用来缓冲输入或输出的数据。当用户强制刷新 或刷新条件满足 或进程退出时 会交给操作系统。printf等函数是把数据写入c标准对应的缓冲区里。缓冲区就减少了系统调用的次数 增加了效率。1 立即刷新 无缓冲 写透模式。

2025-09-09 20:33:42 118

原创 文件描述符

这样就会让fgets从我们的文件中读取而不是键盘。oldfd为源 newfd为复制到的目标。重定向 更改文件,描述符表的指针指向。所有对文件的操作都是基于文件描述符。3及以后为新打开文件的文件描述符。

2025-09-08 22:29:59 79

原创 我的编程新入门

高考前,我并没有想到自己会踏进这样一个专业,在毕业前一行代码都没有敲过的我,在大一这年成为了一个计算机专业的学生。我并不知道这个选择会怎样变幻,但在这几个月大生活中,我感受到了编程的些许情缘。我也曾向人请教过关于生涯的规划,也给自己预设了很多目标,为自己的将来设立了许多目的地,但我想现在咬定方向可能为时过早,在这个变迁的时代,我想应该要一步三算,也要善于变换。现在我想编程之于我,是一项必备的技能,即是技能,就应该尽量求精求能,我也会尽量每天都写代码,尽量日日进步。

2023-12-08 19:19:03 379

空空如也

空空如也

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

TA关注的人

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