Java基础面试题(一)

1.HashSet和TreeSet?

set方法要继承collection
HashSet 无序 允许null,不保证迭代顺序
TreeSet 有序 遍历集合时递增排序,存入TreeSet必须要实现comparatable接口

2.HashMap和TreeMap?

HashMap 允许null,无序
TreeMap 不允许null,有序

3.接口和抽象类区别?

A、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

B、抽象类要被子类继承,接口要被类实现。

C、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

D、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子

类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

E、抽象类里可以没有抽象方法,如果一个类里有抽象方法,那么这个类只能是抽象类

F、抽象方法要被实现,所以不能是静态的,也不能是私有的。

G、接口可继承接口,并可多继承接口,但类只能单根继承。

4.mybatis的xml中用到的标签?

SQL语句标签有增删改查insert、select、delete、update
sql片段标签 sql,里面执行sql语句
映射管理器 resultMap里面配置映射关系
动态sql标签 where、 if 、when、choose、otherwise、forech等进行条件判断,遍历等操作
set 长用于update,更新语句中,替代sql中的”set”关键字

5.AOP和IOC?

AOP面向切面编程:通过预编译方式和动态代理实现程序功能的统一维护。
在框架中利用AOP对业务逻辑的各个部分进行隔离,从而使业务逻辑耦合度降低,提高开发效率

IOC控制反转:在spring之前对象创建都是要手动处理,现在把对象的创建交给spring进行配置(两种配置方式:.xml 通过工厂类)

6.事务?

acid特性
原子性 一致性 隔离性 持久性
七大传播行为
传播行为:如果事务在开始之前,一个事务上下文已经存在,此时有多种方式指定一个事务的执行行为。(简而言之就是,在事务直接发生冲突时处理的规则)
propagation-required 支持当前事务,若无当前事务就新建一个事务
propagation-supports 支持当前事务,若无当前事务就医非事务方式执行
propagation-mandatory 支持当前事务,若无当前事务,就抛出异常
propagation-required-new 新建事务,如果存在当前事务就把当前事务挂起
propagation-not-supported 以非事务方式执行操作,如果存在当前事务就把当前事务挂起
propagation-never 以非事务方式执行,如果存在当前事务,则抛出异常
propagation-nested 在一个嵌入的事务中运行
五大隔离级别
Isolation-defauylt 默认级别
Isolation-read-uncommitted 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读
Isolation-read-committed 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读
Isolation-repeatable-read 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
Isolation-seralizable 最高级别 事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

7.set.map.list区别?

List 有序集合 分为ArrayList数组和LinkedList链表
Map 无序键值对key,value形式
Set 和List类似,但元素不允许重复

注意:带hash的都是不安全的
除了LinkHashSet外的Hash都是无序的

8.static关键字和finally关键字?

static 定义的是静态变量,除了被声明为常量为很少使用
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问
static先于对象方法进入内存中,main方法要被声明为static
final
不能被继承,不可修改,
final成员变量表示常量,只能被赋值一次,赋值后值不再改变
private类型的方法默认是final类型的

9.面向对象?

与之相对应有面向过程,
面向过程:你拿斧子去砍树,主体是你,拿斧子,砍,一系列动作都需要你自己完成。
面向对象:把斧子当成主体对象,相当于个活物,斧子主动去砍树,跟你没关系

b.面向对象三大特性:继承,封装,多态

继承:子类继承父类的成员变量和成员方法,但不能继承父类的构造方法,但子类可通过super调用父类构造方法
封装:修改属性可见性为private,创建get和set方法,在另一个类进行调用时可以通过定义新对象,然后借助新对象调用get,set方法
多态:多种形态,多态实现方法:重载和重写
重写:只能发生在继承时,不想用父类里的方法,继承过来方法体可扩充。
重载:相同的方法名但写着不同的参数(参数类型,参数个数,参数顺序),构造函数就是重写理解的多态

10.注解?

常用注解:
@controller controller类
@service service类
@repository 用在dao层实现类
@component 组件通用(当你知道要注入却不记得注入哪一个时用这个)

@RequestMapping 用在控制类中
@RequestBody 注解用于将controller返回的对象
@Resource 默认按ByName注入,有两个重要属性name和type
@ModelAttribute 应用调用baseController时

@Transaction mybatis用于管理事务

11.Spring

a.Spring三层架构,web,service,dao
Web:Spring MVC
Service:Spring IOC
Dao:数据库连接

b.实例化的三种方式:静态工厂,实例工厂,构造方法(有参构造,无参构造)

c.spring的核心,AOP和IOC

d.Spring AOP中的通知类型?
前置通知
后置通知
环绕通知
异常通知
最终通知
e.Spring IOC AOP的理解

AOP面向切面编程:通过预编译方式和动态代理实现程序功能的统一维护
在框架中利用AOP对业务逻辑的各个部分进行隔离,从而使业务逻辑耦合度降低,提高开发效率

IOC控制反转:在spring之前对象创建都是要手动处理,现在把对象的创建交给spring进行配置(两种配置方式:.xml 创建对象和通过工厂类创建对象)
DI依赖注入:在IOC基础上完成想类里面属性设置的过程
重点内容
Spring容器中提供了AOP技术,利用它实现拦截监控
Spring是一个轻量级的控制反转和面向切面的容器框架
AOP用jdk和cglib两种代理方式实现拦截

12.StringBuffer和StringBuilder?

都用于拼接
StringBuffer 非定长 线程安全
StringBuilder 非定长 非线程安全
String 定长 线程安全,但是拼接后形成的是新的对象(定长,长度改变则是一个新的对象)

延伸到线程安全,线程不安全的问题
所谓线程不安全就是在多线程中多个线程竞争同一个资源,A调用资源后改变了它,B再调用,这时候资源已发生变化较线程不安全
成员变量线程不安全,局部变量线程安全

解决线程不安全的问题:

synchronized(同步锁)对方法加锁,
volatile解决的是变量在多个线程之间的可见性,但是无法保证原子性。

13.类中各种方法的执行顺序

(静态代码块,构造函数,main方法)
静态代码块在类载入时会被自动执行且只执行一次 最先执行
构造代码块是给所有对象进行统一初始化的
构造函数是给对应对象初始化的
static在进入内存是开始加载,main方式是程序入口一定要先于别的方法进入内存,main要声明为static
先执行静态代码块,在执行构造函数,再执行main方法

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值