Java面经-01

157 阅读7分钟

1.Netty线程模型  

主从reactor模型,主线程负责对IO连接事件的监听,从线程负责对IO事件解码、业务处理、编码等操作。

2.Netty心跳机制

IdleStateHandler,会记录多久没发生读事件或写事件,达到配置的时间会定时触发userEventTriggered()方法

 

3.如何解决粘包、拆包

进行消息传输的时候设置4字节消息头将消息的总长度设置进去,解码的时候先获取4字节长度,然后再读取指定字节长度的数据。

 

4.mysql的存储引擎?区别?

主要:Innodb、myisam。

1) Innodb支持事务,Myisam不支持事务

2) Innodb支持外键,Myisam不支持

3) Innodb是聚簇索引,Myisam是非聚簇索引。聚簇索引的文件存放在主键索引的叶子节点上,因此Innodb必须要有主键。Myisam数据索引是分离的,索引保存的是数据文件的指针。

4) Innodb不保存表的具体行数,而Myisam用一个变量保存了整个表的行数

5) Innodb的锁最小粒度是行锁,Myisam最小的锁粒度是表锁,一个更新语句会锁住所有表导致其他的更新和查询会被阻塞,并发访问受限制。

 

5.B+树

1)B+树非叶子节点存储的是索引数据,叶子节点存储的是具体数据

2)B+树叶子节点前后两两相连,可使用在范围查询

3)B+树查询时间复杂度相同,都需要到达叶子节点

 

6.索引的理解?联合索引?最左匹配原则

Mysql索引由B+树构建,可加快数据的查询效率

联合索引由多个索引组合而成

最左匹配原则若where字句条件有联合索引的最左连续字段则联合索引会生效

 

7.spring的aop

Jdk动态代理和cglib 

Jdk动态代理:解析目标类的方法和字段生成代理类字节码文件

Cglib:使用Asm字节码框架操纵目标类的字节码文件生成代理类(为目标类的子类)

 

8.多线程的理解

充分利用多核cpu资源,使得任务能够并行执行。

在单核cpu下,线程在io等阻塞情况下会让出cpu时间片给其他线程执行,使得各个线程并发执行。

 

9.synchronized和Lock的区别

Synchronized是jvm层面的锁实现的是非公平锁,Lock是java代码层面的能实现公平和非公平锁

Synchronized不可中断,Lock可实现中断

Synchronized不能超时释放锁,Lock可实现超时释放锁

Synchronized无需手动释放锁,Lock需要在finally块中手动释放锁  

Lock有多个条件队列

 

10. condition是什么?作用?

条件队列,调用await方法阻塞,调用signal方法唤醒,重新加入到aqs队列中争抢锁

 

11.JVM的了解

 

12.G1垃圾收集器?G1如何存储大对象?

G1可以面向堆内存任何部分来组成回收集进行回收,衡量标准不再是它属于哪个分代,而是哪块内存中存放的垃圾数量最多,回收收益最大,这是G1收集器的Mixed GC收集模式。

G1不再坚持固定大小以及固定数量的分代区域划分,而是把连续的java堆划分为多个大小相等的独立区域(Region),每一个Region都可以根据需要扮演Eden、Survivor、或老年代空间。

Region中还有一类特殊的Humongous区域,专门用来存储大对象。G1认为只要大小超过了一个Region容量一半的对象即可判定为大对象。

每个Region的大小可通过参数-XX: G1HeapRegionSize设定(取值范围1-32MB,应为2的N次幂)

 

13.select、poll、epoll的区别

select:

1) 单进程可以打开的fd有限

2) 对socket扫描遍历是线性扫描,即采用轮询的方法,效率较低

3) 用户空间和内核空间的复制耗费资源

 

Poll:

基本上和select相同,不过没有连接数限制,用链表代替了select的fd_set数据结构

 

Epoll:

分三步

1) epoll_create():创建epoll文件描述符

2) epoll_ctl():为监听文件描述符fd注册时间

3) epoll_wait(): 等待io事件发生,发生了即能立刻获取到就绪的fd无需遍历

 

-epoll的工作方式

水平触发(LT):若就绪的事件一次没有处理完要做的事件,就会一直去处理。即就会将没有处理完的事件继续放回到就绪队列之中(即那个内核中的链表),一直进行处理。

边缘触发(ET): 就绪的事件只能处理一次,若没有处理完会在下次的其它事件就绪时再进行处理。而若以后再也没有就绪的事件,那么剩余的那部分数据也会随之而丢失。 14.MYSQL主从复制

1.主节点必须启动binLog,记录了任何修改了数据库数据的事件

2.从节点开启一个io线程,扮演客户端向主节点请求日志文件数据

3.主节点启动一个线程,对比从节点发送的请求参数确定从哪个位置开始将日志中的时间发送给从节点

4.从节点接收到数据放入到中继日志中并记录此次请求到主节点具体哪个二进制文件的哪个位置

5.从节点再次开启一个线程将中继日志中的事件读取出来并执行

 

15.序列化协议?

Json、xml、protobuf、hession等

 

16.zookeeper如何做注册中心?选举机制?

zk每个znode可存储服务url地址...

选举机制:

www.cnblogs.com/shuaiandjun…

 

 

1.HTTP和HTTPS的区别

https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

 

2.CRC冗余校验

不懂。。

blog.csdn.net/csdn_kou/ar…

 

3.Netty的时间轮转算法

大量的调度任务如果每一个都使用自己的调度器来管理任务的生命周期的话,浪费cpu的资源并且很低效。

 

时间轮是一种高效来利用线程资源来进行批量化调度的一种调度模型。把大批量的调度任务全部都绑定到同一个的调度器上面,使用这一个调度器来进行所有任务的管理(manager),触发(trigger)以及运行(runnable)。能够高效的管理各种延时任务,周期任务,通知任务等等。

缺点,时间轮调度器的时间精度可能不是很高,对于精度要求特别高的调度任务可能不太适合。

 

4.了解哪些设计模式

自己好好想想

5.工厂模式和建造者模式的区别

工厂模式注重的是整体对象的创建方法,而建造者模式注重的是对象的创建过程,创建对象的过程方法可以在创建时自由调用。

 

6.了解哪些加密算法?与MD5类似的算法有哪些

常见的对称加密算法主要有 DES、3DES、AES 等,常见的非对称算法 主要有RSA、DSA 等,散列算法 主要有 SHA-1、MD5 等。

 

7.Zookeeper、Nacos、Eruka的对比

Eruka是AP系统,保证高可用

blog.csdn.net/weixin_4249…