1. 静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
声明为static的方法有以下几条限制:
它们仅能调用其他的static 方法;
它们只能访问static数据;
它们不能以任何方式引用this 或super。
2. 静态变量
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间。
3. 静态类
通常一个普通类不允许声明为静态的,只有一个内部类才可以
4. final的用法
1)修饰成员变量
这是final的主要用途,该成员被修饰为常量,意味着不可修改。
2)修饰类
不能 被继承
3)修饰方法
不能被重写,可以被重载
5. String和StringBuffer的区别
1)String是字符串常量,不可变,使用字符串拼接时是不同的2个空间
2)StringBuffer是字符串变量,可变,线程安全字符串拼接直接在字符串后追加。
6. 比较一下Hibernate和Mybatis
(一)两者相同点
Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
Hibernate和MyBatis都支持JDBC和JTA事务处理。
(二)各自的优势
1)Mybatis优势
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,而Hibernate门槛较高。
2)Hibernate优势
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库 移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
3)总结
Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。
iBatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
iBatis的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
7. 数据库的优化方案
1)创建和优化索引
创建索引
复合索引
使用短索引
排序的索引问题
2)优化sql语句
like语句的优化
使用连接(JOIN)来代替子查询
不要在列上进行运算
不使用NOT IN和<>操作
4)优化硬件和网络
5)通过缓存减轻数据库的压力
8. 什么叫引用类型?引用类型和基本类型有什么区别?
(1)引用类型
引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。
在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。
(2)区别
1> 从概念方面来说:
基本数据类型:变量名指向具体的数值
引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值
2> 从内存构建方面来说:
基本数据类型:变量在声明之后java就会立刻分配给他内存空间
引用数据类型:它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。
3> 从使用方面来说:
基本数据类型:使用时需要赋具体值,判断时使用“==”号
引用数据类型:使用时可以赋null,判断时使用equals方法
9. 以下代码需要捕获哪些异常?
Scanner in = new Scanner(Syatem.in);
String p = in.nextLine();
Integer.parseInt(p);
异常:java.lang.NumberFormatException
10. 以下代码是否会出现异常?
Double.parse(“NaN”);
11. 什么是反射?反射有哪些作用?
反射就是可以将一个程序(类)在运行的时候获得该程序(类)的信息的机制,也就是获得在编译期不可能获得的类的信息,因为这些信息是保存在Class对象中的,而这个Class对象是在程序运行时动态加载的,它就是可以在程序运行的时候动态装载类,查看类的信息,生成对象,或操作生成对象。
反射的作用:
第一 远程方法调用;
第二 通过容器得到组件的对象
12. Spring的工作原理
内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,根据Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
13. 写出复制表(只复制表结构,源表明:A,新表名:B)的sql语句
法一:select * into b from a where 1$amp;
法二:select top 0 * into b from a;
14. 写出复制表(拷贝数据,源表明:A,新表名:B)的sql语句
insert into b(a, b, c) select d,e,f from a;
15. 简述不同数据库分页语句的用法
(1)MySQL的分页:
select * from table_name limit(pageNum-1)*pageSize,pageNum*pageSize;
(2)SQLServer的分页:
select top pageSize * from tabe_name where id not in (select top (pageNum-1)*pageSize id from table_name);
(3)Oracle的分页:
//pageNum:当前页,pageSize:一页的记录数
select * from (select t.*,rownum rn from (select * from tb_users) t) where rn > (pageNum-1)*pageSize and rn <= pageNum*pageSize;
注意:rownum分页时必须重新命名。
16. Hibernate有哪几种查询数据的方式?
get与load
OID方式
HQL方式
QBC方式(query by criteria)
本地SQL,SQL语句查询
17. Error和exception的区别
error表示回复不是不可能但很困难的情况下的一种严重问题,比如说内存溢出不可能指望程序解决问题。exception表示一种设计或实现问题,也就是说,他表示如果程序运行不正常,从不会发生的情况!
18. Java中栈和堆的区别
栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量. 存取速度比堆要快
堆(heap):是一个可动态申请的内存空间,堆在内存中是放对象,是先进先出的
19. Hibernate五大核心接口(类)
Configuration接口:对Hibernate进行配置,加载hibernate.cfg.xml文件并创建一个sessionFactory;
SessionFactory接口:负责初始化hibernate,充当数据存储源的代理,并负责创建Session对象。sessionFactory是线程安全的;
Session(会话)接口:负责执行被持久化对象的CRUD操作,线程不安全,相当于是jdbc的connection;
Query与Criteria接口:负责执行各种数据库的查询;
Transaction(事务)接口:负责操作相关事务,提交或回滚。
20. Hibernate中的两大配置文件
(1)*.hbm.xml:主键生成策略、映射关系、一对多或多对一的关联关系
(2)Hibernate.cfg.xml:数据库的方言、数据库的连接信息、包含*.hbm.xml文件、也可以配置事务。
21. Hibernate的调优方案
(1)制定合理的缓存策略;
(2)尽量使用延迟加载特性;
(3)采用合理的Session管理机制;
(4)使用批量抓取,设定合理的批处理参数(batch_size)
(5)进行合理的O/R映射设计
22. Mybatis的调优方案
MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。
MyBatis同样具有二级缓存机制。
MyBatis可以进行详细的SQL优化设计。
23. Mybatis与Ibatis比较
(1)Mybatis实现了接口绑定,使用更加方便;
(2)对象关系映射的改进,效率更高;
(3)MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。
24. Session和cookie的异同
(1)cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式
(2)cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端,Session的安全性较高。
25. 会话跟踪的四种方式
(1)隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话应用。
(2)URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。 见http://blog.youkuaiyun.com/xh16319/article/details/8464055
(3)Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。 见:http://blog.youkuaiyun.com/xh16319/article/details/8464319
(4)Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
26. 过滤器和拦截器的区别
(1)拦截器是基于java反射机制的,而过滤器是基于函数回调的。
(2)拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
(3)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
(4)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
(5)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
27. SpringMvc和Struts2的区别
(1)springmvc基于方法开发的,struts2基于类开发的。
(2)springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。
(3)方法执行结束,形参数据销毁。
(4)spring mvc的入口是servlet,而struts2是filter;spring 的前端总控制器为 DispatcherServlet;struts2 的前端总控制器为 FilterDispatcher;
(5)springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。(原因就是第一句)
(6)经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。