自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 虚拟机类加载机制

Java虚拟机把描述类的数据加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称为虚拟机的类加载机制。类加载过程的几个阶段。

2025-03-18 14:36:03 561

原创 LockSuppor

LockSupport是线程工具类,主要作用是阻塞和唤醒线程,底层实现以来Unsafe,同时它还是锁和其他同步实现的基础,LockSupport提供两个静态函数分别是part和unpark,即阻塞线程与唤醒线程。上述示例中,子线程th调用阻塞,主线程睡眠2秒后,执行唤醒th线程,先阻塞后唤醒非常好理解,接下来再看下面的示例嗯?先唤醒th线程,再阻塞th线程,最终th线程没有被阻塞,这是为什么?下面的设计思路会为我们解开疑惑,并更进一步明确是park和unpark的语义(parkunpark。

2024-12-04 22:29:43 760

原创 JUC(CAS,原子类)

CAS的全程是Compare-And-Swap,直译就是比较交换,是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值。CAS是靠硬件实现的,JVM封装了汇编调用,

2024-12-04 18:58:08 565

原创 synchronized

偏向锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他的线程获取,则持有偏向锁的线程将永远不需要同步。

2024-12-03 21:14:36 1060

原创 Java线程基础

我们的程序一般都是 CPU 计算和 I/O 操作交叉执行的,由于 I/O 设备的速度相对于 CPU 来说都很慢,所以大部分情况下,I/O 操作执行的时间相对于 CPU 计算来说都非常长,这种场景我们一般都称为 I/O 密集型计算;stop() 方法会真的杀死线程,不给线程喘息的机会,如果线程持有 ReentrantLock 锁,被 stop() 的线程并不会自动调用 ReentrantLock 的 unlock() 去释放锁,那其他线程就再也没机会获得 ReentrantLock 锁,这实在是太危险了。

2024-12-03 11:21:47 1130

原创 管程:并发编程的万能钥匙

管程是一种解决并发的概念,和信号量是等价的,管程能够去实现信号量,信号量也能实现管程管程是直管理共享变量以及对共享变量的操作过程,让它们支持并发。Java中的synchronized、wait()、notify()、notifyAll()就是用管程去实现的。

2024-12-02 19:08:51 935

原创 安全性、活跃性、性能问题

当多个线程访问某个类时,这个类始终能表现出正确的行为,那么就称这个类时线程安全的程序按照我们期望的执行存在共享数据并且该数据会发生变化,通俗来讲,就是有多个线程会同时读写同一数据时,就会出现线程安全性的问题。如果能够做到不共享数据或者数据状态不发生变化,不就能够保证线程的安全性了嘛。有不少技术方案都是基于这个理论的,例如线程本地存储(Thread Local Storage,TLS)、不变模式等等。

2024-12-02 14:25:18 919

原创 并发理论基础(三)

接着上篇文章,我们用 Account.class 作为互斥锁,来解决银行业务里面的转账问题,虽然这个方案不存在并发问题,但是所有账户的转账操作都是串行的。试想互联网支付盛行的当下,8 亿网民每人每天一笔交易,每天就是 8 亿笔交易;每笔交易都对应着一次转账操作,8 亿笔交易就是 8 亿次转账操作,也就是说平均到每秒就是近 1 万次转账操作,若所有的转账操作都串行,性能完全不能接受。我们尝试一下把性能提升一下。改造一下转账操作的代码。

2024-11-29 18:53:05 662

原创 并发理论基础(二)

一个或者多个操作在 CPU 执行的过程中不被中断的特性,称为“原子性”原子性问题的源头是,如果能够禁用线程切换那不就能解决这个问题了吗?在早期的单核CPU场景下,这个方案确实可行,但并不适用多核场景。例:32位CPU上执行long型变量的写操作long是64位的,在32位CPU上执行写操作会被拆分成两次写操作(写高32位和低32位)

2024-11-29 17:46:45 1151

原创 并发理论基础(一)

CPU、内存、I/O设备不断的迭代、不断朝着更快的方向努力,但是在这个发展的过程中,有一个为了合理利用CPU,加入了进程线程,缓存,编译优化,这些特点,所有有了并发程序。天下没有免费的午餐,并发程序很多诡异问题的根源也在这里。

2024-11-26 16:22:45 708

原创 JVM(七、性能监控、故障处理工具)

Java与C++之间有一堵由内存动态分配和垃圾回收技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。Java内存管理和垃圾回收全部由虚拟机管理,一旦出现问题,我们需要一些工具去排查错误、修正问题。

2024-11-25 14:53:07 765

原创 JVM(六、Java内存分配)

Java体系的自动内存管理,最根本的目标是自动化的解决两个问题,自动给对象分配内存以及自动回收分配给对象的内存。我们这篇文档讨论给对象分配内存。从概念上来讲,应该都是堆上分配,而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配。

2024-11-25 11:14:03 1348

原创 JVM(五、垃圾回收器)

经典的垃圾回收器大概有7种,这些收集器的目标、特性、原理、使用场景都有所区别,有的适用于年轻代,有的适用于老年代,图中展示的就是这7中垃圾回收器,如果两个垃圾回收器有连线,则表明可以配合使用。这个关系不是一成不变的,Serial+CMS、 ParNew+Serial Old本来也可以组合的,在JDK8、JDK9被声明废弃和取消。这篇文章主要讨论CMS、G1。

2024-11-22 14:30:51 1212

原创 JVM(四、垃圾回收算法)

在运行时数据区我们有了解到内存区域分为线程共享的线程独立的,程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,所以当方法结束或者线程结束时,内存自然会回收。Java堆和方法区这两个区域有着不确定性,这部分内存的分配和回收时动态的,垃圾回收期所关注的也是这部分内存该怎么管理。

2024-11-19 19:28:12 584

原创 JVM(三、运行时数据区)

程序计数器(Program Counter Register)是一块较小的内存空间,,如果线程正在执行的是一个Java方法,这个计数器记录的是;如果正在执行的是本地(Native)方法,Undefined此内存区域是唯一一个《Java虚拟机规范》中没有规定任何情况的区域。

2024-11-18 20:12:14 873

原创 JVM(二、类加载系统)

可以支持一些个性化的扩展功能(比如:JRebel)

2024-11-12 18:16:07 1012

原创 JVM(一、基础知识)

广义上是一种规范,狭义上的是JDK中的JVM虚拟机,虚拟机模拟计算机的组成部分,可以运行我们写的应用程序,是对操作系统的一层抽象,把我们的应用程序和操作系统解耦,实现JAVA中一大特性,一次编写,到处运行。JVM相当于我们应用程序运行在的操作系统,当操作系统出现oom、性能不足各种的情况,就需要根据操作系统的特性,排查这些问题,同样,在JVM中,我们都要懂JVM的原理,才能去更好的解决这些问题.JVM基本概念->类加载系统->运行时数据区->对象的声明周期->GC收集器->实战。

2024-11-12 15:50:58 494

原创 Docker详解(六)

数据卷(Data Volume)是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:下面创建一个 web 容器,并加载一个数据卷到容器的 /webapp-data 目录。我们看下容器内部是否生成/webapp-data目录*注意:也可以在 Dockerfile 中使用 VOLUME 来添加一个或者多个新的卷到由该镜像创建的任意容器。我们验证下:上面的命令加载主机的 /opt/webapp-data5 目录到容器的 /opt/webapp2 目录。这个功能在

2024-10-12 11:01:31 700

原创 Docker详解(五)

主机 A 和主机 B 的网卡一都连着物理交换机的同一个 vlan 101,这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一 vlan 中的其他物理机器互联。如果在企业内部应用,或者做多个物理主机的集群,可能需要将多个物理主机的容器组到一个物理网络中来,那么就需要将这个网桥桥接到我们指定的网卡上。将 Docker 的默认网桥绑定到这个新建的 br0 上面,这样就将这台机器上容器绑定到 em1 这个网卡所对应的物理网络上了。

2024-10-12 10:45:51 809

原创 Docker详解(四)

通过 -p 参数可以设置映射的端口看到跑了两个内部端口都是5000的web实例,新的容器内部的 5000 端口映射到我们本地主机的 5001 端口上。

2024-09-25 15:52:40 588

原创 Kubernetes详解(一)概述

也称为 K8s,是一个开源的容器编排引擎,用于自动部署、扩缩和管理容器化应用程序的开源系统。

2024-09-24 20:47:59 874

原创 Docker详解(三)

当运行容器时,如果使用的镜像不存在,docker就会自动从镜像仓库中下载,默认是从Docker Hub中下载。

2024-09-24 00:17:56 1286

原创 docker详解(二)

docker使用客户端-服务器(c/s)架构模式。Docker客户端与Docker守护进程通信,该守护进程用于构建、运行、分发Docker容器,Docker客户端和守护进程使用REST API、UNIX套接字或者网络接口进行通信。

2024-09-21 11:02:10 1511

原创 Typora破解(仅供学习)

2、邮箱一栏中任意填写(但须保证邮箱地址格式正确),输入序列号(

2024-09-20 09:15:06 1546 1

原创 docker详解(一)

在计算机技术中,虚拟化(Virtualization)是一种资源管理技术。它是将计算机的各种实体资源,如:服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用更好的方式来利用这些资源。虚拟化的目的是为了在同一个主机上运行多个系统或应用,从而提高系统资源的利用率,并带来降低成本、方便管理和容错容灾等好处。Docker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上。

2024-09-19 18:24:28 1136

原创 docker常用命令

1、命令汇总。

2024-09-03 11:33:55 2047

原创 华为od机试 最大报酬

耗时时间(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和,那么请你帮小明安。小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的。t代表该工作消耗的时长(单位h,t>0),w代表该项工作的报酬。排一下工作,保证小明在指定的工作时间内工作收入最大化。T代表工作时长(单位h,0

2024-07-18 21:22:13 258

原创 华为OD笔试题-最大时间

里面有6个整数,求这个数组能够表示的最大24进制的时间是多少,输出这个时间,无法表示输出invalid。输入整数数组长度为6,不需要考虑其它长度,元素值为0或者正整数,6个数字每个数字只能使用一次。输出为一个24进制格式的时间,或者字符串”invalid“输入为一个整数数组,数组内有六个整数。

2024-07-10 14:13:42 196

原创 乘坐保密电梯

给定一个数字序列,每次根据序列中的数字n,上升n层或者下降n层,前后两次的方向必须相反,规定首次的方向向上,自行组织序列的顺序按规定操作到达指定楼层。求解到达楼层的序列组合,如果不能到达楼层,给出小于该楼层的最近序列组合。第一行:期望的楼层,取值范围[1,50];序列总个数,取值范围[1,23]·必须对序列中的每个项进行操作,不能只使用一部分。第二行:序列,每个值取值范围[1,50]能够达到楼层或者小于该楼层最近的序列。·操作电梯时不限定楼层范围。

2024-07-10 12:02:26 217

原创 解密犯罪时间

警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如“HH:MM”表示的时刻。根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。例如,“01:35”和“11:08”是合法的,“1:35”和“11:8”是不合法的。形如HH:SS的字符串,表示推理处理的犯罪时间。1.可以保证现任给定的字符串一定是合法的。形如HH:SS字符串,表示原始输入。2.最近的时刻可能在第二天。

2024-07-03 18:13:37 144

原创 文件目录大小

其中目录id全局唯一,取值范围[1,200],本目录中文件大小范围[1,1000],子目录id列表个数[0,10]例如:1 20 (2,3)表示目录1中文件总大小是20,有两个子目录,id分别是2和3。现在输入一个文件系统中所有目录信息,以及待查询的目录id,返回这个目录和及该目录所有子目录的大小之和。一个文件目录的数据格式为:目录id,本目录中文件大小,(子目录id列表)。第一行为两个数字M,N,分别表示目录的个数和待查询的目录id,目录id本目录中文件大小(子目录id列表)

2024-06-27 10:23:36 239

原创 计算疫情扩散时间

华为OD 算法题-广度优先遍历

2024-06-26 17:27:46 246 1

空空如也

空空如也

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

TA关注的人

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