自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redi中Lua脚本拓展

目录Redis事务Lua脚本Redis事务redis中提供了简单的事务功能,通过multi和exec两个命令来使一组命令的执行能够保证事务特性,在事务中执行的命令不会马上执行,而是返回queued,当执行中出现命令错误的操作时,已执行的命令不会成功。当在某些情况下,操作某个键时,需要该键在事务过程中没有被修改才执行成功时,通过watch命令来实现,如果事务过程中有对键值的修改,那么事务不会执行,下面是两个客户端下事务演示redis中实现的事务功能相对简单,毕竟其不能实现多个执行命令之间的逻辑

2020-10-30 16:08:40 146

原创 docx4j实现word文件转换pdf文件

目录前言PDF文件导出通过生成的word文件生成pdf前言前段时间在项目中遇到了导出pdf的问题,之前在项目中遇到导出文件莫非就是excle或者是word文件的导出,所以在遇到需要导出pdf文件时,我搜索了许多的网页内容,但是很多网页给出的答案也不是正解,走了许多的歪路后才最终实现了pdf文件的导出,下面提供的pdf文件导出希望能帮助到你PDF文件导出通过生成的word文件生成pdf       第一种方法呢,是通过使用word

2020-10-26 17:26:22 3177 3

原创 redis内部编码

目录内部编码StringHash内部编码redis有五大基本类型,而在这些基本类型中还有不同的内部编码,通过object encoding key,可以查看该键的内部编码,这样对外来说redis只有五种基础类型,当其对内部编码改进时,基础类型不会发生改变。并且redis会根据你的值来判断使用那种方式的内部编码效率会更高,所以并不是说一直是一个类型StringString类型其内部编码有三种格式,分别是int,raw和embstr,之前我们就说过并不是由我们来指定其内部编码,而是存入的值来决定的

2020-10-23 17:07:54 555

原创 redis基础API

目录Redis的特性Redis基础全局命令Redis基本类型Redis的单线程架构基础API字符串哈希Redis的特性速度快Redis所有的数据都存放到内存的,内存中对数据的读取速度平均为每100纳秒一次Redis使用的C语言加以实现,更接近于机器语言,执行速度快Redis使用了单线程的架构,以避免了多线程存在的竞争问题Redis源码精简,集性能与优雅于一身基于键值对的数据结...

2020-10-23 17:07:07 187

原创 AIO基础API应用剖析

目录

2020-10-23 17:06:28 295

原创 NIO基础API应用剖析

目录NIONIO什么是NIONIO是 New I/O的简称,与旧式的基于流的I/O方法相对,它式一套新的I/O标准,在jdk1.4中被发布NIO的特性:原始的I/O是基于的流的方式,而NIO是基于块(Block)的,它以块为单位来对数据进行处理,因为本身硬盘上的文件就是使用块进行存储的,NIO对此进行了对应,所以NIO的性能上比原始I/O要好的多。为所有的原始类型提供(buf...

2020-10-23 17:05:58 118

原创 freemarker根据模板导出word文件

目录前言word文件导出引入依赖模板填充list数据的遍历填充插入图片java代码前言项目中都会遇到关于文件的导出,这里主要使用freemarker来根据ftl来生成word文档,这里使用的例子我只考虑到一些常见的情况,如果你遇到问题或是其他特殊情况,希望留下你问题和见解。word文件导出引入依赖首先是导入freemarker的jar包 <dependency> <groupId>org.freemarker</groupId&

2020-10-23 16:06:19 695 2

原创 TCP协议执行过程

传输层网络层帮我们定位计算机位置后,之后就会接入应用程序,首先我们能够开始多个应用程序,也就是说一个ip是为多个应用程序服务,那如何区别应用程序的不同——端口能帮我们解决多个应用程序的情况下的数据传输。所以传输的层的功能是建立在端口与端口之间的通信,那么就要提到TCP协议和UDP协议了,这两种协议都用于数据的传输TCP协议:可靠传输,TCP报文段没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP报文段的长度不会超过IP报文段的长度,以确保单个TCP报文段不必再分割。UDP协议:不

2020-07-29 17:58:21 881 1

原创 IP网际协议

基础篇开放式互联系统——OSIsocket开放式互联系统——OSI说明: 开方式互联系统将网络通信工作分为七层,分别是以下:物理层:物理层实际上就是通过布线、光纤、网卡和其它用来把两台网络通信设备的方式实现互联。数据链路层起初,数据链路层是用来解析物理层传输的电信号,但是后面因为各个公司都有自己的分组方式,最后就进行了统一,形成了以太网协议——Ethernet以太网协议规定:一组电信号为一个数据包,也可以称为一帧。每一帧数据包含了head和data两个部分,head为固定的

2020-06-30 14:55:10 214

转载 如何在多线程下调试线程

目录条件断点java Dump条件断点条件断点调试能够方便我们在调试过程中对某个特定的线程或特定的值进行调试,在大量的循环操作或是高并发情况下的断点调试会十分的不方便,而条件断点调试可以根据的你条件对响应的代码进行调试。首先是在调试处打上断点,之后可以右键断点就会出现以下的条件输入框,或者是快捷键Ctrl+Shift+F8唤出条件输入框。java Dumpjps命令jp...

2020-05-09 15:43:41 527

原创 深入理解ThreadLocal实现原理

目录锁优化的思想ThreadLocal及其源码分析锁优化的思想减少锁持有时间像比如在调用某个方法时其中只有一小部分是需要同步的,那么大可不必将整个方法上锁,而是对需要同步的这一小块代码加上同步锁,以此来降低锁持有的时间,该优化还会提高自旋锁的成功率。减小锁的颗粒度将一个大对象拆成小对象,增加并行度降低锁的竞争,比如jdk。1.7的concurrentHashMap中就是采用分段...

2020-04-10 18:41:54 229

原创 Synchronized内层原理

目录Synchronized是什么?Synchronized的三种方式Synchronized是什么?synchronized 关键字可以在方法、对象、类上加锁,当被他锁定了后有且只有一个线程能够执行访问临界区的数据,而其他的线程必须要等待获取到锁的线程释放锁之后才能去访问临界区的数据,以保证临界区的数据不会因为多个线程的读写操作造成数据问题。Synchronized的三种方式1.普通...

2020-03-31 17:41:41 148

原创 深入解析AQS实现原理 (二)

AQS共享模式解析共享锁,需要实现tryAcquireShared和tryReleaseShared方法,但不管是共享还是排他锁都继承自AQS,所以其节点内部结构不会有变化。首先我们要了解什么是共享锁,就是当某个线程对临界区进行读取时其他线程只能在对临界区进行读操作,不能有排他锁的存在。直到线程释放共享锁后写操作才能尝试排他锁,Semaphore是共享模式的实现类,根据AQS子类实现列表我...

2020-03-28 11:28:21 140

原创 深入解析AQS实现原理(一)

AbstractQueuedSynchronizer(AQS)AbstractQueuedSynchronizer简称AQS,提供FIFO(先进先出)的队列,像之前的ReetrantLock、Semaphore、CounDownLatch等就使用到了该队列,AQS是一个抽象的类,下面先看看其子类的实现我们先看关于AQS的内部部分源码:AQS中的常量:同步对列头引用head和同步队列...

2020-03-25 18:48:51 198

原创 扩展和增强线程池

目录线程池扩展——回调:拒绝策略线程池扩展——回调:public class EXTThreadPool { //核心线程数 private static final int THREADPOOLCORESIZE=5; //最大线程数 private static final int THREADPOOLMAXSIZE=5; public static...

2020-03-15 16:49:25 155

原创 java线程池核心构造

线程池基本使用为什么需要线程池JDK提供的线程池线程池的使用线程池的共性为什么需要线程池因为如果不使用线程池的化,就需要每次使用线程的时候创建并销毁线程,造成了资源的浪费。而使用线程池对线程进行管理,线程只需要一次性创建并可以进行重复的使用,并且还可以根据需要调整线程池的大小来执行相应的方法。JDK提供的线程池线程池的使用线程池的种类newFixedThreadPool说...

2020-03-15 16:38:44 150

原创 ConcurrentHashMap内层原理

集合包装HashMap实现原理:JDK1.8之前:结构:采用的是hashEntry数组加链表的结构,首先计算当前存入的k-v的key的hashcode值来查看应该被放到数组的那里,找到对应的索引后再用key去比对对应索引中的链表,如果有key值与当前的值是相等的则进行覆盖,否则将该k-v加入到链表中。但是当hash冲突过多时就会导致链表长度越来越长,那HashMap的查询效率也会...

2020-03-15 16:33:12 211

原创 线程同步工具使用

ReentrantLock(重入锁)特点:可重入可中断:可对正在执行的线程进行中断可限时:可以设置在多少时间单位内没有获取到资源则执行其他业务方法公平锁:避免产生饥饿现象,但是性能会降低重入锁实现:cas状态:判断当前锁是否被占用等待队列:将所有在等待状态的线程都保存在队列中park():对进入队列的线程进行挂起,当拥有锁的线程释放完锁后,会调用unpark()启动队...

2020-03-15 16:29:48 196

原创 java线程并发安全概要

java并发编程基础概念JAVA内存模型与线程安全无锁(保证线程的原子性)JDK并发包基础概念同步与异步同步:同步调用需要等待方法执行完成后返回异步:不用等待执行方法执行完成后就直接放回,但不会马上有返回值并发与并行并发:线程之间进行调度执行并行:两个或多个线程同时执行临界区临界区:表示一个公共资源或共享数据,可以被多个线程共享,但是每一次只能有一个线程进入使用,...

2020-03-12 23:31:10 257

空空如也

空空如也

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

TA关注的人

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