02 2021 档案

摘要:arm和dsp有什么区别 ARM具有比较强的事务管理功能,可以用来跑界面以及应用程序等,其优势主要体现在控制方面,它的速度和数据处理能力一般,但是外围接口比较丰富,标准化和通用性做的很好,而且在功耗等方面做得也比较好,所以适合用在一些消费电子品方面; 而DSP主要是用来计算的,比如进行加密解密、调制 阅读全文
posted @ 2021-02-27 15:15 角色人生 阅读(638) 评论(0) 推荐(1)
摘要:什么是异步串口和同步串口 串行通信进行数据传送时是将要传送的数据按二进制位,依据一定的顺序逐位发送到接收方。其有两种通信方式:异步通信和同步通信。 异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。异步通信采用固定的通信格式,数据以相同的帧格式传送。 阅读全文
posted @ 2021-02-27 15:14 角色人生 阅读(1604) 评论(0) 推荐(0)
摘要:请说明总线接口USRT、I2C、USB的异同点(串/并、速度、全/半双工、总线拓扑等) UART:通用异步串行口,速率不快,可全双工,结构上一般由波特率产生器、UART发送器、UART接收器组成,硬件上两线,一收一发。 I2C:双向、两线、串行、多主控接口标准。速率不快,半双工,同步接口,具有总线仲 阅读全文
posted @ 2021-02-27 15:13 角色人生 阅读(1191) 评论(0) 推荐(0)
摘要:简述处理器在读内存的过程中,CPU核、cache、MMU如何协同工作?画出CPU核、cache、MMU、内存之间的关系示意图加以说明 现代操作系统普遍采用虚拟内存管理机制,这需要MMU(Memory Management Unit,内存管理单元)的支持。有些嵌入式处理器没有MMU,则不能运行依赖于虚 阅读全文
posted @ 2021-02-27 15:12 角色人生 阅读(948) 评论(0) 推荐(0)
摘要:扇区 块 页 簇的概念 1、什么是扇区和(磁盘)块? 物理层面:一个磁盘按层次分为 : 磁盘组合 -> 单个磁盘 -> 某一盘面 (platter)-> 某一磁道 (track)-> 某一扇区(sector)。 磁头(head):读写头, 柱面(cylinder):柱面是我们抽象出来的一个逻辑概念, 阅读全文
posted @ 2021-02-27 15:09 角色人生 阅读(706) 评论(0) 推荐(0)
摘要:IO口工作方式:上拉输入 下拉输入 推挽输出 开漏输出 1、上拉电阻:将一个不确定的信号,通过一个电阻与电源VCC相连,固定在高电平。在IO口为输入模式且为上拉电阻时,IO口的常态为高电平。 2、下拉电阻:将一个不确定的信号,通过一个电阻与地GND相连,固定在低电平。在IO口为输入模式且为下拉电阻时 阅读全文
posted @ 2021-02-27 15:07 角色人生 阅读(1288) 评论(0) 推荐(0)
摘要:ROM RAM的概念浅析 随机存取存储器(Random Access Memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存 阅读全文
posted @ 2021-02-27 15:06 角色人生 阅读(684) 评论(0) 推荐(0)
摘要:arm和dsp、fpga有什么区别 ARM:ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软 件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体 阅读全文
posted @ 2021-02-27 15:05 角色人生 阅读(571) 评论(0) 推荐(0)
摘要:波特率是什么,为什么双方波特率要相同,高低波特率有什么区别; 波特率是每秒钟可以传送的二进制位数,其单位为bps(bits per second)也写作bits/s。它是衡量串行数据速度快慢的重要指标。 波特率相当于通讯的采样率 这样的比方可能你会理解的容易一些就是2个玩杂耍的人面对面丢瓶子那样 2 阅读全文
posted @ 2021-02-27 15:04 角色人生 阅读(1475) 评论(0) 推荐(0)
摘要:内存 虚拟内存 磁盘/硬盘 的关系 大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语言,为大家介绍其中的关系! CPU: CPU即中央处理器,是英语“Central Processing Unit”的缩写。CPU从内存或缓 阅读全文
posted @ 2021-02-27 15:03 角色人生 阅读(640) 评论(0) 推荐(0)
摘要:数据库创建索引有什么优点和缺点 优点: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以 阅读全文
posted @ 2021-02-26 17:29 角色人生 阅读(373) 评论(0) 推荐(0)
摘要:Linux 操作系统挂起、休眠、关机相关命令 立刻关机: halt init 0 shutdown -h now shutdown -h 0 定时/延时关机: shutdown -h 10:00 shutdown -h +30 //单位为分钟 重启: reboot init 6 shutdown - 阅读全文
posted @ 2021-02-26 17:28 角色人生 阅读(580) 评论(0) 推荐(0)
摘要:中断怎么发生,中断处理大概流程 1. 中断概念: 中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context s 阅读全文
posted @ 2021-02-26 17:27 角色人生 阅读(2877) 评论(0) 推荐(0)
摘要:中断和异常的区别 1、异常: 是指CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。同时异常也称为同步中断,因此只有在一条指令执行后才会发出中断,不可能在指令执行期间发生异常。 产生的原因: 程序的错误产生的,编程异常通常叫做软中断(eg:除数为0) 内核必须处理的异常条件产生的(eg: 阅读全文
posted @ 2021-02-26 17:24 角色人生 阅读(1062) 评论(0) 推荐(0)
摘要:计算机中,32bit与64bit有什么区别 表示: 32bit:X 86 64bit:X 64 处理数据的能力: 32位计算机的CPU一次最多能bai处理32位数据,例如它的EAX寄存器就是32位的,32位计算机通常也可以处理16位和8位数据。64位计算机一次处理数据要比32位大得多,一次运行64位 阅读全文
posted @ 2021-02-26 17:20 角色人生 阅读(1443) 评论(0) 推荐(0)
摘要:硬链接与软链接的区别 硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。 阅读全文
posted @ 2021-02-26 17:18 角色人生 阅读(532) 评论(0) 推荐(0)
摘要:死锁的原因、条件 创建一个死锁,以及如何预防 死锁产生的原因: 系统资源的竞争:系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。 进程运行推进顺序不合适:进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。 产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用,即在一段 阅读全文
posted @ 2021-02-26 17:15 角色人生 阅读(864) 评论(0) 推荐(0)
摘要:堆和栈的区别 1、堆栈空间分配区别: 栈(操作系统):由操作系统(编译器)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 2、堆栈缓存方式区别: 栈使用的 阅读全文
posted @ 2021-02-26 17:13 角色人生 阅读(647) 评论(0) 推荐(0)
摘要:什么是堆,栈,内存泄漏和内存溢出? 堆(heap):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 栈(stack):是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 内存溢出(out of memory):通俗理解就是内存不够,通常在运行大型软件或游戏时 阅读全文
posted @ 2021-02-26 17:12 角色人生 阅读(753) 评论(0) 推荐(0)
摘要:一个程序从开始运行到结束的完整过程(四个过程) 1、编译预处理:处理伪指令 1> 头文件包含 2> 宏定义 3> 条件编译 #if #endif gcc -E xxx.c -o xxx.i 2、编译:把预处理之后的文件进行语法分析,生成汇编代码 gcc -S xx.i -o xx.s 3、汇编:将汇 阅读全文
posted @ 2021-02-26 17:11 角色人生 阅读(1064) 评论(0) 推荐(0)
摘要:大小端的区别以及各自的优点,哪种时候用 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中 阅读全文
posted @ 2021-02-26 17:09 角色人生 阅读(1169) 评论(0) 推荐(0)
摘要:linux下检查内存状态的命令 通过“top”命令可以时时查看内存使用状态。 通过“free -m”命令查看内存使用情况。 通过“cat /proc/meminfo”命令查看内存的更详细的状态。 阅读全文
posted @ 2021-02-26 14:23 角色人生 阅读(502) 评论(0) 推荐(0)
摘要:为什么自旋锁不能睡眠 而在拥有信号量时就可以? 自旋锁自旋锁禁止处理器抢占;而信号量不禁止处理器抢占。 基于这个原因,如果自旋锁在锁住以后进入睡眠,由于不能进行处理器抢占,其他系统进程将都不能获得CPU而运行,因此不能唤醒睡眠的自旋锁,因此系统将不响应任何操作(除了中断或多核的情况,下面会讨论)。而 阅读全文
posted @ 2021-02-26 14:22 角色人生 阅读(927) 评论(0) 推荐(0)
摘要:linux内核同步方式总结 每CPU变量: 正如其名,每cpu变量即为每个CPU都有自己的变量,各个CPU仅访问自己的每CPU变量,可以想象每CPU变量一般的数据结构是一个数组。 type name[CPU_COUNT]; 因此每CPU变量解决的是多CPU之间可能发生的竞争条件,而因内核抢占而产生了 阅读全文
posted @ 2021-02-26 14:20 角色人生 阅读(485) 评论(0) 推荐(0)
摘要:Bootloader的作用、为什么需要Bootloader? 1、Bootloader的作用: 简单的说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。对于Bootloader 阅读全文
posted @ 2021-02-26 14:17 角色人生 阅读(1132) 评论(0) 推荐(0)
摘要:linux的内核是由bootloader装载到内存中的? linux的内核的确是由bootloader装载bai到内du存中的。linux的bootloader有2个部分zhi组成:bootstrap和uboot。所以更准确点的说法是dao:linux的内核是由uboot装载到内存中的。内核文件本身 阅读全文
posted @ 2021-02-26 14:16 角色人生 阅读(544) 评论(0) 推荐(0)
摘要:Bootloader多数有两个阶段的启动过程 bootloader一般都是分为两个阶段的,第一个阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和移植性。 两个阶段如下: 一、第一阶段 阅读全文
posted @ 2021-02-26 14:15 角色人生 阅读(769) 评论(0) 推荐(0)
摘要:bootloader内核 根文件的关系 一般来说,为了使开发板成功运行linux系统,我们需要完成以下三个方面的开发工作: bootloader(启动装载) kernel(内核) rootfs(根文件系统) bootloader: 对于bootloader,我们一般用u-boot来制作。 当开发板烧 阅读全文
posted @ 2021-02-26 14:14 角色人生 阅读(667) 评论(0) 推荐(0)
摘要:内核态,用户态的区别 就像世界上的人并不平等一样,并不是所有的程序都是平等的。世界上有的人占有资源多,有的人占有资源少,有的人来了,别人得让出资源,有的人则专门为别人让出资源。程序也是这样,有的程序可以访问计算机的任何资源,有的程序则只能访问非常受限的少量资源。而操作系统作为计算机的管理者,自然不能 阅读全文
posted @ 2021-02-26 14:12 角色人生 阅读(516) 评论(0) 推荐(0)
摘要:系统调用的作用 1、 操作系统作为用户和硬件的接口,向上提供一些简单易用的服务,主要包括命令接口和程序接口,其中程序接口由一组系统调用组成。 2、用户接口: 命令接口: 联机命令接口(用户说一句系统做一句);脱机命令接口(用户说一堆系统做一堆)。 程序接口: 由一组系统调用组成,通过程序间接使用。 阅读全文
posted @ 2021-02-26 14:11 角色人生 阅读(831) 评论(0) 推荐(0)
摘要:系统调用read()/write(),内核具体做了哪些事情 用户空间read()-->内核空间sys_read()-->scull_fops.read-->scull_read(); 该过程分为两个部分:用户空间的处理和核心空间的处理。在用户空间中通过 0x80 中断的方式将控制权交给内核处理,内核 阅读全文
posted @ 2021-02-26 14:09 角色人生 阅读(673) 评论(0) 推荐(0)
摘要:用户空间与内核通信方式有哪些? 系统调用,提供特定的用户空间与内核空间的信息传递。 信号,内核空间出现一些异常时候会发送信号给进程,如SIGSEGV、SIGILL、SIGPIPE等。 /proc,proc可以读取内核空间的信息并且设置部分属性的值,需要循环检测。 文件,可以通过指定文件的读写操作来实 阅读全文
posted @ 2021-02-26 14:06 角色人生 阅读(604) 评论(0) 推荐(0)
摘要:Linux内核的组成 一个完整的Linux内核一般由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口。 1、内存管理: 内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。 Linux内存管理支持虚拟内存,而多余出的这部分 阅读全文
posted @ 2021-02-26 14:04 角色人生 阅读(527) 评论(0) 推荐(0)
摘要:STL底层数据结构实现 vector底层数据结构为数组,支持快速随机访问。 list底层数据结构为双向链表,支持快速增删。 deque底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(double-ended 阅读全文
posted @ 2021-02-26 14:02 角色人生 阅读(413) 评论(0) 推荐(0)
摘要:vector和deque的比较 vector的底层实现时数组;而deque的底层实现时“中央控制区”和缓冲的结构。 vector的内存空间时连续的;而deque的内存空间是一种假的连续,实际上是不连续的。 vecotr的支持数组的随机访问;而deque虽然也是支持使用[]的运算符,但实际上是需要通过 阅读全文
posted @ 2021-02-26 14:00 角色人生 阅读(409) 评论(0) 推荐(0)
摘要:vector list异同 Vector: 连续存储的容器,动态数组,在堆上分配空间。 底层实现:数组。 两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间 阅读全文
posted @ 2021-02-26 13:58 角色人生 阅读(420) 评论(0) 推荐(0)
摘要:快排的partition函数与归并的Merge函数 代码: 三个函数: 基准插入函数:int getStandard(int array[],int low,int high) (返回基准位置下标) 递归排序函数:void quickSort(int array[],int low,int high 阅读全文
posted @ 2021-02-26 13:56 角色人生 阅读(438) 评论(0) 推荐(0)
摘要:快速排序 快速排序:快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j,交 阅读全文
posted @ 2021-02-26 13:55 角色人生 阅读(484) 评论(0) 推荐(0)
摘要:归并排序 归并排序:归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破 阅读全文
posted @ 2021-02-26 13:53 角色人生 阅读(463) 评论(0) 推荐(0)
摘要:插入排序 插入排序:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入 阅读全文
posted @ 2021-02-26 13:51 角色人生 阅读(467) 评论(0) 推荐(0)
摘要:选择排序 选择排序是一种简单直观的排序算法。它与冒泡排序很相似,都是比较 n-1 轮,每轮都是比较 n–1–i 次,每轮找出一个最大值或最小值。 只不过,冒泡排序是将每轮找出的最值放到最右边,而选择排序是将每轮找出的最值放到最左边。并且在算法上,冒泡排序是将相邻的数进行逐个比较,以从小到大排序为例, 阅读全文
posted @ 2021-02-26 13:50 角色人生 阅读(596) 评论(0) 推荐(0)
摘要:冒泡排序 冒泡排序:冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并 阅读全文
posted @ 2021-02-26 13:45 角色人生 阅读(483) 评论(0) 推荐(0)
摘要:各种排序算法什么时候有最好情况、最坏情况(尤其是快排) 直接插入排序:最坏情况需要比较O(n^2)次(n(n - 1)/2次)(有争议)。 简单选择排序:无论是否最坏都需要O(n^2)次(n(n - 1)/2次)。 冒泡排序:需要比较O(n^2)次(n(n - 1)/2次),即序列逆序的情况。 堆排 阅读全文
posted @ 2021-02-26 13:41 角色人生 阅读(2272) 评论(0) 推荐(0)
摘要:各种排序算法的时间空间复杂度、稳定性 一、排序算法分类: 二、排序算法比较: 注: 1、归并排序可以通过手摇算法将空间复杂度降到O(1),但是时间复杂度会提高。 2、 基数排序时间复杂度为O(N*M),其中N为数据个数,M为数据位数。 三、 辅助记忆 1、时间复杂度记忆 冒泡、选择、直接 排序需要两 阅读全文
posted @ 2021-02-26 13:40 角色人生 阅读(625) 评论(0) 推荐(0)
摘要:自2021-02-25日起,本人的博客将如数全部搬至CSDN。 阅读全文
posted @ 2021-02-25 11:43 角色人生 阅读(281) 评论(0) 推荐(0)
摘要:为什么建立连接是三次握手,关闭连接确是四次挥手呢? 建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所 阅读全文
posted @ 2021-02-25 09:48 角色人生 阅读(490) 评论(0) 推荐(0)
摘要:为什么客户端最后还要等待2MSL? MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。 第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没 阅读全文
posted @ 2021-02-25 09:47 角色人生 阅读(538) 评论(0) 推荐(0)
摘要:什么是四次挥手 在网络数据传输中,传输层协议断开连接的过程我们称为四次挥手; 第一次,Client将FIN置为1,发送一个序列号seq给Server;进入FIN_WAIT_1状态; 第二次,Server收到FIN之后,发送一个ACK=1,acknowledge number=收到的序列号+1;进入C 阅读全文
posted @ 2021-02-25 09:45 角色人生 阅读(480) 评论(0) 推荐(0)
摘要:为什么服务端易受到SYN攻击? 服务端的资源分配是在二次握手时分配的,而客户端的资源是在三次握手时分配的。 SYN攻击,即客户端在短时间内伪造大量不存在的IP地址,并向SERVER端不断的发送SYN包,SERVER收到请求即回复确认,并等待客户端的确认,由于源地址不存在,因此SERVER需要不断的重 阅读全文
posted @ 2021-02-25 09:43 角色人生 阅读(540) 评论(0) 推荐(0)
摘要:为什么三次握手中客户端还要发送一次确认呢?可以二次握手吗? 主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。 如果是两次握手,连接过程应该是这样的,当服务器收到对端的连接请求时,就认为连接建立好了,进入ESTABLISHED状态。客户端在收到服务器发来的同步确认报文后,就认为连接建 阅读全文
posted @ 2021-02-25 09:42 角色人生 阅读(521) 评论(0) 推荐(0)
摘要:什么是三次握手 在网络数据传输中,传输层协议TCP(传输控制协议)是建立连接的可靠传输,TCP建立连接的过程,我们称为三次握手。 第一次,建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence 阅读全文
posted @ 2021-02-25 09:40 角色人生 阅读(472) 评论(0) 推荐(0)
摘要:URI(统一资源标识符)和URL(统一资源定位符)之间的区别 URL: ​ URL 统一资源定位符(Uniform Resource Locator):其实就是我们访问web页面时需要输入的”网页地址“”网址“,比如:https://www.google.com/ 就是URL。 完整定义如下: 协议 阅读全文
posted @ 2021-02-25 09:39 角色人生 阅读(670) 评论(0) 推荐(0)
摘要:HTTPS与HTTP的一些区别 HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。 HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。 HTTP和HTTPS使用的是完全不同的连接方式,用的 阅读全文
posted @ 2021-02-25 09:37 角色人生 阅读(592) 评论(0) 推荐(0)
摘要:Http1.1和Http1.0的区别 HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在: 缓存处理:在H 阅读全文
posted @ 2021-02-25 09:35 角色人生 阅读(450) 评论(0) 推荐(0)
摘要:典型网络模型,简单说说有哪些 网络模型一般是指OSI七层参考模型和TCP/IP四层参考模型。 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。 网络层:IP协议、ICMP协议、ARP协议、RARP协议。 阅读全文
posted @ 2021-02-25 09:34 角色人生 阅读(593) 评论(0) 推荐(0)
摘要:TCP为什么是可靠连接 确认和重传机制:建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础传输过程中,如果Checksum校验失败、丢包或延时,发送端重传。 数据排序:TCP有专门的序列号SN字段,可提供数据re-order。 流量控制:窗口和计时器的使用。 阅读全文
posted @ 2021-02-25 09:33 角色人生 阅读(559) 评论(0) 推荐(0)
摘要:TCP UDP适用场景 TCP的应用场景:适合通信质量要求较高的场景,http传输、文件传输、smtp等等,目前大部分的传输都是基于TCP协议传输; UDP的应用场景:相对于TCP传输,UDP传输速度更快,实时性更好,耗资源更少,但稳定性、可靠性比TCP差,适合对网络通讯质量要求不高、速度要求尽量快 阅读全文
posted @ 2021-02-25 09:32 角色人生 阅读(549) 评论(0) 推荐(0)
摘要:TCP、UDP的优缺点 TCP的优点:可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点:慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这 阅读全文
posted @ 2021-02-25 09:31 角色人生 阅读(624) 评论(0) 推荐(0)
摘要:TCP、UDP的区别 TCP 是面向连接的,UDP是面向无连接的; UDP 程序结构较简单; TCP 是面向字节流的,UDP是基于数据报的; TCP 保证数据正确性,UDP可能丢包; TCP 占用资源较多,UDP占用资源较少; TCP 保证传输数据顺序、无差错、不丢失、不重复、且按时序到达,UDP 阅读全文
posted @ 2021-02-25 09:28 角色人生 阅读(568) 评论(0) 推荐(0)
摘要:c/c++中变量的作用域 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。 全局变量: 全局变量是在所有函数体的外部定义的,程序的 阅读全文
posted @ 2021-02-25 09:26 角色人生 阅读(669) 评论(0) 推荐(0)
摘要:volatile作用和用法 使用volatile关键字声明的变量或对象通常具有与优化、多线程相关的特殊属性。通常,volatile关键字用来阻止(伪)编译器认为的无法“被代码本身”改变的代码(变量/对象)进行优化。如在C语言中,volatile关键字可以用来提醒编译器它后面所定义的变量随时有可能改变 阅读全文
posted @ 2021-02-25 09:24 角色人生 阅读(794) 评论(0) 推荐(0)
摘要:const常量和#define的区别(编译阶段、安全性、内存占用等) 区别: 就起作用的阶段而言:#define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用。 就起作用的方式而言:#define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可 阅读全文
posted @ 2021-02-25 09:23 角色人生 阅读(1048) 评论(0) 推荐(0)
摘要:static的用法(定义和用途) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。 那 阅读全文
posted @ 2021-02-25 09:21 角色人生 阅读(838) 评论(0) 推荐(0)
摘要:char和int之间的转换 Char转int: Char与int的相互转换,联想ASCII码,字符’0’对应的值为48,所以不能直接加减’’; Char ch = ’9’; int ch_int = ch – ’0’; //此时ch_int = 9; int转char: int i= 9; char 阅读全文
posted @ 2021-02-25 09:19 角色人生 阅读(615) 评论(0) 推荐(0)
摘要:struct和class的区别 class是引用类型,struct是值类型; class可以继承类、接口和被继承,struct只能继承接口,不能被继承; class有默认的无参构造函数,有析构函数,struct没有默认的无参构造函数,且只能声明有参的构造函数,没有析构函数; class可以使用abs 阅读全文
posted @ 2021-02-25 09:18 角色人生 阅读(563) 评论(0) 推荐(0)
摘要:数组到底存放在哪里 数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。下面将深入介绍数组在内存中的运行机制。 数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。 与所有引用变量相同的是, 阅读全文
posted @ 2021-02-25 09:16 角色人生 阅读(1195) 评论(0) 推荐(0)
摘要:重写memcpy()函数需要注意哪些问题 标准memcpy()的解释: void *memcpy(void *dst, const void *src, size_t n); //If copying takes place between objects that overlap, the beh 阅读全文
posted @ 2021-02-25 09:13 角色人生 阅读(986) 评论(0) 推荐(0)
摘要:函数参数压栈顺序,即关于__stdcall和__cdecl调用方式的理解 __stdcall和__cdecl都是函数调用约定关键字。 __stdcall:参数由右向左压入堆栈;堆栈由函数本身清理。 __cdecl:参数也是由右向左压入堆栈;但堆栈由调用者清理。 阅读全文
posted @ 2021-02-25 09:11 角色人生 阅读(601) 评论(0) 推荐(0)
摘要:函数头文件的声明前加extern 与不加extern 有什么区别 声明时加不加extern无所谓,没区别,因为函数默认是extern属性。 在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。 阅读全文
posted @ 2021-02-25 09:08 角色人生 阅读(1045) 评论(0) 推荐(0)
摘要:extern”C” 的作用 extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函 阅读全文
posted @ 2021-02-25 09:07 角色人生 阅读(570) 评论(0) 推荐(0)
摘要:C语言检索内存情况 内存分配的方式 内存分配方式: 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置 阅读全文
posted @ 2021-02-25 09:06 角色人生 阅读(869) 评论(0) 推荐(0)
摘要:指针与引用的相同和区别;如何相互转换? 相同: 都是地址的概念,指针指向某一内存、它的内容是所指内存的地址;引用则是某块内存的别名。 从内存分配上看:两者都占内存,程序为指针会分配内存,一般是4个字节;而引用的本质是指针常量,指向对象不能变,但指向对象的值可以变。两者都是地址概念,所以本身都会占用内 阅读全文
posted @ 2021-02-25 09:02 角色人生 阅读(936) 评论(0) 推荐(0)
摘要:在1G内存的计算机中能否malloc(1.2G)?为什么? malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供 阅读全文
posted @ 2021-02-25 09:01 角色人生 阅读(1035) 评论(0) 推荐(0)
摘要:malloc的底层实现 使用过c语言的都知道malloc是一个动态分配内存的函数,还可以通过free释放内存空间。如果我们想分析一下malloc的源码,这其实不是一会就能看懂的,但是我们可以讨论一下malloc的简单实现。在这之前,我们先来看一下虚拟内存空间。虚拟内存空间是操作系统实现内存管理的一种 阅读全文
posted @ 2021-02-25 08:58 角色人生 阅读(1093) 评论(0) 推荐(0)
摘要:new和malloc的区别 new是操作符,而malloc是函数。 new在调用的时候先分配内存,在调用构造函数,释放的时候调用析构函数。 new是类型安全的,malloc返回void*。 new可以被重载。 new分配内存更直接和安全。 malloc 可以被realloc。 new发生错误抛出异常 阅读全文
posted @ 2021-02-25 08:56 角色人生 阅读(605) 评论(0) 推荐(1)
摘要:正确处理僵尸进程的方法 子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。 fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进 阅读全文
posted @ 2021-02-25 08:54 角色人生 阅读(565) 评论(0) 推荐(0)
摘要:如何创建守护进程 调用fork(),创建新进程,它会是将来的守护进程。 在父进程中调用exit,保证子进程不是进程组长。 调用setsid()创建新的会话区。 将当前目录改成跟目录(如果把当前目录作为守护进程的目录,当前目录不能被卸载他作为守护进程的工作目录)。 将标准输入,标注输出,标准错误重定向 阅读全文
posted @ 2021-02-25 08:53 角色人生 阅读(481) 评论(0) 推荐(0)
摘要:孤儿进程、僵尸进程、守护进程的概念 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取 阅读全文
posted @ 2021-02-25 08:51 角色人生 阅读(604) 评论(0) 推荐(0)
摘要:并发,同步,互斥,异步,阻塞,非阻塞的理解 并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥。 同步(synchronous):线程之间的关系不是相互排斥临界资源的关系,而是 阅读全文
posted @ 2021-02-25 08:50 角色人生 阅读(748) 评论(0) 推荐(0)
摘要:线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗? 同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。线程同步不一定发生阻塞,线程同步的时候,需要协调推进速 阅读全文
posted @ 2021-02-25 08:49 角色人生 阅读(756) 评论(0) 推荐(0)
摘要:什么是线程同步和互斥 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。 线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用, 阅读全文
posted @ 2021-02-25 08:33 角色人生 阅读(660) 评论(0) 推荐(0)
摘要:一个进程可以创建多少线程,和什么有关 理论上,一个进程可用虚拟空间是2G,默认情况下,线程的栈的大小是1MB,所以理论上最多只能创建2048个线程。如果要创建多于2048的话,必须修改编译器的设置。一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定,只要虚拟空间足够,那么新线程的建立就会 阅读全文
posted @ 2021-02-25 08:31 角色人生 阅读(1136) 评论(0) 推荐(0)
摘要:什么是进程上下文、中断上下文 进程上下文: 进程上文:其是指进程由用户态切换到内核态是需要保存用户态时cpu寄存器中的值,进程状态以及堆栈上的内容,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。 进程下文:其是指切换到内核态后执行的程序,即进程运行在内核空间的部分 阅读全文
posted @ 2021-02-25 08:30 角色人生 阅读(952) 评论(0) 推荐(0)
摘要:父进程、子进程的关系以及区别 关系:fork出子进程后,子进程都会继承父进程以下信息: 文件描述符 实际用户ID,实际组ID,有效用户ID,有效组ID 进程组ID 添加组ID 对话期ID 控制终端 设置-用户-ID标志和设置-组-ID标志 当前工作目录 根目录 文件方式创建字 信号屏蔽和排列 对任意 阅读全文
posted @ 2021-02-25 08:29 角色人生 阅读(1547) 评论(0) 推荐(0)
摘要:进程线程的状态转换 进程 创建状态(New):一个应用程序从系统上启动,首先就是进入创建状态,需要获取系统资源创建进程管理块(PCB:Process Control Block)完成资源分配。 就绪状态(Runnable):在创建状态完成之后,进程已经准备好,但是还未获得处理器资源,无法运行。 运行 阅读全文
posted @ 2021-02-25 08:27 角色人生 阅读(827) 评论(0) 推荐(0)
摘要:进程的空间模型 Linux下使用虚拟内存空间给每一个进程,32位操作系统下,每个进程都有独立的4G虚拟内存空间。其中包括: 内核区:用户代码不可见的区域,页表就存放在这个区域中。 用户区:a、代码段:只可读,不可写,程序代码段。b、数据段:保存全局变量,静态变量的区域。c、堆区:就是动态内存,通过m 阅读全文
posted @ 2021-02-25 08:25 角色人生 阅读(1075) 评论(0) 推荐(0)
摘要:多进程、多线程同步(通讯)的方法 进程间通讯: 管道( pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系 有名管道 (named pipeline) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 高 阅读全文
posted @ 2021-02-25 08:24 角色人生 阅读(1345) 评论(0) 推荐(0)
摘要:什么时候用进程,什么时候用线程 线程进程的区别体现在几个方面: 地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。 通信: 进程间通信 IPC(管道,信号量,共享内存,消息队列,信号,套接字),线程间可以直接读写进程数据段(如全局变量)来进行通 阅读全文
posted @ 2021-02-25 08:23 角色人生 阅读(953) 评论(0) 推荐(0)
摘要:标题多进程、多线程的优缺点? 多进程优点: • 每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; • 通过增加CPU,就可以容易扩充性能; • 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; • 每个子进程都有2GB地址空间和相关资源,总体能够达到 阅读全文
posted @ 2021-02-25 08:21 角色人生 阅读(1029) 评论(0) 推荐(0)
摘要:什么是进程,线程,两者联系与区别 进程:一个正在运行的程序,进程为系统中分配内存资源的最小单元;线程:线程是程序执行的最小单位,线程是正在运行的一个函数;联系: 进程和线程都是操作系统所运行的程序运行的基本单元; 进程是具有一定独立功能的程序的一次运行活动,操作系统动态执行的单元,包含程序从调度到消 阅读全文
posted @ 2021-02-25 08:19 角色人生 阅读(1173) 评论(0) 推荐(1)