1、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
2、int型在32位下的范围。
-2的32次方到2的32次方。
3、TCP的三次握手
(1)客户端向服务器端发送一个SYK表示主动打开。
(2)服务器向一个合法的SYK客户端发送SYK/ACK。
(3)客户端向服务器发送ACK,并表示已连接。
4、hibernate和ibatis的分页区别
ibatis主要是通过SQL映射的方式来直接查询数据库。而hibernate是通过缓存来实现分页的。
5、hibernate和ibatis的区别
相同点:屏蔽jdbc api的底层访问细节,使用时我们不用与jdbc api打交道,就可以访问数据库。
hibernate是一个全自动的ORM映射工具,它可以自动生成SQL语句。而ibatis需要我们自己在XML里写SQL语句。
6、单例模式。
public class Singleton(){
private Singleton(){}
private Static Singleton sin=null;
public Static Singleton getInstance(){
if(sin==null){
sin=new Singleton();
}
return sin;
]}
}
7、java性能优化
a、不要在循环中使用Try/Catch语句,应把Try/Catch放在循环最外层。
b、通过StringBuffer的构造函数来设定他的初始化容量,可以明显提升性能。
c、不要在循环中调用synchronized(同步)方法
d、使用移位操作来代替'a / b'操作
e、使用移位操作代替'a * b'
f、如果只是查找单个字符的话,用charat()代替startswith()
g、避免不需要的造型操作
8、hibernate的三种状态
瞬态:new的对象称为瞬态。
持久态:处于该状态的对象在数据库中有一条对应的记录,并且此对象有一个持久化标识。
脱管态:当与某持久对象的session关闭时,由持久态变成脱管态。
9、hibernate的事务管理
hibernate是对jdbc轻量级的封装,本身并不具备事务管理。在事务管理层,hibernate将它委托给底层的jdbc或jta来实现事务的管理和调度。
10、struts2的流程
a、客户端浏览器发出HTTP请求。
b、在web.xml中,请求被filterDispatcher接收。
c、在struts.xml中找到与请求对应的action类和方法。并通过IOC方式,将值注入到action中。
d、action调用业务逻辑组件处理业务逻辑。这一步包含表单验证。
e、action执行完毕,根据struts.xml的配置找到对应的返回结果result,并跳到相应的页面。
11、ajax原理
通过XmlHttpRequest向服务器端发出异步请求,从服务器端获得数据,然后用javascript来操作DOM对象来更新页面。
12、jsp的内置对象
request、response、pageContext、session、page、out、application、config、exception
request表示HttpServletRequest的对象。它包含了有关浏览器请求信息,并且提供了几个用于获取cookie、session、head的有用方法。
response表示HttpServletResponse的对象,并提供了用于设置送回浏览器响应的方法。
pageContext表示javax.servlet.jsp.PageContext的对象。网页的属性在这里设置。它用于方便存取各种范围的名字空间,servlet相关对象的API及servlet通用功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。用于存储用户的状态信息。
page表示该页面的一个servlet实例。
out对象是javax.jsp.JspWriter的一个实例。用于向浏览器回送输出结果。
application表示javax.servlet.ServletContext对象。servlet执行的内容。有助于查找servlet引擎和servlet环境信息。
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例化的初始化参数。
13、spring有几中注入方式
a、setter注入
b、构造器注入
c、注解注入
14、spring的IOC与AOP
ioc就是控制翻转或是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象。
AOP面向切面编程将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。
15、struts1与struts2的区别
a、struts1的前端控制器是一个servlet,名称为ActionServlet。struts2的前端控制器是一个filter,名称为FilterDispatcher.
b、struts1需要继承action类。struts2可以不继承任何action类。
c、在struts1中需要使用formbean来封装请求参数。在struts2中通过Ioc的方式,将值注入到action中。
16、String和StringBuffer的区别
相同点:都能存储和操作字符串。
String类提供了数值不可改变的字符串。而StringBuffer提供的字符串可以进行修改。
17、final、finally、finalize的区别
final用于声明属性、类和方法。表示属性不可变,类不可继承,方法不可覆盖。
finally是异常处理语句的一部分,表示总是执行。
finalize是Object的一个方法,在垃圾器执行的时候会调用被回收对象的此方法。
18、abstract class和interface有什么区别
含有abstract修饰符的类即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义的抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4.抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5.抽象类中可以包含静态方法,接口中不能包含静态方法
6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public staticfinal类型。
7.一个类可以实现多个接口,但只能继承一个抽象类。
下面接着再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码
8.连接池的调用机制
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。
调用:客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为 忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。
释放:当使用的池连接调用完成后,池驱动程序将此连接表记为空闲, 其他调用就可以使用这个连接