自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

转载 进程产生死锁的四个必要条件

转自:https://blog.csdn.net/jyy305/article/details/70077042死锁产生的四个必要条件互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获...

2018-08-10 10:34:45 3601

原创 C语言知识点

1.C语言之父是丹尼斯·里奇,他不仅是C语言之父还是UNIX之父;  2.C语言的三个特点(为什么嵌入式的开发选择C语言为开发语言)(1)运行的效率高:C语言的目标代码效率一般只比汇编程序低10%~20%,因此在同类的语言中,C语言具有生成目标代码质量高、程序执行的效率高的优点。(2)代码的移植性好:C语言有一个突出的优点就是适用的范围大,适合于DOS,UNIX、Linux、Windo...

2018-08-09 21:18:28 391

原创 C++语法学习(8)

1.序列式容器(Sequence containers)      每个元素都有固定位置--取决于插入时机和地点,和元素值无关。      vector、deque、list  关联式容器(Associated containers)      元素位置取决于特定的排序准则,和插入顺序无关       set、multiset、map、multimap2.迭代器从作用上来说是最基本的...

2018-08-08 16:01:19 172

转载 关于TCP三次握手

TCP:SYN ACK FIN RST PSH URG简析 三次握手Three-way Handshake  一个虚拟连接的建立是通过三次握手来实现的 1. (B) --> [SYN] --> (A)  假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接.  注意: 一个 ...

2018-08-04 14:25:53 405

原创 含有虚函数,虚继承的类的大小

当类中含有虚继承时(在vs环境下,linux环境下有歧义)1. 派生类对象中会添加一个指针,该指针指向虚继承的基类,称为虚类指针(cPtr)。每一个指针只指向其中一个虚继承的类,也就是说,虚继承了几个类,就会有几个cPtr。    2. 父类当中的成员变量、虚函数指针(vPtr)、虚类指针(cPtr)仍然会被复制到派生类当中。但在不同继承模式下,vPtr和cPtr的效果是不同的。   ...

2018-08-02 14:55:24 655

原创 C++语法学习(7)

1.函数模板函数模板由模板说明和函数定义构成模板说明的类属参数至少在函数定义中出现一次函数参数表中可以使用类属类型参数,也可以使用普通类型2.函数模板不允许自动类型转化普通函数能够进行自动类型转换3.当函数模板遇到普通函数1 函数模板可以像普通函数一样被重载  2 C++编译器优先考虑普通函数  3 如果函数模板可以产生一个更好的匹配,那么选择模板  4 可以通过空...

2018-08-01 19:32:51 156

原创 C++语法学习(6)

1.函数重写在子类中定义与父类中原型相同的函数函数重写只发生在父类与子类之间重载与重写区别:重载:同一个作用域;      子类无法重载父类函数,父类同名函数将被覆盖;      重载是在编译期间根据参数类型和个数决定;重写:发生于父类、子类之间;      父类和子类函数有相同的函数原型;      使用virtual关键字声明后能够产生多态;      运行期间根据具体对...

2018-07-30 19:45:26 191

原创 C++基础语法学习(5)

1.继承应用的场景1) 当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。 2) 当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,也可以使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以节省代码,也方便后续修改成员。2.三种继承方式1) public继承方式基类中...

2018-07-29 09:39:34 238

原创 面试题笔记(五)

1.进程的内存空间有一块是专门用于NULL指针分配的分区,这个分区的地址空间是禁止进入的,因此就会发生内存访问违规现象,同时该进程将终止运行2.对于类成员函数,并不是一个对象单独对应一个成员函数体,而是此类的所有对象公用这个成员函数体,当成员被编译后,该成员函数的地址即被确定,我们在调用类成员函数时,会将当前对象的函数指针this传递给成员函数3.打印结果为...

2018-07-29 09:06:37 139

原创 C++基础语法学习(4)

1. 如果能作为左值则返回引用,例如a+b不能作为左值,a=b可作为左值,a++不能作为左值,其返回一个值,是常量,++a可作为左指,返回a这个变量2.当无法修改左操作数的类时,使用全局变量进行重载,如<<和>>,因为无法修改ostream和istream,只能用友元函数进行重载,若用成员函数,成员变量会作为左值,而在cout中,成员变量只能作为右值,发生冲突3.=...

2018-07-27 10:58:22 196

原创 关于有些运算符只能用成员函数重载

1.=,[],(),->只能通过成员函数来重载C++规定赋值运算符“=”只能重载为类的非静态成员函数,而不可以重载为类的友元函数。不能重载为类的静态成员应该比较容易理解,因为静态成员函数是属于整个类的,不是属于某个对象的,它只能去操作类静态数据成员。而赋值运算符“=”是基于对象操作的。那么为什么赋值运算符不可以重载为类的友元函数?像同样都是双目运算符的+为什么它就可以呢?...

2018-07-27 10:12:16 25136 9

原创 面试题笔记(四)0

1.在主函数中会优先调用局部变量value,若没有才会调用全局变量,而函数printvalue()打印的是全局变,若无 全局变量则会编译报错2.i++与++i的效率问题内建数据类型的情况,效率没有区别自定义数据类型的情况,++i效率更高,因为前缀式可以返回对象的引用,而后缀式只能返回对象的值,所以导致在大对象的时候产生了较大的复制开销,引起效率较低现在让我们再考虑自定义...

2018-07-25 21:11:11 254

原创 C++基础语法学习(3)

1.对象初始化列表:当成员变量是一个对象,且该对象没有无参构造函数1.必须这样做:如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,那么他将无法完成第一步,就会报错。 2、类成员中若有const修饰,必须在对象初始化的时候,给const ...

2018-07-24 21:08:03 680

原创 C++基础语法学习(2)

1.面向对象语言开发效率高,运行效率下降百分之十左右2.private 私有,类内部调用   protected 受保护(用于继承)   public 公有,内外都可以调用3.class中默认是私有权限  struct 中默认是公有的4.constructor 构造函数①不用用户调用,系统自动调用②名字与类名相同③无返回值(c++中唯一无返回值的函数) ...

2018-07-23 17:10:17 142

原创 面试题笔记(三)

1.链队(队列)先进先出,允许插入的一端为队尾,允许删除的一端为队头 2.数据的逻辑结构分为线性结构和非线性结构。线性结构:一对一关系非线性:树形结构:一对多关系图形或网状结构:多对多关系集合:结构中的数据元素之间除了“同属于一集合”的关系外,别无其他关系                           数据结构:相互之间存在一种或多种特定关...

2018-07-23 16:38:59 422

原创 面试题笔记(二)

1.转义字符【解释】首先要明确该字符串中包含的转义字符,”a \b re \’ hi \' y \\ \b ou \n”中的转义字符(带下划线的部分)共有6个,其中’\b’是退格符,输出时将光标往左边回退一个位置,‘\’’为单引号字符,’\\’为\字符,’\n’为回车换行符。所以显示的结果为C。 2.解释】因p是指针变量,在scanf中不能再使用&p或*p来接收...

2018-07-21 09:01:49 187

原创 面试题笔记(一)

1.关于求质因数的程序 如20=2*2*5 2. 2 3 4 unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 请问p1+5= 什么?p2+5= 什么?...

2018-07-20 09:45:33 2898

原创 char*与char[ ] 的区别

看上图程序,调用returnstr()时可以打印出abc,但是调用returnstr1()时不能打印出来且编译时候警告该函数返回了局部变量的地址char*p = "abc";这里的p指向了一个字符串常量,该常量是存储在静态存储区的,所以其内容是不可改变的,但是p指针可以指向其他地址。如:p[1] = 'c'; //运行时出错,段错误p = "abcd" //可以运行 c...

2018-07-20 09:38:07 200

原创 关于函数返回局部变量

一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意...

2018-07-19 17:29:26 178

原创 C++基础语法学习1

1.命名空间 namespace 为什么要使用命名空间:一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。::作用域限定符 用来限定变量的所属域 2.c++中可以使用 for(int i = 0; i <10; i++)循环,C语言中会语法报错,此...

2018-07-19 10:28:08 245

原创 C语言网络聊天室程序

共分为四部分,服务器两个,客户端两个1.my_sever.c//******************************************************////鐢熸垚鏃ユ湡 2017骞?2鏈?4鏃?  浣滆€?闄堝浆   ////璇ユ枃浠朵负鑱婂ぉ瀹ゆ湇鍔″櫒涓荤▼搴忥紝涓昏杩涜濂楁帴瀛楃殑寤虹珛锛岀粦瀹氾紝浠ュ強瀵瑰鎴风鐨勭洃鍚粠鑰屽疄鐜板悇绉嶅姛鑳?/...

2018-07-17 16:37:11 2187 3

原创 C语言聊天室项目说明书

网络聊天室项目说明项目的目的和意义该聊天室项目为利用linux下C语言网络编程相关知识,采用Server/Client,即服务器与客户端的基本框架实现。整个项目涉及了socket套接字,线程,嵌入式数据库sqlite3,select模型等多个知识模块,服务器整体采用select模型,并不断监听客户端,客户端中起一个线程,用来实时接受服务器发送的信息。该聊天室项目可模拟当今的聊天工具中的各...

2018-07-17 16:20:06 3637 2

转载 算法复杂度

算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。 (算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间时间复杂度 计算时间复杂度的方法:用常数1代替...

2018-03-02 14:22:36 270

原创 笔试训练5

1.char* a, char* b;while(*b = *a){    a++;    b++;}作用是将a所指的字符串赋给b所指的空间,while(*b = *a)相当于while((*b = *a) != '\0'2.四层网络模型与七层网络模型OSI七层网络模型第一层 物理层   第一层负责最后将信息编码成电流脉冲或其它信号用于网上传输。它由计算机和网络介质之间的实际界面组成,可定义电气信...

2018-02-28 09:23:37 419

原创 笔试训练4

1.某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是多少可能会发生死锁的上限资源数,为每个进程均只差一个资源的情况,为9个,只要再加一个资源就不可能发生死锁了,所以不会发生死锁的最少资源数为10。2.内存相关关于内存正确的是A.内存的存取速度不能低于cpu速度,否则会造成数据丢失B.程序只有在数据和代码等被调入内存后才能运行C.采用虚拟内存技术后程序可以在硬盘上直接...

2018-02-28 08:38:41 669 1

原创 笔试训练3

1.静态链表中指针表示的是数组下标在某些语言中指针是不被支持的,只能使用数组来模拟线性链表的结构.在数组中每个元素不但保存了当前元素的值,还保存了一个”伪指针域”,一般是int类型,用于指向下一个元素的内存地址.这种链表在初始时必须分配足够的空间, 也就是空间大小是静态的, 在进行插入和删除时则不需要移动元素, 修改指针域即可,所以仍然具有链表的主要优点(快速插入和删除).有些高级语言中没有“指针...

2018-02-27 16:32:42 1069

原创 笔试训练2

1.ls -al各列的含义drwx------+  9 zyu  staff    306  8 19 21:15 Picturesdrwxr-xr-x+  6 zyu  staff    204  3 30 22:09 Public第一列:文件的类型与权限第一个字母代表文件类型:d目录,-文件,l链接文件,b设备文件里的可供存储的接口设备,c表示设备文件里的串行端口设备,如键盘鼠标等一次性读取设...

2018-02-26 14:44:13 180

原创 网络编程预习2

1.TCP与UDP的区别TCP:传输控制协议,为应用程序提供可靠的通信连接,适合一次传输大批数据的情况,并 适用要求得到相应的应用程序UDP:用户数据包协议,提供无线连接通信,且不对传诵包进行可靠的保证,适合一次传输少量数据2.TCP协议的含义TCP是TCP/IP体系中面向连接的传输层协议,它提供全双工和可靠交付的服务,采用许多机制来确保端到端结点之间的可靠数据传输,如采用

2017-12-06 16:09:53 171 1

原创 网络编程预习1

1.TCP/IP的几个重要特性1.Connectionless Packet Delivery Service,是其他网络服务的基础,几乎所以数据包交换网络都提供这种服务。2.Reliable Stream Transport Service,因为数据包交换并不能确保每一个数据包的可靠性,因此就需要通信软件来自动侦测和修复传送过程中可能出现的错误。3.Network Technolog

2017-12-06 15:10:48 172

原创 操作系统基础训练

1、简述Linux进程内存空间分为哪几个段?作用分别是什么?3个段,数据段,代码段,堆栈段数据段:存放全局变量,静态变量static,其中BSS数据段存放为初始化的全局变量和static,数据段存放初始化的全局变量。代码段:存放程序的代码的数据。堆栈段:存放子程序的返回地址,子程序的参数以及程序的局部变量等。2、如何查看进程的信息(线程数):1.使用top命令,

2017-12-06 11:28:23 237

原创 多线程编程预习

1.何谓线程线程是进程的一个实体,死cpu调度很分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点运行中必不可少的资源,但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 2.一个线程包含的内容1.一个指向当前被执行命令的指令指针。2.一个栈3.一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值。4.一

2017-11-30 15:34:10 203

原创 进程间通信方式预习2

1.接口mmap()的使用方法mmap()系统调用使得进程之间可以通过映射同一个普通文件实现共享内存,普通文件被映射到地址空间后,进程可以向访问普通文件一样对文件进行访问,不必再调用read(),writr()等操作。Mmap()系统调用并不完全是用于共享内存设计的,它本身提供了不同于一般对普通文件的访问形式,进程可以像读写内存一样对普通文件的操作,而posix或系统v的共享内存ipc则纯粹用

2017-11-30 14:38:56 175

原创 进程间通信方式预习1

1.linux进程间通信的目的是什么?1.数据传输,一个进程将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。2.共享数据,多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程立刻看到。3.通知事件,一个进程通知另一个或一组进程发生了某件事。4.资源共享,多个进程之间共享同样的资源。需要内核提供锁和同步机制。5.进程控制,有些进程希望完全控制另一个进程的

2017-11-29 14:58:26 180

原创 进程控制编程预习

1.为什么需要多进程,为何需要并发有了并发技术,就是可以在同一时间同时执行多条任务的技术,程序不仅可以规规矩矩的一条线执行,可以多条线同时执行,这样就可以实现更加强大的功能,提供更多的服务,所以并发是必不可少的。2.何谓进程调度在linux中,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等

2017-11-23 10:16:40 250

原创 Linux文件结构

1.Linux文件分为哪几类,有什么含义(1)普通文件(regular):存在于外部存储器中,用于存储普通文件。(2)目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。(3)管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道FIFO。(4)套接字文件(socket):一种用于网络间通信的特殊文件。(5)链接文件(link);用于间

2017-11-22 15:27:32 181

原创 栈章节预习问答

1.两栈的共享空间是如何实现的 如果我们有两个相同类型的栈,我们为他们各自开辟了数组空间,极有可能第一个栈已经满了,再进栈就溢出了,而另一个栈还有很多存储空间空闲。这时,我们完全可以用一个数组两存储两个栈。      我们的做法如下图,数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为数组的末端,即下标为数组长度n-1处。这样,两个栈如果增加元素

2017-11-03 10:19:19 434

原创 数据结构之线性表预习

1.简述线性表中顺序存储结构的含义及主要元素描述顺序存储结构需要三个属性: 1. 存储空间的起始位置:数组 data , 它的存储位置就是存储空间的存储位置 2. 线性表的最大存储容量 3. 线性表的当前长度数组长度 与 线性表长度区别 - 数组长度: 即存放线性表的存储空间的长度,存储分配后这个量一般是不变的。线性表长度: 即线性表中数据元素的

2017-10-27 10:44:45 477

原创 预处理、结构体预习

1. 带参数的宏与自定义函数的区别  1.函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。  2.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。  3.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问

2017-10-26 14:57:28 330

原创 C语言函数基础预习

1.函数的声明与定义函数的声明就是声称一个函数的名字,只是说明函数的名字,不涉及函数的实现,即没有函数体,所以函数的声明只包括前三个部分。函数的定义就是确定一个函数的意义,即让函数具有某项功能,但是这里可不是只有函数体,你要指明这个函数体就是那个函数,所以函数的定义包含了一个函数的所以部分。2.形式参数与实际参数的区别形式参数就是定义函数时候的参数表,只是定义了调用时参

2017-10-19 18:24:47 760

原创 C语言指针基础预习

1.指针的类型与指针所指向的类型的区别从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:(1)int*ptr;//指针的类型是int*(2)char*ptr;//指针的类型是char*(3)int**ptr;//指针的类型是int**

2017-10-19 17:58:01 350

空空如也

空空如也

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

TA关注的人

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