简历向

2019-07-21  本文已影响0人  Supreme_DJK
rsa非对称加密:

利用了单向函数正向求解很简单,反向求解很复杂的特性。

多线程充分利用多核 CPU

一个cpu只能处理一个线程,多核心技术是将多个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的HT技术是在CPU内部仅复制必要的资源、让CPU模拟成两个线程;也就是一个实体核心,两个逻辑线程,在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作。

相关参考链接:https://blog.csdn.net/huayushuangfei/article/details/79921638

mysql
  1. 行级锁
  2. 支持外键(保持数据一致性)
  3. 默认隔离级别:可重复读RR

3.1 快照读模式(select)

可以解决脏读、不可重复读和幻读问题,快照读模式下通过MVCC来解决

3.2 当前读模式(update、insert写等操作)

当前读情况下解决幻读需要加锁(记录锁+间隙锁 或者 临键锁(Next-Key Locks))

3.3 MVCC(多版本并发控制)
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现:系统版本号和删除时的版本号

解决快照读模式下,幻读问题;
快照读:执行select操作;其余是当前读,所以,mvvc不能根本上解决幻读的情况

3.4 脏读

事务A读取了事务B修改了但是未提交的数据,但是B事务由于某种原因导致事务回滚,但是A读取的仍然是事务B回滚之前的数据

3.5 不可重复读:

事务A读取了一条数据,这时事务B将该条数据修改,事务A再次读取该条数据时,和最开始读取的数据不一致

3.3 幻读:

事物A读取了一批数据,这时事务B再向表单中insert了一些数据,事务A再次读取时,会发现多了数据,出现幻读

3.4 记录锁
对行加锁:select * from user where userid = 1 for update;

3.5 间隙锁(gap锁)
对区间加锁:select * from user where userid between 1 and 3 for update;

3.6 临键锁 next-key locks
结合记录锁+间隙锁,它的封锁范围,既包含索引记录,又包含索引区间。

  1. innodb也会锁表

当执行update等操作时,会对操作影响的记录加上行锁和间隙锁。而业务的SQL语句update条件没有索引,所以就导致了全表被锁了

ElasticSearch

基于lucene的搜索引擎,在复杂过滤查询时效率更高。
1.涉及到多条件过滤、模糊查询时,mysql查询很慢;
2.涉及到count条目计算时,InnoDB不保存表的具体行数,需要全表扫描(MyISAM保存了行数)。es只需去查字段对应posting list的大小就行

在mysql中模糊查询时,查询时不支持拆分(没法查询'大三'),每次扫描都需要匹配那个文本的所有的字符,确认是否包含搜索的关键字;

索引可以分片,每个分片存储部分数据。

分片的好处

  1. 支持横向扩展;比如数据量为3t,每个分片就存储1个t的数据
  2. 提高性能;数据分布在多台机器上,所有的操作会在多台机器上并行分布式执行,提高了吞吐量和性能

即集群中不同的节点对于master的选择出现了分歧,出现了多个master竞争,导致主分片和副本的识别也发生了分歧,对一些分歧中的分片标识为了坏片

原因:

解决方法:

每个分片的数据是有多个备份的;每个分片有一个primary shard,负责写入,数据同步到多个replica shard,负责读;读写分离。

es集群通过选举,选举一个节点为master节点。
多个候选主节点,数量维持在一半以上。

celery分布式队列服务

任务发布者:后端代码编写任务函数
任务调度器:读取配置文件,周期性的将配置中到期的任务发送到任务队列
消息中间件(Broker):redis做消息队列
任务执行单元:worker

上一篇 下一篇

猜你喜欢

热点阅读