1.IPV6的地址长度为128位
2.Linux参考了unix的内核结构,但是整个内核是重新编写的,Linux图形界面有KDE、GNOME,并且符合POSIX标准
3.关于锁的理解:内存中的一个整数型,拥有两种状态:空闲和上锁 ;属性:(互斥)一个资源在任意的时刻只能被一个进程/线程占有;(同步)在多线程/多进程里面,所有的操作都是并行的,而且线程/进程的调度都是操作系统完成的,即保持一定的顺序性。想要实现同步,就要用到互斥,防止竞态发生。—信号量:信号量是为了解决同步的问题,信号量用一个线程去实现,一个线程去接收,其中有p,v原语操作,p(s-1,减后仍大于等于0,进程继续执行,小于0进程阻塞进入与该信号对应的队列种),v(s+1,若大于0,进程执行,小于等于0,则将该信号从等待队列种唤醒,返回原进程继续执行或转进程调度),只要相关数据的读写访问是互斥的那么表现的就是原子性(指令有cpu一次完成);–互斥量:解决互斥问题 ,互斥量有一个线程实现和接收。
4.进程、线程、多线程:1)进程:程序的一次执行(处理机上的),基本的分配单元和执行单元,进程是一个实体,每个进程都有自己的地址空间,有三个状态:执行,就绪,阻塞;2)程序:程序是指令和数据的集合,是静态的: 3)线程:一个进程可以有多个线程,至少有一个线程,在引入线程的操作系统中,进程是分配资源的基本单位,线程是独立运行和独立调度的基本单位,线程比进程小,开销小,提高系统多个程序之间的并发执行的程度。4)多线程:为了同步完成多项任务,提高资源使用率,不是为了提高运行效率。5)进程和线程区别:进程有独立的地址空间,线程没有,只有堆栈和局部变量,一个程序崩溃在保护模式不会对其他进程产生影响,但在切换时耗费资源效率差。
5.对进程里子进程获得父进程所有的堆栈数据,而线程会与进程的其他线程共享数据,拥有自己的栈空间。
6.
7.哈希算法在信息安全中的应用:1.文件校验 2.数字签名 3.鉴权协议
8.类中变量的赋值顺序时变量申明的顺序,根构造函数顺序无关
9.关于MYSQL:1):BTree索引是大多数MYSQL存储引擎的默认搜索引擎,不是B+Tree。2)哈希索引只包含哈希值和行索引,而不存储字段,所以不能使用索引中的值来避免读取(即不能用哈希索引来覆盖索引扫描). 3)空间索引不会要求where子句使用索引,最左前缀可以全方位索引数据,可以高效使用任何数据组合查找,配合使用mercontains()函数使用。 4)哈希索引是memory引擎表的默认索引类型,memory可支持BTree。5)索引将随机I/O变为顺序I/O。
10.关于HTTP1.0和HTTP1.1:HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
HTTP 1.1则支持永久连接, 并且默认使用永久连接. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).
算法:用到贪心算法的是:Dijkstra、Prim、 Kruskal
未用到的是:KMP和FLOYD算法,其中FLOYD采用类似于动态规划的思想
迪杰斯特拉(Dijkstra)
贪心策略是每次选可达的点中距离源点最近的点进行扩展,即贪心选取最短距离的点
库鲁斯卡尔(Kruskal)
贪心策略是每次选最短的边(刨除成环的边)来作为最小生成树,即贪心最短边
普里姆算法(Prim)
贪心策略是每次选可达的点中距离曾经扩展过的点中任意点的最短距离,类似Dij,只是不是找距离源点的最短距离
KMP
贪心策略0.0 不是贪心
是动态规划,动态规划的是当前状态失败之后上一次匹配的位置(求的是最长的与前缀子串匹配的左子串)
11.Tcp支持的协议:Telnet、ftp、smtp等;udp支持的协议:nfs(网络文件系统)、snmp(简单网络管理)、dns、tftp等
12.关于继承中构造函数和析构函数:不管基类的析构函数加不加virtual,只要申明的是基类的指针,即使实际指向的是派生类,也不会调用派生类的析构函数。如果申明的是派生类的指针,并且指向派生类,那么会先执行派生类的析构函数在之后是基类的析构函数,构造函数是顺序执行的。
13.MVC框架的思路就是将业务逻辑、数据、界面显示分离。Controller注入model和services。
StrangeIOC是根据控制反转和解耦原理设计的控制反转就是把程序代码直接操控的对象调用权交给容器,通过容器来实现对象组装的装配和管理。依赖注入:应用组件不应该负责查找资源或者其他的依赖的写作对象,配置对象的工作有IOC容器负责。
14.lamdba表达式(简化语法):是一个匿名函数(没有函数名的函数),实现闭包,不必通过函数调用,每次都传递相应的值,aoto编辑器自动推断变量类型
capture mutable ->return-type{statement} 捕捉列表:参数列表:修饰符:返回类型:函数体 lambda表达式可以引用它之外申明的变量,这些变量的集合叫做一个闭包,申明在[]里面,简化语法。其实for_each就是一个模板函数,将for循环语句封装起来,前面两个参数都是迭代器,第三个参数是使用一个函数指针(或仿函数),其功能是对每一个迭代器所指向的值调用仿函数
15.内联函数:编辑->预处理->汇编->编译->链接->运行。编译的过程是可执行程序(有一组机器语言指令组成)执行函数指令的时候,程序及将在函数调用后立即存储该指令的内存地址,并将函数参数赋值到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需要将返回值放入寄存器内,然后跳回到地址被保存的指令处);内联函数:内联函数提供了另外一种选择,编译器将使用相应的函数代码替换函数调用。因此内联函数的运行速度比常规函数稍快,但代价是占用更多的内存。