摘要:
数据库创建索引有什么优点和缺点 优点: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以 阅读全文
posted @ 2021-02-26 17:29
角色人生
阅读(371)
评论(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
角色人生
阅读(575)
评论(0)
推荐(0)
摘要:
中断怎么发生,中断处理大概流程 1. 中断概念: 中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context s 阅读全文
posted @ 2021-02-26 17:27
角色人生
阅读(2859)
评论(0)
推荐(0)
摘要:
中断和异常的区别 1、异常: 是指CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。同时异常也称为同步中断,因此只有在一条指令执行后才会发出中断,不可能在指令执行期间发生异常。 产生的原因: 程序的错误产生的,编程异常通常叫做软中断(eg:除数为0) 内核必须处理的异常条件产生的(eg: 阅读全文
posted @ 2021-02-26 17:24
角色人生
阅读(1054)
评论(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
角色人生
阅读(1432)
评论(0)
推荐(0)
摘要:
硬链接与软链接的区别 硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。 阅读全文
posted @ 2021-02-26 17:18
角色人生
阅读(525)
评论(0)
推荐(0)
摘要:
死锁的原因、条件 创建一个死锁,以及如何预防 死锁产生的原因: 系统资源的竞争:系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。 进程运行推进顺序不合适:进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。 产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用,即在一段 阅读全文
posted @ 2021-02-26 17:15
角色人生
阅读(849)
评论(0)
推荐(0)
摘要:
堆和栈的区别 1、堆栈空间分配区别: 栈(操作系统):由操作系统(编译器)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 2、堆栈缓存方式区别: 栈使用的 阅读全文
posted @ 2021-02-26 17:13
角色人生
阅读(646)
评论(0)
推荐(0)
摘要:
什么是堆,栈,内存泄漏和内存溢出? 堆(heap):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 栈(stack):是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 内存溢出(out of memory):通俗理解就是内存不够,通常在运行大型软件或游戏时 阅读全文
posted @ 2021-02-26 17:12
角色人生
阅读(745)
评论(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
角色人生
阅读(1057)
评论(0)
推荐(0)
摘要:
大小端的区别以及各自的优点,哪种时候用 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中 阅读全文
posted @ 2021-02-26 17:09
角色人生
阅读(1161)
评论(0)
推荐(0)
摘要:
linux下检查内存状态的命令 通过“top”命令可以时时查看内存使用状态。 通过“free -m”命令查看内存使用情况。 通过“cat /proc/meminfo”命令查看内存的更详细的状态。 阅读全文
posted @ 2021-02-26 14:23
角色人生
阅读(495)
评论(0)
推荐(0)
摘要:
为什么自旋锁不能睡眠 而在拥有信号量时就可以? 自旋锁自旋锁禁止处理器抢占;而信号量不禁止处理器抢占。 基于这个原因,如果自旋锁在锁住以后进入睡眠,由于不能进行处理器抢占,其他系统进程将都不能获得CPU而运行,因此不能唤醒睡眠的自旋锁,因此系统将不响应任何操作(除了中断或多核的情况,下面会讨论)。而 阅读全文
posted @ 2021-02-26 14:22
角色人生
阅读(919)
评论(0)
推荐(0)
摘要:
linux内核同步方式总结 每CPU变量: 正如其名,每cpu变量即为每个CPU都有自己的变量,各个CPU仅访问自己的每CPU变量,可以想象每CPU变量一般的数据结构是一个数组。 type name[CPU_COUNT]; 因此每CPU变量解决的是多CPU之间可能发生的竞争条件,而因内核抢占而产生了 阅读全文
posted @ 2021-02-26 14:20
角色人生
阅读(476)
评论(0)
推荐(0)
摘要:
Bootloader的作用、为什么需要Bootloader? 1、Bootloader的作用: 简单的说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。对于Bootloader 阅读全文
posted @ 2021-02-26 14:17
角色人生
阅读(1114)
评论(0)
推荐(0)
摘要:
linux的内核是由bootloader装载到内存中的? linux的内核的确是由bootloader装载bai到内du存中的。linux的bootloader有2个部分zhi组成:bootstrap和uboot。所以更准确点的说法是dao:linux的内核是由uboot装载到内存中的。内核文件本身 阅读全文
posted @ 2021-02-26 14:16
角色人生
阅读(533)
评论(0)
推荐(0)
摘要:
Bootloader多数有两个阶段的启动过程 bootloader一般都是分为两个阶段的,第一个阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和移植性。 两个阶段如下: 一、第一阶段 阅读全文
posted @ 2021-02-26 14:15
角色人生
阅读(763)
评论(0)
推荐(0)
摘要:
bootloader内核 根文件的关系 一般来说,为了使开发板成功运行linux系统,我们需要完成以下三个方面的开发工作: bootloader(启动装载) kernel(内核) rootfs(根文件系统) bootloader: 对于bootloader,我们一般用u-boot来制作。 当开发板烧 阅读全文
posted @ 2021-02-26 14:14
角色人生
阅读(654)
评论(0)
推荐(0)
摘要:
内核态,用户态的区别 就像世界上的人并不平等一样,并不是所有的程序都是平等的。世界上有的人占有资源多,有的人占有资源少,有的人来了,别人得让出资源,有的人则专门为别人让出资源。程序也是这样,有的程序可以访问计算机的任何资源,有的程序则只能访问非常受限的少量资源。而操作系统作为计算机的管理者,自然不能 阅读全文
posted @ 2021-02-26 14:12
角色人生
阅读(506)
评论(0)
推荐(0)
摘要:
系统调用的作用 1、 操作系统作为用户和硬件的接口,向上提供一些简单易用的服务,主要包括命令接口和程序接口,其中程序接口由一组系统调用组成。 2、用户接口: 命令接口: 联机命令接口(用户说一句系统做一句);脱机命令接口(用户说一堆系统做一堆)。 程序接口: 由一组系统调用组成,通过程序间接使用。 阅读全文
posted @ 2021-02-26 14:11
角色人生
阅读(824)
评论(0)
推荐(0)
摘要:
系统调用read()/write(),内核具体做了哪些事情 用户空间read()-->内核空间sys_read()-->scull_fops.read-->scull_read(); 该过程分为两个部分:用户空间的处理和核心空间的处理。在用户空间中通过 0x80 中断的方式将控制权交给内核处理,内核 阅读全文
posted @ 2021-02-26 14:09
角色人生
阅读(667)
评论(0)
推荐(0)
摘要:
用户空间与内核通信方式有哪些? 系统调用,提供特定的用户空间与内核空间的信息传递。 信号,内核空间出现一些异常时候会发送信号给进程,如SIGSEGV、SIGILL、SIGPIPE等。 /proc,proc可以读取内核空间的信息并且设置部分属性的值,需要循环检测。 文件,可以通过指定文件的读写操作来实 阅读全文
posted @ 2021-02-26 14:06
角色人生
阅读(598)
评论(0)
推荐(0)
摘要:
Linux内核的组成 一个完整的Linux内核一般由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口。 1、内存管理: 内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。 Linux内存管理支持虚拟内存,而多余出的这部分 阅读全文
posted @ 2021-02-26 14:04
角色人生
阅读(518)
评论(0)
推荐(0)
摘要:
STL底层数据结构实现 vector底层数据结构为数组,支持快速随机访问。 list底层数据结构为双向链表,支持快速增删。 deque底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(double-ended 阅读全文
posted @ 2021-02-26 14:02
角色人生
阅读(407)
评论(0)
推荐(0)
摘要:
vector和deque的比较 vector的底层实现时数组;而deque的底层实现时“中央控制区”和缓冲的结构。 vector的内存空间时连续的;而deque的内存空间是一种假的连续,实际上是不连续的。 vecotr的支持数组的随机访问;而deque虽然也是支持使用[]的运算符,但实际上是需要通过 阅读全文
posted @ 2021-02-26 14:00
角色人生
阅读(397)
评论(0)
推荐(0)
摘要:
vector list异同 Vector: 连续存储的容器,动态数组,在堆上分配空间。 底层实现:数组。 两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间 阅读全文
posted @ 2021-02-26 13:58
角色人生
阅读(413)
评论(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
角色人生
阅读(437)
评论(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
角色人生
阅读(471)
评论(0)
推荐(0)
摘要:
归并排序 归并排序:归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破 阅读全文
posted @ 2021-02-26 13:53
角色人生
阅读(451)
评论(0)
推荐(0)
摘要:
插入排序 插入排序:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入 阅读全文
posted @ 2021-02-26 13:51
角色人生
阅读(457)
评论(0)
推荐(0)
摘要:
选择排序 选择排序是一种简单直观的排序算法。它与冒泡排序很相似,都是比较 n-1 轮,每轮都是比较 n–1–i 次,每轮找出一个最大值或最小值。 只不过,冒泡排序是将每轮找出的最值放到最右边,而选择排序是将每轮找出的最值放到最左边。并且在算法上,冒泡排序是将相邻的数进行逐个比较,以从小到大排序为例, 阅读全文
posted @ 2021-02-26 13:50
角色人生
阅读(589)
评论(0)
推荐(0)
摘要:
冒泡排序 冒泡排序:冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并 阅读全文
posted @ 2021-02-26 13:45
角色人生
阅读(476)
评论(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
角色人生
阅读(2257)
评论(0)
推荐(0)
摘要:
各种排序算法的时间空间复杂度、稳定性 一、排序算法分类: 二、排序算法比较: 注: 1、归并排序可以通过手摇算法将空间复杂度降到O(1),但是时间复杂度会提高。 2、 基数排序时间复杂度为O(N*M),其中N为数据个数,M为数据位数。 三、 辅助记忆 1、时间复杂度记忆 冒泡、选择、直接 排序需要两 阅读全文
posted @ 2021-02-26 13:40
角色人生
阅读(617)
评论(0)
推荐(0)
浙公网安备 33010602011771号