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?