相关笔记

数据库隔离级别分哪些?
事物隔离级别: 对事物并发控制的等级
四个等级: 串行化, 可重复读, 读已提交, 读未提交
串行化:所有事务一个接一个执行, 不存在幻读, 要么范围锁, 要么检查违规 两个事务完全独立,其中一个事务做的操作,对于另外一个事务不产生任何影响。【数据库事务加了锁,所有事务串行执行】
可重复读: 数据不可改但可新增, 可能幻读, 两个事务,其中事务A获取一条数据,事务B在事务A提交事务前无法操作这条数据,这样就保证了可以重复读。【数据库增加了读锁】
读已提交: 两个事务,其中一个事务对数据做的DML操作提交后,另一个事务才能看到。
读未提交: 两个事务,其中一个事务对数据做的DML操作还未提交,另一个事务能够立即看到。

为什么redis没用一致性hash,选用的hash槽
cluster-->node-->slot-->key
原因:使用hash槽的好处是可以方便地添加或删除节点,只需要挪动hash槽的节点位置即可,不会造成集群不可用的状态

redis怎么实现分布式锁
分布式锁的三种实现方式:1 数据库乐观锁;2 基于redis的分布式锁;3 基于zookeeper的分布式锁

public class RedisTool {
private static final String LOCK_SUCCESS = "OK";
private static final String SET_IF_NOT_EXIST = "NX";
private static final String SET_WITH_EXPIRE_TIME = "PX";

/**
* 尝试获取分布式锁
* @param jedis Redis客户端
* @param lockKey 锁
* @param requestId 请求标识
* @param expireTime 超期时间
* @return 是否获取成功
*/
public static boolean tryGetDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) {
String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);

if (LOCK_SUCCESS.equals(result)) {
return true;
}
return false;
}
}

public class RedisTool {

private static final Long RELEASE_SUCCESS = 1L;

/**
* 释放分布式锁
* @param jedis Redis客户端
* @param lockKey 锁
* @param requestId 请求标识
* @return 是否释放成功
*/
public static boolean releaseDistributedLock(Jedis jedis, String lockKey, String requestId) {
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
Object result = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));

if (RELEASE_SUCCESS.equals(result)) {
return true;
}
return false;
}
}

使用mysql索引有哪些原则?索引什么数据结构,b+tree 和tree 什么区别
1 最左前缀匹配原则;
2 =和in可以乱序;
3 尽量选择区分度高的列作为索引 count(distinct col)/count(*)
4 索引列不能参与计算,保证列"干净";
5 尽量得扩展索引,不要新建索引;
6 对于查询频率高的字段创建索引;

mysql有哪些存储引擎,都有什么区别?
1 Myisam:静态Myisam、动态Myisam、压缩Myisam 不支持事务,行级锁和外键约束
2 Myisam Merge:Myisam的变种, 将几个相同的Myisam表合并成一个虚表,用于数据仓库和日志
3 InnoDB: 由Myisam更新而来, 支持事务,行级锁和外键约束
4 memory(heap) : 内存中数据表, 使用散列索引,存取速度快,用于临时表
5 archive: 只支持select和insert 不支持索引 .
---------------------------------------------------------------
| 特点 | Myisam | BDB | Memory | InnoDB | Archive |
|----------------------------------------------------------------|
|存储限制 | 没有 | 没有 | 有 | 64TB | 没有 |
|----------------------------------------------------------------|
|事务安全 | | 支持 | | 支持 | |
|----------------------------------------------------------------|
|锁机制 | 表锁 | 页锁 | 表锁 | 行锁 | 行锁 |
|----------------------------------------------------------------|
|B树索引 | 支持 | 支持 | 支持 | 支持 | |
|----------------------------------------------------------------|
|哈希索引 | | | 支持 | 支持 | |
|----------------------------------------------------------------|
|全文索引 | 支持 | | | | |
|----------------------------------------------------------------|
|集群索引 | | | | 支持 | |
|----------------------------------------------------------------|
|数据缓存 | | | 支持 | 支持 | |
|----------------------------------------------------------------|
|索引缓存 | 支持 | | 支持 | 支持 | |
|----------------------------------------------------------------|
|数据可压缩 | 支持 | | | | 支持 |
|----------------------------------------------------------------|
|空间使用 | 低 | 低 | N/A | 高 | 非常低 |
|----------------------------------------------------------------|
|内存使用 | 低 | 低 | 中等 | 高 | 低 |
|----------------------------------------------------------------|
|批量插入速度| 高 | 高 | 高 | 低 | 非常高 |
|----------------------------------------------------------------|
|支持外键 | | | | 支持 | |
----------------------------------------------------------------

设计高并发系统数据库层面该怎么设计,数据库锁有哪些类型,如何实现
加数据库锁,防止脏读(读未提交),不可重复读以及幻读
数据库锁类型:独占锁(排他锁) 共享锁 更新锁 或者分为 乐观锁和悲观锁

数据库事务有哪些 事务有哪些特性?
事务: 事务是需要在同一个处理单元中执行的一系列更新处理的集合
1 平面型事务;
2 嵌套事务;
3 链式事务;
4 补偿事务;
5 SAGE事务
特点: ACID
1 A(原子性)事务是一个不可再分割的工作单位 要么全部成功,要么全部回滚
2 C(一致性)事务使得系统从一个状态转换到另一个一致的状态 数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性
3 I(隔离性)多事务并发访问时,事务是相互隔离的, 一个事务不能影响其它事务的运行效果;
4 D(持久性)事务完成以后,该事务对数据库所做的修改持久得保存在数据库之中,并不会被回滚

redis和memcached什么区别,为什么单线程的redis比多线程的memcached效率要高
1 存储方式 Memcached数据全在内存中,断电,数据丢失 redis 半持久化结构, 部分数据存放硬盘
2 支持数据类型 Memcached数据类型简单, redis支持6中数据类型: 字符串 hash结构 列表 集合 可排列集合 基数
3 使用底层模型不同 redis直接构建了VM机制,
4 value大小不同 redis 1GB Memcached 1MB
redis速度快: 1 完全基于内存, 类似hashMap 查找和操作的时间复杂度是O(1)
2 数据结构简单 3 采用单线程, 避免上下文切换和竞争 4 使用多路I/O复用模型,非阻塞IO 5 底层模型, redis构建VM机制
redis 为什么单线程
因为单线程的redis多路io复用速度已经很快了, CPU不会成为redis的瓶颈, 若多核cup, 可开多个redis示例 组成maste-master或者master-slave的模式, 手动分配CUP核

redis有哪些数据类型,都在哪些场景下使用
redis数据类型: String hash list set Sorted Set pub/sub Transactions
String 适用Key-value 模式,
hash 适用Key-hashMap模式, 对象属性放在hashMap中 属性名为map的key,属性值为map的value
List 适用消息队列模式, list链表 双向链表-->发送缓冲队列
Set 适用排重的消息队列
Sorted Set 适用可排序排重的消息队列
Pub/Sub 发布和订阅 适用即时消息场景
Transactions 事务 ACID

rdis的主从复制是怎么实现的、redis的集群模式是怎么实现的,redis的key是如何寻址的
rdis的主从复制 : Master-Slave模型
原理: master与slave互通, slave发送sync同步指令, master接受指令, 启动存盘进程,同时收集所有slave的修改数据集的指令信息,完成存盘进程后, 同步数据库文件到对应的slave,完成一次完整同步工作,
slave接受数据库文件后,存盘加载到内存中,
note: 1 当master与slave出现宕机 slave马上进行重连和数据同步
2 master接受多个slave的sync同步指令时, 后台开启队列保证多个slave有序高效的执行
配置-- redis一个端口为master 其他端口为slave
slave的conf文件配置 slaveof 127.0.0.1 master端口
redis的集群模式实现: 至少3master和3slave 互通, 6节点 两两相连,
集群fail 当一个master下无slave 并且该master当掉时,集群fail 或者 超过半数的master当掉时, 集群fail;
优势: 当一个master下线, 其一个slave切换为master
redis的key寻址: CRC16(key) mod 16384 对应hash槽地址

使用redis如何设计分布式锁,使用zk可以吗,如何实现的,这两种哪种效率更高
redis的分布式锁实现见第三个问题;
基于zk的分布式锁实现原理: 1, 客户端创建临时且有序的子节点;
2, 虚拟节点排序,获取最小的节点名称
3, 比较当前jvm创建的节点路径和最小的节点名称,如果当前最小 则获取锁, 否则退出或等待竞争
使用redis如何设计分布式锁的效率更高

redis的持久化,都有什么缺点和优点,具体底层怎么实现的
redis持久化的两种方法:
1,RDB (Redis DataBase) 直接将database中的key-value的二进制形式文件存储在rdb文件中
优点:性能高 ; 缺点: 在save配置文件之间若发生宕机, 数据会丢失;
2,AOF (Append-only File) 将数据的每一条修改命令追加到aof文件
优点:数据不容易丢失; 缺点:性能低

redis过期策略都有哪些,LRU , 写下java版本的代码
定期删除策略:每隔一段时间删除一次过期key操作

dubbo支持哪些序列化协议,hessian,说一下hessian的数据结构,,pb知道吗,说一下pb效率为什么是最高的
dubbo、 rmi、 hessian、 http、 webservice、 thrift、 redis
hessian 二进制RPC协议
1 客户端发起请求,将要传输的信息根据二进制传输协议转化为二进制格式文件
2 填充完毕后将二进制转化为二进制流,通过协议传输
3 接受到流后,将流转化为二进制文件,按照二进制传输协议获取信息并进行处理
4 处理完毕后将结果转化为二进制流并返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值