自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【隐匿撕源码】从ReentrantLock剖析AQS

前言鼠年新的工作日开始了,新的一年新的工作学习,第一个工作日给自己定一些要求吧。想写一个系列【隐匿撕源码】 剖析各种经典框架,工具,JDK的源码提升自己,同时给大家分享一些心得。这篇文章就作为开端,干就完事了。从ReentrantLock开始ReentrantLock 是JDK给我们提供的显示锁 在功能上远远强于synchronized是功能上 不是性能上,随着JDK版本的一代又一代升级...

2020-02-19 16:52:46 454

原创 【隐匿撕源码】从方法中解剖HashMap(1.7详尽)

前面的话这篇文章只针对hashMapConcurrentHashMap以后会补充 在本文中不会本文需要你要知道一些HaspMap的基础知识 比如说是map是一个key value的键值对形式以及底层是数组+链表的形式、Hash算法、位运算等前置知识本文需要大量结合源码 所以我尽量会把文本内容放在源码里面以图片的方式进行讲解此文会对1.7HashMap源码逐层剖析 做到最详细的Has...

2020-01-09 14:31:00 1429

原创 详解Integer.highestOneBit()

方法结果highestOneBit()这个静态方法是得到小于等于参数的最大2的幂举个例子: System.out.println(Integer.highestOneBit(7)); System.out.println(Integer.highestOneBit(15)); System.out.println(Integer.highestOneBi...

2020-01-09 10:52:00 1516 1

原创 记一次IDEA的优化

首先放一下博主的电脑性能,博主的电脑性能不能说勉强够用,简直是能打能抗,但跑一个小小的idea竟然经常会出现卡顿!我不能忍,于是就想着着手研究一下idea的优化,就有了这篇博客不认真的搜索随便搜索了一下,大概说的就是 调大堆内存啊,之类的。然后我就随便把 最大堆和最小堆变成了 4g。-Xms4g-Xmx4g好吧,看到这里如果你对JVM有一些了解你就会知道,堆越大单次GC时间越长。随意我这个"优化"其实是反作用,优化了个寂寞。于是我打开了arthas准备好好看看。首先是IDEA和用户JVM

2022-01-24 10:44:13 499

原创 利用Spring工具类查找泛型

众所周知Spring框架是一个集各种功能于一体的大成架构。随着时间和版本的推移Spring的功能越来越强大,而且Spring随着Java的版本迭代不断更新升级。其中Spring为我们提供了非常多的工具。只要你使用了Spring,就可以直接在项目里面进行使用。不需要重复造轮子。本文讲解如果通过Spring的工具类进行解析泛型相关操作。org.springframework.core.ResolvableType 核心工具类分别通过下列介绍功能方法相关属性相关类相关前置知识本文需要你

2021-11-30 16:54:41 1212

原创 SpringBoot + Quartz 动态添加任务

@RestControllerpublic class AddJob { @Autowired SchedulerFactoryBean schedulerFactoryBean; @GetMapping("/add") public void init() throws SchedulerException { Scheduler scheduler = schedulerFactoryBean.getScheduler(); Job.

2021-04-26 00:19:24 819

原创 盛最多水的容器

此题其实双for 暴力法是很容易得出答案的之所以写博客是要分析一下双指针问题最开始想双指针的觉得 这题双指针可行吗?答案是可行的 为什么呢我们把两个指针设为 L 和R那么容量就是sum = Math.min(nums[L],nums[R]) *(R-L)假设num[L] <num[R]那么以 L为边界的容器 容量最大值一定不大于 sum如果想通了上面的思路 那么就容易多了因为每次只需要移动指针小的那个我们就能拿到用所有位置当边界的最大值然后比较最大值就可以了 pu.

2020-05-19 10:39:26 120

原创 01 矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1思路:输入数组为 a创建一个二维数组result储存每个元素到0的位置 准备返回创建队储存已经确定长度的位置遍历一遍输入 如果是0就在result对应位置写0 如果不是就写成int最.

2020-05-16 18:38:11 470

原创 Z字形变换

题;将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例:输入: s = “

2020-05-15 10:29:47 207

原创 最长回文子串

题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路:从左到右 每次循环以当前位置为中心向两边扩散 在这里要注意一点 扩散情况需要判断两种 一种是以 aaaabaccccc为例的奇数长度一种是 aabbac为例的偶数长度 他们的中心点不同 public String lo

2020-05-13 10:13:10 106

原创 四数之和

题:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2]

2020-05-11 11:17:15 243

原创 Pow(x,n)

实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10 输出: 1024.00000示例 2:输入: 2.10000, 3 输出: 9.26100示例 3:输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25思路:快速幂等x→x2→x4->x9->x19->x38->x77我们只需要知道每次得到的数字是前一次的二次方还是二次方*x从左到右可能很.

2020-05-09 10:39:40 137

原创 [隐匿的学习笔记]JVM(2)运行时数据区

先来一张运行时数据区的图概览运行时数据区的内容的生命周期是不同的有的是随着虚拟机的开始结束有的是随着每个线程的开始结束而开始结束线程独有:PC寄存器(程序计数器)虚拟机栈本地方法栈进程共享:堆方法区一个程序每有一个线程 就有一组PC寄存器 虚拟机栈 本地方法栈他们共用一个堆、方法区正因为堆和方法区是共用的 所以可能会发生线程安全问题等而我们所谓的JVM调优 ...

2020-05-07 16:16:38 122

原创 顺时针打印矩阵

题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字示例:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]思路: 把所有旋转内容拆分成四步 根据圈数和步数计算每次循环的大小内容更像是个体力活时间击败了97% 内存击败了100%代码: public int[] spiralOrder(int[...

2020-05-06 11:28:28 103 1

原创 访问者模式

概述访问者模式可以将某种固定结构的数据类型 在不改变数据结构的前提下 实现不同的访问方法 起到不改变数据结构呈现不同内容的作用关系类图主要思想是被访问者通过开放接口 允许访问者访问自身内容同时访问者可以通过调用接口拿到被访问者的数据 然后进行自己想要的操作代码实现被访问者被访问者提供方法让访问者可以访问自己本身public abstract class Employee ...

2020-05-03 18:43:16 112

原创 代理模式,手写动态代理

前言动态代理模式主要有两种JDK动态代理 和CGlib动态代理本文分别手写动态代理JDK的动态代理思路1.需要一个接口 定义规则 2.定义实现类实现接口 实现具体功能3.创建代理类,实现InvocationHandler接口,并且定义前置后置各种通知点(我这里用了aop的概念 相信大家都是有spring基础的 所以这点我就不多解释了)4.在客户端中调用代理方法强转后执...

2020-05-01 02:03:57 884

原创 三维形体的表面积

题在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。请你返回最终形体的表面积。 public int surfaceArea(int[][] grid) { int sum = 0; for(int i= 0;i<...

2020-04-30 12:09:52 153

原创 字符串的最大公因子

题:对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。示例输入:str1 = "ABCABC", str2 = "ABC"输出:"ABC思路 先判断两个字符是否能完美组合即 str1+str2 = str2 + str1;...

2020-04-29 09:50:24 83

原创 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)示例输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6题解:暴力法思路 从第二个 到倒数第二个 每一个位置能接受的雨水数量是左...

2020-04-28 17:58:58 120 1

原创 单例模式全解

前言本文会把我所掌握的所有单例模式都写下说实话 写法一大堆 网上一查一大把 我总结一下 同时写一下自己的理解和各种单例模式的关系,也算是一个笔记分类单例模式写法千千万 总共分为四大类:懒汉式饿汉式注册式ThreadLocal1.懒汉式...

2020-04-28 15:33:51 101

原创 最佳的买卖股票时间

题:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。最佳题解: public int maxProfit(int prices[]) { int minprice = Integer.MAX_VALUE; in...

2020-04-28 09:40:41 109

原创 无重复字符的最长子串

题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度例子:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。我的解:public static int lengthOfLongestSubstring(String s) { Map<Character, Integer> map = n...

2020-04-26 00:28:38 90

原创 杨辉三角

题: 输入数字 返回数字层级的杨辉三角 class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> result = new ArrayList<>(); ...

2020-04-24 10:19:35 93

原创 位1的个数

题: 输入一个无符号整数 如1011111110001111 得到这个数字有多少个’1’如 输入 10101 返回3思路 : 循环32次 每次右移一位 判断个位数是否为1 累计个位数为1的次数代码实现:public int num(int i){ int count = 0; for(int j=0;j<32;j++){ count += ((i&a...

2020-04-23 09:43:47 129

原创 【隐匿的学习笔记】JVM(1) 类加载子系统

疫情原因堕落了好久 今天开始正式学习JVM了 记个笔记 写点自己的理解内存结构概述简单画了个图 这是个简图 之后学习的内容会在深入的画详细图类的加载器和加载过程其实就是JVM运行的第一步 讲class文件加载的过程这个过程分为三步 加载 链接 初始化也就是简图中的第一步加载load加载都做了什么?1.通过类的全限定名获取定义此类的二进制字节流----&...

2020-04-17 16:00:14 177

原创 Tomcat9配置单向SSL 实现HTTPS请求

第一步 生成ssl秘钥进入任意目录中 推荐是 tomcat/conf执行keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keystore /opt/apache-tomcat-9.0.31/conf/server.keystore -storepass 123456其中标红的地方是自定义的地方 两个123456 推荐设...

2020-02-28 15:40:05 476

原创 BIO模型手写一个miniTomcat

先理思路开启监听-> 接受请求-> 拿到request 和response ->分发请求到相应的servlet->执行开始动手从包来看这个手写是完全模拟了servlet一整套的流程MyRequestrequest需要一个输入流 得到请求信息 封装好 这个mini版本是基于http协议 拿到method和path就可以了public class MyRe...

2020-01-14 17:12:07 202

原创 NIO三件套

NIO三件套所谓NIO三件套指的是Buffer 缓冲区Channel 通道Selector 选择器Buffer初体验先来简单看一下层级 实现类太多 这里只展示一部分Buffer 缓冲区,其实他没有多么神秘,不管什么实现类 底层都是一个数组 根据具体的实现类不同 数组类型也不同Buffer中维护着三个主要int 变量 private int mark = -1...

2020-01-13 22:27:54 277

原创 稀疏数组的使用及理解

一个五子棋程序在这种程序中 我们需要把五子棋转换为数组形式如果需要一个保存内容 我们需要把内容存盘但是这种11*11的数组 有大量的0 显然不是我们想要的所以我们可以用稀疏数组来解决这种问题稀疏数组介绍稀疏数组也是一个二维数组 他是一个[X][3]的数组 如上图的二维数组可转化:设 原二维数组是【[X][Y]】第一列 [0] 代表二维数组的长度X [1]代表二位...

2020-01-04 18:50:37 582

原创 这里是一个小tips的集合 一点点放在里面把

synchronized锁住对象的到底是什么咧每个对象都有一个对象头 里面包含了各种锁的状态 其实上锁释放锁的过程就是更改对象头中锁的位置。这个对象头中还有很多额外的信息。每一个对象都有一个Monitor监视器锁来监视 线程进入Monitor之后就等于获得了锁 通过MonitorEnter和MonitorExit指令释放和上锁...

2020-01-01 22:53:45 104

原创 ElasticsearchRepository自定义方法

//自定义想执行内容的接口public interface TinceryEsUserDao<T, ID extends Serializable> { void doSomeThing();}//========================================================================================...

2019-12-03 11:49:06 5233

原创 【隐匿的学习笔记】工厂模式笔记

工厂模式自己想说点什么:其实每次学习设计模式 总是工厂模式总是最简单和最容易懂的,但我一直觉得设计模式要结合场景,每个设计模式我总是能在心中模拟一些场景使用,但这个最简单的工厂模式总是举不出例子。于是再重新系统学习一下,(已经记忆 但需深刻理解)简单工厂自我总结: 一个实体类对应一个工厂类 封装了创建实体的过程 但扩展性也不好 而且有我最讨厌的 ifelse (这里其实可以结合策略...

2019-11-19 23:03:25 153 3

原创 最大子序和

2019-10-25 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。class Solution { public int maxSubArray(int[] nums) {...

2019-10-25 10:10:01 93

原创 两数相加

两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...

2019-10-23 15:00:12 137

原创 两数之和

每天一道算法题 2019-10-23题目 两数之和给定一个整数数组nums和一个整数target 请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返...

2019-10-23 12:44:03 78

原创 vue上传文件内容处理

public ResultModel uploadKeyWord(HttpServletRequest req, MultipartHttpServletRequest multiReq) throws Exception { MultipartFile file = multiReq.getFile("file"); String originalFilena...

2019-08-01 21:25:33 568

转载 java对中文按照第一个字首个字母排序

import java.text.Collator;import java.util.Arrays;import java.util.Comparator;public class testComparator{ public static void main(String[] args) { Comparator<Object> com=Collator.getIn...

2019-06-02 18:42:09 222

原创 通过springmvc的类获取方法的参数名

ParameterNameDiscoverer discoverer = new DefaultParameterNameDiscoverer();String[] parameterNames=discoverer.getParameterNames(method);parameterNames这个数组就是参数顺序名称 ParameterNameDiscoverer 这个接口和相应...

2019-04-11 00:02:17 468

转载 【转载】 java 和js互通加密解密

https://www.cnblogs.com/libo0125ok/p/7668026.html

2019-04-01 13:40:47 607

原创 正则验证中文

var chinaReg=/[^\x00-\xff]+/ //验证中文var reg=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/ //验证只能有数字和字母

2019-03-25 15:11:30 156

空空如也

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

TA关注的人

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