- 博客(51)
- 收藏
- 关注
转载 Linux内核态和用户态的切换
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。
2017-08-11 11:24:26 5966
原创 Shell学习笔记
1.shell脚本的特点(1)shell是一种弱类型语言(2)shell是一门解释型语言(3)shell没有数据类型(结构体),所以类型可以直接使用,不用先定义再使用,需要注意二义性(4)非编译2.shell脚本的执行方式(1)直接执行脚本./pid.sh 首先赋予chomd u+x pid.sh //只授予这个文件所属组的执行权限 然后就可以
2017-07-31 09:51:16 603
原创 链表面试题总结----(可能带环相交问题+复杂链表的复制)
1.顺序表和链表的优缺点以及适应场景2.逆置单链表3.从尾到头打印单链表4.无头单链表的非尾结点5.判断两个个链表是否相交(不带环)6.判断一个链表是否带环7.判断两个链表是否相交(可能带环)8.复杂链表的复制
2017-07-16 22:58:58 886
原创 通过图文来理解快速排序的过程
1.快排的基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2.快排的三种实现方式2.1左右指针法代码实现:int PartSort(int* a,int left,int right){ if (left
2017-07-03 21:07:11 410
原创 crond/crondtab—Linux下的任务定时器
1.定时任务crond介绍1.1 crond是什么?crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。 特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。 1.2 为什么要使用crond定时任务?定时任务的作用: (1) 服务器:7*24小时开机提供服务是网站的基本特征 (2) 有重要数据:提高备份周期和备份数量1.3 linux系统的
2017-07-01 19:52:52 965
原创 子数组最大累加和+子矩阵的最大和+子数组累加和为给定值的最大子数组长度
1.如何求一个子数组的最大累加和?(时间复杂度O(N))2.如何求两个子数组的最大累加和?(要求两个子数组无重合的部分,时间复杂度O(N))3.未排序的正数数组中累加和为给定值的最长子数组长度(时间复杂度O(N))3.给定一个无序矩阵,其中有正,有负,有 0,求子矩阵的最大和
2017-07-01 09:40:59 662
原创 作业、会话和守护进程
1.作业和进程组进程组:每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。性质:(1)每个进程组都有一个唯一的进程组ID,存放在pid_t数据类型中,函数getpgrp返回调用进程的进程组ID。(2)每个进程组都有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。(3)进程组是否存在与其组长进程是否终止无关。进程组的生命周期从创建开始
2017-06-28 11:18:49 388
原创 BTree的插入和查找算法分析
1.什么叫BTree?一种适合外查找的树,它是一种平衡的多叉树,称为B树(或写成B-树,但是不能误读为“B减树”)。2.BTree的性质 一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:1. 根节点至少有两个孩子(孩子为NULL也算作孩子的数量)2. 每个非根节点有[M/2,M]个孩子(注意孩子与关键字的关系,n个key,n+1孩子)3.
2017-06-27 09:47:31 2428
原创 Linux信号(二)——编写自己的mysleep函数
1.alarm函数和pause函数使用alarm函数可以设置一个时间值(闹钟时间),在将来的某个时刻这个值会被超过。当所设置的时间超过后,产生SIGALRM信号。如果不忽略或不捕捉此信号,则其默认动作是终止该进程。参数seconds的值是秒数,经历了指定的seconds秒后会产生信号SIGALRM。 #include unsigned int alarm(unsigned int
2017-06-18 16:10:33 755
原创 Linux信号(一)——子进程的异步等待方式
1.信号信号(是一种软件中断)是由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。2.信号的产生(1)前台进程,用户可以通过输入特殊终端字符来给它发送信号。比如Ctrl+C通常给进程发送一个中断信号——2号信号(SIGINT),只能终止前台进程。 (2)系统异常。比如浮点异常——8号信号(SIGFPE)。 (3)系统状态变化。比如alarm函
2017-06-16 18:50:22 1592
原创 对比线程安全和可重入函数
1.什么叫线程安全如果你的程序所在的进程中有多个线程在同时运行,而这些线程可能同时运行一段代码或同时访问一个对象,如果每次运行完这段代码或访问完这个对象之后,所得到的结果和单线程运行的结果一样,而其他变量的值也和预期的保持一致,那么就认为是线程安全的。 也就是说当多个线程同时运行同一段代码,不会造成资源的冲突,不会产生错误的结果就是线程安全的。如果有一段线程安全的代码
2017-06-07 18:04:40 2431
原创 多线程编程总结(二)——条件变量和互斥锁
1.什么叫互斥锁?互斥锁(也成互斥量)可以用于保护关键代码段,以确保其独占式的访问,类似于二元信号量。二者都可以称为挂起等待锁———锁资源得不到满足,就会被挂起,在信号量或互斥锁上等待。注:当前线程的PCB在互斥量的等待队列等待以便快速唤醒。进程等待的本质是将PCB列入某个队列等待。2.使用方式 当进入关键代码段时,需要申请互斥锁,如果失败就挂起等待,将PCB列入互
2017-06-03 19:28:28 972
原创 红黑树(RBTree)的插入算法以及如何测试一棵树是否是红黑树?(详细图解说明)
红黑树的插入数据时,什么时候该调整,什么时候不用调整,什么时候需要旋转,该怎样调节结点的颜色呢?以及如何判断一棵树是否是红黑树,超级详细的图解过程!!!
2017-06-02 22:54:49 5341
原创 AVL树(高度平衡的二叉搜索树)平衡因子的调节和旋转
1.什么叫AVL树? AVL树又称为高度平衡的二叉搜索树,它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度(尽量使这棵树保持为完全二叉树,这样就能提高搜索效率)。2.AVL树的性质 (1)左子树和右子树的高度之差的绝对值不超过1 (2) 树中的每个左子树和右子树都是AVL树
2017-05-31 22:47:36 5630 2
原创 多线程编程小结(一)
线程函数的介绍(pthread_create;pthread_join;pthread_exit;pthread_cancel) 线程与进程的区别 多线程的优点 分离线程的介绍
2017-05-28 22:23:52 4790
原创 进程间通信方式——信号量(Semaphore)
信号量的工作原理,进程通过信号量如何获得共享资源,详解与信号量有关的函数,sembuf的sem_flg标志设为SEM_UNDO的作用以及模拟实现二元信号量。
2017-05-19 01:26:32 25221 4
原创 最优二叉树--哈夫曼树和最优前缀编码--哈夫曼编码
1.最优二叉树的定义最优二叉树又称哈夫曼树,是一种带权路径长最短的树。树的路径长度是从树根到每一个叶子之间的路径长度之和。节点的带树路径长度为从该节点到树根之间的路径长度与该节点权(比如字符在某串中的使用频率)的乘积。2.构造哈夫曼树2.1贪心算法贪心算法(又称贪婪算法)是指,在对 问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部 最优解。
2017-05-18 11:56:25 21457
转载 图文——怎样给GitHub上传本地代码(比如VS项目中的代码等)
使用GitHub上传本地代码,超级详细的解释,以及执行客服端shell命令常见的错误该怎样解决!!!
2017-05-13 19:46:06 1378
原创 进程间的通信方式——pipe(管道)
详解进程间通信方式———管道;管道是如何实现进程间通信的;以及管道读取数据的四种方式,以及管道容量的大小。
2017-05-10 00:43:13 105861 20
原创 二叉树的定义和递归实现
递归创建二叉树,递归过程分析;树的基本概念;二叉树的性质;递归实现二叉树的先序、中序、后序、层序遍历;递归求二叉树的深度;递归求二叉树的结点个数;递归求二叉树叶子结点个数;以及递归实现求第k层结点的个数。
2017-05-05 21:43:23 5883
原创 C++智能指针详解
了解auto_ptr、scoped_ptr、shared_ptr等智能指针的实现;不同的智能指针存在什么样的问题,以及该怎样选择智能指针。
2017-04-16 14:58:19 944
原创 C++虚函数表与虚函数
深入探究虚函数表(虚表)的构成以及对象模型,比如菱形继承,虚继承,单继承,多继承的对象模型以及虚表的构成以及对象大小的计算。
2017-03-29 22:19:51 1368 3
原创 CentOS 升级编译安装GCC 4.8.1 + GDB 7.6.1 + Vim的简单配置(Taglist、WinManager插件)
vim的简单配置、Taglist、WinManager的插件的安装,以及如何升级gcc g++ 编译器以及gdb调试器来适应语言更新所带来的新特性。
2017-03-29 00:06:31 1237
原创 菱形继承和虚继承、对象模型和虚基表
菱形继承的对象模型、虚继承的对象模型、以及深入探究虚基表的内容,为什么虚基表存放对象的偏移量要存放在第二个位置,而不是第一个位置?
2017-03-25 19:25:01 1973 1
原创 模拟实现string类的增删查改
模拟实现string的operator[] operator+= Push_Back Erase Substr operator= Insert Find的各种操作
2017-03-21 16:01:49 987
原创 C++实现一个日期类
用C++实现一个日期类,实现计算两个日期相差多少天,一个日期加多少天到哪一天,一个日期减去多少天到哪一天的理解,重在理解函数的重载,思考代码的复用以及函数返回值什么时候该用引用,还有运算符重载等问题。
2017-03-08 17:49:55 1193
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人