1、java事件机制包括三部分:事件、事件监听器、事件源。
事件:继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息。
事件监听器:继承自java.util.EventListener接口,注册在事件源上,当事件源的属性或状态改变时,取得相应的监听器调用其内部的监听方法。
事件源:事件发生的地方,由于事件源的某项属性或状态发生改变,导致某项事件发生。
2、为什么要使用线程池,线程池有什么作用?
为了减少创建和销毁线程的次数,让每个线程可以多次使用,可根据系统情况调整执行的线程数量,防止消耗过多内存。
线程池主要用来解决线程生命周期开销问题和资源不足问题,通过对多个任务重复使用线程,线程创建的开销就被分摊到多个任务上了,而且由于在请求到达时线程已经存在,所有消除了线程创建所带来的延迟,这样就可以立即为请求服务,使用程序响应更快。另外,通过适当调整线程池中的线程数目可以防止出现资源不足的情况。
3、线程的种类和使用场景
new CachedThreadPool (SynchronousQueue 同步队列 )
当有新任务到来,则插入到SynchronousQueue中,由于SynchronousQueue是同步队列,因此会在池中寻找可用线程来执行,若有可用线程则执行,若没有可用线程则创建一个线程来执行该任务,若池中线程空闲时间超过指定大小,则该线程会被销毁。
适用:执行很多短期异步的小程序或负载较轻的服务器。
new FixedThreadPool(LinkedBlockingQueue 阻塞队列)
创建可容纳固定线程数量的池子,每个线程的存活时间是无限的,当池子满了就不在添加线程了,如果池中的所有线程都在繁忙状态,对于新任务会进入阻塞队列中(无界的阻塞队列)。
适用:执行长期的任务,性能好很多。
new SingleThreadExecutor(LinkedBlockingQueue 阻塞队列)
创建只有一个线程的线程池,且线程的存活时间是无限的,当该线程繁忙时,对于新任务会进入阻塞队列中(无界的阻塞队列)。
适用:一个任务一个任务的执行场景。
new ScheduledThreadPool (DelayedWorkQueue延迟队列)
创建一个固定大小的线程池,线程池内线程存活时间无限制,线程池可以支持定时或周期性的任务执行,如果所有线程均处于繁忙状态,新任务会进入DelayedWorkQueue队列中,这是一种按照超时时间排序的队列结构。
适用:周期性执行任务的场景。
4、http 请求中GET和POST区别
1.get是从服务器上获取数据,post是向服务器传送数据。
2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5.get安全性非常低,post安全性较高。
5、什么事java虚拟机?
Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。
Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。
6、java中对象的引用类型
StrongReference(强引用)
强引用是使用最普遍的引用,如果一个对象具有强引用,那么垃圾回收器绝不会回收它。当内存空间不足,jvm宁愿抛出OutOfMemoryError错误,使程序异常中止,也不会回收具有强引用的对象来解决内存不足的问题,A a = new A();
SoftReference(软引用)
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。软引用可以用来实现内存敏感的高速缓存。
WeakReference(弱引用)
弱引用与软引用的区别,只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过垃圾回收器是一个优先级很低的线程,因此不一定很快发现那些只具有弱引用的对象。
PhantomReference(虚引用)
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
7、OSI七层协议
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
8、TCP/IP四层模型
应用层
传输层
网络层
数据链路层
9、排序算法
冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
public static void bubbleSort(int[] numbers){
int temp = 0;
int size = numbers.length;
for(in ti = 0 ; i < size-1; i ++){
for(intj = 0 ;j < size-1-i ; j++){
if(numbers[j] > numbers[j+1])//交换两数位置 {
temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
}
}
}