自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解决wrong fs type, bad option, bad superblock on /dev/sda1问题

某天挂载硬盘的时候,系统提示了如下错误:在此记录排查过程以及解决方案。

2023-11-12 17:48:14 2415

原创 解决XFCE桌面VirtualBox透明背景的问题

笔者用的是ManjaroXFCE的组合,但是在使用VirtualBox时,会出现透明背景的问题:然后发现这其实和Kvantum主题有关。下面将进行设置操作,去修正Kvantum相关配置修复该问题。

2023-11-12 17:30:49 220

原创 Windows11跳过联网激活 & 跳过登陆操作

笔者使用VirtualBox时安装Win11,初始化的配置提示需要注册账户才能进行下一步操作,于是去查了一下发现有办法绕过,方法就是断网+,试了一下发现可以,便有了这篇文章。

2023-11-11 21:48:00 680

原创 GNOME多显示屏壁纸设置

笔者的设备是笔记本自带的显示屏+外接显示屏,但是GNOME默认好像不能支持多显示屏的壁纸设置:默认的Appearance中的壁纸设置会让两个显示屏都设置成同样的壁纸。

2023-04-09 19:03:17 286 1

原创 GNOME 桌面顶部栏透明设置

最近换了GNOME桌面,默认的顶部栏不太好看,想要设置成透明的。

2023-04-09 15:32:50 3385

原创 LeetCode 2050 并行课程3

拓扑排序+dp

2023-02-20 02:24:25 241

原创 链式前向星介绍以及原理

链式前向星

2023-02-19 23:03:02 1074

原创 Fastjson2基础使用以及底层序列化/反序列化实现探究

Fastjson2相关探究

2023-02-19 11:27:27 5437 1

原创 解决宏碁非凡S3 安装Win11时无法找到驱动器问题

宏碁非凡S3 找不到驱动器问题解决

2023-01-24 01:30:53 5124 3

原创 Android学习笔记(一):Android基础

Android基础学习

2022-10-12 17:36:09 2078

原创 Linux下Java剪贴板的访问

1 概述本文主要讲述了如何利用xsel在Linux环境下对系统剪贴板的访问。2 起因在搜索引擎直接搜索“Java访问剪贴板”,大部分都是直接使用AWT API进行访问的例子:Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();StringSelection selection = new StringSelection("test");clipboard.setContents(selection, sel

2022-05-11 20:41:09 513

原创 解决Sentinel module java.base does not “opens java.lang“ to unnamed module问题

1 环境Sentinel 1.8.3OpenJDK 17.0.2Manjaro2 问题描述根据官方Github Wiki使用如下命令启动Sentinel:java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar报错截图如下:摘要如下:java.lang.IllegalState

2022-03-14 20:26:53 21939 3

原创 Spring Boot demo系列(十二):ShardingSphereJDBC + MyBatisPlus 分库分表 + 读写分离

1 概述之前笔者写过两篇文章:ShardingSphere 读写分离ShardingSphere 分库分表这里将两者结合起来,实现读写分离+分库分表的功能。关于环境的配置本文将进行简化叙述,详细可以参考前两篇文章。2 环境MySQL 8.0.25(Docker)MyBatis Plus 3.4.3.1MyBatis Plus Generator 3.5.0Druid 1.2.6ShardingSphere 4.1.1Yitter 1.0.6(一个雪花id生成器)3 数据库环境

2021-07-07 14:48:43 885 1

原创 Spring Boot demo系列(十一):ShardingSphereJDBC + MyBatisPlus 分库分表

1 概述本文主要讲述了如何使用ShardingSphere(其中的Sharding-JDBC)和MyBatisPlus进行分库分表,具体步骤包括:准备数据库环境准备依赖编写配置文件测试2 准备数据库环境2.1 两库六表准备好两个库:test0test1在两个库中分别建立三个字段一样的表:user0user1user2字段如下:这样就准备了两个库以及其中的六个表了。2.2 (可选)MyBatis Plus Generator代码生成表因为MyBatis Pl

2021-07-06 16:24:49 2287

原创 MySQL 主从复制加密以及binlog的加密实现

1 概述本文主要讲述了如何对主从复制的过程中使用SSL进行加密,还有binlog加密(MySQL 8.0.14+)的实现。2 环境MySQL 8.0.25一主一从Docker3 准备容器先拉取镜像并启动:docker pull mysqldocker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql --ssldocker run -itd -p 3307:3306 -p 330

2021-06-26 16:16:04 697

原创 Spring Boot demo系列(十):ShardingSphereJDBC + MyBatisPlus 读写分离 + 主从复制

1 概述本文讲述了如何使用MyBatisPlus+ShardingSphere进行读写分离,以及利用MySQL进行一主一从的主从复制。具体步骤包括:MySQL主从复制环境准备(Docker)搭建ShardingShpere+MyBatisPlus+Druid环境测试2 环境OpenJDK 11.0.11Spring Boot 2.5.1MyBatis Plus 3.4.3.1MyBatis Plus Generator 3.5.0Druid 1.2.6ShardingSpher

2021-06-25 17:58:51 3607 3

原创 Spring Boot demo系列(九):MyBatis Plus Generator代码生成

1 前言MyBatis Plus starter最近更新了3.4.3.1版本,而MyBatis Plug Generator更新到了3.5.0版本,但是官方文档还没有更新生成器的代码,另外在之前的文章里介绍过MyBatis Plus的使用,因此这里补上一篇文章结合Spring Boot介绍代码生成器的使用。2 为什么需要代码生成器使用代码生成器可以生成一些固定模板的代码,比如:Controller层代码Service层代码mapper实体类比如一个User类可以生成如下代码:3 环境

2021-06-25 00:39:55 629 1

原创 Java高并发学习笔记(四):volatile关键字

1 来源来源:《Java高并发编程详解 多线程与架构设计》,汪文君著章节:第十二、十三章本文是两章的笔记整理。2 CPU缓存2.1 缓存模型计算机中的所有运算操作都是由CPU完成的,CPU指令执行过程需要涉及数据读取和写入操作,但是CPU只能访问处于内存中的数据,而内存的速度和CPU的速度是远远不对等的,因此就出现了缓存模型,也就是在CPU和内存之间加入了缓存层。一般现代的CPU缓存层分为三级,分别叫L1缓存、L2缓存和L3缓存,简略图如下:L1缓存:三级缓存中访问速度最快,但是容量最

2021-05-16 19:58:03 205

原创 Java高并发学习笔记(三):类加载

1 来源来源:《Java高并发编程详解 多线程与架构设计》,汪文君著章节:第九、十、十一章本文这三章的笔记整理。2 类加载简介类加载的过程可以简单分为三个阶段:加载阶段:主要负责查找并且加载类的二进制数据文件连接阶段:可以细分为验证、准备、解析三个阶段,验证就是确保类文件的正确性,准备就是为类的静态变量分配内存,并且为其初始化默认值,解析就是把类中的符号引用转换为直接引用初始化阶段:为类的静态变量赋予正确的初始值3 主动使用与被动使用JVM规范规定了每个类或接口在首次主动使用的时

2021-05-15 20:13:00 178

原创 Java高并发学习笔记(二):线程安全与ThreadGroup

1 来源来源:《Java高并发编程详解 多线程与架构设计》,汪文君著章节:第一、二、三章本文是前三章的笔记整理。2 概述3 synchroinzed3.1 简介synchroinzed可以防止线程干扰和内存一致性错误,具体表现如下:synchroinzed提供了一种锁机制,能够确保共享变量的互斥访问,从而防止数据不一致的问题synchroinzed包括monitor enter和monitor exit两个JVM指令,能保证在任何时候任何线程执行到monitor enter成功之前都必须

2021-05-10 20:49:36 232

原创 解决druid在OpenJDK11+Gradle中的依赖问题

1 问题描述环境OpenJDK 11+Gradle,直接在build.gradle中引入druid的依赖,报错如下:'dependencies.dependency.systemPath' for com.sun:tools:jar must specify an absolute path but is ${project.basedir}/lib/openjdk-1.8-tools.jar in com.alibaba:druid:1.2.6'dependencies.dependency.sys

2021-05-08 20:05:07 2633 1

原创 解决AUR无法正常升级WebStorm2021.1.1的问题

1 问题描述环境Manjaro+paru,升级WebStorm的时候,错误提示如下:2 原因这个问题在Arch的AUR官网上有讨论:就是PKGBUILD的文件中的版本号出错了,把版本号修改回来就可以了。3 解决方案上面说了解决方案就是找到WebStorm的PKGBUILD版本并进行修改,PKGBUILD根据包管理工具的不同位于不同的缓存文件夹下,这里列举两个常见的AUR助手的缓存位置:yay:~/.cache/yayparu:~/.cache/paru笔者使用的是paru,进入~/

2021-05-08 15:28:58 400

原创 Java高并发学习笔记(一):Thread详解

1 来源来源:《Java高并发编程详解 多线程与架构设计》,汪文君著章节:第一、二、三章本文是前三章的笔记整理。2 概述3 线程生命周期3.1 五个阶段线程生命周期可以分为五个阶段:NEWRUNNABLERUNNINGBLOCKEDTERMINATED3.2 NEW用new创建一个Thread对象时,但是并没有使用start()启动线程,此时线程处于NEW状态。准确地说,只是Thread对象的状态,这就是一个普通的Java对象。此时可以通过start()方法进入RUNNA

2021-05-08 10:49:29 264

原创 JVM学习笔记(八):类加载

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第十章本文是第九章的一些笔记整理。2 概述3 类加载流程类加载的流程可以简单分为三步:加载连接初始化而其中的连接又可以细分为三步:验证准备解析下面会分别对各个流程进行介绍。3.1 类加载条件在了解类接在流程之前,先来看一下触发类加载的条件。JVM不会无条件加载类,只有在一个类或接口在初次使用的时候,必须进行初始化。这里的使用是指主动使用,主动使用包括如下情况:创建一个类的实例的时候:比

2021-05-04 16:40:04 217 2

原创 JVM学习笔记(七):Class文件结构

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第九章本文是第九章的一些笔记整理。2 概述3 Class文件概览根据JVM规范,一个Class文件可以非常严谨地描述为:ClassFile{ u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_i

2021-05-02 22:30:21 239 1

原创 JVM学习笔记(六):锁优化与CAS

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第八章本文是第八章的一些笔记整理。2 概述3 对象头JVM中每个对象都有一个对象头,用于保存对象的系统信息:4 锁的实现时优化5 锁的运行时优化6 无锁...

2021-04-30 13:36:37 244 1

原创 JVM学习笔记(五):垃圾回收器和内存分配

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第五章本文是第五章的一些笔记整理。2 概述本文主要讲述了JVM中的常见垃圾回收器,包括:串行回收器并行回收器CMSG1另外还提及了内存分配的一些细节以及一个简单的JVM调优实战。3 串行回收器串行回收器是指使用单线程进行垃圾回收的回收器,每次回收时,串行回收器只有一个工作线程。串行回收器作为最古老的一种回收器,特点如下:仅仅使用单线程进行垃圾回收独占式的垃圾回收方式在串行回收器进行垃圾回收的时

2021-04-28 01:38:33 466

原创 JVM学习笔记(四):GC算法与四种引用

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第四章本文是第四章的一些笔记整理。2 GC算法常见的GC算法包括:引用计数法标记清除法复制算法标记压缩法分代算法分区算法2.1 引用计数法实现原理:对于一个对象A只要有任何一个对象引用A,A的引用计数器就加1引用失效时,引用计数器就减1只要对象A的引用计数器的值为0,对象A就不会再被使用,等待被回收缺点:无法处理循环引用,比如A引用B,B引用A,但是并没有其他对象引用两者,此时A和B

2021-04-26 22:24:30 228 1

原创 Java线程池详解

1 概述2 两个重要的接口:Executor+ExecutorServiceExecutor是一个接口,里面只是定义了一个简单的任务提交方法://Executorpackage java.util.concurrent;public interface Executor { void execute(Runnable var1);}而ExecutorService也是一个接口,继承了Executor,并且提供了更多用于任务提交和管理的一些方法,比如停止任务的执行等://Execu

2021-04-25 20:31:04 279

原创 CountDownLatch与CyclicBarrier的基本使用

1 概述CountDownLatch以及CyclicBarrier都是Java里面的同步工具之一,本文介绍了两者的基本原理以及基本使用方法。2 CountDownLatchCountDownLatch是一个同步工具类,常见的使用场景包括:允许一个或多个线程等待一系列的其他线程结束在串行化任务中需要进行并行化处理,并等待所有并行化任务结束,串行化任务才能继续进行比如考虑这样一个场景,在一个电商网站中,用户点击了首页,需要一部分的商品,同时显示它们的价格,那么,调用的流程应该是:获取商品计

2021-04-21 12:23:16 261

原创 软件测试笔记(四):白盒测试

1 白盒测试白盒测试是对软件的过程性细节做细致的检查,把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构以及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。白盒测试只测试软件产品的内部结构和处理过程,而不是测试软件产品的功能,可以分为静态和动态两种:静态白盒测试就是在不执行测试的情况下有条理仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程动态白盒测试也叫结构化测试,通过查看并使用代码的内部结构,设计和执行

2021-04-14 11:13:11 5001

原创 关于Vim/Neovim/SpaceVim的一些思考

1 前言最近看到了Neovim以及SpaceVim,于是上手试了一下。2 Neovim与SpaceVimNeovim是Vim的一个分支,具有更加现代的GUI、嵌入式以及脚本化的终端、异步工作控制等等特点,默认配置文件为~/.config/nvim/init.vim。而SpaveVim,是一个社区驱动的模块化的Vim IDE,以模块的方式组织管理插件以及相关配置,为不同的语言开发量身定制了相关的开发模块,提供了自动补全、语法检查、格式化、调试等特性,默认配置文件为~/.SpaveVim.d/init.t

2021-04-13 13:21:35 3211

原创 ArrayList与LinkedList的区别以及JDK11中的底层实现

1 概述本文主要讲述了ArrayList与LinkedList的相同以及不同之处,以及两者的底层实现(环境OpenJDK 11.0.10)2 两者区别在详细介绍两者的底层实现之前,先来简单看一下两者的异同。2.1 相同点两者都实现了List接口,都继承了AbstractList(LinkedList间接继承,ArrayList直接继承)2.2 不同点底层数据结构不同:ArrayList基于Object[]数组,LinkedList基于LinkedList.Node双向链表随机访问效率

2021-04-12 16:13:02 172

原创 Java中的绑定

1 前言做了一次笔试题,发现了一题问答题,是关于Java绑定的:当时做的时候是完全不会的。。。于是这里补上一篇Java绑定的文章。2 绑定首先来了解一下绑定的概念。绑定是指一个方法的调用与方法所在的类关联起来。很抽象吧,举个例子,如果父类与子类存在同名方法,子类对父类方法进行了重写,那么就需要绑定来区分调用的到底是父类的方法还是子类的方法。相对简单的一种理解是,绑定是一个方法的调用与调用这个方法的类连接在一起的过程。而绑定具体又可以分为:静态绑定:就是程序执行前,方法已经被绑定,可以简单

2021-04-10 22:50:30 525

原创 Linux pgrep命令

1 pgreppgrep是一个根据名称查找进程ID的命令,返回的是进程ID,若存在当个进程,则分为不同的行返回ID(默认实现)。2 示例查找java进程:pgrep java上图还显示了ps与pgrep的区别,简单来说:pgrep name等价于ps -e | grep name | awk '{print $1}'3 常用参数-l:显示PID和进程名称-a:显示详细信息-c:计算进程数量-n/-o:显示进程号最大与最小的进程4 与其他命令配合一般pgrep需要和

2021-04-07 12:08:37 3649

原创 软件测试笔记(三):黑盒测试

1 黑盒测试概述黑盒测试也叫功能测试,通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作是一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当接收输入数据而产生正确的输出信息。黑盒测试以用户角度,从输入数据与输出数据的关系触发,试图发现一下几类错误:功能不正确或遗漏界面错误数据库访问错误性能错误初始化和终止错误用例设计方法包括:等价类划分边界值分析决策表因果图场景法

2021-03-31 14:05:58 840

原创 让你的Windows/Linux玩上Switch

1 前言某天在Github上面看到了两个Switch的模拟器:yuzuRyujinx于是就想动手想尝试一下在Linux上面玩上Switch。本文的主要内容为两个模拟器的安装以及配置,以及简单说一下如何选择两个模拟器。2 yuzu2.1 下载yuzu提供了AppImage,直接下载然后添加执行权限即可:添加执行权限:chmod u+x yuzu-*.AppImage./yuzu-*.AppImage2.2 key第一次运行会提示没有key,先忽略进入界面,选择右上角的File

2021-03-24 16:01:37 14348 1

原创 软件测试笔记(二):软件测试流程

1 测试流程概述软件测试流程包括:测试计划:测试计划是指根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,使得随后所有的测试工作都围绕着测试需求来进行,同时适当选择测试内容,合理安排测试人员、测试时间和测试资源等测试设计:测试设计是指将测试计划阶段制订的测试需求分解,细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例,保证测试结果的有效性测试开发:测试开发是指建立可重复使用的自动测试过程测试执行:测试执行是指执行测试开发阶段建立的自动测试过程,并对所发现

2021-03-17 13:33:58 529

原创 关于Kotlin中日志的使用方法

1 引言想必学过Java的人都知道一个@Slf4j使用得多么的舒服:@Slf4jpublic class TestController{ @GetMapping("/test") public String test(){ log.debug("debug"); return "test"; }}但是很不幸在Kotlin中并没有这种注解,因此,本文给出了一种类似@Slf4j注解在Kotlin中的使用方法,以及介绍一个100%使用Kotlin编写的日志库。2 动手写@Slf4j

2021-03-17 02:32:05 2336

原创 Github Pages+Gridea设置DisqusJS评论

1 前言相信很多人都对Github Pages不默认,笔者之前写过了一篇文章,使用Github Pages去搭建博客的,链接可以戳这里。但是唯一的不足是没有提到评论,因为当时笔者测试了一下,评论设置不成功,而这个问题,在今天终于解决了。2 Gitalk/DisqusGridea支持两种评论的API:GitalkDisqus因为网上大部分的教程都是Gitalk的,所以这里写一篇Disqus的。3 具体流程首先去官网注册获取key:填上标签,以及自己的Github Pages网站,描述

2021-03-16 14:24:09 593

空空如也

空空如也

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

TA关注的人

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