自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 分布式锁(Redis 数据库 Zookeeper)

分布式锁在多线程情况下访问一些共享资源需要加锁,不然就hi出现数据被写乱的问题。一般可以用数据库DB,Redis和Zookeeper实现分布式锁特点:安全性(Safety):在任意时刻,只有一个客户端可以获得锁(排他性)避免死锁:客户端最终一定可以获得锁,即使锁住某个资源的客户端在释放锁之前崩溃或者网络不可达容错性:只要锁服务集群中的大部分节点存活,Client就可以进行加锁解锁操作Redis的分布式锁服务在redis中,我们可以通过以下命令SET resource_name my_ra

2021-12-26 22:03:50 1473 2

原创 如何保证消息队列高可用

如何保证消息队列高可用首先MQ会导致系统可用性降低,所以只要你用了MQ,那就一定有缺点了RabbitMQ的高可用性RabbitMQ是比较有代表性的,因为是基于主从(非分布式)做高可用的,我们就以RabbitMQ为例子讲解第一种MQ的高可用是怎么实现RabbitMQ有三种模式:单机,普通集群,镜像集群单机模式单机模式,玩具罢了普通集群模式(没有高可用性)普通集群模式,意思就是在多台机器上启动多个RabbitMQ实例,每个机器启动一个。你创建的queue,只会放在一个RabbitMQ实例上,但是

2021-12-19 21:00:03 1575

原创 如何保证消息不被重复消费

如何保证消息不被重复消费面试题如何保证消息不被重复消费,或者说如何保证消息的幂等性面试官心理分析既然是消费消息,那肯定要考虑会不会重复消费?能不能避免重复消费?或者重复消费了也别造成系统异常可以吗?这个是MQ领域的基本问题,其实本质上还是问你使用消息队列如何保证幂等性面试题刨析首先,有哪些重复消费的问题?先用kafka来举一个例子吧,说说怎么重复消费kafka实际上有个offset的概念,就是每个消息写进去,都有一个offset,代表消息的序号,然后consumer消费了数据之后,每隔一段时

2021-12-19 20:58:17 2118 1

原创 操作系统导论第十章多处理器调度高级

2021-12-12 22:01:14 438

原创 操作系统导论第九章调度:比例份额

2021-12-12 22:00:19 141

原创 操作系统导论 第八章 调度:多级反馈队列

2021-12-12 21:59:35 398

原创 操作系统导论第七章 进程调度:介绍

2021-12-12 21:58:04 211

原创 操作系统导论第六章 机制:受限直接执行

2021-12-12 21:57:17 147

原创 操作系统导论第五章 插叙:进程API

2021-12-12 21:55:43 216

原创 操作系统导论第四章抽象:进程

2021-12-12 21:54:17 306

原创 Java线程间的通信

Java线程间的通信锁与同步在Java中,锁的概念是基于对象的,所以我们又称为对象锁。线程与锁的关系,我们可以使用婚姻关系来理解,一个锁同一时间只能被一个线程持有,那其他线程如果需要得到这个锁,就得等这个线程释放这个锁线程之间,有一个同步的概念:线程同步是线程之间按照一定的顺序执行。为了达到线程同步,我们可以使用锁来实现它首先有一个无锁的示例public class NoneLock {static class ThreadA implements Runnable { @Overrid

2021-12-05 21:58:59 416

原创 线程组和线程优先级

线程组和线程优先级线程组(ThreadGroup)我们可以使用线程组对线程进行批量控制ThreadGroup和Thread的关系:每个Thread必然存在于一个ThreadGroup中,Thread不能独立在ThreadGroup存在。执行main()方法线程的名字是main,如果new Thread时没有显式指定,那么默认将父线程(当前执行new Thread的线程)线程组设置为自己的线程组ThreadGroup是一个标准的向下引用的树形结构,这样设计的原因是防止“上级”线程被“下级”线程引用而无

2021-12-05 21:55:48 3975

原创 Java线程的状态及主要转化方法

Java线程的状态及主要转化方法操作系统中的线程状态转换在操作系统中,线程是被视为轻量级进程的,所以操作系统的线程状态其实和操作系统进程状态是一致的操作系统线程主要有以下三个状态:就绪状态(ready):线程正在等待使用CPU,经调度程序调用之后可进入running状态执行状态(running):线程正在使用CPU等待状态(waiting):线程经过等待事件的调用或者正在等待其他资源(如I/O)Java线程的6个状态// Thread.State 源码public enum Sta

2021-12-05 21:52:58 372

原创 Java多线程入门类和接口

Java多线程入门类和接口Thread常用方法:currentThread():静态方法,返回对当前正在执行的线程对象的引用start():开始执行线程的方法,jvm会调用县城内的run方法yield():当前线程让出对当前处理器的占用,但是要注意的是,就算线程调用了yield,程序在调度时还有可能继续运行这个线程的sleep():使当前线程睡眠一段时间join():是当前线程等待另一个线程执行完毕之后再执行,内部调用的是wait方法实现的Callable,Future与FutureTa

2021-12-05 21:49:24 455

原创 磁盘顺序写

磁盘顺序写将消息先写入到操作系统的页缓存中,由页缓存直接映射到磁盘文件,不需要在用户空间和内核空间直接拷贝消息,也可以认为消息传输是发送在内存中的概述kafka作为一个支持大数据量写入写出的消息队列,由于是基于Scala和Java,而Scala和Java均需要在JVM上运行,但是JVM的堆进行数据存储则需要开辟很大的堆来支持数据读写,从而会导致GC频繁影响性能。所以kafka时使用磁盘来存储数据的,并且基于磁盘顺序读写和mmap(零拷贝技术的一种)技术来实现高性能磁盘顺序读写在顺序读写的情况下,磁

2021-12-05 21:46:16 1587

原创 消息队列-消息积压

消息积压性能优化性能的优化主要在生产者和消费者这俩业务逻辑mq自身性能,作为API使用者,无需过度关注。因大多mq业务,mq本身处理能力远大于业务系统。主流mq的单个节点,消息收发性能可达几万到几十万条消息每秒,还可以水平扩展Broker实例数倍增处理能力。而一般业务系统需处理的业务逻辑远比消息队列复杂,单节点每秒可处理几百到几千次请求,性能已经算很好了。所以mq性能优化,更关注在消息收发两端,业务代码怎么和mq协作达到最佳性能生产端生产端业务代码处理性能实际上和mq关系不大,都是先执行自己的业务

2021-12-05 21:45:46 157

原创 零拷贝技术

零拷贝技术概述零拷贝技术指在计算机执行操作时,CPU不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切换以及CPU的拷贝时间。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现CPU的零参与,彻底消除CPU的负载。实现零拷贝用到的主要技术是DMA数据传输技术和内存区域映射技术零拷贝机制可以减少数据在内核缓冲区和用户进程缓冲区之间反复的I/O拷贝操作零拷贝机制可以减少用户进程地址空间之间因为上下文切换而带来的CPU开销物理内存和虚拟

2021-12-05 21:43:53 2291

原创 kafka基础

Kafka概述kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能,持久化,多副本备份,横向扩展能力相关概念Producer:消息的生产者,消息的入口kafka cluster: kafka集群Broker: kafka实例,每个服务器上有一个或多个kafka实例Topic:消息的主题,可以理解为消息的分类,kafka的数据保存在topic,每个broker上都可以创建多个topicPartion: Topic的分区,每个Topic可

2021-12-05 21:41:43 1713

原创 Redis设计与实现-监视器

2021-11-29 00:06:08 528

原创 Redis设计与实现-慢查询日志

2021-11-29 00:05:37 298

原创 Redis设计与实现-排序

2021-11-29 00:05:07 234

原创 Redis设计与实现-二进制位数组

2021-11-29 00:04:34 101

原创 Redis设计与实现-发布与订阅

2021-11-29 00:04:03 169

原创 Redis设计与实现-事务

2021-11-29 00:03:27 438

原创 Redis设计与实现-集群

2021-11-21 17:58:50 560

原创 设计模式连更(1)-代理模式

代理模式概述代理模式是一种结构型模式,让你能够提供对象的代替品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理常见的使用场景延迟初始化(虚拟代理):如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式你无需在程序启动时就创建该对象,可将对象的初始化延迟到真正有需要的时候访问控制(保护代理):如果你只希望特定客户端使用服务对象,这里的对象可以是操作系统中非常重要的部分,而客户端是各种已启动的程序(包括恶意程序),此时

2021-10-28 08:30:00 81

原创 Java Introspector(内省)

Java Introspector(内省)什么是内省?Introspector是专门用来处理javaBean的工具类,用来访问某个属性的getter/setter方法JavaBean又是什么呢?JavaBean是一种特殊但又不完全特殊的类,主要用于传递数据信息。类中的方法主要用于访问私有字段,字段具备getter和setter方法如果需要在两个类之间传递信息,可以将信息封装进JavaBean中,这种对象称之为值对象(Value Object)或者是VOJavaBean的信息在Introspect

2021-10-27 09:30:00 171

原创 深入解析反射机制

深入解析Java反射什么是反射?反射是允许运行中的Java程序获取自身的信息,并且可以操作类或对象的内部属性在运行时分析类的能力在运行时查看对象实现通用的数组操作代码利用Method对象,这个对象很像cpp中的函数指针反射的主要用途当我们使用idea时,输入一个对象或类向调用它的属性或方法时,编译器会自动列出它的属性或方法,这里就应用了反射反射最重要的应用是开发各种通用框架反射的基本运用获取Class对象使用Class类的forName静态方法public static

2021-10-26 21:21:22 119

原创 计算机网络-网络层

2021-10-24 17:25:47 71

原创 计算机网络-数据链路层

2021-10-24 17:17:51 946

原创 Java中的锁

Java中的锁Lock接口使用synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,Lock却拥有锁获取与释放的可操作性,可中断的获取锁以及超时获取锁的便携性队列同步器AQS主要使用方式是继承:子类通过继承同步器并实现它的抽象方法来管理同步状态(getState(),setState()和compareAndSetState)同步器是实现锁的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。锁是面对使用者的,隐藏了实现细节;同步器面对的是锁的实现者,它简化了锁的实现方式

2021-10-10 19:15:25 84

原创 Java并发容器和Java线程池

Java并发容器和Java线程池ConcurrentHashMapConcurrentHashMap是线程安全且高效的HashMap为什么要用ConcurrentHashMap呢?因为在并发编程中使用HashMap可能会导致程序死循环,而使用线程安全的HashTable效率又非常低下HashMap在多线程环境下,因为有并发状况,所以不能使用HashMap。HashMap在并发执行put操作时会引起死循环,这是因为多线程会导致HashMap的Entry链表形成环形数据结构HashTabl

2021-10-10 19:14:54 171

原创 Java原子类和JMM

Java原子类和JMMJMMJava线程之间的通信由Java内存模型控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见重排序as-if-serial语义不管怎么重排序,程序的执行结果不能被改变,编译器,runtime和处理器都必须遵守as-if-serial语义JMM的顺序一致性数据竞争和顺序一致性如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序,程序的执行讲具有顺序一致性,即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同顺序一致性模型有两大特性

2021-10-10 19:14:24 86

原创 生产者和消费者模式

生产者和消费者模式该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度什么是生产者和消费者模式?生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通信,而是通过阻塞队列来进行通信,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。大多数设计模式,都会找一个第三者出来进行解耦线程池与生产消费者模式Java中的线程池类其实就是一种生产者和消费者模式的实现方式我们也可以利用线程池来实现,例如:创建N个不同规模的线程池来处理不

2021-10-10 19:13:54 94

原创 mysql日志

2021-09-30 01:19:05 102

原创 高性能MySQL读书笔记(11)--可扩展的MySQL

2021-09-28 18:33:43 180

原创 后端仔的学习记录

大二整个学年的学习笔记都会记录在上面,希望跟大家一起努力gitee仓库

2021-09-26 21:36:19 90

原创 高性能MySQL读书笔记(10)--复制

2021-09-26 21:33:20 178

原创 高性能MySQL读书笔记(8)--优化服务器设置

2021-09-24 16:53:43 116

原创 高性能MySQL读书笔记(7)--MySQL高级特性

2021-09-22 21:58:38 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除