1、C+内存在C+中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆:就是那些由 new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个 delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 全局/静态存储区:全局变量和静态变
2、量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C+里面没有这个区分了,他们共同占用同一块内存区。常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。typedef和define的区别#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不管含义是否正确都会进行替换,只有在编译已被展开的源程序时才会发现可能的错误并报错。typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名。静态成员函数的作用主要是为了调用方便,不需要生成对象就可以调用。 malloc/free和new/delete的区别mallo
3、c是c/c+的标准库函数,new是c+的运算符。malloc向系统申请分配指定size个字节的内存空间,返回类型是void* 类型。void* 表示未确定类型的指针。C,C+规定,void* 类型可以强制转换为任何其它类型的指针。new动态创建对象时,只需指定其数据类型,而不必为该对象命名,new表达式返回指向该新创建对象的指针,我们可以通过指针来访问此对象。 用类创建一个对象,怎么检测对象是否创建失败如果创建失败,对象的值应该为NULL,如果对象不为NULL表明创建成功。 指针和引用的区别1. 指针保存的是所指对象的地址,引用是所指对象的别名,指针需要通过解引用间接访问,而引用是直接访问;2
4、. 指针可以改变地址,从而改变所指的对象,而引用必须从一而终;3. 引用在定义的时候必须初始化,而指针则不需要;4. 指针有指向常量的指针和指针常量,而引用没有常量引用;5. 指针更灵活,用的好威力无比,用的不好处处是坑,而引用用起来则安全多了,但是比较死板。volatile的作用 因为访问寄存器比访问内存单元的速度要快很多,所以编译器一般都会作减少内存存取的操作,即将内存变量缓存到寄存器,但当使用volatile声明变量的时候,系统总是重新从它所在的内存读取数据,不会再做代码优化。数据结构操作系统进程与线程进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,进程是系统进行资源分配和调
5、度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. 它与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局
6、部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。优缺点:线程执行开销小,但不利于资源的管理和保护;进程刚好相反。进程间的通信管道( pipe ):又称无名管道,是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。有名管道 (named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。信号量( semophore ):信号量是一
7、个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。消息队列( message queue ):消息队列是由消息组成的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。信号 ( sinal ):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。共享内存( shared memory ):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享
8、内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。套接字( socket ):套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。线程间的通信方式锁机制:包括互斥锁、条件变量、读写锁。互斥锁提供了以排他方式防止数据结构被并发修改的方法。读写锁允许多个线程同时读共享数据,而对写操作是互斥的。条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。信号量机制(Semaphore):包括无名线程信号量
9、和命名线程信号量。信号机制(Signal):类似进程间的信号处理。计算机网络TCP与UDP的区别TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。TCP对应的协议和UDP对应的协议TCP对应的协议:(1)FTP:定义了文件传输协议,使用21端口。(2)Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。(3)SMTP:邮件传送协
10、议,用于发送邮件。服务器开放的是25号端口。(4)POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。UDP对应的协议:(1)DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。(2)SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。(3)TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。TCP协议是如何来保证传输的可靠性1.合理分片
11、:数据被分割成TCP认为的最合适发送的数据块;2.当TCP发出一个报文段后,就启动一个定时器,用来等待目的端确认收到这个报文段;若没能及时收到这个确认,TCP发送端将重新发送这个报文段(超时重传);3. TCP收到一个发自TCP连接的另一端的数据后就将发送一个确认,不过这个确认不是立即就发送,而是要推迟几分之一秒后才发送;4. TCP将保持它的首部和数据的检验和;5. 流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。6. 拥塞控制:当网络拥塞时,减少数据的发送。在浏览器中输入后执行的全部过程1、 客户端浏览器通过DNS解析到的IP地址220.181.27.48
12、,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.181.27.48,然后通过TCP进行封装数据包,输入到网络层。2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。3、客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路
13、径到达服务器。4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。http中的GET和POST有什么区别GET一般用于获取/查询资源信息,POST一般用于更新资源信息。Get传输的数据量小,因为受URL长度限制,但效率较高;POST可以传输大量数据,所以上传文件时只能用POST方式;GET是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;POST较GET安全性较高;数据库 当前应用最广泛的数据模型是关系模型
14、。E-R模型属于概念模型也即信息模型。 层次模型,采用的是树(二叉树)的结构来表达实体和实体间联系网状模型,采用的是图的结构来表达实体和实体间联系对象模型,就是用的面向对象的思想,用对象和其之间的联系来表达实体和实体间联系。关系模型,就是用的二维表。外模式有多个,概念模式和内模式只有一个。实体完整性规则规定基本关系的所有主属性都不能取空值。外模式、概念模式在逻辑设计阶段得到,内模式在物理设计阶段得到。模式(Schema) 定义:也称逻辑模式或概念模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。外模式(External Schema) 定义:也称子模式(Subschem
15、a)或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。内模式(Internal Schema) 定义:也称存储模式(Storage Schema),它是对数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。共享锁(S锁)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。排他锁(X锁)又称写锁。若事务T对数据对象A加上X锁,事务T可
16、以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。数据库系统包括数据库和数据库管理系统。事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。是恢复和并发控制的基本单位。 事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸多操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的
17、。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b|a,c| a,b,c 4种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。系统设计1需求分析阶段,分析用户需求2概念设计阶段,设计E-R图形3逻辑设计阶段,设计表格5物理设计阶段,设计数据库的存储方式和存储路径6实现阶段7实施维护阶段