javaSE
javaEE
1、SpringMVC的执行流程
行流程
1、用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。
2、SpringMVC中解决前端post请求和get请求中文乱码问题
1、post请求:在web.xml文件中配置一个 CharacterEncodingFilter过滤器,并配置对应的encoding属性值为utf-8 ,以及响应的forceEncoding属性为true;
2、get请求:修改tomcat的配置文件server.xml中 connecter 标签下的URIEncoding=“utf-8”。
3、单点登录流程
一处登录,多处利用(分布式系统) 检查cookie中的token信息
4、商城购物车
- 添加购物车(商品信息存放)
1、用户未登录
redis----JD
cookie----自己开发的项目
2、用户已登录
redis缓存
Hset存储数据,hset(key,filed,value)
key: user_userId_cart
filed: skuid(商品id)
key: value(商品信息)
关系型数据库(orcal、mysql),防止对应服务挂机数据丢失 - 展示购物车
1、用户未登录
直接从redis/cookie中获取数据
2、用户已登录
必须显示数据库中的记录+redis的记录
4、消息队列
分布式系统中利用消息队列(异步通信)处理高并发请求
- 弊端
消息的不确定性:延迟队列,轮训的技术解决
MyBatis/MyBatis Plus
1、mybatis实体类中的属性与前端表格不一样
1、写sql语句时起别名;
2、在mybatis的全局配置文件(mybatis-config.xml)开启驼峰命名规则(可以将last_name 映射为lastName);
3、在mapper映射文件中使用resultMap来自定义映射文件
Linux 相关命令
1、常用服务类相关命令
- Centos6
service 服务名 start/ stop/ restart/ reload/ status
开启自启动
chkconfig --list|grep xxx (查看服务)
chkconfig --level 3/5 服务名 on - Centos7
systemctl start/ stop/ restart/ reload/ status 服务名
开启/关闭 自启动
systemctl enable/disable 服务名
git命令
1、分支
- 创建分支
1、git branch <分支名>
2、git branch -v 查看分支 - 切换分支
1、git checkout <分支名>
2、git checkout -b <分支名> (常用,创建+切换) - 合并分支
step1:git checkout master 切换到主干
step2 :git merge <分支名>
example:将b分支合并到a分支上:
git checkout a; git merge b;
- 删除分支
step1:切换到主干 git checkout master
step2:git branch -D <分支名>
example: 删除b分支
git checkout a; git branch -D b;
Redis
1、redis持久化
- rdb
全量恢复(存储数据快照)。数据恢复速度快,但是数据庞大是比较消耗内存 - AOF
增量恢复(存储数据修改命令)。数备份稳定,丢失数据概率地,但是恢复熟读慢,比RDB占用更多的磁盘空间
2、redis的使用场景
数据类型 | 使用场景 |
---|---|
String | 何时封锁一个ip地址 |
Hash | 存储用户信息[id,name] Hset(key,filed,value) Hset(user,id,101) Hset(user,name,admin) |
List | 实现最新消息的排行,模拟消息队列(push/pop命令)如电商中的秒杀 |
Set | 查重。微博中将每个人的好友存集合中(一个人不能加另一个人两次),求两个人的好友的交集 |
Zset | 可以以某一个条件进行排序。JD中商品以某一种要求排名 |
Mysql
1、mysql什么时候适合建立索引
1、主键自动建立索引;
2、频繁查询的条件建立索引
3、联合索引比单列性价比高
JVM
1、jvm垃圾回收机制
ElasticSearch
1、ElasticSearch与solr的区别
- 同
1、均是基于分词技术构建的倒排索引的方式进行查询
2、都是基于java开发 - 异solr(2002),ES(2010)功能更强大
1、当建立索引时,solr会产生IO阻塞,ES不会
2、在不断增加数据时,solr的检索效率会降低,ES不会
3、solr利用Zookeeper进行分布式管理,ES自带
4、solr一般部署到web服务器上(tomcat)<动态web工程>
5、solr支持更多的格式数据(xml,json,csv),ES只支持json