- 博客(38)
- 资源 (6)
- 收藏
- 关注
原创 底层原理---AQS框架
AbstractQueuedSynchronizer(通常简称AQS)是Java并发包中的一个核心类,位于java.util.concurrent.locks包下。它提供了一个框架,用于实现依赖于先进先出(FIFO)队列的阻塞锁和相关的同步器(如信号量、事件等)。
2025-01-08 15:23:11
183
原创 底层原理---CAS原理
CAS是原子类的底层原理,同时也是乐观锁的原理,全称是Compare-And-Swap,“比较并交换”,他是一种思想、算法。特点:可以避免使用互斥锁,当多个线程同时使用CAS更新同一个变量时,只有其中一个线程能操作成功,其他线程更新失败,更新失败的线程不会被阻塞。
2025-01-07 09:26:45
209
原创 底层原理---死锁问题
系统可以在每次调用锁的时候,都记录下来调用信息,形成一个“锁的调用链路图”,然后隔一段时间就用死锁检测算法来检测一下,搜索这个图中是否存在环路。一旦发生死锁,就可以用死锁恢复机制。如果我们的系统发生死锁的概率不高,并且一旦发生其后果不是特别严重的话,我们就可以选择先忽略它,直到死锁发生的时候,我们再人工修复,比如重启服务,这并不是不可以的。通过逻辑让死锁不发生。
2025-01-07 09:26:15
134
原创 底层原理---Java内存模型
java屏蔽了底层的L1,L2等多层缓存的实现细节,用JMM定义了一套读写的规范,只需要关心JMM抽象出来的工作内存和主内存的问题。每个线程只能直接接触到工作内存。如果有一个变量x被线程1修改了,只要没有同步到主内存中,线程B就看不到,此时线程B读取的x值就是一个过期的值,这就导致了可见性问题。
2025-01-01 15:34:02
843
原创 JUC并发工具---ThreadLocal
对于ThreadLocal而言,它还有不同的使用场景,比如当ThreadLocal用于让多个类能更方便地拿到我们希望给每个线程独立保存这个信息的场景下时(比如每个线程都会对应一个用户信息,也就是user对象),在这种场景下,ThreadLocal侧重的是避免传参,此时ThreadLocal和 synchronized 是两个不同维度的工具。可以在initialValue中new出自己线程独享的资源,而多个线程之间,它们所访问的对象本身是不共享的,自然就不存在任何并发问题。
2024-12-22 23:55:40
464
原创 JUC并发工具---原子类
原子性意味着“一组操作要么全都操作成功,要么全都失败,不能只操作成功其中的一部分”。java.util.concurrent.atomic 下的类,就是具有原子性的类,可以原子性地执行添加、递增、递减等操作原子类的作用和锁有类似之处,是为了保证并发情况下线程安全原子类相比于锁,有一定的优势:粒度更细:原子变量可以把竞争范围缩小到变量级别,通常情况下,锁的粒度都要大于原子变量的粒度效率更高:除了高度竞争的情况之外,使用原子类的效率通常会比使用同步互斥锁的效率更高,因为原。
2024-12-22 21:20:10
520
原创 JUC并发工具---阻塞队列
阻塞队列也就是BlockingQueue,它是一个接口,继承了Queue接口,是队列的一种。使用阻塞队列的话,就不会发生线程安全问题,降低我们的开发的难度和工作量(不用我们自己考虑线程安全,而是转移到队列上),实现了隔离,提升了安全性。
2024-12-22 17:36:18
922
原创 JUC并发工具---并发容器
防止用户自己实现了不好的哈希算法时链表过长,导致查询效率低转为红黑树是一种保底策略,用来保证极端情况下查询的效率通常情况下并没有必要转为红黑树,所以就选择了概率非常小,也就是长度为8的概率如果平时开发中发现HashMap或是ConcurrentHashMap内部出现了红黑树的结构,往往就说明我们的哈希算法出了问题。
2024-12-22 16:01:04
920
原创 JUC并发工具---并发容器
两个同样put的key发生了碰撞,根据hash值计算出来的bucket位置一样,两个线程又同时判断该位置是空的,可以写入两个不同的value便会添加到数组的同一个位置,最终就只会保留一个数据,丢失一个数据。推荐使用线程安全同时性能比较好的ConcurrentHashMap。
2024-10-15 00:15:13
421
2
原创 JUC并发工具---锁
如果自始至终,对于这把锁都不存在竞争,那么其实就没必要上锁,只需要打个标记就行了,这就是偏向锁的思想。一个对象被初始化后,还没有任何线程来获取它的锁时,那么它就是可偏向的,当有第一个线程来访问它并尝试获取锁的时候,它就将这个线程记录下来,以后如果尝试获取锁的线程正是偏向锁的拥有者,就可以直接获得锁,开销很小,性能最好。
2024-10-14 23:57:13
735
原创 线程安全基础
如果某个对象是线程安全的,在使用时就不需要考虑方法间的协调问题,不需要额外自己加synchronized锁。服务器响应慢、吞吐量低、内存占用过多等都属于性能问题多线程带来的性能问题:线程调度开销、线程协作开销。
2024-10-12 23:42:20
933
原创 线程基础学习
因为Java中每个对象都有一把称之为monitor监视器的锁,由于每个对象都可以上锁,这就要求在对象头中有一个用来保存锁信息的位置,这个锁是对象级别的,而非线程级别的,wait/notify/notifyAll也都是锁级别的操作,它们的锁属于对象。所以把它们定义在Object类中是最合适,因为Object类是所有对象的父类。
2024-10-12 22:45:06
984
原创 linux中的目录分区
linux中的目录分区linux系统的中的是以文件作为目录树的基本组成。linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。目录分析/这个是linux的根目录,所有的目录都是以“/”开头,/binbin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。/usr (Unix System Resource)usr是user的缩写,是曾经的HOME目录,然而现在已经被/home取代,现在usr被称为是Uni
2021-06-17 15:22:40
467
原创 MAVEN项目目录管理介绍
MAVEN项目目录管理介绍项目的根目录: —src:源码 —main:主工程代码 —java:主工程代码 —resources:需要使用的配置文件 —wepapp:web项目的资源目录(jsp/html/WEB-INF…) —test:测试代码 —java:测试代码 —resources:测试需要使用的配置文件 —pom.xml:项目的核心配置文件...
2021-04-24 20:21:26
203
原创 MySQL安装教程
MySQL安装教程概述mysql下载地址安装步骤双击下载软件功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入概述MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是
2021-04-15 18:30:42
227
原创 tomcat安装学习
tomcat学习tomcat学习功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入tomcat学习tomcat是一个世界上广泛使用的支持jsp和servlets的Web服务器。tomcat因为技术先进、性能稳定,而且免费,因而深受
2021-04-14 01:45:46
174
原创 打包、引入jar包
打包包第一步 打开项目构建第二步 将模块添加并打包第三步 选择要打包的模块第四步 添加后退出,点击要构建的模块就可以了就可以在OUT文件夹中找到jar包了引入包还是第一步改成点击Libraries在里面点击引入的jar包就可以在External Libraries里面看到引入的jar包...
2021-02-06 10:26:26
138
原创 面向接口编程
面向接口编程定义个人问题基础多态向上转型向下转型接口的基于感悟定义在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。个人问题在学习java的初始阶段中,我们可能会感到为什么要定义出一个接口这个东西来给一个类进行一个实现。我们直接编写出一个类,它这样还不
2021-02-01 09:06:28
183
原创 chapter5 函数和lambda表达式
chapter5 函数和lambda表达式为函数提供文档程序可通过help()函数查看函数的说明文档,也可以通过_doc_ 属性访问函数的说明文档。函数的参数关键字(keyword)参数按照形参位置传入的参数被称为位置参数。如果使用位置参数的方式来传入参数值,则必须严格按照定义函数时指定的顺序来传入参数值。根据参数名来传入参数值,则无须遵守定义形参的顺序。参数收集(个数可变的参数)python允许在形参前添加一个星号(*),这么意味着该参数可以接收多个参数值,多个参数值被当成元组传入
2020-10-19 22:03:09
127
原创 chapter4 流程控制
chapter4 流程控制基本流程控制结构:分支结构循环结构分支结构if expression: statementsif expression:else : statementsif expression: statementselif expression: statements…else: statements关键点: 缩进,冒号if 表达式类似于三目运算符True_statement if expression else
2020-10-18 14:18:39
124
原创 (笔记)chapter3 列表、元组和字典
chapter3 列表、元组和字典序列包含多项数据的数据结构,可以通过索引来访问成员子序列获取切片slice[start: end: step]将字符串分成字符串数组split(str=‘分割符’)in运算符# 用于判断列表或元素是否包含某个元素元素 in 序列序列封包把多个值赋给一个变量时,自动封装成元组序列解包序列直接赋值给多个变量,序列中的各个元素会被依次赋值给每个变量(要求序列元素个数和变量个数相等)如果解包时左边的变量之前添加*,则该变量代表一个列表
2020-10-13 20:56:54
169
原创 (笔记)第二章 变量和基本语法
chapter2 变量和基本语法注释单行注释(单个 #)# 我是一个单行注释多行注释(三对单引号或双引号)"""我是一个多行注释"""变量python是弱类型语言:变量不用声明就可以使用 变量的数据可以随时改变变量命名规则标识符必须要以字母、下划线开头python2.x对中文的支持较差,如果要在Python 2.x程序中使用中文字符或中文变量则需要在Python源程序的第一行zengjia“# coding:utf-8”python关键字和
2020-10-11 16:39:16
240
原创 java数组相等的判断方式区别
java数组相等的判断方式区别“==” 判断的依据是两个数组的标记是不是指向同一个内存空间“Arrays.equals(a,b)” 判断的依据是两个数组的内容是否相等
2020-09-30 09:21:31
143
原创 U盘启动盘复原为普通U盘
这是我在记录安装好ubuntu系统后,我要将系统启动盘格式化成原始的U盘,特此记录。1、插入U盘,右键点击“此电脑”,选择“管理”,在“计算机管理”的面板中点击打开“磁盘管理”,会看到目前电脑上的所有磁盘,找到U盘的索引名(如图标识,这里是“磁盘2”,有些电脑可能不是“磁盘1”,注意看清磁盘内存,找准待清空的U盘)2、使用“WIN+R”打开运行对话框,输入cmd打开DOS命令运行环境,输入diskpart,按下回车,打开磁盘的DOS命令运行环境。3、,这里建议在select disk命令后加上li
2020-07-30 17:16:51
5792
2
原创 1.计算机视觉导论
1.计算机视觉导论解决的问题分类,检测,分割Single ObjectClassificationClassification + LocalizationMultiple ObjectObject Detection 有些像素里面是目标的,有一些是背景的,所以背景的就是冗余了。Segmentation(分割最难),就像是PS的抠图Semantic Segmentation 语义分割:分割的时候,每个像素进行分类,就是按类分,所以猫与猫之间是没有界限的,同一类物体时被分在一起。
2020-07-30 16:12:59
780
原创 数据结构---稀疏矩阵
数据结构---稀疏矩阵稀疏矩阵什么是稀疏矩阵步骤稀疏矩阵什么是稀疏矩阵稀疏矩阵是一个矩阵中,有效值是很少,大多数的值是无效值的0。类似的应用场景是,在五子棋中,二维数组的0表示没有下子的位置过多的占用了空间,可用稀疏矩阵进行压缩。步骤将一个稀疏矩阵转化为记录矩阵遍历完整的矩阵,得到有效的数据个数,并将其记录下来。 //创建一个10*10二维数组 //其中0表示没有下子,1表示下黑子,2表示下白子 int chessArry[][] = new
2020-05-27 08:51:29
1360
原创 操作系统——精髓与设计原理 第二章复习题&习题
操作系统——精髓与设计原理 第二章复习题&习题复习题2.1 操作系统设计的三个目标是什么?2.2 什么是操作系统的内核?2.3 什么是多道程序设计?2.4 什么是进程?2.5 操作系统是怎么使用进程上下文的?2.6 列出并简要介绍操作系统的五种典型存储管理职责。2.7 解释实地址和虚地址的区别。2.8 描述时间片轮转调度技术。2.9 解释单体内核和微内核的区别。2.10 什么是多线程?习题2.12.22.32.4复习题2.1 操作系统设计的三个目标是什么?方便:操作系统使计算机更易于使用。有
2020-05-22 21:40:09
3273
原创 操作系统——精髓与设计原理 第一章复习题&习题
操作系统——精髓与设计原理 第一章复习题&习题复习题1.1 列出并简要地定义计算机的四个主要组成部分1.2定义处理器寄存器的两种主要类别1.3一般而言,一条机器指令能指定的四种不同的操作是什么?1.4什么是中断?1.5多中断的处理方式是什么?1.6内存层次的各个元素间的特征是什么?1.7什么是高速缓冲存储器?1.8列出并简要地定义I/O操作的三种技术1.9空间局部性和时间局部性的区别是什么?1.10开发空间局部性和时间局部性的策略是什么?习题1.11.2复习题1.1 列出并简要地定义计算机的四个
2020-05-09 00:10:14
5419
1
原创 Apple detection during different growth stages in orchards using the improved YOLO-V3 model(翻译详解)
Apple detection during different growth stages in orchards using theimproved YOLO-V3 model引言1、介绍和相关工作improved YOLO-V3 model)引言果园中苹果的实时检测是判断苹果生长阶段和估计产量的重要手段之一。苹果的大小、颜色、簇密度和其他生长特性会随着苹果的生长而变化。传统的检测方法...
2020-05-08 12:07:25
2355
5
原创 操作系统——精髓与设计原理 第十一章复习题&习题(更新中)
操作系统——精髓与设计原理 第十一章复习题&习题复习11.1列出并简单定义执行I/O的三种技术。11.2 逻辑I/O和设备I/O有何区别?11.3 面向块的设备和面向刘的设备有何区别?各举一些例子11.4为什么希望用双缓冲而非单缓冲来提高I/O的性能?11.5在磁盘读或写时有哪些延迟因素?11.6简单定义图11.7中描述的磁盘调整策略11.7简单定义7个RAID级别11.8典型的磁盘扇区大...
2020-04-26 20:56:09
4099
原创 操作系统——精髓与设计原理 第三章复习题&习题(更新中)
操作系统第三章复习题&习题复习题3.1 什么是指令跟踪?3.2通常有什么事件会导致创建一个进程?3.3定义进程模型中的每一种状态3.4 抢占一个进程是什么意思?3.5什么是交换,其目的是什么?3.6为何图3.9(b)中有两个阻塞态?3.7列出挂起态进程的4个特点3.8操作系统会为哪类实体维护信息表?3.9列出进程控制块中的三类信息3.10为什么需要两种模式(用户模式和内核模式)?3.11操...
2020-04-26 11:23:34
3495
1
原创 超级详细利用Vmware部置XP虚拟机
Vmware首先安装好华军软件园的网址上面是Vmware软件的下载网站,因为官网下载需要收费,所以推荐华军这个软件园,下载安全。根据软件园中的安装步骤,完成下载。虚拟机的部置(这里以windowXP为例)先说明一下,为何以XP为例,因为每一个安装Vmware相信都是为了研究系统,所以我们先从最先一版的windowsXP入手了解系统下载windowXP系统XP下载网站上面链接是下载X...
2020-03-30 22:31:16
664
毕业设计--问卷调查系统
2021-06-17
毕业设计---个人博客项目
2021-06-17
疯狂Python讲义第三章课后习题
2020-10-13
疯狂Python讲义第二章课后习题
2020-10-12
模拟题库的小程序源码.zip
2020-05-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人