1.七层网络结构前端
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。mysql
2.TCP与UDP的区别git
a.数据可靠与不可靠,基于链接和无链接。算法
b.TCP会有三次握手、确认、窗口、重传、拥塞控制等。UDP无spring
c.TCP须要创建链接,慢,占用系统资源,效率较低,且容易受到攻击。UDP快、但网络拥堵时容易丢包。sql
d.TCP适用于保证数据安全的场景:http、ssh、pop、telnet、ftp、smtp。UDP适用的场景:语音、视频、TFTP等。数据库
e.TCP点对点链接。UDP能够一对一,一对多,多对多。浏览器
TCP有的一些特性:安全
。ARQ(自动重复请求):出错时尝试简单的 从新发送。服务器
。窗口:若是你把在一个通讯对话中发送的全部分组排成长长的一行,但只能经过一个小孔来观察他们,你就只能看到他们的一个子集——像经过一个窗口观看同样。
。流量控制:接收方跟不上发送方的速率时,会强迫发送方慢下来。拥塞控制属于流量控制的一种形式。
3.红黑树
红黑树:是平衡搜索树中的一种,能够保证在最坏状况下基本动态集合操做的时间复杂度为O(lgn);
树中每一个结点包含5个属性:color、key、left、right、和p。
性质:
1.每一个结点或是红色的或是黑色的。
2.根节点是黑色的。
3.每一个叶节点是黑色的。
4.若是一个节点是红色的,则它的两个子节点都是黑色的。
5.对每一个节点,从该结点到其全部后代叶结点的简单路径上,均包含相同数目的黑色结点。
4.平衡二叉树
它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,而且左右两个子树都是一棵平衡二叉树
5.HashMap原理
待完善。
6.Spring IoC原理
IoC(控制反转)也称为依赖注入(DI)。在传统的开发模式中,一般在一个类中使用new Object来建立其余类的对象,这样,咱们程序的耦合度会变得很高。而Spring经过容器来管理对象之间的依赖关系,通俗来说,若是对象须要依赖其余对象,那么就向Spring容器来提交本身的需求对象,Spring容器将提供给对象请求的需求对象。对象的生命周期以及相互之间的协调不禁本身掌握,而是由Spring容器来掌握,这个过程和传统相比是相反的,所以称为控制反转。
两个包:org.springframework.beans
和org.springframework.context;
两个主要接口:BeanFactory,ApplicationContext
7.Redis回收策略
volatile-lru:从已设置过时时间的数据集中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过时时间的数据集中挑选将要过时的数据淘汰
volatile-random:从已设置过时时间的数据集中任意选择数据淘汰
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
allkeys-random:从数据集中任意选择数据淘汰
no-enviction:禁止回收数据
8.大文件查找指定条件的行(太大,没法加载到内存,在磁盘中)
一种不太好的方式:拆分大文件为小文件。
另外一种大概多是加索引排序??
9.如何同步。如何解决并发。
a.synchronized关键字
b.锁
c.Java集合框架中的一些类须要了解。
10.乐观锁和悲观锁
乐观锁:每次拿数据的时候认为别人不会修改,因此不会上锁,可是在更新时会判断在此期间别人有没有更新操做的数据,可使用版本号version等机制做为更新依据。乐观锁适应于多读的状况。可使用CAS实现。
悲观锁:老是假设最坏的状况,每次操做数据以前都会上锁,好比行锁、表锁、读写锁等。使用synchronized实现。
使用的时机:当访问冲突几率小于20%的时候,使用乐观锁,不然使用悲观锁,且乐观锁的重试次数很多于3次。
11.GC
四种算法:标记清理、复制、标记整理、分代收集。
a.Serial收集器:单线程收集器,采用复制算法,STW(stop the world),在进行垃圾收集时,必须暂停其余全部的工做线程,直到它收集结束。优势:在单线程内存较小环境下,无线程交互,效率较高。
b.ParNew收集器:Serial的多线程版本。与Serial几乎如出一辙,除了是多线程外。优势:在新生代中只有此和Serial可以配合CMS收集器工做。
c.Parallel Scavenge收集器:并行清除收集器。使用复制算法,也是并行的多线程收集器。优势:达到一个可控制的吞吐量。参数MaxGCPauseMillis能够尽量的保证内存回收花费的时间不超过设定值。GCTimeRatio参数能设置吞吐量大小。UseAdaptiveSizePolicy:GC自动调节策略,虚拟机会根据当前系统的运行状况收集性能监控信息。动态调整参数以提供合适的停顿时间和最大的吞吐量。
d.Serial Old收集器:Serial 收集器的老年代版本。也是单线程的。使用标记整理算法。也是Client模式下的虚拟机使用。
e.Parallel Old收集器:Parallel Scavenge的老年代版本。使用标记整理算法。优势:在注重吞吐量和CPU资源敏感的场合能够优先考虑这两种收集器。
f.CMS收集器:Concurrent Mark Sweep 标记清除算法实现。以获取最短回收停顿时间为目标的收集器,重视服务器的响应速度。整个过程分四步:初始标记、并发标记、从新标记、并发清除。一、 3须要STW。并发收集,低停顿。缺点:对CPU资源敏感,耗费cpu资源;没法处理浮动垃圾,在并发清理时产生的垃圾;空间碎片过多。
g.G1收集器:1.7商用。优势:并行和并发:充分利用多cpu、多核环境来缩短STW时间。分代收集。空间整合:总体是标记整理,局部是复制。可预测的停顿:创建可预测的停顿时间模型。将整个Java堆划分为多个大小相等的独立区域(Region)。虚拟机使用Remembered Set来避免全堆扫描。四个步骤:初始标记、并发标记、最终标记、筛选回收。
12.TCP三次握手和四次挥手
TCP头部:标准长度是20字节。
序列号:标识了TCP发送端到TCP接收端的数据流的一个字节,该字节表明着包含该序列号的报文段的数据中的第一个字节。
确认号:该确认号的发送方期待接收的下一个序列号。
CWR:拥塞窗口标示。发送方下降它的发送速率。
ECE:ECN回显。发送方接收到了一个更早的拥塞控制。
URG:紧急。紧急指针有效。
ACK:确认。确认好字段有效。
PSH:推送。接收方应尽快给应用程序传送这个数据。
RST:重置链接。常常是由于错误。
SYN:用于初始化一个链接的同步序列号。
FIN:该报文段的发送方已经结束向对方发送数据。
创建链接步骤:
步骤一:主动开启者(客户端)发送一个SYN报文段,并指明本身想要链接的端口号和它的客户端初始序列号(记为ISN(c))。
步骤二:服务器发送本身的SYN报文段做为响应,并包含了它的初始序列号(记为ISN(s)),此外,为了确认客户端的SYN,服务器将包含的ISN(c)数值+1后做为返回的ACK数值。所以,每发送一个SYN,序列号就会自动+1.若是出现丢失的状况,该SYN将会重传。
步骤三:为了确认服务器的SYN,客户端将ISN(s)的数值+1后做为返回的ACK数值。
断开链接步骤:
步骤一:链接的主动关闭者发送一个FIN段指明接收者但愿看到本身当前的序列号K和一个ACK段用于确认对方最近一次发来的数据L。
步骤二:链接的被动关闭者将K的数值+1做为响应的ACK值,以代表它已经成功接收到主动关闭者发送的FIN。
步骤三:上层的应用程序会被告知链接的另外一端已经提出了关闭的请求。这将致使应用程序发起本身的关闭操做,即发送本身的FIN和序列号L。
步骤四:为完成链接的关闭,最后发送的报文段还包含一个ACK用于确认上一个FIN。若是出现FIN丢失的状况,那么发送方将从新传输知道接收到一个ACK确认标识。
13. 公平锁非公平锁
公平锁:若是一个锁是公平的,那么锁的获取顺序就应该符合请求的绝对时间顺序,也就是FIFO。
非公平锁:不会按照FIFO顺序来执行同步,而是使用抢占式,只要CAS设置同步状态成功,则表示当前线程获取了锁。
公平锁每每没有非公平锁效率高。但不是全部的场景都是TPS做为惟一指标。
14.Spring MVC的请求流程
Spring MVC的全部请求都会经过一个前端控制器Servlet。名称为DispatcherServlet①。而后DispatcherServlet查询一个或者多个处理器映射(Handler Mapping)②来肯定处理请求的控制器(Controller)③,是根据请求携带的URL信息肯定的。以后控制器根据请求的数据,委托给一个或多个服务对象处理相关业务逻辑,完成后将返回的信息(称为Model)返回到用户并在浏览器中显示。大部分时候须要将Model格式化输出,好比HTML,因此控制器会将Model数据打包,而且标识出用于渲染输出的视图名,返回给DispatcherServlet④。以后DispacherServlet将使用视图解析器(View Resolver)⑤来将逻辑视图名匹配为一个特定的视图实现。多是JSP。这个特定的视图将使用模型数据渲染输出⑥,经过响应对象传递给客户端⑦。
15.进程的状态
进程是资源分配的最小单位,线程是程序执行的最小单位。
进程有本身的独立地址空间,每启动一个进程,系统就会为它分配地址空间,创建数据表来维护代码段、堆栈段和数据段,这种操做很是昂贵。而线程是共享进程中的数据的,使用相同的地址空间,所以CPU切换一个线程的花费远比进程要小不少,同时建立一个线程的开销也比进程要小不少。
线程之间的通讯更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通讯须要以通讯的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
可是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另一个进程形成影响,由于进程有本身独立的地址空间
17.git和svn的区别
18.Spring Bean的生命周期
19.事务
事务的四个特性:
A:原子性,一组操做要么所有执行,要么所有不执行。
C:一致性,数据库老是从一个一致性状态转换为另一个一致性状态。
I:隔离性,一个事务所作的操做在提交之前,对于其余的事务是不可见的。
D:持久性,事务一但提交,那么所作的修改会永久保存到数据库中。
事务的四种隔离级别:
read uncommitted,未提交读,事务中的修改,即便没有提交,对其余事务也都是可见的。事务能够读取未提交的数据,称为脏读。
read committed,提交读(也叫不可重复读),大部分数据库是这种隔离级别,一个事务从开始直到提交以前,所作的任何修改对其余事务都是不可见的。两次执行一样的查询,可能获得不同的结果。若是一个事务在提交数据以前,另外一个事务能够修改和删除这些数据,就会发生不可重读。
repeatable read,可重复读,保证两次读取的数据结果是一致的。可是会产生幻行,当某个事务在读取某个范围内的记录时,另一个事务又会在该范围内插入新的记录,再次读取时会产生幻行。MySql的默认隔离级别。
serializable,可串行化,强制事务串行,读取的每一行加锁。
MVCC:保存数据在某个时间点的快照。每行记录后面有两个隐藏列,一个保存了行的建立时间,一个保存了删除时间。
20.索引
索引是什么以及他的做用,必定要弄明白。若是能够的话,建议查看《高性能MySQL》这本书的第五章。
索引(MySQL中也称为“键(key)”):是一种数据结构,存储引擎用来快速找到记录的一种数据结构,这是索引的基本功能。我以为不仅是存储引擎,日常中的文件也是能够应用索引的,由于本质上都是存储在磁盘上的文件。不知道理解的对不对。
索引能够包含一个或多个列的值。若是有多个列,那么列的顺序也十分重要。
MySQL的经常使用的索引类型有4种:BTree、哈希索引、空间数据索引(R-Tree)、全文索引
对于BTree类型的索引,通常来讲使用B-Tree,可是Innodb使用的是B+Tree,NDB集群使用的为T-Tree(虽然他也叫BTree)。B-Tree适用于全键值、键值范围、最左前缀查找。
B-Tree的缺点:
哈希索引:它基于哈希表实现,只有Memory引擎显示支持哈希索引(NDB也支持)。固然,Memory也支持B-Tree,当发生冲突时,使用链表方式存放。其查找速度很是快。
哈希索引的缺点:
适应场景:适用于星型Schema(须要关联不少查找表)。其实还能够和InnoDB引擎的B-Tree结合,即在B-Tree树的基础上建立一个伪哈希索引。它使用哈希值而不是键自己进行索引查找。只须要很小的索引就能够为超长的键建立索引。例如当存储大量URL,并根据URL进行搜索查找时,若是使用B-Tree存储URL,那么内容将会很大,这时咱们能够新增一个被索引的列url_crc,可使用CRC32作哈希。查找时Select id from url where url_crc=CRC32("http://www.mysql.com") and url="http://www.mysql.com",这样将很快找到相应的数据。若是对完整的URL字符串作索引,那么将很是很是慢。 可是这样须要维护索引,可使用触发器。(不能使用SHA1和MD5做为哈希函数)
21.分布式一致性理论
CAP理论:
Consistency:一致性,数据在多个副本之间可否保持一致的特性。一个系统在数据一致的状态下执行更新操做后,应该保证系统的数据仍然处于一致的状态。
Availability:可用性,系统提供的服务一致处于可用的状态。
Partition Tolerance:分区容错性,遇到故障时,仍然须要可以保证对外提供知足一致性和可用性的服务。
考虑ca和ap。