Java面试题:JVM、JDBC、Spring、Servlet、Struts、AWT和Swing常见问题解析
Java面试题:JVM、JDBC、Spring、Servlet、Struts、AWT和Swing常见问题解析
一、单选题
1.下面有关JVM内存,说法错误的是? A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的 B.虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的 C.方法区用于存储JVM加载的类信息、常量、静态变量,以及编译器编译后的代码等数据,是线程隔离的 D.原则上讲,所有的对象都在堆区上分配内存,使线程之间共存的
答案:C
解析: 方法区是线程共享的,并非线程隔离的。
2.下面有关jdbc.statement的说法错误的是? A. JDBC提供了statement、prepareStatement和callableStatement三种方式来执行查询语句,其中statement用于通用查询,preparedStatement用于执行参数化查询,而callablestatement则是用于存储过程 B.对于preparedstatement来说,数据库可以使用已经编译过及定义好的执行计划,由于preparedstatement对象已预编译过,所以其执行速度要快于statement对象 C.Preparedstatement中,“?”叫做占位符,一个占位符可以有一个或者多个值 D.Preparedstatement可以阻止常见的SQL注入式攻击
答案:C
解析: PreparedStatement中的占位符只能有一个值,不能有多个值。
3.下面有关spring的事物传播特性,说法错误的是? A. Propagation_supports:支持当前事务,如果当前没有事务,就以非事务方式执行 B. Propagation_supports:支持当前事务,如果当前没有事务,就抛出异常 C. Propagation_requires_new:新建事务,如果当前存在事务,吧当前事务挂起 D. Propagation_nested:支持当前事务,新增savepoint点,与当前事务同步提交或——
答案:B
解析: Propagation_supports如果当前没有事务,会以非事务方式执行,不会抛出异常。
4.下面有关servlet和CGI的描述,说法错误的是? A. Servlet处于服务器进程中,它通过多线程方式运行其service方法 B.CGI对每个请求都产生新的进程,服务完成后就销毁 C.Servlet在易用性上强于CGI,提供了大量的实用工具历程,例如自动解析和——HTML表单数据、读取和设置HTTP头、处理cookie、跟踪会话状态等 D.CGI在移植性上高于servlet,几乎所的主流服务器都直接或通过插件支持CGI
答案:D
解析: Servlet的移植性更高,因为Servlet是基于Java的,而Java是一种跨平台的语言。
5.下面有关servlet service描述错误的是? A.不管是post还是get方法提交过来的链接,都会在service中实现 B.Doget/dopost 则是在javax.servlet.genericservlet中实现 C.Service()是在javax.servlet。Servlet接口中定义的 D.Service判断请求类型,决定是调用doget还是dopost方法
答案:A
解析: 并不是所有请求都会在service中实现,service方法会根据请求类型调用doGet()或doPost()方法。
6.下列有关servlet的生命周期,说法不正确的是? A. 在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例。 B. 在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的daGet()过是doPost()方法。 C. 在销毁阶段,执行destroy()方法后会释放Servlet占用的资源。 D. Destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法。
答案:A
解析: 在Servlet生命周期的初始化阶段,init()方法用于初始化Servlet,而不是创建Servlet实例。Servlet实例是在Servlet容器启动时创建的。
- 下面有关Servlet中init,service,destroy方法描述错误的是? A. init()方法是Servlet 生命的起点。一旦加载了某个Servlet,服务器将立即调用它的init()方法 B. Service()方法处理客户机发出的所有 请求 C. Destroy()方法标志Servlet生命周期的结束 D. Servlet在多线程下使用了同步机制,因此,在并发编程下Servlet是线程安全的
答案:D
解析: Servlet本身并不是线程安全的,需要开发者在代码中进行同步控制以确保线程安全。
- 下面有关struts1和strust2的区别,描述错误的是? A. Struts1要求action类继承一个抽象基类。Struts2Action类可以实现一个ACtion接口 B. Struts1 action对象为每一个请求产生一个实例。Struts2 action是单列模式并且必须是线程安全的 C. Struts1 Action依赖于Servlet api ,Struts2 Action 不依赖于容器,允许Action脱离容器单独被测试 D. Struts1 整合了JSTL,struts2可以使用jstl,但是也支持ognl
答案:B
解析: Struts2 Action并非单例模式,而是为每个请求创建一个新的实例。
- 关于awt和swing说法正确的是? A. swing是awt的子类 B. Awt在不同操作系统中显示相同的风格 C. Awt不支持事件类型,Swing支持事件模型 D. Swing在不同的操作系统中显示相同的风格
答案:C
解析: AWT依赖于底层操作系统,因此在不同的操作系统中显示不同的风格。Swing则提供了自己的跨平台的UI组件,可以在不同的操作系统中显示相同的风格。
二、简答题
- JVM内存模型都有哪些区域?
答案: JVM内存模型主要包括以下几个区域:
- 程序计数器(Program Counter Register):线程私有,指示当前线程执行的字节码指令地址。
- 虚拟机栈(JVM Stack):线程私有,用于存储局部变量、操作数栈、动态链接、方法出口等信息。
- 本地方法栈(Native Method Stack):线程私有,用于支持Native方法的执行。
- 堆(Heap):线程共享,用于存储对象实例和数组。
- 方法区(Method Area):线程共享,用于存储被 JVM 加载的类信息、常量、静态变量、以及编译器编译后的代码等数据。
- 运行时常量池(Runtime Constant Pool):方法区的一部分,用于存放编译期生成的各种字面量和符号引用。
- 简述JDBC中PreparedStatement的优点?
答案: PreparedStatement相比Statement有以下优点:
- 性能提升: PreparedStatement的语句会被预编译,数据库可以针对预编译后的语句生成执行计划,从而提升执行效率。
- 安全性提升: PreparedStatement可以有效地防止SQL注入攻击,因为它会对参数进行预处理,避免恶意代码的注入。
- 代码可读性提升: PreparedStatement的使用可以使代码更加清晰易懂,减少代码重复。
- 简述Spring事务的传播特性?
答案: Spring事务的传播特性用于控制在不同方法调用之间如何处理事务。常见的传播特性有:
- PROPAGATION_REQUIRED: 如果当前存在事务,则加入当前事务;如果当前不存在事务,则新建一个事务。
- PROPAGATION_SUPPORTS: 如果当前存在事务,则加入当前事务;如果当前不存在事务,则以非事务方式执行。
- PROPAGATION_MANDATORY: 如果当前存在事务,则加入当前事务;如果当前不存在事务,则抛出异常。
- PROPAGATION_REQUIRES_NEW: 新建一个事务,如果当前存在事务,则将当前事务挂起。
- PROPAGATION_NOT_SUPPORTED: 以非事务方式执行,如果当前存在事务,则将当前事务挂起。
- PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。
- PROPAGATION_NESTED: 如果当前存在事务,则新建一个嵌套事务;如果当前不存在事务,则新建一个事务。
- Servlet的生命周期有哪些阶段?
答案: Servlet的生命周期包括以下几个阶段:
- 加载阶段: Servlet容器加载Servlet类。
- 初始化阶段: Servlet容器调用Servlet的init()方法进行初始化。
- 服务阶段: Servlet容器调用Servlet的service()方法处理客户端请求。
- 销毁阶段: Servlet容器调用Servlet的destroy()方法进行销毁。
- AWT和Swing的区别是什么?
答案: AWT和Swing都是Java提供的GUI库,但它们有一些区别:
- 依赖性: AWT依赖于底层操作系统,因此在不同操作系统中显示不同的风格。Swing则提供了自己的跨平台的UI组件,可以在不同的操作系统中显示相同的风格。
- 功能: Swing比AWT提供了更多更丰富的组件和功能,例如表格、树、菜单等。
- 性能: Swing比AWT性能更高,因为Swing是轻量级的,而AWT是重量级的。
- 事件模型: Swing支持事件模型,而AWT不支持。
三、编程题
-
使用JDBC连接数据库并执行查询操作,将查询结果输出到控制台。
-
使用Spring AOP实现日志记录功能。
-
使用Servlet实现一个简单的用户登录功能。
-
使用Swing创建一个简单的图形界面,包含一个按钮和一个文本框。
四、总结
本文涵盖了Java面试中常见的JVM、JDBC、Spring、Servlet、Struts、AWT和Swing相关面试题,并提供详细解答,帮助你更好地理解和掌握这些知识点。希望这篇文章对你的Java面试有所帮助!
注意: 本回答中“——”符号代表省略的部分,实际面试中需要根据具体的题目进行回答。
版权声明: 本文为原创内容,转载请注明出处。
原文地址: https://www.cveoy.top/t/topic/pPD7 著作权归作者所有。请勿转载和采集!