09 2019 档案
摘要:1、为什么redis要实现持久化? 避免因宕机、断电等场景导致进程退出后数据丢失,如果redis的数据都只存放于内存,那么进程退出后数据就丢失了。持久化机制可以持久化内存数据到硬盘,重启redis后基于持久化数据进行恢复。 2、redis持久化的方式有哪些 2.1 RDB,定时对进程数据拍摄快照存储
阅读全文
摘要:活跃性危险 死锁 什么是死锁? 一条小路上两个人堵到了一起,a说你让我先走吧,b说不行我不让,你先让我走,互不相让,两个人都过不去。 A线程等待b线程的锁,b线程的任务在等待a线程的锁,两个线程在此处不停尝试获得锁,永无休止。 死锁的种类: 静态锁顺序死锁 如图直接看代码就能看出有死锁问题。 动态锁
阅读全文
摘要:Java5.0以后除了内置锁synchronized外在concurrent包还提供了显式锁接口Lock。 何为显式? 就是显式地加锁和解锁,需要自己写代码去加锁和解锁。Synchronized是隐式加锁解锁,也就是无需自己写加锁解锁代码,进了synchronized代码块就隐式加锁,出了代码块就隐
阅读全文
摘要:什么是线程池? 通俗理解就是一个容器,里面放了一些线程,需要用时就取出来用,用完了就放回去等待下一次用。 线程池内部维护一个任务队列,从池里取出线程去执行队列里的任务。 为什么要使用线程池? 1.可以将任务的提交和执行策略解耦,便于统一管理任务执行策略,好维护,比如延时执行,设置等待时间,超时自动失
阅读全文
摘要:使用同步工具类 闭锁 在线程执行过程中用一把锁把门锁住,在开锁之前线程无法通过这道门,只有当满足了开锁的条件之后,锁才会自动打开。 常用的闭锁工具类:CountDownLatch、CyclicBarrier、FutureTask。 闭锁应用场景 1.有a、b、c三个线程一起执行,可是a线程需要等待b
阅读全文
摘要:什么是可见性? 一个线程修改了共享变量的值,其他线程也能看到最新修改的值 。 下图是一段存在线程可见性问题的代码: 在主线程中修改两个变量的值,不一定对副线程可见,副线程有可能读取到为false的ready和为111的num。 为什么会出现这样的结果? 线程的交叉执行,重排序加线程交叉执行,共享变量
阅读全文
摘要:线程安全性与synchronized 线程安全:多线程访问某个类时,这个类始终都能表现出正确的行为,这个类就是线程安全的。 简单的说,就是多线程执行的结果与单线程执行的结果始终一致,不会因为多线程的执行时序不同而出现不同的结果 以下是一个线程不安全的程序: 当这段代码在单线程中执行时,会得出正确的答
阅读全文
摘要:什么是多线程? 一个程序(一个进程)运行过程中产生了不止一个线程。 一个生产汽车的车间好比一个进程,这个车间里的每个人分工合作,各自做自己的任务,每个工人好比一个线程,多个人同时工作则是多线程作业。 一个工人就是一个线程。 并行( parallel ) :多个cpu实例或者多台机器同时执行一段处理逻
阅读全文
摘要:1.字符串(string) 1.1设置值 例如: 1.2获取值 字符串类型的内部编码有3种: + int:8个字节的长整型。 + embstr:小于等于39个字节的字符串。 + raw:大于39个字节的字符串。 Redis会根据当前值的类型和长度决定使用哪种内部编码实现。 2.哈希(hash) ha
阅读全文
摘要:1.kafka架构 kafka处理消息大概流程 + 生产者发送消息给kafka服务器 + 消费者从kafka服务器(broker)读取消息 + kafka服务器依靠zookeeper集群进行服务协调管理 2.kafka基本术语 + message (消息) 生产消费的基本单位。 + topic(主题
阅读全文

浙公网安备 33010602011771号