### Java面试题知识点详解 #### 一、HTML & JavaScript & AJAX 部分 ##### 1. 判断第二个日期比第一个日期大 - **问题描述**:如何使用JavaScript确保用户输入的日期符合“YYYY-MM-DD”格式,并且第二个日期比第一个日期晚。 - **解决方案**: - 使用正则表达式验证日期格式是否正确。 - 将字符串转换为Date对象进行比较。 - 示例代码: ```javascript function isValidDate(dateStr) { const dateRegex = /^\d{4}-\d{2}-\d{2}$/; if (!dateRegex.test(dateStr)) return false; const [year, month, day] = dateStr.split('-').map(Number); const date = new Date(year, month - 1, day); return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day; } function isSecondDateLater(firstDate, secondDate) { if (!isValidDate(firstDate) || !isValidDate(secondDate)) { alert("请输入正确的日期格式(YYYY-MM-DD)!"); return false; } const first = new Date(firstDate); const second = new Date(secondDate); return second > first; } ``` ##### 2. 用table显示n条记录,每3行换一次颜色 - **问题描述**:创建一个表格,每3行改变一次背景色。 - **解决方案**: - 使用CSS伪类`:nth-child`选择器。 - 示例代码: ```html <table> <tr class="row"> <td>数据1</td> </tr> <tr class="row"> <td>数据2</td> </tr> <!-- 更多行 --> </table> <style> .row:nth-child(3n+1), .row:nth-child(3n+2) { background-color: red; } .row:nth-child(3n) { background-color: green; } </style> ``` ##### 3. HTML的form提交之前如何验证数值文本框的内容全部为数字? - **问题描述**:确保HTML表单中的数字文本框仅包含数字。 - **解决方案**: - 使用`onsubmit`事件添加自定义验证逻辑。 - 示例代码: ```html <form onsubmit="return validateForm()"> <input type="text" id="numInput" /> <button type="submit">提交</button> </form> <script> function validateForm() { const input = document.getElementById('numInput'); const regex = /^\d+$/; if (!regex.test(input.value)) { alert('请输入有效的数字!'); return false; } return true; } </script> ``` ##### 4. 请写出用于校验HTML文本框中输入的内容全部为数字的javascript代码 - **解决方案**: - 使用正则表达式匹配数字。 - 示例代码: ```javascript function validateNumericInput(inputValue) { const regex = /^\d+$/; return regex.test(inputValue); } ``` ##### 5. 说说你用过那些ajax技术和框架,说说它们的区别 - **技术与框架**: - **jQuery.ajax**: 简化了原生XMLHttpRequest的使用。 - **Fetch API**: 原生JavaScript API,支持Promise。 - **Axios**: 基于Promise的HTTP客户端,适用于浏览器和Node.js。 - **区别**: - **jQuery.ajax**:易于上手,但API较旧。 - **Fetch API**:现代浏览器支持,更接近原生。 - **Axios**:更强大的功能和错误处理。 #### 二、数据库部分 ##### 1. 根据部门号从高到低,工资从低到高列出每个员工的信息 - **SQL查询**: ```sql SELECT * FROM employees ORDER BY department_id DESC, salary ASC; ``` ##### 2. 列出各个部门中工资高于本部门平均工资的员工数和部门号,并按部门号排序 - **SQL查询**: ```sql SELECT department_id, COUNT(*) AS num_higher_salary FROM ( SELECT employee_id, department_id, salary FROM employees WHERE salary > ( SELECT AVG(salary) FROM employees e2 WHERE e2.department_id = employees.department_id ) ) AS t GROUP BY department_id ORDER BY department_id; ``` ##### 3. 存储过程与触发器 - **存储过程**:预编译的一组SQL语句,可接受参数并返回结果。 - **触发器**:自动执行的存储过程,在特定事件发生时触发。 ##### 4. 数据库三范式 - **第一范式**:原子性,确保每一列都是不可分割的数据项。 - **第二范式**:建立在第一范式的基础上,消除部分依赖。 - **第三范式**:消除传递依赖,确保非主键列直接依赖于主键。 ##### 5. 数据库优化方面的经验 - **索引管理**:合理使用索引来加速查询。 - **查询优化**:减少不必要的全表扫描。 - **分区策略**:对于大型表,使用分区提高性能。 - **缓存策略**:使用缓存减少数据库访问频率。 ##### 6. UNION 和 UNION ALL 的不同 - **UNION**:去除重复记录,对结果集进行排序。 - **UNION ALL**:保留所有记录,包括重复记录。 #### 三、JDBC ##### 15. 注册Jdbc驱动程序的三种方式 - **通过DriverManager.registerDriver()**: ```java DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); ``` - **通过Class.forName()**: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); ``` - **通过META-INF/services/javax.sql.Driver** ##### 16. 用JDBC如何调用存储过程 - **调用存储过程**: ```java Connection conn = DriverManager.getConnection(url, username, password); CallableStatement cstmt = conn.prepareCall("{call myProcedure(?, ?)}"); cstmt.setInt(1, 10); cstmt.setString(2, "test"); cstmt.execute(); ``` ##### 17. JDBC中的PreparedStatement相比Statement的好处 - **PreparedStatement**:预编译SQL语句,提高性能。 - **防止SQL注入**:参数化查询。 - **可重用性**:可以多次执行相同的SQL语句。 ##### 18. 写一个用jdbc连接并访问oracle数据的程序代码 - **示例代码**: ```java String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "username"; String password = "password"; Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM employees WHERE department_id = ?"); pstmt.setInt(1, 10); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("employee_name")); } ``` ##### 19. Class.forName的作用?为什么要用? - **Class.forName()**:加载并注册指定的类。 - **用途**:确保JDBC驱动被正确加载到JVM中。 ##### 20. 大数据量下的分页解决方法 - **RowNumber() 方法**:使用窗口函数进行分页。 - **Limit子句**:在查询结果中限制返回的行数。 - **游标**:逐行处理数据,减少内存占用。 #### 四、JavaWeb部分 ##### 1. Tomcat的优化经验 - **JVM参数调整**:增加堆大小。 - **连接器配置**:优化连接池设置。 - **部署模式**:使用热部署减少重启时间。 ##### 2. HTTP请求的GET与POST方式的区别 - **GET**:通常用于获取资源,URL长度有限制。 - **POST**:用于发送数据,没有长度限制。 ##### 3. 解释一下什么是servlet - **Servlet**:Java Web应用程序的核心组件之一,用于处理HTTP请求。 ##### 4. 说一说Servlet的生命周期 - **初始化**:`init()`方法。 - **服务**:`service()`方法。 - **销毁**:`destroy()`方法。 ##### 5. Servlet的基本架构 - **继承**:`HttpServlet`类。 - **重写**:`doGet()`和`doPost()`方法。 ##### 6. SERVLETAPI中forward()与redirect()的区别 - **Forward**:服务器端转发,地址栏不变。 - **Redirect**:客户端重定向,地址栏变化。 ##### 7. 什么情况下调用doGet()和doPost()? - **doGet**:处理GET请求。 - **doPost**:处理POST请求。 ##### 8. Request对象的主要方法 - `getParameter()`: 获取参数值。 - `setAttribute()`: 设置属性。 - `getAttribute()`: 获取属性。 ##### 9. forward和redirect的区别 - **Forward**:服务器内部跳转,保持会话状态。 - **Redirect**:客户端重定向,丢失会话状态。 ##### 10. request.getAttribute()和request.getParameter()有何区别? - **getParameter()**:获取请求参数。 - **getAttribute()**:获取请求范围内的属性。 ##### 11. jsp有哪些内置对象?作用分别是什么?分别有什么方法? - **out**:用于输出。 - **request**:获取客户端请求信息。 - **response**:设置响应信息。 - **session**:管理会话。 - **application**:管理全局范围的属性。 ##### 12. jsp有哪些动作?作用分别是什么? - `<jsp:include>`:静态或动态包含文件。 - `<jsp:param>`:向包含文件传递参数。 - `<jsp:forward>`:页面跳转。 ##### 13. JSP的常用指令 - `<%@ page %>`:设置页面属性。 - `<%@ include %>`:静态包含文件。 - `<%@ taglib %>`:引入标签库。 ##### 14. JSP中动态INCLUDE与静态INCLUDE的区别? - **动态**:运行时决定是否包含。 - **静态**:编译时决定是否包含。 ##### 15. 两种跳转方式分别是什么?有什么区别? - **Forward**:服务器端内部跳转。 - **Redirect**:客户端重定向。 ##### 16. 页面间对象传递的方法 - **Session**:跨页面传递对象。 - **Request**:页面跳转时传递对象。 ##### 17. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? - **相同点**:都用于处理HTTP请求。 - **不同点**:JSP侧重视图层,Servlet侧重控制逻辑。 - **联系**:JSP可嵌入Servlet代码。 ##### 18. MVC的各个部分都有那些技术来实现?如何实现? - **Model**:业务逻辑,如JavaBean。 - **View**:视图展示,如JSP。 - **Controller**:控制逻辑,如Servlet。 ##### 19. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? - **输出编码**:设置`response.setCharacterEncoding()`。 #### 五、实际项目开发 ##### 1. 在eclipse中调试时,怎样查看一个变量的值? - **调试视图**:观察变量变化。 - **悬停查看**:鼠标悬停在变量上。 以上就是根据给定文件内容总结的相关知识点,涵盖了HTML、JavaScript、AJAX、数据库、JDBC以及JavaWeb等方面的内容。
剩余28页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助