1.建表

CREATE TABLE abc (
id int(11) NOT NULL AUTO_INCREMENT,
a int(11) DEFAULT NULL,
b int(11) DEFAULT NULL,
c int(11) DEFAULT NULL,
d varchar(255) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (id),
KEY idx_a_b_c (a,b,c) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.插入10000条数据

for (int x = 0; x < 100000; x++) {
Abc abc = new Abc();
abc.setA(x);
abc.setB(x);
abc.setC(x);
abc.setD(x+””);
abcMapper.insert(abc);
}

3.
EXPLAIN select * from abc where a = 9876 and b = 9876 and c = 9876;
2021-04-27-09-36-3020210427093629

阅读全文 »

Java 集合

Collection 和 Map,是集合框架的接口

Collection 的子接口有 List 和 Set

List

有序列表,允许存放重复的元素

阅读全文 »

百度

百度一面

  • rabbitmq 如何保证消息不丢失
  • 双亲委派机制
  • 类加载器如何确定自己能加载哪些类
  • mysql innodb 引擎索引的数据结构
  • redis 实现 缓存带过期时间及淘汰策略
  • redis 集群
  • 共识算法
  • 分布式不用 queue 排队,如何实现抢工单
  • 分布式锁
  • dubbo 支持的协议,用的哪个协议,序列化,服务注册和发现
  • dubbo消费者是如何调用到连接者的
  • 两个消费者提供的服务名一样 包名都一样
  • springboot 和 springmvc 的区别
  • 算法:倒排链表
  • JVM 结构
  • 垃圾回收算法
  • 异常的类别
  • 设计模式,用到了哪些
  • mybatis 用了哪些数据结构
  • sql 优化
  • mysql 索引最左匹配原则
  • apollo 分布式配置
  • threadlocal

百度二面

  • rabbitmq 如何保证消息不丢失,rabbitmq 顺序消费
  • java内存模型哪个区域最容易发生内存泄漏
  • 加载一个类涉及到哪些内存区域
  • dubbo 如何实现泛化(不引入 jar 包如何调用提供者的方法)
  • 共识算法
  • 分布式锁(redis、zookeeper)
  • mysql 为什么用自增主键
  • mysql 如何解决幻读(mvcc)
  • 一些 Linux 操作指令
  • mysql 客户端和服务器如何通信的,可以被中断吗
  • hashmap 为什么用红黑树,为什么不用二叉树,为什么不用平衡二叉树
  • A、B 两个数组,合并后排序(二分排序)
  • concurrentHashMap1.7、1.8
  • countDownLatch
  • try 里面 return,finally 里面 return,会返回什么,finally 什么时候执行的
  • spring如何做到ioc的
  • spring bean 什么时候创建的,什么时候销毁的
  • static/private static/final 哪些是线程安全的
  • threadLocal
  • redis 为什么快
  • mysqL innodb 叶子节点的特点,mysql 主键如何存储的
  • CAS 会出现同时替换的情况吗
  • 92843 找到离他最近比他大的数
  • sql 查出一个学生的平均分最大的
阅读全文 »

volatile 变量具有以下特性:

  • 可见性:任意对一个 volatile 变量的读,总能看到任意线程对这个 volatile 变量的最后的写入
  • 原子性:对任意单个 volatile 变量的读/写操作具有原子性,但类似于 volatile++这类复合操作无法保证原子性

volatile 写的内存语义如下:

  • 当写一个 volatile 变量时,JMM 会把该线程对应的工作内存的共享变量的值刷新到主内存

volatile 读的内存语义如下:

阅读全文 »

简介

  • redis 的高性能是由于其将所有的数据都存储在了内存中,但是如果只是存在在内存中,重启之后数据就会全部丢失,为了尽量减少数据的丢失,我们需要将数据同步到磁盘上,这就是所谓的持久化
  • Redis 支持两种方式的持久化,一种是 RDB 模式,一种是 AOF 模式
  • RDB 模式可以在指定的时间间隔内为你存储在 redis 中的数据集做快照,子进程将快照数据写入临时文件,然后定时刷新到磁盘,redis 在启动时会将生成的快照文件中的内容读取到内存中
  • AOF 模式是将服务器接执行的所有写入/删除指令记录下来,只允许追加操作,并在服务器启动时重构原有的数据集,日志以与服务器协议相同的格式记录,当日志文件过大时,redis 会对日志文件进行重写
  • 我们可以不开启持久化配置,这样我们的数据只在 redis 服务启动时存在
  • 我们也可以将 RDB 和 AOF 模式组合使用,在这种情况下,redis 服务器重启时会依据 AOF 方式读取数据,因为这种模式能够保证数据相对最完整

RDB 模式

RBD 模式的优点

  • RDB 是一种非常便捷的单文件实时存储模式
  • RDB 文件非常便于备份,我们可以每小时保存一份过去 24 小时内的 RDB 文件,也可以每天备份一次过去 30 天内生成的 RDB 文件,我们可以保存不同版本的快照文件以避免数据的丢失
  • RDB 模式非常适合数据恢复,我们可以将 RDB 文件复制到各种远程服务器进行数据加载
  • 开启 RDB 模式,主进程只需要 Fork 出一个子进程来进行持久化操作,这样就可以极大的避免主进程执行 IO 操作了
  • 相比于 AOF 模式,如果数据集很大,RDB 的启动效率会更高
阅读全文 »

开始学习使用 spring-cloud-alibaba

使用 nacos 配置中心功能

1.创建一个 spring-cloud-alibaba 模块,添加以下依赖

1
2
3
4
5
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.创建测试 controller

阅读全文 »

之前在网上看到一个面试题目:synchronzied 最好的锁对象是什么

当时第一反应是 new Object,但是后来看到这篇文章:Object vs byte[0] as lock

大意就是 new byte[0]作为锁对象会更好,能够减少字节码操作的次数

下面来验证一下

1
2
3
4
5
6
7
public class ObjectSynchronizedDemo {
private final Object obj = new Object();
}

public class ArraySynchronizedDemo {
private final byte[] lockObj = new byte[0];
}
阅读全文 »

zookeeper 的节点类型

每个子目录项如 NameService 都被称为 znode,和文件系统一样,我们能够自由的增加、删除 znode,在一个 znode 下增加、删除子 znode,唯一不同在于 znode 是可以存储数据的

2021-04-16-14-20-4620210416142045

有四种类型的 znode:

  • presistent:持久化节点,客户端与 zookeeper 断开连接之后,该节点依旧存在
  • presistent_sequential:持久有序节点:zookeeper 给该节点名称进行顺序编号的持久化节点
  • ephemeral:临时节点,客户端与 zookeeper 断开连接之后,该节点被删除
  • ephemeral_sequential:临时有序节点,zookeeper 给该节点进行顺序编号的临时节点
阅读全文 »