JavaWEB技术 (注:知识都来源于Java面试宝典书籍,此处只为学习)
一、Redis
1. Redis的特点
1) 定义:内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset、hash
2. 为什么redis需要所有数据放到内存中
- 通过异步的方式将数据写入磁盘,具有快速和数据持久化的特征,如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能
-
如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值
3. Redis常见的性能问题都有哪些?如何解决
- Master写入内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时性能影响较大,会间断性暂停服务,所以master最好不要写内存快照
- Master AOF 持久化,如果不重写 AOF 文件,这个持久化方式对性能的影响是最小的,但是 AOF 文件不断增大,AOF 文件过大会影响 Master 重启的恢复速度。Master 最好不要做任何持久化工作,包括内存快照和 AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个 Slave 开启 AOF 备份数据,策略为每秒同步一次
- Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象
- Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内
4. Redis最适合的场景有哪些
- 会话缓存
- 全页缓存
- 队列
-
排行榜/计数器
-
发布/订阅
5. 使用
https://blog.csdn.net/xsyl08/article/details/78773760 作者:魂棠
二、消息队列ActiveMQ
定义:是Apache下的一个子项目。类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。
1. 如何使用ActiveMQ解决分布式事务
1) 通常注册时
- 收集用户录入信息,保存到数据库
- 向用户的手机或邮箱发送验证码
2) 如何实现
集中式架构实现
- 开启一个事务,往本地数据库插入一条用户数据
- 发送验证码,提交事务
分布式架构(用户和发送验证码是两个独立的服务,它们都有各自的数据库,就不能通过本地事务保证操作的原子性,就需要使用ActiveMQ实现需求)
-
在用户进行注册操作的时候,我们为该操作创建一条消息,当用户信息保存成功时,把这条消息发送到消息队列。验证码系统会监听消息,一旦接受到消息,就会给该用户发送验证码
2. ActiveMQ如果消息发送失败,如何解决
ActiveMQ有两种通信方式
- 点到点形式:如果消息发送不成功此消息默认会保存到activemq服务端知道有消费者将其消费,所以此时消息是不会丢失的
- 发布订阅模式:默认情况下只通知一次,如果接收不到此消息就没有了
三. Dubbo(不管)
四、测试并发方式:可以使用apache提供的ab工具测试
五、Nginx
1. Nginx反向代理为什么能够提升服务器性能
- 对于动态服务来说,例如java、php--这些服务器IO处理能力往往不高
- Nginx会把Request在读取完整之前buffer(缓存)住,这样交给后端的HTTP请求,从而提高后端的效率
2. Ngnix和Apache
Ngnix优点
- Ngnix是轻量级,较apache占用更少的内存及资源,也能起web服务
- 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能
- 高度模块化的设计,编写模块相对简单
- 社区活跃,各种高性能模块出品迅速
Apache优点
- rewrite,比nginx的rewrite强大
- 模块超多,基本想到的都可以找到
- 少bug,nginx的bug相对较多
- 超稳定,一般来说,需要性能的web服务,用nginx。如果不需要性能只求稳定,那就apache
3. Nginx多线程模型是如何实现高并发
- 进程数与并发数不存在直接关系。如果一个server采用一个进程负责一个request方式,那么进程数就是并发数
- 很多进程在等待,等待最多的是等待网络传输
六、Zookeeper(不管)
七、solor
基于lucene更为丰富的全局搜索技术
1. solor中IK分词器的原理是什么
Ik分词器的分词原理本质上是词典分词。先在内存中初始化一个词典,然后在分词过程中挨个读取字符,和字典中的字符相匹配,把文档中的所有的词语拆分出来的过程
八、webservice
1. 定义
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上