版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1、说说springmvc的执行流程
- 客户端发起请求request
- 前端控制器DispatcherServlet接收到request,请求处理器映射器HandlerMapping查找Handler
- HandlerMapping根据url查找到对应的Handler,返回一个执行链给DispatcherServlet
- DispatcherServlet拿到执行链后请求处理器适配器HandlerAdapter处理执行
- HandlerAdapter执行相应的Handler。
- Handler(平时也称为Controller)内部运行完毕后返回一个ModelAndView给HandlerAdapter
- HandlerAdapter又将ModelAndView返回给DispatcherServlet
- DispatcherServlet请求视图解析器VR进行视图解析
- VR解析完返回一个View(jsp、freemaker…)给前端控制器
- DispatcherServlet对视图进行渲染,将模型数据填充到request域
- 返回response给客户端。
2、Mysql存储引擎的区别(InnoDb和MyISAM)
- MyISAM不支持外键,InnoDb支持外键
- MyISAM不支持事务,InnoDb支持事务
- MyISAM对数据的操作使用表锁(读数据加S锁,写数据加X锁),即使是操作一条数据也会对整张表进行锁定,故其不适合高并发的操作;InnoDb对数据的操作使用的是行锁,操作是只锁定某一行,不影响其他行的操作,适合高并发的操作。
- MyISAM只缓存索引,不缓存真实数据,对内存的要求较低;InnoDb不仅缓存索引还缓存数据,所以对内存的要求较高,而且内存大小对性能有决定性的影响。
- MyISAM的表空间小(由三个文件构成:索引文件,表结构文件,数据文件,可以存放在不同目录);InnoDb表空间大,若使用共享表空间,其存储空间大小不受系统的限制(有的系统限制文件最大为2GB),最大为64TB,若使用独占表空间,大小会受到系统的限制
- MyISAM使用非聚集索引,其索引的data域存放的是数据的物理地址,故其具有较高的插入、查询性能;InnoDb使用聚集索引,key为表主键,辅索引的data域存放的是主键,故使用辅索引查找数据最后是通过主索引找到数据的,写入数据时索引需要维持B+树结构,性能没有MyISAM好。
- 、MyISAM关注性能;InnoDb关注事务
详细参考:https://blog.csdn.net/keil_wang/article/details/88392433
3、线程间为什么要进行通信?
cpu是随机进行线程的,但是有些时候我们希望cpu按照我们的规律执行线程,所以需要线程间进行通信。
线程间通信的几种方式和常见场景:
- 使用休眠唤醒机制:
Object的wait()、notify()、notifyAll()
Condition的await(),signl(),signlAll() - CountDownLatch门栓机制,适用于一个线程的执行需要等待另外几个线程执行后才执行。
- CycicBariier栅栏机制,适用于等待某个条件,全部线程一起执行,如赛跑比赛中所有运动员都要等待信号枪。
- Semaphore,适用于控制访问资源,如三台机器8个工人,只有获取到机器资源的工人才能进行操作,操作结束后释放资源。