point


https://github.com/Snailclimb/JavaGuidejava


基础篇
基本功
面向对象的特征
继承,封装,多态node

int 和 Integer 有什么区别
int基本数据类型,Integer封装的整数类型
iNT默认0,Integer默认为null
Integer须要实例化使用mysql


重载和重写的区别
重载时在同一个类中,相同方法名,不一样的方法参数git

抽象类和接口有什么区别
抽象类能够有具体方法,接口不能够
抽象类用abstract修饰,接口interfacegithub

 

 

说说反射的用途及实现
它容许运行中的 Java 程序获取自身的信息,而且能够操做类或对象的内部属性。
在运行时获得对象所属的类,类的属性,构造器,方法等
实现各类通用框架invokeredis


说说自定义注解的场景及实现算法

HTTP 请求的 GET 与 POST 方式的区别spring

session 与 cookie 区别sql

session 分布式处理数据库

JDBC 流程

MVC 设计思想

equals 与 == 的区别

集合
List 和 Set 区别
List有序可重复,有序意思是保持了每一个元素的插入顺序,输出的顺序就是插入的顺序
Set无序不可重复,只容许一个null。实现类有HashSet,SortedSet,LinkedHashSet,
TreeSet是基于TreeMap实现的,红黑树


List 和 Map 区别
List保持了每一个元素的插入顺序,输出的顺序就是插入的顺序
Map存储key-value

Arraylist 与 LinkedList 区别
Arraylist数组实现,查找
LinkedList循环链表,插入和删除


ArrayList 与 Vector 区别
ArrayList线程不安全
Vector线程安全,大多数方法用了Syschronized

HashMap 和 Hashtable 的区别
1.hashmap线程不安全,hashtable线程安全
2.初始值不一样,hashmap 16,hashtable 11
3.扩容 hashmap 2倍,hashtable 2倍+1
4.hashmap 容许key,value为null,hashtable只容许value为null
5.hash方法不一样
6.继承的接口不一样,hashmap 继承abstractmap ,hashtable 继承
7.迭代方式不一样,hashmap"从前日后"遍历数组,而后在从头至尾遍历链表;hashtable"从后往前"遍历数组,而后在从头至尾遍历链表
相同点:
都是数组+链表(Entry类型)

collects.sort()能够指定比较器Comparator,实现此接口。
Collections.sort(convertChars, new Comparator() {
public int compare(Object arg0, Object arg1) {
return NumberConverter.parseInt((String) arg0) - NumberConverter.parseInt((String) arg1);
}
});

(01) "Comparable"
* 它是一个排序接口,只包含一个函数compareTo()。
* 一个类实现了Comparable接口,就意味着“该类自己支持排序”,它能够直接经过Arrays.sort() 或 Collections.sort()进行排序。
* (02) "Comparator"
* 它是一个比较器接口,包括两个函数:compare() 和 equals()。
* 一个类实现了Comparator接口,那么它就是一个“比较器”。其它的类,能够根据该比较器去排序。
* 综上所述:Comparable是内部比较器,而Comparator是外部比较器。
* 一个类自己实现了Comparable比较器,就意味着它自己支持排序;若它自己没实现Comparable,也能够经过外部比较器Comparator进行排序。

HashSet 和 HashMap 区别
HashSet底层实现就是HashMap,HashSet = new HashMap()

HashMap 和 ConcurrentHashMap 的区别


HashMap 的工做原理及代码实现
数组+链表


157. zookeeper 是什么?
开源的分布式协调服务,可提供服务发现,配置管理等

158. zookeeper 都有哪些功能?
分布式服务注册与订阅
命名服务,dubbo注册中心
配置管理,
程序老是须要配置的,若是程序分散部署在多台机器上,要逐个改变配置就变得困难。如今把这些配置所有放到zookeeper上去,保存在 Zookeeper的某个目录节点中,而后全部相关应用程序对这个目录节点进行监听,
一旦配置信息发生变化,每一个应用程序就会收到 Zookeeper 的通知,而后从 Zookeeper 获取新的配置信息应用到系统中就好
集群管理(leader选举,机器加入和退出)
分布式锁
159. zookeeper 有几种部署模式?
单机,集群,伪集群

160. zookeeper 怎么保证主从节点的状态同步?
zk核心是原子广播,保证各server之间同步。实现这个机制的协议叫作Zab协议。Zab协议有两种模式,
它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,
当领导者被选举出来,且大多数Server完成了和 leader的状态同步之后,恢复模式就结束了。
状态同步保证了leader和Server具备相同的系统状态。

总结就是zab协议做用一、选举出leader;二、同步节点之间的状态达到数据一致;三、数据的广播。
全部的写操做都会转发给leader,而后leader会将更新广播给全部的follower,当半数以上的实例都完成写操做后,
leader才会提交这个写操做,随后客户端会收到写操做执行成功的响应。这么来的话,就实现了客户端的写操做的原子性,每一个写操做要么成功要么失败。逻辑和数据库的两阶段提交协议很像。

161. 集群中为何要有主节点?

主从,主提供写,从提供读
162. 集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可使用吗?

能够,过半数存在就能够
163. 说一下 zookeeper 的通知机制?
在 ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。ZooKeeper 容许客户端向服务端注册一个 Watcher 监听,当服务器的一些特定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能
ZooKeeper 的 Watcher 机制主要包括客户端线程、客户端 WatchManager 和 ZooKeeper 服务器三部分

 

ps:
行。
ZooKeeper 将全部数据存储在内存中,数据模型是一棵树(Znode Tree),由斜杠(/),znode分为持久节点和临时节点,而且能够加序列号,ZooKeeper 是高性能的。在“读”多于“写”的应用程序中尤为地高性能,由于“写”会致使全部的服务器间同步状态
ZooKeeper 将数据保存在内存中,这也就保证了 高吞吐量和低延迟(可是内存限制了可以存储的容量不太大,此限制也是保持 Znode 中存储的数据量较小的进一步缘由)

zk特色
顺序性
Znode的每次写操做都至关于数据库里的一次事务提交,每一个写操做都有个全局惟一的ID,称为:zxid(ZooKeeper Transaction)。ZooKeeper会根据写操做的zxid大小来对操做进行排序,zxid小的操做会先执
原子性:全部事务请求的处理结果在整个集群中全部机器上的应用状况是一致的,也就是说,要么整个集群中全部的机器都成功应用了某一个事务,要么都没有应用。
单一系统映像:不管客户端连到哪个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。

Leader、Follower 和 Observer 三种角色
-------------------------------------------------------action


十9、JVM

194. 说一下 jvm 运行时数据区说一下
共享:方法区,共同的类的信息(版本,字段,方法,接口),静态,常量。存在垃圾回收
堆,对象实例存放区,垃圾回收主要操做区。新生代和老年代,物理是不连续的内存空间


线程独享:程序计数器,编译成class文件,执行时指示代码
栈(虚拟机栈,本地方法栈),虚拟机栈Java方法的引用,栈帧,方法调用即将方法压入栈帧,线帧存储局部变量,
操做栈,动态连接,方法出口等信息。每一个方法调用就是从入栈到出栈的过程
本地方法native方法

 

195.jvm 的主要组成部分?及其做用?

类加载器,加载文件class到内存,只要验证经过JVM
运行时数据区,写的代码加载到此区域中
执行引擎,解释器,解释命令,交给操做系统执行
本地接口,融合不一样的语言为java所用

 

196. 说一下堆栈的区别?

 

197. 队列和栈是什么?有什么区别?

 

198. 什么是双亲委派模型?
在类加载的过程当中,会先请求parent去加载,依次向上
bootstrapclassloader
extclassloader
appclassloader


199. 说一下类加载的执行过程?
装载,找到类的二进制数据
-连接(
验证,是否符合格式,
准备,为静态变量分配内存,并初始化为默认值
解析,把类中的符号引用转换为直接引用)
-初始化,给静态变量赋初始值

 

200. 怎么判断对象是否能够被回收?

201. java 中都有哪些引用类型?

202. 说一下 jvm 有哪些垃圾回收算法?


203. 说一下 jvm 有哪些垃圾回收器?


204. 详细介绍一下 CMS 垃圾回收器?

205. 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

206. 简述分代垃圾回收器是怎么工做的?

207. 说一下 jvm 调优的工具?

208. 经常使用的 jvm 调优的参数都有哪些?

十7、MySql
()
164. 数据库的三范式是什么?

1.第一范式1NF(确保每列保持原子性),属性不能再分割
2.第二范式2NF(确保表中的每列都和主键相关),再知足第一范式以后,每张表只描述一种数据。确保数据每一列
与主键关联,而不是只与主键的部分列关联(对联合主键而言)。目的减小了数据冗余。
3.第三范式(确保每列都和主键列直接相关,而不是间接相关),在知足第二范式以后,确保每一列数据都与主键直接关联


165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
SQL Server自增用identity(m,n)m为初始值,n为自增间隔
create table test22(
id int identity(1,1),
num varchar(2)
)
innoDB若是不重启,id为自增,即8;由于InnoDB只把最大ID记录在内存里,若是重启使最大ID丢失,在现有数据自增,
即id为6;
MyISAM,把最大ID放在数据文件不会丢失,全部id为8


166. 如何获取当前数据库版本?
sql server在Object Explorer显示的主要版本号信息,select @@version
mysql select version()


167. 说一下 ACID 是什么?
ACID,事务
automatic 原子性,都成功或都失败
consistency 一致性一致性表现为事务进行后和执行前,总体系统都是稳定的,好比对于入帐出帐操做是不会有
总资金的变化的。
isolation 隔离性,各个事务之间执行互不干扰。
durability 持久性,事务完成后,数据更新是持久的

 

168. char 和 varchar 的区别是什么?
char定长,效率较高,以空间换时间,
varchar不定长
好比存储‘abc’,char(10)表示长度是10,不足用空格代替,varchar(10)表示长度是3,最大是10,小于最大值按实际长度存储。
取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不须要的
nvarchar(n),nchar(n) 存储unicode,n表明字节数,因为是unicode,因此可存储2n个字节
varchar(n),char(n) 可存储n个字节

 

169. float 和 double 的区别是什么?
float单精度浮点数,8位有效数字,内存占4个字节
double双精度浮点数,16位有效数字,内存占8个字节


170. mysql 的内链接、左链接、右链接有什么区别?
两个表都有的数据;左边表为主表,左边表存在的数据;右边表为主表,右边表全部的数据


171. mysql 索引是怎么实现的?
索引是一个排序列表,表里存着索引值和这个值对应的物理地址。使用索引后不用所有扫描,先经过索引找到对应
物理地址而后访问相应的数据。

 

172. 怎么验证 mysql 的索引是否知足需求?
在select语句前加上explain就能够用来查看sql的执行计划,
explain显示了MySQL如何使用索引来处理select语句以及链接表

 


173. 说一下数据库的事务隔离?
隔离级别
脏读 可读到其余事务未提交的数据
不可重复读 同一个数据屡次读数据不一样,
幻读 屡次读数据个数不一样

串行 均可避免
可重复读 可避免脏读和不可重复读
读已提交 可避免脏读
读未提交 都不能避免


174. 说一下 mysql 经常使用的引擎?
myISAM
InnoDB

 

175. 说一下 mysql 的行锁和表锁?


176. 说一下乐观锁和悲观锁?

悲观锁,每次取数据都认为会被修改,因此在操做前都会加锁,行锁,表锁等,Java中synchronized
乐观锁,认为不会被修改,不加锁,但更新的时候会判断是否是期间是否是有更新操做。版本号控制,CAS

177. mysql 问题排查都有哪些手段?

执行计划 explain + sql

178. 如何作 mysql 的性能优化?
索引,缓存,优化sql,优化表结构,拆分表,分库


7、异常

74. throw 和 throws 的区别?

throw在方法体内,抛出的异常的实例
throws在方法声明,会抛出这种类型的异常,使调用者知道要捕获这个异常

75. final、finally、finalize 有什么区别?

final修饰变量,方法,类等
finally 异常处理机制,finally结构使代码总会执行,而无论无异常发生
finalize 垃圾回收方法

76. try-catch-finally 中哪一个部分能够省略?
finally
77. try-catch-finally 中,若是 catch 中 return 了,finally 还会执行吗?

78. 常见的异常类有哪些?
Exception能够分为checked exceptions和unchecked exceptions
unchecked exceptions(运行时异常)都是RuntimeException类及其子类异常,就是咱们在开发中测试功能时程序终止,控制台出现的异常,好比:
NullPointerException(空指针异常)、
IndexOutOfBoundsException(下标越界异常)
ClassCastException(类转换异常)
ArrayStoreException(数据存储异常,操做数组时类型不一致)
IO操做的BufferOverflowException异常

2, checked exceptions,非运行时异常(编译异常):是RuntimeException之外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,若是不处理,程序就不能编译经过。如IOException、SQLException等以及用户自定义的Exception异常,通常状况下不自定义检查异常。
通俗的话说就是在写代码时出现红线,须要try catch或者throws时出现的异常。


79.运行时异常与通常异常有何异同?

异常表示程序运行过程当中可能出现的非正常状态,运行时异常表示虚拟机的一般操做中可能遇到的异常,是一种常见运行错误。
java编译器要求方法必须声明抛出可能发生的非运行时异常,可是并不要求必须声明抛出未被捕获的运行时异常

12、Hibernate

113. 为何要使用 hibernate?
对JDBC作了封装,简化了重复性代码;
性能好,支持各类关系型数据库,映射灵活性

 

114. 什么是 ORM 框架?

对象关系数据库,实体对象和关系型数据库建立映射,不直接操做sql

 


115. hibernate 中如何在控制台查看打印的 sql 语句?
properties show_sql = true


116. hibernate 有几种查询方式?
hql ,原生sql,条件查询

 


117. hibernate 实体类能够被定义为 final 吗?

不能

hibernate是使用cglib代理生成的代理对象
118. 在 hibernate 中使用 Integer 和 int 作映射有什么区别?
interger包装类,若是数据库可为null,不会报错。建议使用Integer

 

119. hibernate 是如何工做的?

 


120. get()和 load()的区别?
get查找的时候从session缓存找,若是没有再去二级缓存,若是在没有就去数据库,找不到返回null;
load根据配置文件设置,若是为true,查找session缓存,没找到就延时加载,返回实体的代理类对象,等到具体使用
时,在继续查找二级缓存和数据库,没有则抛出异常objectnotfoundexception.若是为false,则与get查找同样。

 

121. 说一下 hibernate 的缓存机制?
一级缓存,即session级别缓存,在一个session内有效,session关闭后失效。hibernate默认存在的,强制性的。
二级缓存,全部的Session均可以使用,有可能出现并发问题,所以须要采用适当的并发访问策略,
该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件。


122. hibernate 对象有哪些状态?
1,Transient 瞬时 :对象刚new出来,还没设id,设了其余值。

2,Persistent 持久:调用了save()、saveOrUpdate(),就变成Persistent,有id

3,Detached 脱管 : 当session close()完以后,变成Detached。


123. 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
getCurrentSession
若是当前存在session则返回此session,不然建立新的;
建立的session在commit或rollback后会自动关闭;
须要配置文件中配置,
getCurrentSession本地事务(本地事务:jdbc)时 要在配置文件里进行以下设置:
若是使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
若是使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>

opensession每次建立;须要手动关闭

124. hibernate 实体类必需要有无参构造函数吗?为何?
必须.hibernate默认调用无参构造器经过反射建立实例对象。
当查询的时候返回的实体类是一个对象实例,是Hibernate动态经过反射生成的。
反射的Class.forName(“className”).newInstance()须要对应的类提供一个无参构造方法,必须有个无参的构造方法
将对象建立出来


RabbitMQ
135.rabbitmq 的使用场景有哪些?
1.异步处理,例如注册后发送验证邮件短信
2.应用解耦,订单系统和库存系统
3.流量削峰,秒杀
--4.消息通信,即广播的几种模式


136.rabbitmq 有哪些重要的角色?
producer
exchange,消息交换机,
queen,消息载体
vhost,visual host虚拟主机
custmer


137.rabbitmq 有哪些重要的组件?
channel,信道,服务的经过信道发送消息到交换器

138.rabbitmq 中 vhost 的做用是什么?
虚拟主机,一个broker多个vhost,提供权限分离

141.rabbitmq 怎么避免消息丢失?
1.消息持久化:
Exchange 设置持久化:durable:true
Queue 设置持久化
Message持久化发送,发送消息设置发送模式deliveryMode=2表明持久化消息
2.ACK确认机制:
消息发送确认:
ConfirmCallback 只确认消息是否正确到达 Exchange 中。
ReturnCallback 消息没有正确到达队列时触发回调,若是正确到达队列不执行
消息接收确认:
默认状况下消息消费者是自动 ack (确认)消息的,须要设置为手动确认,缘由是:自动确认会在消息发送给消费者
后当即确认,这样存在丢失消息的可能。就是消费端消费完成要通知服务端,服务端才把消息从内存删除。
3.设置集群镜像模式:
4.消息补偿机制:
消息补偿机制须要创建在消息要写入DB日志,发送日志,接受日志,二者的状态必须记录。
而后根据DB日志记录check 消息发送消费是否成功,不成功,进行消息补偿措施,从新发送消息处理


142.要保证消息持久化成功的条件有哪些?
Exchange 设置持久化:durable:true,exchangeDeclare方法,channel.ExchangeDeclare(ExchangeName, "direct", durable: true
Queue 设置持久化,channel.QueueDeclare(QueueName, durable: true
Message持久化发送,发送消息设置发送模式deliveryMode=2表明持久化消息,channel.basicPublish

143.rabbitmq 持久化有什么缺点?
性能损耗,但也不能保证100%消息不丢失

 

144.rabbitmq 有几种广播类型?
direct直接匹配,exchang根据routingkey将消息路由到对应queue,
fanout广播模式,绑定的exchange的queue都会接收到
topic,模糊匹配,全部符合routingKey(此时能够是一个表达式)的routingKey所bind的queue能够接收消息
header


145.rabbitmq 怎么实现延迟消息队列?
Dead Letter Exchange和ttl

146.rabbitmq 集群有什么用?

147.rabbitmq 节点的类型有哪些?
内存节点、磁盘节点

148.rabbitmq 集群搭建须要注意哪些问题?

149.rabbitmq 每一个节点是其余节点的完整拷贝吗?为何?

150.rabbitmq 集群中惟一一个磁盘节点崩溃了会发生什么状况?

151.rabbitmq 对集群节点中止顺序有要求吗?


消息队列

消息的幂等性解决思路
MQ消费者的幂等行的解决通常使用全局ID 或者写个惟一标识好比时间戳 或者UUID
或者redis原子性(咱们都知道redis是单线程的,而且性能也很是好,提供了不少原子性的命令。好比可使用 setnx 命令。在接收到消息后将消息ID做为key执行 setnx 命令,若是执行成功就表示没有处理过这条消息,能够进行消费了,
执行失败表示消息已经被消费了)
消费者消费mq中的消息:也可利用mq的该id来判断,或者可按本身的规则生成一个全局惟一id,每次消费消息时先用该id先判断该消息是否已消费过

消息的堆积解决思路
多在消息发送的速率远远大于消息消费的速率状况下出现,默认状况下,rabbitmq消费者为单线程串行消费,这也是队列的特性,设置并发消费两个关键属性concurrentConsumers和prefetchCount,concurrentConsumers设置的是
对每一个listener在初始化的时候设置的并发消费者的个数,prefetchCount是每次一次性从broker里面取的待消费的消息的个数。

如何保证消息的有序性
一、单线程消费来保证消息的顺序性;二、对消息进行编号,消费者处理时根据编号判断顺序。
在 MQ 里面建立多个 queue,同一规则的数据(对惟一标识进行 hash),有顺序的放入 MQ 的 queue 里面,消费者只取一个 queue 里面获取数据消费,这样执行的顺序是有序的。或者仍是只有一个 queue 可是对应一个消费者,
而后这个消费者内部用内存队列作排队,而后分发给底层不一样的 worker 来处理。

 

 

ConcurrentHashMap 的工做原理及代码实现
segment(相似hashtable)+链表(HashEntry)
ConcurrentHashMap在对象中保存了一个Segment数组,即将整个Hash表划分为多个分段;而每一个Segment元素,即每一个分段则相似于一个Hashtable;这样,在执行put操做时首先根据hash算法定位到元素属于哪一个Segment,
而后对该Segment加锁便可。所以,ConcurrentHashMap在多线程并发编程中但是实现多线程put操做.在ConcurrentHashMap中,定义了一个Segment<K, V>[]数组来将Hash表实现分段存储,从而实现分段加锁;而么一个Segment元素则
与HashMap结构相似,其包含了一个HashEntry数组,用来存储Key/Value对。Segment继承了ReetrantLock,表示Segment是一个可重入锁,所以ConcurrentHashMap经过可重入锁对每一个分段进行加锁。

 

线程

既然咱们应该在synchronized的函数或是对象里调用wait,那哪一个对象应该被synchronized呢?答案是,那个 你但愿上锁的对象就应该被synchronized,即那个在多个线程间被共享的对象。在生产者消费者问题中,应该被synchronized的就是那个缓冲区队列。

sleep和wait,
用wait时报错, java.lang.IllegalMonitorStateExceptionjava.lang.IllegalMonitorStateExceptionException,
由于当前线程必须获得对象锁,若是没获得就报此错。

建立线程的方式及实现

sleep() 、join()、yield()有什么区别

说说 CountDownLatch 原理
java.util.concurrent包,有countdown(),await()等方法,await等待latch变为0才继续执行后续。

说说 CyclicBarrier 原理
java.util.concurrent包,一组线程互相等待,到达某个数,一块儿执行。

说说 Semaphore 原理

说说 Exchanger 原理

说说 CountDownLatch 与 CyclicBarrier 区别
CountDownLatch 一次性的,CyclicBarrier 可更改

ThreadLocal 原理分析

讲讲线程池的实现原理

线程池的几种方式

线程的生命周期
新建,就绪,运行,阻塞(等待),死亡


锁机制
说说线程安全问题

volatile 实现原理

synchronize 实现原理

synchronized 与 lock 的区别

CAS 乐观锁

ABA 问题

乐观锁的业务场景及实现方式

核心篇
数据存储
MySQL 索引使用的注意事项

说说反模式设计

说说分库与分表设计

分库与分表带来的分布式困境与应对之策

说说 SQL 优化之道

MySQL 遇到的死锁问题

存储引擎的 InnoDB 与 MyISAM

数据库索引的原理

为何要用 B-tree

汇集索引与非汇集索引的区别

limit 20000 加载很慢怎么解决

选择合适的分布式主键方案

选择合适的数据存储方案

ObjectId 规则

聊聊 MongoDB 使用场景

倒排索引

聊聊 ElasticSearch 使用场景


缓存使用
Redis 有哪些类型

Redis 内部结构

聊聊 Redis 使用场景

Redis 持久化机制

Redis 如何实现持久化

Redis 集群方案与实现

Redis 为何是单线程的

缓存奔溃

缓存降级

使用缓存的合理性问题

 

框架篇
Spring
BeanFactory 和 ApplicationContext 有什么区别

Spring Bean 的生命周期

Spring IOC 如何实现

说说 Spring AOP

Spring AOP 实现原理

动态代理(cglib 与 JDK)

Spring 事务实现方式

Spring 事务底层原理

如何自定义注解实现功能

Spring MVC 运行流程

Spring MVC 启动流程

Spring 的单例实现原理

Spring 框架中用到了哪些设计模式

Spring 其余产品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)

Netty
为何选择 Netty

说说业务中,Netty 的使用场景

原生的 NIO 在 JDK 1.7 版本存在 epoll bug

什么是TCP 粘包/拆包

TCP粘包/拆包的解决办法

Netty 线程模型

说说 Netty 的零拷贝

Netty 内部执行流程

Netty 重连实现

微服务篇
微服务
先后端分离是如何作的

微服务哪些框架

你怎么理解 RPC 框架

说说 RPC 的实现原理

说说 Dubbo 的实现原理

你怎么理解 RESTful

说说如何设计一个良好的 API

如何理解 RESTful API 的幂等性

如何保证接口的幂等性

说说 CAP 定理、 BASE 理论

怎么考虑数据一致性问题

说说最终一致性的实现方案

你怎么看待微服务

微服务与 SOA 的区别

如何拆分服务

微服务如何进行数据库管理

如何应对微服务的链式调用异常

对于快速追踪与定位问题

微服务的安全

分布式
谈谈业务中使用分布式的场景

Session 分布式方案

分布式锁的场景

分布是锁的实现方案

分布式事务

集群与负载均衡的算法与实现

说说分库与分表设计

分库与分表带来的分布式困境与应对之策

安全&性能
安全问题
安全要素与 STRIDE 威胁

防范常见的 Web 攻击

服务端通讯安全攻防

HTTPS 原理剖析

HTTPS 降级攻击

受权与认证

基于角色的访问控制

基于数据的访问控制

 

设计模式
你项目中有使用哪些设计模式

说说经常使用开源框架中设计模式使用分析

说说你对设计原则的理解

23种设计模式的设计理念

设计模式之间的异同,例如策略模式与状态模式的区别

设计模式之间的结合,例如策略模式+简单工厂模式的实践

设计模式的性能,例如单例模式哪一种性能更好。

业务工程
你系统中的先后端分离是如何作的

 

一、hashcode相等两个类必定相等吗?equals呢?相反呢?

 

二、介绍一下集合框架?

三、hashmap hastable 底层实现什么区别?hashtable和concurrenthashtable呢?

四、hashmap和treemap什么区别?低层数据结构是什么?

五、线程池用过吗都有什么参数?底层如何实现的?

六、sychnized和Lock什么区别?sychnize 什么状况状况是对象锁? 何时是全局锁为何?

七、ThreadLocal 是什么底层如何实现?写一个例子呗?

八、volitile的工做原理?

九、cas知道吗如何实现的?

十、请用至少四种写法写一个单例模式?

 

 

Serial收集器
ParNew收集器

二、线上发送频繁full gc如何处理? CPU 使用率太高怎么办?

如何定位问题?如何解决说一下解决思路和处理方法

三、知道字节码吗?字节码都有哪些?Integer x =5,int y =5,比较x =y 都通过哪些步骤?

四、讲讲类加载机制呗都有哪些类加载器,这些类加载器都加载哪些文件?

appclassloader应用类加载器加载一个类,不会本身去加载,会委派给父类加载器ExtClassLoader扩展加载器去加载,

而extClassLoader也不会本身去加载,他委派给父类BootstrapClassLoader启动类加载器。若是bootstrapclassloader
加载失败(如在java_home/jre/lib找不到该class),则会使用ExtClassLoader来尝试加载,若ExtClassLoader也加载失败,则会使用AppClassLoader来加载
。若是AppClassLoader也加载失败,则会报出异常ClassNotFoundException。
其实这就是所谓的双亲委派模型。简单来讲:若是一个类加载器收到了类加载的请求,它首先不会本身去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上。

好处:

防止内存中出现多份一样的字节码(安全性角度)

启动类加载器rt.jar 下class文件
扩展类加载器 $JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
应用加载器 classpath里class类

加载,查找并加载类的二进制数据,在Java堆中也建立一个java.lang.Class类的对象
-连接(验证(文件格式、元数据、字节码、符号引用验证)-准备(为类的静态变量分配内存,并将其初始化为默认值)-解析(把类中的符号引用转换为直接引用))-初始化(为类的静态变量赋予正确的初始值)


手写一下类加载Demo
public main (String args[]){
system.out.print(Test.class.getClassLoader());
}


五、知道osgi吗? 他是如何实现的???

六、请问你作过哪些JVM优化?使用什么方法达到什么效果???

GC算法,标记-清除,复制,标记-整理,分代收集

七、classforName("java.lang.String")和String classgetClassLoader() LoadClass("java.lang.String") 什么区别啊??

 

 

Spring

一、spring都有哪些机制啊AOP底层如何实现的啊IOC呢??

二、cgLib知道吗?他和jdk动态代理什么区别?手写一个jdk动态代理呗?

数据库

一、使用mysq1索引都有哪些原则? ?索引什么数据结构? 3+tree 和B tree 什么区别?

二、mysq1有哪些存储引擎啊?都有啥区别? 要详细!

三、设计高并发系统数据库层面该怎么设计??数据库锁有哪些类型?如何实现呀?

四、数据库事务有哪些?

分库分表

一、如何设计能够动态扩容缩容的分库分表方案?

二、用过哪些分库分表中间件,有啥优势和缺点?讲一下你了解的分库分表中间件的底层实现原理?

三、我如今有一个未分库分表的系统,之后系统需分库分表,如何设计,让未分库分表的系统动态切换到分库分表的系统上???TCC? 那若出现网络缘由,网络连不通怎么办啊???

四、分布式事务知道吗? 大家怎么解决的?

五、为何要分库分表啊???

六、分布式寻址方式都有哪些算法知道一致性hash吗?手写一下java实现代码??你若userId取摸分片,那我要查一段连续时间里的数据怎么办???

七、如何解决分库分表主键问题有什么实现方案??

分布式缓存

支持key-value数据结构的存储系统,nosql数据库。 多用于缓存,单线程,事件发布


一、redis和memcheched 什么区别为何单线程的redis比多线程的memched效率要高啊?

二、redis有什么数据类型都在哪些场景下使用啊?

三、reids的主从复制是怎么实现的redis的集群模式是如何实现的呢redis的key是如何寻址的啊?

四、使用redis如何设计分布式锁?使用zk能够吗?如何实现啊这两种哪一个效率更高啊??

五、知道redis的持久化吗都有什么缺点优势啊? ?具体底层实现呢?

六、redis过时策略都有哪些LRU 写一下java版本的代码吧??

分布式服务框架

一、说一下dubbo的实现过程注册中心挂了能够继续通讯吗??

 

二、zk原理知道吗zk均可以干什么Paxos算法知道吗?说一下原理和实现??

三、dubbo支持哪些序列化协议?hessian 说一下hessian的数据结构PB知道吗为啥PB效率是最高的啊??

四、知道netty吗'netty能够干吗呀NIO,BIO,AIO 都是什么啊有什么区别啊?

五、dubbo复制均衡策略和高可用策略都有哪些啊动态代理策略呢?

六、为何要进行系统拆分啊拆分不用dubbo能够吗'dubbo和thrift什么区别啊?

分布式消息队列

一、为何使用消息队列啊消息队列有什么优势和缺点啊?

二、如何保证消息队列的高可用啊如何保证消息不被重复消费啊

三、kafka ,activemq,rabbitmq ,rocketmq都有什么优势,缺点啊???

四、若是让你写一个消息队列,该如何进行架构设计啊?说一下你的思路


高并发高可用架构设计

一、如何设计一个高并发高可用系统

二、如何限流?工程中怎么作的,说一下具体实现

三、缓存如何使用的缓存使用不当会形成什么后果?

四、如何熔断啊?熔断框架都有哪些?具体实现原理知道吗?

五、如何降级如何进行系统拆分,如何数据库拆分????

 

分布式专题架构

通讯协议

一、说一下TCP 'IP四层?

二、http的工做流程?? ?http1.0 http1.1http2.0 具体哪些区别啊?

三、TCP三次握手,四层分手的工做流程画一下流程图为何不是四次五次或者二次啊?

四、画一下https的工做流程?具体如何实现啊?如何防止被抓包啊??

算法

一、比较简单,我一个文件,有45亿个阿拉伯数字,如何进行去重啊如何找出最大的那个数啊?

数据结构

一、二叉树和红黑树等。

源码中所用到的经典设计思想及经常使用设计模式

jdbc原理SUN提供一套访问数据库的规范(就是一组接口),并提供链接数据库的协议标准,而后各个数据库厂商会遵循SUN的规范提供一套访问本身公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,能够访问本身数据库的API被称之为驱动!JDBC工做原理主要分3个步骤:一、加载数据库驱动。二、获取数据库链接。三、发送sql语句访问数据库 一、加载数据驱动:使用Class.forName方法,调用这个方法会加载数据库驱动com.mysql.jdbc.driver。 关于数据库驱动的理解,实际上是sun公司给了一个Driver的接口,而后各个数据厂商根据本身的数据库 来实现这个接口。当要访问数据库的时候,须要引入这个第三方类库。类的加载主要分为5个部分, 加载、验证、准备、解析、初始化。在初始化的部分用到了DriverManager.registerDriver()方法,将 本身注册给DriverManager的Driver接口。这个地方体现了多态。这个时候就可使用Driver了。 二、获取数据库链接DriverManager.getConnection()。这个方法主要调用driver的connect()方法 返回一个实现了Connection接口的对象。 三、而后利用Connection对象建立Statement,发送sql语句访问数据库。

相关文章
相关标签/搜索