自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 问答 (10)
  • 收藏
  • 关注

原创 fork和vfork

fork的基础知识fork:创建一个和当前进程映像一样的进程可以通过fork( )系统调用:#include <sys/types.h>#include <unistd.h>pid_t fork(void);成功调用fork( )会创建一个新的进程,它几乎与调用fork( )的进程一模一样,这两个进程都会继续运行。在子进程中,成功的fork( )调用会返回0。在父进程中fork( )返回子进程的pid。如果出现错误,fork( )返回一个负值。最常见的fork( )用法是

2020-07-31 16:33:29 86

原创 协程

协程,又称微线程,纤程,英文名Coroutine。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。例如:def A() :print ‘1’print ‘2’print ‘3’def B() :print ‘x’print ‘y’print ‘z’由协程运行结果可能是12x3yz。在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A。但协程的特点在于是一个线程执行。2)协程和线程区别那和多线程比,协

2020-07-31 16:31:18 81

原创 线程切换需要保存哪些上下文

线程在切换的过程中需要保存当前线程Id、线程状态、堆栈、寄存器状态等信息。其中寄存器主要包括SP PC EAX等寄存器,其主要功能如下:SP:堆栈指针,指向当前栈的栈顶地址PC:程序计数器,存储下一条将要执行的指令EAX:累加寄存器,用于加法乘法的缺省寄存器...

2020-07-31 16:23:40 3370

原创 软链接和硬链接

为了解决文件共享问题,Linux引入了软链接和硬链接。除了为Linux解决文件共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若1个inode号对应多个文件名,则为硬链接,即硬链接就是同一个文件使用了不同的别名,使用ln创建。若文件用户数据块中存放的内容是另一个文件的路径名指向,则该文件是软连接。软连接是一个普通文件,有自己独立的inode,但是其数据块内容比较特殊。...

2020-07-31 16:19:49 61

原创 内存溢出

1、内存溢出指程序申请内存时,没有足够的内存供申请者使用。内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误内存溢出原因:内存中加载的数据量过于庞大,如一次从数据库取出过多数据集合类中有对对象的引用,使用完后未清空,使得不能回收代码中存在死循环或循环产生过多重复的对象实体使用的第三方软件中的BUG启动参数内存值设定的过小...

2020-07-31 16:18:47 66

原创 内存泄露

内存泄漏是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的分类:1、堆内存泄漏 (Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak

2020-07-31 16:18:19 79

原创 死锁产生的必要条件

1.互斥条件:一个资源每次只能被一个进程使用。2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3.不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。...

2020-07-31 16:16:40 120

原创 Linux的4种锁机制

互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒读写锁:rwlock,分为读锁和写锁。处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。 注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)。适用于读取数据的频率远远大于写数据的频率的场合。

2020-07-31 16:15:44 499

原创 Linux常用指令

file 辨识文件类型 -f 指定文件名、-v 显示版本信息find 在指定目录下查找文件 -type 指定文件类型、-name 指定文件名which 查找文件 -w 指定输出宽度、-V 显示版本信息whereis 查找文件 只能查找二进制文件、源代码和 man 手册,一般文件的定位需要用 locateread 从标准输入读取数值 -n 指定输入长度、-p 指定提示信息ftp 文件传输 -v 显示执行过程、-n 不使用自动登录cd 切换当前工作目录 ~ 根目录、. 当前目录,… 上层目录。te

2020-07-31 15:41:01 50

转载 如何实现udp的可靠传输

UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响。传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。1、添加seq/ack机制,确保数据发送到对端2、添加发送和接收缓冲区,主要是用户超时重传。3、添加超时重传

2020-07-31 11:01:08 176

原创 MYSQL学习笔记

#SELECT的用法select检查单列,多列(列名之间以逗号分隔),所有列(列名用星号*通配符来代替),检索不同的行(列名前加关键字distinct),限制结果(limit 3,4从第3行开始返回4行,第一行是0,默认从第一行开始)及完全限定的表名。#排序检索数据select返回的数据并没有特定的顺序,使用order by可以进行升序排列;order by后面可以由多个列名,先对第一列进行排序,在第一列相同的情况下按第二列排序。想要降序可在要降序的列名后加DEC关键字,DEC只作用于单列。#过滤数

2020-07-29 15:52:41 97

原创 常见的nosql数据库

noSQL数据库其实有很多:基于K-V:Redis, Voldemort, Oracle BDB基于列存储:Cassandra, HBase, Riak.基于文档型:CouchDB, MongoDB

2020-07-28 21:33:33 252

原创 数据库空值和NULL的概念

“空值” 和"NULL"的概念:1:空值(’’)是不占用空间的,判断空字符用 = ‘’ 或者 <> ‘’ 来进行处理;2: NULL值是未知的,且占用空间,不走索引;判断 NULL 用 IS NULL 或者 is not null , SQL 语句函数中可以使用 ifnull ()函数来进行处理.注:在进行 count ()统计某列的记录数的时候,如果采用的 NULL 值,会别系统自动忽略掉,但是空值是统计到其中...

2020-07-28 21:24:44 4238

转载 关系数据库事务的特性

关系型数据库遵循ACID规则事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:1、A (Atomicity) 原子性原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。2

2020-07-28 21:18:23 387

原创 宏定义和內联函数的区别

带参数的宏和普通函数 带参数的宏可以代替函数。宏的替换发生在预编译阶段,占据编译时间;函数调用发生在运行阶段,占据运行时间。对于一些比较大的函数:1.程序的主要运行时间集中在函数体上,函数调用开销可以忽略不计;2.如果函数体过长,宏替换会增加源码的长度,过长的源程序执行起来系统会频繁换页,导致执行效率变低,而函数则不会增加源程序长度。 基于这两个原因,对于函数体较短的函数,可以用带参数宏来替换,对于函数体较长的函数则不使用宏替换。 1.函数调用时,先求出实参表达式的值,然后带入形参。而使用带

2020-07-20 21:09:54 86

原创 从源码到可执行文件的过程

1.预处理预处理过程主要是处理那些源文件和头文件中以#开头的命令,预处理的规则一般如下:1.对所有的宏定义进行替换2.处理所有条件编译命令3.处理#include命令,将被包含文件的内容插入到该命令所在的位置4.删除所有的注释//和/* … */5.添加行号和文件名标识,便于在调试和出错时给出具体的代码位置6.保留所有的#pragma命令,因为编译器需要使用它们2.编译编译就是把预处理完的文件进行一些列的词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。3.汇编汇编的过程就

2020-07-20 17:23:30 158

原创 C/C++防止头文件被重复包含

头文件包含是一个递归(循环)的过程,如果被包含的头文件中还包含了其他的头文件,预处理器会继续将它们也包含进来;这个过程会一直持续下去,直到不再包含任何头文件,这与递归的过程颇为相似。递归包含会导致一个问题,就是重复引入同一个源文件,如果不做任何处理,不仅会出现重复定义错误,而且不符合编程规范。对此,可以通过宏保护来解决这个问题。#ifndef _HMCSynth_h#define _HMCSynth_h/* 头文件内容 */#endif...

2020-07-20 15:56:46 314

原创 跟谁学提前批笔试题

题目:写一个随机程序,使得1,2,3,4的出现概率为1/8,5,6的概率为1/4。思路:通过rand函数生成1到8的随机数,如果该随机数在1到4,直接输出,;如果是5和6,则输出5;如果是7和8,则输出6。程序如下:int roll_loaded_dice(){ srand((unsigned )time(NULL)); int res=0; int j=rand()%8+1; switch(j) { case 1: res= 1; bre

2020-07-20 10:54:09 316

原创 信号量实现同步和互斥操作

信号量实现同步:1.设同步信号量s=0;2.在前操作后加V操作3.在后操作前加P操作同步就是实现两个进程一前一后执行,当先执行P操作,由于没有资源,会执行block原语,进程暂时挂起,在执行V操作后,执行wakeup原语,唤醒后操作,继续执行。信号量实现互斥:1.设同步信号量s=1;2.两个进程都有P,V操作一个进程执行P操作,互斥信号量S=0,则另一个进程的P操作无法进行,直到第一个进程执行V操作释放资源。...

2020-07-15 20:49:47 954

原创 软件开发流程——V模型

软件开发分为以下步骤:1.需求分析:即首先要明确客户需要的是什么,需要软件作成什么样子,需要有那几项功能,这一点上比较关键的是分析师和客户沟通时的理解能力与交互性。要求分析师能准确的把客户所需要达到的功能,实现方式,等表述出来,给出分析结果,写出需求规格说明书。2.概要设计:架构的实现。搭建架构、表述各模块功能、模块接口连接和数据传递的实现等项事务。3.详细设计:对概要设计中表述的各模块进行深入分析,对各模块组合进行分析等,这一阶段要求达到伪代码级别,已经把程序的具体实现的功能,现象等描述出来。其中需

2020-07-14 15:17:50 5075

原创 内存对齐

计算机内存是以字节(Byte)为单位划分的,理论上CPU可以访问任意编号的字节,但实际情况并非如此。CPU 通过地址总线来访问内存,一次能处理几个字节的数据,就命令地址总线读取几个字节的数据。32 位的 CPU 一次可以处理4个字节的数据,那么每次就从内存读取4个字节的数据;少了浪费主频,多了没有用。64位的处理器也是这个道理,每次读取8个字节。以32位的CPU为例,实际寻址的步长为4个字节,也就是只对编号为 4 的倍数的内存寻址,例如 0、4、8、12、1000 等,而不会对编号为 1、3、11、10

2020-07-01 10:07:03 86

空空如也

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

TA关注的人

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