java开源框架、Linux相关

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来分页,每页数量也不要太大

猜你喜欢

转载自blog.csdn.net/qq_41047055/article/details/84292075