- 博客(35)
- 资源 (6)
- 收藏
- 关注
原创 IDEA自动生成方法注释,带参数,不会格式错乱
设置路径Settings -> Editor -> Live Templates这里先选择 2. Template group 建立一个分组,用来存放我们自定义的模板。再选择 1. Live Template,Abbreviation这里记得是两个星号Template text** * $VAR1$ * <br/>$params$ * @return $returns$ * @author yuanss * @date $date$ $time$ */
2021-07-14 17:27:22
843
原创 Tomcat源码学习第4篇 - Servlet请求分析
前段时间家里有事忙,停更了好长一段时间,这里跟等待更新的小伙伴们说一声抱歉,没能提前说明一下,让小伙伴们等了这么久,真的不好意思!前面说完了Tomcat的初始化和启动步骤,那么接下来就要进入重头戏了!在本篇文章中,我会跟前面一样,通过图文的方式来带着小伙伴们了解一个 Servlet是如何被tomcat处理的,具体的处理链路都有哪些。一、请求分析在《Tomcat源码学习第2篇》中备注了各个组件的说明。当一个servlet请求到来的时候,首先经过的是connector组件,它是用来接收请求的。该组.
2021-05-04 00:07:59
841
16
原创 Tomcat源码学习第3篇 - Bootstrap的启动过程
上一篇我们看了Tomcat中各个组件的init过程,初始化赋值好了,那么接下来就该轮到start了,话不多说,马上进入主题~1. Bootstrap.start()通过start方法我们可以看到他是通过反射调用了 Catalina.start()方法,按F7跳到这个类里面看一下。public void start() throws Exception { if (catalinaDaemon == null) { init(); } // 通过反射调用 Cata
2021-03-26 23:43:59
693
原创 Tomcat源码学习第2篇 - Bootstrap的初始化加载
在上一篇中我们说到Tomcat的启动入口是Bootstrap,那么今天我们就来研究一下,Bootstrap类在启动main方法之后是如何进行各项初始化来提供后续程序的运行的。1. Bootstrap.main()方法在main方法中我们可以看到,首先是创建了一个Bootstrap对象,并行初始化了一些相关的类加载器等操作,然后将创建的对象赋值给了 daemon,然后通过运行时附带的参数来选择它后续对应的操作,这里我们直接看到 start 这里。(具体参数携带可以查看Tomcat项目的bin/startu
2021-03-19 22:32:10
271
原创 Tomcat源码学习 - 环境搭建
一. 源码下载在开始阅读源码之前,我们需要先构建一个环境,这样才能便于我们对源码进行调试,具体源码我们可以到官网进行下载(这里我以8.5.63版本为例)。二. 项目导入下载并解压 apache-tomcat-8.5.63-src.zip。然后进入 apache-tomcat-8.5.63-src 目录,新增一个 pom.xml 文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apach
2021-03-11 23:55:17
208
原创 Java获取微信公众号新增用户事件
Java获取微信公众号新增用户事件一、新建项目工程二、配置三、相关类四、内网穿透(有域名的这一步可以省略)五、微信公众平台接口测试账号一、新建项目工程新建一个spring项目填写 Group 和 Artifact 信息这步可以直接跳过,后面再按需导入选择工程地址二、配置pom.xml<dependencies> <!-- spring相关包 --> <dependency> <groupId
2021-02-28 17:57:37
304
原创 LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题。官方链接:https://leetcode-cn.com/problemset/all/一、题意难度:中等https://leetcode-cn.com/problems/integer-to-roman/罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。字符 数值
2021-02-09 21:18:08
238
原创 JAVA基础系列 - 第8篇: API
学习目标APIString类StringBuilder类内容1.API1.1API概述什么是API API (Application Programming Interface) :应用程序编程接口java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。1.2如何使用API帮助文档打开帮助文档
2021-02-05 21:10:53
94
原创 Java学习路线
人狠话不多,上来直接开大这是我收集的Java相关学习视频,基础/进阶,Web,框架,容器,中间件,项目管理,操作系统等等应有尽有。排名不分先后,以你接受程度为准,哪一套视频你觉得听起来好接受,易吸收,那你就听那套就行了。学习的过程中记得要跟着敲起来,切记不要看过就算会了,代码量必须要堆起来!!!等你把前面的各个模块都学完了,实战项目也敲过了,那么基本的CRUD工作也能胜任了,剩下的就需要靠后面的官方链接,自己再去进行深入的了解学习了,官方文档,框架源码等~同时天涯沦落人,让我们一起撸起袖子加油干吧
2021-02-01 18:19:26
106
原创 LeetCode刷题笔记 - 11.盛最多水的容器
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题。官方链接: https://leetcode-cn.com/problemset/all/一、题意难度:中等https://leetcode-cn.com/problems/regular-expression-matching/给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (
2021-01-26 09:37:26
210
原创 JAVA进阶系列 - 并发编程 - 第5篇 Thread API
在上一篇中介绍了 Thread 类的构造方法,可是光有构造方法也不够,我们还得再学习多一些该类常用的 API 才行,这样才能对该类有更深刻的了解,同时也能让我们有更多的选择。Thread类提供的API有几十个,由于篇幅问题,本篇文章仅选择几个有代表性的来进行讲解。剩余的API小伙伴们感兴趣的可以通过源码进行查看,也可以给我留言,我们共同探讨共同学习。目标currentThreadsetPriorityyieldsleepinterruptinterruptedjoin内容1.
2021-01-23 17:43:52
103
原创 JAVA进阶系列 - 并发编程 - 第4篇 Thread
目标 线程的命名 线程的父子关系 Runnable 内容1. 线程的命名在构造线程的时候可以为线程指定一个有意义的名称,这是一种比较好的做法。尤其是在一个线程比较多的程序中,为线程赋予一个包含特殊意义的名称有助于问题的排除与线程的跟踪,方便开发者在程序出错时进行回溯。1.1. 线程的默认命名在 Thread 的构造函数中有几个方法并没有为线程提供命名参数,具体方法如下: Thread() Thread(Runnable) Thread(
2021-01-13 17:42:40
145
原创 JAVA进阶系列 - 并发编程 - 第3篇 线程的生命周期
目标 线程的生命周期 线程的状态定义 线程的状态转移 内容1. 线程的生命周期说明上一篇文章中,我们简单的描述了同步与异步的差异以及线程的基本使用。那么今天我们就来了解一下线程的生命周期。在调用了 Thread 类对象的 start 方法来启动 Java 线程后,对应的底层操作系统线程不能马上得到 CPU 时间片来执行,需要等待操作系统的调度。所以,为了便于跟踪 Java 线程的执行情况,Thread 类定义了一系列的线程状态来表示当前线程的执行情况,同时整个线程的
2021-01-13 17:04:05
127
原创 JAVA进阶系列 - 并发编程 - 第2篇 线程应用
目标线程应用内容1. 线程应用在上一篇中,我们简单的讲解了进程、线程、并发、并行的一些基础概念。那么在本篇中,我们就来对线程入个门,学习一下线程的基本使用。1.1. 利用线程进行异步调用在常规的代码块中,我们的程序都是由上到下按序执行的,如果中间有一段耗时较长的命令在执行,那么在它下面的命令,哪怕是没有关联的,也必须等待他执行结束才能执行,如下图所示:图中可以看到,程序从开始到结束一共运行了10秒钟。它在运行到sleep()这一行的时候就一直在等待方法的运行,直到它运行结束了,程序才会继
2020-12-26 01:03:36
172
原创 SpringCloud整合Seata报错no available server to connect. 源码跟踪
SpringCloud整合Seata报错no available server to connect. 源码跟踪通过控制台提示来到 NettyClientChannelManager 类中, 全局搜索 no available server to connect. 找到方法入口进入 getAvailServerList() 找到 availList 来源通过lookup()跳转到对应配置实现类通过 getAllInstances() 入口拿到所有实例查看 servi
2020-11-01 19:26:16
1698
原创 Nacos1.3.2 + Seata1.3.0 + MySQL8 + SpringCloud 排坑笔记
本文章主要是记录这几个组件的组合搭建, 以单机环境为例, 集群环境有待后续尝试.Nacos1.3.2 + Seata1.3.0 + MySQL8 + SpringCloud 排坑笔记一. Nacos1. 创建数据库(MySQL): nacos_config, 运行 conf 文件夹下 nacos-mysql.sql 文件2. 将 application.properties 文件中 db 属性值修改为自己的数据库相关信息3. 将 bin/startup.cmd(Win10环境) 中的 MODE 属性修改为
2020-10-22 23:22:27
1182
10
原创 Docker搭建MySQL8主从环境
Docker搭建MySQL8主从环境1. 拉取mysql镜像2. 创建挂载目录3. 创建容器4. 进入容器,登录MySQL5. 更改账户加密方式6. 查看主机状态7. 从机配置8. 启动从机9. 远程访问权限1. 拉取mysql镜像# 没加版本号默认最新版 latestdocker pull mysql2. 创建挂载目录mkdir /home/docker/mysql/writemkdir /home/docker/mysql/read# 目录权限设置chmod 0777 /home/d
2020-08-27 23:40:07
219
原创 Java源码剖析34讲学习笔记~6
谈谈你对锁的理解,如何手动模拟一个死锁死锁锁相关面试问题死锁指两个线程同时占用两个资源又在彼此等待对方释放锁资源演示代码public class LockExample { public static void main (String[] args) { deadLock(); // 死锁 } private static void deadLock() { Object lock1 = new Object();
2020-07-16 15:42:37
187
原创 Java源码剖析34讲学习笔记~5
synchronized 和 ReentrantLock 的实现原理是什么? 它们有什么区别?synchronizedReentrantLock1.6版本之后区别考点Java 中每个对象都隐式包含一个 monitor(监视器) 对象加锁的过程其实就是竞争 monitor 的过程当线程进入字节码 monitorenter 指令之后线程将持有 monitor 对象, 执行 monitorexit 时释放 monitor 对象当其他线程没有拿到 monitor 对象时, 则需要阻塞等待获取该对象syn
2020-07-15 00:37:06
167
原创 Java源码剖析34讲学习笔记~4
详解 ThreadPoolExecutor 的参数含义及源码执行流程前言经典回答1. 构造方法2. execute()3. addWorker()相关面试题前言在阿里巴巴的开发者手册中针对线程池有如下说明:【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。说明: Executors 返回的线程池对象的弊端如下:1) FixedThreadPool 和 SingleT
2020-07-13 14:44:03
288
原创 Java源码剖析34讲学习笔记~3
线程的状态有哪些? 它是如何工作的?1. 线程状态2. 延伸面试题1. 线程状态public enum State { /* * 新建状态 * - 线程被创建出来, 但尚未启动时的线程状态 */ NEW, /* * 就绪状态 * - 表示可以运行的线程状态, 它可能正在运行, 或者是在排队等待操作系统给它分配CPU资源 */ RUNNABLE, /* * 阻塞等待锁的线程状态 * -
2020-07-07 23:02:17
233
原创 Java源码剖析34讲学习笔记~2
HashMap 底层实现原理是什么? JDK8 做了哪些优化?1. 数据结构2. 相关面试题3. JDK1.8源码中包含属性1. 数据结构1.7 数组 + 链表1.8 数据 + 链表 + 红黑树(链表大于8并且总长度大于64)2. 相关面试题JDK 1.8 HashMap 扩容时做了哪些优化?通过高位运算 (e.hash & oldCap) 确定元素需要移动, 例如:key1信息如下:- key1.hash = 10 0000 1010- oldCap = 16 000
2020-07-07 00:05:08
196
原创 高性能MySQL实战学习笔记~1
MySQL体系结构与存储引擎一 MySQL体系结构1. Client Connectors2. MySQL Server3.Service & utilities4.SQL Interface5.Parser6.Optimizer7.Caches8.Pluggable Storage Engines9.File System二 SQL的执行流程1. select2. insert三 存储引擎及其分类1. 存储引擎2. 分类四 InnoDB存储引擎体系结构1. 实例层1-1 master thread
2020-06-28 01:07:43
429
原创 JDK源码学习笔记~HashMap.put()
JDK源码学习笔记~HashMap.put()上一篇文章撸了Arrays.sort(),感觉受益匪浅,今天再来学习一下HashMap.put()的底层究竟是如何实现的.入口案例package test.hashmap;import java.util.HashMap;import java.util.Map;public class TestHashMap { public static void main(String[] args) { // 入口一 Map&
2020-05-31 14:00:35
375
原创 JDK源码学习笔记~Arrays.sort()
最近在LeetCode上刷题,刚好遇到一个数组排序的问题,发现使用JDK自带的Arrays.sort()排序方法比大多数的常见排序算法快,所以赶紧跑来了解学习下Arrays.sort()底层究竟是如何实现排序的.具体的JDK源码阅读环境的搭建可以参考我另一篇博客(打个广告؏؏☝ᖗ乛◡乛ᖘ☝؏؏)JDK源码阅读环境搭建(ps: 如果找不到tools包的小伙伴们,看看是不是当初安装jdk的时候将...
2020-04-05 02:03:45
503
原创 JDK源码阅读环境搭建
内容来源B站Up主: CodeSheep视频: https://www.bilibili.com/video/BV1V7411U78L感谢大佬分享学习心得 Thanks♪(・ω・)ノ~~~1. 新建项目新建JavaSourceLearn项目新建source包存放源码新建test包存放测试案例2. 获取JDK源码打开Project Structure选择J...
2020-03-29 00:33:21
1549
原创 LeetCode笔记~1351.统计有序矩阵中的负数
给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。请你统计并返回 grid 中 负数 的数目。示例:示例 1:输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]输出:8解释:矩阵中共有 8 个负数。示例 2:输入:grid = [[3,2],[1,0]]输出:0...
2020-03-27 22:24:59
169
原创 LeetCode笔记~ 75.颜色分类
75.颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:示例 1:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序...
2020-03-26 21:20:47
218
原创 LeetCode笔记~5364. 按既定顺序创建目标数组
给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:目标数组 target 最初为空。按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。重复上一步,直到在 nums 和 index 中都没有要读取的元素。请你返回目标数组。题目保证数字插入位置总是存在。示例:示例 1:...
2020-03-25 15:28:12
216
原创 LeetCode笔记~945. 使数组唯一的最小增量
945. 使数组唯一的最小增量给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例:示例 1:输入:[1,2,2]输出:1解释:经过一次 move 操作,数组将变为 [1, 2, 3]。示例 2:输入:[3,2,1,2,1,7]输出:6解释:经过 6 次 move 操作,数组将变为 [3, 4, 1...
2020-03-22 15:00:15
180
原创 LeetCode笔记~409. 最长回文串
409. 最长回文串给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例:输入:"abccccdd"输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。个人思路解析class Solution {...
2020-03-21 20:56:06
198
原创 笔记: SpringBoot + VUE实现数据字典展示功能
最近一直在写前端,写得我贼难受,从能看懂一些基础的代码到整个前端框架撸下来鬼知道我经历了啥(;´д`)ゞ项目中所用到的下拉菜单的值全部都是有数据库中的数据字典表来提供的,显示给用户的是的清晰的意思,但是很多实体类中保存的数据都只是"1"或者"0"下拉菜单部分渲染<el-col :xs="12" :sm="12" :md="12" :lg="12"> <el-form-...
2020-02-28 23:15:47
3728
1
原创 收藏两个国际手机号码正则
https://blog.youkuaiyun.com/mrhaoxiaojun/article/details/81281420https://blog.youkuaiyun.com/yimcarson/article/details/85266960感谢大佬们的无私分享
2020-02-19 10:26:07
196
原创 JSON parse error: Cannot deserialize value of type `java.util.Date` from String
DateTimePicker + @DateTimeFormat(“yyyy-MM-dd HH:mm:ss”)日期格式转换异常最近在做的一个项目使用的日期格式是yyyy-MM-dd HH:mm:ss格式的,在后端Java与MySQL这边的转换中一开始格式没有统一间歇性的就会报异常,后面采用了一个@DateTimeFormat(“yyyy-MM-dd HH:mm:ss”)注解标注在属性上规范了 D...
2020-01-22 10:15:45
3105
1
openjdk 1.8 离线 rpm 安装包
2020-12-16
keepalived 离线 rpm 安装包
2020-12-16
nginx1.18.0 离线 rpm 安装包
2020-12-16
RedHat8.2 gcc rpm离线安装包
2020-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人