自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Dockerfile ADD failed : No Source files were specified

学习使用 idea 中的插件 docker 实现远程自动部署时,遇到这个问题弄了好久。。Dockerfile ADD failed : No Source files were specified意思是添加源文件失败。在 idea Run/Debug Configurations里配置Dockerfile 路径的时候,idea 自动给我指定了Context foder路径,导致出现错误。应该自己指定 jar 包的路径,如下图。Dockerfile 文件FROM java:8VOLUME /tm

2021-09-15 21:29:01 5714

原创 final、finally、finalize区别

final、finally、finalize区别finalfinal 关键字可以对类、方法、变量进行修饰。对类进行修饰,表示该类不能继承;对方法进行修饰,表示该方法不能被重写;对变量进行修饰,表示该变量不可变(引用变量不一样)。final修饰的类,可以防止API 使用者更改基础功能,比如 String 类是不可变的,如果String不用final修饰,可能就会出现意料之外的错误,这样在某些程度上,可以保证平台的安全。使用final修饰参数和变量,让数据不可变,避免后序因为改变数值而造成程序错误,有

2021-09-03 21:47:15 215

原创 java 中对 Exception 和 Error的理解

java 中 Exception 和 Error在java中 Exception 和 Error 都是继承 Throwable ,说明他们是可以被捕获和抛出的。Exception 是程序运行时可以预料的情况,并且应该捕获,做出对应处理,例如NullPointerException。Error 可能是不常出现的情况,发生Erro 可能导致程序不能正常运行,所以不便于也不建议捕获Error,例如OutOfMemoryError。Exception 又分为可检查和不可检查的异常。不可检查异常,又叫

2021-09-03 15:16:03 329

原创 Shenandoah 和 ZGC 收集器总结

阅读前提:了解G1 等收集器。Shenandoah前言: Shenandoah 并不是Oracle 官方的收集器,所以 OracleJDK 甚至明确拒绝使用这个高效的垃圾收集器,商用的话可以使用OpenJDK。该收集器与 G1 的不同有:G1的回收阶段是可以多线程并行的,但是不能与用户线程并行,但是Shenandoah 回收阶段是可以与用户线程并发的,使用了转发指针等技术。Shenandoah 默认不使用分代收集,然而G1 是分新生代和老年代这些的,所以没有专门的新生代和老年代的 Regi

2021-09-03 09:38:27 299

原创 CopyOnWriteArrayList

CopyOnWriteArrayListCopyOnWriteArrayList类是 JUC 下面的一个并发 List ,适用于对读要求高的场景,因为CopyOnWriteArrayList类读取数据的时候是不加锁的,写入不会阻塞读取操作,只有写与写之间会阻塞,读的性能得到了大幅提升。public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Seria

2021-09-01 20:21:36 81

原创 JDBC破坏双亲委派机制--源码解析

JDBC破坏双亲委派机制java有自己的一套 资源管理服务JNDI 等等,是由启动类加载器加载的,说明类是放在rt.jar包中。java提供Driver接口,厂商根据自己的需求实现功能。双亲委派机制:当前类加载器收到类加载的请求后,先不自己尝试加载类,而是先将请求委派给父类加载器,调用父类的 loadClass() 方法,这是一个递归的过程(因此,所有的类加载请求,都会先被传送到启动类加载器),只有当父类加载器加载失败时,当前类加载器才会尝试自己去自己负责的区域加载。所以判断是否破坏双亲委派机制的一个

2021-09-01 19:08:00 475 1

原创 MySQL8出现问题:Public Key Retrieval is not allowed

今天在看JDBC 中 SPI服务源码的时候,连接本地的MySQL居然出现问题,报错com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed。解决方法:在连接URL后面添加allowPublicKeyRetrieval=true。例如,我的URL是jdbc:mysql://localhost:3306/blog?useUnicode=true&

2021-08-31 16:56:32 138

原创 在JDBC中发现SPI服务

什么是SPI?SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。在Dubbo、JDBC中都使用到了SPI机制,java就是通过 ServiceLoader.load() 方法获取到实现类的实例的,达到调用外部服务接口的目的。简单看看在JDBC是如何实现SPI服务的。JDBC连接准备 String url = "jdbc:mysql.

2021-08-31 16:48:15 126 2

原创 Nginx显示中文乱码问题

字符集的问题在nginx代理里面写一行:charset 'utf-8';,就可以了。成功现实中文。

2021-08-31 12:20:10 4608

原创 线程安全与锁优化有哪些?

文章目录13. 线程安全和锁优化13.1 java语言中的线程安全13.1.1 不可变13.1.2 绝对线程安全13.1.3 相对线程安全13.2 线程安全的实现方法13.2.1 互斥同步13.2.2 非阻塞同步13.3 锁优化13.3.1 自旋锁13.3.2 锁消除13.3.3 锁粗化13.3.4 轻量级锁13.3.5 偏向锁13. 线程安全和锁优化线程安全的简单定义:多个线程同时访问一个对象的时候,如果不考虑线程的交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的

2021-08-31 11:59:55 125

原创 破坏双亲委派模型的情况

破坏双亲委派模型双亲委派主要出现过三次较大规模的“被破坏”的情况。JDK1.2之后,为避免loadClass()被子类覆盖的可能,建议用户重写findClass()方法JNDI作为java的标准服务,需要调用启动类加载器不认识的外部接口(其他厂商实现的)IBM公司OSGI实现模块化热部署的关键是自定义类加载器机制,更换Bundle(程序模块)时,类加载器也会被换掉,然而类加载机制与双亲委派机制不同。第一种情况问题:类加载器的概念和抽象类的概念在java的第一个版本中就出现了,但是在jdk

2021-08-31 10:01:24 441 1

原创 进程调度算法

进程调方式非抢占式进程分配到处理机时,就会一直执行下去,不会被其他进程抢占,直到该进程完成或被阻塞。抢占式允许调度程序根据某种原则,去暂停某个正在执行的进程,将以分配的处理机重新分配给另一进程。这样可以防止一个长进程长时间地占用处理机。主要原则:优先权原则,优先级高的进程可以占用当前进程;短进程优先原则,短进程可以抢占当前长进程的处理机;时间片原则,当前进程的时间片用完,执行其他进程。轮转调度算法(RR)原理在轮转(RR)法中,系统根据 FCFS(

2021-08-30 21:33:28 205

原创 Java集合(List、Set、Map)总结一览图

个人主页:www.seeyj.top

2021-08-30 14:49:24 182 1

原创 HashMap头插法多线程形成环,导致死循环

过程在 jdk 1.7 及以前HashMap使用头插法,多线程的情况下容易形成环。假设在下标为1处有一个长度为2的链表,如果再次插入一个节点,就需要resize()扩容。此时两个线程A和B执行put()操作,A线程先执行,执行完transfer () 中的Entry<K,V> next = e.next;被挂起,此时e指针指向5,next指向7,如图所示。此时线程B执行,将数组扩大两倍,链表仍散列在下标为1处,由于使用了头插法,节点位置将会交换,如图所示。这时候线程A又执行,

2021-08-29 19:13:41 1774

原创 位图-在20亿个随机整数中找出某个数m是否存在其中?

在20亿个随机整数中找出某个数m是否存在其中。基于这个问题,我们可以使用位图来解答。大致思路是将20亿个无序数映射到二进制数组(位图)中去,再去查看数组中是否存在m数,即某位是否为1。所以最重要的是如何映射?实现在Java中,int占4字节,1字节 = 8位(1 byte = 8 bit)如果每个数字用int存储,那就是20亿个int,因而占用的空间约为 (2000000000*4/1024/1024/1024)≈7.45G如果按位存储就不一样了,20亿个数就是20亿位,占用空间约为

2021-08-29 18:53:16 299

原创 什么是管程?

管程的定义系统中的各种硬件资源和软件资源均可用数据结构抽象地描述其资源特性,即用少量信息和对该资源所执行的操作来表征该资源,而忽略它们的内部结构和实现细节。因此,可以利用共享数据结构抽象地表示系统中的共享资源,并且将对该共享数据结构实施的特定操作定义为一组过程。进程对共享资源的申请、释放和其它操作必须通过这组过程,间接地对共享数据结构实现操作。对于请求访问共享资源的诸多并发进程,可以根据资源的情况接受或阻塞,确保每次仅有一个进程进入管程,执行这组过程,使用共享资源,达到对共享资源所有访问的统一管理,有效

2021-08-29 18:49:55 8509

原创 gcc: error: unrecognized command line option ‘-no-pie’报错

输入命令gcc -m32 -no-pie -o linkbomb main.o phase1.o将两个可重定位进行连接的时候出错,报错:gcc: error: unrecognized command line option ‘-no-pie’原因:centos默认gcc编译版本为4点几,所以需要升级gcc,这里使用yum install进行安装。依次输入下面命令sudo yum install centos-release-scl-rhsudo yum install devtoolset

2021-04-29 21:40:37 6822 1

原创 用as命令operand type mismatch for `push‘报错

使用as进行编译的时候报错operand type mismatch for push'等。两种解决方案:①在指令文件中加.code32②将指令文件中的%eax改为%rax也可以解决问题原因:重定位文件是32位,机器是64位,不兼容出现的问题。...

2021-04-29 21:34:57 2748

原创 LinkedList源码解析(JDK1.8)

文章目录1. 概述2. 继承或实现3. 成员变量3. 构造器4. 方法4.1 add4.2 remove4.3 clear4.4 get4.5 set4.6 indexOf4.7 queue操作4.8 toArray1. 概述双向链表实现,允许null值未实现同步,所以在多线程的情况下,可能会出现错误,需要在外部进行同步如果需要遍历链表,建议使用 iterator迭代器,因为使用get(index)每次需要从头结点或尾结点开始遍历,非常消耗时间。LinkedList提供了两种迭代器,一种是指提供向

2021-04-24 18:56:21 104

原创 ArrayList源码解析(JDK1.8)

文章目录1. 概述2. 继承和实现3. 常量或变量4. 构造方法5. 方法1. 概述动态可调整大小的数组实现,允许null值。该类与Vector相似,但该类不是线程安全的,使用时需注意。每个ArrayList都有一个capacity容量,指数组的大小,如果添加元素,其容量会自动增长。ArrayList的类图:ArrayList底层数据结构是数组,Object[],对于数组的操作是线性的,但访问元素是随机访问的。2. 继承和实现public class ArrayList<E>

2021-04-24 15:47:00 118

原创 AbstractList源码解析(JDK1.8)

文章目录1. 概述2. 构造器3. 方法1. 概述该抽象类继承AbstractCollection<E>,实现List<E>,那么该类支持随机访问数据存储(如数组)。该抽象类衍生了很多子类,包括ArrayList。2. 构造器 //唯一的构造器,用于子类构造函数的调用,通常是隐式的 protected AbstractList() { }3. 方法 //添加元素到list的最后 public boolean add(E e) {

2021-04-22 21:20:32 105

原创 MySQL中的最左匹配原则和匹配列前缀

最左匹配原则MySQL为了提高查询数据的效率,设计了索引,也就是b+树。b+树的特点是同层的节点是双向链表连接的,目的就是为了能够在同层快速定位。假如我们为c1、c2列建立索引,那么b+树的同层节点就是根据c1、c2的大小升序排列的。当c1列相等的时候,就按照c2列的大小排序,如果c2列相等,那就根据主键ID排序,这样二叉树节点的排列顺序就是一定的。这样最左的节点的值是最小的,最右边的值是最大的。那么我们使用查询语句:SELECT * FROM person_info WHERE c1 = .

2021-04-22 18:31:08 558

原创 Linux-常用命令总结

1. 指定运行级别(7个级别)0.关机1.单用户【找回丢失密码】2.多用户状态没有网络服务3.多用户状态有网络服务4.系统未使用保留给用户5.图形界面6.系统重启系统的运行级别配置文件:/etc/inittab切换到指定运行级别的指令:init [012356]2. 帮助指令2.1 man获得帮助信息man [命令或配置文件]例如:man ls2.2 help指令help [命令或配置文件]3. 文件目录类指令3.1 文件

2021-04-21 20:36:23 95

原创 linux命令-组管理和权限管理命令

1. Linux组基本介绍Linux中每个用户属于一个组,不能独立于组以外。所以在Linux中每个文件存在组的概念:所有者所在组其他组改变用户所在组2. 文件/目录所有者一般为文件的创建者,谁创建了该文件,就自然的称为该文件的所有者。查看文件所有者:ls -ahl修改文件所有者:chown (用户名) (文件名)3. 文件/目录所在组当某个用户创建了一个文件之后,默认文件所在组就是该用户所在的组查看文件所有者:ls -ahl修改文件所在组:chgrp (组名

2021-04-21 20:32:40 106

原创 Sentinel(哨兵)检测主观下线、客观下线、选举领头Sentinel、实现故障转移

文章目录主观下线客观下线选举领头Sentinel故障转移修改从服务器的复制目标主观下线默认情况下,Sentinel哨兵会以每秒一次的频率向所有与它创建命令连接的实例(包括主服务器、从服务器、其他Sentinel)发送PING命令,并通过实例返回的PING命令回复来判断实例是否在线。收到的有效回复为+PONG、-LOADING、-MASTERDOWN命令,其余都是无效回复(包括没有回复的)。如果在down-after-milliseconds毫秒以内,sentinel收到的都是无效回复,

2021-04-20 13:49:20 1022 4

原创 redis哨兵实现(哨兵之间的命令互传)

文章目录1. 概括2.1 初始化服务器和使用专用代码2.2 初始化Sentinel状态2.2 masters属性2.3 创建连向主服务器的网络连接2.4 获取主服务器信息2.5 获取从服务器信息2.6 Sentinel发送信息1. 概括Sentinel(哨兵)是Redis高可用性的解决方案:由一个或多个哨兵组成的哨兵系统可以监视任意多个主服务器和从服务器,当主服务器进入下现在状态的时候,哨兵系统将在该主服务器的从服务器中选一个升级为主服务器,替代已线下的主服务器,继续处理命令请求。如下图,serve

2021-04-19 22:14:45 277

原创 redis慢查询日志

文章目录1. 概括2. 慢查询记录的保存3. 慢查询日志的阅览和删除4. 添加新日志5. 总结1. 概括Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项:slowlog-log-slower-than 选项指定执行时间超过多少微秒(1 秒等于 1,000,000 微秒)的命令请求会被记录到日志上。举个例子, 如果这个选项的值为 100 , 那么执行时间超过 100 微秒的命令就会被记

2021-04-18 14:32:21 322

原创 redis主从复制实现

文章目录1. 概述2.1 旧版本的复制功能2.2.1 同步2.2.2 命令传播2.2.3 旧版本的缺陷3 新版本的复制3.1 实现-复制偏移量3.2 复制积压缓冲区3.3 服务器运行ID1. 概述使用向redis服务器(127.0.0.1:12345)发送命令SLAVEOF 127.0.0.1:6379,则 127.0.0.1:6379会成为主服务器,127.0.0.1:12345成为从服务器。进行复制中的主从服务器将保存相同的数据,这种现象称为数据库状态一致。2.1 旧版本的复制功能2.2.1

2021-04-16 22:12:59 90

原创 Redis客户端的属性、创建和关闭(伪客户端)

文章目录1. 概括2 客户端属性2.1 套接字描述符2.2 标志2.3 输入缓冲区2.4 命令与命令参数2.5 命令实现2.6 输出缓冲区2.7 身份验证2.8 时间2. 客户端的创建和关闭2.1 创建2.2 关闭普通客户端2.3 Lua脚本的伪客户端2.4 AOF文件的伪客户端1. 概括Redis服务器是一对多服务器程序,一个服务器可以与多个客户端建立网络连接Redis的文件事件是由I/O多路复用技术实现的,Redis服务程序使用单线程单进程的方式处理命令请求,与多个客户端进行网络通信服务器会为

2021-04-09 21:24:25 309

原创 redis事件(文件事件和时间事件)

文章目录1. 概括2.1 文件事件2.1.1 文件事件处理器的构成2.1.2 I/O 多路复用程序的实现2.1.3 事件的类型2.1.3 文件事件的处理器2.2 时间事件2.2.1 时间事件的实现2.2.1 时间事件应用实例:serverCron函数2.2.2 事件的调度和执行1. 概括redis是事件驱动程序,服务器需要处理以下两种事件文件事件redis通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。客户端与服务器的通信会产生相应的文件事件,服务器通过监听并处理这些事件来完成

2021-04-09 14:41:13 226

原创 AOF持久化是如何实现的?

除了RDB持久化功能之外,Redis还提供了AOF持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。如下图#mermaid-svg-YAZ6teQX6UW23KKm .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-.

2021-04-06 21:26:32 166

原创 RDB持久化是如何实现的?

因为redis是将数据保存在内存中行操作的,一旦服务器进程退出,其中的数据就会消失不见了。如何解决这样的问题,我们可以将内存中的数据保存在磁盘中,这样就能避免数据意外丢失了。Redis提供RDB持久化功能,将redis存在内存中的数据保存在磁盘中去。RDB持久化可以手动完成,也可以根据服务器配置选项定期执行经过持久化保存后,会形成一个经过压缩的二进制文件,RDB文件。也可以使用RDB文件还原数据库的状态。RDB的创建使用两个命令可以生成RDB文件,SAVE和BGSAVE两个命令的区.

2021-04-05 20:59:37 135

原创 Lambda表达式(如何使用Lambda进行排序)

Lambda表达式简介Lambda表达式也被称为箭头函数、匿名函数、闭包。箭头为操作符。Lambda表达式体现的是轻量级函数编程思想。Model Code as Data,编码及数据尽可能轻量级的将代码封装为数据。通常的解决方式是通过接口和实现类来实现,这样存在语法冗余、this关键字、变量捕获的问题。Lambda表达式是JDK8的一个新特性,可以代替匿名内部类写出优雅的Java代码。函数式接口的理解被@FunctionalInterface注解的接口都是函数式接口。函数式接口只包含一..

2021-04-04 11:03:48 2992 2

原创 InnoDB数据页结构

文章目录1. 简介2. 页结构3.1 记录头信息1. 简介页是InnoDB管理存储空间的基本单位,一个页的大小一般是16KBInnoDB 为了不同的目的而设计了许多种不同类型的 页 ,比如存放表空间头部信息的页,存放 Insert Buffer信息的页,存放 INODE 信息的页,存放 undo 日志信息的页等等。2. 页结构名称中文名占用空间大小(字节)描述File Header文件头部 3838页的一些通用信息Page Header页面头部56数

2021-04-01 09:06:33 157

原创 java.lang.Integer源码解析(JDK1.8)

一、概要int的包装类,包含有int的字段提供了Integer和字符串之间转化的方法二、实现接口或继承类public final class Integer extends Number implements Comparable<Integer>继承Number抽象类,该类继承了java.io.Serializable类,该类有以下一些方法//以int形式返回指定数字的值,可能存在截断和舍入问题public abstract int intValue();…doubleVa

2021-03-30 15:43:57 187

原创 java.lang.Double源码解析

一、概要double的包装类型,含有一个double的字段提供了double与字符串之间转化的方法二、实现接口和继承类public final class Byte extends Number implements Comparable<Byte>继承Number抽象类,该类继承了java.io.Serializable类,该类有以下一些方法//以int形式返回指定数字的值,可能存在截断和舍入问题public abstract int intValue();…doubleV

2021-03-30 09:29:22 308 2

原创 MySQL如何存储数据?(InnoDB的Compact行格式)

文章目录1. 概要2. compact行格式2.1 示意图2.2 记录的额外信息2.2.1 变长字段长度列表2.2.2 NULL值列表2.2.3 记录头信息2.2.4 记录的真实数据1. 概要InnoDB有4种不同类型的行格式 ,分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行格式。指定和修改行格式CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称ALTER TABLE 表名 ROW_FORMAT=行格式名称2.

2021-03-27 11:28:13 341

原创 MySQL出现乱码怎么办?(字符集的理解)--下

首先回答题目,可以直接在MySQL黑框里面设置输入SET NAMES GBK;文章目录1.1 客户端和服务端通信中的字符集1.2 MySQL服务器中字符集的转换1.1 客户端和服务端通信中的字符集出现乱码,多半是因为编码字符集和解码字符集不一致导致的。1.2 MySQL服务器中字符集的转换系统变量描述character_set_client服务器解码请求时使用的字符集character_set_connection服务器处理请求时会把请求字符串从 characte

2021-03-25 18:38:24 89

原创 MySQL出现乱码怎么办?(字符集的理解)--上

首先回答题目,可以直接在MySQL黑框里面设置输入SET NAMES GBK;文章目录1. 字符集1.1 字符集简介1.2 常见字符集1.3 字符集比较2. MySQL中支持的字符集和排序规则2.1 MySQL中的utf8和utf8mb42.2 MySQL中支持哪些字符集2.3 比较规则的查看3.3 不同级别的字符集和比较规则3.3.1 服务器级别3.3.2 数据库级别3.3.3 表级别3.3.4 列级别3.3.5 修改字符集3.3.6 小结1. 字符集1.1 字符集简介将一个字符映射成一个二进制

2021-03-25 15:59:20 250

原创 MySQL中的系统变量有哪些?

文章目录1. 系统变量的简介2. 如何查看系统变量3. 设置系统变量3.1 通过启动选项设置3.2 在服务器运行时设置系统变量3.3 启动选项和系统变量的区别4. 状态变量1. 系统变量的简介MySQL 服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为 MySQL 系统变量。举例说明,表示客户端连接数量会用系统变量max_connections表示,表的默认存储引擎用系统变量 default_storage_engine 表示,查询缓存的大小用系统变量 query_cache_siz

2021-03-25 09:07:02 1071

java汽车租赁系统实验.zip

java课程的大作业swing GUI可视化界面实现,有登录、注册、租车等功能,包含系统说明书和实验报告word

2021-09-02

空空如也

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

TA关注的人

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