日常知识杂记

  • 大数据中的 三架马车是指?
  • 单元化 / 集群 / 异地/多地 / 就近原则 / 亲和性?
  • OLTP 和 OLAP
  • 数据处理的3步:
  • MPP数据库 -海量并行数据库
  • 关系型 / nosql / 时序数据库
  • mysql的order by原理 / mysql的存储引擎
  • 静态代理/ 动态代理 — cglib 代理/ jdk 代理 – 实际意义上为: 对于字节码的修改/生成 — ASM技术 --动态插桩
  • exception 和 runtimeexception 有什么区别吗? 为什么自定义异常的时候就是 runtimeexception
  • redis的淘汰策略
  • ISR : 提供ISR(In-Sync Replicas)的多副本机制、基于Paxos协议的强一致存储版本等
  • netty / 粘包/ 拆包/ 丢包
  • CFS是Completely Fair Scheduler简称,即 - 完全公平调度器
  • LSM树结构(Log-Structured-Merge-Tree) – VS B+/B ;
  • 网络七层模型 - 各层的数据结构/形式; as: socket
  • hadoop :一个大数据处理的开源框架;分为4个模块
    在这里插入图片描述
  • Spark VS hadoop
  • 数据反压 or 快速失败?? fastover / fastfail
  • Kafka 的攒批机制 (accumulate,参数为 linger.ms) 和 Nagle 算法
  • 存储引擎有 in-place updates(原地更新)和 out-of-place updates(异地更新
  • 增量写入 — mysql 是怎么做的呢? oceanbase?什么changebuffer啥的
  • kafka 又是怎么做的呢? 攒批?
  • 顺序写✍️?? 随机写?? 顺序读??随机写???
  • WAL(Write-ahead logging,预写式日志)的方式来保证数据的可靠性
  • sst
  • RPC VS 异步RPC
  • RocketMQ 使用的是基于TCP 的自定义协议; 消息中间件常用的协议:OpenWire、AMQP、MQTT、Kafka、OpenMessage;
  • 消息持久化的方式 / kv数据库/关系DB/磁盘存储 - (存储速度上)文件系统 > 分布式KV(持久化)> 分布式文件系统 > 数据库(而可靠性却截然相反;)
  • 在阿里内部围绕 RocketMQ 内核打造了三款产品,分别是 MetaQ、Notify 和 Aliware MQ,这三者分别采用了不同的模型:
  • MetaQ 主要使用了拉模型,解决了顺序消息和海量堆积问题;
  • Notify 主要使用了推模型,解决了事务消息;
  • 云产品 Aliware MQ 则是提供了商业化的版本;
  • RocketMQ 在 4.3 版中开始支持分布式事务消息,采用 2PC 的思想来实现提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息
  • 缓存: 客户端缓存、网络层缓存、本地缓存、分布式缓存
  • 缓存的设计哲学,【想一想–缓存也是直接操作内存的 == meas 操作内存的一下中间件也是 会有相似之处的,比如什么驱逐?淘汰、同步、写入、读取…】
  • 数据一致性问题 :强一致性、弱一致性、顺序一致性
  • 前缀树/Trie树 的理解及适用场景( 最长前缀匹配算法(ip解析用的就是这个))-- trie:又稱字首樹或字典樹,是一種有序樹
  • DFA算法,全称为确定性有限自动机算法,是一种用来识别和匹配特定模式的算法
  • KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配
  • 二叉树的广度优先遍历(BFS)-队列 和 深度优先遍历(DFS)-栈
  • redis的数据结构 & 常用的api
  • Using where; Using index和Using index condition区别是什么:using index 代表使用覆盖索引-并且符合最左前缀原则,一定是前导列using where代表数据库引擎返回结果后mysql server还会再次筛选,using condition index代表使用二级索引不够还要回表, using tempoaray 说明使用了临时表
  • Mysql有一点很重要是会默认按照group by排序,demo 加order by null 这样在group by的时候默认不排序,可以去掉filesort
  • tinyint、smallint、int、bigint 的各自区别、所占字符,所示范围(ip的字段设置)
  • 时间轮 – 底层是多个数组,区分不同单位而已;但是会有并发问题吧,当前的值应该是记录某个线程上而不是时间轮上,时间轮仅仅是个衡量单位而已
  • 链表翻转 --gg 怎么都不会
  • volatile 的特性我都忘记了…/ 伪共享 、 线程封闭是啥子来着?、监视器模式 、
    对象发布的线程安全问题、同步容器 和 并发容器 有区别吗?同步的话means每个操作都加锁了,并发容器是针对多个线程并发访问,相较于同步容器提高了很多的性能;
    copyOnwirte的好处和坏处,有何效果 – 是不是在哪个中间件中也有这样的原理/特性来着;
    有界队列-管理资源的重要工具,生产这消费者
  • 浅拷贝 、 深拷贝
  • 对于异常处理 , Exception 需要在 方法上声明 或者 try catch进行捕获, 如果是 RunTimeException的话 则是可以不用声明;
    如果我们自己自定义异常 继承于 Exception的话, 如果抛出了NPE、IllegalStateException… catch 自定义异常 是 捕获不住的 ,需要 catch Exception,catch() 的异常条件是不会去帮我们造型,并且是子类范围

这里需要关注一个重点,LSM树(Log-Structured-Merge-Tree)正如它的名字一样,LSM树会将所有的数据插入、修改、删除等操作记录(注意是操作记录)保存在内存之中,当此类操作达到一定的数据量后,再批量地顺序写入到磁盘当中。有点像kafka的攒批机制
这与B+树不同,B+树数据的更新会直接在原数据 - 就地更新 所在处修改对应的值,但是LSM数的数据更新是日志式的,当一条数据更新是直接append一条更新记录完成的。—这个就有点想 rdb/aof 的同步还是存储方式
这样设计的目的就是为了顺序写,不断地将Immutable MemTable flush到持久化存储即可,而不用去修改之前的SSTable中的key,保证了顺序写。
1)冗余存储,对于某个key,实际上除了最新的那条记录外,其他的记录都是冗余无用的,但是仍然占用了存储空间。因此需要进行Compact操作(合并多个SSTable)来清除冗余的记录。
2)读取时需要从最新的倒着查询,直到找到某个key的记录。最坏情况需要查询完所有的SSTable,这里可以通过前面提到的索引/布隆过滤器来优化查找速度

消息中间件具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步 RPC 的主要手段之一,但消息队列不是万能的,对于需要强事务保证而且延迟敏感的,RPC 是优于消息队列,此外也需要考虑使用的必要性,使用消息队列的场景很多,最常用的功能是异步、解耦和削峰,可应用于应用程序松耦合、异步处理模式、发布与订阅、最终一致性、错峰流控和日志缓冲等;RocketMQ 中并没有内置 Guava、Netty 等拆箱即用的速度流控组件(RateLimiter 和 TrafficShaping),而是借鉴排队理论

Using where; Using index和Using index condition,三者的区别主要在于是否需要全表扫描、是否使用了覆盖索引、以及是否采用了索引条件过滤等技术来提高查询性能;
1、Using where == (前提)查询的列被索引覆盖,并且where筛选条件是索引列之一但是不是索引的前导列,【 Extra中为Using where; Using index == 意味着无法直接通过索引查找来查询到符合条件的数据】;
2、Using index 场景 查询的列被索引覆盖 ,(前提)一定要覆盖索引,并且where筛选条件是索引的是前导列
3、 Using index condition查询的列不全在索引中,where条件中是一个前导列的范围
此外 NULL 是指(前提)查询的列未被索引覆盖,并且where筛选条件是索引的前导列,意味着用到了索引,但是部分字段未被索引覆盖,必须通过“回表”来实现,== 【不是纯粹地用到了索引,也不是完全没用到索引】;
Using filesort 是Mysql里一种速度比较慢的外部排序,如果能避免是较好的了,很多时候,我们可以通过优化索引来尽量避免出现Using filesort,从而提高速度,需要(“额外的一次排序”);即使 ORDER BY id 但是有其他的筛选条件,最好是让其走联合索引(二级索引、辅助索引) ;
4、using tempoaray 使用到了临时表

总结:
1、Extra中的为Using index的情况 :
意味着 where筛选列是索引的前导列 &&查询列被索引覆盖 && where筛选条件是一个基于索引前导列的查询,意味着通过索引超找就能直接找到符合条件的数据,并且无须回表
2、Extra中的为空的情况
意味着 查询列存在未被索引覆盖&&where筛选列是索引的前导列,意味着通过索引超找并且通过“回表”来找到未被索引覆盖的字段,
3、Extra中的为Using where Using index:
意味着 是通过索引扫描(或者表扫描)来实现sql语句执行的,即便是索引前导列的索引范围查找也有一点范围扫描的动作,不管是前非索引前导列引起的,还是非索引列查询引起的。

(mysql-相关博客推荐:https://www.cnblogs.com/wy123/category/1019604.html);

在里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值