java面试题(真实)

java面试题(真实)

java

  1. 九大内置对象

    • 输入输出对象:out对象、response对象、request对象;
    • 通信控制对象:pageContext对象、session对象、application对象;
    • Servlet对象:page对象、config对象;
    • 错误处理对象:exception对象。
  2. mybatis中$和#的区别

    • #相当于对数据 加上 双引号,$相当于直接显示数据;
    • #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.;
    • $将传入的数据直接显示生成在sql中。如:order by u s e r i d user_id ,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id;
    • #方式能够很大程度防止sql注入;
    • $方式无法防止Sql注入;
    • $方式一般用于传入数据库对象,例如传入表名;
    • 一般能用#的就别用$。
  3. String 和 StringBuffer 和 StringBuiller的区别

    • 三者在执行速度方面的比较:StringBuilder > StringBuffer > String;
    • StringBuilder与 StringBuffer:
      StringBuilder:线程非安全的
      StringBuffer:线程安全的。
  4. mybatis和hibernate的区别

    • 相同点:
      (1)Hibernate与MyBatis都是通过SessionFactoryBuider由XML配置文件生成SessionFactory,由SessionFactory 生成Session,由Session来开启执行事务和SQL(Structured Query Language,结构化查询语言)语句。
      (2)Hibernate和MyBatis都支持JDBC(Java DataBase Connectivity,java数据库连接)和JTA(Java Transaction API,Java事务API(Application Programming Interface,应用程序编程接口))事务处理。
      注:jdbc和jta的主要作用是增强数据访问能力。
    • 不同点:
      (1)sql方面:mybaits通过mapper.xml维护映射结果,程序员手动编写sql相比hibernate自动生成hql(hibernate sql)更加灵活,sql调优更加容易(hibernate因为更好的封装性,开发效率提高的同时,sql语句调优要更费力,当然可以手动修改sql来优化,但是同时也会影响开发效率);hibernate的hql数据库移植性更好,体现在强壮性。hibernate在级联删除的时候效率低;数据量大, 表多的时候,基于关系操作会变得复杂。
      (2)缓存方面:mybatis和hibernate都可以使用第三方缓存,而hibernate相比maybatis有更好的二级缓存机制。
      (3)基于ORM(Object Relational Mapping, 对象关系映射)思想解决了entity和数据库的映射问题。
  5. get和post

    • 传送方式:get通过地址栏传输,post通过报文传输。
    • 传送长度:get参数有长度限制(受限于url长度),而post无限制。
    • GET产生一个TCP数据包;POST产生两个TCP数据包。
    • get是从服务器上获取数据,post是向服务器传送数据。
  6. 重载和重写

    • 方法重写(overriding):
        也叫子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。
        子类抛出的异常不能超过父类相应方法抛出的异常。(子类异常不能超出父类异常)。
        子类方法的的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)。
    • 方法重载(overloading):重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数,可以参考API帮助文档看看类的构造方法。
  7. 接口和抽象类的区别

    • 抽象类可以有构造方法,接口中不能有构造方法;
    • 抽象类中可以有普通成员变量,接口中没有普通成员变量;
    • 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法;
    • 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型;
    • 抽象类中可以包含静态方法(static),接口中不能包含静态方法;
    • 抽象类和接口中都可以包含静态成员变量(static),抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型;
    • 一个类可以实现多个接口,但只能继承一个抽象类。
  8. springMVC的流程
    在这里插入图片描述

    • 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

    • DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

    • DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法);

    • 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中;

    • Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

    • 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

    • ViewResolver 结合Model和View,来渲染视图;

    • 将渲染结果返回给客户端。

  9. java基本数据类型

    • 16位整型: int
    • 32位整型:short
    • 64位整型:long
    • 浮点型:float
    • 双精度:double
    • 字符:char
    • 布尔:boolean
    • 字节:byte

数据库

猜你喜欢

转载自blog.csdn.net/qq_40002311/article/details/83991666