自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(154)
  • 资源 (1)
  • 收藏
  • 关注

原创 设计模式之装饰者模式

装饰者模式代码和UML分析图

2024-01-12 17:19:28 552

原创 java代理模式

java静态、动态代理实现代码和性能分析

2024-01-12 10:07:41 940

原创 04.查找两个正序数组的中位数

两个正序数组中位数

2023-06-14 14:43:39 601

原创 设计模式之享元模式

享元模式

2022-12-06 19:19:22 158 1

原创 代理设计模式

代理设计模式、静态代理、动态代理

2022-12-06 16:48:34 385

原创 单例设计模式

多种方式实现单例设计模式

2022-12-03 12:35:53 466

原创 JVM分析工具

JVM分析工具

2022-11-18 17:47:30 1986

原创 JVM基础

JVM基础知识

2022-11-17 14:58:54 429

原创 力扣06-Z字形变换(java代码实现)

java实现Z字形变换

2022-11-02 12:20:11 321

原创 java构建n阶魔方方阵

n为奇数实现逻辑

2022-11-01 17:05:35 676

原创 数据结构之单链表实现多项式加和减法(优化了一版)

数据结构之单链表实现多项式加和减法

2022-11-01 15:37:39 139

原创 数据结构之用栈处理算法中迷宫问题(java)

后入先出栈

2022-10-25 15:32:16 1025

原创 数据结构之递归算法解决汉诺塔问题

递归算法解决汉诺塔问题

2022-10-17 10:59:29 941

原创 数据结构之单链表实现多项式加和减法

用单链表实现一元多项式的加法和减法

2022-08-23 17:49:44 1301 2

原创 数据结构之约赛夫环问题

约赛夫环的简单示例

2022-08-21 14:25:46 94

原创 数据结构之单链表节点移动代码示例

单链表节点移动

2022-08-21 12:21:13 725

原创 重学数据结构--单链表

数据结构之动手实现单链表

2022-08-20 18:43:27 135

原创 数据结构和算法示例二

数组合并

2022-08-19 17:31:52 189

原创 数据结构和算法示例一

算法对程序计算性能的影响示例

2022-08-18 20:55:17 361

原创 自定义实现读写分离锁

在程序运行过程中,如果有多个线程同时需要对共享资源进行访问,就需要在共享资源身上做同步操作以防止多线程读写导致的数据不一致。java可以通过synchronized关键字或者显式锁Lock对资源进行加锁来实现共享资源的同步。线程对资源的访问有两种分别是读和写,读是不会导致资源本身的更改的,所以读锁不是一种排它锁。如果有线程同时在读和写、或者多个线程同时写,这多个写操作会导致数据的不一致性,所以只要有写操作存在就需要加排他锁,以防止数据的不一致。读写锁分离设计会涉及几个接口...

2022-03-24 11:51:41 722

原创 高并发编程(Thread API的详细介绍)

Thread对象的线程API有sleep、TimeUnit、yield、interrupt等方法,具体方法和使用逻辑可以参考知乎:高并发编程(Thread API的详细介绍) - 知乎。

2022-02-23 12:41:09 258

原创 select ...... from ... for update是否会锁表?

今天看你了一篇文件,讲到select xx form xx for update是会索表还是会锁行的问题?给我的第一个感觉就是这个还要验证吗。肯定是锁行啊,怎么可能会索表,经过验证之后就被打脸了,要看它加的是行锁或者表锁,需要看sql在执行的过程中是不是用了主键或索引,如果用了主键或索引,加的就是行锁,否则就是表锁。我们这里在mysql5.7上验证一下,先创建一张用户表t_org_user有三个字段的表,分别是id、name、number三个字段,其中id为主键自增序列,...

2022-01-26 16:49:11 1429 1

原创 java实现LRU缓存

LRU指的是最近不经常使用的。LRU缓存指的是当加入新元素时,如果缓存空间不够,需要清理掉原LRU中的一个元素,腾出位置放新元素。LRU缓存算法要求的是清除缓存中最近不使用的元素。这种实现机制可以使用LinkedHashMap来实现比较合适。但有一点需要注意,LinkedHash不是线程安全的,如果有多个线程需要写数据需要进行同步控制。如果需要增加线程同步功能,可以使用Collections工具。通过阅读LinkedHashMap源码可以发现,LinkedHashMap有...

2022-01-26 09:00:27 1085

原创 运行时常量池、字符串常量池、静态常量池、静态变量

静态常量池指的是java代码中定义的常量,经过jvm编译后形成在class文件中的常量区域。所以静态常量池指的是class文件内部。在堆中 运行常量池指的是jvm运行中,将编译后的类放在metaspace区,具体包括class文件辕信息描述、编译后的代码数据、引用类型数据、类文件常量池等。在metaspace区 字符串常量池指的是类加载完成后,经过验证、准备阶段之后放在字符串常量池中。字符串常量池的数据只会存储一份,被所有的类共享。基本流程是:创建字符串之...

2021-12-17 14:11:13 1210

原创 GC Roots引用

当前主流的内存管理子系统都是通过可达性分析算法来判定对象是否存活。这个算法的基本思路是通过一系列称为”GC Roots"的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”,如果某个对象到GC Roots之间没有任何引用链相连,则证明此对象是不可能再被使用的。 在Java技术体系里,固定可作为GC Roots的对象包括以下几种: 在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方...

2021-12-17 09:04:19 469

原创 jmc-jdk1.8

jdk1.8之后,jmc就已经不随着jdk一起发出去了,如果想要使用jmc对jvm进行监控,这时候需要手工下载jmc,然后在本地运行。oracle官网比较坑,现在只有jmc8.1版本下载,它需要jdk11。所以要想使用jmc,则要下载jmc8.1之前的版本,如jmc8、jmc7等。jmc8.0的包已经上传,可以点击下载。博客好像上传不了附件,如果有需要可以留下邮箱。 下载之后,有时候会报如下错误如检测不到jvm等。这时候可以修改JMC目录下的jmc...

2021-12-09 17:45:57 3358 2

原创 java、javac、javap指令应用

在日常工作中,我们新建java工程,写好代码后,现在编译和运行几乎都是通过ide(如eclipse)工具完成。但作为java开发者还是要了解下java虚拟机指令。通过javac和java执行编译java文件和运行class以及jar文件。以windows系统为例解析javac和java指令的使用过程。步骤一:通过eclipse新建java工程步骤二:新建Java工程后,在src目录下新建jvm包步骤三:在jvm包先新建HelloWord.java类,打印“hello world!...

2021-12-05 10:00:09 620

原创 class文件加密和解密

在代码开发过程中,有时候可能需要对一些涉密的代码做加密处理,这里针对class文件的加密和解密写了一个样例作为参考。首先是通过java虚拟机自带的base64加密算法对class文件进行加密,加密成一个字符串。然后再通过一个自定义的类加载器,对字符串进行解密解析成class文件,再加载做初始化。HelloClassLoader类中的长字符串就是Hello.class文件根据base64加密算法生成的一长串字符串。package jvm;import java.io.ByteArra...

2021-12-04 22:33:26 2497

原创 39-组合的总和

给定一个无重复元素的正整数数组candidates和一个正整数target,找出candidates中所有可以使数字和为目标数target的唯一组合。candidates中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为target 的唯一组合数少于 150 个。如输入: candidates = [2,3,6,7], target = 7,输出: [[7],[2,2,3]];如输入: candidates = [2...

2021-10-20 15:52:54 53

原创 34-在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。要求时间复杂度为O(log n) 。输入:nums = [5,7,7,8,8,10], target = 8,输出:[3,4] 时间复杂度为O(log n),则需要使用二分查找算法,这里其实是二分查找算法的一个变种。二分查找不复杂,复杂的就是细节,什么时候该写小于号、什么时候该写等于号......。...

2021-09-30 15:08:16 68

原创 33-搜索旋转排序数组

整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标从0开始计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你旋转后的数组 nums 和一个整...

2021-09-29 19:03:39 91

原创 31-下一个排列

实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。输入:nums = [1,2,3],输出:[1,3,2] 输入[1,2,3],则1,2,3三个元素构成的数组为[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1],则下一个元素为[1,3,2]。具体解析过程看代码注释...

2021-09-29 18:06:06 55

原创 22-括号的生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。如输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]。 不管n为多少,每个位置智能放左括号或者右括号,只有两种情况。因此暴力算法就是对每个位置都进行尝试,如果放左括号不行就放右括号,所以时间复杂度很高。改进算法生效的前提是当括号有效时,则左括号数肯定是等于n,所以遍历的...

2021-09-29 15:27:22 78

原创 21-合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。如输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]。 一般先维护一个头节点,这样可以省掉单独判断输入的两个链表是否为空。package likouhot;import leecodeOff.ListNode;/* * 21.合并两个有序链表 */public class Demo21 { public...

2021-09-28 18:53:23 66

原创 20-有效的括号

给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。 括号这种问题有点抽象,参考了下标准答案给出代码。package likouhot;import java.util.HashMap;import java.util.Map;import java.util.Stack;/* * 20.有效的括号 */public class...

2021-09-28 14:18:34 65

原创 19-删除链表的第n个节点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5] 如果只做一次扫描解不出来。不管用双指针还是栈都不止遍历一次。采用栈的方式,思路很好理解,就是对链表做一次遍历并入栈,然后做出栈,找到第n个栈元素,则该节点即为需要删除的节点。需要用一个额外的栈来存储。一种思路就是双指针,在对链表进行操作时,一般都先在链表的头部维护一个虚拟节点。双指针算法中需要先...

2021-09-27 10:46:36 471

原创 17-电话号码的组合

给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。输入:digits = "23";输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 要求解字母组合,则是从每一个按键中找到选出一个元素,如果要求输出的字母数量就很好求,但这里要的是输出字母,所以比较麻烦。假设入如为23两个按键,输出字母则为从2中选一个字符,从3中再选...

2021-09-26 17:34:01 80

原创 2-两数相加

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。如输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]。 解题过程中需要注意两点:1.进位,如果两数相加,则进1;2.如果有一个链表先遍历结束之后持续遍历的问题。package ...

2021-09-26 15:54:46 61

原创 1603-设计停车系统

请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。请你实现ParkingSystem类:ParkingSystem(int big, int medium, int small)初始化ParkingSystem类,三个参数分别对应每种停车位的数目。bool addCar(int carType)检查是否有carType对应的停车位。...

2021-09-23 20:55:49 62

原创 11-盛最多水的容器

给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。如输入:[1,8,6,2,5,4,8,3,7] 输出:49 相当于是给定一个数组,从数组中选出两个点,计算两个点之间的面积大小。第一步计算初始值的时候肯定是左边选第一个节点、右边选最后一个节点,假设给定的数组height长度...

2021-09-23 16:53:04 81

jvisualvm1.8

jvisualvm1.8

2022-11-18

jmc8.0.0-win32.win32.x86_64.zip

jmc8.0 jdk1.8

2021-12-09

空空如也

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

TA关注的人

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