1.Redis在项目中的使用场景

数据类型 使用场景
String 比如说,我想知道什么时候封锁一个IP地址 Incrby 命令
Hash 存储用户信息 【ID,name,age】 Hset (key field value )
List 实现最新消息的排行 、 利用List的push命令,将任务存在list集合 ,同时使用另一个命令,将任务从集合中取出 pop --可以模拟消息队列【电商中的秒杀】
Set 可以自动排重。比如在微博中将每个人的好友存在集合中(Set), 这样求两个人的共同好友,只需要求交集即可
Zset 以某个条件为权重,进行排序 如:商品价格排序

2.消息队列在项目中的使用

背景:在分布式系统中是如何处理高并发的。
由于在高并发的环境下,来不及同步处理用户发送的请求,则会导致请求发生阻塞。
比如说,大量的insert、update之类的请求同时到达数据库MYSQL,直接导致数据·的行锁表锁,甚至会导致请求堆积很多,从而触发大量的连接错误。使用消息对列可以解决
【异步通信】

3.JVM垃圾回收机制,GC发生在JVM哪部分,有几种GC,它们的算法是什么?

首先GC肯定在堆里、
次数上频繁收集Young区(Minor GC)
次数上较少收集Old区(Full GC)
j基本不动Perm区
GC算法:
1.引用计数法(JVM一般不采用这个方式)
缺点:
1.每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗。
2.较难处理循环引用
2.复制算法
年轻代中使用的是Minor GC 这种GC算法采用的是复制算法
缺点:需要双倍空间
优点:效率高没有内存碎片
3.标记清除
老年代一般是由标记清除或者是标记清除与标记整理混合使用
优点:不需要额外空间
缺点:两次扫描,耗时严重
会产生内存碎片
4.标记压缩
老年代一般是由标记清除或者是标记清除与标记整理混合使用
优点:没有内存碎片,可以利用bump
缺点:需要移动对象的成本
5.标记清除压缩

4.mysql在什么时候建立索引

哪些情况需要建立索引 哪些情况不需要建立索引
主键自动建立唯一索引 表记录太少
频繁作为查询条件的字段应该建立索引 经常增删改的表或字段
查询中与其它表关联的字段,外键关系建立索引 where条件里用不到的字段不建立索引
单键/组合索引的选择问题,组合 索引的 性价比高 过滤性不好的不适合建立索引
查询中排序的字段,排序字段若通过索引去访问将大大提高排序的速度
查询中统计或者分组字段

5.Redis持久化有几种类型,他们的区别

RDB
优点:节省磁盘空间,恢复速度快。
缺点:当数据量大时比较消耗性能
AOF(以日志的形式来记录每个写操作,只许追加文件,但不可以改写文件)
优点:备份机制更稳定,丢失数据概率更低
可读的日志文本,通过操作AOF稳健,可以处理误操作。
缺点:比起RDB占用更多的磁盘空间
恢复备份速度要慢
存在个别BUG,造成恢复不能
每次读写都同步的话,有一定的性能压力

6.简单谈一下SprinMVC的工作流程

我们都知道它在处理模型数据有两种方式
方式一:将方法返回值设置为ModelAndView
方式二:方法返回值仍是String类型,在方法的入参中传入Map,Model或者ModelMap
步骤:
1.发送请求
2.DispatcherServlet(中央控制器) 调用处理器映射器找到处理器—>HandlerMapping(处理器映射器)
3.返回HandlerExecutionChain(HandlerIntercepter处理器拦截器 Handler处理器对象)
4.通过处理器适配器调用具体的处理器

JavaWeb常考面试题(找工作必看)

相关文章: