常见Java面试题

本文详细介绍了Java面试中常见的问题,包括面向对象的四大特性、String相关类的区别、装箱拆箱原理、集合框架的区别、多线程相关类、网络协议、数据结构以及HTTP响应结构等核心知识点,帮助求职者全面准备Java面试。

常见java面试题

JAVA面向对象的特征

封装 继承 抽象 多态

封装:在面向对象语言中 封装特性是由类来实现的 我们将现实生活中的一类实体定义成类 其中包括属性和行为(在java中是方法) 例如电脑
继承:继承就像是我们现实生活中的父子关系 儿子可以遗传父亲的一些特性 在面向对象语言中 就是一个类可以继承另一个类的一些特性 从而可以代码复用
抽象:抽象就是将一类实体的共同特性抽象出来 封装在一个抽象类中 所以抽象在面向对象语言是由抽象类来实现的 比如人 class Person{}
多态:多态就是通过传递给父类对象引用不同的子类对象 从而表现出不同的行为

String, StringBuffer,StringBuilder的区别是什么 String为什么是不可变的

String是字符串常量 StringBuffer和StringBuilder是字符串变量
StringBuffer是线程安全的 StringBuilder是非线程安全的
具体来说String是一个不可变的对象 每次修改String对象实际上是创新对象 并将引用指向新对象 效率很低 StringBuffer是可变的 即每次修改只是针对其本身
大部分情况下比String效率高 StringBuffer保证同步(synchronized) 所以线程安全 StringBuilder没有实现同步 所以非线程安全
但效率应该比StringBuffer高 StringBuffer使用时最好指定容量 这样会比不指定容量快30%-40% 甚至比不指定容量的StringBuilder还快

装箱和拆箱

为什么需要装箱拆箱 : 是java早年设计缺陷 基础类型是数据 不是对象 也不是Object的子类
装箱就是自动将基本数据类型转换为包装器类型 小转大
拆箱就是自动将包装器类型转换为基本数据类型 大转小

例:Integer a = Integer.valueOf(123);//装箱
int b = a.intValue();//拆箱

讲一下JAVA中的集合

java中的集合分为value(Collection)和key-value(Map)
存储value的有list和set
list是有序可重复
set是无序不可重复的
存储为key-value是map 分为:HashMap,Hashtable ,CurrentHashMap

ArrayList ,Vector,LinkedList的区别

1.区别
Vector,ArrayList都是以类似数组的形式存储在内存中 LinkedList则以链表形式进行存储
Vector线程同步 ArrayList ,LinkedList线程不同步
LinkedList适合指定位置插入 删除操作 不适合查找
ArrayList,Vector适合查找 不适合指定位置的插入 删除操作
Vector默认扩充为原来的两倍(每次扩充空间大小是可以设置的)
ArrayList默认扩充为原来的1.5倍 因此ArrayList更节省空间

2.联系
ArrayList,Vector,LinkedList类均在java.util包中都是可改变大小的
ArrayList和Vector都是基于存储元素的Object[] array来实现的 他们会在内存中开辟一块连续空间来存储 由于数据存储是连续的 因此 他们支持用索引来访问元素 同时索引数据的速度比较快 但是在插入元素时需要移动容器中的元素 所以对数据插入操作执行的比较慢
ArrayList和Vector都有一个初始化容量大小 当里面存储的元素超过这个大小就需要动态的扩充他们的存储空间

HashMap和HashTable区别

相同:HashMap和HashTable都可以存储key-value的数据
不同:1.基类不同 HashTable基于Dictionary类 而HashMap基于AbstractMap Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类 而AbstractMap是基于Map接口的骨干实现 它以最大限度的减少实现此接口所需的工作
2.线程安全 HashMap是单线程安全的 HashTable是多线程安全的
3.遍历不同 HashMap仅支持lterator的遍历命令 HashTable支持lterator和 Enumeration两种遍历方式
4.null不同 HashMap可以允许存在一个为null的key和任意个为null的value 但是HashTable中的key和value都不允许为null

ArrayList和LinkedList区别

ArrayList和LinkedList都实现了List接口 有以下不同点:
1.ArrayList是基于索引的数据接口 它的底层是数组 它的查询速度很快
2.LinkedList是以元素列表的形式存储它的数据 每一个元素都和它前一个和后一个元素链接在一起 所以它的插入 添加 删除速度更快 因为当元素被添加到集合任意位置的时候 不需要像数组那样重新计算大小或者是更新索引
3.LinkedList比ArrayList更占内存 因为LinkedList为每一个节点存储了两个引用 一个指向前一个元素 一个指向下一个元素

Iterator和ListIterator区别是什么

Iterator可以用来遍历Set和List集合 但是ListIterator只能用来遍历List
Iterator对集合只能是前向遍历 ListIterator既可以前向也可以后向
ListIterator实现了Iterator接口 并包含其他的功能 比如:增加元素 替换元素 获取前一个和后一个元素的索引 等等

Java都有哪些开发平台

Java SE:主要在客户端开发
Java EE:主要在web应用程序开发
Java ME:主要用在嵌入式应用程序开发

什么是JDK 什么是JRE

JDK:java development kit 是java开发工具包 是开发人员所需要安装的环境
JRE:java runtime environment 是java运行环境 java程序运行所需要安装的环境

什么是数据结构

计算机保存 组织数据的方式

Java的数据结构有哪些

线性表(ArrayList)
链表(LinkedList)
栈(Stack)
队列(Queue)
图(Map)
树(Tree)

++i 与 i++区别

++i:先赋值 后计算
i++:先计算 后赋值

Java中各种数据默认值

Byte short int long 默认都是0
Boolean默认值是false
char类型的默认值是’’
Float与double类型默认是0.0
对象类型的默认值是null

形参与实参

形参:全称为“形式参数” 是在定义方法名和方法体的时候使用的参数 用于接收调用该方法时传入的实际值
实参:全称为“实际参数”是在调用方法时传递给该方法的实际值

你所知道的网络协议有哪些

HTTP:超文本传输协议
FTP:文件传输协议
SMPT:简单邮件协议
TELNET:远程终端协议
POP3:邮件读取协议

HTTP响应的结构是怎么样的?

HTTP响应由三个部分组成:

状态码(Status Code):描述了响应的状态 可以用来检查是否成功的完成了请求 请求失败的情况下 状态码可以用来找出失败的原因 如果Servlet没有返回状态码 默认会返回成功的状态码HttpServletResponse.SC_OK

HTTP头部(HTTP Header):它们包含了更多关于响应的信息 比如:头部可以指定认为响应过期的过期日期 或者是指定用来给用户安全的传输实体内容的编码格式 如何在Servlet中检索HTTP的头部看这里

主体(Body):它包含了响应的内容 它可以包含HTML代码 图片 等等 主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的

什么是cookie?session和cookie有什么区别

cookie是web服务器发送给浏览器的一块信息 浏览器会在本地文件中给每一个Web服务器存储cookie 以后浏览器在给特定的Web服务器发送请求的时候同时会发送为该服务器存储的cookie

区别在于:
无论客户端浏览器做怎么样的设置 session都应该能正常工作 客户端可以选择禁用cookie 但是 session仍然是能够工作的 因为客户端无法禁用服务端的session
在存储数据量方面session和cookies也是不一样的 session能够存储任意的Java对象 cookie只能存储String类型对象

什么是HTTP隧道

HTTP隧道是一种利用HTTP或者是HTTPS把多种网络协议封装起来进行通信的技术 因此 HTTP协议扮演了一个打通用于通信的网络协议管道的包装器的角色 把其他协议的请求掩盖成HTTP请求的就是HTTP隧道

sendRedirect()和forward()方法有什么区别

sendRedirect()方法会创建一个新的请求 而forward()方法只是把请求转发到一个新的目标上 重定向(redirect)之后 之前请求作用域范围以内的对象就失效了 因为会产生一个新的请求 而转发(forwarding)以后 之前请求作用域范围以内的对象还是能访问的 一般认为sendRedirect()比forward()要慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值