Java常见面试题
一、Get和Post的区别
1.get是从服务器上获取数据,post是向服务器传送数据,
2.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
3.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
4.在进行文件上传时只能使用post而不能是get。
二、多态四种体现形式:
1. 接口和接口的实现。
2. 类和类的继承。
3. 重载。
4. 重写。
三、StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间
StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加
StringBuilder 字符串变量 可变 非线程安全 字符串拼接直接在字符串后追加
1.StringBuilder执行效率高于StringBuffer高于String.
2.String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方 法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer 是线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率高于StringBuffer.
3.对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder.
四、Hashtable与HashMap的区别
HashMap不是线程安全的,HashTable是线程安全。
HashMap允许空(null的键和值(key,HashTable则不允许。
HashMap性能优于Hashtable。
Map
1.Map是一个以键值对存储的接口。Map下两个具体的实现,分别是HashMap和HashTable.
2.HashMap是线程非安全的,HashTable是线程安全的,所以HashMap的效率高于HashTable.
3.HashMap允许键或值为空,而HashTable不允许键或值为空.
五、九大隐式对象
输入/输出对象: request response out
作用域通信对象: session application pageContext
Servlet 对象: page config
错误对象: exception
六、Forword(请求转发)与Redirect(重定向)
1、从数据共享上
Forword是一个请求的延续,可以共享request的数据
Redirect开启一个新的请求,不可以共享request的数据
2、从地址栏
Forword转发地址栏不发生变化
Redirect转发地址栏发生变化
七、XML和Json的特点
Xml特点:
1、且仅一个根节点;
2、是独立与软件和硬件的信息传输工具(传输量较大
3、所的标签都需要自定义
4、仅仅是纯文本文件
Json(JavaScript Object Notation特点:
json分为两种格式: json对象(就是在{}中存储键值对,键和值之间用冒号:分隔,键值对之间用逗号,分隔),json数组(就是[]中存储多个json对象,json对象之间用逗号分隔)(两者间可以进行相互嵌套
数据传输的载体之一
区别:
xml的传输数据量比json的要大,流行的是基于json的数据传输。
共同点:
Xml和json都是传输数据的载体,并且具跨平台跨语言的特性。
八、request.getSession()、reqeust.getSession(false)和request.getSession(true)
getSession()/getSession(true):当session存在时返回该session,否则新建一个 session并返回该对象
getSession(false):当session存在时返回该session,否则返回null
九、Page和PageContext的区别
Page是servlet对象;使用this关键字,它的作用范围是在同一页面。
PageContext是作用域通信对象;通常使用setAttribute()和getAttribute()来设置和获取存放对象的值。
十、Ajax总结
AJAX 全称: 异步JavaScript及 XML(Asynchronous JavaScript And XML
Ajax的核心是JavaScript对象XmlHttpRequest(XHR)。
Ajax的优点:
提高用户体验度(UE)
提高应用程序的性能
进行局部刷新
AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。
2. 通过 AJAX,我们的 JavaScript 可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,我们的 JavaScript 可在不重载页面的情况与Web服务器交换数据,即可局部刷新。
3. AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求,这样就可使网页从服务器请求少量的信息,而不是整个页面,减轻服务器的负担,提升站点的性能。
AJAX 可使因特网应用程序更小、更快,更友好,用户体验(UE好。
5. Ajax是基于标准化并被广泛支持的技术,并且不需要插件和下载小程序
十一、List,Set,Collection,Collections
List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set是无序的不可重复的集合。Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私的,所以不能实例化。
2.List接口实现类ArrayList,LinkedList,Vector。ArrayList和Vector是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。又因为Vector是线程安全的,所以他和ArrayList相比而言,查询效率要低。
十二、时间类型转换
public class DateFormat { public static void fun() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); String newDate; try { newDate = sdf.format(new SimpleDateFormat("yyyyMMdd") .parse("20121115")); System.out.println(newDate); } catch (ParseException e) { e.printStackTrace(); } } public static void main(String args[]) { fun(); } }
十三、阶乘 (递归思想)
public class Multiply { public static int multiply(int num) { if (num < 0) { System.out.println("请输入大于0的数!"); return -1; } else if (num == 0 || num == 1) { return 1; } else { return multiply(num - 1) * num; } } public static void main(String[] args) { System.out.println(multiply(10)); } }
十四、osi七层模型
第一层:物理层
第二层:数据链路层
第层:网络层
第四层:传输层
第五层:会话层
第六层:表示层
第七层:应用层
十五、线程和进程的区别
1.线程(Thread)与进程(Process
进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。
一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。
实现线程的两种方式:继承Thread类,实现Runable接口
十六、jvm的内存结构
java虚拟机的内存结构分为堆(heap)和栈(stack),堆里面存放是对象实例也就是new出来的对象。栈里面存放的是基本数据类型以及引用数据类型的地址。
对于所谓的常量是存储在方法区的常量池里面。
十七、内存泄和内存溢出
内存泄露 (memory le)ak),是指应用程序在申请内存后,无法释放已经申请的内存空间.一次内存泄露危害可以忽略,但如果任其发展最终会导致内存溢出(out of memory).
如读取文件后流要进行及时的关闭以及对数据库连接的释放。
内存溢出(out of memory是指应用程序在申请内存时,没足够的内存空间供其使用。
如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。
十八、单例
单例就是该类只能返回一个实例。
单例所具备的特点:
1.私化的构造函数
2.私的静态的全局变量
3.公的静态的方法
单例分为懒汉式、饿汉式和双层锁式
饿汉式:
public class Singleton1 { private Singleton1() {}; private static Singleton1 single = new Singleton1(); public static Singleton1 getInstance() { return single; } }
懒汉式:
public class Singleton2 { private Singleton2() {} private static Singleton2 single=null; public tatic Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; } }
线程安全:
public class Singleton3 { private Singleton3() {} private static Singleton3 single ; public static Singleton3 getInstance() { if(null == single){ synchronized(Singleton3.class){ if(null == single){ single = new Singleton3(); } } } return single; } }