volatile笔记juc

Docker学习笔记

Docker学习笔记 一、Docker是什么? Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类 ......
笔记 Docker

stm32笔记[6]-中断触发流水灯

环境 开发环境 STM32CubeIDE 硬件 Alios Things Dev kit 开发板 STM32L496VGT6 LED1:PB6(低电平有效) LED2:PE3(低电平有效) LED3:PD15(低电平有效) KEY_1_A:PE14(低电平有效) KEY_2_M:PE11(低电平有效 ......
流水 笔记 stm 32

Redis学习笔记_缓存穿透、雪崩以及击穿

0.背景 Redis作为缓存数据库,其主要功能就是为了帮助我们减轻数据库的压力。 就跟我们买了新手机一样,我们习惯先去贴膜、去买手机壳。 用上了Redis,我们自然而然的也会去担心,Redis出现问题了怎么办? 缓存穿透、雪崩以及击穿,其讨论的意义都是为了避免: “缓存出现问题时,大量流量直接涌入D ......
雪崩 缓存 笔记 Redis

Linux学习笔记

IP地址和主机名 IP地址 ifconfig可以用来查询本机的IP地址,如果不能使用,可以通过install net-tools安装。 Centos系统下ens33表示主网卡;inet后表示IP地址;lo表示本地回环网卡; 127.0.0.1表示代指本机;0.0.0.0可以用于代指本机,同时在放行设 ......
笔记 Linux

2023/4/17笔记

bind函数 std::bind函数定义在头文件functional中,是一个函数模板,是函数适配器 f - Callable object (function object, pointer to function, reference to function, pointer to member ......
笔记 2023 17

《代码大全》阅读笔记1

第一部分 打好基础第2章 隐喻重要的研发成果常常产自类比(analogy)。通过把你不太理解的东西和一些你较为理解、且十分类似的东西做比较,你可以对这些不太理解的东西产生深刻的理解。这种使用隐喻的方法叫做“建模”。 目前最合适隐喻:建造软件(Building Software) 第3章 前期准备( ......
代码 笔记 大全

【uniapp】【外包杯】学习笔记day04 | 学习模板+vue相关知识+环境搭建

没啥好说的,人与人的悲欢并不相同,我只觉得吵闹。 好烦啊,虽然不应该总说一些低气压的话,不过目前预见的就是有很多工作要做,并且对于完成的希望也有点没有,就这样吧,没啥好说的。 昨天做了python的作业 今天晚上把小程序做出来。 明天搭建数据库。 ......
模板 环境 笔记 知识 uniapp

Spring学习笔记总结(一)

Spring概述(10) 1. 什么是spring? Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解 决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的 JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应 ......
笔记 Spring

【学习笔记】SAM的应用

command_block-SAM的应用 感谢大佬的指点 ~~暴论:后缀数组什么辣鸡啊,再也不用后缀数组啦!加入SAM神教!~~ CF802I Fake News (hard) 建出后缀自动机,可知一个串的出现次数即为endpos个数也是后缀链接树上的子节点个数。 同一endpos集合的子集中子串长 ......
笔记 SAM

【进阶13】【自学笔记】Python logging模块封装

一、定义 Python logging模块是一个可以通过控制日志级别、输出位置等方式来实现记录日志的模块。 logger对象的不同方法来记录不同级别的日志。 其中,debug()方法用于记录debug级别的日志,info()方法用于记录info级别的日志,warning()方法用于记录warning ......
模块 logging 笔记 Python

梦断代码读书笔记1

这个月我开始了对《梦断代码》这本书的阅读。 《梦断代码》一书记录的是作者罗森伯格对OSAF主持的Chandler项目进行田野调查,通过Chandler开发过程来揭示软件开发过程中一些根本性的大问题。对本书才刚刚阅读了三分之一,就已经忍不住对作者描述的开发过程所感叹,虽然刚进入软件领域不久,但是仍旧有 ......
代码 笔记

《用户故事与敏捷方法》读书笔记4

用户故事和Scrum 团队需要逐步地完善整个系统,不断地给软件添加更多的细节,软件的功能也由此越来越完备。Scrum是敏捷方法中一种迭代递增的软件过程,实施scrum过程的项目往往采用30天为周期的迭代,称为Sprint,团队确认这个Sprint需要完成的工作,将所有任务放到成为产品Backlog的 ......
笔记 方法 故事 用户

算法笔记

小知识 指针常量和常量指针 http://t.csdn.cn/oRx9S 基础算法 排序 排序的时间复杂度 快速排序 快速排序 思想:分治 流程: 1.确定分界点:q [ l ] q[l]q[l]、q [ ( l + r ) / 2 ] q[(l+r)/2]q[(l+r)/2]、q[r] q[r]q ......
算法 笔记

Git基础内容笔记

Git笔记 更多 git log 命令可查看:http://git-scm.com/docs/git-log Git 工作流程 Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库: 本地仓库和远程仓库 工作流程如下 ......
基础 笔记 内容 Git

斜率优化dp学习笔记

例题: 洛谷P2900 [USACO08MAR]Land Acquisition G 分析与转化 可以发现,有一些东西是完全没用的 当一个矩形的长和宽都比另一个矩形小的时候,这个矩形就是废的,因为他完全可以套在另外那个矩形一起买 这时候我们就能发现:我们得到了一个长度递减,宽度递增的矩形序列 而要求 ......
斜率 笔记

Vue3快速入门学习笔记一

一、概要 1.1、库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束。库是工具,在单点上给我们提供功能。框架是依赖库的。Vue是框架而jQuery则是库。 1.2、MVC(Model View Controller) MVC的核心理念是:你应该把管理数据的代码(Model)、业务逻辑的 ......
笔记 Vue3 Vue

阅读笔记4构建之法

1.虽然作为一名软件工程的学生,但是在之前对于软件工程并没有太多的认知,趁着这次阅读本书的时机,我认真的学习和了解了关于软件工程这门课的些许知识,或者说对于一名未来的程序员,这本书让我对自己的专业第一次有了不一样的认知和见解。 2.这本书中,作者主要通过很多现实中存在的事例将软件工程中可能会碰到的问 ......
笔记

JUC7_CountDownLatch_CyclicBarrier_Semaphore使用CountDownLatch

CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程就会被阻塞。其它线程调用CountDown方法会将计数器减1(调用CountDown方法的线程不会被阻塞),当计数器的值变 ......

JUC1_谈谈Volatile4_Volatile的应用

Volatile的应用 单例模式DCL代码 首先回顾一下,单线程下的单例模式代码 /** * SingletonDemo(单例模式) * * @author: 陌溪 * @create: 2020-03-10-16:40 */ public class SingletonDemo { private ......

JUC1_谈谈Volatile3_Volatile禁止指令重排

Volatile禁止指令重排 计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令重排,一般分为以下三种: 源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行指令 单线程环境里面确保最终执行结果和代码顺序的结果一致 处理器在进行重排序时,必须要考虑指令 ......

JUC1_谈谈Volatile2_Volatile不保证原子性

Volatile不保证原子性 前言 通过前面对JMM的介绍,我们知道,各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存进行操作后在写回到主内存中的。 这就可能存在一个线程AAA修改了共享变量X的值,但是还未写入主内存时,另外一个线程BBB又对主内存中同一共享变量X进行操作,但此时 ......

证明 volatile 不具备原子性

假设一个简单场景:多个线程同时操作一个共享数据 public class AtomicTest { public static volatile int count; public static void main(String[] args) { for (int i = 0; i < 500; ......
原子 volatile

JUC5_TransferValue是什么

值传递和引用传递 举例 /** * 值传递和引用传递 * @author: 陌溪 * @create: 2020-03-14-18:25 */ class Person { private Integer id; private String personName; public Person(St ......
JUC5_TransferValue TransferValue JUC5 JUC

JUC6_Java的锁Java锁之读写锁

独占锁(写锁) / 共享锁(读锁) / 互斥锁 概念 独占锁:指该锁一次只能被一个线程所持有。对ReentrantLock和Synchronized而言都是独占锁 共享锁:指该锁可以被多个线程锁持有 对ReentrantReadWriteLock其读锁是共享,其写锁是独占 写的时候只能一个人写,但是 ......
Java JUC6_Java JUC6 JUC

JUC6_Java的锁Java锁之自旋锁

Java锁之自旋锁 自旋锁:spinlock,是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU 原来提到的比较并交换,底层使用的就是自旋,自旋就是多次尝试,多次访问,不会阻塞的状态就是自旋。 优缺点 优点:循环比较获取直到 ......
Java JUC6_Java JUC6 JUC

JUC2_谈谈CAS5_CAS底层原理

CAS底层原理 概念 CAS的全称是Compare-And-Swap,它是CPU并发原语 它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的 CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中的CAS方法,JVM会帮 ......
底层 CAS CAS5_CAS 原理 JUC2

JUC6_Java的锁Java锁之公平锁和非公平锁

Java锁之公平锁和非公平锁 概念 公平锁 是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列 非公平锁 是指多个线程获取锁的顺序,并不是按照申请锁的顺序,有可能申请的线程比先申请的线程优先获取锁,在高并发环境下,有可能造成优先级翻转,或者饥饿的线程( ......
Java JUC6_Java JUC6 JUC

JUC6_Java的锁Java锁之可重入锁和递归锁

可重入锁和递归锁ReentrantLock 概念 可重入锁就是递归锁 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取到该锁的代码,在同一线程在外层方法获取锁的时候,在进入内层方法会自动获取锁 也就是说:线程可以进入任何一个它已经拥有的锁所同步的代码块 ReentrantLock / Syn ......
Java JUC6_Java JUC6 JUC

JUC3_谈谈原子类的ABA问题6_原子类AtomicInteger的ABA问题

原子类AtomicInteger的ABA问题 连环套路 从AtomicInteger引出下面的问题 CAS -> Unsafe -> CAS底层思想 -> ABA -> 原子引用更新 -> 如何规避ABA问题 ABA问题是什么 狸猫换太子 假设现在有两个线程,分别是T1 和 T2,然后T1执行某个操 ......
原子 问题 AtomicInteger ABA JUC3

JUC4_ArrayList为什么线程不安全ArrayList线程不安全的举例

Collection线程不安全的举例 前言 1、当我们执行下面语句的时候,底层进行了什么操作 new ArrayList<Integer>(); 底层创建了一个空的数组,伴随着初始值为10 当执行add方法后,如果超过了10,那么会进行扩容,扩容的大小为原值的一半,也就是5个,使用下列方法扩容 Ar ......
线程 ArrayList JUC4_ArrayList JUC4 JUC