
图解学习网站:欧洲杯体育
专家好,我是小林。
之前有同常识我银行软开岗亭的口试要如何准备?难度如何?
银行的口试跟互联网公司的口试一经有区别,银行除了时刻口试以外,还会有结构化口试、无指挥接洽的口试问题,这类体式主若是考核同学们的软实力,以及处治问题的念念路。
那针对时刻口试,银行也会问八股文,然而问的未几,而且难度相对互联网公司口试不要太简便了,银行的时刻面粗拙是 20 分钟掌握,而互联网中大厂的时刻口试广泛是 60 分钟。
是以有学历上风的同学,面银行难度不大,只需要准备好一些简便八股文基本皆能搪塞时刻口试了,毋庸学太多内容。
除了准备时刻类的八股文,也需要回首下你的校园资历、实习得益、个东谈主的优缺点这类的软问题,提前准备好,在口试过程中阻碍易出乱子。
银行开荒主若是Java后端,学C++的同学也不错面银行,我看银行后端开荒的要求:纯属Java/C++中至少一门编程言语,是以,C++同学亦然不错投银行开荒的。
张开剩余98%C++口试银行软开岗亭,口试偶尔会出几个C++八股文,然而需要要点潜入学习MySQL和网罗这些。
银行的薪资固然比不了大厂,然而年包也有15w-25w,不如何加班,责任强度低,一经比较幽闲的,相宜追求 wlb 糊口的同学。
那问题来了,银行的招聘信息如何获取呢?这里分享三个 tips:
多样招聘信息发布平台:举例,公众号类(央企国企招聘网、银行招聘网、银行招聘试验信息汇总、应届生校招记等)、作事信息发布网站(国聘网、牛客、力扣)。
指标公司招聘公众号或网站:通盘有招聘需求的国企均有我方的招聘渠谈,这里的官方招聘渠谈主要有招聘公众号和招聘官网两种,专家不错把柄我方的骨子指标企业进行搜索。
各大学的作事携带中心:这个渠谈是专家最容易暴戾也其实最佳用的渠谈之一。各大学作事携带中心往往在春秋招季会在其公众号上发布大量的国企大厂招聘和宣讲会信息。往往 985/211 大学的作事携带中心公众号建设要好于其他学校,企业要更好,信息也要更多。而且,大学作事携带中心发布信息中,一般大学所在地的国企信息往往饱和其他地点。是以,专家除了讲理我方学校的作事公众号,其实还不错把指标求职地的 9/2 大学作事携带中心公众号讲理一下,许多大学的宣讲会以致外校学生也不错投入(Tips:线下国企宣讲会口试往往有现场口试要害,非 92 外校学生投入了,有时优异的线下口试进展,不错在后续线上要害,平直跳过简历筛选,纵贯线上笔面。)
多样招聘信息发布平台:举例,公众号类(央企国企招聘网、银行招聘网、银行招聘试验信息汇总、应届生校招记等)、作事信息发布网站(国聘网、牛客、力扣)。
指标公司招聘公众号或网站:通盘有招聘需求的国企均有我方的招聘渠谈,这里的官方招聘渠谈主要有招聘公众号和招聘官网两种,专家不错把柄我方的骨子指标企业进行搜索。
各大学的作事携带中心:这个渠谈是专家最容易暴戾也其实最佳用的渠谈之一。各大学作事携带中心往往在春秋招季会在其公众号上发布大量的国企大厂招聘和宣讲会信息。往往 985/211 大学的作事携带中心公众号建设要好于其他学校,企业要更好,信息也要更多。而且,大学作事携带中心发布信息中,一般大学所在地的国企信息往往饱和其他地点。是以,专家除了讲理我方学校的作事公众号,其实还不错把指标求职地的 9/2 大学作事携带中心公众号讲理一下,许多大学的宣讲会以致外校学生也不错投入(Tips:线下国企宣讲会口试往往有现场口试要害,非 92 外校学生投入了,有时优异的线下口试进展,不错在后续线上要害,平直跳过简历筛选,纵贯线上笔面。)
这次主要分享邮储(Java)、工商银行(Java)、中信银行(C++)的时刻口试问题,领域的考核主若是 Java(基础、荟萃、多线程)、MySQL(索引+事务)、贪图机网罗(HTTP、TCP),给准备口试银行的同学作念一个参考。
如何样,难度是不是还不错?
邮储概括类和接口的异同?
换取点:
皆不可被实例化,接口的结束类或概括类的子类皆唯有结束了接口或概括类中的措施后才能实例化。
皆不可被实例化,接口的结束类或概括类的子类皆唯有结束了接口或概括类中的措施后才能实例化。
不同点:
结束方式:结束接口的要害字为implements,承袭概括类的要害字为extends。一个类不错结束多个接口,但一个类只可承袭一个概括类。是以,使用接口不错盘曲地结束多重承袭。
措施方式:接口唯有界说,不可有措施的结束,java 1.8中不错界说default措施体,而概括类不错有界说与结束,措施可在概括类中结束。
走访修饰符:接口成员变量默许为public static final,必须赋初值,不可被修改;其通盘的成员措施皆是public、abstract的。概括类中成员变量默许default,可在子类中被从头界说,也可被从头赋值;概括措施被abstract修饰,不可被private、static、synchronized和native等修饰,必须以分号扫尾,不带花括号。
变量:概括类不错包含实例变量和静态变量,而接口只可包含常量(即静态常量)。
结束方式:结束接口的要害字为implements,承袭概括类的要害字为extends。一个类不错结束多个接口,但一个类只可承袭一个概括类。是以,使用接口不错盘曲地结束多重承袭。
措施方式:接口唯有界说,不可有措施的结束,java 1.8中不错界说default措施体,而概括类不错有界说与结束,措施可在概括类中结束。
走访修饰符:接口成员变量默许为public static final,必须赋初值,不可被修改;其通盘的成员措施皆是public、abstract的。概括类中成员变量默许default,可在子类中被从头界说,也可被从头赋值;概括措施被abstract修饰,不可被private、static、synchronized和native等修饰,必须以分号扫尾,不带花括号。
变量:概括类不错包含实例变量和静态变量,而接口只可包含常量(即静态常量)。
线程池是为了减少频繁的创建线程和舍弃线程带来的性能损耗。
线程池分为中枢线程池,线程池的最大容量,还有恭候任务的部队,提交一个任务,如果中枢线程莫得满,就创建一个线程,如果满了,便是会加入恭候部队,如果恭候部队满了,就会增多线程,如果达到最大线程数目,如果皆达到最大线程数目,就会按照一些丢弃的政策进行处理。
图片
线程池的构造函数有7个参数:
图片
corePoolSize:线程池中枢线程数目。默许情况下,线程池中线程的数目如果 <= corePoolSize,那么即使这些线程处于安逸景色,那也不会被舍弃。
maximumPoolSize:线程池中最多可容纳的线程数目。当一个新任务交给线程池,如果此时线程池中有安逸的线程,就会平直实行,如果莫得安逸的线程且面前方程池的线程数目小于corePoolSize,就会创建新的线程来实行任务,不然就会将该任务加入到报复部队中,如果报复部队满了,就会创建一个新线程,从报复部队头部取出一个任务来实行,并将新任务加入到报复部队末尾。如果面前方程池中线程的数目等于maximumPoolSize,就不会创建新线程,就会去实行终止政策。
keepAliveTime:当线程池中线程的数目大于corePoolSize,而且某个线程的安逸时分向上了keepAliveTime,那么这个线程就会被舍弃。
unit:便是keepAliveTime时分的单元。
workQueue:责任部队。当莫得安逸的线程实行新任务时,该任务就会被放入责任部队中,恭候实行。
threadFactory:线程工场。不错用来给线程取名字等等
handler:终止政策。当一个新任务交给线程池,如果此时线程池中有安逸的线程,就会平直实行,如果莫得安逸的线程,就会将该任务加入到报复部队中,如果报复部队满了,就会创建一个新线程,从报复部队头部取出一个任务来实行,并将新任务加入到报复部队末尾。如果面前方程池中线程的数目等于maximumPoolSize,就不会创建新线程,就会去实行终止政策。
corePoolSize:线程池中枢线程数目。默许情况下,线程池中线程的数目如果 <= corePoolSize,那么即使这些线程处于安逸景色,那也不会被舍弃。
maximumPoolSize:线程池中最多可容纳的线程数目。当一个新任务交给线程池,如果此时线程池中有安逸的线程,就会平直实行,如果莫得安逸的线程且面前方程池的线程数目小于corePoolSize,就会创建新的线程来实行任务,不然就会将该任务加入到报复部队中,如果报复部队满了,就会创建一个新线程,从报复部队头部取出一个任务来实行,并将新任务加入到报复部队末尾。如果面前方程池中线程的数目等于maximumPoolSize,就不会创建新线程,就会去实行终止政策。
keepAliveTime:当线程池中线程的数目大于corePoolSize,而且某个线程的安逸时分向上了keepAliveTime,那么这个线程就会被舍弃。
unit:便是keepAliveTime时分的单元。
workQueue:责任部队。当莫得安逸的线程实行新任务时,该任务就会被放入责任部队中,恭候实行。
threadFactory:线程工场。不错用来给线程取名字等等
handler:终止政策。当一个新任务交给线程池,如果此时线程池中有安逸的线程,就会平直实行,如果莫得安逸的线程,就会将该任务加入到报复部队中,如果报复部队满了,就会创建一个新线程,从报复部队头部取出一个任务来实行,并将新任务加入到报复部队末尾。如果面前方程池中线程的数目等于maximumPoolSize,就不会创建新线程,就会去实行终止政策。
把柄 RFC 圭表,GET 的语义是从服务器获取指定的资源,这个资源不错是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中,URL 章程只可复古 ASCII,是以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限定(HTTP契约自身对 URL长度并莫得作念任何章程)。
比如,你绽放我的著述,浏览器就会发送 GET 请求给服务器,服务器就会复返著述的通盘翰墨及资源。
GET 请求
把柄 RFC 圭表,POST 的语义是把柄请求负荷(报文body)对指定的资源作念出处理,具体的处理方式视资源类型而不同。POST 请求佩戴数据的位置一般是写在报文 body 中,body 中的数据不错是淘气花样的数据,只消客户端与服务端协商好即可,而且浏览器不会对 body 大小作念限定。
比如,你在我著述底部,敲入了留言后点击「提交」(表现你们留言),浏览器就会实行一次 POST 请求,把你的留言翰墨放进了报文 body 里,然后拼接好 POST 请求头,通过 TCP 契约发送给服务器。
POST 请求http有景色吗?
是无景色的,自身不艳羡会话景色。
为了结束景色管浮现通话追踪,常用的措施是使用Cookie和Session。
Cookie 时刻
session和cookie的区别是什么?
作用领域不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端。
存取方式的不同,Cookie只可保存 ASCII,Session不错存淘气数据类型,比如UserId等。
灵验期不同,Cookie可配置为永劫分保持,比如默许登录功能功能,Session一般灵验时分较短,客户端关闭或者Session超时皆会失效。
阴私政策不同,Cookie存储在客户端,信息容易被窃取;Session存储在服务端,相对安全一些。
存储大小不同, 单个Cookie 保存的数据不可向上 4K,Session可存储数据远高于Cookie。
作用领域不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端。
存取方式的不同,Cookie只可保存 ASCII,Session不错存淘气数据类型,比如UserId等。
灵验期不同,Cookie可配置为永劫分保持,比如默许登录功能功能,Session一般灵验时分较短,客户端关闭或者Session超时皆会失效。
阴私政策不同,Cookie存储在客户端,信息容易被窃取;Session存储在服务端,相对安全一些。
存储大小不同, 单个Cookie 保存的数据不可向上 4K,Session可存储数据远高于Cookie。
mysql 的存储引擎主要有myisam,innodb两个存储引擎。
事务复古:InnoDB复古事务,而MyISAM不复古。InnoDB中每一条SQL言语皆默许封装成事务,自动提交,这可能会影响实行速率。因此,最佳将多条SQL言语放在BEGIN和COMMIT之间,构成一个事务。
外键复古:InnoDB复古外键,而MyISAM不复古。关于一个包含外键的InnoDB表,如果尝试将其转为MyISAM,将会失败。
索引和数据存储:InnoDB是聚集索引,使用B+Tree手脚索引结构,数据文献和(主键)索引绑定在沿途,必须要有主键,通过主键索引结果很高。MyISAM的B+树主键索引和缓助索引的叶子节点皆是数据文献的地址指针。
数据文献花样:MyISAM在磁盘存储上有三个文献,每个文献名以表名发轫,膨胀名指出文献类型,永别是.frm(用于存储表的界说),.MYD(用于存放数据)和.MYI(用于存放表索引)。InnoDB有两种存储方式:分享表空间存储和多表空间存储。两种存储方式的表结构和MyISAM一样,以表名发轫,膨胀名为.frm。如果使用分享表空间,那么通盘表的数据文献和索引文献皆保存在一个表空间里。如果使用多表空间,那么每个表皆有一个表空间文献用于存储每个表的数据和索引。
数据安全不同:InnoDB 复古崩溃复原和数据复原,而 MyISAM 不复古。如果 MySQL 崩溃了或者发生随机故障,InnoDB 不错通过复原日记来复原数据。
事务复古:InnoDB复古事务,而MyISAM不复古。InnoDB中每一条SQL言语皆默许封装成事务,自动提交,这可能会影响实行速率。因此,最佳将多条SQL言语放在BEGIN和COMMIT之间,构成一个事务。
外键复古:InnoDB复古外键,而MyISAM不复古。关于一个包含外键的InnoDB表,如果尝试将其转为MyISAM,将会失败。
索引和数据存储:InnoDB是聚集索引,使用B+Tree手脚索引结构,数据文献和(主键)索引绑定在沿途,必须要有主键,通过主键索引结果很高。MyISAM的B+树主键索引和缓助索引的叶子节点皆是数据文献的地址指针。
数据文献花样:MyISAM在磁盘存储上有三个文献,每个文献名以表名发轫,膨胀名指出文献类型,永别是.frm(用于存储表的界说),.MYD(用于存放数据)和.MYI(用于存放表索引)。InnoDB有两种存储方式:分享表空间存储和多表空间存储。两种存储方式的表结构和MyISAM一样,以表名发轫,膨胀名为.frm。如果使用分享表空间,那么通盘表的数据文献和索引文献皆保存在一个表空间里。如果使用多表空间,那么每个表皆有一个表空间文献用于存储每个表的数据和索引。
数据安全不同:InnoDB 复古崩溃复原和数据复原,而 MyISAM 不复古。如果 MySQL 崩溃了或者发生随机故障,InnoDB 不错通过复原日记来复原数据。
知谈的,便是匡助存储引擎快速获取数据的一种数据结构,形象的说便是索引是数据的目次。
不错按照四个角度来分类索引。
按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
按「物理存储」分类:聚簇索引(主键索引)、二级索引(缓助索引)。
按「字段特色」分类:主键索引、独一索引、平素索引、前缀索引。
按「字段个数」分类:单列索引、合并索引。
按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
按「物理存储」分类:聚簇索引(主键索引)、二级索引(缓助索引)。
按「字段特色」分类:主键索引、独一索引、平素索引、前缀索引。
按「字段个数」分类:单列索引、合并索引。
主要区别如下:
概括进度:面向过程编程以过程(函数)为中心,侧重于处治问题的设施和过程。而面向对象编程以对象为中心,侧重于将问题解析为对象,并通过对象之间的交互来处治问题。面向对象编程提供了更高的概括级别,不错更当然地模拟施行天下中的事物与关联,愈加强调代码的可儿慕性和重用性。
封装性:面向过程编程将数据和筹商的操作封装在不同的函数中,但莫得明确的机制来保护数据和函数的走访。而面向对象编程通过类的界说,将数据(属性)和函数(措施)封装在沿途,并通过走访修饰符(如public、private)来限定对数据和函数的走访权限,结束了更好的封装性。
承袭和多态:面向对象编程提供了承袭和多态的特色,不错通过承袭机制创建新的类,并重用已有类的属性和措施。同期,多态允许不同的对象对换取的音书作出不同的反应。这些特色使得面向对象编程愈加纯真和易于膨胀。
概括进度:面向过程编程以过程(函数)为中心,侧重于处治问题的设施和过程。而面向对象编程以对象为中心,侧重于将问题解析为对象,并通过对象之间的交互来处治问题。面向对象编程提供了更高的概括级别,不错更当然地模拟施行天下中的事物与关联,愈加强调代码的可儿慕性和重用性。
封装性:面向过程编程将数据和筹商的操作封装在不同的函数中,但莫得明确的机制来保护数据和函数的走访。而面向对象编程通过类的界说,将数据(属性)和函数(措施)封装在沿途,并通过走访修饰符(如public、private)来限定对数据和函数的走访权限,结束了更好的封装性。
承袭和多态:面向对象编程提供了承袭和多态的特色,不错通过承袭机制创建新的类,并重用已有类的属性和措施。同期,多态允许不同的对象对换取的音书作出不同的反应。这些特色使得面向对象编程愈加纯真和易于膨胀。
1. 团结
1. 团结
TCP 是面向团结的传输层契约,传输数据前先要建立团结。
UDP 是不需要团结,即刻传输数据。
TCP 是面向团结的传输层契约,传输数据前先要建立团结。
UDP 是不需要团结,即刻传输数据。
2. 服务对象
2. 服务对象
TCP 是一双一的两点服务,即一条团结唯有两个端点。
UDP 复古一双一、一双多、多对多的交互通讯
TCP 是一双一的两点服务,即一条团结唯有两个端点。
UDP 复古一双一、一双多、多对多的交互通讯
3. 可靠性
3. 可靠性
TCP 是可靠委用数据的,数据不错无舛讹、不丢失、不重迭、循序到达。
UDP 是尽最大要力于委用,不保证可靠委用数据。然而咱们不错基于 UDP 传输契约结束一个可靠的传输契约,比如 QUIC 契约。
TCP 是可靠委用数据的,数据不错无舛讹、不丢失、不重迭、循序到达。
UDP 是尽最大要力于委用,不保证可靠委用数据。然而咱们不错基于 UDP 传输契约结束一个可靠的传输契约,比如 QUIC 契约。
4. 拥塞限定、流量限定
4. 拥塞限定、流量限定
TCP 有拥塞限定和流量限定机制,保证数据传输的安全性。
UDP 则莫得,即使网罗终点拥挤了,也不会影响 UDP 的发送速率。
TCP 有拥塞限定和流量限定机制,保证数据传输的安全性。
UDP 则莫得,即使网罗终点拥挤了,也不会影响 UDP 的发送速率。
5. 首部支拨
5. 首部支拨
TCP 首部长度较长,会有一定的支拨,首部在莫得使用「选项」字段时是 20个字节,如果使用了「选项」字段则会变长的。
UDP 首部唯有 8 个字节,而且是固定不变的,支拨较小。
TCP 首部长度较长,会有一定的支拨,首部在莫得使用「选项」字段时是 20个字节,如果使用了「选项」字段则会变长的。
UDP 首部唯有 8 个字节,而且是固定不变的,支拨较小。
6. 传输方式
6. 传输方式
TCP 是流式传输,莫得鸿沟,但保证章程和可靠。
UDP 是一个包一个包的发送,是有鸿沟的,但可能会丢包和乱序。
TCP 是流式传输,莫得鸿沟,但保证章程和可靠。
UDP 是一个包一个包的发送,是有鸿沟的,但可能会丢包和乱序。
7. 分片不同
7. 分片不同
TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,指标主机收到后,也相同在传输层拼装 TCP 数据包,如果半途丢失了一个分片,只需要传输丢失的这个分片。
UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,指标主机收到后,在 IP 层拼装完数据,接着再传给传输层。
TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,指标主机收到后,也相同在传输层拼装 TCP 数据包,如果半途丢失了一个分片,只需要传输丢失的这个分片。
UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,指标主机收到后,在 IP 层拼装完数据,接着再传给传输层。
TCP 和 UDP 应用场景:
TCP 和 UDP 应用场景:
由于 TCP 是面向团结,能保证数据的可靠性委用,因此时常用于:
FTP文献传输;
HTTP / HTTPS;
FTP文献传输;
HTTP / HTTPS;
由于 UDP 面向无团结,它不错随时发送数据,再加上 UDP 自身的处理既简便又高效,因此时常用于:
包总量较少的通讯,如 DNS、SNMP等;
视频、音频等多媒体通讯;
播送通讯;
包总量较少的通讯,如 DNS、SNMP等;
视频、音频等多媒体通讯;
播送通讯;
一致性:是指事务操作前和操作后,数据幽闲完好性管理,数据库保持一致性景色。
比如,用户 A 和用户 B 在银行永别有 800 元和 600 元,所有 1400 元,用户 A 给用户 B 转账 200 元,分为两个设施,从 A 的账户扣除 200 元和对 B 的账户增多 200 元。一致性便是要求上述设施操作后,终末的结果是用户 A 还有 600 元,用户 B 有 800 元,所有 1400 元,而不会出现用户 A 扣除了 200 元,但用户 B 未增多的情况(该情况,用户 A 和 B 均为 600 元,所有 1200 元)。
一致性如何结束?
mysql 事务的结束旨趣:
遥远性是通过 redo log (重作念日记)来保证的;
原子性是通过 undo log(回滚日记) 来保证的;
阻扰性是通过 MVCC(多版块并发限定) 或锁机制来保证的;
一致性则是通过遥远性+原子性+阻扰性来保证;
遥远性是通过 redo log (重作念日记)来保证的;
原子性是通过 undo log(回滚日记) 来保证的;
阻扰性是通过 MVCC(多版块并发限定) 或锁机制来保证的;
一致性则是通过遥远性+原子性+阻扰性来保证;
这四个阻扰级别如下:
读未提交,指一个事务还没提交时,它作念的变更就能被其他事务看到;
读提交,指一个事务提交之后,它作念的变更才能被其他事务看到;
可重迭读,指一个事求实行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默许阻扰级别;
串行化;会对记录加上读写锁,在多个事务对这札记录进行读写操作时,如果发生了读写阻扰的时候,后走访的事务必须等前一个事求实行完成,才能不时实行;
读未提交,指一个事务还没提交时,它作念的变更就能被其他事务看到;
读提交,指一个事务提交之后,它作念的变更才能被其他事务看到;
可重迭读,指一个事求实行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默许阻扰级别;
串行化;会对记录加上读写锁,在多个事务对这札记录进行读写操作时,如果发生了读写阻扰的时候,后走访的事务必须等前一个事求实行完成,才能不时实行;
按阻扰水平上下排序如下:
图片
针对不同的阻扰级别,并发事务时可能发生的景观也会不同。
图片
也便是说:
在「读未提交」阻扰级别下,可能发生脏读、不可重迭读和幻读景观;
在「读提交」阻扰级别下,可能发生不可重迭读和幻读景观,然而不可能发生脏读景观;
在「可重迭读」阻扰级别下,可能发生幻读景观,然而不可能脏读和不可重迭读景观;
在「串行化」阻扰级别下,脏读、不可重迭读和幻读景观皆不可能会发生。
在「读未提交」阻扰级别下,可能发生脏读、不可重迭读和幻读景观;
在「读提交」阻扰级别下,可能发生不可重迭读和幻读景观,然而不可能发生脏读景观;
在「可重迭读」阻扰级别下,可能发生幻读景观,然而不可能脏读和不可重迭读景观;
在「串行化」阻扰级别下,脏读、不可重迭读和幻读景观皆不可能会发生。
可重迭读阻扰级别
Redis的基本数据类型有哪些?
Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(荟萃)、Zset(有序荟萃)。
img
img
跟着 Redis 版块的更新,后头又复古了四种数据类型:BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)。Redis 五种数据类型的应用场景:
String 类型的应用场景:缓存对象、通例计数、散播式锁、分享 session 信息等。
List 类型的应用场景:音书部队(然而有两个问题:1. 出产者需要自行结束全局独一 ID;2. 不不错蹧跶组体式蹧跶数据)等。
Hash 类型:缓存对象、购物车等。
Set 类型:团聚贪图(并集、交加、差集)场景,比如点赞、共同讲理、抽奖活动等。
Zset 类型:排序场景,比如名次榜、电话和姓名排序等。
String 类型的应用场景:缓存对象、通例计数、散播式锁、分享 session 信息等。
List 类型的应用场景:音书部队(然而有两个问题:1. 出产者需要自行结束全局独一 ID;2. 不不错蹧跶组体式蹧跶数据)等。
Hash 类型:缓存对象、购物车等。
Set 类型:团聚贪图(并集、交加、差集)场景,比如点赞、共同讲理、抽奖活动等。
Zset 类型:排序场景,比如名次榜、电话和姓名排序等。
Redis 后续版块又复古四种数据类型,它们的应用场景如下:
BitMap(2.2 版新增):二值景色统计的场景,比如签到、判断用户登陆景色、连气儿签到用户总和等;
HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;
GEO(3.2 版新增):存储地舆位置信息的场景,比如滴滴叫车;
Stream(5.0 版新增):音书部队,比较于基于 List 类型结束的音书部队,有这两个私有的特色:自动生周密局独一音书ID,复古以蹧跶组体式蹧跶数据。
BitMap(2.2 版新增):二值景色统计的场景,比如签到、判断用户登陆景色、连气儿签到用户总和等;
HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;
GEO(3.2 版新增):存储地舆位置信息的场景,比如滴滴叫车;
Stream(5.0 版新增):音书部队,比较于基于 List 类型结束的音书部队,有这两个私有的特色:自动生周密局独一音书ID,复古以蹧跶组体式蹧跶数据。
苦求方式
苦求方式
栈:由系统自动分拨。举例,声明在函数中一个局部变量 int b,系统自动在栈中为b开辟空间。
堆:需要尺度员我方苦求,并指明大小,在C言语中通过malloc函数,如 p1 = (char *)malloc(10);,在C++顶用new运算符,如p2 = new char[20]
栈:由系统自动分拨。举例,声明在函数中一个局部变量 int b,系统自动在栈中为b开辟空间。
堆:需要尺度员我方苦求,并指明大小,在C言语中通过malloc函数,如 p1 = (char *)malloc(10);,在C++顶用new运算符,如p2 = new char[20]
苦求后系统的反应
苦求后系统的反应
栈:只消栈的剩余空间大于所苦求空间,系统将为尺度提供内存,不然将报特别教唆栈溢出。
堆:领先应该知谈操作系统有一个记录安逸内存地址的链表,当系统收到尺度的苦求时,会遍历该链表,寻找第一个空间大于所苦求空间的堆结点,然后将该结点从安逸结点链表中删除,并将该结点的空间分拨给尺度,另外,关于大多数系统,会在这块内存空间中的首地址处记录本次分拨的大小,这么,代码中的delete语句才能正确的开释本内存空间。另外,由于找到的堆结点的大小不一定碰巧等于苦求的大小,系统会自动的将饱和的那部分从头放入安逸链表中。
栈:只消栈的剩余空间大于所苦求空间,系统将为尺度提供内存,不然将报特别教唆栈溢出。
堆:领先应该知谈操作系统有一个记录安逸内存地址的链表,当系统收到尺度的苦求时,会遍历该链表,寻找第一个空间大于所苦求空间的堆结点,然后将该结点从安逸结点链表中删除,并将该结点的空间分拨给尺度,另外,关于大多数系统,会在这块内存空间中的首地址处记录本次分拨的大小,这么,代码中的delete语句才能正确的开释本内存空间。另外,由于找到的堆结点的大小不一定碰巧等于苦求的大小,系统会自动的将饱和的那部分从头放入安逸链表中。
苦求大小的限定
苦求大小的限定
栈:栈是向低地址膨胀的数据结构,是一块连气儿的内存的区域。这句话的旨趣是栈顶的地址和栈的最大容量是系统事前章程好的,操作系统中,栈的大小是几MB,如果苦求的空间向上栈的剩余空间时,将教唆overflow。因此,能从栈得回的空间较小。
堆:堆是向高地址膨胀的数据结构,是不连气儿的内存区域。这是由于系统是用链表来存储的安逸内存地址的,当然是不连气儿的,而链表的遍历场地是由低地址向高地址。堆的大小受限于贪图机系统中灵验的造谣内存。由此可见,堆得回的空间比较纯真,也比较大。
栈:栈是向低地址膨胀的数据结构,是一块连气儿的内存的区域。这句话的旨趣是栈顶的地址和栈的最大容量是系统事前章程好的,操作系统中,栈的大小是几MB,如果苦求的空间向上栈的剩余空间时,将教唆overflow。因此,能从栈得回的空间较小。
堆:堆是向高地址膨胀的数据结构,是不连气儿的内存区域。这是由于系统是用链表来存储的安逸内存地址的,当然是不连气儿的,而链表的遍历场地是由低地址向高地址。堆的大小受限于贪图机系统中灵验的造谣内存。由此可见,堆得回的空间比较纯真,也比较大。
生命周期
生命周期
栈:栈的内存管理是自动的,变量的内存会在其作用域斥逐时自动开释
堆:堆的内存管理需要手动进行,需要使用new要害字分拨内存,并使用delete或delete[]要害字开释内存,不然会导致内存露馅。
栈:栈的内存管理是自动的,变量的内存会在其作用域斥逐时自动开释
堆:堆的内存管理需要手动进行,需要使用new要害字分拨内存,并使用delete或delete[]要害字开释内存,不然会导致内存露馅。
C++的编译过程经过了预处理、编译、汇编和合并四个主要阶段:
预处理:预处理阶段会对源代码进行处理,主要包括张开宏界说、处理要求编译指示(如#include、#define、#ifdef等)以及删除扫视等。预处理的结果是生成一个经过宏张开和要求处理后的纯C++源代码文献。
编译(Compilation):编译阶段将预处理后的源代码翻译为汇编言语,生成汇编代码。编译器会进行词法分析、语法分析和语义分析,查抄代码的正确性,并生成中间代码表现。
汇编:汇编阶段将汇编代码调度为机器不错实行的指标文献。汇编器会将汇编代码转机为机器指示,并生成与机器硬件平台筹商的指标文献(粗拙以".obj"或".o"为膨胀名)。
合并:合并阶段将指标文献与其他必要的库文献合并在沿途,生成可实行尺度。合并器会领会指标文献中的象征援用,将其与其他指标文献或库文献中的象征界说进行匹配,最终身成一个完好的可实行文献。在合并阶段,还会进行地址重定位、象征领会、象征表生成等操作,确保尺度的正照实行。
预处理:预处理阶段会对源代码进行处理,主要包括张开宏界说、处理要求编译指示(如#include、#define、#ifdef等)以及删除扫视等。预处理的结果是生成一个经过宏张开和要求处理后的纯C++源代码文献。
编译(Compilation):编译阶段将预处理后的源代码翻译为汇编言语,生成汇编代码。编译器会进行词法分析、语法分析和语义分析,查抄代码的正确性,并生成中间代码表现。
汇编:汇编阶段将汇编代码调度为机器不错实行的指标文献。汇编器会将汇编代码转机为机器指示,并生成与机器硬件平台筹商的指标文献(粗拙以".obj"或".o"为膨胀名)。
合并:合并阶段将指标文献与其他必要的库文献合并在沿途,生成可实行尺度。合并器会领会指标文献中的象征援用,将其与其他指标文献或库文献中的象征界说进行匹配,最终身成一个完好的可实行文献。在合并阶段,还会进行地址重定位、象征领会、象征表生成等操作,确保尺度的正照实行。
不错使用使用智能指针,C++提供了智能指针(如std::shared_ptr、std::unique_ptr等),不错自动管理动态分拨的内存。智能指针期骗了RAII(资源获取即运转机)的原则,在对象生命周期斥逐时自动开释内存,幸免了显式调用delete的繁琐和遗。
也不错使用内存露馅检测器具(如Valgrind等)来分析尺度,在尺度运行过程中检测内存露馅,并实时配置。
mysql数据库哈希索引、B+树索引的区别?
主要区别有以下几点:
数据结构:哈希索引使用哈希表的结构,将索引值通过哈希函数映射为一个独一的哈希码,而B+树索引使用均衡树的结构,将索引值按照大小章程组织成一个树形结构。
查找方式:哈希索引使用哈希函数贪图出哈希码,平直通过哈希码进行查找,查找速率终点快,时分复杂度为O(1);而B+树索引通过从根节点到叶子节点的遍历来进行查找,时分复杂度一般为O(logN)。
领域查询:哈希索引相宜等值查询,即把柄索引值精准查找;而B+树索引复古领域查询,不错把柄索引值的大小领域进行查找。
数据结构:哈希索引使用哈希表的结构,将索引值通过哈希函数映射为一个独一的哈希码,而B+树索引使用均衡树的结构,将索引值按照大小章程组织成一个树形结构。
查找方式:哈希索引使用哈希函数贪图出哈希码,平直通过哈希码进行查找,查找速率终点快,时分复杂度为O(1);而B+树索引通过从根节点到叶子节点的遍历来进行查找,时分复杂度一般为O(logN)。
领域查询:哈希索引相宜等值查询,即把柄索引值精准查找;而B+树索引复古领域查询,不错把柄索引值的大小领域进行查找。
每一种存储引擎复古的索引类型不一定换取,我在表中回首了 MySQL 常见的存储引擎 InnoDB、MyISAM 和 Memory 永别复古的索引类型。
img
InnoDB 是在 MySQL 5.5 之后成为默许的 MySQL 存储引擎,B+Tree 索引类型亦然 MySQL 存储引擎聘请最多的索引类型。
索引失效有哪些例子?
6 种会发生索引失效的情况:
当咱们使用左或者掌握暗昧匹配的时候,也便是 like %xx或者 like %xx%这两种方式皆会形成索引失效;
当咱们在查询要求中对索引列使用函数,就会导致索引失效。
当咱们在查询要求中对索引列进行抒发式贪图,亦然无法走索引的。
MySQL 在遭遇字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而要求语句中的输入参数是数字的话,那么索引列会发生隐式类型调度,由于隐式类型调度是通过 CAST 函数结束的,等同于对索引列使用了函数,是以就会导致索引失效。
合并索引要能正确使用需要遵照最左匹配原则,也便是按照最左优先的方式进行索引的匹配,不然就会导致索引失效。
在 WHERE 子句中,如果在 OR 前的要求列是索引列,而在 OR 后的要求列不是索引列,那么索引会失效。
当咱们使用左或者掌握暗昧匹配的时候,也便是 like %xx或者 like %xx%这两种方式皆会形成索引失效;
当咱们在查询要求中对索引列使用函数,就会导致索引失效。
当咱们在查询要求中对索引列进行抒发式贪图,亦然无法走索引的。
MySQL 在遭遇字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而要求语句中的输入参数是数字的话,那么索引列会发生隐式类型调度,由于隐式类型调度是通过 CAST 函数结束的,等同于对索引列使用了函数,是以就会导致索引失效。
合并索引要能正确使用需要遵照最左匹配原则,也便是按照最左优先的方式进行索引的匹配,不然就会导致索引失效。
在 WHERE 子句中,如果在 OR 前的要求列是索引列,而在 OR 后的要求列不是索引列,那么索引会失效。
InnoDB 引擎是复古行级锁的,而 MyISAM 引擎并不复古行级锁。
前边也提到,平素的 select 语句是不会对记录加锁的,因为它属于快照读。如果要在查询时对记录加行锁,不错使用底下这两个方式,这种查询会加锁的语句称为锁定读。
//对读取的记录加分享锁select... lockinsharemode;//对读取的记录加独占锁select... forupdate;
上头这两条语句必须在一个事务中,因为当事务提交了,锁就会被开释,是以在使用这两条语句的时候,要加上 begin、start transaction 或者 set autocommit = 0。
分享锁(S锁)幽闲读读分享,读写互斥。独占锁(X锁)幽闲写写互斥、读写互斥。
行级锁的类型主要有三类:
Record Lock,记录锁,也便是只是把一札记录锁上;
Gap Lock,罅隙锁,锁定一个领域,然而不包含记录自身;
Next-Key Lock:Record Lock + Gap Lock 的组合,锁定一个领域,而且锁定记录自身。
Record Lock,记录锁,也便是只是把一札记录锁上;
Gap Lock,罅隙锁,锁定一个领域,然而不包含记录自身;
Next-Key Lock:Record Lock + Gap Lock 的组合,锁定一个领域,而且锁定记录自身。
Record Lock
Record Lock
Record Lock 称为记录锁,锁住的是一札记录。而且记录锁是有 S 锁和 X 锁之分的:
当一个事务对一札记录加了 S 型记录锁后,其他事务也不错不时对该记录加 S 型记录锁(S 型与 S 锁兼容),然而不不错对该记录加 X 型记录锁(S 型与 X 锁不兼容);
当一个事务对一札记录加了 X 型记录锁后,其他事务既不不错对该记录加 S 型记录锁(S 型与 X 锁不兼容),也不不错对该记录加 X 型记录锁(X 型与 X 锁不兼容)。
当一个事务对一札记录加了 S 型记录锁后,其他事务也不错不时对该记录加 S 型记录锁(S 型与 S 锁兼容),然而不不错对该记录加 X 型记录锁(S 型与 X 锁不兼容);
当一个事务对一札记录加了 X 型记录锁后,其他事务既不不错对该记录加 S 型记录锁(S 型与 X 锁不兼容),也不不错对该记录加 X 型记录锁(X 型与 X 锁不兼容)。
举个例子,当一个事求实行了底下这条语句:
mysql > begin;mysql > select* fromt_test whereid= 1forupdate;
便是对 t_test 表中主键 id 为 1 的这札记录加上 X 型的记录锁,这么其他事务就无法对这札记录进行修改了。
img
当事求实行 commit 后,事务过程中生成的锁皆会被开释。
Gap Lock
Gap Lock
Gap Lock 称为罅隙锁,只存在于可重迭读阻扰级别,主义是为了处治可重迭读阻扰级别下幻读的景观。
假定,表中有一个领域 id 为(3,5)罅隙锁,那么其他事务就无法插入 id = 4 这札记录了,这么就灵验的夺目幻读景观的发生。
img
罅隙锁固然存在 X 型罅隙锁和 S 型罅隙锁,然而并莫得什么区别,罅隙锁之间是兼容的,即两个事务不错同期持有包含共同罅隙领域的罅隙锁,并不存在互斥关联,因为罅隙锁的主义是夺目插入幻影记录而建议的。
Next-Key Lock
Next-Key Lock
Next-Key Lock 称为临键锁,是 Record Lock + Gap Lock 的组合,锁定一个领域,而且锁定记录自身。
假定,表中有一个领域 id 为(3,5] 的 next-key lock,那么其他事务即不可插入 id = 4 记录,也不可修改 id = 5 这札记录。
img
是以,next-key lock 即能保护该记录,又能阻难其他事务将新记录插入到被保护记录前边的罅隙中。
next-key lock 是包含罅隙锁+记录锁的,如果一个事务获取了 X 型的 next-key lock,那么另外一个事务在获取换取领域的 X 型的 next-key lock 时,是会被报复的。
比如,一个事务持有了领域为 (1, 10] 的 X 型的 next-key lock,那么另外一个事务在获取换取领域的 X 型的 next-key lock 时,就会被报复。
固然换取领域的罅隙锁是多个事务互相兼容的,但关于记录锁,咱们是要磋商 X 型与 S 型关联,X 型的记录锁与 X 型的记录锁是阻扰的。
什么是回表?
主键索引的 B+Tree 和二级索引的 B+Tree 区别如下:
主键索引的 B+Tree 的叶子节点存放的是骨子数据,通盘完好的用户记录皆存放在主键索引的 B+Tree 的叶子节点里;
二级索引的 B+Tree 的叶子节点存放的是主键值,而不是骨子数据。
主键索引的 B+Tree 的叶子节点存放的是骨子数据,通盘完好的用户记录皆存放在主键索引的 B+Tree 的叶子节点里;
二级索引的 B+Tree 的叶子节点存放的是主键值,而不是骨子数据。
我这里将前边的商品表中的 product_no (商品编码)字段配置为二级索引,那么二级索引的 B+Tree 如下图(图中世子节点之间我画了单向链表,然而骨子上是双向链表,原图我找不到了,修改不了,偷个懒我不重画了,专家脑补成双向链表就行)。
二级索引 B+Tree
其中非叶子的 key 值是 product_no(图中橙色部分),叶子节点存储的数据是主键值(图中绿色部分)。
如果我用 product_no 二级索引查询商品,如下查询语句:
select* fromproduct whereproduct_no = '0002';
会先检二级索引中的 B+Tree 的索引值(商品编码,product_no),找到对应的叶子节点,然后获取主键值,然后再通过主键索引中的 B+Tree 树查询到对应的叶子节点,然后获取整行数据。这个过程叫「回表」,也便是说要查两个 B+Tree 才能查到数据。如下图(图中世子节点之间我画了单向链表,然而骨子上是双向链表,原图我找不到了,修改不了,偷个懒我不重画了,专家脑补成双向链表就行):
回表
不外,当查询的数据是能在二级索引的 B+Tree 的叶子节点里查询到,这时就毋庸再查主键索引查,比如底下这条查询语句:
selectidfromproduct whereproduct_no = '0002';
这种在二级索引的 B+Tree 就能查询到结果的过程就叫作「笼罩索引」,也便是只需要查一个 B+Tree 就能找到数据。
TCP怎么结束可靠性?
TCP契约主要通过以下几点来保证传输可靠性:团结管理、序列号、说明应答、超时重传、流量限定、拥塞限定。
团结管理:即三次合手手和四次挥手。团结管理机制省略建立起可靠的团结,这是保证传输可靠性的前提。
序列号:TCP将每个字节的数据皆进行了编号,这便是序列号。序列号的具体作用如下:省略保证可靠性,既能夺目数据丢失,又能幸免数据重迭。省略保证有序性,按照序列号章程进行数据包还原。省略升迁结果,基于序列号可结束屡次发送,一次说明。
说明应答:接纳方接纳数据之后,会回传ACK报文,报文中带有这次说明的序列号,用于奉告讦送方这次接纳数据的情况。在指定时分后,若发送端仍未收到说明应答,就会启动超时重传。
流量限定:接纳端处理数据的速率是有限的,如果发送方发送数据的速渡过快,就会导致接纳端的缓冲区溢出,进而导致丢包。为了幸免上述情况的发生,TCP复古把柄接纳端的处理能力,来决定发送端的发送速率欧洲杯体育。这便是流量限定。流量限定是通过在TCP报文段首部艳羡一个滑动窗口来结束的。
拥塞限定:拥塞限定便是当网罗拥挤严重时,发送端减少数据发送。拥塞限定是通过发送端艳羡一个拥塞窗口来结束的。不错得出,发送端的发送速率,受限于滑动窗口和拥塞窗口中的最小值。拥塞限定措施分为:慢脱手,拥塞幸免、快重传和快复原。
团结管理:即三次合手手和四次挥手。团结管理机制省略建立起可靠的团结,这是保证传输可靠性的前提。
序列号:TCP将每个字节的数据皆进行了编号,这便是序列号。序列号的具体作用如下:省略保证可靠性,既能夺目数据丢失,又能幸免数据重迭。省略保证有序性,按照序列号章程进行数据包还原。省略升迁结果,基于序列号可结束屡次发送,一次说明。
说明应答:接纳方接纳数据之后,会回传ACK报文,报文中带有这次说明的序列号,用于奉告讦送方这次接纳数据的情况。在指定时分后,若发送端仍未收到说明应答,就会启动超时重传。
流量限定:接纳端处理数据的速率是有限的,如果发送方发送数据的速渡过快,就会导致接纳端的缓冲区溢出,进而导致丢包。为了幸免上述情况的发生,TCP复古把柄接纳端的处理能力,来决定发送端的发送速率。这便是流量限定。流量限定是通过在TCP报文段首部艳羡一个滑动窗口来结束的。
拥塞限定:拥塞限定便是当网罗拥挤严重时,发送端减少数据发送。拥塞限定是通过发送端艳羡一个拥塞窗口来结束的。不错得出,发送端的发送速率,受限于滑动窗口和拥塞窗口中的最小值。拥塞限定措施分为:慢脱手,拥塞幸免、快重传和快复原。
发布于:广东省
