其实学些java基础知识点是很重要的,只有将基础学好了,才能进行拓展实践,提高自己的相关技能,才可以胜任java岗位,那么今天我们就给大家分享一些java基础知识点面试题以及答案!
一、SpringMVC request接收设置是线程安全的吗?
这种配置方法是线程安全的,request、response以及requestcontext在使用时不需要进行同步。而根据spring的默认规则,controller对于beanfactory而言是单例的。即controller只有一个,controller中的request等实例对象也只有一个。
二、Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么?
Mybatis使用#{}经过预编译的,是安全的,防止sql 注入。
Mybatis拦截器只能拦截四种类型的接口:Executor、StatementHandler、ParameterHandler和ResultSetHandler。这是在Mybatis的Configuration中写死了的,如果要支持拦截其他接口就需要我们重写Mybatis的Configuration。
Mybatis可以对这四个接口中所有的方法进行拦截。
Mybatis拦截器常常会被用来进行分页处理。
三、MVC的各个部分都有哪些技术来实现?如何实现的?
MVC是Model-View-Controller的简写。Model代表的是应用的业务逻辑(通过 JavaBean,EJB组件实现),View 是应用的表示面(由JSP页面产生),Controller是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
四、什么叫脏数据,什么叫脏读(Dirty Read)?
脏数据在临时更新(脏读)中产生。事务A更新了某个数据项X,但是由于某种原因,事务A出现了问题,于是要把A回滚。但是在回滚之前,另一个事务B读取了数据项X的值(A 更新后),A回滚了事务,数据项恢复了原值。事务B读取的就是数据项X的就是一个“临时”的值,就是脏数据。
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
五、throws和throw有什么不同点?
throw和throws都是异常处理机制当中的关键字,throw是手动抛异常,throws是以声明的方式抛出异常。
- throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
- throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。
void doA(int a) throws IOException{
try{
......
}catch(Exception1 e){
throw e;
}catch(Exception2 e){
System.out.println("出错了!");
}
if(a!=b)
throw new Exception3("自定义异常");
}
六、short s1 = 1; s1 = s1 + 1; 有错吗? short s1 = 1; s1 += 1 有错吗?
前者不正确,后者正确。
对于 short s1 = 1;s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int 型,需要强制转换类型才能赋值给 short 型。
而 short s1 = 1;s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
1)=:是赋值操作符,它的操作是把符号右边的变量或者常量或者对象的值赋值给符号左边的变量,在编译器将右边的表达式结果计算出来后,和左边的变量类型比较精度,如果左边的变量精度低于右边的结果的精度,编译器会显式的报错,告诉程序员去强制转型。(所以s1 = s1 + 1出错)最后将表达式的结果复制到变量所在的内存区。
2)+=:编译器自动隐式直接将+=运算符后面的操作数强制装换为前面变量的类型,然后在变量所在的内存区上直接根据右边的操作数修改左边变量内存存储的二进制数值(所以 s += 1不报错)最后达到和赋值运算符相同的目的。与前者相比,由于后者是位操作,效率也较前者高。