### JavaWeb 开发人员面试题知识点详解
#### 一、选择题知识点解析
**1. JSP有几个内置对象?**
- **知识点解析:**
- JSP共有9个内置对象,它们分别是:`out`, `request`, `response`, `session`, `application`, `config`, `page`, `pageContext`, 和 `exception`。
- 这些内置对象简化了开发者的工作,使得可以直接使用这些对象而无需显式声明或实例化。
**2. 在JAVA中,如何跳出当前的多重嵌套循环?**
- **知识点解析:**
- `break`关键字可以用于跳出当前循环,如果想要跳出外层循环,通常需要使用标签名配合`break`。
- `return`可以在方法内使用,当调用`return`时,会立即结束当前方法的执行并返回调用者,如果有外层循环包含在此方法中,则会跳出这些循环。
- `forward`不是用来跳出循环的,而是用于在Servlet容器内部将请求转发给另一个资源。
- `finally`块用于确保某些重要的代码(比如关闭文件或网络连接)总是被执行,即使发生了异常。
**3. 四种会话跟踪技术,哪个范围最大?**
- **知识点解析:**
- 会话跟踪技术包括:`page`, `request`, `session`, 和 `application`。
- `page`作用域最小,只在当前页面有效。
- `request`作用域比`page`大,但仍然只限于当前HTTP请求周期。
- `session`作用域比`request`更大,它在整个会话期间有效。
- `application`作用域最大,它是全局的,对于整个应用的所有用户都可见。
**4. Java中有几种方法可以实现一个线程?**
- **知识点解析:**
- Java中实现线程有两种主要方式:
- 继承`Thread`类。
- 实现`Runnable`接口。
- 另外,还可以使用`Callable`和`Future`接口结合`ExecutorService`来创建有返回值的线程,但这并不是传统的创建线程的方式。
**5. 同步有几种实现方法?**
- **知识点解析:**
- 同步实现方法主要有两种:
- 使用`synchronized`关键字。
- 使用`ReentrantLock`等显式锁。
- 第一种是传统的同步机制,而第二种则是更灵活、更强大的锁机制。
**6. XML有哪些解析技术?**
- **知识点解析:**
- XML解析技术主要包括:
- DOM (Document Object Model):将XML文档加载到内存中并构建一个树形结构,允许对文档的任意部分进行访问和修改。
- SAX (Simple API for XML):基于事件驱动的模型,适用于大型文件的解析,因为它不会一次性加载整个文档到内存中。
- STAX (Streaming API for XML):流式API,与SAX类似,但提供了更好的性能和更多的控制选项。
- JDOM:是一个轻量级的Java库,用于创建、读取和写入XML文档,但它不如DOM和SAX流行。
**7. 下列说法正确的是:**
- **知识点解析:**
- 构造器`Constructor`不能被继承。
- `String`类是final的,因此不能被继承。
- 检查两个对象是否相等应使用`.equals()`方法,而不是`==`,后者比较的是引用地址。
- `char`型变量可以存储一个中文汉字,因为Java使用Unicode字符集,一个`char`类型占用2个字节。
**8. 下面说法错误的是:**
- **知识点解析:**
- `Vector`是线程安全的容器。
- `float`类型的变量不能直接赋值为`3.4`,因为默认是`double`类型。
- `StringBuffer`的长度是可变的,它和`StringBuilder`都是用于构建字符串的类。
- `StringBuffer`是线程安全的,它的长度是可以改变的。
**9. 下列关于集合的说法正确的是:**
- **知识点解析:**
- `List`的具体实现包括`ArrayList`和`Vector`。
- `Map`集合类用于存储键值对,其中每个键映射到一个值。
- `Set`的元素是无序的,不允许重复。
- `Hashtable`是线程安全的。
**10. 下列关于线程说法正确的是:**
- **知识点解析:**
- 调用`sleep`不会释放对象锁。
- 调用`wait`方法会导致本线程放弃对象锁,并等待其他线程调用`notify`或`notifyAll`。
- 当一个线程进入一个对象的一个`synchronized`方法后,其他线程可以进入此对象的其他非`synchronized`方法。
- `notify`: 唤醒一个处于等待状态的线程,`notifyAll`: 唤醒所有处于等待状态的线程。
**11. 给定JSP程序源码如下,该JSP运行后输出的结果是:**
- **知识点解析:**
- `<% int Count=1; %>` 定义了一个名为`Count`的整型变量并初始化为1。
- `<%= ++Count %>` 使`Count`的值自增1后再输出,因此输出结果是2。
**12. 在J2EE中的一个JSP文件中,有表达式`<%=2+3%>`,它将输出:**
- **知识点解析:**
- 表达式`<%=2+3%>`将在JSP页面中输出`5`。
**13. 在J2EE中,JSTL提供条件标签以支持JSP页面的各种条件,其中哪个类似于Java语言的switch语句?**
- **知识点解析:**
- `<c:choose>`标签用于模拟`switch`语句的功能,在JSP中可以用来表示条件分支。
**14. 在进行JavaWeb开发时,假定一个变量保存在session中,要获得这个变量的值,可以使用以下哪个语句?**
- **知识点解析:**
- `session.getAttribute("name")`用于从`HttpSession`对象中获取名称为"name"的属性值。
**15. 在J2EE中,编写Servlet过滤器时,哪个接口用于调用过滤器链中的下一个过滤器?**
- **知识点解析:**
- `FilterChain`接口用于调用过滤器链中的下一个过滤器。
**16. 关于视图的描述正确的是:**
- **知识点解析:**
- 视图并不实际存储数据,而是存储了SQL查询语句,当查询视图时,数据库会执行该查询语句并返回结果。
- 视图可用于简化复杂的查询,提高安全性,以及提供一致的数据视图。
**17. STRUTS框架中,哪个类在视图层和控制层之间传递HTML表单数据?**
- **知识点解析:**
- `ActionForm`类用于封装用户提交的表单数据,并且在视图层和控制层之间传输这些数据。
**18. Struts控制器的主要任务是接受用户请求、根据用户请求调用对应的模型组件、获取业务逻辑执行结果的根据处理结果选择适合的视图组件返回给用户,实现Struts控制器的类中不包括:**
- **知识点解析:**
- `Action`类负责处理用户请求。
- `ActionForm`类用于封装用户提交的表单数据。
- `ActionForward`类用于指定视图组件的位置。
- `ActionServlet`类是Struts的核心控制器,它负责接收用户请求并调度其他组件。
**19. 在OOD中,类和接口之间的关系称之为:**
- **知识点解析:**
- 类和接口之间的关系通常被称为“实现”(implements),即类实现了接口中定义的方法。
**20. 以下关于SessionFactory的说法哪些正确?**
- **知识点解析:**
- `SessionFactory`是重量级的对象,不应该频繁创建。
- 一个`SessionFactory`对象对应一个数据库存储源。
- `SessionFactory`应该在整个应用程序的生命周期内存在一个单一实例。