自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 329 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 334

原创 CountDownLatch与CyclicBarrier的基本使用

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

2021-04-21 12:23:16 336

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

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

2021-04-14 11:13:11 5564

原创 关于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 3756

原创 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 310

原创 Java中的绑定

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

2021-04-10 22:50:30 753

原创 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 4002

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

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

2021-03-31 14:05:58 962

原创 让你的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 17217 1

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

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

2021-03-17 13:33:58 641

原创 关于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 3029

原创 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 763

原创 软件测试笔记(一):软件测试概论

1 软件测试目的测试的目的就是以最少的时间和人力找出软件中潜在的各种错误和缺陷,证明软件的功能和性能与需求说明相符,Glenford J.Myers曾提出以下观点:测试是为了证明程序有错,而不是证明程序无错误一个好的测试用例能发现至今未发现的错误一个成功的测试是发现了至今未发现的错误软件测试的目的往往包含以下内容:测试并不仅仅是为了找出错误,通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进测试帮助测试人员设计有针对性的测试方法,改善测试

2021-03-08 15:06:02 2044

原创 Java常用工具+类库合集

1 常用工具JVisual vm:可以直接通过软件包下载,支持本地以及远程JVM监控JMH:Java Microbenchmark Harness,测试基准组件,精度可达纳秒级JITWatch:JIT日志分析GUI工具2 日志库2.1 日志框架JUL:JDK自带日志库,也就是java.util.loggingLog4j/Log4j2:Apache的一个开源项目,高度可配置Logback:开源日志组件2.2 日志门面JCL:Jakarta Commons Logging,Apac

2021-03-07 19:37:40 773

原创 Java性能优化的十条小技巧

1 System.nanoTime测试性能时,System.nanoTime比System.currentTimeMills更精确,前者使用纳秒计时,且对系统影响更小。具体来说:System.currentTimeMills返回自1970年1月1日以来经过的毫秒数,返回的精度与操作系统有关System.nanoTime:不是现实时间,是虚拟机提供的计时时间,精确到纳秒2 ThreadLocalRandom通常生成随机数会使用Random类,Random是线程安全的,Random实例里面有一个

2021-03-07 19:31:04 392

原创 JVM学习笔记(三):JVM基本参数

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第三章本文是第三章的一些笔记整理。2 GC日志:-Xlog:gc要打印GC日志的话,可以加上-Xlog:gc参数(JDK8及以下请使用-XX:+PrintGC),开启GC打印后,每次GC就会打印如下的日志(OpenJDK11 -Xlog:gc):[0.126s][info][gc] GC(0) Pause Young (Normal) (G1 Evacuation Pause) 25M->0M(502M) 1.9

2021-03-05 12:03:07 2096 1

原创 JVM学习笔记(二):JVM基本结构

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第二章本文是第二章的一些笔记整理。2 JVM基本参数-Xmxjava命令的一般形式如下:java [-options] class [args..]其中-options表示JVM启动参数,class为带有main()的Java类,args表示传递给main()的参数,也就是main(String [] args)中的参数。一般设置参数在-optinos处设置,先看一段简单的代码:public class Mai

2021-03-03 17:25:10 369

原创 SpringBoot+Gradle构建多模块项目

1 概述Gradle由于构建速度比Maven快,且比Maven灵活,因此很多后端的应用都使用了Gradle进行构建,但一个问题是,Gradle的多模块项目比较难构建,再加上Gradle的更新非常快,这就给构建一个多模块Gradle项目造成了不少的困难。基于此出发点,本文提供了两种形式的使用Gradle构建的Spring Boot多模块项目:Java + GradleKotlin + Gradle + Kotlin DSL为了减少出现各种错误的概率,步骤做得非常详细(多图预警),文末也附上了源码

2021-03-02 20:38:04 11677 3

原创 JVM学习笔记(一):JVM初探

1 来源来源:《Java虚拟机 JVM故障诊断与性能优化》——葛一鸣章节:第一章本文是第一章的一些笔记整理。2 Java里程碑2.1 Java起源1990年Sun公司决定开发一门新的程序语言——Oak,已经具备安全性、网络通信、面向对象、垃圾回收、多线程等特性,由于Oak已被注册,于是改名为Java。2.2 JDK 1.01995年Sun发布了Java以及HotJava产品,1996年正式发布JDK 1.0,包括两部分:运行环境:JRE,包括核心API,用户界面API,发布技术、JV

2021-03-02 13:17:20 404

原创 SHA256sum系列命令检测文件完整性

1 sha256sumsha256sum是一个检测文件完整性的命令,一般下载的文件都会附带一个哈希值,使用sha256sum计算下载文件的哈希值再与目标哈希值比较即可确定文件是否完整,类似的命令还有:md5sumsha1sumsha224sumsha384sumsha512sum2 安装在一个叫coreutils的包内:想使用SHA3的话需要安装:sha3sum3 使用...

2021-03-02 11:17:52 17985

原创 Spring Boot demo系列(八):Redis缓存

1 概述本文演示了如何在Spring Boot中将Redis作为缓存使用,具体的内容包括:环境搭建项目搭建测试2 环境RedisMySQLMyBatis Plus3 Redis安装Redis安装非常简单,以笔者的Manjaro为例,直接paru安装:paru -S redisUbuntu、CentOS之类的都提供了软件包安装:sudo apt install redissudo yum install redis如果想从源码编译安装:wget http://dow

2021-02-24 01:41:45 753

原创 解决Docker MySQL无法被宿主机访问的问题

1 问题描述Docker启动MySQL容器后,创建一个localhost访问的用户:create user test@localhost identified by 'test';但是在宿主机中无法通过该用户登录:mycli -u test2 原因在Docker中的MySQL创建localhost的用户只能在Docker内部访问,而不能通过外部访问。至于为什么能在宿主机访问root,是因为默认存在两个root,分别是:root@localhostroot@%而test只有一个

2021-02-23 11:20:08 3254

原创 解决IDEA Gradle构建报错“Cause: zip END header not found“

1 问题描述某天使用Gradle构建项目时,IDEA报错如下:2 原因原因是下载的Gradle,也就是zip压缩包不完整,导致无法使用Gradle构建。3 解决方法3.1 删除本地缓存重新下载首先打开IDEA设置中的Gradle,找到Gradle user home:比如笔者的是~/.gradle,打开其中的wrapper/dists,就可以看到缓存的Gradle:删除对应版本的Gradle即可,IDEA会自动重新下载。3.2 设置特定版本的Gradle如果清除缓存重新下载不行,可

2021-02-18 16:47:22 3884

原创 解决WebStorm无法正确识别Vue3组合式API的问题

1 问题描述Vue3的组合式API无法在WebStorm中正确识别,表现为defineComponent等无法被识别:2 尝试方案猜想这种问题的原因是无法正确识别对应的Vue3库,笔者相信WebStorm是可以做到的,只是某些配置没有正确,笔者尝试过在设置的Libraries中勾选上node_modules,但是没有效果。3 解决办法最终的解决办法参考了此处(图源):选择node_modules文件夹,右键选择Mark Directory as,最后选择Not Excluded即可。之后

2021-02-17 13:14:41 9226 4

原创 ElementPlusViteStarterPnpm版本

1 起因由于最近Vite升级了2.x版本,项目中需要改动的东西有点多,本来想基于官方给出的starter重做,但是又看到了一个叫pnpm的仓库,构建速度会比原生npm/yarn快两倍以上:因此模仿官方starter做了一个pnpm版本的starter,希望能帮助到需要的同学。2 环境准备Node.jsnpmpnpmNode.js与npm的安装就不说了,本来笔者使用的是cnpm,虽然速度上相比起npm有所改进,而且cnpm的输出也更加友好,但是使用了pnpm,相比起来感觉还是差了那么一点。

2021-02-16 03:18:01 1011

原创 人生第一个扩展——Github1s

1 灵感某天看到了一个叫github1s的仓库:基于Node.JS、Yarn、Python等技术栈,在github.com上面加上“一秒”,也就是github1s.com,就能在VSCode中打开该仓库,非常好用。同时笔者安装有一个叫Sourcegraph的扩展,就是下面这个:用过的同学都知道这个扩展是干嘛的,于是笔者就想类似的在这个扩展旁边加一个超链接的扩展直接打开github1s.com,效果图已经在上面了,点击那个VSCode的图标就可以直接打开。2 动手由于笔者并没有扩展开发的经验,

2021-02-13 11:58:07 6421 1

原创 Chrome扩展开发基础教程(附HelloWorld)

1 概述Chrome扩展开发的基础教程,代码基于原生JS+H5+CSS,教程内容基于谷歌扩展开发官方文档。2 环境Chrome 88.0.4324.96Chromium 87.0.4280.141Brave 1.19.84FireFox 85.0WebStorm 2020.3.23 开发环境准备开发扩展建议使用WebStorm,推荐WebStorm的原因是能够补全,在设置中的Libraries中可以下载chrome的库,这样就能够补全了:另一个建议使用的是VSCode,但是笔者目

2021-02-12 19:49:15 4464 3

原创 Python多环境管理——pyenv

1 背景&概述因某些需求,需要安装TensorFlow,很自然地在终端敲下了以下命令:pip install tensorflow然后。。。好家伙???居然没有??因为是Python 3.9,去pypi搜索了,居然还真没有支持的,最高只有Python 3.8:于是便考虑一个多版本的Python环境,碰巧就在Github上看到了一个22.3k的东西:这就是pyenv,一个简单的Python版本管理器,可以轻松地在各个Python版本之间进行切换。好了废话不说,进入正题。2

2021-02-04 21:05:01 13050 2

原创 VirtualBox虚拟机读取U盘

1 概述使用VirtualBox虚拟机(系统Win10)读取宿主机(系统Manjaro)中的U盘。2 安装扩展戳这里下载对应版本的一个叫Oracle_VM_VirtualBox_Extension_Pack的扩展,笔者的为:下载后可以双击安装,这时候如果是Linux系统的话会提示输入密码:可以尝试用户名密码以及root用户密码,笔者尝试过了都失败,另一种方法是使用命令行方式安装:sudo VBoxManage extpack install Oracle_VM_VirtualBox_Exte

2021-02-03 15:00:03 5364

原创 Android+Java Web+MySQL实现登录注册

2021.1.24 更新1 概述这是一个前端Android+后端Java/Kotlin通过Servelt进行后台数据库(MySQL)交互的详细步骤以及源码实现,技术栈:Android基础原生JDBC+原生ServletTomcat+MySQL(Docker)当然现在的很多Java后端开发都使用了Spring Boot而不是原生的Servlet,所以使用Spring Boot实现的可以笔者的另一篇文章。尽管基于Spring Boot实现非常的简便,但是使用原生的Servlet更能理解底层的原

2021-01-27 09:55:58 5910 24

原创 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

1 前言&概述这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug。本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到的技术包括Jackson、OkHttp、bouncycastle、Spring Data JPA。2 环境Android 4.1.2IDEA 2020.3.1Spring Boot 2.4.2MySQL 8.0.23OpenJDK 11环境准备就略过了,需要的可以参考这里。3 后端3.1

2021-01-27 09:55:20 6254 15

原创 Java后端部署以及与Android通信注意事项

1 概述本文列举了一些Android+后端Java通信时的部署以及注意事项,覆盖的问题包括但不限于安全组、数据库、路径等,如果各位读者的Android端不能正常访问Java后端,希望这里的解决方案能帮助到您。2 问题分类主要可以分为三类:数据库安全组端口+路径权限3 数据库问题3.1 用户名以及密码首先需要确保后端配置文件中的访问数据库的用户名以及密码要正确,不然的话可能会出现:3.2 Spring Boot中的用户名以及密码一般在application.yaml/applica

2021-01-21 12:30:11 2840 17

原创 Debian10安装MyCLI

1 概述Debain10安装MyCLI。环境:Debain10Python3.72 准备环境2.1 Python首先确保安装了Python:apt install python3若是没有换源建议先换源,这里列出了阿里的源:deb http://mirrors.aliyun.com/debian/ buster main non-free contribdeb-src http://mirrors.aliyun.com/debian/ buster main non-free co

2021-01-21 08:46:10 277

原创 Vue3.0中引入地图(谷歌+高德+腾讯+百度)

1 概述对于目前最新的Vue3.0,无论是百度地图还是高德地图到目前还没有适配,只有Vue 2.x版本的:具体就不说了,需要的自行看文档,这里说一下Vue3的地图包,目前只有谷歌地图的Vue3.0适配:因此本文重点说一下如何在Vue3.0中引入谷歌地图。2 步骤这里说一下大概步骤:获取API Key安装地图包配置引入使用3 获取API Key戳这里按提示进行:创建项目:...

2021-01-07 18:54:17 8585 5

原创 解决Echarts+<el-tab-pane>的警告:Can‘t get DOM width or height

1 问题描述环境:Chrome 87Element-PlusVue3.0.5<el-tab>+<el-tab-pane>中使用Echarts警告如下:2 代码<el-tabs type="border-card"> <el-tab-pane label="xxx"> <div id="main" style="width: 500px;height: 500px;"> </div> </el-ta

2021-01-05 10:43:55 1466 3

原创 Vue3+Vite引入Echarts5.0图表库

1 概述环境Vue3+Vite,需要引入ECharts库。2 尝试目前ECharts已更新到5.0版本,在Vue中引入并不难,npm/cnpm安装后在需要的组件中引入:import echarts from 'echarts'即可。但,问题是这是以前的版本可行的,更新到5.0版本后需要使用其他方法。另一方面官方文档是使用require引入:但是,这是在Webpack的情况下,在Vite中并不能直接使用require,官方issue有讨论,明说了require不支持,这是一个Node的特

2021-01-04 21:17:26 5815 1

原创 Linux下禁用笔记本触摸板

1 概述在Linux下禁用触摸板的方法有很多,这里列举三种:图形界面配置关闭modprobe关闭xinput关闭2 图形界面配置关闭笔者的环境为Manjaro+Xfce,其他的桌面也应该类似,开始菜单搜索touchpad即可出现相应选项:关闭即可:3 modprobe关闭:sudo modprobe -r psmouse开启:sudo modprobe -a psmous这种方式在笔者测试的时候失败了,提示说该模块是内置模块无法关闭:该关闭方法仅供参考,不行的话建议

2021-01-04 16:32:17 1814

原创 ECDSA密钥对生成以及在Token中的应用

1 概述本文主要讲述了如何利用Openssl生成ECDSA密钥对,并利用Auth0库进行Token生成及验证的过程。2 ECDSA2.1 简介ECC(Elliptic Curve Cryptography,椭圆曲线加密)是一种基于椭圆曲线数学的公钥加密算法,而ECDSA是使用ECC对数字签名算法(DSA)的模拟,总的来说ECC相比起常见的RSA更加安全并且生成密钥对的过程会更快。本文不会涉及过多原理性的东西,只是作简单的介绍,想要详情了解这些算法的可以戳这里。2.2 密钥对生成在Openssl中

2020-12-31 20:11:09 4077

原创 Node.js/Vue.js使用jsSHA库进行SHA1/2/3加密

1 概述jsSHA是一个用纯JS/TS实现完整SHA系列加密算法的加密库,包括:SHA1SHA-224/256/384/512SHA3-224/256/384/512SHAKE128/256cSHAKE128/256KMAC128/256这里是一些使用加密算法的例子。2 安装并引入安装使用npm或cnpm:npm install --save jssha# 或cnpm install --save jssha引入时,根据package.json中的type进行相应引入:c

2020-12-28 08:40:35 3328

空空如也

空空如也

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

TA关注的人

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