美文网首页程序员Java 杂谈互联网科技
【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(四)

【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(四)

作者: JAVA高级架构开发 | 来源:发表于2018-08-22 16:29 被阅读15次

    46.Request对象的主要方法?

    答:(1)setAttribute(String name,Object):设置名字为name的request的参数值

    (2)getAttribute(String name):返回由name指定的属性值

    (3)getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

    (4)getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

    (5)getCharacterEncoding():返回请求中的字符编码方式

    (6)getContentLength():返回请求的Body的长度

    (7)getHeader(String name):获得HTTP协议定义的文件头信息

    (8)getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

    (9)getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

    (10)getInputStream():返回请求的输入流,用于获得请求中的数据

    (11)getMethod():获得客户端向服务器端传送数据的方法

    (12)getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

    (13)getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

    (14)getParametervalues(String name):获得有name指定的参数的所有值

    (15)getProtocol():获取客户端向服务器端传送数据所依据的协议名称

    (16)getQueryString():获得查询字符串

    (17)getRequestURI():获取发出请求字符串的客户端地址

    (18)getRemoteAddr():获取客户端的IP地址

    (19)getRemoteHost():获取客户端的名字

    (20)getSession([Boolean create]):返回和请求相关Session

    (21)getServerName():获取服务器的名字

    (22)getServletPath():获取客户端所请求的脚本文件的路径

    (23)getServerPort():获取服务器的端口号

    (24)removeAttribute(String name):删除请求中的一个属性

    47.谈一谈你对Struts的理解?

    答:①Struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个servlet名为Action

    Servlet,或是ActionServlet的子类。我们可以在web,xml文件中将符合某种特征的所有请求交给Servlet处理,这个Servlet再参照文件(通长为/WEB-INF/struts.cfg.xml)将各个请求分别分配给不同的action去处理;(一个扩展知识点:Struts的配置文件可以有多个,可以按照模块配置各自的配置文件,这样可以防止配置文件的过渡膨胀)

    ②ActionServlet把请求交给action去处理之前,会将参数封装到一个formbean对象(就是一个java类,这个类中每个属性对应一个请求参数),封装成一个什么样的formbean对象呢?看配置文件。

    ③要说明的是,ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后,才会将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面有input属性指定,(看配置文件)作者为什么将这里命名为input属性,而不是error属性呢?

    ④action执行完成后,要返回结果视图,这个结果视图是用一个ActionForward对象看来表示的,actionforward对象通过struts-config.xml配置文件中配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件,为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。

    48谈一谈你对Hibernate的理解?

    答:①概述:它是一个持久层的ORM(对象关系型映射)框架,使用Hibernate框架,不用写JDBC代码,仅仅是调用一个save方法,就可以将对象保存到关系数据库中;仅仅是调用一个get方法,就可以从数据库中加载出一个对象。

    ②使用Hibernate的基本流程:配置Configuration对象、产生SessionFactory、创建session对象,开启事务,完成CRUD操作,提交事务,关闭session。

    ③配置文件:使用Hibernate时,先要配置hibernate.cfg.xml文件。其中配置数据连接信息和方言等,还要为每个实体配置相应的hbm.xml文件,然后在hibernate.cfg.xml文件中引入;

    ④关联关系映射:

    a)一对多:

    (Ⅰ)一方:需要加入一个包含多方的set集合,注意必须要new。

    (Ⅱ)多方:添加一方的bean对象,注意不用new。

    (Ⅲ)注意:只配置一方即可正常维护运行。一般一方会放弃外键维护。

    b)多对多:多对多保存中,有一方必须放弃维护中间表"inverse=ture"

    ⑤级联关系:cascade的6种取值

    none —— 不使用级联

    save-update —— 保存或修改

    delete —— 删除

    delete-orphan —— 孤儿删除(只有一对多才有!)

    all —— 除了孤儿删除,其他的所有

    all-delte-orphan —— 包含孤儿删除所有的。

    ⑥延迟加载:

    底层:动态代理技术

    第一次查询时 ====> 至查询ID值,生成代理对象(只含ID)

             =====> 继续操作,如打印某属性  ==发送sql语句==> 返回查询值

    类级别的延迟加载:查询的是某一个对象

    session.get()不延迟加载

    session.load()延迟加载

    两者区别

    关联级别的延迟加载

         fetch="select" lazy="true"  延迟加载(默认)

         fetch="select" lazy="false" 不延迟加载

         fetch="select" lazy="extra" 极其延迟加载

    ⑦Hibernate三种检索方式:

    QBC(Query By Criteria)

    HQL(Hibernate Query Language)

    SQL(基本不用)

    ⑧缓存:

    缓存概念

         缓存是内存中开辟的一块空间,用来保存数据

         实质是:一些集合设计

    一级缓存:Session

            自带的,不能卸载。一定存在的,与Session生命周期一样长

    二级缓存:

            默认没有开启,只提供了相关的策略,需第三方插件,常用EHCache。

    快照机制(SnapShot)

            持久态对象,在获取的时候,会保存两份:一份在缓存区,一份在快照区;

            在事务提交之前,会自动对比缓存区和快照区的数据,

            如果不一致,会自动修改缓存和快照区数据;

    49.谈一谈你对Spring的理解?

    ①Spring是一个开源的业务层框架,分模块,一站式框架,它能够整合各种其他主流框架;

    ②Spring的实质就是一个实现了工厂模式的工厂类,在其配置文件中,通过添加标签,来创建实例对象;

    ③Spring的核心——IoC/DI;

    a)IoC(Inverse of Control)控制反转,将对象的创建全交给Spring去管理,然后Spring容易通过依赖注入的方式,注入给调用者。这样做的好处是,让bean与bean之间以配置文件的形式组织在一起,而不是以硬编码的方式耦合在一起。

    b)依赖注入的方式有三种:接口注入、Setter方法注入(使用)、构造注入;

    c)IoC的注解方式:

    (Ⅰ)在applicationContext.xml配置文件中开启组件扫描

    (Ⅱ)在实现类上添加注解:@Component(value="id值")

    @Component的三个衍生注解(功能一样)

    @Controller -- 作用在WEB层

    @Service -- 作用在业务层

    @Repository -- 作用在持久层

    (Ⅲ)3.属性注入的注解(说明:使用注解注入的方式,可以不用提供set方法)

    * @Value -- 用于注入普通类型

    * @Autowired -- 默认按类型进行自动装配

    * @Qualifier -- 强制使用名称注入

    * @Resource -- 相当于@Autowired和@Qualifier一起使用,强调:Java提供的注解,属性使用name属性

    ④Spring的核心——AOP;

    a)AOP(面向切面编程),可以在不修改源代码的前提下,对程序进行增强,例如,加入日志,加入权限判断,加入异常处理等;

    b)AOP底层使用的是代理技术,分为JDK动态代理(面向接口)和CGLIB动态代理(没接口的,产生子类代理);

    c)使用步骤:

    (Ⅰ)编写切面类==>在IoC中配置切面类的bean标签==>配置aop相关

    (Ⅱ)切入点表达式:execution([修饰符] 返回值类型 包名.类名.方法名(参数))

    一般简写为:execution(* com.*.*.*DaoImpl.save*(..))

    (Ⅲ)通知类型

    前置通知:

    最终通知:如果程序出现了异常,最终通知也会执行。

      

    后置通知:

    异常抛出通知:

    环绕通知:

    * 要注意:目标的方法默认不执行,需要使用ProceedingJoinPoint对来让目标对象的方法执行。

    50.JDBC、ibatis(mybatis)、Hibernate有什么不同?

    答:①JDBC编程流程固定,同时将sql语句和java代码混在了一起,经常需要拼凑sql语句,细节很繁琐;

    ②ibatis(mybatis)它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。但是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

    ③Hibernate对象/关系映射能力强,数据库无关性好,因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。对于一些不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,hibernate就很难适应了,这时候用ibatis就是不错的选择,因为ibatis还是由我们自己写sql语句。

    需要免费Java架构学习资料视频请加扣扣群:835544715 群内提供免费的学习指导 架构资料 以及免费的解答 不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

    相关文章

      网友评论

        本文标题:【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(四)

        本文链接:https://www.haomeiwen.com/subject/lbeyiftx.html