当前位置: 首页 > news >正文

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

【前言】别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 ……  

【下载】个人结合诸多资料,总结的一些JavaEE常见面试题,主要针对初/中级程序员想要word完整版下载的,评论里留言留下你的邮箱!

1.Struts2中,Action通过什么方式获取用户从页面输入的数据,又是通过什么方法把数据传给视图层显示的?

答:(1Action从页面获取数据的方式有三种:

            ①通过Action属性接收参数;(例:${pageContext.request.contextPath}/***.action? id=xxxx

            ②通过域模型获取参数;(例:ServletActionContext.getRequest().getParameter(arg0)

            ③通过模型驱动获取参数(例:extends ModelDriven<T>

    2Action将数据存入值栈(Value Stack)中,视图可以通过表达式语言(EL)从值栈中获取;

2.阐述Struts2中的Action如何编写,是否采用单例?

答:(1Struts2Action有三种写法:

           ①POJO类——无继承无实现;

           ②实现Action接口,重写execute()方法;

           ③继承ActionSupport(常用)

       2Action没有像Servlet一样,使用单实例多线程的工作方式,很明显,每一个Action要接收不同用户的请求参数,这就意味着Action是有状态的,因此在设计上使用了,每一个请求对应一个Action的处理方式,所以是多例的。

3.Struts2中,Action并没有直接收到用户的请求,那它为什么可以处理用户的请求?又凭什么知道一个请求到底交给哪一个Action来处理?

答:(1Struts2的核心过滤器收到用户的请求后,会对用户的请求进行简单的预处理(如解析、封装参数),然后通过反射来创建Action实例,并调用Action中指定的方法来处理用户请求。

        2)通知具体调用哪个Action来处理请求的方式,有两种:

          ①利用配置文件,Struts.xml中配置的<action>标签来确定;

          ②利用约定,Struts2中可以使用约定(convention)插件。例如:约定xxx总是对应XxxAction,这是对约定优于配置理念的践行;

4.简述Struts2异常处理机制?

答:Struts2提供了声明式的异常处理机制,可以在配置文件中加入如下代码:

<!-- 配置全局结果视图 -->

<global-results>

           <result name="error">/WEB-INF/pages/error.jsp</result>

</global-results>

<!-- struts2自带异常处理配置-->

<global-exception-mappings>

             <exception-mapping result="error" exception="com.itheima.exception.SysException"></exception-mapping>

             <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

</global-exception-mappings>

5.简述拦截器的工作原理?

答:在Struts2中,可以实现Interceptor接口或继承AbstractInterceptor类,来自定义拦截器。

①接口中的init()方法,在拦截器被创建后立即被调用,它在拦截器的生命周期内只被调用一次,可以在该方法中对相关资源进行必要的初始化;

②每拦截一个请求,intercept()方法就会被调用一次;

destory()方法将在拦截器销毁之前被调用。

6.谈一下拦截器和过滤器的区别?

答:拦截器和过滤器都可以用来实现横切关注功能,其区别主要在于:

①拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的

②过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器

③拦截器只能对Action请求起作用(Action中的方法),而过滤器可以对几乎所有的请求起作用(CSS JSP JS

7.谈一下你的项目选择Struts2的理由?

答:ActionPOJO类,没有依赖Servlet API,具有良好的可测试性;

②强大的拦截器,简化了开发的复杂度;

③支持多种表现层技术:JSPFreemarker等;

④灵活的验证方式;

⑤国际化(I18N)支持

⑥声明式异常管理;

⑦通过JSON插件简化Ajax

⑧通过Spring插件跟Spring整合;

8.Struts2中如何访问HttpServletRequestHttpSessionServletContext三个域对象?

答:有两种方式:

①通过ServletActionContext的方法获得;

②通过ServletRequestAwareSessionAwareServletContextAware接口注入。

9.Struts2中的默认包struts-default有什么作用?

答:它定义了Struts2内部的众多拦截器和Result类型,而Struts2很多核心的功能是通过这些内置的拦截器实现,如:从请求中把参数封装到action、文件上传和数据校验等等,都是通过拦截器实现的。在Struts2的配置文件中,自定义的包,继承了struts-default包,就可以使用Struts2为我们提供这些功能。

10.简述值栈的原理和生命周期?

答:Value-Stack贯穿整个Action的生命周期,保存在request作用域中,所以它和request的生命周期一样。当Struts2接受一个请求时,会创建ActionContextValue-StackAction对象,然后把Action存放进Value-Stack,所以Action的实例变量可以通过OGNL访问。由于Action是多实例的,和使用单例的Servlet不同,每个Action都有一个对应的Value-StackValue-Stack存放的数据类型是该Action的实例,以及该Action中的实例变量,Action对象默认保存在栈顶。

11.SessionFactory是线程安全的吗?Session是线程安全的吗?两个线程能共享一个Session吗?

答:(1SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候构建。对于应用程序,最好将SessionFactory通过单例的模式进行封装以便于访问。

2Session是一个轻量级非线程安全的对象(线程间不能共享Session),它表示与数据库进行交互的一个工作单元。Session是由SessionFactory创建的,在任务完成之后会被关闭。Session是持久层服务对外提供的主要接口。Session会延迟获取数据库连接(也就是在需要的时候才会获取)。为了避免创建太多的session,可以使用TreadLocal来获取当前的session,无论你调用多少次getCurrentSession()方法,返回的都是同一个session

12.Sessionloadget方法区别是什么?

答:①如果没有找到符合条件的记录,get方法返回null值,而load方法会抛出异常;

get方法直接返回实体类对象,load方法返回实体类对象的代理;

③在Hibernate3之前,get方法只在一级缓存(内部缓存)中进行数据查找,如果没有找到对应的数据则越过二级缓存,直接发出SQL语句完成数据的读取;load方法则可以充分利用二级缓存中现有数据,进行延迟加载。当然从Hibernate3开始,get方法不再是对二级缓存只写不读,它也是可以访问二级缓存的;

简单的是,对于load()方法,hibernate认为该数据在数据库中一定存在,可以放心的使用代理来实现延迟加载,如果没有数据,就会抛出异常,而通过get()方法去取数据,是可以不存在的。

13.阐述Session加载实体对象的过程?

答:Session在调用数据查询功能之前,首先会在缓存中进行查询,在一级缓存中,通过实体类型和主键进行查询,如果一级缓存查找命中且数据状态合法,则直接返回;

②如果一级缓存没有命中,接下来Session会在当前NonExists记录(相当于一个查询黑名单,如果出现重复的无效查询可以迅速判断,从而提升性能)中进行查询,如果NonExists中存在同样的查询条件,则返回null

③对于load方法,如果一级缓存查询失败,则查询二级缓存,如果二级缓存命中则直接返回;

④如果之前的查询都未命中,则发出sql语句,如果查询未发现对应的记录,则此次查询添加到SessionNonExists中加以记录,并返回null

⑤根据映射配置和sql语句,得到ResultSet,并创建对应的实体对象;

⑥将对象纳入Session(一级缓存)管理;

⑦执行拦截器的onload方法(如果有对应的拦截器);

⑧将数据对象纳入二级缓存;

⑨返回数据对象。

14.Query接口的list方法和iterate方法有什么区别?

答:list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了),list方法无法利用缓存,它对一级缓存只写不读;

iterate方法可以充分利用一级缓存,它所返回的对象中仅包含了主键值(标识符),只有当你对iterator中的对象进行操作时,Hibernate才会向数据库再次发送SQL语句来获取该对象的属性值;

list方法不会引起N+1查询问题,而iterate方法会引起N+1查询问题。

15.Hibernate如何实现分页查询?

答:通过Hibernate实现分页查询,开发人员只需要提供HQL语句、查询起始行数(setFirstResult()方法)和最大查询行数(setMaxResult()方法),并调用Query接口的list()方法,Hibernate会自动生成分页查询的SQL语句。


相关文章:

  • HSRP的工作原理
  • 概率图常见模型
  • NTpassword(MD4)
  • 测试PHP
  • Cookie、LocalStorge、SesstionStorge 的区别和用法
  • regsvr32的用法
  • heroku 上部署node.js的几个注意点
  • 测测你的寿命还剩多少年?
  • Spring MVC——创建第一个项目(搭建步骤)
  • 班组建设浅析2
  • JSP学习笔记(五十二):Web服务启动时自动加载Servlet,并读取数据库内容
  • 构建你自己的镜像
  • 用datatable存儲oracle輸出值
  • 关于图片缩放的c#方法
  • asp.net中资源文件的使用
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • java取消线程实例
  • node和express搭建代理服务器(源码)
  • Python中eval与exec的使用及区别
  • ReactNative开发常用的三方模块
  • Redis学习笔记 - pipline(流水线、管道)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Solarized Scheme
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Twitter赢在开放,三年创造奇迹
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 大数据与云计算学习:数据分析(二)
  • 大型网站性能监测、分析与优化常见问题QA
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 网页视频流m3u8/ts视频下载
  • 微信小程序:实现悬浮返回和分享按钮
  • 【干货分享】dos命令大全
  • ionic异常记录
  • Nginx实现动静分离
  • !!Dom4j 学习笔记
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $GOPATH/go.mod exists but should not goland
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (k8s中)docker netty OOM问题记录
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .gitattributes 文件
  • .Net Web窗口页属性
  • .net 使用ajax控件后如何调用前端脚本
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件