
尊龙凯时体育袭取玄虚类的环节字为extends-尊龙d88官网(中国)登录入口
新闻
图解学习网站: 各人好,我是小林。 之前有同知识我银行软开岗亭的口试要如何准备?难度如何? 银行的口试跟互联网公司的口试还是有区别,银行除了时间口试以外,还会有结构化口试、无指挥经营的口试问题,这类体式主若是调查同学们的软实力,以及责罚问题的想路。 那针对时间口试,银行也会问八股文,可是问的未几,而且难度相对互联网公司口试不要太陋劣了,银行的时间面豪迈是 20 分钟傍边,而互联网中大厂的时间口试渊博是 60 分钟。 是以有学历上风的同学,面银行难度不大,只需要准备好一些陋劣八股文基本齐能搪塞时
详情
图解学习网站:
各人好,我是小林。
之前有同知识我银行软开岗亭的口试要如何准备?难度如何?
银行的口试跟互联网公司的口试还是有区别,银行除了时间口试以外,还会有结构化口试、无指挥经营的口试问题,这类体式主若是调查同学们的软实力,以及责罚问题的想路。
那针对时间口试,银行也会问八股文,可是问的未几,而且难度相对互联网公司口试不要太陋劣了,银行的时间面豪迈是 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报文段首部珍爱一个滑动窗口来终了的。
拥塞限度:拥塞限度便是当蚁集拥挤严重时,发送端减少数据发送。拥塞限度是通过发送端珍爱一个拥塞窗口来终了的。不错得出,发送端的发送速率,受限于滑动窗口和拥塞窗口中的最小值。拥塞限度方法分为:慢动手,拥塞幸免、快重传和快规复。
发布于:广东省