请叫我黄同学
码龄6年
关注
提问 私信
  • 博客:137,392
    动态:107
    137,499
    总访问量
  • 37
    原创
  • 336,118
    排名
  • 323
    粉丝
  • 0
    铁粉

个人简介:4年经验的java,在博客方面,是个新人,看到博客写的不好方面,多多指教,会把自己平时学的知识,分享给大家,希望可以帮助大家

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2019-04-16
博客简介:

huangqingfeng的博客

博客描述:
会把自己学的知识分享给大家,希望可以帮助到大家,如果觉得写的可以,麻烦你点个赞,觉得写的不好,可以评论指点下
查看详细资料
个人成就
  • 获得257次点赞
  • 内容获得25次评论
  • 获得1,085次收藏
  • 代码片获得215次分享
创作历程
  • 37篇
    2022年
成就勋章
TA的专栏
  • mysql
    12篇
  • 设计模式
    3篇
  • redis
    3篇
  • 并发编程
    8篇
  • 后端
    1篇
  • 运维
    1篇
  • java
    6篇
  • Mybatis
    1篇
  • SpringBoot
    1篇
  • spring
    2篇
  • 高并发
兴趣领域 设置
  • 编程语言
    java
  • 后端
    mysqlspring架构分布式
  • 搜索
    elasticsearch
创作活动更多

新星杯·14天创作挑战营·第9期

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你们参加为期14天的创作挑战赛! 注: 1、参赛者可以进入活动群进行交流、分享创作心得,互相鼓励与支持(开卷),答疑及活动群请见 https://bbs.csdn.net/topics/619626357 2、文章质量分查询:https://www.csdn.net/qc

475人参与 去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Mysql-如何进行慢SQL查询

官方慢SQl查询打开慢日志开关因为开启慢查询日志是有代价的(跟 bin log、optimizer-trace 一样),所以它默认是关闭的:show variables like 'slow_query%';除了这个开关,还有一个参数,控制执行超过多长时间的 SQL 才记录到慢日志,默认是 10 秒。除了这个开关,还有一个参数,控制执行超过多长时间的 SQL 才记录到慢日志,默认是 10 秒。show variables like '%long_query%';可以直接动态修改参数(重启
原创
发布博客 2022.05.01 ·
13550 阅读 ·
8 点赞 ·
0 评论 ·
36 收藏

Mysql-EXPLAIN执行计划详解

如何查看执行计划官方文档执行计划介绍我们先创建三张表。一张课程表,一张老师表,一张老师联系方式表(没有任何索引)。我们先创建三张表。一张课程表,一张老师表,一张老师联系方式表(没有任何索引)。DROP TABLEIF EXISTS course;CREATE TABLE `course` ( `cid` INT ( 3 ) DEFAULT NULL, `cname` VARCHAR ( 20 ) DEFAULT NULL, `tid` INT ( 3 ) DEFAULT NULL ) ENG
原创
发布博客 2022.04.30 ·
1445 阅读 ·
0 点赞 ·
0 评论 ·
5 收藏

Mysql-一条更新语句要经历那些流程

1. Mysql客户端将SQl语句传入MysqlServer层2. 将name=666的数据查找到,实际上,存储引擎去磁盘当中找到这条数据,并加载Buffer Pool当中然后将name=666所在行的数据name字段改为涛哥3. 修改以后不会将修改结果直接修改进磁盘,而是将修改进内存当中,会等待刷脏4. 记录Redo Log,记录Redo Log之后,并将这行记录状态改为prepare(准备状态),并没有commit5. 修改了好了之后,可以提交事务6. 生成操作Bin Log,并将Bin L.
原创
发布博客 2022.04.29 ·
828 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mysql-一条查询语句它到底是怎么执行的?

1. 客户端/服务器通信协议客户端和Mysql服务端建立连接2. 查询缓存(Query Cache)MySQL 内部自带了一个缓存模块。默认是关闭的。主要是因为 MySQL 自带的缓存的应用场景有限,第一个是它要求 SQL 语句必须一模一样。第二个是表里面任何一条数据发生变化的时候,这张表所有缓存都会失效。在 MySQL 5.8 中,查询缓存已经被移除了。3. 语法解析和预处理(Parser & Preprocessor)下一步我们要做什么呢?假如随便执行一个字符串 fkdljask.
原创
发布博客 2022.04.29 ·
3642 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

MySQL-InnoDB 锁的基本类型

路。Mysql官网对锁的介绍锁的基本模式——共享锁第一个行级别的锁就是我们在官网看到的 Shared Locks (共享锁),我们获取了一行数据的读锁以后,可以用来读取数据,所以它也叫做读锁。而且多个事务可以共享一把读锁。那怎么给一行数据加上读锁呢?我们可以用 select lock in share mode;的方式手工加上一把读锁。释放锁有两种方式,只要事务结束,锁就会自动事务,包括提交事务和结束事务。锁的基本模式——排它锁第二个行级别的锁叫做 Exclusive Locks(排它锁),它
原创
发布博客 2022.04.28 ·
200 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mysql-Buffer Pool和Redo Log详解

1. 什么是Buffer Pool?缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。2. Buffer Pool的内存淘汰策略冷热分区的LRU策略LRU链表会被拆分成为两部分,一部分为热数据,一部分为冷数据。冷数据占比 3/8,热数据5/8。数据页第一次加载进来,放在LRU链表的什么地方?放在冷数据区域的头部冷数据区域的缓存页什么时候放入热数据区域?MySQL设定了一个规则,在 innodb_old_blocks_time 参数中,默认
原创
发布博客 2022.04.27 ·
966 阅读 ·
0 点赞 ·
1 评论 ·
2 收藏

设计模式-Factory工厂系列模式详解

1.工厂模式的理解工厂模式的作用是帮助我们创建对象,我们不用自己来创建,根据需要创建的对象的复杂度我们可以把工厂模式分为简单工厂,工厂方法和抽象工厂。2. 简单工厂  简单工厂模式又称为静态工厂方法,他可以根据不同的参数而返回不同的实例,简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。JDK中的简单工厂应用:DataFormat自己写一个简单工厂的案例/** * 简单工厂 */public class SimpleFactory { pu
原创
发布博客 2022.04.26 ·
1011 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

Mysql-详解脏读、不可重复读、幻读

Mysql的事务隔离级别Mysql有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读、不可重复读、幻读的问题。脏读大家看一下,我们有两个事务,一个是 Transaction A,一个是 Transaction B,在第一个事务里面,它首先通过一个 where id=1 的条件查询一条数据,返回 name=Ada,age=16 的这条数据。然后第二个事务呢,它同样地是去操作 id=1 的这行数据,它通过一个 update 的语句,把这行 id=1 的数据的 age 改成了
原创
发布博客 2022.04.25 ·
3664 阅读 ·
3 点赞 ·
1 评论 ·
28 收藏

Mysql-MVCC多版本并发控制详解

1、MVCCMVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使有>读写冲突时,也能做到不加锁,非阻塞并发读。2、当前读像select lock in share mode(共享锁), select for update ; upda
原创
发布博客 2022.04.24 ·
967 阅读 ·
3 点赞 ·
0 评论 ·
2 收藏

设计模式-Strategy策略模式详解

策略模式是什么?策略模式定义一系列算法,封装每个算法,并使他们可以互换,不同的策略可以让算法独立于使用它们的客户而变化。 以上定义来自设计模式之美是不是很抽象,下面我们就用模拟Comparator接口为大家讲解策略模式,首先我定义一个Cat类,里面有weight,height,age 属性public class Cat { int weight, height,age; public Cat(int weight, int height,int age) {
原创
发布博客 2022.04.23 ·
499 阅读 ·
2 点赞 ·
1 评论 ·
0 收藏

设计模式-Singleton单例模式详解以及8种写法

什么是单例模式单列模式是保证在内存之中只有一个实例单列模式的八种写法第一种写法饿汉式 类加载到内存后,就实例化一个单例,JVM保证线程安全。简单实用,推荐使用!缺点:不管用到与否,类装载时就完成实例化public class Mgr01 { private static final Mgr01 INSTANCE = new Mgr01(); private Mgr01() {}; public static Mgr01 getInstance() {
原创
发布博客 2022.04.22 ·
538 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

如何在不加锁的情况下解决线程安全问题

1. 什么是线程安全问题线程安全问题就是多个线程同时对于某个共享资源的访问,导致的原子性,可见性和有序性的问题,而这些问题会导致共享数据存在一个不可预测性,使得程序在执行过程中会出现一些超过预期的一个结果2. 解决线程安全问题的方式一般情况下解决线程安全问题的方式是增加同步锁,常见的是像synchronzied,lock等等,由于导致线程安全问题的根本原因是多线程并行访问。对共享资源加锁之后呢,多个线程在访问这个资源的时候,必须要先获得锁,也就是先获得访问资格,而同步锁的特征是在同一个时刻只允许一
原创
发布博客 2022.04.21 ·
844 阅读 ·
2 点赞 ·
0 评论 ·
2 收藏

CPU飙高系统反应慢怎么排查?

什么是CPUCPU是整个电脑的核心计算资源,对于一个应用程序来说,CPU是最小执行单元是线程导致CPU飙高的原因CPU的上下文切换过多,对于CPU来说,同一个时刻下每个CPU核心只能运行一个线程,如果有多个线程要去被执行怎么办,CPU只能通过上下文切换的方式来执行调度不同的线程,上下文切换需要做两个事情,第一个是保存运行中线程的执行状态,第二个是处于等待中的线程恢复执行,这两个过程需要CPU执行内核相关指令,去实现状态的保存和恢复,如果较多的上下文切换,会占据大量的CPU资源,从而使得CPU无法执行
原创
发布博客 2022.04.21 ·
763 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

死锁的发生原因和怎么避免,写的明明白白

死锁是什么死锁就是两个或者两个以上的线程,在执行的过程中,去争夺同样一个共享资源,造成的相互等待的一个现象,如果没有外部的干预,线程会一直阻塞,无法往下去执行,这样一直处于相互等待资源的线程,我们称为死锁线程。产生死锁的条件互斥条件,共享条件X和Y只能被一个线程占用请求和保持条件,线程T1已经去的共享资源X,在等待共享资源Y的时候,不释放共享资源X不可抢占条件,其他线程不能强行抢占线程,T1占有的资源循环等待条件,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源就是循环等待
原创
发布博客 2022.04.20 ·
341 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

对象的创建过程

如何创建对象在实例化一个对象的时候,JVM首先会去检查目标对象,是否已经被加载并初始化,JVM需要去做的是立刻加载目标类,然后去调用目标类的构造器,去完成初始化,目标类的加载,通过类加载器来实现的,主要就是把一个类加载到内存里面,然后是初始化的过程,主意是对目标类里面的静态变量,成员变量,静态代码块进行初始化,当目标类被初始化以后,就可以从常量池里面去找到对应的类元信息了,并且目标对象的大小,在类加载完成之后呢就已经确定了,所以这个时候,就需要为新创建的对象根据目标对象的大小,在堆内存里面去分配内存空间,
原创
发布博客 2022.04.20 ·
496 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

HashMap如何解决哈希冲突?

1. Hash算法和Hash表了解Hash冲突首先了解Hash算法和Hash表Hash算法就是把任意长度的输入通过散列算法变成固定长度的输出,这个输出结果就是一个散列值Hash表又叫做“散列表”,它是通过key直接访问到内存存储位置的数据结构,在具体的实现上,我们通过Hash函数,把key映射到表中的某个位置,来获取这个位置的数据,从而加快数据的查找2. Hash冲突Hash冲突是由于哈希算法,被计算的数据是无限的,而计算后的结果的范围是有限的,总会存在不同的数据,经过计算之后得到值是一样,
原创
发布博客 2022.04.19 ·
21057 阅读 ·
18 点赞 ·
4 评论 ·
88 收藏

ConcurrentHashMap底层实现原理

1. ConcurrentHashMap的整体架构如图,这是ConcurrentHashMap在jdk1.8中的存储结构,它是由数据,单项链表,红黑树来构成,当我们去初始化一个ConcurrentHashMap实例的时候,默认会初始化一个长度等于16的数组,由于ConcurrentHashMap它的核心仍然是Hash表,所以必然会存在Hash冲突的问题,所以ConcurrentHashMap采用链式寻址的方式,来解决Hash表的冲突,当Hash冲突比较多的时候,会造成链表长度较长的问题,这种会使得Con
原创
发布博客 2022.04.19 ·
6755 阅读 ·
6 点赞 ·
3 评论 ·
32 收藏

wait和notify 为什么要在synchronized代码块中

什么是wait和notifywait和notify是用来去实现多个线程之间的一个协调,wait表示让线程进入到阻塞状态,notify让阻塞的线程被唤醒,wati和notify必然是成对出现的,如果一个线程被线程被wait()方法阻塞,那么必然需要另外一个线程通过notify()方法来唤醒,从而去实现多个线程之间的一个通信在多线程里面呢,要实现多线程之间的一个通信,除了管道流的以为,只能去通过共享变量的方法来实现,也就是说线程t1修改共享变量s,线程t2获得修改后的共享变量s的值,从而完成数据的一个通讯
原创
发布博客 2022.04.18 ·
585 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

基于数组的阻塞队列 ,ArrayBlockingQueue 原理

阻塞队列阻塞队列是在队列的基础上,去增加了两个附加操作,第一个队列为空的时候,获取元素的线程会等待队列为非空,当队列满时,存储元素的线程会等待队列可用,由于阻塞队列的这样一个特性,可以非常容易的去实现,生产者和消费者这样一个模型,也就是说,生产者只需要关心数据的一个生产,而消费者只需要关心数据的一个消费,所以,如果队列满了,生产者就等待,同样队列空了,消费者也需要等待。实现这样一个阻塞队列,需要用到两个非常关键技术是队列元素的一个存储线程阻塞核唤醒ArrayBlockingQueue而Ar
原创
发布博客 2022.04.18 ·
371 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

类加载过程,以及什么是双亲委派?

类的加载机制如图,我们自己写的Java文件到最终运行,它必须要经过编译和类加载这两个阶段,而编译的过程就是.java文件编译成.class文件,而类的加载就是把.class文件加载到JVM内存里面,装载完成以后会得到一个Class对象,我们就可以使用new关键字,来实例化这个对象。一个类从被加载到虚拟机内存中开始,到卸载出内存,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initializat
原创
发布博客 2022.04.18 ·
402 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏
加载更多