1、JAVA的跨平台原理
JVA源码被编译会生成字节码文件,通过不同平台上下载的不同版本的JVM,将字节码文件翻译成对应的机器码。注意的是,跨平台的Java程序,不是JVM。JVM是使用C/C++开发的,是编译后的字节码,不能跨平台。
2、JAVA中的数据类型及其各自的特点。
(1)基本数据类型
byte
1字节
数值型
short
2字节
数值型
int
4字节
数值型
long
8字节
数值型
float
4字节
数值型
double
8字节
数值型
boolean
1字节
布尔型
char
2字节
字符型
(2)引用数据类型:类(class)、接口(interface)、数组
3、JAVA面向对象的特征?
封装、继承、多态、抽象 封装:通过类来体现,将实体封装成类,其中包含属性和方法
继承:类与类之间可以继承特点,使得代码重用
多态:通过传递给父类对象引用不同的子类从而表现出不同的行为
抽象: 将一类实体的共同特性抽象出来,封装在一个抽象类中。
4、封箱和拆箱?
基础类型属于数据,不属于类,自然也不属于Object的子类,无法使用相关方法。装箱就是自动将基本数据类型转换为包装器类型,拆箱就是自动将包装器类型装换为基本数据类型。
eg:Integer a = Integer.valueOf(123); //装箱 int b = a.intValue(); //拆箱
5、==和equals的区别?
(1)基本数据类型之间的比较,使用双等号(==),比较两者的值
(2)复合数据类型(类)之间的比较,比较的是在内存池的地址,使用equals。在Java语言中,通常equals交给开发者自行定义,满足什么条件的Object是equals的。
6、String、StringBuilder、StringBuffer之间的区别?
(1)运行速度:StringBuilder > StringBuffer > String
String是字符串常量,其他两者属于字符串变量,String对象创建后不可以改变,对String的操作实际上是不断创建和回收的过程,执行速度慢。
(2)线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的
StringBuffer对象在字符串缓冲区被多个线程使用时,可以使用synchronized关键字,能够保证线程安全。
(3)使用场景
String适用于少量的字符串操作;StringBuilder适用于单线程下的在字符串缓冲区进行大量的操作的情况下;StringBuffer适用于多线程下的在字符串缓冲区进行大量的操作的情况下。
7、JAVA中的集合
Java中的集合分为两大类:
Collection(value):包含list和Set,其中list是有序,可重复的;set是无序,不可重复的。
Map(key-value)包含HashMap、HashTable、CurrentHashNap
8、ArrayList、Vector、LinkedList的区别?
- 区别:
- Vector和ArrayList都是以类似数组的形式存储在内存中,LinkedList以链表的形式进行存储
- Vector线程同步,ArrayList和LinkedList线程不同步
- LinkedList适合在指定位置进行插入、删除等操作,不适合查找,Vector、ArrayList适合查找
- Vector默认扩充为原来的两倍,ArrayList默认扩充为原来的1.5倍
9、HashMap和HashTable的区别?
- 都是使用key-value的形式来存储数据,区别是HashTable基于Dictionary类,而HshMap是基于AbstractMap。
- HashMap是单线程安全的,HashTable是多线程安全的
- HashMap仅仅支持Iterator的遍历方式,HashTable支持Iterrator和Enumeration两种遍历方式
- HashMap可以允许存在一个为null的key和若干个为null的value,但是HashTable中的key和value都不允许为null
11、线程的实现方式?怎么样启动线程?怎么区分线程?
线程的实现方式有三种:第一种是继承Thread类,第二种是实现Runnable接口,第三种是实现java.util.concurrent下的Callable接口。
线程的启动:调用start()方法—可以使得线程处于可运行状态,但是不一定会执行,如果实在main()方法中调用的话,run()会执行
区分线程:给线程设置名字
12、线程并发库和线程池的作用?
线程池的好处:
- 限定线程的个数,不会导致由于线程过多导致系统运行缓慢或崩溃
- 线程池每次都不需要去创建和销毁,节约了资源
- 线程池不需要每次都去创建,响应时间更快
13、设计模式和常用的设计模式?
一共有23中设计模式?常用的有单例模式、工厂模式、装饰者模式、代理模式
- 单例模式:
- 工厂模式:
- 装饰者模式:
- 代理模式:
14、HTTP、GET、POST请求的区别?
- GET请求的数据会暴露在地址栏当中,而POST不会
- 对于GET,特定的浏览器和服务器对于URL有长度限制,传输数据时会受到限制
- POST的安全性比GET高
15、说说你对Servlet的理解?
就是运行在WEB服务器上的一个Java小程序,用来接收和响应客户端发送过来的请求,通常使用HTTP协议
使用方法:
- 编写一个Java类,实现servlet接口
- 把开发好的Java类部署到web服务器当中
16、Servlet的生命周期?
当用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中的init方法就会执行。任何一次请求都会创建一个线程访问Servlet中的service方法,根据请求的不同方式调用不同的doXXX()方法。当Servlet从服务器中移除或者关闭服务器,Servlet的实例就会被销毁,那么destory()方法就会执行。
17、Servlet中Forward和Redirect的区别
forward重定向:两次request,重定向可以访问自己的web应用以外的资源。重定向的