1、Java事件机制包括哪三个部分?分别介绍。
事件源、事件监听器(java.util.EventListener)、事件(java.util.EventObject)。事件源是产生事件的对象,事件源Java没有对其作基类指导,他是非常广泛的,可以是某些规范下的对象,也可以是业务系统中个性化对象,事件监听器是用来绑定事件和回调处理的对象。
Spring中是有应用的,org.springframework.context.ApplicationEvent。
2、为什么要使用线程池?
减少线程创建和销毁的开销,提高系统运行效率。
3、线程池有什么用?
4、说说几种常见的线程池及使用场景。
5、线程池都有哪几种工作队列?
阻塞队列
6、怎么理解无界队列和有界队列?
无界队列通常默认大小为Intefer.MAX_VALUE,认为可以无限制添加元素,有界队列设置特定大小,达到指定大小后再添加就会失败,失败表现形式可能是抛异常、返回false,阻塞等。
7、线程池中的几种重要的参数及流程说明。
corePoolSize,maximumPoolSize,keepAliveTime,TimeUnit,workQueue,threadFactory,handler。
ThreadPoolExecutor(......)
8、什么是反射机制?
反射是指Java依赖类由虚拟机加载执行的这个特点,在运行时能获取类型的元信息,以至于能在运行时动态的实例化类,调用类的方法等。
9、说说反射机制的作用。
反射能够动态的装配类型并实例化,大大提高了程序的灵活性和扩展性;同时能运行时判断类型的信息,提高了程序的可配置特性,比如注解。
10、反射机制会不会有性能问题?
会,通过反射执行会比直接调用稍慢,如果只是低频使用,可以忽略。
11、你怎么理解http协议?
应用层协议,建立在传输协议TCP/IP之上,一种约定了格式的数据交换协议。
12、说说http协议的工作流程。
13、http有哪些请求提交方式?
HTTP1.0定义三种请求: GET, POST 和 HEAD(类似GET但无响应body)。HTTP1.1五种请求:OPTIONS(测试服务器支持的请求), PUT, DELETE, TRACE(回显服务器收到的请求) 和 CONNECT (将连接改为管道方式)方法
14、http中的200,302,403,404,500,503都代表什么状态?
200请求成功,
302临时移动的重定向,
403 forbidden,
404 not found,
500 internal server error,
503 service unavailable。
15、http get和post有什么区别?
语义不同,get通常用来获取数据,参数通过url传递,post通常用来提交数据,参数通过body传递。
16、你怎么理解cookie和session,有哪些不同点?
cookie是浏览器和服务器约定的一种数据写入和传递行为,session是服务器依赖cookie实现的一种会话保持行为。
17、什么是web缓存?有什么优点?
将数据放入内存中,不从数据库获取数据,大大提升了应用响应速度。
18、什么是https,说说https的工作原理?
19、什么是http代理服务器,有什么用?
20、什么是虚拟主机及实现原理?
21、什么是java虚拟机,我为什么要使用?
22、说说java虚拟机的生命周期及体系结构。
23、说一说java内存区域。
堆、方法区、虚拟机栈、本地方法栈、程序计数器。(这是虚拟机标准)具体的虚拟机实现可能会有个性化特点。
24、什么是分布式系统?
25、分布式系统你会考虑哪些方面?
26、讲一讲tcp协议的三次握手和四次握手流程。
握手的目的是确认对方能收能发,自己不用确认自己,因为自己如果出错连接就无法建立。
标记位枚举如下:共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:
URG:紧急指针(urgent pointer)有效。ACK:确认序号有效。PSH:接收方应该尽快将这个报文交给应用层。RST:重置连接。SYN:发起一个新连接。FIN:释放一个连接。
ack:确认号,ACK:确认号标记位,seq:序列号,SYN:主动发起新连接标记
第一步:SYN=1,seq=x
第二步:SYN=1,ACK=1,seq=y,ack=x+1
第三步:ACK=1,ack=y+1,seq=x+1
注意2端的状态变化
四次挥手
MSL:Maximum Segment Lifetime:一段TCP报文在传输过程中的最大生命周期
第一步:FIN=1,seq=u
第二步:ACK=1,seq=v,ack=u+1
第三步:FIN=1,ACK=1,seq=w,ack=u+1
第四步:ACK=1,seq=u+1,ack=w+1,如果在2MSL内又收到FIN消息,则重新相应ACK并再等待2MSL
要想断开连接,就需要确认对方不在发送数据了
27、为什么tcp建立连接协议是三次握手,而关闭连接确是四次握手呢?为什么不能用两次握手进行连接?
2次握手双方就分配资源并建立连接过于草率,如果服务方在仅收到一个连接建立请求时就建立连接,可能请求方异常,也可能网络不通,此时被请求方就草率建立连接,这个连接就是个死连接。
28、为什么tcp TIME-WAIT状态还需要等2MSL后才能返回到CLOSED状态?
因为最后一个ACK消息可能丢失,超时了会重新收到FIN消息的,如果客户端立即关掉了,服务端不断重发,所以需要等2MSL,超过2MSL没收到FIN消息就认为对方已经收到FIN,因为服务端在MSL后没有收到ACK,是会重发FIN的,服务端在收到ACK后,就不会再发FIN了,然后自己也可以安心关闭了。另外等待2MSL能确保本次回话产生的数据包全部被丢弃,防止干扰新连接。
29、什么是DoS、DDoS、DRDos攻击?如何防御?
30、描述一下Java异常层次结构。
其中粉色为checked异常,绿色为unchecked异常
31、什么是检查异常,不受检查异常,运行时异常?并分别举例说明。
检查异常是必须catch的异常,不受检查异常是可以不用catch的异常,运行时异常是一种不受检查异常,Java中将继承自Error和rRuntimeException的异常都归为不受检查异常。
特点就是检查异常多是由于不可控的环境因素导致,而不受检查异常多是业务逻辑代码不健壮导致,是可控的,不受检查异常在编写代码上要更简洁,Java认为我们没有必要显示的抛出
那些可以避免的异常,这才出现了不受检查异常。
32、Finally块一定会执行吗?
如果执行到了try语句,那么finally一定会执行,如果没有执行到try语句那finally自然不会执行。
33、正常情况下,当在try块或catch块中遇到return语句时,finally语句在方法返回之前还是之后被执行?
try和catch中执行return时,是将返回值压栈,此时方法并未结束,还要去执行finally语句块,如果此时finally中修改了返回值变量,此时是无效的,如果此时finally中有return语句,会重新更新栈,
但是我们不建议在finally中去return。
34、Try、catch、finally语句块的执行顺序。
正常情况就是先try,有异常就到catch,最后是finally。如果三个块中都写return的情况
35、Java虚拟机中,数据类型可以分为哪几类?
基本类型-整形:byte,short,int,long,char
基本类型-浮点:float,double
基本类型- boolean
引用类型:类类型、接口类型、数组类型
36、怎么理解栈、堆?堆中存在什么?栈中存在什么?
37、为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
栈是函数执行的现场,他的先进后出特点完全吻合函数调用关系
38、在java中,什么是栈的起始点,同时也是程序的起始点?
main函数,Java虚拟机从main方法开始执行。
39、为什么不把基本类型放堆中呢?
40、Java中的参数传递时传值呢?还是传引用?
41、Java中有没有指针的概念?
42、Java中,栈的大小通过什么参数来设置?
43、一个空Object对象的占多大空间?
44、对象引用类型分为那几类?
45、讲一讲垃圾回收算法。
标记-清除算法( Mark-Sweep ),复制算法(Copying),标记-压缩算法(Mark-Compact),分代算法(Generational GC)
46、如何解决内存碎片的问题?
47、如何解决同时存在的对象创建和对象回收问题?
48、讲一讲内存分代及生命周期。
jdk8中删除永久代,引入metaspace
jdk8中,堆可以划分为年轻代和老年代,年轻代和老年代默认大小比例为1:2,年轻代分为Eden+Survivor0+Survivor1,默认大小比例大小为:8:1:1
object会先填满eden,然后继续填s0,s1区是空的,s0区域满了以后,将触发MinorGC,删掉已经过期的object,将存活的object复制到s1区域,
1、若干s1区够用,则复制完后交换s0和s1的角色,一轮回收完成
2、若s1区不够用,将多余的object复制到老年代(Premature Promotion),如果老年代也不够,就会触发FullGC,如果老年代够用,一轮回收完成。
最后,如果打开了自适应开关,GC结束后会自动调整年轻代大小。
49、什么情况下触发垃圾回收?
50、如何选择合适的垃圾收集算法?
51、JVM中最大堆大小有没有限制?
52、堆大小通过什么参数设置?
53、JVM有哪三种垃圾回收器?
串行垃圾回收器(Serial Garbage Collector),并行垃圾回收器(Parallel Garbage Collector),并发标记扫描垃圾回收器(CMS Garbage Collector)
54、吞吐量优先选择什么垃圾回收器?响应时间优先呢?
55、如何进行JVM调优?有哪些方法?
56、如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决?
57、从分布式系统部署角度考虑,分哪几层?
58、如何解决业务层的数据访问问题?
59、为了解决数据库服务器的负担。如何做数据库的分布?
60、什么是著名的拜占庭将军问题?
61、为什么说tcp/IP协议是不可靠的?
62、讲讲CAP理念。
Consistency 、Availability 、Partition tolerance。一致性是指分布式环境中所有备份数据同一时刻都一样,可用性是指对所有请求,不论成功或失败,都有响应,分区容错性是指不同网络分区中节点通信失败时,系统依然要能提供正确服务,一般来说,分区间出错是难免的,所以CAP可以认为P总是要成立,C和A无法同时成立。
63、怎么理解强一致性、单调一致性和最终一致性?
强一致性是一种完美一致性,也即任意时刻,所有节点中副本数据全都一致;单调一致性,有单调写一致性,单调读一致性,写后读一致性,读后写一致性;最终一致性是指对数据修改后,不立即保证强一致性,但是在某个时刻后,各个副本数据最终保持一致了。
64、分布式系统设计你会考虑哪些策略?
65、最常见的数据分布式是什么?
66、谈一谈一致性哈希算法。
67、Paxos是什么?
68、什么是lease机制
69、如何理解选主算法?
70、OSI有哪七层模型?TCP/IP是哪四层模型。
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
数据链路层,网络层,传输层,应用层。
71、SOLID原则是什么?
SRP The Single Responsibility Principle 单一职责原则,引起类变化的因素永远不要多于一个,警告类型的功能应该是单一的。
OCP The Open Closed Principle 开放封闭原则,对扩展开放,对修改闭合,尽量不要去修改原有代码逻辑,应该继承并扩展。
LSP The Liskov Substitution Principle 里氏替换原则,任何使用基类的地方,都应该能用他的子类替换,要求我们类设计和基类选择要足够抽象合理。
ISP The Interface Segregation Principle 接口分离原则,复杂的接口应该拆分,不能强迫用户依赖一些不使用的接口。
DIP The Dependency Inversion Principle 依赖倒置原则,之前A依赖B,先要有B才能有A,现在引入抽象层C,不用有B也能有A,甚至是先有了A,然后慢慢实现B,这种依赖顺序颠倒了。
72、Spring中如果产生了代理对象放入容器,那原对象会在容器中吗?如果在,@Autowired是如何装配的?
78 MySQL innodb索引类型(功能类型)
0 主键索引
1 normal 一般索引
2 unique 唯一索引,不允许重复
3 fulltext 全文本索引
4 spatial 空间索引,myisam才有
79 MySQL索引结构
MySQL索引结构可以分为B树和hash。
80 Redis 持久化策略
rdb和aof
zookeeper节点类型说一下