框架面试笔试问答题.docx
需积分: 0 18 浏览量
更新于2019-05-19
收藏 15KB DOCX 举报
### 框架面试笔试问答题知识点概览
#### 1. 应用服务器有哪些?
- **Apache Tomcat**:一款轻量级的Java应用服务器,适用于开发和部署Web应用程序。
- **JBoss/WildFly**:开源的Java EE应用服务器,支持EJB容器、JMS、事务管理等高级功能。
- **IBM WebSphere**:企业级Java EE应用服务器,提供了高度可扩展性和强大的管理工具。
- **Oracle WebLogic Server**:高性能的企业级应用服务器,支持集群、负载均衡等功能。
#### 2. 数据连接池的工作机制
- **连接池**是一种用于存储数据库连接的机制,目的是提高数据库访问效率和减少数据库连接创建和销毁的开销。
- **连接池管理器**负责创建一定数量的数据库连接并存储起来,当应用请求连接时,从池中获取一个空闲连接供应用使用;当应用使用完毕后,将连接归还到连接池中,而不是关闭连接。
- **工作原理**主要包括连接的创建、分配、回收和销毁四个主要阶段。
#### 3. Hibernate工作原理
- **Hibernate**是一个全栈的ORM框架,用于简化Java应用与数据库之间的交互。
- **核心机制**包括Session、SessionFactory、Transaction等,其中SessionFactory是配置和创建Session的工厂,Session用于执行CRUD操作。
- **持久化状态**包括瞬时态、持久态和脱管态,这些状态转换由Hibernate管理。
#### 4. Hibernate的查询方式
- **HQL(Hibernate Query Language)**:面向对象的查询语言,类似于SQL,但更侧重于面向对象的操作。
- **Criteria API**:提供了一种面向接口的方式构建查询条件,更加灵活。
- **Native SQL**:直接使用SQL语句进行查询,适用于复杂的查询场景。
- **Query by Example**:通过构造实例来指定查询条件。
#### 5. Struts2的工作原理
- **Struts2**是一个基于MVC模式的Web框架,使用Action作为控制器组件处理用户请求。
- **拦截器**是Struts2的核心机制之一,负责预处理请求和后处理响应。
- **配置文件**通常使用struts.xml文件进行配置,定义了Action的映射关系、拦截器等。
#### 6. Spring的AOP和IOC的实现原理
- **IOC(Inversion of Control,控制反转)**:Spring通过依赖注入(DI)实现IOC,使得对象不再需要自己创建和查找依赖的对象,而是由Spring容器统一管理对象的生命周期。
- **AOP(Aspect Oriented Programming,面向切面编程)**:Spring AOP允许开发者定义“切面”来封装横切关注点,如日志记录、事务管理等。通过声明式方法在运行时动态地将这些关注点插入到程序的多个位置。
#### 7. JDBC查询过程与Hibernate/iBatis的区别
- **JDBC**:Java Database Connectivity,Java标准库的一部分,提供了一组用于执行SQL语句的API。
- **Hibernate**:全栈的ORM框架,支持HQL等多种查询方式,能够自动映射Java对象和数据库表。
- **iBatis/MyBatis**:半自动ORM框架,需要手动编写SQL语句,但可以自定义SQL语句的灵活性更高。
#### 8. Spring整合myBatis的主要过程
- **配置数据源**:通常使用Druid或C3P0等数据连接池。
- **配置SqlSessionFactory**:通过SqlSessionFactoryBean来配置,指定数据源和Mapper接口的位置。
- **编写Mapper接口**:定义SQL语句的接口方法,由MyBatis框架自动解析执行。
- **编写Service层**:调用Mapper接口提供的方法完成业务逻辑处理。
#### 9. 实现图片上传/文件下载/分页的方法
- **图片上传**:前端页面使用`<input type="file">`控件选择图片,后端使用Servlet接收文件并保存到服务器。
- **文件下载**:通过读取服务器上的文件流,使用`response.getOutputStream()`发送给客户端。
- **分页**:使用`PageHelper`插件对SQL语句进行分页处理,或者在Service层手动实现分页逻辑。
#### 10. Spring框架的作用
- **统一管理对象的生命周期**:通过依赖注入(DI)实现对象的自动装配。
- **提供AOP支持**:支持面向切面编程,方便地实现日志记录、性能监控等功能。
- **简化配置**:提供多种配置方式,如XML配置、注解配置等。
#### 11. DAO层的作用
- **Data Access Object**(DAO)层:负责数据访问操作,如增删改查等。
- **职责**:实现对数据源(通常是数据库)的具体访问逻辑,将业务层与数据源隔离。
#### 12. 分层的意义
- **分层设计**:将应用程序划分为多个逻辑层次,每一层都有明确的职责。
- **意义**:提高了系统的可维护性、可扩展性和可测试性。
#### 13. Spring与SpringMVC的区别
- **Spring**:是一个全面的框架,提供了依赖注入、AOP等功能。
- **SpringMVC**:是Spring框架的一个模块,专注于Web应用的开发,提供了MVC架构的支持。
#### 14. Hibernate、Mybatis、JDBC的区别
- **JDBC**:直接使用SQL语句进行数据库操作,适合简单的CRUD操作。
- **Hibernate**:全栈的ORM框架,支持面向对象的查询语言(HQL),适合复杂的业务逻辑。
- **MyBatis**:半自动ORM框架,提供SQL映射支持,适用于需要手工编写SQL语句的场景。
#### 15. 事务的概念与作用
- **事务**:一组操作的集合,要么全部成功,要么全部失败。
- **作用**:确保数据的一致性和完整性,常用于处理涉及多个表或数据库的更新操作。
#### 16. MyBatis中#{…}的区别
- **#{}**:预编译参数,可以有效防止SQL注入攻击。
- **${…}**:字符串拼接,可能会导致SQL注入攻击。
#### 17. ORM框架比较
- **Hibernate**:全栈的ORM框架,支持面向对象的查询语言(HQL)。
- **MyBatis**:半自动ORM框架,提供SQL映射支持,适用于需要手工编写SQL语句的场景。
- **JPA**:Java Persistence API,是Java EE平台提供的标准ORM解决方案。
#### 18. SpringMVC的注解
- **@Controller**:标记为控制器类。
- **@RequestMapping**:用于映射HTTP请求到特定的方法上。
- **@RequestParam**:用于绑定请求参数。
- **@PathVariable**:用于绑定URL路径变量。
- **@ModelAttribute**:用于将模型对象绑定到请求中。
#### 19. @Resource与@Autowired的区别
- **@Autowired**:根据类型匹配bean,主要用于注入依赖。
- **@Resource**:可以根据名称也可以根据类型匹配bean,提供了更多的灵活性。
#### 20. WEB应用的安全性泄露及其防止方法
- **SQL注入**:使用预编译语句或ORM框架避免。
- **XSS攻击**:对用户输入的数据进行转义或过滤。
- **CSRF攻击**:使用Token验证或双重验证机制。
#### 21. SpringMVC的执行流程
1. 用户向服务器发送请求。
2. DispatcherServlet接收请求并委托给HandlerMapping。
3. HandlerMapping找到合适的Handler执行。
4. Handler执行完成后返回ModelAndView。
5. ViewResolver根据ModelAndView中的View信息找到对应的视图。
6. 视图渲染完成后返回给用户。
#### 22. SSM框架中事务的实现
- **使用@Transactional注解**:标记在需要进行事务管理的方法上。
- **配置数据源**:通常使用DataSource进行配置。
- **配置事务管理器**:通过PlatformTransactionManager接口实现。
#### 23. MyBatis批量插入代码
```java
List<Map<String, Object>> list = new ArrayList<>();
// 填充list
sqlSession.insert("com.example.mapper.UserMapper.batchInsert", list);
```
#### 24. Spring中定时任务的使用
- **@Scheduled**:用于标注在需要定时执行的方法上。
- **cron表达式**:定义任务执行的时间规则。
#### 25. Spring AOP注解
- **@Aspect**:定义一个切面。
- **@Before**:在目标方法之前执行通知。
- **@After**:在目标方法之后执行通知。
- **@Around**:环绕通知,可以在方法前后执行。
#### 26. 避免SQL注入的方法
- **使用预编译语句**:通过PreparedStatement代替Statement。
- **使用ORM框架**:如Hibernate、MyBatis等自动处理SQL注入问题。
#### 27. 日志级别
- **TRACE**:最细粒度的信息事件。
- **DEBUG**:调试信息。
- **INFO**:一般的信息事件。
- **WARN**:潜在的错误情况。
- **ERROR**:由于应用程序错误导致的失败。
#### 28. Maven的作用与区别
- **Maven**:是一个项目管理和构建工具,提供了统一的项目结构、依赖管理和构建过程。
- **区别**:Maven项目使用pom.xml文件管理依赖和构建过程,而普通项目可能需要手动管理依赖和构建脚本。
#### 29. SpringMVC的重要注解及其作用
- **@Controller**:表示该类是控制器。
- **@RestController**:结合@Controller和@ResponseBody,用于返回JSON或XML格式的数据。
- **@RequestMapping**:用于映射HTTP请求到特定的方法。
- **@GetMapping/@PostMapping**:分别用于映射GET和POST请求。
- **@ResponseBody**:用于将方法返回值直接写入HTTP响应体。
#### 30. MyBatis实现一对多的方式
- **嵌套结果**:通过resultMap的association和collection标签配置一对多关系。
- **嵌套查询**:通过select属性指定子查询的ID,实现延迟加载。
- **联合查询**:在一个SQL语句中同时查询主表和从表,适用于查询频繁且数据量不大的场景。