目录

141. 动态连接库的两种方式?

142. IP组播有那些好处?

143. 列举几种进程的同步机制及优缺点

144. 什么是预编译,何时需要预编译?

145. int(*s[10])(int)表示的是什么?

146. 交换两个变量的值,不使用第三个变量.即a=3,b=5,交换 后 a=5,b=3.

147. 要对绝对地址0x100000赋值,我们可以用unsigned int)0xl00000=1234;那么要是想让程序跳转到绝对地址是 0x100000去执行,应该怎么做?

148. 线程与进程的区别和联系?线程是否具有相同的堆栈?d是否有独立的堆栈?

149. 用两个栈实现一个队列的功能?要求给出算法和思路.

150. 已知一个单向链表的头,请写出删除其某一个结点的算 法,要求,先找到此结点,然后删除。

151. 堆栈溢岀一般是由什么原因导致的?

152. 阅读下面代码,回答问题.

153. static全局变量与普通的全局变量有什么区别? static局部变量和普通局部变量有什么区别?

154. C++中为什么用模板类。

155. 如何理解软件的健壮性和高可靠性。

156. 了解哪些linux内核的模块。

157. 画岀三次握手和四次挥手流程图。

158. 请阐释https建立连接过程。

159. innodb引擎的4大特性。

160. MylSAM 和 InnoDB select count(*)哪个更快,为什么?


141. 动态连接库的两种方式?

调用一个DLL中的函数有两种方法:
1. 载入时动态槌接(load-time dynainic linking),模块非常明确调用某 个导岀函数,使得他们就像本地函数一样。这需要槌接时槌接那些函数所在 DLL卽寻入库,导入库向系统提供了载入DLL时所需的傷息:及DLL函数定位。
2. 运行时动态槌接(run-time dynainic linking),运行时可以通过 LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调 用GetProcAddress获取DLL函数的岀口地址,然后就可以通过返回的函数 指针调用DLL函数了如此即可避免导入库文件了


142. IP组播有那些好处?

Internet ±产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽 的急剧消耗和网絡拥挤问题。组播是一种允许一个或多个发送者(组播源) 发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以 大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条 链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络 资源的前提下保证服务质量。


143. 列举几种进程的同步机制及优缺点

1) 信号量机制:一个信号量只能置一次初值,以后只能对之进行p操作或 V操作。
由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统, 这是它最大的弱点。
2) 自旋锁:旋锁是为了保护共享资源提岀的一种锁机制。
调用者申请的资源如果被占用,即自旋锁被已经被别的执行单元保持,则调 用者一直循环在那里看是否该自旋锁的保持着已经释放了锁.自旋锁是一 种比较低级的保护数据结构和代码片段的原始方式,可能会引起以下两个问
题;
(1) 死锁
(2) 过多地占用CPU资源
3) 部:信号量机制功能强大,但使用时对信号量的操作分散,而且难以 控制,读写和維护都很困难。因此后来又提岀了一种集中式同步进程一一管 程。其基本思想是将共享变量
和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构 成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。
4) 会合:进程直接进行相互作用
5) 分布式系统:由于在分布式操作系统中没有公共内存,因此参数全为值 参,
希且不可为指针。
优缺点:
信号量(Seiwhore)及PV操作
优:PV操作能够实现对临界区的管理要求;实现简单;允许使用它的代码休 眠,持有锁的时间可相对较长。
缺:信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的
弱点。信号量机制功能强大,但使用时对信号量的操作分散,而且难以控制, 读写和維护都很困难。 加重了程序员的编码负担;核心操作P-V分散在各用户程序的代码中,不易 控制和管理;一旦错误,后果严重,且不易发现和纠正。
自旋锁:
优:旋锁是为了保护共享资源提岀的一种锁机制;调用者申请的资源如 果被占用,即自旋锁已经被别的执行单元保持,则调用者一直循环在那里看 是否该自旋锁的保持者
已经释放了锁;低开销;安全和高效;
缺:自旋锁是一种比较低级的保护数据结构和代码片段的原始方式,可能会 引起以下两个问题;
(1) 死锁
(2) 过多地占用CPU资源
传统自旋锁由于无序竞争会导致“公平性"问题
优:集中式同步进程一一管程。其基本思想是将共享变量和对它们的操作 集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之 间联系清晰,便于維护和修改,
易于保证正确性。
缺:如果一个分布式系统具有多个CPU,并且每个CPU拥有自己的私有内存, 它们通过一个局域网相连,那么这些原语将失效。而管程在少数几种编程语 言之外又无
荏使用,并且,这些原语均未提供机器间的信息交换方法。
会合:进程直接进行相互作用
分布式系统:消息和rpc
由于在分布式操作系统中没有公共内存,因此参数全为值参,而且不可为指针


144. 什么是预编译,何时需要预编译?

(1) 总是使用不经常改动的大型代码体
(2) 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编 译选项。在这种
情况下,可以将所有包含文件预编译为一个预编译头
«预编译又称为预处理,是做些代码文本的替换工作
处理#开头的指令,比如拷贝# include包含的文件代码,# define宏定
义的营换,条件编译等
就是为编译做的预备工作的阶段
主要处理#开始的預编译指令
预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放 在程序中的任何位置。常见的预编译指令有:>>


145. int(*s[10])(int)表示的是什么?

int (*s[10])(int)函数指正数组,每个指正指向一个int func(int param) 的函数.


146. 交换两个变量的值,不使用第三个变量.即a=3,b=5,交换 后 a=5,b=3.

Internet上产生的许多有两种解放,一种用算术算法,一种用〃(异或) a=a+b;
b=a-b;
a=a~b;
或者
a二a\;〃只能对 int, char..
b 二 ab
a=a b


147. 要对绝对地址0x100000赋值,我们可以用unsigned int)0xl00000=1234;那么要是想让程序跳转到绝对地址是 0x100000去执行,应该怎么做?

*((void(*) ())0x100000) 0;
先要将0x100000强制转换成函数指针即:(void(*) ())0x100000。然后再调 用它:
*((void(*) ())0x100000)();用 typedef 可以看得更直观些:
typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();


148. 线程与进程的区别和联系?线程是否具有相同的堆栈?d是否有独立的堆栈?

进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序 启动的时候操作系统就帮你创建线程。每个线程有自己的堆栈。DLL中有没 有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行;只有线程拥有堆栈,如果DLL中的代码是 EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈? 如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独 立的堆栈?
以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL 中动态分配的内存,最好是从DLL中刪除,如果你从DLL中分配内存,然后在 EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃.


149. 用两个栈实现一个队列的功能?要求给出算法和思路.

设2仓栈为AB,—开始均为空
将新元素push入栈B
岀队
(1) 判断栈B是否为空;
(2如果不为空,则将栈A中所有元素依次pop岀并push到栈B
(3)将栈B的栈顶元素pop岀 这样实现的队列入队和岀队的平摊复杂度都还是0(1).


150. 已知一个单向链表的头,请写出删除其某一个结点的算 法,要求,先找到此结点,然后删除。

slnodetype *Delete(slnodetype *Head, int key) {
if (Head->number==key) {
Head二P ointer->nex t;
free(Pointer);
break;
}
Back = Pointer;
Pointer = Pointer-〉next :
if (Pointer->nuinber==key) {
Back->next=Point er->next;
free(Pointcr);
break;
}
void delete(Node* p) {
if (Head二Node)
while(p)

151. 堆栈溢岀一般是由什么原因导致的?

1. 函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时 的现场和产生的变量,如果递归调用太深,就会造成栈溢岀,这时递归无法 返回。再有,当函数调用层次过深时也可能导致桟无法容纳这些调用的返回 地址而造成栈溢岀。
2. 动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机 制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空 间使用的是堆空间,动态空间使用不会造成堆溢岀。
3. 数组访问越界。C语言没有提供遡组下标越界检查,如果在程序中岀现数 组下标访问超岀数组范围,在运行过程中可能会内存访问错误。
4. 指针非法访问。指针保存了一个表法的地址,通过这样的指针访问所指向 的地址时会产生内存访问错误。


152. 阅读下面代码,回答问题.

void GetMemoxy (char int num) {
*p = (char *)malloc(nujn);
void Test (void) {
char *str = HULL;
GetMemoxy (&str, 100); strcpy(str, “hello"); printf (str);
}
mainO {
int a[5]={l,2,3,4,5};
int *ptr= (int *) (&a+l);
printf ("%dj *(a+l), + (ptr-1));
} 

请礦i出憶果是?

2,5
解释:
*(a+l)就是a[l],*(ptrT)就是a[4],执行结果是2, 5。&a+l不是首地址+1, 系统会认为加
—个a数组的偏移,是偏移了一个数组的大小(本例是5个int)。int
*ptr二(int*) (&a+l);则
ptr实际是&(a[5])也就是a+5
原因如下:
&a是数组指针,其类型为int (*) [5];而指针加1要根据指针类型加上一定的 值,不同类型的指针+1之后増加的大小不同;a是长度为5的int数组指针,所以要加 5*sizeof(int)® 所
以ptr实际是a [5]。但是prt与(&a+l)类型是不一样的(这点很重要),所以 Ptr-1只会减去
sizeof (int*). a&a的地址是一样的,但意思不一样,a是数组首地址,也就是 aO的地址,
&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[l], &a+l是下一个 对象的地址,
即 a[5].


153. static全局变量与普通的全局变量有什么区别? static局部变量和普通局部变量有什么区别?

static函数与普通函数有什么区别?
全局变量(外部变量)的说明之前再冠以satic就构成了静态的全局变量。全 局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.这两 者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是 整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个 源文件中都是有效的;
而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在 同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于 —个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件 中引起错误。从以上分析可以看岀,把局部变量改变为静态变量后是改变了 它的存储方式即改变了它的生存期.把全局变量改变为静态变量后是改变 了它的作用域,限制了它的使用范围;
static函数与普通函数作用域不同.仅在本文件。只在当前源文件中使用的 函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定 义.对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用 这些函数的源文件要包含这个头文件;
static全局变量与普通的全局变量有什么区别:static全局变量只初使化 —次,防止在其他文件单元中被引用;
static局部变里和普通局部变里有什么区别:static局部变里只被初始化 —次,下一次依据上一次结果值;
static凶数与晋通凶数有什么区别:static凶数在内存中只有一份,晋通函 数在每个被条用中維持一份拷贝;


154. C++中为什么用模板类。

(1) 可用来创建动态増长和减小的数据结构
(2) 它是类型无关的,因此具有很高的可复用性。
(3) 它在编译时而不是运行时检查数据类型,保证了类型安全
(4) 它是平台无关的,可移植性
(5) 可用于基本数据类型


155. 如何理解软件的健壮性和高可靠性。

mt性:
健壮性具体指的是系统在不正常的输入或不正常的外部环境下仍能表现岀 正常的程度.
面向健壮性的编程有以下几点要求或优点:
处理未期望的行为和错误终止
即使终止执行,也要准确/无歧义的向用户展示全面的错误信息
错误信息有助于进行debug
健壮性原则:
总是假定用户为恶意用户,假定自己的代码会失败
把用户想象成一个silly b,可能输岀任何东西
注意,因为用户很silly,最好要返回给用户错误提示信息,而且要详细准 确无歧义!(其实这对debug非常有帮助,尤其是像我这样喜欢用syso找 虫子的白痴CodeDog)
对自己的代码要保守,对用户的行为要开放
面向健壮性编程的原则:
封闭实现细节,限定用户的恶意行为
考虑各种各样的极端情况,没有possible
高可靠性:
高可靠性(high reliability)指的是运行时间能够满足预计时间的一个系 统或组件。
在信息技术领域,高可靠性(high reliability)指的是运行时间能够满足 预计时间的一个系统或组件。可靠性可以用“100%可操作性”或者“从未失 败”这两种标准来表示。一个被广泛应用但却难以达到的标准是著名的“5 个9标准”,就是说工作的可靠性要达到99. 999%o
由于一个计算机系统或网络由许多部件组成,而且这些部件都要保证高可靠 性才能纟隹持正常的操作过程。因此,许多可靠性计划侧重于备份、故障处理、 数据存储以及访问方面。对存储而言,一个普遍釆用的方法是冗余磁盘阵列, 最近釆用存储局域网。
—些可靠性专家强调,为保证高可靠性,系统的任何部件都要进行仔细的规 划设计,并在投入运行前进行彻底的检查测试工作。比如说,一个未经彻底 测试的新的应用程序在运行过程中很可能岀现频繁的中断。


156. 了解哪些linux内核的模块。

Linux内核的五大模块1.进程调度模块2.内存管理模块3.文件系统模块
4.进程间通信模块5.网络接口模块
进程调度模块
用来负责控制进程对CPU资源的使用。所釆取的调度策略是各进程能够公平 合理地访问CPU,同时保证内核能及时地执行硬件操作。
内g里模块
用于确保所有进程能够安全地共享机器主内存区,同时,内存管理模块还 支持虚拟内存管理方式,使得Linux支持进程使用比实际内存空间更多的 内存容量。并可以利用文件系统,对暂时不用的内存数据块交换到外部存储 设备上去,当需要时再交换回来。
文件系繼块
用于支持对外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存 储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节。从而提 供并支持与其它操作系统兼容的多种文件系统格式。
进程间通信模块
用于支持多种进程间的信息交换方式
网络接口模块
提供对多种网络通信标准的访问并支持许多网絡硬件


157. 画岀三次握手和四次挥手流程图。

TCP三次握手

TCP四次挥手

Client Server
r
FIN WAIT 11~ ~ r— FIN A
1— _
A CLOSE WAIT
ack 四] 一—- !
FIN_WAIT_2 —— LAST_ACK
FIN N 1
1
TIME_WAIT 1—一 — 1
r ~ ACK=1 ac<=K+l
1 CLOSED

158. 请阐释https建立连接过程。

建立连接
成TP和HTTPS都需要在建立连接的基础上来进行数据传输,是基本操作 当客户在浏览器中输入网址的并且按下回车,浏览器会在浏览器DNS缓存, 本地DNS缓存,和Hosts中寻找对应的记录,如果没有获取到则会请求 DNS服务来获取对应的ip
当获取到ip后,tcp连接会进行三次握手建立连接
tcp的三次挥手和四次挥手
过程简图

三次挥手(建立连接)
第一次:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入 SYN.SEND状态,等待服务器确认;
第二次:服务器收到SYN包,向客户端返回ACK (ack=j+1),同时自己也 发送一个SYN包(syn=k),即SYNUCK包,此时服务器进入SYN_RCVD状 态;
第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包
ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态, 完成三次握手。
完成三次握手,客户端与服务器开始传送数据,也就是ESTABLISHED状态。 三次握手保证了不会建立无效的连接,从而浪费资源。
四次挥手(断开连接)
第一次:TCP客户端发送一个FIN,用来关闭客户到服务器的敖据传送。
第二次:服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加
1。和SYN —样,一个FIN将占用一个序号。
第三次:服务器关闭客户端的连接,发送一个FIN给客户端。
第四次:客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
HTTP请求过程
建立连接完毕以后客户端会发送响应给服务端
服务端接受请求并且做岀响应发送给客户端
客户端收到响应并且解析响应响应给客户
client ■ server
发送客户端支持的加密办议及版本,SSL. TLS
服务器端从中筛选选择合适的加密协议
服务器端返I叫证书,证书中有公钥 客户端使用根证书验证证书合法性
j客户端生成对称密钥,通过证I弓中的公钥加密,发送到服务器端j
!服务器端使用私钥解密,获取对称密钥,使用对称密钥加密数据[
客户端解密数据,SSL开始通信...
在使用HTTPS是需要保证服务端配置正确了对应的安全证书
客户端发送请求到服务端
服务端返回公钥和证书到客户端
客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用 公钥对其加密,发送到服务端
服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数, 随后用这个随机数当做私钥对需要发送的数据进行对称加密
客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密 并且解析数据呈现结果给客户
SSL加密建立


159. innodb引擎的4大特性。

innodb引擎的4大特性1.插入缓冲;2.二次写;3.自适应哈希;4.预读
1 •插入缓冲(insert buffer)
插入缓神(Insert Buffer/Change Buffer):提升插入性能,change buffering 是 insert buffer 的加强,insert buffer 只针对 insert 有效,change buffering 对 insert、 deletes update (delete+insert)、purge 都有效 只对于非聚集索引(非唯一)的插入和更新有效,对于每一次的插入不是写 到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,如果在则直 接插入;若不在,则先放到Insert Buffer中,再按照一定的频率进行合并 操作,再写回disk。这样通常能将多个插入合并到一个操作中,目的还是为 了减少随机10带来性能损耗。
使用插入缓冲的条件:

*非聚集索引

*非唯一索引

Change buffer是作为buffer pool中的一部分存在。

Innodb_change_buffering参数缓存所对应的操作:(update会被认为是 delete+insert)

innodb_change_buffering,设置的值有:insertSs deletesx purgess changes (inserts ft deletes)、all (默认)、none。

all:默认值,缓存 insert, delete, purges 操作

none:不缓存

inserts:缓存 insert 操作

deletes:缓存 delete 操作

changes:缓存 insert 和 delete 操作

purges:缓存后台执行的物理删除操作

可以通过参数控制其使用的大小:

innodb_change_buffer_max_size,默认是 25%,即缓冲池的 1/4。最大可设

置为50%。当MySQL实例中有大量的修改操作时,要考虑増大

innodb_change_buffer_max_size

上面提过在一定频率下进行合并,那所谓的频率是什么条件?

1) 辅助索引页被读取到缓冲池中。正常的select先检查Insert Buffer是 否有该非聚集索引页存在,若有则合并插入。

2) 辅助索引页没有可用空间。空间"于1/32页的大小,则会强制合并操作。

3) Master Thread每秒和每10秒的合并操作。

2.二次写(double write)

Doublewrite缓存是位于系统表空间的存储区域,用来缓存InnoDB的数据页 从innodb buffer pool申flush之后并写入到数据文件之前,所以当操作 系统或者数据库进程在数据页写磁盘的过程中崩溃,Innodb可以在 doublewrite缓存中找到数据页的备份而用来执行crash恢复数据页写入 到doublewrite缓存的动作所需要的10消耗要小于写入到数据文件的消耗, 因为此写入操作会以一次大的连续块的方式写入 在应用(apply)重做日志前,用户需要一个页的副本,当写入失效发生时, 先通过页的副本半还原该页,再进行重做,这就是double write doubl ewri t e 组成:

内存中的 doublewrite buffer,大小 2M。

物理磁盘上共享表空间中连续的128个页,即2个区(extend),大小同样 为2M。

对缓冲池的脏页进行刷新时,不是直接写磁盘,而是会通过memcpy ()函数将 脏页先复制到内存中的doublewrite buffer,之后通过doublewrite再分 两次,每次1M顺序地写入共享表空间的物理磁盘上,在这个过程中,因为 doub lewr i t e页是连续的,因此这个过程是顺序写的,开销并不是很大在 完成doublewrite页的写入后,再将doublewrite buffer中的页写入各个 表空间文件中,此时的写入则是离散的。如果操作系统在将页写入磁盘的过 程中发生了崩溃,在恢复过程中,innodb可以从共享表空间中的doublewrite 中找到该页的一个副本,将其复制到表空间文件,再应用重做日志。

3. 自适应哈希索引(ahi)

Adaptive Hash index属性使得InnoDB更像是内存数据库。该属性通过

innodb_adapi t ve_hash_index 开启,也可以通过一

skip-i nno db_adap t i ve_hash_i nde x 参数

关闭

Innodb存储引擎会监控对表上二级索引的查找,如果发现某二级索引被频繁 访问,二级索引成为热数据,建立哈希索引可以带来速度的提升

经常访问的二级索引数据会自动被生成到hash索引里面去(最近连续被访问 三次的数据),自适应哈希索引通过缓冲池的B+树构造而来,因此建立的速 度很快。

哈希(hash)是一种非常快的等值查找方法,在一般情况下这种查找的时间 复杂度为0(1),即一般仅需要一次查找就能定位数据。而B+树的查找次数, 取决于B+树的高度,在生产环境中,B+树的高度一般3-4层,故需要3-4 次的查询。

innodb会监控对表上个索引页的查询。如果观察到建立哈希索引可以带来速 度提升,则自动建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index, AHI)

AHI有一个要求,就是对这个页的连续访问模式必须是一样的。

例如对于(a,b)访问模式情况:

where a = xxx

where a - xxx and b - xxx

特点:

"l、无序,没有树高

2、降低对二级索引树的频繁访问资源,索引树高S4,访问索引:访问 树、根节点、叶子节占,"适应

缺陷:

1、 hash自适应索引会占用innodb buffer pool;

2、 自适应hash索引只适合搜索等值的查询,如select * from table where index_col='xxx',

而对于宜祉查找类型,如范围查找,是不能使用的;

3、 极端情况下,自适应hash索引才有比较大的意义,可以降低逻辑读。

4. 预读(read ahead)

InnoDB使用两种预读算法来提高I性邰:线性预读(linear read-ahead) 和随机预读(randomread-ahead)

为了区分这两种预读的方式,我们可以把线性预读放到以extent为单位, 而随机预读放到以extent申的page为单位。线性预读着眼于将下一个 extent提前读取到buffer pool中,而随机预读着眼于将当前extent中的 剩余的page提前读取到buffer pool中

线性预读(linear read-ahead)

方式有一个很重要的变量控制是否将下一个extent预读到buffer pool * , 通过使用配置参数innodb_read_ahead_threshold,可以控制Innodb执行预 读操作的时间。如果一个extent中的被顺序读取的page超过或者等于该参 数变量时,Innodb将会异步的将下一个extent读取到buffer pool中, innodb_read_ahead_thresho 1 d可以设置为0-64的任何值,默认值为56, 值越高,访问模式检查越严格

例如,如果将值设置为48,则InnoDB只有在顺序访问当前extent中的48 个pages时才触发线性预读请求,将下一个extent读到内存中。如果值为8, InnoDB触发异步预读,即使程序段中只有8页被顺序访问。你可以在MySQL 配置文件中设置此参数的值,或者使用SET GLOBAL需要该SUPER权限的命 令动态更改该参数。

在没有该变量之前,当访问到extent的最后一个page的时候,Innodb会决 定是否将下一个extent放入到buffer pool中。

随机预读(r andomr e ad-ahe ad)

随机预读方式则是表示当同一个extent中的一些page在buffer pool中发 现时,Innodb会将该extent中的剩余page —并读到buffer pool中,由于 随机预读方式给Innodb code带来了一些不必要的复杂性,同时在性能也存 在否舊定性,在5. 5中已经将这种预读方式废弃。要启用此功能,请将配置 变量设置 innodb_randoiri_read_ahead 为 0N。


160. MylSAM 和 InnoDB select count(*)哪个更快,为什么?

MvISAM快,因为旳ISAM本身就记录了数量,而InnoDB要扫描数据。


秋招大厂经典面试题及答案整理不断更新中,感兴趣且正在学习的同学可以点个关注;狮会不断更新文章连载,有问题或者见解可以评论区讨论。

2023秋招大厂经典面试题及答案整理归纳(141-160)校招必看相关推荐

  1. 2023秋招大厂经典面试题及答案整理归纳(201-220)校招必看

    目录 201.数组al[O,mid-l]和al[mid,num-l],都分别有序.将其 merge成有序数组al[O,num-1],要求空间复杂度0(1). 202. 一个url指向的页面里面有另一个 ...

  2. 2023秋招大厂经典面试题及答案整理归纳(161-180)校招必看

    目录 161. MySQL 中 myisam 与 innodb 的区别. 162. 画出OSI和TCP/IP协议栈的对应关系. 163. 简述停止-等待协议(ARQ)的工作原理? 164. redis ...

  3. 2023秋招大厂经典面试题及答案整理归纳(1-20)校招必看

    目录 前言 1. 使用mysql索引都有哪些原则?索引什么数据结构? 1). 对于查询频率高的字段创建索引: 2). 对排序.分组.联合查询频率高的字段创建索引: 3). 索引的数目不宜太多 4). ...

  4. 【2023秋招大厂真题】携程校招-2022.9.28-k-好数组

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  5. 【2023秋招大厂真题】科大讯飞校招-2022.10.14-奖品发放

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  6. 【2023秋招大厂真题】华为校招-2022.10.11-字母加密

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  7. 2023最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)

    近期总结一一些面试题 都是企业的面试题笔记题 感觉薪资10k-15k的常见面试题 个人录制的最新Vue项目学习视频:B站 小胖梅-的个人空间_哔哩哔哩_Bilibili 红色为常见面试题 ====== ...

  8. 2022年最新互联网大厂前端面试题及答案-前端工程必备技能(持续整理更新中【关注收藏不迷路】)

    对于做前端的朋友,或者做了前端几年了,基础不好的,或者想进大厂的想了解深入,下面的知识点很多前端朋友都没有深入了解.很重要,看完有种茅塞顿开感觉,**关注+收藏哦,总有一天用的得.** 涉及到知识点: ...

  9. 大疆秋招IBG后端笔试题 2023

    大疆秋招IBG后端笔试题 2023 题型 编程 计算时间差(Leetcode359) 最小偏移量(Leetcode1657) 题型 单选:20道:(不可修改答案好像,我没找到返回上一题的界面) 多选: ...

最新文章

  1. https://blog.csdn.net/blmoistawinde/article/details/84329103
  2. C++中MessageBox()的详细用法(转载)
  3. sql server cdc 清理_基于CDC技术的ElasticSearch索引同步机制
  4. Go出现警告struct doesn‘t have any exported fields, nor custom marshaling
  5. int main() 与 void main()
  6. 超漂亮的响应式个人主页
  7. 软件工程软件产品质量要求与评价_软件工程定义
  8. 详述一则数据库死锁故障的分析过程
  9. 晨跑喝黑咖啡对身体有什么影响?
  10. 网站禁止复制类型的属性
  11. Typecho插件之飘雪插件
  12. blockquote
  13. 骨架法matlab,matlab中轴线算法骨架
  14. UML统一建模实用教程 第六章 包图
  15. 使用Glide加载圆角矩形图片、圆形图片
  16. 使用apk来控制指纹(指纹型号迈瑞微 ECS120)
  17. mysql查库存_如何用SQL查询Product表中库存最低的6种商品
  18. 第一次参加kaggle比赛的一些收获与心得,记录一下
  19. [Offer收割]编程练习赛2 hihocoder 1272 买零食 (DFS 或 dp 水题)
  20. 独角兽项目 7 - 从环境到测试

热门文章

  1. flask返回本地文件到服务器,Flask返回静态文件
  2. 什么相片可以两张弄成一张_ps怎么把两张图片合成一张
  3. Ruby完全读书指南
  4. 怎么用计算机求平均值,电脑教程:计算机平均值怎么求
  5. u盘里的视频文件损坏了怎么修复?
  6. 深度学习baseline模型_深度学习模型在序列标注任务中的应用
  7. Java web video 视频开发
  8. “progtam received signal SIGABRT,Aborted.“错误
  9. vue项目中 高德地图总是出不来的问题
  10. 零基础学HTML5的学习路线完整版