笔试知识点记录

内联函数

  1. 定义: 当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.
  2. 优点: 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.
  3. 缺点: 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存,
    小巧的代码往往执行更快。
  4. 小于10行的函数
  5. 含有switch和析构函数、循环要谨慎使用内联函数,虚函数和递归函数一般不会内联,内联函数的定义必须放在头文件中,也可以写到单独的ini.h文件中,内联函数可以定义在源文件中,但是此时只有那个源文件可以使用它,而且每个源文件的定义都必须是相同的。定义在类声明中的成员函数将自动地成为内联函数。

struct对齐原则

  • 以最大的为主,其他补齐 在编译器中,
  • 32位, *指针变量占4个字节,64位占8字节。
  • 其他的一样,char :1个字节、 short int : 2个字节、int: 4个字节、unsigned int : 4个字节、float: 4个字节、double: 8个字节、 long: 8个字节、long long: 8个字节、 unsigned long: 8个字节
  • struct和union,struct在内存中的大小等于其成员大小之和,union等于最大元素size。另外,实际分配的内存还需要考虑字节对齐,分配的大小必须是字节对齐的整数倍。在类、结构或者union补齐字节的时候,找它们的成员数据中找字节最大的那个数去衡量如何对齐,假设为z;如果有声明#pragma pack(2),对齐方式是取 pack(n)中n和z的最小值去对齐。
    vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 ,返回值是一个迭代器,指向删除元素下一个元素;

静态变量

  1. 类的静态成员属于整个类 而不是某个对象,可以被类的所有方法访问,子类当然可以调用父类静态成员;
  2. 静态方法属于整个类,在对象创建之前就已经分配空间,类的非静态成员要在对象创建后才有内存,所有静态方法只能访问静态成员,不能访问非静态成员;
  3. 静态成员可以被任一对象修改,修改后的值可以被所有对象共享;
  4. 静态成员由static声明, 常量有由final关键字声明,不可以修改。

动态链接库

  1. 静态链接库装载速度、执行速度快,造成可执行文件的体积较大
  2. 动态链接库更加节省内存并且减少页面交换,适用于大规模软件开发,耦合度小,速度比静态小。

哈夫曼树

  • 带权值的哈夫曼树,权重大的在上面,从最底层开始,权重最小的相加再往上,构建哈夫曼树,建好之后,路径长度等于权重乘以层数,层数从1开始。

数据块问题

在读取磁盘上多个顺序数据块时的效率:I/O中断方式是以字节为单位,DMA控制方式是以一个连续的数据块为单位,I/O通道控制方式是DMA控制方式的发展,是以一组数据块为单位的,即可以连续读取多个数据块。

进程通信

  1. 管道( pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  2. 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  3. 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  4. 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
  5. 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

回调函数

  • 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

大端、小端

  • big endian大端,little endian小端,在字0x01234567中,高位字节的十六进制为0X01,低位字节为0x67. 大端模式是高地址存储数据的低字节,小端模式是高地址存储数据的高字节. 大端从大地址开始存储,小端相反,两者都是从数据低位开始存起;
    例如:
    0x20150810
    如果按照大端模式存储:从低地址到高地址:20 15 08 10
    输出从低地址到高地址:20 15 08 10
    如果按照小端模式存储:从低地址到高地址:10 08 15 20
    输出从高地址到低地址:08 10 20 15

进程和线程

  1. 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
  2. 线程也有自己的特性:线程id,寄存器组的值,线程的堆栈,错误返回码,线程的信号屏蔽码,线程的优先级。
  3. 线程和进程的区别联系:
  4. 进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
  5. 线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
  6. 两者都可以提高程序的并发度,提高程序运行效率和响应时间。
  7. 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
  8. 根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
    1、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
    2、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
    3、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内
    多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间,线程的通信速度更快,切换更快,因为他们在同一地址空间内
    ,线程使用公共变量/内存时需要使用同步机制,因为他们在同一地址空间内

回收分区

在分区分配方案中,回收一个分区时有几种不同的邻接情况,在各种情况下应如何处理? 答:有四种:上邻,下邻,上下相邻,上下不相邻。
(1)回收分区的上邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(2)回收分区的下邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(3)回收分区的上、下邻分区都是空闲的(空闲区个数为2),需要将三个空闲区合并成一个更大的空闲区(空闲区个数为1 ),然后修改空闲区表、
(4)回收分区的上、下邻分区都不是空闲的,则直接将空闲区记录在空闲区表中。

VLAN

  1. VLAN(Virtual Local Area Network)的中文名为”虚拟局域网”。
    虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。VLAN是一种比较新的技术,工作在OSI参考模型的第2层和第3层,一个VLAN就是一个广播域,VLAN之间的通信是通过第3层的路由器来完成的。
    与传统的局域网技术相比较,VLAN技术更加灵活,它具有以下优点:网络设备的移动、添加和修改的管理开销减少;可以控制广播活动;可提高网络的安全性。

网络协议

  1. ICMP是网络层,UDP是传输层,FTP和HTTP是应用层
  2. 目前VPN隧道协议主要有4种:点到点隧道协议PPTP、第二层隧道协议L2TP、网络层隧道协议IPSec以及SOCKS v5协议。其中,PPTP和L2TP工作在数据链路层,IPSec工作在网络层,SOCK v5工作在会话层。
  3. 地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确定其MAC物理地址的一种协议。
  4. HTTP是Hyper Text Transfer Protocol(超文本传输协议 )的缩写,不是二进制协议。cache-control是在HTTP1.1中才有的,指定请求和响应遵循的缓存机制。
  5. RARP 根据MAC地址查找相应的IP地址
    NAT 把公网的IP地址转换为私有的IP地址
    ICMP: Internet Control Message Protocol,控制数据报传送中的差错情况
    DHCP 几种管理网络中的IP地址分配
  6. arp是将ip地址解析为mac,rarp是arp的reverse,将mac解析为ip

交换机为独占带宽,网速一般约等于带宽的1/8-1/10,

指针问题

 int a[5]={1,2,3,4,5};
 int *p=(int *)(&a+1);

&a,p指向数组,+1指向数组的下一个地址。如果是&a[0],则是指向数组第一个数1,+1指向下一个。

继承问题

  • “父 *p=new 子”的情况,会先调用父的构造方法,然后调用子的构造方法,然后如果调用父类和子类都有的方法,则调用父类的。如果父类的方法是virtual的,则调用子类的。
  • 类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
  • 若父类没有无参的构造函数,所以子类需要在自己的构造函数中显示的调用父类的构造函数。
    添加添加super(“父类构造方法的参数”);

设计模式

  1. 首先单例模式肯定降低了资源使用率,保证该类的实例永远只有一个!
  2. 原型模式适用于在初始化信息不发生变换的情况,克隆的方法比较适合,主要的目的是避免重新初始化对象,如果后面需要对新对象进行,还需要区分深拷贝和浅拷贝。无论是深拷贝还是浅拷贝只是复制了资源,并没有降低资源使用率。
  3. 享元模式(Flyweight): 基于共享技术用于把一些共同的信息(或模块)抽象出来,避免了大量相似类的开销,也降低了资源的使用率。

n个顶点的树一定有n-1条边,全连通图的每个顶点都能直接到达其他顶点,所以,n个顶点,m条边的全连通图,至少去掉m-n+1条边才能构成一棵树。

接口

  • 接口是只含有纯虚函数的抽象类,一个类可以实现多个接口,接口不能被实例化。纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。
  • virtual <类型><函数名>(<参数表>)=0;保证程序多态性。

正态分布

正态分布曲线性质中有 :

Pμσ<Xμ+σ=68.3
Pμ2σ<Xμ+2σ=95.4
Pμ3σ<Xμ+3σ=99.7

抽样

一般情况下,不重复抽样的抽样误差要小于重复抽样的抽样误差。
各种检验方法
1. Z检验的条件:样本来自正态分布且方差已知的情况
2. T检验的条件:样本来自正态分布且方差未知的情况,两独立样本T检验主要用于检验两个样本的平均数差异。
3. U检验的条件:应用条件和t检验应用条件基本一致, 只是大样本时用u检验 ,小样本时用t检验,t检验可以代替U检验。

数据库视图

视图包含下列结构是不可以更新的
1:集合运算符 union,union all, intersect,minus
2:distinct关键字
3:group by,order by,connect by,或者start with
4:子查询
5:分组函数
6:需要更新的列不是视图定义的
7:具有连接查询(可以更新键值保存表的数据)
8:违反基表的约束条件;连接视图是指基于多表连接查询创建的视图(一般不容易修改,但通用instead of触发器可以实现修改的功能)

关于红黑树和AVL树:

1 好处 及 用途
红黑树 并不追求“完全平衡 ”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
红黑树能够以 O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。
红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。
当然,红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。
在实际的系统中,例如,需要使用动态规则的防火墙系统,使用红黑树而不是散列表被实践证明具有更好的伸缩性。
典型的用途是实现关联数组

2 AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log2n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。
引入二叉树的目的是为了提高二叉树的搜索的效率,减少树的平均搜索长度.为此,就必须每向二叉树插入一个结点时调整树的结构,使得二叉树搜索保持平衡,从而可能降低树的高度,减少的平均树的搜索长度.
红黑树和avl树都属于自平衡二叉树;
两者查找、插入、删除的时间复杂度相同;
包含n个内部结点的红黑树的高度是o(logn);
TreeMap是一个红黑树的实现,能保证插入的值保证排序

动态开辟空间

new和delete搭配,malloc和free搭配。
注意new int(12)和new int[12]的区别。new int(12)是生成了一个值为12的int变量,new int[12]才是生成一个大小为12的数组。
a是一个数组,应该用delete []a,但是在基本类型数组来说,delete a和delete []a的效果是一样的。如果,a是一个自定义对象的数组,那么只能用delete []a。
关于delete a和delete []a的区别,请参照
http://jazka.blog.51cto.com/809003/230220

时间序列

AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点),所以其本质类似于插值。
MA模型(moving average model)滑动平均模型,模型参量法谱分析方法之一。
ARMA模型(auto regressive moving average model)自回归滑动平均模型,模型参量法高分辨率谱分析方法之一。这种方法是研究平稳随机过程有理谱的典型方法。它比AR模型法与MA模型法有较精确的谱估计及较优良的谱分辨率性能,但其参数估算比较繁琐。
GARCH模型称为广义ARCH模型,是ARCH模型的拓展, GARCH对误差的 方差进行了进一步的建模,特别适用于波动性的分析和 预测。

线性回归

基本假设包括随机干扰下是均值为0的同方差正态分布
在违背基本假设时,普通最小二乘法估计量不再是最佳线性无偏估计量
可以用DW检验残差是否存在序列相关性
一元线性回归的基本假设有
1、随机误差项是一个期望值或平均值为0的随机变量;
2、对于解释变量的所有观测值,随机误差项有相同的方差;
3、随机误差项彼此不相关;
4、解释变量是确定性变量,不是随机变量,与随机误差项彼此之间相互独立;
5、解释变量之间不存在精确的(完全的)线性关系,即解释变量的样本观测值矩阵是满秩矩阵;
6、随机误差项服从正态分布

违背基本假设的计量经济学模型还是可以估计的,只是不能使用普通最小二乘法进行估计。
当存在异方差时,普通最小二乘法估计存在以下问题: 参数估计值虽然是无偏的,但不是最小方差线性无偏估计。

杜宾-瓦特森(DW)检验,计量经济,统计分析中常用的一种检验序列一阶 自相关 最常用的方法。

所谓多重共线性(Multicollinearity)是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。影响
(1)完全共线性下参数估计量不存在
(2)近似共线性下OLS估计量非有效
多重共线性使参数估计值的方差增大,1/(1-r2)为方差膨胀因子(Variance Inflation Factor, VIF)
(3)参数估计量经济含义不合理
(4)变量的显著性检验失去意义,可能将重要的解释变量排除在模型之外
(5)模型的预测功能失效。变大的方差容易使区间预测的“区间”变大,使预测失去意义。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值