面试常问的Linux之 I/O 复用 高效的I/O是指操作系统在进行输入输出(I/O)操作时,能够以最快的速度完成数据传输,同时减少CPU等其他资源的使用,提高系统的性能和效率。避免阻塞I/O:阻塞I/O会使得应用程序在等待I/O操作完成时一直处于等待状态,从而浪费CPU资源,降低系统性能。采用非阻塞I/O或异步I/O可以避免这种情况。减少上下文切换:I/O操作需要在用户空间和内核空间之间切换,这种切换需要消耗CPU资源。减少上下文切换可以提高I/O操作的效率。
不成功欢迎到评论区骂我的mysql for mac安装教程 主页上边栏有个download,点击后找到页面最下方,有个MySQL Community(GPL) Downloads链接,进入后会发现非常多的链接,仔细找到MySQL Community Server,如果是Mac芯片,则选择arm版本的dmg文件,如果是intel芯片,则选择x86版的dmg文件。,按住下箭头到光标不动后,按$,在按a,在回车,这时候输入在系统设置左边栏最下方的mysql里看到的Base Directory路径,再在这条路径后加上/bin,之后按esc,按冒号,按w,按q,按回车。
我的“第一篇”博客 一个爱好折腾到一半的理工男(折腾到一半是因为有时候会因为不太好找资源而放弃,如果有好的完整的参考资料,我还是比较能坚持下来),比如了解显示器的参数,屏幕显示的原理,苹果生态以及其他数码产品的原理,尝试写一些学校不教的语言(Lua、swift…),折腾过GFW原理和翻墙原理(虽然买不起贵的机场和没搭建过VPS),了解一些Wi-Fi和蓝牙等无线电通讯原理。其次还喜欢看看最新的科技产品,当然不太会第一批去尝鲜,因为我要理性消费。其实没钱。
Linux软硬链接和动静态库详解 软硬链接🔗软链接的建立显示出inode软链接就是一个普通文件,有自己独立的inode,类似于一个桌面上的快捷方式。保存的是指向所链接文件的路径。硬链接的建立硬链接拥有与链接文件相同的inode,没有自己独立的inode,类似C++的引用&(别名)。本质是在该目录的数据块中创建了硬链接名与inode的映射关系,并没有创建新文件。第三列数字代表的是硬链接数,可以发现普通文件也至少会有一个,是当前目录的数据块中存放了一组文件名与inode的映射关系。为什么目录硬链接数默认就是2呢?
Linux文件系统与基础IO 文件的宏观理解1⃣️文件在哪里呢?“狭义”上在磁盘,“广义”上一切皆文件。主要研究“狭义”,磁盘为外设,那么对文件的所有操作,本质都是对外设的输入输出,简称IO2⃣️文件是什么?空文件占不占用磁盘空间?依旧占用。文件 = 属性 + 内容所有的文件操作,无外乎就是两种操作,对属性和对内容。3⃣️从系统角度看内存文件操作代码-》可执行程序-〉从磁盘加载到内存-》变成进程对文件的操作,本质都是进程对文件的操作!C语言提供的对文件操作接口是用户层的,真正起作用的是系统调用接口一些c文件接口
进程控制详解 进程控制进程创建1⃣️命令行启动命令(程序、指令等)。2⃣️通过自身程序fork出子进程。进程调用fork,内核分配新的内存块和内核数据结构给子进程,将父进程部分数据结构拷贝至子进程,添加子进程到系统进程列表中,fork返回,调度器开始调度。创建子进程,本质是系统多了一个进程,本质是多了一套进程相关的数据结构。(1)为什么fork有两个返回值?返回两次?(2)一个变量里面,怎么会有两个不同的值?从而让父子进入不同的业务逻辑fork执行完业务逻辑时返回时,已经创建好子进程了,又需要一个变量来接
优先级队列基本使用及用C++模拟实现 优先级队列优先级队列 priority_queue是一个容器适配器。不符合先进先出。push时随意,pop和top取优先级最高的。优先级由大小决定,默认大的优先级高,也可以通过仿函数来控制。基本接口使用通过示例:向priority_queue pq内push多个无规律的数字,取其top打印,再pop,直至其中没有数据。会发现结构是一个大堆,默认的top为最大值。每次出队都会将堆的结构调整,将右下方的最小值与最顶上的交换,再进行向下调整算法。如果是想要改变优先级priority_queue
进程的特性&环境变量&命令行参数 环境变量与命令行参数在Linux系统中,标识用户并不是通过用户名,而是uid。(可以类比QQ号码和QQ昵称)原因是计算机更善于处理数字而不是字符。进程的特性并行:多个进程在多个cpu下同时运行。并发:多个进程在一个cpu下采用进程切换的方式,在一段时间内使得多个进程推进。(进程切换时,保存进程上下文,每个进程开始在cpu上运行时,必须恢复上下文)独立性:多进程运行,独享各种资源并互不干扰。(fork出子进程,代码共享,数据各自私有一份)也是操作系统设计进程的一个原则。利用僵尸进程验证独立性
进程地址空间 进程地址空间曾经所学的c/c++内存分布空间并不是真正的内存,而是进程地址空间。进程地址空间究竟是什么?1、创建子进程让子进程修改全局数据,观察父子进程中全局数据的差别。 1 #include<stdio.h> 2 #include<unistd.h> 3 4 int g_val = 0; 5 6 int main() 7 { 8 printf("the g_val is %d", g_val); 9 pid_t id =
非类型模版参数、模版的特化、分离编译 模版进阶非类型模版参数泛型编程函数模版+类模版实现静态栈缺点类中的数组大小是固定值。可以通过定义数组大小的宏变量来快速修改大小。但比如第一个栈要100空间,第二个栈要200,那么第一个栈就会造成空间的浪费。C++提供了解决策略:提供非类型模版参数原来的template 中的T为类型模版参数。template <class T, size_t N = 10>class stack{ int _a[N]; int top;};stack<int, 10
如何调试Linux下vim编辑器写的代码?含实用快捷指令make和Makefile Linux的gdb调试Linux中,程序默认生成的可执行程序是:release版本。默认动态链接,使用动态库。gdb 文件名 -g如上可以改为debug版本,进行调试。release和debug版本的区别1、debug可以调试,release不可调试。2、debug在生成程序的时候会加入调试信息,而release不会。为啥会有release和debug呢?项目开展的流程图:测试团队对高效的自动化调试的需求,便有了测试开发这个方向。常用命令gdb file -g l/list