Java工程师常见面试题集锦(九)互联网人必看!(附答案及视频教程,持续更新)

“新年都未有芳华,二月初惊见草芽;白雪却嫌春色晚,故穿庭树作飞花。”瑞雪兆丰年,都说一下雪,北京就回到了北平,故宫变成了紫禁城,白雪衬着红墙,夹带着收获的期盼,说不出的韵味。

年前就在撺着找工作的猿兄猿弟们,是不是已经武装好简历蓄势待发,抢占“金三”好时机呢?CSDN学院Java面试题继续更新,为伙伴们的面试之路加油续航。

Java工程师常见面试题集锦(一)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

Java工程师常见面试题集锦(二)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86138938

Java工程师常见面试题集锦(三)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86471513

Java工程师常见面试题集锦(四)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86525565

如果觉得文字学习较慢,也可以跟着老师一起视频学习:

Java面试题视频学习链接:https://edu.csdn.net/course/detail/10533

81. 简述Servlet的生命周期

Servlet 加载—>实例化—>服务—>销毁。

生命周期详解:

init():

在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

service():

它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

destroy():

仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

82.分析Servlet 与Tomcat结合工作的原理

1)Web Client 向Servlet容器(Tomcat)发出Http请求;

2)Servlet容器接收Web Client的请求;

3)Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中;

4)Servlet容器创建一个HttpResponse对象;

5)Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet 对象;

6)HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息;

7)HttpServlet调用HttpResponse对象的有关方法,生成响应数据。

83.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

 JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。

 Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来;而JSP的情   况是Java和HTML可以组合成一个扩展名为.jsp的文件。

 JSP侧重于视图,Servlet主要用于控制逻辑。 

84.简述说明四种会话跟踪技术 

会话作用域ServletsJSP 页面描述

1)page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面。

2)request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)。

3)session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求。

4)application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域 。

85. forward 和 redirect 的区别

1)forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

2)redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以 session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。

3)前者更加高效,在前者可以满足需要时,尽量使用 forward()方法, 并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其 它服务器上的资源,则必须使用 sendRedirect()方法。 

Java工程师常见面试题集锦(五)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86591005

Java工程师常见面试题集锦(六)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86638413

Java工程师常见面试题集锦(七)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86674007

Java工程师常见面试题集锦(八)互联网人必看!https://blog.csdn.net/CSDNedu/article/details/86700843

如果觉得文字学习较慢,也可以跟着老师一起视频学习:

Java面试题视频学习链接:https://edu.csdn.net/course/detail/10533

86.#{}和${}的区别是什么? 

#{}是预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

Mybatis在处理${}时,就是把${}替换成变量的值。

使用#{}可以有效的防止SQL注入,提高系统安全性。 

87. 当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

第1种:通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致 

<select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”> 
       select order_id id, order_no orderno ,order_price price form orders where order_id=#{id}; 
    </select>

第2种:  通过<resultMap>来映射字段名和实体类属性名的一一对应的关系 

<select id="getOrder" parameterType="int" resultMap="orderresultmap">
        select * from orders where order_id=#{id}
    </select>
   <resultMap type=”me.gacl.domain.order” id=”orderresultmap”> 
        <!–用id属性来映射主键字段–> 
        <id property=”id” column=”order_id”> 
        <!–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–> 
        <result property = “orderno” column =”order_no”/> 
        <result property=”price” column=”order_price” /> 
    </reslutMap>

88.模糊查询like语句该怎么写? 

第1种:在Java代码中添加sql通配符 

string wildcardname = “%smi%”; 
    list<name> names = mapper.selectlike(wildcardname);
    <select id=”selectlike”> 
     select * from foo where bar like #{value} 
    </select>

 第2种:在sql语句中拼接通配符,会引起sql注入

string wildcardname = “smi”; 
    list<name> names = mapper.selectlike(wildcardname);
    <select id=”selectlike”> 
     select * from foo where bar like "%"#{value}"%"
    </select>

89.通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

 Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象。

Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。

Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行Mappedstatement所代表的sql,然后将sql执行结果返回。

90. Mybatis是如何进行分页的?分页插件的原理是什么?

 Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

如果觉得文字学习较慢,也可以跟着老师一起视频学习:

Java面试题视频学习链接:https://edu.csdn.net/course/detail/10533

 添加学习小助手,备注“Java”进入学习群

关注你附近

猜你喜欢

转载自blog.csdn.net/CSDNedu/article/details/87448437
今日推荐