面试总结

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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值