- N +

蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟

原标题:蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟

导读:

协议Telnet、FTP、HTTP、SNMP、DNShttp1.0:需要使用keep-alive参数来告知服务器端要建立一个长连接http1.1:默认长连接。...

文章目录 [+]

面经部分出自阿里,其他几家公司有少部分弥补,内容是个人收拾,如有不对,还请纠正,谢谢!

网络编程

ISO模型与协议

运用层:为操作体系或网络运用程序供给拜访网络效劳的接口。协议Telnet、FTP、HTTP、SNMP、DNS

http1.0:需求运用keep-alive参数来奉告效劳器端要树立一个长衔接

http1.1:默许长衔接。支撑只发送header信息,能够用作权限恳求。支撑Host域。

http2.0:多路复用的技能,做到同一个衔接并发处理多个恳求。HTTP2.0运用HPACK算法对header的数据进行紧缩。支撑HTTP2.0的web server恳求数据的时分,效劳器会顺便把一些客户端需求的资源一同推送到客户端,以免客户端再次创立衔接发送恳求到效劳器端获取。这种办法十分适宜加载静态资源。

标明层:对上层数据进行改换(加密、解密、紧缩、格局转化等),确保两台主机的运用层程序能过了解。协议ASCII、ASN.1、JPEG、MPEG

会话层:担任办理主机之间的会话进程,担任树立、办理、停止进程之间的会话。

传输层:将上层数据分段并供给端到端的、牢靠的或不牢靠的传输,还要处理端到端的过失操控和流量操控问题。协议TCP、UDP、SPX

网络层:对子网间的数据包进行路由挑选。此外,网络层还能够完结拥塞操控、网际互连等功用。协议IP、IPX、RIP、OSPF

数据链路层:在不牢靠的物理介质上供给牢靠的传输。该层的效果包含:物理地址寻址、数据的成帧、流量操控、数据的检错、重发等。协议SDLC、HDLC、PPP、STP、帧中继

物理层:为上层协议供给了一个传输数据的物理媒体。

TCP\IP模型与协议

运用层:单位是数据段,协议有FTP、TELNET、HTTP、SMTP、SNMP、TFTP、NTP、DNS

运送层:单位是数据包,协议有TCP、UDP

网络层:单位是数据帧,协议有IP

网络接口层:单位是比特,ARP、RARP

三次握手与四次挥手

tcp拆包粘包

由于一批发送的数据太多或缓冲区太小,将一批数据分红多个segment来发送,叫拆包。

将多批小数据写入一个缓冲区,或读取不及时,一个缓冲区存在多批数据,叫粘包。

处理办法:依据音讯头中的长度与偏移量来重组数据。设置定长音讯,使得一个缓冲区中的segment总是一批数据的。设置音讯鸿沟。

BIO NIO AIO

BIO:同步堵塞IO,每个恳求都要一个线程来处理。

NIO:同步非堵塞IO,一个线程能够处理多个恳求,适用于短衔接、小数据。

AIO:异步非堵塞IO,一个线程处理多个恳求,运用回调函数完结,适用于长衔接、大数据。

DDOS进犯原理与防护办法

SYN flood:假造ip地址发送恳求,占满半衔接行列,导致正常链接被效劳器扔掉。进犯方需求很高的带宽资源。

ACK flood:许多ACK衔接恳求效劳器,高木斗效劳器需求花费CPU资源去查询衔接行列并回应。只要当流量很高时才会对效劳器构成影响。

Connection Flood:运用实在IP,在效劳器上树立许多衔接,然后占满效劳器衔接行列,导致正常衔接被丢掉。

HTTP Get Flood:发送许多会发作sql查询的衔接,使得数据库负载很高。

CSRF跨站恳求假造原理

进犯者盗用了你的身份,以你的名义发送歹意恳求。

比方:假定你去银行网站上经过恳求http://www.mybank.com/Transfer.php?toBankId=11&money=1000来消费1000元。然后登陆某个歹意网站,上面有这么一段代码 。由于你没有登出银行网站,因而会再消费1000.

CSRF进犯是源于WEB的隐式身份验证机制!WEB的身份验证机制尽管能够确保一个恳求是来自于某个用户的浏览器,但却无法确保该恳求是用户同意发送的!

防护办法:1.验证码;2. 后台生成token,让前端恳求带着。3.运用对称加密,后端随机给前端一个密钥,前端进行加密,后端解密。

会话绑架

经过暴力破解、 猜测、盗取(经过XSS进犯)等办法获取到用户session

防护办法

更改Session称号

封闭通明化Session ID。通明化Session ID指当浏览器中的Http恳求没有运用Cookie来寄存Session ID时,Session ID则运用URL来传递。

设置HttpOnly。经过设置Cookie的HttpOnly为true,能够避免客户端脚本拜访这个Cookie,然后有用的避免XSS进犯。

XSS进犯

XSS进犯是Web进犯中最常见的进犯办法之一,它是经过对网页注入可履行代码且成功地被浏览器履行,抵达进犯的意图,构成了一次有用XSS进犯,一旦进犯成功,它能够获取用户的联系人列表,然后向联系人发送虚伪欺诈信息,能够删去用户的日志等等,有时分还和其他进犯办法一同施行比方SQL注入进犯效劳器和数据库、Click绑架、相对链接绑架等施行垂钓,它带来的损害是巨大的,是web安全的头号大敌。

XSS反射型进犯,歹意代码并没有保存在方针网站,经过诱惑用户点击一个链接到方针网站的歹意链接来施行进犯的。

XSS存储型进犯,歹意代码被保存到方针网站的效劳器中,这种进犯具有较强的安稳性和耐久性,比较常见场景是在博客,论坛等交际网站上,但OA体系,和CRM体系上也能看到它身影,比方:某CRM体系的客无极金仙异界游户投诉功用上存在XSS存储型缝隙,黑客提交了歹意进犯代码,当体系办理员查看投诉信息时歹意代码履行,盗取了客户的材料,可是办理员毫不知情,这便是典型的XSS存储型进犯。

+处理办法

在表单提交或许url参数传递前,对需求的参数进行过滤

过滤用户输入。查看用户输入的内容中是否有不合法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等

RPC与HTTP效劳的差异

数据库原理

MYISAM与innodb查找引擎原理

MyISAM引擎运用B+Tree作为索引结构,叶节点的data域寄存的是数据记载的地址。其选用索引文件与数据文件,索引文件只寄存索引,叶子节点寄存数据的物理地址。数据文件寄存数据。其索引办法对错调集的。

InnoDB也运用B+Tree作为索引结构。可是它的主索引与数据都放在一个文件中。这种索引叫做调集索引,由于InnoDB的数据文件自身要按主键调集,所以InnoDB要求表有必要有主键(MyISAM能够没有),假定没有显式指定,则MySQL体系会主动挑选一个能够仅有标识数据记载的列作为主键,假定不存在这种列,则MySQL主动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

差异一:InnoDB的主索引与数据都放在一个文件中。而MYISAM是分隔寄存的。

差异二:InnoDB的辅佐索引data域存储相应记载主键的值而不是地址。

差异三:InnoDB的主键索引是调集索引,而MYISAM不是调集索引。

索引,聚簇索引和二级索引的加锁差异

调集(clustered)索引,也叫聚簇索引。数据行的物理次第与列值(一般是主键的那一列)的逻辑次第相同,一个表中只能具有一个调集索引。

非调集(unclustered)索引。该索引中索引的逻辑次第与磁盘上行的物理存储次第不同,一个表中能够具有多个非调集索引。会发作二次查询。

稠密索引:稠密索引文件中的索引块坚持键的次第与文件中的排序次第共同。

稀少索引:稀少索引没有为每个数据都创立一个索引,它比稠密索引节省了更多的存储空间,但查找给定值的记载需更多的时刻。只要当数据文件是依照某个查找键排序时,在该查找键上树立的稀少索引才干被运用,而稠密索引则能够运用在任何的查找键。

联合索引:将一张表中多个列组成联合索引(col1,col2,col3),其收效办法满意最左前缀准则。

最左前缀:假定咱们创立了联合索引(col1,col2,col3),那么相当于创立了(col1),(col1,col2),(col1,col2,col3)这3个索引,然后where条件会依据呈现的列名挑选最严厉的索引。例如where col1=? and col2=? and col3=?,那么就会运用(col1,col2,col3);假定where col1=? and col3 =?,蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟那么就会运用(col1);假定where col2=? and col3=?,那么一个都不会运用。因而在创立多列索引时,要依据事务需求,where子句中运用最频频的一列放在最左面。

挑选性:不重复数占一切记载的份额,假定有10w条记载,unique之后有9w条,那么挑选性位90%。首要有两个效果:1. 查看某一列是否有必要树立索引;2. 关于String、hash值、日期等字段,应该取多少位来树立索引(即运用前缀索引),由于主键越短,整个索引表越小。

掩盖索引:关于二级索引而言,在innodb中一般是需求先依据二级索引查询到主键,然后在依据一级索引查询到数据。可是如有狼绥绥果select的列都在索引中,就避免进行一级查询。

主键挑选

在运用InnoDB存储引擎时,假定没有特其他需求,请永久运用一个与事务无关的自增字段作为主键。

where 1 = 1:能够便利咱们拼sql,可是运用了之后就无法运用索引优化战略,因而会进行全表扫描,影响功率。

分表分库

水平拆分:依据表中的数据的逻辑联系,将同一个表中的数据依照某种条件拆分到多台数据库(主机)上面。依照1个或多个字段以及相应的规矩,将一张表重的数据分到多张表中去。比方依照id%5的规矩,将一张大表拆分红5张小表。合适具有超大表的体系。

笔直拆分:依照不同的表(或许Schema)来切分到不同的数据库(主机)之上。一般依照模块来分库。合适各事务之间耦合度十分低的体系。

validationQuery:用来验证数据库衔接的查询句子,这个查询句子有必要是至少回来一条数据的SELECT句子。

select确认记载

select * from table where ?;不加锁

将查询放到事物中

select * from table where ? lock in share mode;加同享锁

select * from table where ? for update;加排它锁

insert, update, delete;加排它锁

阻隔等级

read uncommit:读不加锁,写加同享锁。会发作脏读、幻读。

read commit:读加同享锁,写加排它锁,但不加空隙锁。空隙温州医学院王静锁的首要效果是避免不行重复读,但会加大锁的规模。

repeatable read(innodb默许):读加同享锁,写加空隙排它锁。留意,Innodb对这个等级进行了特别处理,使得这个等级能够避免幻读,但不是一切引擎都能够避免幻读!(网易面试官问)

serialization:会给整张表加锁,强共同,可是功率低。

innodb中的锁

MVCC(multi-Version Concurrency Control):读不加锁,读写不抵触。合适写少读多的场景。读操作分为:快照读(回来记载的可见版别,不加锁)、当时读(记载的最新版别,加锁,确保其它记载不修正)。

LBCC(Lock-Based Concurrency Control):

join原理

Simple Nested-Loo早妃p Join:功率最低,依照join的次第,在join的特色上一个个扫描,并兼并成果。

Index Nested-Loop Join:功率最高,join的特色上面有索引,依据索引来匹配。

Block Nested-Loop Join:用于没有索引的列。它会选用join buffer,将表面的值缓存到join buffer中,然后与内表进行批量比较,这样能够下降对表面的拜访频率

galera

多主架构:真实的多点读写的集群,在任何时分读写数据,都是最新的。

同步仿制,各节点间无推迟且节点宕机不会导致数据丢掉。

严密耦合,一切节点均坚持相同状况,节点间无不同数据。

无需主从切换操作。

无需进行读写别离。

并发仿制:从节点在APPLY数据时,支撑并行履行,有更好的功用体现。

毛病切换:在呈现数据库毛病时,由于支撑多点写入,切的十分简略。

热插拔:在效劳期间,假定数据库挂了,只需监控程序发现的够快,不行效劳时刻就会十分少。在节点毛病期间,节点自身对集群的影响十分小。

主动节点克隆:在新增节点,或许停机保护时,增量数据或许根底数据不需求人工手动备份供给,Galera Cluster会主动拉取在线节点数据,终究集群会变为共同。

对运用通明:集群的保护,对运用程序是通明的,简直感觉不到。

以下是缺陷

现在的仿制仅仅支撑InnoDB存储引擎

DELETE操作不支撑没有主键的表

在多主环境下LOCK/UNLOCK TABLES不支撑以及锁函数GET_LOCK(), RELEASE_LOCK()

由于集群是达观的并发操控,事务commit或许在该阶段间断。

整个集群的写入吞吐量是由最弱的节点约束,假定有一个节点变得缓慢,那么整个集群将是缓慢的。为了安稳的高功用要求,一切的节点应运用共同的硬件。

LSM Tree,首要运用于nessDB、leveldb、hbase

中心思维的中心便是抛弃部分读才能,交流写入的最大化才能。它假定假定内存满足大,因而不需求每次有数据更新就有必要将数据写入到磁盘中,而能够先将最新的数据驻留在内存中,比及堆集到终究多之后,再运用归并排序的办法将内存内的数据兼并追加到磁盘队尾。(运用归并排序是要由于带排序树都是有序树)

LSM具有批量特性,存储推迟。B树在insert的时分或许会构成割裂,或许会构成随机读写。而LSM将屡次单页随机写,变成一次多页随机写,复用了磁盘寻道时刻,极大进步功率。

LSM Tree抛弃磁盘读功用来交流写的次第性。

一般会运用Bloom Filter来优化LSM。当将内存中的数据与磁盘数据兼并的时分,先要判别数据是否有重复,假定不必Bloom Filter就需求在磁盘上一层层地找,而运用了之后就会下降查找价值。

多线程

synchronized、CAS

Collections

支撑高并发的数据结构,如ConcurrentHashMap

依据AQS完结的锁、信号量、计数器原理

Runnable与Callable的差异

线程池

效果

削减在创立和毁掉线程上所花的时刻以及体系资源的开支 。

当时使命与主线程阻隔,能完结和主线程的异步履行,特别是许多能够分隔重复履行的使命。

堵塞行列

threadlocal

结构

Spring

IOC/DI

Core、Beans、Context、Expression Language

JDBC、ORM、OXM、JMS、Transaction

AOP

Web

Test

@Autowired原理

工厂办法

反射

主动装备

@ConfigurationProperties(prefix = "hello"):读取以hello为开始的装备,特色类运用

@Configuration:指名当时类为装备类

@EnableConfigurationProperties(Properties):指名装备特色类

@ConditionalOnClass(Condition.class):条件类,只要Condition.class存在,当时装备类才收效

Spring Boot在spring.factories装备了许多全限定名的装备类。

Netty架构

Redis

中心原理

常用数据类型

String:二进制安全,能够存任何数据,比方序列化的图片。最大长度位512M.

Hash:是KV对调集,实质是String类型的KV映射,合适存储目标。

List:简略字符串链表,能够在left、right两头刺进,实质是双向链表。缓冲区也是用这个完结。

Set:String类型的无序调集,内部完结是一个 value永久为null的HashMap,实践便是经过核算hash的办法来快速排重的,这也是set能供给判别一个成员是否在调集内的原因。

zset:有序调集,每个元素会相关一个double类型的score,然后依据score进行排序。留意:元素不能重复,可是score是能够重复的。运用HashMap和跳动表(SkipList)来确保数据的存储和有序,HashMap里放的是成员到score的映射,而跳动表里寄存的是一切的成员,排序依据是HashMap里存的score.

pub/sub:在Redis中,你能够设定对某一个key值进行音讯发布及音讯订阅,当一个key值进步行了音讯发布后,一切订阅它的客户端都会收到相应的音讯。

耐久化

RDB:一种是手动履行耐久化指令来耐久化快照;另一种是在装备文件中装备战略,来主动耐久化。耐久化指令有save、bgsave两种,bgsave会调用fork指令,发作子进程来进行耐久化,而父进程持续处理数据,可是耐久化的快照是fork那一刻的快照,因而这种战略或许会丢掉一部分数据。特色:每次都记载一切数据,康复快,子进程不影响父进程功用。

AOF:append only file,将每条操作指令都记载到appendonly.aof文件中,可是不会立马写入硬盘,咱们能够装备always(每有一个指令,都同步)、everysec(每秒同步一次)、no(没30秒同步一次)。往往everysec就够了。aof数据丢掉要比RDB小。特色:有序记载一切操作,数据丢掉更少,会对操作做紧缩优化,bgrewriteaof也会fork子进程,不影响父进程功用

事务

Transactions:不是严厉的ACID的事务,可是这个Transactions仍是供给了根本的指令打包履行的功用(在效劳器不出问题的情况下,能够确保一连串的指令是次第在一同履行的,中心有会有其它客户端指令插进来履行)。

Redis还供给了一个Watch功用,你能够对一个key进行Watch,然后再履行Transactions,在这进程中,假定这个Watched的值进行了修正,那么这个Transactions会发现并拒绝履行。

KafKA

topic

broker

partition

consumer

producer

stream

存储机制

网络模型

留意:partition之间是无序的

音讯行列的生产者顾客中顾客没有收到音讯怎样办,音讯有次第比方1.2.3可是收到的却是1.3.2怎样办?音讯发过来的进程中损坏或许犯错怎样办

Spring security

拦截器栈

@PreAuthorize

@PostAuthorize

支撑Expression Language

jvm原理

内存模型

废物搜集器,CMS与G1是要点

废物搜集算法

符号-铲除(CMS)简略发作碎片,当碎片太多会提早触发Full GC

仿制(年青代根本用这个算法)会糟蹋一半的或许感觉

符号-收拾(serial Old、Parallel Old)

Serial:选用单线程stop-the-world的办法进行搜集。当内存不足时,串行GC设置中止标识,待一切线程都进入安全点(Safepoint)时,运用线程暂停,串行GC开端作业,选用单线程办法收回空间并收拾内存。串行搜集器特别合适堆内存不高、单核乃至双核CPU的场合。

ParNew

Parallel Scavenge

CMS:

初始符号(stop of world)

并行符号、预整理

从头符号(stop of world)

并行整理

重置

G1:将堆分红许多region,能够一同堆年青代与老时代进行搜集

初始符号(stop of world):初始符号(Initial Mark)担任符号一切能被直接可达的根目标(原生栈目标、大局目标、JNI目标)

并行符号:

从头符号(stop of world):

整理(stop of world):

重置:蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟

Pause Prediction Model(中止猜测模型)

中心代码MAX2(seq->davg() + sigma()蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟 * seq->dsd(),seq->davg() * confidence_factor(seq->num()));其间seq->davg()标明衰减均值,sigma()回来一个系数,标明信任度,dsd标明衰减标准偏差,confidence_factor标明可信度相联系数。

gc触发条件

从年青代分区仿制存活目标时,无法找到可用的闲暇分区,会触发Minor GC

从老时代分区搬运存活目标时,无法找到可用的闲暇分区,会触发Major GC

分配巨型目标时在老时代无法找到满足的接连分区,会触发Major GC

可达性剖析:经过查看一块内存空间能否被root抵达,来判别是否对其进行收回。

jdk不同版别新增的部分特性

1.7

switch句子中支撑运用字符串了

try catch支撑捕获多个反常,竖线切割反常即可

try块中运用的资源能够不必手动在finally中封闭

支撑 List tempList = new ArrayList<>()的声明办法,其实是泛型实例化类型主动揣度。

供给自界说封闭类的接口,完结AutoCloseable ,就能够在类毁掉的时分主动封闭一些资源。

1.8

接口的默许办法

La魅惑冷情令郎mbda 表达式,@FunctionInterface注解

容许你运用 :: 关键字来传递办法或许结构函数引证

在包java.time下包含了一组全新的时刻日期API。

jvm调优

VisualVM:JDK自带JVM可视化东西,能过对内存、gc、cpu、thread、class、变量等等信息进行可视化。

类加载

类加载器

Bootstrap ClassLoader:由c言语完结,用来加载JVM自身作业需求的类。这个类不在双亲派遣体系中。

ExtClassLoader:用于加载java\jre\lib\ext目录下的jar

AppClassLoader:父类加载器为ExtClassLoader,会加载classpath下一切的类。

类加载办法

山人加载:不经过代码里边调用ClassLoader来加载需求的类,而是经过JVM来主动加载需求的类到内存。

显现加载:经过调用ClassLoader.loadClass或Class.forName(),或自己完结ClassLoader的findClass办法来加载类。

自界说ClassLoader:父类加载器总是getSystemClassLoader()办法获取到的ClassLoader。由于不论调用哪个父类加载器,创立目标终究都会调用getSystemClassLoader作为父加载器,在一般运用中getSystemClassLoader会获取AppClassLoader,但在tomcat唐竹秋中getSystemClassLoader()会回来StandardClassLoader。

流程:加载(调用findClass办法)->验证(各种查看)->预备(将静态特色用零值初始化)->解析(将符号引证替换成直接引证)->初始化(调用clinit办法)

双亲派遣:记载一个类的时分,会先递归查看父类是否加载过,避免重加载。假定发作重加载,那本来的类与新加载的类 stanceof判别是false。

热布置:运用判别两个class是否是同一个,需求校验类名与类加载器是否相同的原理。热布置的类都是用完开释,每次运用都先new一个classLoader,然后用这个classLoader来加载这个类,这样生成的类尽管与之前的称号相同,可是实践上不是同一个。

javac编译器

读取源码

词法剖析,从原文件的字符开端,依照java语法标准顺次找出package、import、类界说、特色、办法、关键词等。

语法剖析,构成一颗契合java标准的笼统语法树,它能将首要词法用一个结构化的办法去表达。

语义剖析,将一些难明的、杂乱的语法转化为愈加简略的语法。比方添加免除语法糖、默许结构办法、查看句子是否可达、查看变量类型是否匹配、查看checked exception 是否捕捉或抛出.

经过字节码生成器生成字节码

interface能够多承继;class只能单承继,多完结

String

无法被承继,由于它是final李教授抗寒蚊子被判刑 class,其被规划成final首要出于以下考虑:

字符串常量池的需求。字符串常量池的诞生是为了进步功率和削减内存分配。字符串重复的或许性很高,而且其不行变功用够便利常量池优化。

安全性考虑。正由于运用字符串的场景如此之多,所以规划成不行变能够有用的避免字符串被有意或许无意的篡改。(可是经过反射仍是能够侵略的)

作为HashMap、HashTa蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟ble等hash型数据key的必要。由于不行变的规划,jvm底层很简略在缓存String目标的时分缓存其hashcode,这样在履行功率上会大大进步。

String.equals()是的完结是逐字符比较两个String目标的char,而==是比较引证。

String.intern()会获取在字符串常量池中的字符串目标,假定该字符串不在常量池中,那会将它假定常量池,然后再回来该目标。因而假定连个String的值相同,那么调用intern()办法回来的都是其再常量池中的目标,而常量池中相同的字符串只要一个目标,因而运用==比较也是true。

int的规模-2^32~2^32-1

序列化的底层完结

java深仿制

完结Cloneable接口的clone办法

经过序列化完结

规划办法

单例

两层查看

静态内部类

枚举(jdk1.8之后支撑)

观察者办法

装修者办法:jdk中输入输出流用到了该办法

适配器办法:jdk中Reader、writer用到了该办法

署理办法

静态署理

JDK动态署理

Cglib到动态署理

生产者顾客办法

工厂办法

项目办理与运维东西

git+Jenkins

maven

K8S

pod:Pod是一切事务类型的根底,一切的容器均在Pod中运转,它是一个或多个容器的组合。每一个Pod都会被指使一个仅有的Ip地址,在Pod中的每一个容器同享网络命名空间,包含Ip地址和网络端口。Pod能够被指定同享存储卷的调集,在Pod中一切的容器能够拜访同享存储卷,容许这些容器同享数据。

kubelet:kubelet担任办理pods和它们上面的容器,images镜像、volumes、etc。

kube-proxy:为Service供给cluster内部的效劳发现和负载均衡;

etcd:一切master的持续状况都存在etcd的一个实例中。这能够很好地存储装备数据。由于有watch(观察者)的支撑,各部件和谐中的改动能够很快被发觉。

一旦一个Pod被创立,体系就会不断的监控Pod的健康情况以及Pod地点主机的健康情况,假定这个Pod由于软件原因挂掉了或许地点的机器挂掉了,replication controller 会主动在一个健康的机唐山师范学院玉田分校器上创立一个一摸相同的Pod,来坚持本来的Pod冗余状况不变,一个运用的多个Pod能够同享一个机器。

ingress,用于负载均衡

docker

docker与虚拟机的差异

数据结构

平衡二叉树AVL

高度log(n)

刺进时刻杂乱度log(n)

红黑树

刺进时刻杂乱度log(n)

查找时刻杂乱度log(n)

在查找是,红黑树尽管杂乱度也是log(n),可是从功率上比要略低于AVL。可是其优势在于刺进元素的时分,不会像AVL那样频频地旋转简伯丞。

B+Tree:只要叶子节点存值,非叶子节点只存key和child,因而相同巨细的物理页上能寄存更多的节点。每一层的节点数量越多,意味着层次越少,也就意味着IO次数越少,因而十分合适数据库以及文件体系。

大根堆:选用数组存储树,是一个彻底树。先刺进到数组终究的方位上,然后选用上浮的思维,将该元素与比它小的父元素互换,直到parent>target,浮到root;然后将root与未排序的终究一个元素交流方位;重复以上进程,直到一切元素都有序。刺进如查找的杂乱度都是log(n)。

优先行列PriorityQueue,Java中运用小根堆完结,非线程安全。

优先堵塞行列PriorityBlockQueue,线程安全。

算法

快排

时刻杂乱度O(nlog(n))

空间杂乱度O(log(n))

堆排序

时刻杂乱度O(nlog(n))

空间杂乱度O(1)

归并排序

时刻杂乱度O(nlog(n))

空间杂乱度O(n)

跳表

时刻杂乱度O(log(n))

空间杂乱度O(2n)蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟

高度O(log(n))

散布式

cap理论

可用性

共同性

分区容忍性:对网络断开的容忍度,有点像鲁棒性

拜占庭将军问题

问题描绘

拜占庭帝国即中世纪的土耳其,具有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙屹立,铜墙铁壁,没有一个独自的邻邦能够成功侵略。任何单个邻邦侵略的都会失利,一同也有或许自身被其他9个邻邦侵略。拜占庭帝国防护才能如此之强,至少要有十个邻邦中的一半以上一同进攻,才有或许攻破。可是,假定其间的一个或许几个邻邦自身容许好一同进攻,但实践进程呈现变节,那么侵略者或许都会被消灭。所以每一方都当心行事,不敢简单信任邦邻。这便是拜占庭将军问题。这个tracob问题的实质是要达到共同的共同。

Raft 算法

有leader、follower、candidate

选主流程:

在开始,还没有一个主节点的时分,一切节点的身份都是Follower。每一个节点都有自己的计时器,当计时抵达了超时时刻(Election Timeout),该节点会转变为Candidate。

成为Candidate的节点,会首先给自己投票,然后向集群中其他一切的节点建议恳求,要求咱们都给自己投票。

其他收到投票恳求且还未投票的Follower节点会向建议者投票,建议者收到反应告诉后,票数增撸大哥加。

当得票数超越了集群节点数量的一半,该节点晋升为Leader节点。Lea搬搬网der节点会马上向其他节点发出告诉,告诉咱们自己才是老迈。收到告诉的节点悉数变为Follower,而且各自的计时器清零。

留意:每个节点的超时时刻都是不相同美好小区七号楼的。比方A节点的超时时刻是3秒,B节点的超时时刻是5秒,C节点的超时时刻是4秒。这样一来,A节点将会最早建议投票恳求,而不是一切节点一同建议。假定一切节点一同建议投票,必然会导致咱们的票数差不多,构成僵马广儒与陈晓旭的爱情局,谁也当不成老迈。一旦Leader节点挂掉,发不出告诉,那么计时抵达了超时时刻的Follower节点会转变为Candidate节点,建议选主投票,循环往复。

同步流程

由客户端提交数据到Leader节点。

由Leader节点把数据仿制到集群内一切的Follower节点。假定一次仿制失利,会不断进行重试。

Follower节点们接纳到仿制的数据,会反应给Leader节点。

假定Leader节点接纳到超越对折的Follower反应,标明仿制成功。所以提交自己的数据,并告诉客户端数据提交成功。

由Leader节点告诉集群内一切的Follower节点提交数据,然后完结数据同步流程。

zookeeper

leader:仿制进行投票的建议和抉择,更新体系状况。

follower:接纳client的恳求并回来成果,在选主进程中进行投票。

observer:接纳client衔接,并将恳求转发给leader节点。在不参与投票,仅仅同步leader状况。

client:恳求建议方。

Zab(Zookeeper Atomic Broadcast)协议,有两种办法,它们分别是康复办法(选主)和播送办法(同步)。

选主:有两种算法:1. basic paxos;2. fast paxos(默许)

basic paxos流程

当时Server担任推举线程,其首要功用是对投票成果进行计算,并选出引荐的Server。

推举线程首先向一切Server建议一次问询(包含自己);

推举线程收到回复后,验证是否是自己建议的问询(验证zxid是否共同),然后获取对方的id(myid),并存储到当时问询目标列表中,终究获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次推举的投票记载表中;

收到一切Server回复今后,就核算出zxid最大的那个Server,并将这个Server相关信息设置成下一非必须投票的Server;

线程将当时zxid最大的Server设置为当时Server要引荐的Leader,假定此刻取胜的Server取得n/2 + 1的Server票数, 设置当时引荐的leader为取胜的Server,将依据取胜的Server相关信息设置自己的状况,不然,持续这个进程,直到leader被推举出来。

同步流程

leader等候server衔接;

Follower衔接leader,将最大的zxid发送给leader;

Leader依据follower的zxid确认同步点;

完结同步后告诉follower 现已成为uptodate状况;

Follower收到uptodate音讯后,又能够从头承受client的恳求进行效劳了。

事务次第共同性:选用了递加的事务id号(zxid)来标识蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟事务。一切的提议(proposal)都在被提出的时分加上了zxid。

server的状况

LOOKING:当时Server不知道leader是谁,正在搜索

LEADING:当时Server即为推举出来的leader

FOLLOWING:leader现已推举出来,当时Server与之同步

文件体系:zookeeper的告诉机制、散布式锁、行列办理、装备办理都是依据文件体系的。文件体系中有一下几种节点:

PERSISTENT-耐久化目录节点,客户端与zookeeper断开衔接后,该节点仍旧存在 。

PERSISTENT_SEQUENTIAL-耐久化次第编号目录节点,客户端与zookeeper断开衔接后,该节点仍旧存在,仅仅Zookeeper给该节点称号进行次第编号。

EPHEMERAL-暂时目录节点蓝盈莹,2019|阿里11面+EMC+网易+美团面经,云冈石窟,客户端与zookeeper断开衔接后,该节点被删去。

EPHEMERAL_SEQUENTIAL-暂时次第编号目录节点,客户端与zookeeper断开衔接后,该节点被删去,仅仅Zookeeper给该节点称号进行次第编号。

告诉机制:客户端注册监听它关怀的目录节点,当目录节点发作改变(数据改动、被删去、子目录节点添加删去)时,zookeeper会告诉客户端。

装备办理:把这些装备悉数放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后一切相关运用程序对这个目录节点进行监听,一旦装备信息发作改变,每个运用程序就会收到 Zookeeper 的告诉,然后从 Zookeeper 获取新的装备信息运用到体系中。

散布式锁:有了zookeeper的共同性文件体系,锁的问题变得简略。锁效劳能够分为两类,一个是坚持独占,另一个是操控时序。

独占锁:将zookeeper上的一个znode看作是一把锁,经过createznode的办法来完结。一切客户端都去创立 /distribute_lock 节点,终究成功创立的那个客户端也即具有了这把锁。用完删去掉自己创立的distribute_lock 节点就开释出锁。

操控时序锁:/distribute_lock 现已预先存在,一切客户端在它下面创立暂时次第编号目录节点,和选master相同,编号最小的取得锁,用完删去。

行列办理,分为同步行列、非同步行列

同步行列,当一个行列的成员都聚齐时,这个行列才可用,不然一向等候一切成员抵达。 在约好目录下创立暂时目录节点,监听节点数目是否是咱们要求的数目。

行列依照 FIFO 办法进行入队和出队操作。和散布式锁效劳中的操控时序场景根本原理共同,入列有编号,出列按编号。

数据仿制的优点

容错:一个节点犯错,不致于让整个体系停止作业,其他节点能够接管它的作业;

进步体系的扩展才能 :把负载散布到多个节点上,或许添加节点来进步体系的负载才能;

进步功用:让客户端本地拜访就近的节点,进步用户拜访速度。

数据仿制集群体系分下面两种:

写主(WriteMaster) :对数据的修正提交给指定的节点。读无此约束,能够读取任何一个节点。这种情况下客户端需求对读与写进行差异,俗称读写别离;

写恣意(Write Any):对数据的修正可提交给恣意的节点,跟读相同。这种情况下,客户端对集群节点的人物与改变通明。

Broker办法

首要有这6个类:Client,Server,Client_Proxy,Server_Proxy,Broker,Bridge。

Server:便是咱们依据事务写的效劳。

Client:恳求建议方,Client发送恳求到Broker,并从Broker上接纳呼应或反常。Client和Server仅仅逻辑上相关罢了,实践上Client并不知道Server的切当方位。

Broker:成音讯转发器。Broker也担任一些操控和办理操作。它能够定位效劳端的方位,若发作反常,能够将反常捕获传给Client。Broker需求供给注册效劳的接口给Server。

Client_Proxy:连系Client和Broker,这一层确保了通讯的通明性,使Client调用长途效劳就像调用本地的效劳相同。

Server_Proxy:与Client_Proxy相对应的,它承受恳求,解包音讯,解分出参数并调用效劳的完结接口。

Bridge:Bridge用来衔接各个Broker,一般这个组件是可选的。

共同性hash算法原理

微效劳

Spring cloud

网关:zuul

散布式\版别化装备 config

效劳注册和发现:Eureka,装备时需求留意多久改写列表一次,多久监测心跳等。

service-to-service 调用

负载均衡:Ribbon;在生成RestTemplate的bean时,经过@LoadBalanced注解能够使得RestTemplate的调用

断路器:Hystrix

监控:spring admin。在发动类上加@EnableAdminServer注解。

java web

servlet作业原理

创立:假定load-on-startup>0,那就会在Context容器发动的时分实例化。1、Wrapper.loadServlet获取servletClass。2、传给InstanceManager创立目标。

初始化:即调用Servlet的init办法

container

engine

host,一个端口一个,或tomcat上面一个效劳一个

context,办理多个wrapper,是servlet的运转环境

wrapper,一个servlet一个

connector,担任承受恳求,并将恳求封装成request,一同创立repsonse目标传给container。

service天禄xcc,一个server有多个service,一个service有一个container与多个connector

linux

硬链接与软衔接

硬链接:数据节点经过引证计数的办法来对指向它的硬链接计数,当计数为0就删去。

软衔接:咱们能够把它看成是快捷办法,它仅仅记载了某个文件的硬链接的途径,假定咱们把源文件删去,再从头创立一个相同姓名的文件,那么软衔接指向的便是新创立的文件。

虚拟文件体系(VFS):文件体系是有许多完结的,比方ext2、ext3、FAT等等,而VFS则是存在于运用程序与文件体系中心,它封装了open、close、read、write等等操作文件体系的接口,为运用程序屏蔽掉不同文件体系之间的差异。

VFS数据结构

其它

bitmap,大文件交集

Elasticsearch索引原理

从内存到屏幕阅历了啥

高并发场景的限流,你怎样来确认限流限多少,模仿场景和实践场景有差异怎样处理,

EMC面试

说一下redis与女生裸kafka,redis耐久化战略

git中rebase与merge差异

docker底层原理,依靠操作体系的什么

ls -l | grep xxx的履行进程,尽或许的细,是多进程仍是单进程?

两个有序数组求中位数

算法 3Sum、中序遍历非递归完结、循环打印矩阵

final、finally、finanize

jvm内存模型

废物收回器

Spring特色介绍下

Synchronize与ReentrantLock的差异、运用场景

CAS运用场景

聊了下git+jekins+K8S+docker完结主动化布置

innodb原理,运用张思旋场景,与云亭应银河MYISAM在场景上的差异

weakReference、softReference等

Hbase的原理,LSM Tree

Linux中,哪种进程能够运用管道

美团

权限模型

介绍下线程池,堵塞行列的用法,无界行列真的无界吗?

说一下redis

kafka存储模型与网络模型

zookeeper与redis完结散布式锁

达观锁与失望锁

算法:有n个人,给你ai与aj的身高联系,如ai比aj高,进行身高排序,假定条件不满意,则输出“不满意”

Spring boot的特性

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇: