Struts2(面试率较低 非面试重点)
1. struts2 和 springmvc 的区别?
a. Action , Controller
Action 中每一个请求都会创建一个新的对象(Servlet只创建一个对象)
Why?假定可以公用,属性就会混乱
Controller 是可以单实例,也可以多实例,默认为单实例的 由@Scope("prototype")决定
b. 收集数据的区别
Struts2 是由成员变量收参
springMVC 是方法的 参数绑定的
c.传递数据(存储数据)
struts2 值栈 ValueStack
springMVC ModeAndView
d. 前(预处理)控制器
struts2 StrutsProparedAndExecuteFilter
springMVC DispatcherServlet
2. 为什么需要值栈(ValueStack)?
目的:与视图层解耦合 (JSP FreeMarker)
3. 拦截器 (实现 Interceptor 接口)
本质上 为动态代理技术 生成代理类 ActionProxy
mybatis
1. MyBatis 地位
mybatis 是一个访问操作数据库的框架,专注于对数据库的CRUD操作。
编程应用在DAO层,底层封装的是JDBC
2. MyBatis 中默认使用的是 JDBC 中的 PreparedStatement
3. Mapper 文件中 # 和 $ 的区别?
# 操作符 主要应用于 替换 PreparedStatement 中的?
$ 操作符 主要应用于 进行字符串的拼接 例:排序时的顺序 order by 之后不能加?
4. 提高查询效率 Cache缓存 或 EhCache Redis
a. Cache 只应用在查询中 MyBatis中不允许在查询中加事务 ,关闭session
b. 增删改操作时 事务提交时 会清空缓存
5. MyBatis 与 Spring 的整合
a. DataSource
b. SqlSessionFactoryBean ==> SqlSession
c. MapperScannerConfigure 封装 UserDao userDao = sqlSession.getMapper(UserDao.class);
spring
1. IOC (Inverse of Control)控制反转
概念:由 Spring 的工厂 负责创建对象,并对对象的成员变量进行赋值
好处:解耦合
底层实现:工厂设计模式
2. AOP (Aspect Oriented Programe) 面向切面编程
概念:本质就是 Spring 的动态代理开发,通过代理类为目标类增加额外功能
好处:利于目标类的维护
底层实现:动态代理实现
3. 动态代理的底层实现
Spring
JDK 基于接口做代理(反射)
Proxy.proxyNewInstance();
Cglib 基于父类做代理
Enhance
4. spring 封装了很多的设计模式
a. 工厂 创建对象 解耦合
b. 代理 为原始对象增加额外功能 利于维护
c. 模板 Spring + MyBatis 整合
d. 策略 UserService{private UserDao userDao}
e. 单例模式
f. 装饰器设计模式 java IO 过滤流
g. 适配器 Servlet 不实现Servlet 接口 ,extends HttpServlet
5. MyBatis 与 Spring 的整合 上
6. Spring 中的事务
a. 开发步骤
1. 原始对象 目标对象 Service
2. DataSourceTransactionManager TransactionAttributes
3. 切入点
4. 切面
b. 事务属性
PROPAGATION: 传播属性 解决的是事务的嵌套的问题
_REQUIRED CUD
1. 外部没有事务 开启新的
2. 外部有事务 则融合到外部事务中
_SUPPORTS R
1. 外部没有事务 不开启事务
2. 外部有事务 则融合到外部事务中
7. 自己写一个Spring
a. 工厂设计 反射创建对象
b. 配置文件
总体思路:通过读取配置文件获得相关信息,最终通过反射进行对象的创建。
springmvc
1. 百度SpringMVC的实现原理
2. Struts2 与 SpringMVC 的区别(上)
3. Spring 中如何响应JSON数据类型
@ResponseBody
@RestController
4. ModeAndView 的作用?
目的:与视图层解耦合(JSP FreeMarker)
5. SpringMVC运行效率和开发效率都高于Struts2
6. Spring 控制器 是单实例 还是 多实例(上)
7. SpringMVC 如何接收 Client 的请求参数?
通过参数绑定的方式
springboot
为什么用SpringBoot?
提高开发效率,对于大量的spring的配置文件 进行了简化 和 封装。
Redis
1. Redis 持久化
RDB 记录某一刻的数据镜像
会丢数据(一个时间段)
AOF 记录用户的写日志
也会丢数据(只是当前这个时刻的写操作数据 有可能丢失)
AOF 和 RDB 同时配置时,AOF生效
2. Redis 会 配合Mybatis 进行缓存 ,提高查询效率
3. Redis 会管理分布式架构中的session
Linux
面试时:熟练使用 linux 的常用指令
1. linux中日志不会在控制台中输出,会在日志文件中输出
tail 命令用于文件 的倒看
2. 如何查看 服务器的运行状态
top 命令 主要在开发时去看
上线的项目 一般都会有服务器的监控平台,以报表的形式展示cpu、jvm等的状态
3. 查看进程
ps -ef | grep xxx
ps -aux | grep xxx
4. 阿里云 可以在简历中写服务器部署于阿里云中 提高含金量
MySql的项目实战优化
1. 当使用到数字类型时 尽量使用 mediumint、smallint 和 tinyint 如果非负数最好加入UNSIGNED
tinyint -128 - 127
tinyint unsigned 0 - 255
smallint -32768 - 32767
smallint unsigned 0 - 65535
mediumint -8388608 - 8388607
mediumint unsigned 0 - 16777215
2. VARCHAR的长度只分配真正需要的空间
3.尽量使用TIMESTAMP而非DATETIME
4.单表不要有太多字段,建议在20以内
5.避免使用NULL字段,很难查询优化且占用额外索引空间
6.不做列运算查询 如 SELECT id WHERE age + 1 = 10,任何对列的操作都将导致表扫描,
它包括数据库教程函数、计算表达式等等,查询时要尽可能将操作移至等号右边
7.不用SELECT * 查询
8.少用JOIN
9.尽量避免在WHERE子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描
10.列表数据不要拿全表,要使用LIMIT来分页,每页数量也不要太大