专业知识2
1.创建新线程:t.start()
2.equals只比较内容
3.java类加载器
1)引导类加载器(BootStrap class loader)
加载java核心类库,使用原生代码实现
2)扩展类加载器(Extensions class loader)
加载Java的扩展库,java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里查找并加载java类
3)系统类加载器(System class loader)
根据java应用的类路径(CLASSPATH)来加载java类
4.java内存区域
1)程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器(无OutOfMemoryError异常)
2)java虚拟机栈,描述的是java方法执行的内存模型,每个方法在执行时都会创建一个栈帧(stack frame)用于存储局部信息表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直到执行结束,就对应着一个栈帧从虚拟机中入栈到出栈的过程
3)java堆是java虚拟机所管理的内存中最大的一块,线程共享,所有的对象实例以及数组都在这里分配内存
4)方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据
5.垃圾收集
A.使用垃圾收集的程序不需要明确释放对象
B.现代垃圾收集能够处理循环引用问题
采用可达性分析处理循环引用问题
C.垃圾收集能提高程序员效率
gc最大的作用就是程序员不需要自己释放内存,比如你new出来一个对象,你使用完成之后不需要手动去释放,gc完成了这个工作
D.还会存在内存泄漏问题
解析:1)垃圾收集机制主要针对新生代和老年代的内存进行回收
2)内存泄漏(Memory Leak)指一个不再被使用的对象或者变量还在内存中占有存储空间
3)内存泄漏主要有两种情况:
1.在堆中申请的空间没有释放
2.对象已不再被使用,但是仍然在内存中保留着(注:这里的不再被使用是指对程序来说没用,如数据库连接使用后没有关,但是还存在着引用)
GC机制的引入只能解决第一种情况,对于第二种情况无法保证不再使用的对象会被释放,java语言中的内存泄露主要指第2种情况
4)内存泄漏的原因
1.静态集合类,如HashMap和Vector,这些容器是静态的,生命周期和程序的生命周期一致,那么在容器中对象的生命周期也和其一样,对象在程序结束之前将不能释放,从而会造成内存泄漏。
2.各种连接,如数据库连接、网络连接、IO连接,不再使用时如果连接不释放容易造成内存泄漏
3.监听器,释放对象时往往没有删除相应的监听器,可能会导致内存泄漏
5)内存溢出(OOM)是指程序在申请内存时没有足够的内存供使用,进而导致程序崩溃,内存泄漏(Memory Leak)最终会导致内存溢出。
6.创建Socket连接
1)客户端:Socket s = new Socket("127.0.0.1",8080);
2) 服务器端:ServerSocket ss = new ServerSocket(8080);
3)监听服务器连接:s = ss.accept();
7.volatile和synchronized
1)volatile本质是告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;
synchronized则是锁定当前变量,只有当前线程可以访问该变量,其它线程被阻塞
2)volatile仅能用在变量级别
synchronized则可以用在变量、方法、代码块和类级别的
3)volatile仅能实现变量的修改可见性,不能保证原子性
synchronized则可以保证变量的修改可见性和原子性
4)volatile不会造成线程的阻塞
synchronized可能会造成线程的阻塞
5)volatile标记的变量不会被编译器优化
synchronized标记的变量可以被编译器优化
8.%和*属于同一优先级
9.java数据库连接库JDBC用到哪种设计模式?
桥接模式
定义:将抽象部分与它的实现部分分离,使它们可以独立地变化
意图:将抽象与实现解耦合
桥接基本角色:抽象接口、扩展接口定义、实现接口、实现接口给出具体实现内容
JDBC在连接数据库的时候,在各个数据库之间进行切换,不需要改动较多代码,实现解耦合,JDBC提供统一接口,各个数据库提供各种实现,数据库驱动程序实现桥接
10.下列哪个选项是java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试(C)
A.java.exe
B.javadoc.exe 文档
C.jdb.exe java debug
D.javaprof.exe 剖析
11.下面哪些java中的流对象是字节流?
A.FileInputStream
B.BufferedInputStream
C.PushbackInputStream
D.ByteArrayInputStream
解析:
stream结尾都是字节流
reader和writer结尾都是字符流
两者的区别在于读写的时候一个是按字节读写,一个是按字符
12.ArrayList是非线程安全的
13.jre判断程序是否执行结束的标准是(A)
A.所有的前台线程执行完毕
B.所有的后台线程执行完毕
C.所有的线程执行完毕
D.和以上无关
解析:
前台线程:所有显示创建的线程默认为前台线程,前台线程全部执行完成之后,程序终止!
后台线程:又称守护线程,一般是为前台线程服务的线程。
14.9个jsp内置对象
1)pageContext 页容器
2)request 服务器端获取客户端信息
3)response 服务器端回应客户端信息
4)session 登录验证
5)application
6)config 获得初始化参数
7)exception 错误页的处理操作
8)page 如同this,代表整个jsp页面自身
9)out 输出