1. 数据库
1.1 产品
关系型:Mysql、Oracle、SqlServer、DB2。。。
非关系型:Redis、ES…
1.2 SQL的优化
参考帖子:https://blog.csdn.net/u012932876/article/details/117359992
1,用字段名代替*
2,where里尽量不要用or
3,在做表设计时,尽量用varchar代替char
4,观察SQL的执行性能,使用关键字explain,目的就是观察SQL有没有使用索引
5,做模糊查询时,尽量确定开始的元素 where name like ‘a%’
1.3 数据库的优化
索引:好处就是可以提高查询效率,坏处是本身索引就是一张表占内存,更新数据也比较难。
索引设计的原则:如果经常按照固定的列查询,最好就给这个列加索引
select * from student where name=??? #使用索引
alter table student add index 索引名(name) #创建索引
视图:本质上就是一张表,把查询结果缓存起来。
create view studentView as select * from student where name=??? #创建视图
select * from studentView #使用视图
分库分表分桶、、、、
2. 框架
SpringMVC:接受请求@RestController/@RequestMapping 和处理响应(给客户端响应JSON串)
SpringMVC的工作原理:五个组件
DispathcherServlet:前端控制器,接受请求,分发请求
HandlerMapping:处理器映射器,根据url找到干活的Controller和方法
HandlerAdaptor:处理器适配器,就是干活的。Controller<->Serice<->Dao<->DB
ViewResolver:视图解析器,解析响应的数据
View:渲染视图,在页面上刷新数据
Spring :粘合剂,核心功能:IOC 、 DI、 AOP
IOC :控制反转,把创建对象都叫给spring框架,对象默认都是单例的(单例设计模式&工厂设计模式)
@Component
class Car{}
Class.forName(“cn.tedu.pojo.Car”).newInstance(); //IOC的核心,框架底层都是反射
DI:依赖注入,把两个对象set
new Teacher();
new Student();
@Autowired
new Student().setTeacher(new Teacher());//DI的核心,维护了两个对象的关系
AOP:面向切面编程,松耦合,核心业务和切面分开
切面
切点
连接点
通知
2.2 Mybatis:操作数据库,封装了JDBC,自动ORM
原理:
#和$取值的区别:
$只取值本身,没有拼串的功能 where name=jack ,底层使用Statement工具类不安全,可能发生SQL注入攻击问题,低效
#可以自动拼接双引号,where name=“jack”,底层使用PreparedStatement工具类安全,安全,高效
resultType和resultMap的区别:
ORM:是指对象关系映射。是指从表里获取字段的值 自动 交给类里的属性 保存
resultType:只能完成简单的ORM,如果字段名字 和 属性的名字一致
resultMap:只能完成复杂的ORM,如果字段名字 和 属性的名字不一致,需要单独处理
Mybatis的缓存机制:一级缓存,二级缓存,使用LRU算法
设计到的设计模式:工厂模式,代理模式,单例模式…
3. 前端
Vue的组件,渐进式,路由。。。。
JS的原生写法
4. 面试题
框架:原理、源码
专业术语:OOM / RPC / OCP / ORM / NIO …