自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

许挂挂的博客

客官~欢迎光临

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

原创 4.进程相关 2

使用kill -l就可以看到所有的信号前 31 个为常规信号,其余为实时信号只看红色部分-9 SIGKILLSIGCHLD:子进程结束时,父进程会收到这个信号下图中的 Core 文件是指我们在终止进程时对于中止进程保存的相关信息man 7 signal // 查看信号指令可以发现有的信号用三个数字表示,这是因为不同的系统架构造成的,我们在使用这些信号时选择中间的数字即可SIGKILL and SIGSTOP 不能被捕捉,不能被阻塞,也不能被忽略。

2024-04-10 22:31:06 439

原创 4.进程相关

进程需要资源:CPU ,内存进程是一个抽象定义:它是一系列资源的集合,并不像程序是真真正正存在的正是因为原函数的虚拟内存会被销毁,所以需要创建一个子进程用于执行调用函数并且最后子进程不会再返回到父进程当中1.解释说明父进程已经运行完,但是子进程还没运行完,父进程没有办法回收子进程资源,init 进程就会回收孤儿进程 ,init 的 ppid 为 1。孤儿进程没有什么危害2.代码// 首先创建一个程序,在程序中创建进程,创建的进程会执行这个程序// 创建一个新的进程// 判断当前是父进程还是子进程。

2024-04-10 22:19:22 657

原创 3.C++ Make

一个工程中有很多文件,文件之间都是相辅相成有着编译的先后顺序,但是如果自己手动根据编译顺序编译文件造成速度非常慢。Makefile 是”自动化编译“,只需一个 make 指令系统就会根据编译顺序帮自己编译文件。

2024-04-08 22:34:07 709

原创 2.动态库与静态库

库文件是计算机上的一类文件,可以将库文件看做是一种代码仓库。它提供给使用者一些可以直接拿来用的变量,函数或类。库是一种特殊的程序,但是库是不能单独运行的。库文件有两种:静态库和动态库静态库: GCC进行链接时,会把静态库中代码打包到可执行程序中。

2024-04-08 21:58:56 743

原创 1.C++编译过程

(1)安装 gcc其中 gcc 用于编译 C ,g++ 用于编译 C++版本要 >4.8.5 这样才能使用 C++11 的特性(2) 使用 g++ 编译代码首先现在对应目录下编写一个 c++ 程序,如:test.cpp,然后执行下面的命令进行编译其中 -o 代表:生成可执行目标文件test.out 是用户自定义的可执行文件名称,在 linux 下是 .out 在 windows 中是 .exe(3)运行可执行文件不能直接敲指令 test.out ,要在前面加 ./test.out。

2024-04-08 21:57:11 406

原创 RAII 与智能指针

1.概念Resource Acquisition Is Initialization 资源获取即初始化。一般分为 3 步,当我们在main函数中声明一个局部对象的时候,会自动调用构造函数进行对象的初始化,当整个main函数执行完成后,自动调用析构函数来销毁对象,整个过程无需人工介入,由操作系统自动完成;2.如何使用 raii。

2024-03-23 18:17:28 890

原创 如何搭建一个个人私服 Git

如何搭建一个个人私服 Git服务器的环境是 ubuntu 20.4 ,我是使用个人笔记本自带的终端进行搭建的。其实 git 私服就是在服务器中创建了一个名字叫 git 的用户,然后我们使用 git 指令让本机和服务器进行文件传输,git 指令可以帮助我们进行版本控制1.首次登录阿里云一开始时我们的服务器密码是阿里云随机生成的用起来比较麻烦,所以可以直接重置密码。2.使用 ssh 登录ssh root@IP地址3.更改主机名@ 后面显示的就是 hostname,有点长root@iZuf6

2022-02-12 23:25:42 1826

原创 如何配置vim

vim 点击 l 可以查看错误提示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-icJkxiu6-1644679465332)(/Users/xuguagua/Documents/typora_image/image-20211025184858351.png)]在下载时发现上图的错,大概是因为代理设置出错,我按照 https://blog.csdn.net/robotkang/article/details/118978898https://blog.csdn.ne

2022-02-12 23:25:04 1978

原创 12.排序

1.排序理论[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iw9JbiQc-1644592461318)(/Users/xuguagua/Library/Application Support/typora-user-images/image-20220112160343390.png)]题目:2152.八大排序算法2.1_快速排序2.1.1 算法描述[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUtrPpcG-164459246

2022-02-12 23:16:26 203

原创 11.图论

1.基础知识对于图来说比较重要的就是图的深度遍历和图的广度遍历,下面是这两种遍历的基本思想1.深度遍历:这里可以用深度搜索遍历的原因是,深度优先搜索使用的数据结构是栈。我们先将出度为 0 的节点放入,而出度为 0 的节点是比较高级的课程,基础的课程后入栈那么也就先出S1:记录节点之间的映射关系key:父节点;value:该父节点指向的相邻节点比如:在课程中基础课程指向高级课程。有一个数据结构存储节点之间的关系,key :课程 ; value :该课程对应的高级课程其中图中的「白色」「黄色」「绿

2022-02-11 23:14:16 807

原创 10.动态规划

1.动态规划模板1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组1.1 动态规划和回溯的区别什么时候用动态规划,什么时候用回溯:如果一个题的答案是一个值,E.g. 3,true or false ,则用动态规划如果题目中有让列出所有结果的可能性:回溯1.2 动态规划和谈心的区别DP 和贪心的区别:DP : y i = f(yi-1) 根据上一个状态推断贪心:yi = f(yi) 通用的式子2.LeetC

2022-02-11 23:13:44 181

原创 9.贪心算法

2.LeetCode 相关题目2.1_455 分发饼干2.1.1 算法描述先对小孩和饼干数组记性排序,保证可以一个个的判断小孩:[1,2]饼干:[1,2,3]每次将最小的那一块饼干分给胃口最小的孩子,如果饼干足够则当前小孩满足,如果饼干不够则当前孩子不动,继续向前判断更大的那一块饼干是否满足单步解决方案:将当前最小的那块饼干给胃口最小的那个人2.1.2 C++ 代码实现class Solution {public: int findContentChildren(vector&lt

2022-02-11 23:13:05 404

原创 8.回溯算法

1.回溯法模板1.回溯函数模板返回值以及参数回溯函数名:backtracking返回值:一般为 void1.参数:难以确定,需要什么参数就填什么参数2.回溯函数终止条件3.回溯搜索的遍历过程模板void backtracking(参数) { // 参数中要有一个值控制树的深度 if (终止条件) { // 这里控制 for 循环是几重 for 循环,并返回上一层 for 循环 存放结果; return; } for (选择:本层集合

2022-02-11 23:12:30 596

原创 7.树相关

1.树1.1树的定义树是一种非线性数据结构,在某些时候非线性结构比线性结构处理数据时要快的多。1.2 树的应用场景1.2.1 Linux/Unix 文件夹与文件1.2.2 继承下图用树结构模拟的各类之间的继承关系1.2.3 树的抽象数据类型1.二叉树的定义struct TreeNode{ int val; TreeNode * left; TreeNode *right; TreeNode(int x):val(x),left(NULL),right(

2022-02-11 23:11:51 132

原创 6.栈和队列

1.栈 Stack1.1 栈的定义栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。1.2 栈的应用1.2.1括号和 HTML 匹配

2022-02-11 23:11:21 267

原创 5.双指针

1.对撞指针在头部和尾部分别设置一个指针,一个指针向后移动一个指针向前移动,如果指针对撞则停止循环1.1.LeetCode 相关习题2.LeetCode 题目2.1_27移除元素2.1.1 算法描述这个题是比较典型的快慢指针,一个赋值指针 i 一个赋值指针 j ,j 是不断向前移动的,只有当 j 满足某个条件后将 nums[j] 的值赋给 nums[i] i 才会移动2.1.2 代码实现class Solution { public: int removeElement(vecto

2022-02-11 23:10:50 7294

原创 4.字符串

1.字符串2.LeetCode 相关题目2.1_344反转字符串LeetCode题目链接2.1.1算法描述使用双指针翻转字符串可以与翻转链表进行对比学习2.1.2 Python 代码实现class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """

2022-02-11 23:10:18 525

原创 3.哈希表

1.哈希表基础 Hash Table1.映射映射的五大核心方法1.1 Hash Table 的定义哈希表是根据关键码的值而直接进行访问的数据结构。哈希表也可以被称作是散列表哈希表的底层实现是一个数组,哈希表是一个特殊的数组1.1.1 Hash Tabel 的映射在一个字典中,有了 Key 和 value 的值可以形成一个映射,可以先考虑一种有限制的设置,在这个设置中有 n 个元组,想要将这 n 个映射,就要定义一个比元组个数还要大的映射表用来表示这个映射,如下图所示:在上图的情况下,将键值

2022-02-11 23:09:47 1119

原创 2.链表相关

1.链表基础1.1数组和链表的优缺点数组缺点:①动态数组的长度也有可能超过实际存储数组元素所需的长度②在实时操作系统中对操作的摊销边界是不可接受的③一个数组内部执行插入和删除操作的代价太高链表缺点:没有办法随机存取1.2 链表定义链表是一种通过指针串联在一起的线性结构,每一个节点又有两部分组成,一个是数据域一个是指针域,最后一个指针域指向 Null1.3 链表的类型1.3.1 单链表定义:由多个节点集合共同构成一个线性序列,每个节点存储一个对象的引用,这个引用指向序列中的一个元素,即

2022-02-11 23:09:12 279

原创 1.数组相关

1.数组理论基础1.1 数组定义数组定义:一组相关变量能够一个接一个地存储在计算机存储器的一块连续区间内。我们将这样的表示法称为数组 array2.LeetCode 相关题目2.1_704二分查找LeetCode 链接二分模板2.1.1 算法思路二分查找思路:在 left+right 正常情况下 mid 是会偏左,所以如果想让 mid 偏右必须要进行 +1模板1:二分查找 mid 选取哪个值比较关键。如果说int mid = (left+right)/2; 那么分成的区间就是 [

2022-02-10 19:44:41 6133

原创 8.网络编程

1.字节序代码保存在 lesson31  byteorder.c2.代码(1) 定义一个联合变量union{ short value; char bytes[sizeof(short)]; // 将 short 转换为 byte 的容器 }test;(2)定义一个 short 类型的变量test.value = 0x0102; // 定义一个包含两个字节的 value ;01 是一个字节,02 是一个字节(3)将两个字节保存在 char 容器中判断系统是

2022-02-10 19:35:34 696

原创 7.GDB与文件IO

1.GDB什么是 GDB 调试1.1 GDB 准备工作gdb 是一个 shell 指令,必须带有 -g 的参数,程序才将调试信息添加到文件中g++ -g a.cpp -o a.out // 先为文件添加调试信息打开所有的 warning 选项g++ -g -Wall main.cpp -o main如果文件与文件之间有引用如何编译:g++ -g 1.cpp 2.cpp -o main 开始调试gdb a.out // gdb + 可执行程序-g 的作用是在可执行文件中加入源码

2022-02-10 19:35:08 760

原创 6.线程相关

1.线程1.1 线程的基本概念1.1.1 线程的定义1.线程的基本概念线程概念(process):线程是进程的⼀个实体,也是 CPU 调度和分派的基本单位,它是⽐进程更⼩的能独⽴运⾏的基本单位,是一种轻量级的进程。同一程序中的所有线程会独立的执行相同的程序,共享一份内存区域(数据段,未初始化的数据段,堆内存段)。2.Linux 指令查看当前线程查看某个进程开启的所有线程ps -Lf pid [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ANK2MIVW-1

2022-02-10 19:34:24 273

原创 5.进程相关3

10.共享内存10.1 基本概念这种进程之前通信的速度更快,因为是直接操作内存,内核的参与度更少。​ 如果是管道:先将要传输的数据从管道中拷贝到内核区,然后内核1将内核中的数据发送给内核2。内核2再将数据拷贝到进程2的用户区中所以处理速度比较慢。并且可以实现多个进程之间的内存共享10.2 共享内存调用步骤1.创建共享内存并获得标识符2.将这块共享内存添加到调用进程的虚拟内存中3.得到这个共享内存在虚拟内存中的起始位置////// 开始使用共享内存,直到使用完毕4.将共享内存与进程

2022-02-10 19:33:55 315

原创 4.进程相关2

8.内存映射8.1 内存映射相关定义创建一个文件,将保存在磁盘中的文件映射到内存中,后期两个进程之间对内存中的数据进行操作,大大减少了访问磁盘的时间,也是一种最快的 IPC ,因为进程之间可以直接对内存进行存取8.2 内存映射相关的系统调用代码地址:lesson258.2.1 mmap & munmap 函数–内存的映射与释放1.APImmap : 将一个文件映射到内存中这个函数返回的是内存映射出来的内存首地址munmap : 解除一个文件和内存的映射内存映射和管道不一样,

2022-02-10 19:32:31 302

原创 3.进程相关

1.关于进程和程序的相关定义1.1 程序的相关定义程序通俗来讲就是我们的源代码文件,然后里面还包含了其他的文件信息程序入口地址:也就是 main 函数的位置1.2 进程的相关定义进程需要资源:CPU ,内存进程是一个抽象定义:它是一系列资源的集合,并不像程序是真真正正存在的1.3 单道多道程序设计 需要注意:一个 CPU 一次只能执行一个程序,只不过因为CPU 切换进程时的速度非常快所以我们会以为它执行了多个程序1.4 时间片进程调度策略及算法6 种进程调度算法先来先服

2022-02-10 19:31:41 739

原创 2.Makefile

1.Makefile1.1 什么是 Makefile一个工程中有很多文件,文件之间都是相辅相成有着编译的先后顺序,但是如果自己手动根据编译顺序编译文件造成速度非常慢。Makefile 是”自动化编译“,只需一个 make 指令系统就会根据编译顺序帮自己编译文件1.2 Makefile 文件命名规则1.3 代码演示1.生成一个 Makefile 文件vim Makefile2.将执行规则书写入 Makefile3.使用 make 编译 Makefile 文件sudo apt insta

2022-02-10 18:32:16 1170

原创 1.编译过程与动态库静态库的实现

文章目录1.Linux 如何安装 C++ 编译环境2.编程语言的发展2.1 编程语言的发展2.2 GCC 工作流程2.3 gcc 编译选项代码演示2.库的制作2.1 如何生成静态库2.1.1 书写相关函数2.1.1 静态库的命名规则2.1.2 静态库的制作2.2 动态库的制作2.2.1 文件命名规则2.2.2 动态库的制作2.2.3 如何让程序找到共享库2.2.4 在环境变量中声明动态库2.2.5 在文件列表中添加 PATH2.3 动态库和静态库的区别2.3.1 制作流程上的差别2.3.2 静态库的优缺点

2022-02-10 18:30:34 816

原创 计算机组成原理---第四章 存储器(下)

高速缓冲存储器选择 > 努力

2020-01-22 15:35:22 2503 4

原创 计算机组成原理---第四章 存储器(中)

存储器(下)你做三四月的事,在八九月自有答案笔记框架:4.2.4 只读存储器 4.2.4 只读存储器1.掩模 ROM行列选择线交叉处有MOS管为 “1”行列选择线交叉处无MOS管为“0”MOS 管不可进行改变,只读2.PROM通过熔丝实现了一种一次性编程熔丝断开为“0”熔丝未断为“1”是一种破坏性的编程,只读3.EPROM 4.2.5 存储器与 CPU 的连...

2020-01-22 15:31:53 5698 4

原创 计算机组成原理---第四章 存储器(上)

存储器功不唐捐笔记框架:4.1概述4.1.1存储器分类4.1.2 存储器的层次结构1.存储器速度,容量和价位的关系没有那个存储器是可以同时满足这三个要求的这就形成了不同的存储结构之间相互组合最终组成一个存储系统层次结构2.存储系统层次结构(1)缓存-主存解决问题:CPU 与 主存 速度不匹配问题完成:硬件完成透明:透明(程序员不用知道内部如何实现)(1)主存-...

2020-01-18 16:36:28 10584 4

原创 计算机组成原理笔记---第二+三章 计算机的发展及应用+系统总线

水滴石穿的力量第二章计算机的发展及应用本章内容对于学习计算机组成原理来讲不是那么重要,所以下面放出我借鉴别的博主的笔记,与刘老师的授课内容差不多 连接地址笔记框架系统总线...

2020-01-18 16:34:16 788

原创 按字寻址按字节寻址的理解

在《计算机组成原理》P73 讲述的是主存中存储单元地址的分配,一开始看得我很是懵逼,下面就是我在查阅一些资料之后对他的理解1.内存的逻辑结构内存是由 一个个的存储单元构成的,一个存储单元里面呢可以存储一个二进制代码 如 00110110011111101,而这个单元里面存储的大小称为存储字长2.地址线地址线用于保存 CPU 所要处理的数值的地址一根地址线为其通电,通高电压代表 1,低电压...

2020-01-16 14:47:09 11082 9

原创 计算机组成原理笔记---第一章 计算机系统概论

计算机组成原理凡是决心取得胜利的人是永远不说不可能的 程序是怎么写出来的原来的程序都是在卡片上进行打孔,根据打孔的位置 CPU 进行处理执行相应的计算机指令。直到今天即使有很多高级语言 (如 Python ) 出现,但是 CPU 还只能识别 机器码 即 0,1...

2020-01-13 10:28:09 1326

原创 Android线程池的入门

JAVA线程池分为以下几种 - newCachedThreadPool - newFixedThreadPool - newSingleThreadExecutor - newScheduledThreadPool - 总结

2017-07-30 09:56:55 393

原创 屏幕适配

如何进行屏幕的适配

2017-07-29 10:47:07 666

原创 Gson的简单实用

这篇文章不剖析源码,不写每个方法的使用只写怎么在十分钟快速上手GsonGson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 我曾经写过一片如何使用FastJson接下来就写写如何简单的使用Gson

2017-06-13 23:32:53 255

原创 网络状态的判断

网络状态的判断有无网络移动网络,无线没有链接,正在连接,连接成功

2017-06-12 15:24:25 460

原创 OOM优化案例---优化图片内存大小

上一篇写了什么是OOM还有和OOM相关的一些概念,而这一篇就是OOM的一个案例 (视频讲解请前往慕课网)> 1.打开一个图片,查看图片所占内存> 2.在不影响显示效果的情况下将图片进行缩放,查看所占内存> 3.调整图片的清晰度,查看所占内存> 4.将图片进行部分显示,通过模拟手指滑动图片,显示不同的部分,查看内存占用

2017-06-11 11:44:22 370

原创 OOM问题的优化----初步认识

这篇博客我是根据慕课网视频的内容来写的OOM - Out of Memory,内存溢出(内存已经用完了)监测内存变化的方法强引用,软引用

2017-06-11 09:14:12 341

空空如也

空空如也

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

TA关注的人

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