- 博客(70)
- 资源 (8)
- 收藏
- 关注
原创 0x01.JVM 架构模型
由于跨平台特性的设计,Java指令集都是根据栈来设计的。不同的CPU平台架构不同,所以不能基于寄存器设计。栈的优点:跨平台,指令集小,编译器容易实现。缺点:性能比寄存器差。时至今日,尽管嵌入式平台已经不是Java程序的主流运行平台了(准确来说应该是HotSpot VM的宿主环境已经不局限于嵌入式平台了),那么为什么不将架构更换为基于寄存器的架构呢?因为基于栈的指令集架构跨平台性更好、指令集小(相对于基于寄存器架构来说),跨平台性更好。
2024-05-22 09:29:36 975 1
原创 SM2签名与验证过程
y2−x3axby2−x3axbSM2算法定义了5个默认参数,即有限域F§的规模p,椭圆曲线参数a,b,椭圆曲线的基点G(x,y),与G的阶n。牢记上面参数,在后续的运算过程中会使用到上面参数。
2023-06-26 20:34:41 5921 1
原创 证书拓展域(1)
本项列出了由颁发CA认可的证书策略,这些策略适用于证书以及关于这些证书策略的任选的限定符信息。证书策略拓展包含了一系列策略条目信息条目,每个条目都有一个oid和一个可选的限定条件。这个可选的限定条件不能改变策略的定义。qualifier 为枚举常量本项只用于CA证书。它列出了一个多个OID对,每对包括一个issuerDomainPolicy和一个subjectDomaimPolicy。
2023-03-07 20:02:12 1688
原创 数字证书格式与数据结构
数字证书是由具有权威性、可信性和公正性的第三方证书认证机构(CA)进行数字签名的一个可信的数字化文件。数字证书具有以下特性。
2023-03-07 20:00:27 1459
原创 SM2算法加密与解密过程
y2−x3+ax+by2−x3+ax+b###1.2SM2曲线参数定义SM2算法定义了5个默认参数,即有限域F§的规模p,椭圆曲线参数a,b,椭圆曲线的基点G(x,y),与G的阶n。pnabGxGy牢记上面四个默认参数与一个基础点,在后面运算过程中会用到上面的所有参数。SM2作为非对称算法拥有公钥与私钥,对于SM2中公私钥的结构如下d符合要求的32byte(256bit)随机数(x,y),实际一个坐标点,依据私钥d计算所得。...
2022-07-23 20:27:24 51884 2
原创 JVM结构模型
JVM结构JVM由类加载器,JVM内存结构,执行引擎,本地方法接口,具体关系如下图所示编译器将java源码编译成字节码文件类加载器装载字节码文件JVM内存结构JVM在运行时的数据结构分区,具体分为方法区(元空间),堆,虚拟机栈,PC计数器,本地方法栈执行引擎执行引擎将字节码文件变成操作系统可以执行文件,执行引擎包括解释器,即时编译器,垃圾回收器java是半编译半解释型语言JVM结构JVM由类加载器,JVM内存结构,执行引擎,本地方
2021-01-25 23:14:02 199
原创 JVM类加载过程
JVM类加载过程类加载过程三个阶段加载链接初始化加载过程JVM类加载通过类加载器进行加载,类加载器分为引导类加载器,系统类加载器。通过一个类的全限定名获取此类二进制字节流将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构在内存中生成一个java.lang.Class的对象,作为方法区中访问这个类的各种数据的入口链接过程类的链接过程分成三个阶段验证准备解析验证目的在于确保Class的字节码符合JVM的需求,保证被加载正确性,不会危害虚拟机的自身安全主要
2021-01-25 23:12:17 195
原创 mysql中的事务
事务的定义事物的四大特性原子性(A)一致性(C)隔离性(I)持久性(D)事物的隔离级别读未提交读已提交可重复读串行化事物隔离级别脏读不可重复读幻读读未提交(read-uncommitted)是是是不可重复读(read-committed)否是是可重复读(repeatable-read)否否是串行化(serializable)否否否脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数
2021-01-05 16:30:49 138
原创 CLH Lock 原理
背景SMP(Symmetric Multi-Processor)对称多处理器结构,它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台计算机由多个CPU组成,并共享内存和其他资源,所有的CPU都可以平等地访问内存、I/O和外部中断。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。操作系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。但是随着CPU数量的增加,每个CPU都要访问相同的内存资源,共享资源可能会成为系统瓶颈,导致C
2021-01-05 14:10:11 725
原创 ThreadLocal原理与使用注意点
什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题。ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的
2021-01-04 17:06:12 432
原创 深入浅出NIO
Java NIO由以下核心部分组成BufferChannelSelectorBufferByteBufferShortBufferFloatBufferCharBufferIntBufferLongBufferDirectByteBufferHeapByteBufferBuffer属性以及相关操作属性说明capacity 容量Buffer所能够存放的最大容量position 位置下一个被读或写的位置limit 上界可供读写的最大位置,
2021-01-04 17:04:55 128
原创 JAVA线程池的使用
Java中提供线程池newCachedThreadPool可缓存线程池,若线程池长度超过处理需要,则回收空线程,否则创建新线程,线程规模可无限大。ExecutorService cachedThreadPool = Executors.newCachedThreadPool();newFixedThreadPool定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。ExecutorService fixedThreadPool = Executors.newFixedThreadPoo
2020-12-13 14:07:44 234
原创 重入锁于不可重入锁
重入锁定义所谓重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的。synchronized 和 ReentrantLock 都是可重入锁可重入锁的意义在于防止死锁不可重入锁不可重入锁与上面对应,也是以线程为单位,只能获取一次,再次获取时会产生死锁的现象。重入锁代码示例public class ReLock { boolean isLocked = false; Thread lockedBy = null;
2020-12-10 16:28:42 165 1
原创 理解CAS算法
CAS(Compare And Swap)比较交换在线程开启的时候,会从主存中给每个线程拷贝一个变量副本到线程各自的运行环境中,CAS算法中包含三个参数(V,E,N),V表示要更新的变量(也就是从主存中拷贝过来的值)、E表示预期的值、N表示新值。实现过程假如现在有两个线程t1,t2,,他们各自的运行环境中都有共享变量的副本V1、V2,预期值E1、E2,预期主存中的值还没有被改变,假设现在在并发环境,并且t1先拿到了执行权限,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次发起尝试,然后
2020-12-10 14:30:43 420
原创 过滤器,拦截器,监听器
过滤器 拦截器 监听器的区别过滤器过滤器依赖函数回调过滤器依赖servlet容器过滤器几乎对所有的请求起作用过滤器不能访问action的上下文对象过滤器只在容器初始化时调用一次拦截器拦截器依赖java的反射机制拦截器不依赖servlet容器拦截器只能对对应的action起作用拦截器可以被多次调用拦截器可以访问IOC容器监听器做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等随着web容器启动初始化,web容器停止而销毁触发时机
2020-12-10 14:08:30 132
原创 数据库分库分表插件shardingsphere
数据库分库分表插件shardingsphereshardingsphere简介Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Share-JDBC简介定
2020-07-27 22:58:45 1298
原创 springboot2国际化配置
SpringBoot2 国际化配置原来用SpringBoot1的时候,配置自定义国际化位置的时候,直接使用spring.messages.basename属性就可以,但是在使用SpringBoot2的时候发现该属性不生效了,后来经过多方查阅,发现springboot2的默认的配置不生效,无论怎么配置都会走默认的messages,这个时候就需要重新定义messageSource,定义代码如下:@...
2019-10-06 12:34:37 988 1
原创 Git常用命令列表
文章目录git常用命令仓库克隆代码更新、提交与推送分支操作代码合并修改撤销取消已经暂存的文件git常用命令仓库克隆git clone repertories url将远端的代码库clone到本地代码更新、提交与推送git pull repertoriesName branchName在更新时指定仓库的名称与分支的名称,获取指定仓库的指定分支更新,如果当前分支与指定的分支不是...
2019-03-06 09:56:18 318
原创 Go接口
接口多态是指代码可以根据类型的具体的实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,,都可以支持这种类型的值。标准库里面有很好的例子如io包里实现的流式处理接口。在程序的声明和实现接口是会涉及很多细节。即便实现的是已有接口,也需要了解这些接口是如何工作的。实现接口是用来定义行为类型的,这些被定义的行为不由接口直接实现,而是通过方法由用户定义的类型实现。如果用户...
2019-02-20 13:56:48 193
原创 Go中的Map与Range
范围(Range)Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对的 key 值。实例:package mainimport "fmt"func main() { //这是我们使用range去求一个slic...
2019-02-18 16:36:10 7323
原创 Go结构体
文章目录结构体定义结构体访问结构体成员结构体作为函数参数结构体指针结构体Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。定义结构体type struct_variable_type struct { member definition; member definition; ...
2019-02-18 15:56:09 588
原创 Go指针
指针Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。接下来让我们来一步步学习 Go 语言指针。我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址。Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。以下实例演示了变量在内存中地址:package mainimport "fmt"func main() { ...
2019-02-18 15:42:40 286 1
原创 Go数组与切片
文章目录数组与切片数组的声明数组的初始化切片(Slice)len() 和 cap() 函数空(nil)切片切片截取append() 和 copy() 函数数组与切片Go 语言提供了数组类型的数据结构。数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。相对于去声明number0, number1, …, and number...
2019-02-15 15:33:06 150
原创 Go函数
函数函数是基本的代码块,用于执行一个任务。Go 语言最少有个 main() 函数。你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。函数声明告诉了编译器函数的名称,返回类型,和参数。Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数...
2019-02-15 11:31:01 189
原创 Go中的变量与常量
变量变量定义的方式Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字:Go语言是强类型语言,在定义变量时需要指定变量类型,有三种定义变量的方式var identifier type第一种定义变量的方式var v_name v_typev_name = value第二种定义变量的方式var v_name = value...
2019-02-15 10:16:26 179
原创 GO语言中类型介绍
类型介绍在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。Go 语言按类别有以下几种数据类型:布尔型数字类型字符类型派生类型数字类型整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。...
2019-02-14 13:39:07 501
原创 Go语言开发环境搭建
环境配置GO 安装包下载GO 安装包的下载地址为go sdk,下载1.11.2版本进行安装GOROOT配置在window中添加环境变量 GOROOT 值为刚才GO安装的目录,在 PATH 中添加 %GOROOT%/bin, 添加完成后在cmd中输入go version出现如下显示则说明安装成功GOPATH 配置GOPATH是GO源码的所在目录,包括依赖的第三方库都在该目录下,...
2019-02-14 13:38:11 264
原创 PKCS#7填充模式
PKCS#7填充模式pkcs#7与pkcs#5填充模式的填充方法基本相同PKCS#5填充都是按照分块之后填充,区别在在于pkcs#5定长为8位,pkcs#7为非定长。pkcs#7填充的举例说明分块长度为16,数据长度为22,最后一块长度为6,则填充方式为 0x010x010x010x010x010x010x100x100x100x100x100x100x100x100x100x10最...
2018-11-29 22:17:24 7354
原创 密码的工作模式
分组密码工作模式密码学中,分组密码的工作模式允许使用同一个分组密码密钥对于一块数据进行加密,并保证安全性。历史和标准化最早出现的工作模式,ECB,CBC,OFB和CFB,CTR,XTS,HMAC等初始化向量(IV)初始化向量是许多任务作模式中用于将加密随机化的一个块位,由此同样的明文,避免了较慢的重新产生密钥的过程。初始化向量与密钥相比有不同的安全性需求,因此IV通常无须保密,然而在大...
2018-11-28 21:59:36 1954
原创 PKCS#5 填充模式
PKCS#5填充模式PKCS#5填充的定义PKCS#5填充是PKCS#7填充的一个子集,在PKCS#7填充时BlockSize为8的时候,PKCS#5与PKCS#7填充是一样的,在BlockSize不同时PKCS#5与PKCS#7填充是不同的,PKCS#5填充是将数据填充到8的倍数,填充后数据长度的计算公式是定于元数据长度为x, 填充后的长度是 x + (8 - (x % 8)), 填...
2018-09-07 17:47:45 10706 3
原创 maven插件开发----HelloWorld
maven插件开发最近在工作中遇到一个问题是在打包的过程中要对一些文件做替换签名,原来都是找到编译过后的文件,进行签名,然后导出jar包,这样每次都是重复的劳动,后来想能不能在每次打包发布的时候自动来做这件事,后来找了maven插件发现没有符合需求的插件,只能动手去写插件,下面介绍的是简单的一个插件的编写创建一个maven工程(也可以用命令直接生成)工程创建(我选择的是最笨的办...
2018-08-25 22:50:30 462
原创 JAVA中的位运算
JAVA中的位运算 >> : 左移位运算 << : 又移位运算 >>> : 忽略符号位移运算,空位补零 | : 或运算 & : 与运算 ^ : 异或运算...
2018-08-21 14:02:35 209
原创 利用python进行进程检查与保护
利用python对进程进行检查原来有一个服务直接启动的,在启动一段时间后该服务莫名其妙就挂了,可能是机器重启,也可能是服务本身不稳定,但是这个服务是第三方直接提供的执行文件,没办法调整,最后只能写一个进程守护的程序,主要实现思想是对改服务提供服务的端口进行检测,端口没有启动这个服务就是挂了,自动对这个服务进行启动就可以了,具体代码实现如下:#!/usr/bin/env python#...
2018-08-08 08:43:22 1747
原创 python进行mysql的数据库备份
python进行mysql的数据备份主要想法是利用mysqldump的方式将mysql的库或表备份成sql之后,利用ftp的方式转存到启发服务器上,实现一个简单的备份的功能。代码比较简单,主要核心代码如下。db_back.py# -*- coding:utf-8 -*-import ConfigParserimport osimport schedimport timefro...
2018-08-08 08:37:25 3175
原创 一个全新的ssh工具推荐,finalshell简介和教程
最近xshell突然不好使了,结果保存的所有服务器连接配置信息都没了,有的已经很久,结果都没了,需要一个个的去找,神烦,后来发现了一个比较好的ssh工具,在这里推荐给大家,finalshell,用着非常舒服。下面是截图这个工具能够对shell全屏使用,给一种瞬间高大上的感觉。左侧能看见服务器的相关信息下方是文件夹,能够上传和下载最后的下载地址是 finalshell官网...
2018-07-04 12:40:45 14715 1
原创 springboot1.x整合elasticsearch5.x
SpringBoot 对于 Elasticsearch的支持spring本身有对于Elasticsearch的支持,但是支持的版本比较低,要使用低版本的springboot,也只能使用低版本的ElasticSearch,但是要使用高版本的Elasticsearch就需要自己整合,本文介绍了一种集成方式。集成思路springboot支持自动配置,并且少配置,如果采用原来的配置方式的话...
2018-05-12 14:11:34 2343
原创 SpringBoot 整合redis
SpringBoot整合redis引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>SpringBoot的依赖管理引入和redis相关的依赖,然后添加xml配
2017-12-12 18:51:53 289
原创 SpringBoot自定义配置文件fatjar获取不到解决办法
SpringBoot中有一部分自定义的配置文件在打成jar包后无法获取一部分自定义配置在jar包中无法获取的问题,原来是根据classpath获取,在jar包中无法获取,在读取的时候空指针异常用spring的resouce获取后就能正常读到,介绍下spring的resourceorg.springframework.core.io.Resource |------UrlResource
2017-12-12 18:44:55 1843
原创 RESTEasy底层使用Netty
为什么底层要使用Netty原来在使用RESTEasy的时候底层使用的是Tomcat,但是Tomcat的I/O性能不如Netty,一直想把Tomcat换成Netty
2017-10-30 15:59:29 5034 10
springboot1.x整合elasticsearch5.x
2018-05-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人