自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java如何让方法作为参数传递

没什么好说的,直接上代码。

2022-06-26 12:32:06 494874 5

原创 List线程安全问题

1. 发现问题List<Integer> list = new ArrayList<>();new Thread(() -> { for (int i = 0; i < 10000; i++) { list.add(1); }},"A").start();new Thread(() -> { for (int i = 0; i < 10000; i++) { list.add(1);

2022-04-21 23:09:15 500451 1

原创 解决Docker容器中Mysql中文乱码问题

进入容器,修改/etc/mysql/my.cnf添加如下配置[client]port = 3306socket = /var/lib/mysql/mysql.sockdefault-character-set=utf8[mysqld]port = 3306socket = /var/lib/mysql/mysql.sockcharacter-set-server=utf8[mysql]no-auto-rehashdefault-character-set=utf8重启容器

2022-04-20 23:04:27 495209

原创 Docker容器中安装vim指令

docker exec -it 容器名 /bin/bash #进入容器apt update # 更新apt-get install vim # 安装 vim

2022-04-20 23:03:11 495000 1

原创 Docker - redis集群

1. 创建自定义网络docker network create --driver bridge --subnet 192.168.0.0/16 redis #创建自定义网络docker network inspect redis #查看是否创建成功docker network rm redis #删除网络2. 编写脚

2022-04-20 23:01:10 494978

原创 Linux安装Docker

1. 卸载旧docker$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logr

2022-04-20 23:00:00 484426

原创 LinkedList源码分析

1. 源码分析// LinkedList 源码// list中实际存储元素的个数transient int size = 0;// 头节点transient Node<E> first;// 尾节点transient Node<E> last;// 添加一个元素public boolean add(E e) { linkLast(e); return true;}//list尾插入 void linkLast(E e) {

2022-04-18 22:10:01 497036

原创 ArrayList源码分析

1. 源码分析// 默认大小private static final int DEFAULT_CAPACITY = 10;// 空数组 调用ArrayList构造方法并设置初始大小为0时使用private static final Object[] EMPTY_ELEMENTDATA = {};// 空数组 调用ArrayList构造方法 不设置初始大小时使用private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA

2022-04-17 00:01:41 494694

原创 运行时数据区 - 方法区

① 栈、堆、方法区的交互关系Person person = new Person();//Person => .class方法区//person => 栈//new Person() => 堆空间Java栈空间中的一个Slot存储了person的reference引用,指向堆空间中Person的一个实例,然后堆空间中的Person实例中存在一个对象类型数据的指针,指向方法区中的对象数据类型。② 方法区的理解《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上属于

2022-03-15 21:32:28 488659

原创 jvm - 逃逸分析

堆是分配对象的唯一选择吗?不是。随着Java的发展和逃逸分析技术的逐渐成熟,栈上分配、标量替换优化技术会使原有的绝对堆上分配发生一些微妙的变化。逃逸分析如果一个对象并没有逃逸出方法的话,那么就可能被优化为栈上分配。如果有个对象在方法中被定义,且只在方法内部使用,则认为它没有发生逃逸。当一个对象在方法中被定义后,它被外部方法引用,则认为发生了逃逸。如何将一个会逃逸的对象变成非逃逸对象?//逃逸public StringBuilder test() { StringBuilder

2022-02-23 23:34:07 484660

原创 运行时数据区 - 堆

① 堆的核心概念一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动时就被创建,其空间大小也确定下来(允许参数设置)。是JVM管理的最大一块内存空间。<<Java虚拟机规范>>规定,堆可以处于物理机上不连续的内存空间中,但逻辑上应该被视为连续的。虽然所有线程共享堆,但是堆空间中还有一部分区域被划分为了线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。这是为了提升并发效率而设计的。如果说一个栈空

2022-02-23 23:31:52 494643

原创 运行时数据区 - 虚拟机栈

① 概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点:跨平台,指令集小,编译器容易实现。缺点:性能下降,实现同样的功能需要更多的指令。是什么?Java虚拟机栈,早期也叫Java栈。每个线程再创建时都会创建一个相对应的虚拟机栈,其内部保存着一个个栈帧,对应着一次次的Java方法调用。虚拟机栈是线程私有的。生命周期与线程的生命周期相同。作用管理Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回

2022-02-23 17:14:51 488836

原创 运行时数据区 - 程序计数器

① 介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。PC寄存器用来存储指向下一条指令的地址(即将要执行的指令代码),由执行引擎读取下一条指令。它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是当前方法。程序

2022-02-23 17:13:14 494608

原创 双亲委派机制

Java虚拟机对Class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的Class文件加载到内存生成Class对象。而且加载某个类的Class文件时,Java`虚拟机采用的是双拼委派模式,即把请求交给父类处理,它是一种任务委派模式。如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行。如果父类还存在父类加载器,则进一步向上委托,依次递归。最终请求到达顶层的启动类加载器。如果父类加载器可以完成类加载任务,就由父类加载,倘若无法完成,则才由子类

2022-02-23 17:10:50 484262

原创 JVM - 类加载与子系统

1. 类加载与子系统类加载器子系统负责从文件系统或网络中加载Class文件,Class文件在开头有特定的文件标识。ClassLoader只负责Class文件的加载,至于是否可以运行,则由Execution Engine来决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池(Constant pool)信息,可能还包括字符串字面量和数字常量。1) 类加载步骤① 加载阶段通过一个类的全限定名称获取定义此类的二进制字节流。将Class文件从磁盘或者网

2022-02-23 17:08:34 494294

原创 MySQL题目总结

有关于`SQL`题目

2022-02-22 18:12:08 494180

原创 RabbitMQ+SpringBoot

RabbitMQ文章目录`RabbitMQ`一、简介1. 是什么2. 消息模型3. 应用场景二、`Docker`部署和配置1. 拉取镜像2. 跑3. 访问4. 创建新用户5. 创建`virtual host`三、`Springboot`整合`rabbitMQ`1. `Hello World`① 编写一个消息提供者`Provider`:② 编写一个消息消费者`Consumer`:2. `Work`队列① 编写一个消息提供者`WorkProvider`② 编写两个消息消费者`WorkConsumer1和Wor

2021-09-23 17:37:34 1367

原创 LinkedBlockingQueue

LinkedBlockingQueue是一个可选是否有界的阻塞队列,由链表实现。同其他队列一样,它遵循先进先出(FIFO)规则,队头元素是队列中存储时间最长的元素,队尾是队列中存储时间最短的元素。元素从队头取出,从队尾插入。该队列拥有比ArrayBlockingQueue更高的吞吐量,但是在高并发情况下的可预测性能较差。LinkedBlockingQueue源码:/** Lock held by take, poll, etc */private final ReentrantLock takeL

2021-09-16 16:47:23 388

原创 ArrayBlockingQueue

ArrayBlockingQueue是一个有界的队列,遵循先进先出规则,头部存放的永远是该队列中存储时间最长的元素,尾部是存储最短时间的元素。新元素从队列尾部进入,从头部取出元素。该队列一旦被创建,就无法改变其容量。 /** * Creates an {@code ArrayBlockingQueue} with the given (fixed) * capacity and default access policy. * * @param capac

2021-09-15 23:32:09 240

原创 ConcurrentLinkedQueue

ConcurrentLinkedQueue是一个无界的,线程安全的队列,遵循FIFO先进先出规则。当使用多线程访问需求时,该队列是一个不错的选择,和其他并发集合类似,它也不接受Null元素否则将抛出NullPointerException。//其offer方法的首行调用该方法检查空值。private static void checkNotNull(Object v) { if (v == null) throw new NullPointerException();}该

2021-09-15 11:22:57 233

原创 PriorityQueue优先队列

PriorityQueue即优先队列,是一个无界限队列。基于优先级堆,使用平衡二叉堆实现,底层体现是数组。transient Object[] queue; // non-private to simplify nested class access引用java8源码中PriorityQueue的类注释来说:其队列中所有元素都按照它们的自然排序方法**(实现Comparable接口),或通过在创建对象时传入比较器(Comparator)**完成排序。但在两种方式同时存在的情况下:优先使用Compa

2021-09-06 17:46:16 147

原创 谷歌页面排名算法 - 未完

一、PageRank算法原理一个合格的收索引擎,它所具备的最基础的功能便是网页搜索,根据用户给出的关键字查询出最匹配,最能满足用户需求的页面。那么搜索引擎到底应该如何排序才好呢?这在谷歌引领互联网搜索引擎之前,人们为此伤透脑筋,想出了一些最初的办法。人们认为,应该如何得知哪个网页是最重要的这件事,应该由顾客自己来决定,如果计算得出哪个网页更重要,那么它就应该排在靠前的位置,这个问题看似容易,但实则解决方式并没有想象中的那么简单。在网页排名算法诞生初期,人们对页面排序的想法以及实现策略基本一致。他们

2021-08-26 11:42:19 285536

原创 MySQL存储过程

MySQL存储过程一、简单应用1. 结束符DELIMITER $$ #应用于shell指令行2. 声明存储过程CREATE PROCEDURE 名称(入参或回参)3. 开始与结束符BEGIN...END4. 变量赋值SET @变量名 = 15. 定义变量DECLARE 变量名 int unsigned default 100;6. 存储过程体create function 存储函数名(参数)7. 调用存储过程call 存储过程名(入参)8. 删除存储过程

2021-08-24 11:50:23 287173 1

原创 Shell编程

1. 如何开始打开Linux终端,使用指令创建文件,以.sh结尾,拓展名不重要,并不影响脚本的执行。但是通常会设置为.sh表示此为一个shell脚本。vi / vim #创建文件2. 输出1. vim output.sh //创建文件2. echo "hello shell" //文件内编辑3. wq编辑后使用wq指令完成编辑。3. 运行脚本chmod +x ./output.sh #运行权限./output.sh./output.sh & #后台运行j

2021-08-09 21:24:48 313969 2

原创 时间复杂度和空间复杂度

1. 时间复杂度常数阶O(1)对数阶O(logN)线性阶O(n)线性对数阶O(nlogN)平方阶O(n²)立方阶O(n³)K次方阶O(n^k)指数阶(2^n)从上而下时间复杂度越来越大,执行效率越来越低。① 常数阶O(1)无论代码执行了多少行,只要没有循环等复杂结构,那么这段代码的时间复杂度就是O(1)。② 线性阶O(n)for(int i = 0; i<= n; i++) { //todo}这段代码,for循环里的代码将执行n次,消耗的时间和变量n是成

2021-08-09 05:23:49 313965

原创 MapStruct - [领域驱动模型] 优雅的转换do,vo,dto

MapStruct1. 官网https://mapstruct.org/documentation/stable/reference/html/#_apache_maven2. Github项目地址3. 引入Maven依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/200

2021-08-09 05:12:43 314671

原创 常用排序算法 - Java实现【待完善】

1. 冒泡排序Bubble Sort相邻元素进行比较,如果a(n) > a(n + 1)则交换。一轮交换完毕后,可以确保最后一位a(length - 1)为最大。第i次比较完成后,可以确保length - 1 - i ~ length - 1位为数组中最大数的递增排序。由于在排序尚未结束的时候可能已经排序成功,可以使用一个变量标记之前的一轮排序是否存在交换,若没有进行任何交换则已排序完成。最快:待排序数组是已经满足排序要求的。最慢:待排序数组与排序要求正好相反。/** * @Autho

2021-08-09 05:08:09 313889

原创 堆、栈、常量池

1. 常量池常量池用于存放被Public static final修饰的字段。例如当我们创建常量时:例如Public static final String str = "something";时,会在常量池存储"something"。常量池的优势是可以避免频繁的创建和销毁对象而影响性能,且在常量池中的变量实现了共享。当在程序运行中执行String str = "abc"时,不会在常量池存储新的abc,而是首先检查常量池是否存在"abc",若存在,则在栈中创建String str对象存储常量池中ab

2021-08-07 00:37:09 314807

原创 数据库高级/一篇搞定MySQL优化,索引优化(最详细)

MySQL优化一、MySQL架构介绍1、MySQL简介二、索引优化分析三、查询截取分析四、MySQL锁机制五、主从复制一、MySQL架构介绍1、MySQL简介一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库里,这样可以增加速度并提升灵活性。开源的,无需支付额外费用。支持大型的数据库,可以拥有长千万条记录的大型数据库。32位操作系统最大可支持4GB,64位操作系统最大的表文件为8TB。

2020-10-03 02:19:22 316363 7

原创 Java调用腾讯云短信API实现发送短信验证码完整。(详细,内附工具类)

此先声明,本博文并不是为了推销腾讯云短信产品。只是因为腾讯云短信SDK的使用指南讲的不是很详细,觉得肯定有很多人像我一样被搞的一头雾水。所以专门发一篇关于使用短信接口的博文,为了记录,也为了帮助和我走同一条路的朋友。一.短信验证码效果图二.实现前提条件1>腾讯云短信API的SDKAppleID和AppKey。这两个需要购买腾讯云短信接口后由腾讯提供,详细步骤后面讲。2>配...

2019-10-14 23:33:28 321687 16

java腾讯云短信API所需jar包(完整).rar

使用腾讯云短信API所使用的工具类,jar包。由于官网下载较慢且不完整,所以整理了一下全部上传。下载后可以直接导入编译器使用。

2019-10-14

空空如也

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

TA关注的人

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