Java高频面试题型

什么是面向对象?
面向对象就是将问题抽象成若干对象,又将对象的属性和操作封装到类中。具有抽象性、封装性、多态性的特点。

8大数据类型:
整型数据: 存整数
byte(字节) 表示是一个字节
short(短整型) 表示是两个字节
int (整型) 表示四个字节
long (长整型) 表示八个字节
定义变量的规则:在能够满足要求的情况下,尽可能选择容量小的。 理论上。实际开发一般使用 int
意点: 我们在定义整型变量时,如果我们赋的值没有特殊标识,默认是int类型的数据。如果需要使用长整型就需要在值得后面加一个L/l,
不区分大小写,推荐使用大写。
浮点类型:存小数
a.单精度浮点型:
float 表示四个字节
b.双精度浮点型:

double 表示八个字节
注意点:我们在定义浮点型的时候,如果没有特殊的标识,默认double,
如果需要使用单精度浮点类型就需要在值得后面加一个f/F,不区分大写
布尔类型:
boolean 一个字节和四个字节
boolean 来存布尔常量true或false 这个时候代表四个字节。
boolean表示的是一个布尔数组 ,数组中的每一个元素占一个字节。
字符类型变量:
字符类型表示两个字节
char 表示字符类型
基本数据类型有8个 4个整型数据 2个浮点型数据 1个布尔型 1个字符型。
方法重写与方法重载的区别:
方法重写:Override,子类重写了从父类继承过来的方法。
方法重载:Overload,方法的名字相同,参数的个数,类型,次序不同。
相同点:都是多态性的表现,方法重写属于一种动态的多态性,方法重载属于静态的多态性。
不同点:方法重写有继承,方法重载无继承。

集合:
集合从体系上分为三种:
1.列表(List)List集合区分元素的顺序,允许包含相同的元素。
2.集(Set)Set集合不区分元素的顺序,不允许包含相同的元素。
3.映射(Map)Map集合保存的将“键”-“值”对,键不能重复,而且一个“键”只能对应一个“值”。
List 接口存储一组不唯一(可重复),有序(插入顺序)的对象
Set 接口存储一组唯一(不可重复),无序的对象
Map接口存储一组键值对象,提供key到value的映射

list接口
ArrayList:顺序
顺序结构
容量的动态扩充,可以添加任意数据类型
不唯一(可重复)
线程不安全
LinkedList:离散
克服了ArrayList集合在删除元素效率低的局限性
离散结构。
容量动态扩充。
线程不安全。
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高.

迭代器Iterator接口
JDK专门提供了一个接口Iterator,主要用于遍历Collection中的元素,因此Iterator对象也被称为迭代器。
方法1:通过for循环和get()方法配合实现遍历
方法2:通过迭代器Iterator实现遍历
所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历
Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素。
使用迭代器遍历步骤:
Iterator it=list.iterator();
while(it.hasNext())
System.out.println(it.next());

set接口
1、Set是一个变长的集合类型
不重复: Set中不允许存放重复的元素,一旦出现重复的元素,后面元素会覆盖前面的元素;
无序: Set中的元素存放是无序的即存入顺序和取出的顺序不一致。
2、常用的Set实现类:HashSet、TreeSet。其中Hashset因为采用了哈希表的结构,所以不保证有序;TreeSet采用了自然排序。

Map接口
存储具有对应关系的数据,需要使用Map接口,它的每个元素都包含一个对象Key和一个值对象Value,键和值之间存在一种对应关系,称为映射。

ArrayList和Vector的区别:
1.Vector是线程安全的,而ArrayList是线程不安全的。导致Vector效率无法和ArrayList相比。
2.存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍。
HashMap和Hashtable的区别:
HashMap中键值允许为空并且是非同步的;Hashtable中键值不允许为空,是同步的
二者继承不同,但是都实现的Map接口。

说说Oracle和MySQL的分页方法:
oracle分页使用rownum;mysql分页使用limit.

spring是什么?
spring是一个轻量级的实现IOC和AOP的框架。
1)开源框架,实现了工厂模式的工厂类
2)IOC(控制反转)也称为(依赖注入)是一种设计思想,将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合。所有对象都被spring控制。提高系统的灵活性和可维护性。
3)AOP(面向切面编程)就是系统中有很多不相干的类的方法,在这些众多的方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理等等,将安全,事务等程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,实现了按照方面编程,提高了复用性。
依赖注入是指:让调用类对某一接口的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖。
spring容器中支持的依赖注入方式主要有属性注入、构造函数注入、工厂方法注入。
构造函数注入理由:

  1. 构造函数保证重要属性预先设置;
  2. 无需提供每个属性的setter方法,减少类的方法个数;
  3. 可以更好地封装类变量,避免外部错误调用。
    属性注入理由:
  4. 属性过多时,构造函数变的臃肿;
  5. 构造函数注入灵活性不强,有时需要为属性注入null值;
  6. 多个构造函数时,配置上产生歧义,复杂度升高;
  7. 构造函数不利于类的继承和扩展;
  8. 构造函数注入会引起循环依赖的问题;

什么是mybatis?
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要话费精力去处理加载驱动,创建连接,创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中的sql动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。

说说Mybatis的动态语句
if和where sql片段 include引用sql片段 foreach

springmvc是什么?
SpringMvc是spring的一个模块,基于MVC的一个框架无需中间整合层来整合。

springmvc的工作流程?
1)浏览器发出springmvc请求,请求交给前段控制器DispatcherServlet处理。
2)控制器通过HandlerMapping维护的请求和Controller映射信息,找到相对应的Controller组件处理请求。
3)执行Controller组件约定方法处理请求,在约定方法中可以调用Service和DAO等组件完成数据库操作。约定方法可以返回一个ModelAndView对象,封装了模型数据和视图名称信息。
4)控制器接收ModelAndView之后,调用ViewResolver组件,定位View的JSP并传递Model信息,生成响应界面结果。

事务是什么?
事务是SQL Server的一个逻辑工作单元,该单元将被作为一个整体进行处理。
四大特性:
1.原子性:事务作为一个整体被执行,要么全部执行,要么不执行;
2.一致性:保证数据库从一个一致状态转变为另一个一致状态;
3.隔离性:多个事务并发执行时,一个事务的执行不影响其他事务的执行;
4.持久性:一个事务一旦提交,对数据库的修改应该永久保存。
事务的并发问题:
丢失更新、脏读、不可重复读以及幻读
事务的隔离级别:
读未提交、读已提交、可重复读和序列化

进程和线程的区别:
进程是一个“执行中的程序”,是系统进行资源分配和调度的一个独立单位;
线程是进程的一个实体,一个进程拥有多个线程,线程之间共享地址空间和其他资源;
线程的生命周期:
新建状态(new) 就绪状态(Runable) 运行状态(Running) 阻塞状态(Blocked) 死亡状态(Dead)
阻塞状态:
1)等待阻塞:wait()方法
2)同步阻塞:线程在获取同步锁synchronized失败,(因为锁被其他线程所占用,它会进入同步阻塞状态)
3)其他阻塞

说说数据库优化:
1)使用PreparedStatement比使用Statement的效率要高
2)有外键约束会影响插入和删除的速度。如果能保证数据完整的情况下,可以删除外键约束
3)SQL语句统一大写,特别是SQL命令的缓存功能,更需要统一大小写

jsp有哪些内置对象?作用分别是什么?
request用于传输客户端的额请求信息
response用于响应客户端传来的请求信息
session用于存储会话信息
application用于用户间数据的共享,相当于全局变量
page相当于Jsp页面本身
config用于取出服务器的配置信息
out用于浏览器内输出信息
pageContext用于获取页面中的内容
exception用于处理异常页面
jsp的四大作用域:page、request、session、application

heap和stack有什么区别。
栈是一种线性集合,其插入数据都应在同一段,以后进先出的方式处理数据的。
堆是栈的组成元素之一。

final,finally,finalize的区别:
final用于声明属性,方法和类,表示属性不可变,方法不可覆盖,类不可继承;
finally是异常处理语句结构的一部分,表示总是执行;
finalize是Object类的一个方法,在垃圾收集器执行的时候回调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等,JVM不保证此方法总被调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值