自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 问答 (1)
  • 收藏
  • 关注

原创 Vue+Springboot2.6.4集成activiti6.0及图形化设计器

springboot2.6.4 vue2.x集成activiti6.0.0及图形界面

2022-03-22 10:06:14 5560 7

原创 JVM(四)内存屏障与JVM指令

一、JVM级别内存屏障这种软件层级的屏障一定是依赖于cpu硬件级别的屏障。以下的屏障指的是屏障两边的操作,JVM只是一个规范,具体实现根据不同虚拟机不同。1. LoadLoad屏障2. StoreStore屏障3. LoadStore屏障4. StoreLoad屏障二、volatile1. volatile实现的细节:① 字节码层面:编译之后翻译为字节码;编译之后的修饰符字节码可以发现0x0040(ACC_VOLATILE)② JVM层面其次是交给虚拟机层级;当虚拟

2020-05-17 13:53:28 1255

原创 JVM(三)【Linking Initializing JMM】

JVM(三)【Linking Initializing JMM】一、Linking1. Verification2. preparation3. resolution二、Initializing1. 调用类初始化代码,给静态成员变量赋初始值。三、JMM1. 硬件层的并发优化基础知识(深入理解计算机系统 原书第三版 P421)一、Linking1. Verification检验加载的文件是否符合JVM规定2. preparation静态成员变量赋默认值3. resolutionclas

2020-05-14 15:08:36 444 3

原创 JVM(二)详解Class加载过程

Class Loading Linking Initializing (类编译-加载-初始化)一、Loading 类加载器(classloader):1. 任何一个class都是classloader(有上图多个加载器)把它load到内存的,load的过程是:  ①把二进制码存入内存  ②创建一个class对象指向这块区域  以后使用的都是这个class对象然后指向的这块区域,这个class对象不在栈中,在metaspace(1.8之后出现的)  上图中从下往上是父加载器,但不是继承的关系

2020-05-12 16:04:29 304

原创 JVM(一)入门及Class文件格式

一、JVM基础(Java Virtual Machine) 1. java编码到执行:  执行次数多的部分会被JIT即时编译。  JVM虚拟机帮助屏蔽了不同操作系统的底层,实现了跨语言的平台,java跟jvm无关。  跨语言:只要能产生class文件,就能被JVM所应用。  jvm是一种规范。  官方文档:    https://docs.oracle.com/en/java/javase/13/ 中Specifications-language And Virtual    htt

2020-05-12 15:47:26 289

原创 多线程与高并发编程(九)

多线程与高并发编程(九)一、JMH(测试方法工具)简单介绍1. 测试准备步骤2. 注解二、Disruptor1. 特点:无锁高并发,使用环形Buffer,直接覆盖(不清除)旧的数据,降低GC频率,实现了基于事件的生产者消费者模式(观察者模式)。2. RingBuffer结构:disruptor是利用数组实现的,而且是首尾相连的环形结构(RingBuffer),内部维护一个sequence(代表下一...

2020-04-29 14:36:26 428

原创 多线程与高并发编程(八)【线程池二】

多线程与高并发编程(八)【线程池二】一、线程池1. SignleThreadPool2. CachedThreadPool3. FixedThreadPool4. ScheduledThreadPool5. WorkStealingPool6. ParallelSteamAPI二、ThreadPoolExecutor源码观后感1. worker类:2. submit方法:3. execute方法:...

2020-04-29 14:23:24 362

原创 多线程与高并发编程(七)【线程池一】

多线程与高并发编程(七)【线程池一】一、线程池前置1. Executor接口 executor()2. ExecutorSevice接口,定义了很多线程池的生命周期的方法3. Callable接口(定义了call()),类似runnable,是一个任务,但是相比runnable中的run()多了个返回值。4. Future接口,承接ExecutorService方法中的返回值,是一个结果5. Fu...

2020-04-07 12:54:14 732

原创 多线程与高并发编程(六)【容器】

多线程容器一、容器补充知识(主要从多线程的使用角度上讲)1. 在物理结构上实际上容器只有两种:数组Array,链表Linked2. 在逻辑结构上的容器非常多。3. Collection一共三种List、Set、Queue(多线程最重要的)4. 容器发展过程 1)从HashTable到CHM 2)从Vector到Queue 3)sync与cas二、多线程容器1. ConcurrentHashMap(...

2020-04-05 13:59:40 294

原创 多线程与高并发编程(五)

多线程与高并发编程(五)一、AQS二、VarHandle三、ThreadLocal(强引用,配合四中的弱引用来读,四、中具体讲了ThreadLocal)四、补充知识五、堆外内存的回收(超纲啦):一、AQSAQS内的state状态通过CAS来改变AQS内的队列的节点添加,也是通过compareAndSetTail(CAS)来改变双向链表是因为需要看前面节点的状态  CAS操作是针对的ta...

2020-04-03 16:09:51 288

原创 多线程与高并发编程(四)

一、面试题第一个问题:–背过!利用以下方法:  LockSupport互相在5的时候指定对方锁定解锁。(LockSupport用法在上篇笔记中)第二个问题–背过!利用以下方法: ①Lock lock = new ReentrantLock(); 声明锁 ②Condition producer = lock.newCondition() 这里的newCondition(...

2020-03-25 10:07:06 168

原创 多线程与高并发编程(三)

 atomic、sync、longAdder 在大量、特别多并发线程情况下,atomic比sync效率高,longAdder比atomic效率高。 sync慢是因为可能会去申请重量级锁 longAdder内部用了分段锁,分组一起处理,最后合并(比如1000个线程都++,分成四段每段250++,最后四个合并)【只有在特别大并发的情况下才有优势,一般情况下可能还不如其他两种】一、各种同步锁...

2020-03-22 18:26:49 178

原创 多线程与高并发编程(二)

一、Volatile保证线程可见性  MESI 缓存一致性协议(CPU级别)禁止指令重排序  DCL单例(Double Check Lock双重检查锁)  问:在双重检查锁的单例模式中要不要加volatile?  答:要加,一般情况下不加volatile结果仍然不会出问题,【 补充知识:  new对象时分为三步:   ①给对象申请空间(int类型对象初始设为0)   ②给对象...

2020-03-18 20:25:58 231

原创 多线程与高并发编程(一)

一、Thread.sleep() 当前线程睡眠指定时间后回到就绪状态(回到等待队列)Thread.yield() 当前线程直接回到就绪状态(回到等到队列)Thread.join() 让其他线程在此行执行后优先执行,等他执行完了,当前才开始执行this.getState() 当前线程的状态(六大状态,runnable自己算一种,下图里面最大的块是runnable状态)禁止stop()方法...

2020-03-17 15:32:25 505

原创 多线程-生产者消费者问题、线程池

(—接上篇《多线程-线程的生命周期、线程同步与死锁》的完善)一、线程池工作原理步骤  步骤:核心线程池,声明时预估的数量,池内数量的线程同时进行执行,如果没满则新建一个线程处理刚提交来的任务,若池内线程全部在执行任务,进入下一步。阻塞队列,核心线程池满了后再有线程会判断阻塞队列是否满了,阻塞队列没满就将任务放入阻塞队列中,没满就进入下一步。线程池,判断线程池中所有的线程是否都在执行任务...

2020-03-15 14:52:45 317

原创 多线程-线程的生命周期、线程同步与死锁

一、线程操作相关方法注:  在多线程的时候,可以实现唤醒和等待的过程,但是唤醒和等待是Object的方法,唤醒和等待对的是共享对象来说的,而不是针对线程来说的。二、BlockingQueue阻塞队列,JUC包中的(java util concurrent)用法:  BlockingQueue blockingQueue = new ArrayBlockingQueue(capa...

2020-03-15 14:35:26 106

原创 多线程高并发基础

一、语法  notify()唤醒  wait()等待  在等待和唤醒时,都是对对象进行操作而不是对当前线程,因为notify和wait都是object方法二、JDK1.5后的JUC帮助实现同步的重复睡眠唤起过程  在A课度线程-线程的生命周期、线程同步与死锁(1)中1:50:00左右开始讲  包路径:java.util.concurrent.BlockingQueue;具体使用: ...

2020-03-14 14:46:11 125

原创 高并发负载均衡:网络协议原理【keepalived】(四)

一、前置 1、出现问题:  ①lvs若挂了,单点故障,业务下线。  ②后台的server挂了一个的话,lvs中仍然是两个的记录,访问到达时仍然会负载到两台server中,所以会导致一部分人的业务访问不成功。 2、解决问题:  ①单点故障的解决:一变多。   2个思路:多点:形式:a)主备 b)主主   注:主从和主备是不一样的! 3、keepalived的引入  keepa...

2020-03-11 21:25:31 172

原创 高并发负载均衡:网络协议原理(三)

一、LVS负载均衡搭建(linux virtual server)(DR模型)  LVS是一个虚拟的服务器集群系统补充知识:  /proc目录下的文件只能echo覆盖,不能vi打开,因为vi相当于office,打开一个文件的同时会创建一个虚拟的文件。  一块物理网卡上可以设置多个虚拟IP地址。1)上上图中两份协议:  ①响应级别:    默认都是0,外面不知道几个网卡啥的,内部...

2020-03-10 12:49:51 285

原创 高并发负载均衡:网络协议原理(二)

一、Tomcat为什么慢(客户端和服务端的通信)因为Tomcat(nginx等也是一样)是存在应用层的,在网络连接中是最末端的层,处于用户态中,对应用层通信需要先走完下面的物理层-链路层-网络层-传输控制层,进行了下一跳、节点转换、三次握手之后再让内核从内核态切换到用户态才找到了应用层的Tomcat因为Tomcat是基于java语言开发,跑在JVM上,JVM相当于在用户空间中又虚拟了一块空间...

2020-03-08 13:10:36 288

原创 高并发负载均衡:网络协议原理(一)

一台主机最多65535个端口一、OSI七层参考模型(客户端和服务端都有同样的七层模型)软件工程学所强调的分层解耦:应用层:浏览器、tomcat、对外服务的软件表示层:字符串的语义、表示、加密会话层:session等传输控制层:如何连接如何传输的控制(连接失败还是成功)网络层:设备中如何路由数据怎么发链路层:写成一个什么样的协议、具体到写成什么样的东西能发过去物理层:wifi,4...

2020-03-07 15:55:07 492

原创 Redis入门到五大类型实现

service redis_6379 start 服务启动6379端口REDIS的值一共五种类型: String,List,Hash, Set,Sorted Setps -fe | grep redis 查看当前包含redis进程redis-cli 启动redis程序exit 退出redis-cli -h 查看redis代码帮助redis-cl...

2020-02-26 21:52:07 226

空空如也

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

TA关注的人

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