### 自整理Java关于基础和框架的面试题 #### 基础知识点 ##### JDK常用的包 - **java.lang**: 包含所有基本类,如`String`、`Math`等。 - **java.util**: 提供集合框架、日期/时间设施、事件模型、杂项实用程序类(如哈希映射)、工厂、以及并发机制。 - **java.io**: 包含输入/输出类。 - **java.sql**: 用于连接和操作数据库。 ##### Get和Post的区别 - **GET**:主要用于获取资源,将数据附在URL之后,安全性较低,但传输速度快。 - **POST**:用于向服务器发送数据,数据放置在HTTP包的正文中,更安全,但可能较慢。 ##### Java多态的具体体现 - 多态是面向对象编程的一个特性,允许子类继承父类的方法并根据需要覆盖它们。具体体现在方法重写(override)和方法重载(overload)上。 ##### StringBuffer、StringBuilder、String的区别 - **String**:不可变字符串,适合于只读字符串。 - **StringBuffer**:可变字符串,线程安全,适合多线程环境。 - **StringBuilder**:可变字符串,非线程安全,性能优于`StringBuffer`。 ##### Hashtable与HashMap的区别 - **Hashtable**:线程安全,不允许null键和null值。 - **HashMap**:非线程安全,允许一个null键和多个null值。 ##### Forword(请求转发)与Redirect(重定向) - **请求转发**:服务器内部进行转发,客户端地址栏不变。 - **重定向**:服务器告诉客户端去另一个地址获取资源,客户端地址栏会改变。 ##### XML和Json的特点 - **XML**:格式较为复杂,适用于需要元数据的情况。 - **JSON**:轻量级,易于阅读和编写,更适合数据交换。 ##### request.getSession()、reqeust.getSession(false)和request.getSession(true) - `request.getSession()`:如果会话存在则返回该会话,否则创建一个新的会话。 - `request.getSession(false)`:如果会话存在则返回,否则返回`null`。 - `request.getSession(true)`:始终返回一个会话,如果不存在则创建一个新会话。 ##### Page和PageContext的区别 - **Page**:表示当前页面或请求的上下文。 - **PageContext**:提供了对页面上可用的变量和对象的访问,是JSP页面的上下文。 ##### Ajax总结 - **Asynchronous JavaScript and XML**:一种在不重新加载整个网页的情况下更新部分网页的技术。 - 使用场景:异步数据加载、动态表单验证等。 ##### JSP9大隐视对象中四个作用域的大小与作用范围 - **pageContext**:最小的作用范围,仅限于当前页面。 - **request**:当前HTTP请求的范围内有效。 - **session**:用户会话的范围内有效。 - **application**:Web应用程序的全局范围内有效。 ##### List, Set, Collection, Collections - **Collection**:接口,是所有集合类的父接口。 - **List**:有序集合,元素可以重复。 - **Set**:无序集合,元素不可重复。 - **Collections**:提供一系列静态方法来操作集合。 ##### java的基本数据类型 - 整型:byte、short、int、long - 浮点型:float、double - 字符型:char - 布尔型:boolean ##### 冒泡排序 - **算法思想**:比较相邻元素,将较大的元素往后移动。 ##### 二分查找法 - **算法思想**:在有序数组中查找特定元素,通过将搜索区间减半来提高效率。 ##### 时间类型转换 - Java中常用`SimpleDateFormat`来进行日期和时间的格式化。 ##### 阶乘 - 阶乘表示一个数的所有正整数乘积。 ##### UE和UI的区别 - **UE**:用户体验设计,关注用户的整体感受。 - **UI**:用户界面设计,关注产品的外观和交互方式。 ##### OSI七层模型 - **物理层**、**数据链路层**、**网络层**、**传输层**、**会话层**、**表示层**、**应用层**。 ##### 线程和进程的区别 - **进程**:操作系统中的独立执行单元,拥有自己的地址空间。 - **线程**:进程内的执行单元,共享进程的地址空间。 ##### jvm的内存结构 - **堆**:存放对象实例。 - **栈**:存放局部变量、方法参数等。 - **方法区**:存放类的信息、常量、静态变量等。 ##### 内存泄露和内存溢出 - **内存泄露**:已分配的内存不再使用但未释放。 - **内存溢出**:申请内存失败。 ##### 单例 - 单例模式确保一个类只有一个实例,并提供一个全局访问点。 ##### 解析xml文件的几种技术 - **DOM**:文档对象模型,将整个文档加载到内存中。 - **SAX**:简单API,逐行读取文档。 - **StAX**:流式API,用于大型文档。 ##### 项目的生命周期 - **启动**、**计划**、**执行**、**监控**、**收尾**。 ##### OSCache的判断 - **OSCache**:一种缓存机制,用于提高Web应用的性能。 ##### 经常访问的技术网站 - Stack Overflow、GitHub、MDN Web Docs等。 ##### 项目团队中交流的工具 - Slack、钉钉、企业微信等。 ##### 平时浏览的书籍 - 《Effective Java》、《Clean Code》等。 ##### javaException体系结构 - 异常分为**检查异常**(编译器强制处理)和**运行时异常**(编译器不强制处理)。 ##### session和cookie的区别 - **Cookie**:客户端保存的数据。 - **Session**:服务器端保存的数据。 ##### 字节流与字符流的区别 - **字节流**:处理二进制数据。 - **字符流**:处理文本数据。 ##### final, finally, finalize三者区别 - **final**:修饰类、方法或变量,表示最终的、不可更改的。 - **finally**:在try-catch-finally语句块中使用,确保无论是否发生异常都会执行的代码块。 - **finalize**:对象被垃圾回收前调用的方法,已过时。 ##### Io流的层次结构 - 输入流:InputStream、Reader。 - 输出流:OutputStream、Writer。 ##### JAVA - Java是一种广泛使用的高级编程语言。 ##### JavaSE、JavaEE、JavaME区别 - **JavaSE**:标准版,用于开发桌面应用。 - **JavaEE**:企业版,用于开发Web应用。 - **JavaME**:微型版,用于嵌入式系统。 ##### JDK、JRE、JVM的区别 - **JDK**:Java开发工具包,包含编译器、调试器等工具。 - **JRE**:Java运行环境,包含JVM和类库。 - **JVM**:Java虚拟机,负责解释执行字节码。 ##### 报错的状态码 - 常见状态码:200(成功)、404(未找到)、500(服务器内部错误)等。 ##### 协议以及默认的端口号 - HTTP:80 - HTTPS:443 - FTP:21 ##### 抽象类与接口的区别 - **抽象类**:可以有抽象方法和具体方法,不能实例化。 - **接口**:全部方法都是抽象的,定义了一种行为规范。 ##### 修饰符的作用 - **public**:公开的,任何地方都可以访问。 - **protected**:受保护的,同包或子类可以访问。 - **private**:私有的,只有当前类可以访问。 - **default**:默认的,仅同包可以访问。 #### 框架知识点 ##### Struts1的运行原理 - 用户请求由前端控制器拦截,通过配置文件决定将请求转发给哪个Action。 - Action调用业务逻辑层处理请求,然后返回一个结果给前端控制器。 ##### Struts2的运行原理 - 用户请求到达FilterDispatcher,由它决定请求如何处理。 - 调用相应的Action,Action执行完毕后返回结果。 ##### struts2的体系结构 - **核心组件**:Interceptor(拦截器)、Configuration(配置)、Result(结果)等。 - **扩展性**:支持多种插件和自定义组件。 ##### SpringMVC运行原理 - 用户发起请求,由DispatcherServlet接收请求并进行调度。 - HandlerMapping确定调用哪个Handler处理请求。 - ViewResolver解析视图并显示结果。 ##### Struts1.x与Struts2.x的区别 - **Struts1.x**:基于MVC设计模式,使用ActionForm存储请求参数。 - **Struts2.x**:更灵活的架构,支持更多类型的Action。 ##### SpringMVC、struts1和struts2区别 - **SpringMVC**:轻量级框架,与Spring无缝集成。 - **Struts1**:较早的MVC框架,使用ActionForm。 - **Struts2**:基于拦截器的设计模式。 ##### Struts2中result中的type类型 - **dispatcher**:转发到一个JSP页面。 - **redirect**:重定向到一个URL。 - **chain**:调用另一个Action。 ##### Struts2标签 - 提供了丰富的标签库,用于简化页面开发。 ##### SSI整合 - SSI(Server Side Includes)是一种简单的模板引擎,用于在服务器端插入文本、脚本等。 ##### SSH整合 - **SSH**:Struts + Spring + Hibernate,一种常用的Java Web开发框架组合。 - 实现了MVC模式,并提供了持久层支持。 ##### SpringMVC整合 - **SpringMVC**与Spring无缝集成,简化了Web应用的开发。 ##### Hibernate中get和load的区别 - **get**:立即加载,如果找不到对象抛出异常。 - **load**:延迟加载,如果找不到对象返回`null`。 ##### Hibernate、Ibatis、Jdbc三者的区别 - **Hibernate**:全ORM框架,简化了数据持久化操作。 - **iBatis**(MyBatis):半ORM框架,需要手动编写SQL语句。 - **JDBC**:直接使用SQL语句进行数据库操作。 ##### Hibernate的运行原理 - 通过配置文件映射实体和数据库表的关系。 - 提供了CRUD操作、事务管理等功能。 ##### Hibernate五大核心(类/接口)简述 - **SessionFactory**:创建Session的工厂。 - **Session**:与数据库交互的接口。 - **Transaction**:事务管理接口。 - **Criteria**:查询标准。 - **Query**:执行HQL或SQL语句。 ##### Hibernate与JDBC的区别 - **Hibernate**:提供了更高层次的抽象,简化了数据访问。 - **JDBC**:低层次的数据库访问API。 ##### Hibernate中的两大配置文件 - **hibernate.cfg.xml**:配置数据库连接等信息。 - **映射文件**:定义实体与数据库表之间的关系。 ##### Hibernate事务处理 - 使用`Transaction`接口进行事务管理。 ##### Hibernate的三种状态以及状态的转换 - **瞬时态**:未托管的状态。 - **持久态**:处于事务管理下的状态。 - **游离态**:从持久态转换而来,但不在事务管理下。 ##### 分页步骤 - 确定每页显示的记录数。 - 计算总页数和当前页数。 - 查询对应页的数据。 ##### hibernate缓存概述 - 一级缓存:Session级别的缓存。 - 二级缓存:SessionFactory级别的缓存。 ##### 数据库知识点 ##### JDBC连接数据库步骤(以MYSQL为例) 1. 加载JDBC驱动。 2. 获取数据库连接。 3. 创建Statement对象。 4. 执行SQL语句。 5. 关闭连接。 ##### 数据库连接池 - 提供了一组预分配的数据库连接,提高了应用性能。 ##### mysql的数据库导入导出 - 使用`mysqldump`命令导出数据库。 - 使用`mysql`命令导入数据库。 ##### jdbc分段批量提交的时候出现异常怎么处理? - 使用事务管理,确保数据的一致性。 - 对异常进行捕获和处理。 ##### jdbc批量处理数据 - 使用`PreparedStatement`的`addBatch()`和`executeBatch()`方法批量处理数据。 ##### Oracle分页 - 使用`ROWNUM`关键字进行分页。 ##### Oracle的基本数据类型 - NUMBER、VARCHAR2、DATE等。 ##### id、rowid、rownum的区别 - **id**:通常作为主键标识记录。 - **rowid**:Oracle特有的唯一标识符。 - **rownum**:按顺序为查询结果行编号。 ##### 主键和唯一索引的区别? - **主键**:用于唯一标识表中的每一行。 - **唯一索引**:可以应用于多个列,并允许空值。 ##### Preparedstatement和statement的区别 - **PreparedStatement**:预编译的SQL语句,提高性能。 - **Statement**:直接执行SQL语句。 ##### 数据库三范式 - 第一范式:消除重复的组。 - 第二范式:基于第一范式,每个非键字段完全依赖于整个键。 - 第三范式:基于第二范式,消除传递依赖。 ##### 视图概述 - 视图是从一个或多个表中派生出来的虚拟表。 ##### 存储过程概述 - 存储过程是预先编译好的一组SQL语句。 ##### 索引概述 - 索引可以加速数据检索的速度。 ##### 必背的sql语句 - SELECT、INSERT、UPDATE、DELETE等。 #### 业务场景知识点 ##### Spring的概述 - Spring是一个开源框架,提供了一整套的企业级服务解决方案。 ##### 事务概述 - 事务是数据库操作的基本工作单位,具有原子性、一致性、隔离性和持久性。 ##### 权限概述 - 系统中不同的用户角色有不同的访问权限。 ##### OSCache业务场景 - 使用OSCache可以显著提高Web应用的性能。 ##### 线程概述 - Java支持多线程编程,可以通过继承`Thread`类或实现`Runnable`接口来创建线程。 ##### Ajax请求Session超时问题 - 当Ajax请求遇到Session超时,可以通过重定向到登录页面解决。 ##### java线程池概述 - 线程池管理一组线程,提高了线程复用率。 ##### OSCache概述 - OSCache是一种用于缓存Web应用数据的技术。 ##### OSCache+autocomplete+单例业务场景 - 在使用OSCache进行数据缓存的同时,结合单例模式优化性能。 ##### 缓存概述 - 缓存可以显著提高应用的响应速度。 ##### 实现页面静态化业务场景 - 页面静态化可以减少服务器负担,提高访问速度。 ##### servlet线程安全描述 - Servlet需要确保线程安全,特别是在多线程环境中。 ##### (jbpm4)工作流引擎描述: - JBPM是一个开源的工作流引擎,用于流程管理和自动化。 ##### JPBM业务场景 - 使用JBPM可以实现业务流程的自动化。 ##### Ant描述 - Ant是一个Java库和命令行工具,用于构建和部署Java应用。 ##### FreeMarker描述 - FreeMarker是一个模板引擎,用于生成HTML等文本输出。 ##### webService描述 - Web Service是一种跨平台的服务交互方式。 ##### oracle索引概述 - Oracle中的索引可以显著提高查询性能。 ##### oracle存储过程 - 存储过程可以在数据库服务器端执行,减少网络开销。 ##### Junit业务场景 - JUnit是一个Java测试框架,用于编写和运行测试用例。 ##### Apache+Tomcat实现负载均衡及seesion复制 - 可以通过配置Apache作为反向代理实现负载均衡。 ##### Ant业务场景 - 使用Ant可以自动化构建和部署过程。 ##### maven业务场景 - Maven是一个项目管理和理解工具,用于构建和管理Java项目。
剩余58页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助