02-知识点
一.ElasticSearch
elasticSearch 和 mysql的对比
elasticSearch
mysql
索引index
相当于 数据库db
类型type
相当于 表
文档document
相当于 表的一条记录row
分词器:中文分词器(IK)
二.elasticsearch-head
elasticsearch-head是一个node的项目,运行之后可以以图形化界面显示连接的es的
索引、类型、文档、以及健康状态
三.Logstash
可用于同步数据库中的数据到elasticsearch
可以定时执行脚本从mysql中读取数据,同步到elasticsearch中或输出到控制台
定时支持corn脚本
在logstash的bin目录下执行脚本:logstash -f 脚本.conf
也可以自己代码实现,然后用定时器执行
四.RabbitMQ 消息中间件
消息中间件的应用场景:异步处理、应用解耦、流量削锋
异步处理:发送邮件、发送短信
应用解耦
流量削锋
RabbitMQ是Erlang语言开发的
ActiveMQ 和 RabbitMQ对比
ActiveMQ
RabbitMQ
JMS规范的实现
AMQP协议的实现
五.加密
可逆不可逆分类
可逆:
不可逆:md5、BCrypt 应用场景:密码
六.项目中常见的4中认证方式
七.mysql数据库的引擎的区别
innodb:支持事物,默认行级锁,InnoDB是MySQL默认的存储引擎
MyISAM:默认表级锁,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作
八.悲观锁和乐观锁
1.悲观锁:比较悲观的认为我在操作一共享数据时,别的线程也会去修改,所以一上来就加锁。实现有:synchronized
2.乐观锁:比较乐观的认为我在操作一共享数据时,别的线程不会去修改,所以不用一上来加锁。
一般会在操作之前读取下数据的值,在真正修改好要提交的时候再去查询下该数据是否还是原来的值,
如果不是就不提交,因为这期间有人修改了。如果是才提交。这里有一个问题,再次查询的时候数据和
原来数据一致也不能说明这期间就没有别的线程修改过,也可能是先修改为另一个值再改为原来的值,这就是ABA的问题。
所以一般乐观锁在数据库的实现是新添加一个version字段,每次修改都加1 。
准备提交数据前后version都一致,说明没有别的线程改动过,可以提交,并且将version+1;
如果准备提交后的version大于准备提交前的,说明别的线程改动过,则不提交,可以延时再重复尝试,重复尝试这里也叫自旋 (代码上体现可就是sleep(200)之后再调用修改方法自身)
乐观锁的应用场景:秒杀场景中的扣库存
九.mysql 中的count(*)、count(1)、count(字段)的区别
1.count(*)和count(1)本质上和效率上都是一样的,不过count(*)更官方一点,alibaba java开发手册中建议使用count(*)
2.count(*)、count(1) 统计的允许null值,count(字段查询)统计的是非null的row
十.sleep、wait、notify、notifyAll的区别和联系
1.sleep是Thread类里的静态方法,wait、notify、notifyAll是Object类里的方法
2.sleep不释放锁,wait释放锁;sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源
3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
4.sleep、wait必须捕获异常,而notify和notifyAll不需要捕获异常
5.Thread.yield方法会让出系统资源,让当前正在执行的线程回到runnable状态,
再次抢到cpu执行权后接着上次暂停的代码继续执行
Last updated
Was this helpful?