自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个想写小说的程序员

苟日新,日日新,又日新。

原创 JAVA知识总结目录

1,NIO 5种网络IO模型介绍 5种网络IO模型介绍 多路复用IO模型中的select和epoll 多路复用IO模型中的select和epoll 2,JVM内存模型+垃圾回收机制 JVM内存模型+垃圾回收机制 3,MQ 4,redis 5,源码,hashMap,Concurre...

2018-11-14 19:42:40 182 0

原创 RSA加密的原理——为什么被公钥加密的可以被私钥解密?

RSA加密的原理——为什么被公钥加密的可以被私钥解密? 目录 一,RSA 数学理论基础 二,RSA实现原理 三,RSA加密的过程 四,参考文献 引言 在密码学最开始,都是使用的普通加密模式 A 用加密规则加密了字符串m 然后发给B ...

2018-08-25 15:32:43 28685 18

原创 Mybatis的核心——SqlSession解读

在spring中,dao层大多都是用Mybatis,那么 1,Mybatis执行sql最重要的是什么? 在以前对Mybatis的源码解读中,我们知道,Mybatis利用了动态代理来做,最后实现的类是MapperProxy,在最后执行具体的方法时,实际上执行的是: @Override pu...

2018-07-22 16:14:53 7315 3

原创 cglib动态代理和jdk动态代理的区别与应用

 1,引入如果从一个Controller调用Service的非事务方法a,然后在a里调用事务方法b,b事务生效吗? public void update() { updateActual(); int a = 1 / 0; } @Transactio...

2018-06-13 15:46:52 29204 11

原创 钉钉scheme

dingtalk://dingtalkclient/page/link?url=<UrlEncode后的url>&pc_slide=true

2020-04-07 20:59:23 278 0

原创 linux下使用cat打开文件乱码

cat test.txt | iconv -f GBK -t UTF-8 使用此命令即可

2020-03-16 16:49:37 93 0

原创 Spring中类路径下文件读取方式

InputStream is = 当前类名.class.getClassLoader().getResourceAsStream("test.properties"); InputStream is = Class.class.getResourceAsStream(&quo...

2020-03-16 11:26:46 108 0

原创 如何优雅的判空

如何优雅的判空 Scene1 判空并操作: 先看一个例子: package *; ​ import lombok.Data; ​ import java.util.Random; ​ public class Test { ​ private static Father getSo...

2019-12-27 15:08:14 121 0

原创 一个网站的演进之路

1,应用和数据库分机部署 2,应用服务器集群 3,软硬件负载均衡 4,解决统一session 5,数据库读写分离 6,缓存 7,分布式存储,redis等非关系型数据库 8,拆库,按业务垂直拆分数据,专库专用。水平拆分数据库表,sharding 9,拆分应用,服务化。 10,搜索引擎 摘自《...

2019-09-23 21:24:35 74 0

原创 如何画架构图之C4模型画法

如何画架构图之C4模型画法 之前一直看别人画架构图,自己画的很烂,最近看了一点点资料,整理了下,分享出来,希望对别人有帮助,如果有不对的地方欢迎指正。 C4架构图要解答的问题: 1,为哪些用户提供什么服务? 语境图 2,完成这个系统使用了哪些服务?容器图 3,每一个服务是由哪些组件实现的 组件...

2019-05-12 18:28:02 4500 0

原创 mac的ideal终端中mvn命令不生效 commang not found

可能是mac的终端使用了zsh,zsh的环境变量没配置 vim ~/.zshrc 增加环境变量即可 修改后source~/.zshrc 生效

2019-04-29 10:30:12 1183 0

原创 操作系统怎么启动

操作系统是怎么启动的? 首先,计算机启动时会先加载bios(基本io系统),完成后加载BootLoader(硬盘第一个扇区,512字节,0fc00),然后由BootLoader来加载os。然后os就可以在内存中 ...

2019-04-07 17:42:54 246 0

原创 springBoot JunitTest的使用以及如何在junit启动前加载

springBoot JunitTest的使用 @SpringBootTest(classes = {Application.class},webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @TestExecutionListe...

2019-03-04 15:54:32 2018 0

原创 一次C端线上缓存问题的总结

一次C端线上缓存问题的总结 做C端需求的第二周,有个小需求,需要将从中央配置中心的拿回来的数据做一个缓存,保证数据访问快速。 由于项目中直接有ehcache,集成spring-boot,所以开发起来比较简单,只是随手加上了@Cacheable注解,并在需要清除缓存的时候加上了@CacheEvict...

2019-02-28 11:45:09 93 0

原创 mac 上开发需要的软件

mac 上开发需要的软件 软件类 ideal sourcetree typora scroll reverse xmind zsh + iterm charles sublime postman Alfred3 navicat secureCrt pdf Expert 有道云 开发环境类 ...

2019-02-27 14:09:03 264 0

原创 Java 进阶 ——2019 计划要读的书

Java 进阶 ——2019 计划要读的书 代码整洁之道 重构 这两本学习完再写下面的书

2019-02-22 13:00:39 130 0

原创 Base64 加密算法原理

Base64 加密算法原理 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 因为在内存中每个字节占8位,即 1 byte = 8 bit,所有的数据都可以先转成ascii码,然后将对应的ascii码转为...

2019-01-21 17:19:44 901 0

原创 ToDo

ToDo 最近瞎忙,有几篇博客想写,但是一直没时间,记录下,后续补上。 客户端负载均衡和服务端负载均衡 Base64加密算法的实现原理

2019-01-17 14:49:00 793 0

原创 ThreadLocal 变量和 与线程池配合使用时可能会出现的问题

ThreadLocal 变量和 与线程池配合使用时可能会出现的问题 ThreadLocal 的介绍和使用 先看下ThreadLocal变量的使用 public void set(T value) { Thread t = Thread.currentThread(); ...

2019-01-16 11:46:18 690 0

原创 JAVA垃圾回收的几点知识

JAVA垃圾回收的几点知识 GC Root对象 因为java垃圾回收机制都是采用可达性分析法,所以需要有根对象来作为起始点,下面是可以作为GC Root的对象: 1.虚拟机栈(栈帧中的本地变量表)中引用的对象 2.方法区中的类静态变量引用的对象 3.常量池中对象。(方法区中) 4.本...

2019-01-15 14:27:37 84 2

原创 git中统计代码提交数

git中统计代码提交数 通过git log来取 git log --pretty=’%aN’ | sort | uniq -c | sort -k1 -n -r | head -n 5

2019-01-14 11:20:47 291 0

原创 二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法)

二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法) 层序遍历 /** * 树结构定义 */ private static class BinaryNode&amp;lt;T&amp;gt; { BinaryNode(T theElement) { ...

2018-12-26 17:00:24 812 0

原创 快排算法的Java实现

快排算法的Java实现 快排的核心是找到在无序数组中找到一个数,然后将比他小的数字放在他的左边,比他大的数字放在他的右边。然后递归的对左右两边进行继续排序,直到完成,下面看算法的实现: public static void sort(int a[], int start, int end) { ...

2018-12-26 14:30:07 1139 0

原创 数据库四种隔离级别

数据库四种隔离级别 数据库中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间可见,哪些不可见,较低的隔离可支持更高的并发。 未提交读 read uncommitted 可以读到别的事务中没提交的操作。会产生脏读。 可能产生脏读,不可重复读,幻读 读提交 read...

2018-12-19 15:52:38 112 0

原创 Http协议报文结构

Http协议报文结构 Http请求 HTTP请求由状态行、请求头、请求正文三部分组成。 状态行包括: Request URL: https://www.baidu.com/his?wd=&amp;from=pc_web&amp;rf=3&amp;hisdata=%5B%...

2018-12-17 17:48:49 566 0

原创 二叉树前序、中序、后序遍历求法

二叉树前序、中序、后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序遍历: 1.后序遍历左子树 2.后序遍历右子树 3.访问根节点 三种方法的特点: 前序:开头是头...

2018-12-17 16:24:55 67 2

转载 Java垃圾回收(GC)机制详解

Java垃圾回收(GC)机制详解   转自:https://www.cnblogs.com/xiaoxi/p/6486852.html 一、为什么需要垃圾回收   如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不...

2018-12-17 14:53:41 114 0

原创 Java中 synchronized 关键字的理解

synchronized 关键字的理解 在Java中,synchronized 是一个重量级的控制并发的关键字。 这个关键字可以保证并发过程所必须的“原子性”,“可见性”,“有序性” 一,用法: 在方法内加锁: synchronized 块在代码编译后生成的字节码中实际上是加上monit...

2018-12-13 21:49:31 128 0

原创 LinkedHashMap 的理解以及借助其实现LRU

LinkedHashMap 的理解以及借助其实现LRU LinkedHashMap中有一个参数 accessOrder,这个参数定义了LinkedHashMap的访问顺序。 LinkedHashMap中继承了Node,给Node新增了2个新的属性before和after static clas...

2018-12-12 17:32:28 129 0

原创 ConcurrentHashMap源码学习

ConcurrentHashMap源码学习 自从学习了AQS之后,想着重新读一下ConcurrentHashMap的源码来加深下理解,所以有了这篇文章,针对ConcurrentHashMap常用的方法进行分析。 0,基础知识以及一些字段的含义 1.8中的ConcurrentHashMap使用...

2018-12-11 22:35:25 75 0

原创 AQS理解之七——AQS中的条件队列

AQS中的条件队列 在AQS中还实现了一个类,ConditionObject,它实现了Condition接口,实现一个绑定在锁上的条件队列。 先看看他的uml图。 主要方法 它实现了Condition接口,主要实现的方法是await和signal以及它们的带时间参数方法。 条件队列的一般用法: ...

2018-12-10 16:58:42 682 0

原创 AQS理解之六,AQS的其他实现类

AQS理解之六,AQS的其他实现类 1,ThreadPoolExecutor 中的 Worker 类 protected boolean tryAcquire(int unused) { if (compareAndSetState(0, 1)) { set...

2018-12-10 13:44:05 412 0

原创 AQS理解之五—并发编程中AQS的理解

AQS理解之五—并发编程中AQS的理解 首先看下uml类图: AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问。 先看下AbstractQueuedSynchronizer 这个类的内部变量。 Head和tail是...

2018-12-09 11:45:09 243 0

原创 AQS理解之四—看看我们写的和 ReentrantLock 的公平不公平锁的区别

AQS理解之四,看看我们写的和 ReentrantLock 的公平不公平锁的区别 首先看下ReentrantLock的lock和unlock方法。 不公平锁版本lock方法 final void lock() { if (compareAndSetState(0, 1)) ...

2018-12-09 11:34:32 440 0

原创 AQS理解之三,由刚才写的锁转变成一个公平锁

AQS理解之三,由刚才写的锁转变成一个公平锁 在第二节里我们实现了一个不公平的锁,之所以说它不公平,主要是因为加锁后解锁时,阻塞的其他线程获取到的锁的可能是随机的,并不是按照顺序来确定的,如果要转变为公平锁,我们应该要记录这个进入的顺序,并在解锁时必须满足是第一个阻塞等待的线程才解锁。 其次,...

2018-12-09 10:37:02 97 0

原创 AQS理解之二,自己设计一个锁

AQS理解之二,自己设计一个锁 一,实现锁的条件 首先我们想一想,如果我们自己实现一个类似于java中的锁,我们可能需要哪些必要的东西: 1,记录是哪个线程持有了锁。 2,如果有一个变量代表加锁,A线程加锁,需要让B线程能看见,这里需要可见性,所以我们可能要用到volatile变量。 3...

2018-12-08 23:33:41 117 0

原创 AQS理解之一,基础知识——LockSupport

AQS理解之一,基础知识——LockSupport LockSupport类位于java.util.concurrent包下。 顾名思义,就是一个实现锁的辅助类。 来看下他的类结构: 其中的变量都是通过UNSAFE类来赋值,代码如下: private static final sun...

2018-12-08 21:55:11 242 0

原创 深入浅出理解锁之—— AbstractQueuedSynchronizer

并发编程中AQS的深入理解 前一段时间学习了AQS的代码,对java中的锁有了新的理解,用这篇博客来记录下。大概分为以下几个部分。 一,基础知识——LockSupport 二,自己设计一个锁 三,由刚才写的锁转变成一个公平锁 四,看看我们写的和ReentrantLock的公平不公平锁的区...

2018-12-08 21:24:24 221 0

原创 Java内存模型与happens-before原则

Java内存模型 Java内存模型不同于Jvm内存模型,Java内存模型(JMM)规定了JVM必须遵循一组最小保证,这组保证规定了对变量的写入操作在何时将于其他线程可见。 一,平台的内存模型 二,重排序 再没有充分同步的程序中,如果调度器采用不恰当的方式来交替执行不同线程的操作,那...

2018-12-05 16:11:48 133 0

原创 线程池工作原理

线程池工作原理 线程池状态的切换: 线程池关键类的uml图: 线程池就是把任务提交和任务执行解耦。 首先看一下线程池的使用: public static void main(String args[]) throws InterruptedException { Ex...

2018-11-29 11:54:21 126 0

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