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

简介: 【前言】别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 ……   【下载】个人结合诸多资料,总结的一些JavaEE常见面试题,主要针对初/中级程序员。想要word完整版下载的,评论里留言留下你的邮箱! 16.请写出hibernate中主键生成策略? 答:①incr

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

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

16.请写出hibernate中主键生成策略?

答:increment:适用于short,int,long作为主键.不是使用的数据库自动增长机制。

* Hibernate中提供的一种增长机制;

* 先进行查询:select max(id) from user

* 再进行插入:获得最大值+1作为新的记录的主键;

* 问题:不能在集群环境下或者有并发访问的情况下使用;

identity:适用于short,int,long作为主键。必须使用底层带有自动增长机制的数据库。

* 底层使用的是数据库的自动增长(auto_increment).Oracle数据库没有自动增长;

sequence:适用于short,int,long作为主键.底层使用的是序列的增长方式。

* Oracle数据库底层没有自动增长,想自动增长需要使用序列;

uuid:适用于char,varchar类型的作为主键.

* 使用随机的字符串作为主键;

native:本地策略.根据底层的数据库不同,自动选择适用于该种数据库的生成策略.(short,int,long)

* 如果底层使用的MySQL数据库:相当于identity

* 如果底层使用Oracle数据库:相当于sequence

assigned:主键的生成不用Hibernate管理了.必须手动设置主键。

17.具有相同名称的一组值,struts2如何实现封装

答:①对于String类型,Struts2会采用“, ”方法进行字符串连接。

如:23ad, 43e4, 65ds.....

解决:  String ids[] = model.getId().split(", ");

//调用业务方法,实现批量删除

deptService.delete(Dept.class, ids);

②对于Integer,Float,Date类型,Struts2默认接收的是最后一个值;

如:客户端给id传了三个值,id=3id=4id=5....服务器只能接受最后一个值,就是id=5

解决:private List<Integer> ids;//生成它的gettersetter

18.阐述实体对象的三种状态以及转换关系?

答:Hibernate中对象有三种状态:

瞬时态(transient):没有持久化标识OID,没有被纳入到Session对象的管理;

持久态(persistent):有持久化标识OID,已经被纳入到Session对象的管理;

游离态(detached)有持久化标识OID,没有被纳入到Session对象的管理;

 

注意:处在持久态的对象,有自动更新数据库的能力。尤其快照机制引起的:

19.简述Hibernate中快照机制的原理?

 

20.简述Hibernate中常见的优化策略?

答:①指定合理的缓存策略;

②采用合理的Session管理机制;

③尽量使用延迟加载特性;

④设定合理的批量处理参数;

⑤如果可以,选用UUID作为主键生成器;

⑥如果可以, 选用基于version的乐观锁替代悲观锁;

⑦开发过程中, 开启hibernate.show_sql选项查看生成的SQL,从而了解底层的状况;开发完成后关闭此选项;

⑧数据库本身的优化(合理的索引,缓存,数据分区策略等)也会对持久层的性能带来可观的提升,这些需要专业的DBA提供支持;

21.谈一谈Hibernate的一级缓存、二级缓存和查询缓存?

答:HibernateSession提供了一级缓存的功能,默认总是有效的,当应用程序保存持久化实体、修改持久化实体时,Session并不会立即把这种改变提交到数据库,而是缓存在当前的Session中,除非显示调用了Sessionflush()方法或通过close()方法关闭Session。通过一级缓存,可以减少程序与数据库的交互,从而提高数据库访问性能。

SessionFactory级别的二级缓存是全局性的,所有的Session可以共享这个二级缓存。不过二级缓存默认是关闭的,需要显示开启并指定需要使用哪种二级缓存实现类(可以使用第三方提供的实现)。一旦开启了二级缓存并设置了需要使用二级缓存的实体类,SessionFactory就会缓存访问过的该实体类的每个对象,除非缓存的数据超出了指定的缓存空间。

③一级缓存和二级缓存都是对整个实体进行缓存,不会缓存普通属性,如果希望对普通属性进行缓存,可以使用查询缓存。查询缓存是将HQLSQL语句以及它们的查询结果作为键值对进行缓存,对于同样的查询可以直接从缓存中获取数据。查询缓存默认也是关闭的,需要显示开启。

22.说出Servlet的生命周期?

答:Servlet的生命周期:

servlet是单实例多线程的

②默认第一次收到请求的时候,服务器创建servlet

③与此同时调用init方法,实现初始化操作,并调用service方法;

service方法会调用与请求对应的doGetdoPost等方法完成业务操作;

⑤以后每当收到请求的时候,都创建一个新的线程,同样服务器会调用service方法来处理业务逻辑;

⑥当服务器正常关闭或者servlet被移除的时候,服务器调用destroy方法,实现销毁操作。

23.请求转发(forward)和重定向(redirect)的区别?

答:① 请求转发是1次请求;重定向是2次请求;

② 请求转发地址栏不变;重定向地址栏改变;

③ 请求转发是request的方法;重定向是response的方法;

④ 请求转发的时候可以使用request域对象;而重定向不能使用;

⑤ 请求转发的路径是内部路径;重定向的路径是绝对路径;

⑥ 若访问站外资源,需要使用重定向;

24. getpost请求的区别?

答: get请求用来从浏览器上获取资源,而post是用来向服务器提交数据;

get会将表单中的数据,按照name=value的形式,添加到action所指向的URL后面,并且两者间使用“?”连接,各个变量之间使用“&”连接;post是将表单中的数据放在HTML头部(header),传递到action所指向URL,不会出现在地址栏中;

get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件只能使用post方式;

25.JSPServlet有有什么关系?

答:Servlet是一个特殊的Java程序,它运行于服务器的JVM中,依靠服务器的支持向浏览器提供显示内容;

JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于ServletJava程序,可以简化页面内容的生成;

ServletJSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。而JSP的情况是JavaHTML可以组合成一个扩展名为.jsp的文件(有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然,这个说法还是很片面的);

JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller);

26.JSP9个内置对象和4个域对象?

答:(19个内置对象:

  request:封装客户端的请求,其中包含来自GETPOST请求的参数;

  application:封装服务器运行环境的对象;

  response:封装服务器对客户端的响应;

  session:封装用户会话的对象;

  pageJSP页面本身(相当于Java程序中的this);

  configWeb应用的配置对象;

  exception:封装页面抛出异常的对象;

  pageContext:通过该对象可以获取其他对象;

  out(滚吧)用来传送回应的输出;

24个域对象

  page(当前页面)

  reques(一次请求)

  session( 一次会话)

  application(整个会话)

27.实现会话跟踪的技术有哪些?

答:由于HTTP协议本身是无状态的,服务器为了区分不同的用户,就需要对用户会话进行跟踪,简单的说就是为用户进行登记,为用户分配唯一的ID,下一次用户在请求中包含此ID,服务器根据此判断到底是哪一个用户。

  URL重写:在URL中添加会话信息作为请求的参数,或者将唯一的会话ID添加到URL结尾,以表示一个会话;

  ②设置表单隐藏域:将和会话跟踪相关的字段添加到隐藏域中,这些信息不会在浏览器显示,但是提交表单时会提交给服务器;

  cookiecookie有两种,一种是基于窗口的,浏览器关闭后,cookie就没有了;另一种是将信息存储在一个临时文件中,并设置其有效路径和最大存活时间。当用户通过浏览器和服务器建立一次会话后,会话ID就会随相应信息储存在基于窗口的cookie中,那就意味着只要浏览器没有关闭,会话没有超时,下一次请求时这个会话ID又会提交给服务器,让服务器识别用户身份。在使用cookie时要注意几点:首先不要在cookie中存放敏感信息;其次cookie存储的数据量有限(4k),不能将过多的内容存储cookie中;再者浏览器通常只允许一个站点最多存放20cookie。当然,和用户会话相关的其他信息(除了会话ID)也可以存在cookie方便进行会话跟踪;

  HttpSession:在所有会话跟踪技术中,HttpSession对象是最强大也是功能最多的。当一个用户第一次访问某个网站时会自动创建HttpSession,每个用户可以访问他自己的HttpSession。可以通过HttpServletRequest对象的getSession方法获得HttpSession,通过HttpSessionsetAttribute方法可以将一个值放在HttpSession中,通过调用HttpSession对象的getAttribute方法,同时传入属性名就可以获取保存在HttpSession中的对象。与上面三种方式不同的是,HttpSession放在服务器的内存中,因此不要将过大的对象放在里面,即使目前的Servlet容器可以在内存将满时将HttpSession中的对象移到其他存储设备中,但是这样势必影响性能。添加到HttpSession中的值可以是任意Java对象,这个对象最好实现了Serializable接口,这样Servlet容器在必要的时候可以将其序列化到文件中,否则在序列化时就会出现异常。

28.你的项目中使用过哪些JSTL标签?

答:项目中主要使用了JSTL的核心标签库,包括<c:if><c:choose><c: when><c: otherwise><c:forEach>等,主要用于构造循环和分支结构,以控制显示逻辑。

29.使用标签库有什么好处?

答:使用标签库的好处包括以下几个方面:

  ①分离JSP页面的内容逻辑,简化Web开发;

  ②开发者可以创建自定义标签库来封装业务逻辑和显示逻辑;

  ③标签库具有很好的可移植性、可维护性和可重用性;

  ④避免了对Scriptlet(小脚本)的使用(很多公司的项目都不允许在JSP中书写小脚本)

30.表达式语言(EL)支持哪些运算符?

答:除了.[]运算符,EL还提供了:

①算术运算符:+-*/div%mod

②关系运算符:==eq!=ne>gt>=ge<lt<=le

③逻辑运算符:&&and||or!not

④条件运算符:${statement? A : B}(跟Java的三元运算符类似)

empty运算符:检查一个值是否为null或者空(数组长度为0或集合中没有元素也返回true

相关文章
|
13天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
43 11
|
23天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
59 7
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
77 2
|
5天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
29天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
67 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
23天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
3天前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
3天前
|
Java 调度

热门文章

最新文章