自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 信号

需要处理的信号类型,

2025-08-16 19:08:45 4440 96

原创 进程间通信

进程间通信(interprocess communication)英文缩写,进程间通信是指,进程间进行数据传输,(多个进程共享同一份资源),(进程发送消息通知发生某中事件),(完全控制另一个进程)的机制。由于每个进程都有自己独立的地址空间,所以无法直接访问彼此内存。因此需要第三者来辅助进程间进行通信。常见的进程间通信方式有。

2025-08-04 21:21:14 2680 89

原创 飞算JavaAI编程插件:以AI之力赋能Java开发,让编码效率再升级

你是否希望自己敲代码的时候总有一位大佬在你背后帮你保驾护航。想象一下,当你对着Java编辑器敲代码时,身后站了位“隐形大神”——你刚敲出`for`,它就预判到你要遍历集合,自动补全带泛型的循环逻辑;你手滑把`equals`写成`==`,它秒弹提示框,附带正确用法和避坑说明;你对着一大段冗余代码犯愁,它轻轻一点就帮你精简成优雅的Lambda表达式,还贴心标注“这样改执行效率提升30%”。这就是飞算JavaAI编程插件。

2025-08-04 20:27:29 1305 24

原创 库制作与原理

库是写好的现有的成熟的可复用的代码。本质上说库是一种可执行代码的二进制形式,可以被载入内存执行。使得程序员在写程序时,不需要在从0开始的搭建工具,库就相当于工具库,为程序开发提供便捷。库分为两种:静态库动态库在不同版本中,我们可以通过不同的指令找到动静态库,所以库就是指定目录下的一个文件。静态库与动态库主要区别在于链接时机和程序的运行方式。下面我们来进行对比。

2025-07-22 15:17:10 2352 82

原创 基础 IO

我们首先来看C文件的读写操作。在这个程序中我们打开文件后一直while运行,这里的 fopen 只表明为 myfile ,我们通过另一个窗口输入可以观察到正在运行进程的信息。我们通过可以查看到当前进程 test 的运行pid,再通过 ls/proc/ 【进程id】 就可以查看到进程信息,其中 cwd 指明了当前的运行路劲。我们发现程序会记录下当前路径,

2025-07-10 18:12:54 2404 24

原创 文件系统----底层架构

在谈及文件的内核前,我们先来了解一下储存文件的硬件-----硬盘。

2025-07-10 18:12:33 2548 32

原创 进程控制

在 Linux 中 fork 可以在一个进程中创建一个新的进程。这个新进程称为子进程,原进程为父进程。使用前需要包含头文件。在调用 fork 函数时,。但当子进程或父进程运行时,对数据进行了修改进行了写入,此时系统将进行写时拷贝,重新给子进程或者父进程申请物理地址。fork 函数调用时父进程会返回子进程 pid (大于0),子进程会返回0。

2025-06-13 14:09:38 3518 35

原创 自主 Shell 命令行解释器

我们制作的目标是要求自制的命令行解释器能够处理普通命令,能够处理内建命令,理解本地变量,环境变量。我们的 shell 命令是由 bash 创建子进程来执行的,这样可以更好的保护操作系统。同理,我们在写命令解释器时,用 fork 子进程的方式来完成指令,父进程走主线,是一个比较合理的方式。如图这就是我们要实现的一个大体思路。那么在 shell 命令行中应当要包括哪些内容呢?我们需要下面这个循环过程,获取命令行,解析命令行,建立一个子进程,用execvp替换子进程,父进程等待子进程退出。

2025-06-13 14:09:20 2534 18

原创 Linux基础开发工具

什么是软件包管理器,类似于手机中的应用商店,在linux下我们可以通过软件包管理器,在linux下下载软件。通常安装一个程序需要下载编译它的源代码,最终得到可执行程序,而软件包管理器的作用就是储存别人软件开发者上传的源代码,我们只需要下载编译即可使用程序。软件通常存储在远程的软件包服务器中,我们通过自己的云服务器来申请下载请求下载文件,通常这些软件都是免费的。那么为什么开发者会无偿提供这些免费的软件给我们下载呢?这就涉及到操作系统的生态环境了。

2025-05-29 21:49:08 2071 20

原创 Linux进程概念

冯诺依曼体系结构是当代计算机的基本结构,它主要包括几个板块,输入设备,输出设备,存储器,运算器和控制器。下面是简略版的图解析:输入设备主要包含鼠标,键盘,话筒等主要进行数据的传输;存储器即内存用于将接受输入设备的数据,为数据进行排队后交给CPU处理,在CPU数据返回后再传给输出设备,因此内存是冯诺依曼体系结构最重要的部分;接着是CPU,运算器和控制器结合构成了CPU,运算器主要负责进行代码的逻辑运算和算数运算,控制器主要负责对代码进行控制;最后是输出设备,主要是显示器,喇叭等负责数据的输出。

2025-05-29 21:48:29 1502 32

原创 C++11特性

C++11是C++的第二个主要版本,从C++98起的重要更新,引入了大量更改,从C++11起C++规律的进行每3年更新一次。

2025-05-19 21:39:28 1575 22

原创 map与set封装

封装map和set一般分为6步:1.封装map与set2.普通迭代器3.const 迭代器4.insert返回值处理6.key不能修改的问题。

2025-05-19 21:37:16 972 32

原创 红黑树的模拟实现

红黑树相较于前文的AVL树相比而言,时间复杂度都是logn级别的,红黑树对平衡条件管理更加宽松,使得其调整的次数大大减少,通过红黑规则的巧妙布局,保持高效的操作性的同时也降低了平衡维护的复杂度,适用场景广。

2025-03-20 17:09:28 1946 72

原创 平衡树的模拟实现

elseelse//更新平衡因子//定义平衡因子左减右加else//更新结果break;//继续向上更新//旋转处理不平衡if (parent->_bf == 2 && cur->_bf == 1)//左单旋else if (parent->_bf == 2 && cur->_bf == -1)//右左双旋else if (parent->_bf == -2 && cur->_bf == 1)//左右双旋。

2025-03-18 17:53:55 1857 41

原创 stack,queue与deque

STL中的stac和queuek是通过容器适配器来实现的,并不是直接实现栈。那什么是容器适配器呢?举一个简单的例子,不同的插座需要不同的插头来连接,这时候我们用一个插座适配器,我们就不需要关心自己本身的插头,相当于加了一层中间层。在STL中stack和queue就像适配器一样,只是对其他容器的接口进行封装,例如stack和queue在STl中就是用deque进行封装。这里我的private内容是一个模板,用来传容器类型例如vector,list这样的。函数构造时会直接走private部分。

2025-03-07 11:16:37 539 47

原创 双指针与二分算法

从上文我们可以得知当我们需要进行暴力枚举并且在两层for循环中的指针不会回退时,我们可以采取此方法来优化算法。算法的模板大致为,首先对窗口进行初始化,创建一个窗口来维护数据,接下来将元素进窗口,用哈希表统计次数,判断当位置的值超过1时,窗口内子串不合法,此时left所指元素需要进行出窗口处理,相应哈希表值减减,最后判断结束更新窗口。

2025-03-07 11:16:14 1550 41

原创 list的模拟实现

本篇文章最关键的内容就是对于模板的复用,在面对代码相似度较高,实现功能类似的情况下,我们需要优先考虑模板的复用。list_node(const T& x = T())//模板有x时情况,_data(x){}T _data;template<class T,class Ref,class Ptr>//提供模板参数,为const类型提供模板参数,ref代替引用,ptr代替*,复用{}Self& operator++()//前置。

2025-03-01 10:14:58 4382 87

原创 前缀和与差分算法

当我们需要求一段区间的和时,可以使用前缀和的方法,对数组进行预处理能降低查找的复杂度。当我们需要对一段区间进行同时加减时,可以使用差分算法进行预处理来降低复杂度。

2025-03-01 10:14:45 1235 31

原创 Linux基础指令

创作不易,希望大家多多支持。

2025-02-22 13:54:31 5497 92

原创 Linux的权限

在Linux下有两种用户,超级用户(root)以及普通用户。超级用户拥有整个系统中的最高权利,可以对目录,文件等随意进行操作。而普通用户只能在自己的家目录下进行相关操作。超级用户的命令提示符是“#”,普通用户命令提示符是“若普通用户想要进行管理员权限的操作,可以使用 su root 的命令,然后输入超级用户口令就可以登陆到root用户。同理,若想切换到其他普通用户也可以 su 【用户名】。

2025-02-22 13:54:08 760 43

原创 Vector的模拟实现与迭代器失效问题

创作不易,希望大家多多支持!!!

2025-01-18 20:10:38 1755 80

原创 第k小(经典Top k问题)

有一个长度为n的数组,值为a[i],牛牛想找到数组中第k小的数。比如122346中,第3小的数就是2.牛牛觉得这个游戏太简单了,想加一点难度,现在牛牛有m个操作,每个操作有两种类型。1x1代表操作一,给数组中加一个元素x。22代表操作二,查询第k小的数。如果没有k个数就输出−1。

2025-01-18 20:07:37 726 71

原创 P3884 [JLOI2009] 二叉树问题

这一题考察到了dfs和bfs的使用,是一道综合性比较强的题,值得一刷。创作不易,希望大家多多支持!!!

2025-01-13 20:17:08 2414 59

原创 P1827 [USACO3.4] 美国血统 American Heritage

农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。

2025-01-13 20:16:21 570 52

原创 树的模拟实现

无论是顺序表实现还是链表思想实现,他们都有优缺点。优点在于不需要频繁的进行动态空间的开辟能减少运行的时间,缺点在于需要人为的对数据量进行判断以及缺少一些灵活性。所以说,这两种方法只适合于算法竞赛中,而工程类当中是不合适的。

2025-01-11 23:56:29 615 41

原创 DFS与BFS

无论是DFS还是BFS他们的时间复杂度空间复杂度都是O(n),对于这两种方法,我们都是在遍历树的基础上实现的。DFS运用的递归原型也可以理解为树型遍历,BFS使用队列的方式实现效率更高且更直观。

2025-01-11 23:55:48 1309 35

原创 操作符应用

我们常常能听见2进制,8进制,16进制这些讲法。他们都是数值的不同表达形式。根据不同的进制大小有着不同的权重比例。我们生活中常用的是10进制数,也就是逢10进1,由此推理至其他进制。例如2进制就是逢2进1。

2024-12-31 11:31:01 934 44

原创 cin/cout性能问题讨论和优化⽅法

在上面的两个案例中,我们发现虽然代码的逻辑是相同的,唯一的不同点在于scanf和cout的使用区别,一份超时一份ac,这是为什么呢?是否有可行的优化方法呢?

2024-12-27 13:56:27 1032 22

原创 P8763 [蓝桥杯 2021 国 ABC] 异或变换

小蓝有一个 01 串 s=s1​s2​s3​⋯sn​。以后每个时刻, 小蓝要对这个 01 串进行一次变换。每次变换的规则相同。对于 01 串 s=s1​s2​s3​⋯sn​, 变换后的 01 串 s′=s1′​s2′​s3′​⋯sn′​ 为:​s1′​=s1​其中 a⊕b 表示两个二进制的异或, 当 a 和 b 相同时结果为 0 , 当 a 和 b 不同时结果为 1。请问, 经过 t 次变换后的 01 串是什么?

2024-12-24 14:30:00 441 15

原创 P10425 [蓝桥杯 2024 省 B] R 格式

小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 00 的浮点数 d,可以用 R 格式的整数来表示。

2024-12-21 21:55:53 838 13

原创 P9422 [蓝桥杯 2023 国 B] 合并数列

小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 {�1,�2,⋯��}{a1​,a2​,⋯an​} 和 {�1,�2,⋯��}{b1​,b2​,⋯bm​}。两个数组的和相同。定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是原来两个数的和。小明想通过若干次合并操作将两个数组变成一模一样,即 �=�n=m 且对于任意下标 �i 满足 ��=��ai​=bi​。请计算至少需要多少次合并操作可以完成小明的目标。

2024-12-21 21:41:45 522 9

原创 P1002 [NOIP2002 普及组] 过河卒

棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A 点 (0,0)、B 点 (n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

2024-12-19 22:05:36 502 6

原创 P8795 [蓝桥杯 2022 国 A] 选素数

小蓝有一个数 x,每次操作小蓝会选择一个小于 x 的素数 p,然后在 x 成为 p 的倍数前不断将 x 加 1,(如果 x 一开始就是 p 的倍数则 x 不变)。小乔看到了小蓝进行了 2 次上述操作后得到的结果 n,他想知道 x 在一开始是多少。如果有多种可能,他想知道 x 一开始最小可以是多少,而如果不存在任何解,说明小乔看错了,此时请输出 −1。

2024-12-18 19:26:46 1862 17

原创 P8723 [蓝桥杯 2020 省 AB3] 乘法表

九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。给定 P,请输出 P 进制下的乘法表。

2024-12-17 16:09:36 887 5

原创 P8772 [蓝桥杯 2022 省 A] 求和

首先这题我们可以直接用两个for循环嵌套来控制两个变量来求值,但是这样做时间复杂度高。这里我们用到了一个前缀和差的方法。通过for循环变量第一个变量,用和差的方法的到第二个量,这样就只用了一次循环,大大减少了时间复杂度。需要注意的是,这题有时间限制开辟大数组时需要开在全局中(程序留给全局的空间大,而留给main函数内的空间少)。

2024-12-16 14:51:12 521 5

原创 P8716 [蓝桥杯 2020 省 AB2] 回文日期

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按yyyymmdd的格式写成一个 88 位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示20200202是“千年一遇” 的特殊日子。20211202即 2021 年 12 月 2 日。也有人表示20200202并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约 100100 年后就能遇到下一个ABABBABA21211212。

2024-12-16 14:39:05 551 1

原创 leetcode.最长回文子串

给你一个字符串s,找到s中最长的 回文子串。"bab""aba" 同样是符合题意的答案。

2024-12-12 18:33:07 390 4

原创 string类

因为我们使用了一个get函数,若频繁的调用函数会导致函数调用开销增大,主要体现在几个方面,一是程序执行流程的跳转,处理器需要将当前执行指令序列跳转到get函数所在的内存地址开始执行,这涉及到指令流水线的刷新和填充,会产生一定的时间延迟。size的大小为字符串中字符的个数(包含空格位),capacity的大小是最大能包含的字符个数,当size的个数大于capacity时,capacity会自动以1.5倍进行扩容。在底层上,会创建一个buff数组,若其大小小于buff的范围,则会储存在自己本身的上。

2024-12-12 15:32:09 1511 5

原创 leetcode.三步问题

三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。:n = 3:4: 有四种走法:n = 5:13。

2024-12-12 15:24:21 501 6

原创 new与delete操作内置类型

new与malloc类似,用于开辟空间。delete与free类似,用于释放空间。但new与delete的区别在于对于自定义类型他们使用时会调用构造和析构函数。new调用时()内是要初始化的值,【】内是要初始化的个数。当同时需要多个初始化时,则用{}包含各个初始化的值。在delete时开辟多个值的需要使用delete【】来调用析构函数。

2024-11-25 21:04:58 382 5

空空如也

空空如也

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

TA关注的人

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