自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql缓存机制

MySQL的缓存机制:https://blog.csdn.net/weixin_43932609/article/details/120995005。MySQL缓存机制详解:https://www.cnblogs.com/cqqfboy/p/15175186.html。深入理解MYSQL之缓存:https://zhuanlan.zhihu.com/p/566373668。

2023-03-21 16:12:27 330

原创 Spring Cloud Eureka 快速入门

注册发现中心Eureka 来源于古希腊词汇,意为“发现了”。在软件领域, Eureka 是 Netflix 在线影片 公司开源的一个服务注册与发现的组件,和其他 Netflix 公司的服务组件(例如负载均衡、 熔断器、网关等) 一起,被 Spring Cloud 社区整合为 Spring Cloud Netflix 模块。 Eureka 是 Netflix 贡献给 Spring Cloud 的一个框架!Netflix 给 Spring Cloud 贡 献了很多框架,后面我们会学习到!在分布式 微服务里面

2022-07-11 17:29:00 725

原创 在Mysql中,什么是回表,什么是覆盖索引,索引下推?

mysql回表,索引覆盖,索引下推

2022-07-11 12:51:26 506

原创 下载安装VMWare虚拟机配置centos 7.0镜像

VMware Workstation虚拟机Centos 7.0镜像下载VMware 安装 Centos7(超详细教程):https://blog.csdn.net/weixin_58024114/article/details/125172058

2022-07-08 15:54:56 545

原创 在Mysql中,什么是回表,什么是覆盖索引,索引下推?

mysql回表,索引覆盖,索引下推

2022-06-20 20:38:06 265

转载 排序算法之归并排序

java实现归并排序

2022-06-17 00:25:52 130

原创 Java中的活锁

活锁出现在两个线程互相改变对方的结束条件,最后谁也无法结束,例如public class TestLiveLock { static volatile int count = 10; static final Object lock = new Object(); public static void main(String[] args) { new Thread(() -> { // 期望减到 0 退出循环 while (count > 0) {

2022-05-23 15:53:17 797 1

原创 使用jps和jstack命令定位死锁

衔接Java中的死锁分析先使用jps找出检查的java进程再使用jstack分析进程里的线程jstack 进程id输出的打印信息里有提示死锁发生在哪个线程还有死锁等待的代码在哪行的信息

2022-05-23 14:47:38 226

原创 Java中的死锁

一个线程需要同时获取多把锁,这时就容易发生死锁t1 线程 获得lockA对象锁,接下来想获取lockB对象 的锁 t2 线程 获得lockB对象 锁,接下来想获取 lockA对象 的锁例:@Slf4jpublic class TestDealLock { public static void main(String[] args) { Object lockA = new Object(); Object lockB = new Object();

2022-05-23 14:20:12 486

原创 Park & Unpark

黑马视频教程:https://www.bilibili.com/video/BV16J411h7Rd?p=1081.基本使用park翻译他和wait和notify有点像,都可以用来控制线程的状态。它们是 LockSupport 类中的方法// 暂停当前线程LockSupport.park(); // 恢复某个线程的运行LockSupport.unpark(暂停线程对象)先 park 再 unpark。示例代码,下面代码为线程t1先睡1s再调用LockSupport.park暂停线程,

2022-05-22 23:07:16 119

原创 异步模式之生产者/消费者

黑马视频教程:https://www.bilibili.com/video/BV16J411h7Rd?p=1071.定义消费队列可以用来平衡生产和消费之间的平衡生产者仅负责产生结果的数据,不关心数据如何处理,而消费者专心处理数据的结果消息队列容量有限为空消费者无法消费,满时生产者无法生产。JDK中的各种阻塞队列采用的就是这种模式。2.实现代码注释详细/** * 消息类 */@Slf4jclass Message{ private int id; private

2022-05-22 17:02:51 247

原创 同步模式之保护性暂停

黑马视频讲解:https://www.bilibili.com/video/BV16J411h7Rd?p=98&spm_id_from=333.1007.top_right_bar_window_history.content.click定义英文为Guarded Suspension,用在一个线程等待另一个线程的执行结果。要点:有一个结果需要从一个线程传递到另一个线程,让他们关联同一个GuardedObject如果有结果不断的从一个线程传递到另一个线程那么可以使用消息队列(见生产者/消费

2022-05-19 22:16:29 230

原创 wait notify原理

黑马视频讲解:https://www.bilibili.com/video/BV16J411h7Rd?p=89wait notify 原理owner线程发现条件不满足,调用wait方法,既会进入Monitor锁中的WaiSet集合中变为WAITING状态BLOCKED和WAITING的线程都处于线程阻塞状态,不占用时间片。BLOCKED中的线程会在Owner中的线程释放锁时被唤醒并且非公平的去竞争锁。WAITING状态的线程会在Owenr中的线程调用notify或者notifyAll时唤醒,但

2022-05-17 22:00:57 197

原创 Java对象的组成 && 对象头

参考视频:https://www.bilibili.com/video/BV16J411h7Rd?p=75参考博客:https://blog.csdn.net/weixin_43896929/article/details/121999131?spm=1001.2014.3001.5501一. JAVA对象的组成Java对象由:1. Java对象头 2.实例数据 3.对齐填充字节Java的对象头由以下三部分组成:Mark WordKlass Word(类指针)array length(数

2022-05-14 17:24:43 483

原创 Java中变量的线程安全分析

成员变量和静态变量是否线程安全?如果它们没有被共享也就是只有一个线程访问说明是安全的。如果它们被共享了,则要根据它们的状态是否能改变来判断是否线程安全。那么又分为两种情况:1.如果只有读操作,那么肯定是线程安全的2.如果涉及到读写那么这段代码就是临界区就涉及到了线程安全问题。局部变量是否线程安全?局部变量是线程安全的但局部变量引用的对象则未必1.如果该对象没有逃离方法的作用访问,它是线程安全的2.如果该对象逃离方法的作用范围,需要考虑线程安全总结归根结底就是要判断某个变量指向的

2022-05-12 23:15:14 759

原创 操作系统中进程的五种状态与JAVA中线程的六种状态

操作系统中的五种状态新建:创建新的进程就绪:进程已经获得除CPU时间片以外的任何资源,一旦获得cpu时间片就能立马执行。执行:处于就绪队列中的进程获得了时间片运行进程。阻塞:进程时间片用完进入阻塞队列中等待唤醒。终止:进程执行完毕。JAVA中线程的六种状态java中的线程状态直接看Thread中的State状态源码。1. NEW根据源码中解释 Thread state for a thread which has not yet started.翻译过来就是尚未启动的线程的线程状

2022-05-11 23:25:25 1990 1

原创 两阶段打断终止

两阶段打断终止在线程T1中优雅的终止另线程T2,也就是给线程T2在收到打断指令后不是直接强制的停止T2线程而是给T2一些缓冲时间处理后事,处理完之后T2再自动停止。实现方法无非就是在T2线程中判断自己的线程是否被打断了,被打断了就是执行一些后续操作执行完之后自行退出,加一个if判断即可。代码:@Slf4jpublic class TestTwoInterrupted { public static void main(String[] args) throws InterruptedE

2022-05-11 21:25:07 205

原创 Thread中start与run的区别

start表示启动线程,run只是执行线程体中的run方法并没有启动线程。run方法示例如下:@Slf4jpublic class TestStartAndRun { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread() { @Override public void run() {

2022-05-10 21:43:47 441

原创 线程运行原理-栈帧图解

黑马视频讲解地址:https://www.bilibili.com/video/BV16J411h7Rd?p=21示例结合代码分析线程运行的原理。代码如下,很简单就是main方法中调用m1方法,m1方法再调用m2方法。public class Test01 { public static void main(String[] args) { m1(10); } public static void m1(int x){ int y = x

2022-05-10 18:20:01 731

原创 windos查看与杀死进程

查看进程## 查看所有进程tasklist ## 查看指定进程tasklist | findstr 进程名杀死进程使用taskkill命令,详细命令说明输入taskkill /?即可查看详细的说明。## 强制杀死对应PID进程taskkill /F /PID pid

2022-05-09 23:17:21 343

原创 斜杠“/”与反斜杠“\”的区别

“/”和“\”编程中较常见但没有去具体了解他们有什么不同,所以专门学习了解他们之间的区别,顺便做个笔记。参考路径中 斜杠/和反斜杠\ 的区别“\”与“/”斜杠与反斜杠的区别区别1. 表示路径时“\”为window中的路径分割符“/”为linux,mac中的路径分隔符但是/也可作为windos中的路径使用2.编程语言“\”作为转义用,在字符中\可作为转义字符。如\n换行更多的转义字符如下所示“/”只能作为/字符使用3. 网址的url中“/”可用作表示url中的分隔符,“\”

2022-04-19 18:08:07 29399

原创 mysql实现不重复插入数据

参考:mysql怎样实现不重复插入数据SQLinsert into account(`name`,money) select 'ww',20 where not exists (select * from account where `name` = 'ww');执行前表数据:执行sql的结果和表数据如下:可知已经插入数据。再执行sql返回结果和表数据如下可知无重复数据添加。...

2022-04-06 16:27:21 1862

原创 每日一题 字典序的第K小数字

题目题链:440. 字典序的第K小数字题解官方题解:字典序的第K小数字刚开始试了试直接遍历放到字符串数组中,然后字典排序,然后根据下标取出第k小的字符串转为整形数据,由于 1 <= k <= n <= 109 很明显是超时的。代码: class Solution02 { public int findKthNumber(int n, int k) { String[] strs = new String[n];

2022-03-23 21:27:49 454

原创 @PropertySource注解获取配置文件值

1. 准备application.properties文件文件位置##### MySql DataSourse ####jdbc.driverClassName=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&tinyInt1isBit=false&serverTimezone=Asia/Shanghaijdb

2022-03-17 14:49:44 704

原创 在windows中使用scp命令将文件上传到远端服务器

window自带scp命令上传文件//使用方法:scp 源文件路径 账户@地址:目的路径scp C:\Users\zbh\Desktop\1.txt lucas@192.168.11.150:/home/lucas/下载文件scp lucas@192.168.110.128:/home/lucas/world.txt C:\Users\zbh\Desktop\转自:在windows中使用scp命令...

2022-03-01 18:35:34 3395

原创 java静态代理和动态代理

文章目录一、静态代理例子二、动态代理1. JDK动态代理参考:Java 动态代理详解一、静态代理实现静态代理分三步:主题抽象类或者接口真实对象实现接口方法代理对象实现接口,代理主题例子假设要对一个service进行前后通知,先创建UserService主题接口编写UserService主题package com.yzx.proxy;public interface UserService { void select(); void update();}

2021-10-23 15:52:54 372

原创 (每日一题 day 003 - 二维前缀和+动态规划) 1314. 矩阵区域和

文章目录题目题解解法一:暴力模拟解法二:二维前缀和题目题链:1314. 矩阵区域和题解解法一:暴力模拟直接根据题意,模拟即可,时间复杂度O(n^4)class Solution { public int[][] matrixBlockSum(int[][] mat, int k) { int m = mat.length; int n = mat[0].length; int[][] res = new int[m][n];

2021-10-22 16:50:33 110

原创 springboot自动装配原理

流程分析1. 每个springboot应用程序都是从springboot加了@SpringBootApplication的启动类开始运行,通过@SpringBootApplication注解点进去。2. 点进去发现结果如下图主要看@SpringBootConfiguration、@EnableAutoConfiguration@ComponentScan这三个注解@SpringBootConfiguration:这个注解主要表示当前类是一个springboot配置类。@ComponentS

2021-10-16 20:32:30 172

原创 spring加载bean的流程

BeanPostProcessor和BeanFactoryPostProcessor的区别这两个都是后处理bean的接口BeanPostProcessor:后置处理bean,它是bean级别的,可以在springbean的初始化前后对bean进行增强。使用时直接实现这个接口,然后加到ioc容器中即可。BeanFactoryPostProcessor:他可以对springbean的对beanDefinition进行修改等相关操作,比如可以将beanname为aa指向A对象改为指向B对象。jav

2021-10-15 20:29:46 1573

原创 (每日一题 day 002 - 模拟) 166. 分数到小数

文章目录题目题解题目题链:166. 分数到小数题解使用小学数学的长除法模拟解决,分三步走:判断是否可以直接整除,可以整除直接相除返回结果即可判断符号是否一正一负,是的话转为正数进行相除、并且结果记得添上负号。小数方面的处理、使用一个hashmap判断是否存在循环小数、存在则加上括号、使用stringbulider的insert在出现重复余数的下标插入。没有最后会直接得到小数结果。需要注意的是在求余那一块可能会出现整形溢出的情况、所以改成long进行运算。class Solution

2021-10-03 20:50:45 88

原创 (day 001 - 进制转换) 405. 数字转换为十六进制数

文章目录题目题解解法一:模拟解法二:位运算题目题解解法一:模拟模拟起来很简单、但是负数需要处理、因为都是用补码表示、32位我们不妨直接用负数加上2^32,然后直接进行模拟即可。class Solution { public String toHex(int num) { if (num == 0){return "0";} long _num = num; if (_num < 0){ _num += Math

2021-10-02 23:27:45 297

原创 创建者模式 --- 工厂模式

文章目录一、学习参考二、什么是工厂模式三、三大工厂1. 简单工厂2.工厂方法3.抽象工厂四、总结一、学习参考菜鸟教程:工厂模式博客园:设计模式之工厂模式(factory pattern)二、什么是工厂模式创建者模式的一种、他提供了创建对象的一种最佳方式。工厂模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中。工厂模式可分为简单工厂、工厂方法和抽象工厂模式三、三大工厂1. 简单工厂简单工厂定义一个公共的父类或者接口、根据传入的参数不同创建不同实例。需求:做一个动物简单工

2021-08-31 01:04:01 352

原创 (day 52 - DFS) 剑指 Offer 68 - II. 二叉树的最近公共祖先

题目题链:剑指 Offer 68 - II. 二叉树的最近公共祖先添加链接描述题解K神大佬详细题解:剑指 Offer 68 - II. 二叉树的最近公共祖先(DFS ,清晰图解)本题和他的一版本不同的是这个不是排序二叉树、所以只能用DFS了。DFS时、终止条件是遍历到叶节点没找到返回null、找到了直接返回那个节点,然后回栈到上一节点的时候要加判断条件假设这个节点左右节点都不是空说明这个节点就是最近公共祖先,直接返回这个节点。假设只有左子树为空、右子树不为空说明有一个节点在这个节点的右子树

2021-08-30 00:08:42 170

原创 (day 52 - 二叉搜索树) 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

题目题链:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先题解官方题解:二叉搜索树的最近公共祖先解法一:两次遍历因为是一个二叉搜索树、所以可以很容易找到路径。通过记录两个节点的路径、找到分岔节点就是最近公共祖先。class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { List<TreeNode> pPath = ge

2021-08-29 22:29:31 218

原创 (day 52 - 递归 and 短路逻辑运算符的用法 ) 剑指 Offer 64. 求1+2+…+n

题目题链:剑指 Offer 64. 求1+2+…+n题解K神大佬详细题解:面试题64. 求 1 + 2 + … + n(逻辑符短路,清晰图解)本题的难度在于限制条件太多、说出来可能不行刚开始看成了±都不能用、所以一定要仔细审题。递归即可解决、但判断为零使用到了if这不符合题意、所以可以使用&&运算符,具体看代码。class Solution { public int sumNums(int n) { boolean a = n > 1 &&a

2021-08-29 17:06:28 123

原创 (day 53 - 动态规划 ) 剑指 Offer 63. 股票的最大利润

文章目录题目题解题目题链:剑指 Offer 63. 股票的最大利润题解这道题我用的是贪心、但也可以说是动态规划吧。反正就是从第一个开始遍历、每次都和下一个价格比较小于下一个单价说明涨了、则直接相减,相减值用一个变量和自己比较来维护最大利润。比下一个大就直接等于下一个。class Solution { public int maxProfit(int[] prices) { if (prices.length == 0){ return 0;

2021-08-29 15:47:32 159

原创 创建者模式 --- 单例模式

参考:深入理解设计模式(一):单例模式文章目录一、什么是单例模式二、单利模式的应用场景三、单利模式的优缺点四、实现单例模式1. 饿汉式2. 懒汉式3. 加锁实现线程安全的懒汉式单利一、什么是单例模式单利模式就是单利对象的类只允许一个实例存在。二、单利模式的应用场景三、单利模式的优缺点四、实现单例模式1. 饿汉式顾名思义很饿、这种模式下只要类被jvm加载了就会实例化好对象,并且线程是安全的、应是在类只会加载一次。优点:线程安全缺点:加载就创建、如果一直不用的时候会浪费内存。publi

2021-08-29 02:05:26 116

原创 设计模式六大原则

参考:https://www.cnblogs.com/shijingjing07/p/6227728.html一、设计模式设计模式是前人编写代码的经验总结出来的模板,这些模板可以让编写的代码的质量更高、提高代码的可重用性,可读性、可靠性、可维护性二、六大原则1. 单一职责原则就是一个类应该只能负责一项职责,简单来说就是一个类就是只能提供单一的服务、比如开发一个登录模块,里面肯定要用到一个user的dao类、那么那个dao类就应该只能进行user数据方面的操作、你不能再去操作其他的表的数据、这样就会

2021-08-29 00:59:38 139

原创 (day 52 - 约舍夫环问题 ) 剑指 Offer 62. 圆圈中最后剩下的数字

题目题链:剑指 Offer 62. 圆圈中最后剩下的数字题解经典的约瑟夫环问题K神大佬题解:剑指 Offer 62. 圆圈中最后剩下的数字(数学 / 动态规划,清晰图解)class Solution { public int lastRemaining(int n, int m) { int x = 0; for (int i = 2; i <= n; i++) { x = (x + m)%i; }

2021-08-28 22:16:17 124

原创 (day 52 - 先序后序遍历计数 ) 剑指 Offer 55 - II. 平衡二叉树

题目题链:剑指 Offer 55 - II. 平衡二叉树题解K神大佬详细题解:面试题55 - II. 平衡二叉树(从底至顶、从顶至底,清晰图解)解法一:先序遍历计算左右子树最大深度、然后递归判断是否子树大于1,大于1就不是平衡二叉树。class Solution { public boolean isBalanced(TreeNode root) { if (root == null){ return true; }

2021-08-28 17:48:24 164

空空如也

空空如也

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

TA关注的人

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