人事面试不做整理,正常沟通就行!
技术面试的一些问题整理出来了,希望可以帮到最近面试找工作的小伙伴!
1.之前开发中主要使用 Spring 的什么技术 ?
①. IOC 容器管理各层的组件
②. 使用 AOP 配置声明式事务
③. 整合其他框架.
2.简述 AOP 和 IOC 概念
AOP: Aspect Oriented Program, 面向(方面)切面的编程;
Filter(过滤器)也是一种 AOP.
AOP 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充.
AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点.
IOC: Invert Of Control, 控制反转. 也成为 DI(依赖注入)
其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源.
作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件,
组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式
3. IOC 容器对 Bean 的生命周期:
①. 通过构造器或工厂方法创建 Bean 实例
②. 为 Bean 的属性设置值和对其他 Bean 的引用
③. 将 Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法
④. 调用 Bean 的初始化方法(init-method)
⑤. 将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法
⑥. Bean 可以使用了
⑦. 当容器关闭时, 调用 Bean 的销毁方法(destroy-method)
4. load()和get()的区别
①:如果数据库中,没有 OID 指定的对象。通过 get方法加载,则返回的是一个null;通过load加载,则返回一个代理对象,
如果后面代码如果调用对象的某个属性会抛出异常:org.hibernate.ObjectNotFoundException;
②:load 支持延迟加载,get 不支持延迟加载。
5.hibernate 优缺点
①. 优点:
> 对 JDBC 访问数据库的代码做了封装,简化了数据访问层繁琐的重复性代码
> 映射的灵活性, 它支持各种关系数据库, 从一对一到多对多的各种复杂关系.
> 非侵入性、移植性会好
> 缓存机制: 提供一级缓存和二级缓存
②. 缺点:
> 无法对 SQL 进行优化
> 框架中使用 ORM 原则, 导致配置过于复杂
> 执行效率和原生的 JDBC 相比偏差: 特别是在批量数据处理的时候
> 不支持批量修改、删除
6.Struts2 中的默认包 struts-default 有什么作用?
①. struts-default 包是 struts2 内置的,它定义了 struts2 内部的众多拦截器和 Result 类型,
而 Struts2 很多核心的功能都是通过这些内置的拦截器实现,
如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。
当包继承了struts-default包才能使用struts2为我们提供的这些功能。
②. struts-default 包是在 struts-default.xml 中定义,struts-default.xml 也是 Struts2 默认配置文件。
Struts2 每次都会自动加载 struts-default.xml文件。
③. 通常每个包都应该继承 struts-default 包。
7.具体问题:
①. 简述下你的项目.
I. 整体介绍,大致说明下项目所实现的功能、多少人、用了多少时间、什么技术、什么数据库
CRM 项目 - 客户关系管理系统。
3 个人做了 1 年。50 个人月。 30 个人月左右
SpringMVC、Spring、Shiro、Oracle
II. 介绍自己实现了哪些功能模块
主要负责 "系统权限管理" 和 "营销管理" 模块.
②. 项目有什么亮点 ?
I. 全程注解
II. SpringMVC 对比 Struts2 使用注解开发更便捷。而且在处理 Aajx, 文件上传、下载也更方便
III. 使用 Shiro 处理权限部分。相对于之前使用的 SpringSecurity 更容易上手。且配置也方便。而且支持方法级别的权限。
IV. 使用 Spring Data 做数据库层,提高了开发效率。
③. 项目中遇到困难,怎么办 ?
I. 如果是业务问题:问同事 -> 问项目经理, 由项目经理解决 -> 有时候也直接和产品经理沟通.
II. 技术问题:自己解决:Debug 测试, 查看部分源代码 -> 百度、Google -> 问技术较好的同事 -> 项目经理 -> 把问题记录下来,有时间整理
④. 项目用到了哪些技术 ? 或者说用到了哪些框架 ?
SpringMVC、Spring、JPA & SpringDATA、Shiro、Quartz、jQuery
⑤. 在该项目中有哪些提高或思考(不仅是技术上可能也包括团队上) ?
I. 新技术的引入:第一次使用 SpringMVC 和 Shiro。相比 Struts2 和 SpringSecurity 更轻量级,使用也更顺手。
虽然开始时不是很适应。所以不能排斥新技术
II. 感觉时间安排的还不是很好。后期项目周期比较急,所以在和产品团队的沟通上有些问题。(因为需求总会发生修改)
⑥. 你在项目中的角色 ? 或者说你都做了什么 ?
I. 研发、测试、新技术问题的汇总和解决。