- 博客(108)
- 资源 (4)
- 收藏
- 关注

原创 JAVA知识总结目录
1,NIO5种网络IO模型介绍5种网络IO模型介绍多路复用IO模型中的select和epoll多路复用IO模型中的select和epoll2,JVM内存模型+垃圾回收机制JVM内存模型+垃圾回收机制3,MQ4,redis5,源码,hashMap,ConcurrentHashMap分段锁6,concurrent包7,算法8,tomcat运行流程...
2018-11-14 19:42:40
285

原创 RSA加密的原理——为什么被公钥加密的可以被私钥解密?
RSA加密的原理——为什么被公钥加密的可以被私钥解密?目录 一,RSA 数学理论基础 二,RSA实现原理 三,RSA加密的过程 四,参考文献引言在密码学最开始,都是使用的普通加密模式 A 用加密规则加密了字符串m 然后发给B B 用A的加密规则来解密,得到原始信息m在这个过程中A必须把自己的加密规则告诉B,否则B无...
2018-08-25 15:32:43
42532
26

原创 Mybatis的核心——SqlSession解读
在spring中,dao层大多都是用Mybatis,那么1,Mybatis执行sql最重要的是什么?在以前对Mybatis的源码解读中,我们知道,Mybatis利用了动态代理来做,最后实现的类是MapperProxy,在最后执行具体的方法时,实际上执行的是:@Override public Object invoke(Object proxy, Method method, Obj...
2018-07-22 16:14:53
11629
4

原创 cglib动态代理和jdk动态代理的区别与应用
1,引入如果从一个Controller调用Service的非事务方法a,然后在a里调用事务方法b,b事务生效吗? public void update() { updateActual(); int a = 1 / 0; } @Transactional public void updateActual() { WithHo...
2018-06-13 15:46:52
43479
13
转载 CURL 发送请求
CURL 发送POST请求curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://192.168.0.1:8001/test"参数 内容-H 请求头-d POST内容-X 请求协议简介curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非
2020-12-21 21:11:39
430
原创 DAC MAC RBAC ABAC 权限系统的设计
访问控制Access ControlDAC (Discretionary Access Control) 自主访问控制,有权限的人可以给这个权限授权MAC(Mandatory Access Control) 强制访问控制,只能管理员授权前两个都是user-permission的模式RBAC(role-based)基于角色的 user-role-permissionABAC(attribute-based) 基于属性...
2020-08-13 16:59:08
345
原创 分布式系统中的CAP理论
在分布式系统中,有一个CAP理论:C: 一致性 consistentA: 可用性 availableP: 分区容错性 partion tolerencecap不能同时做到,因为我们认为网络通信是不可靠的,总会可能出现问题导致网络通信失败。即必须满足P。当满足P时。即存在:CP:为什么满足CP时不能满足A呢,因为这里的C是强一致性,比如我们集群里有2台机器m1,m2,当发送修改数据到其中1台m1时(将一个数据a从0修改为1),如果我们为了达到强一致性,就必须在向m1写入...
2020-08-10 20:32:54
171
原创 钉钉scheme
dingtalk://dingtalkclient/page/link?url=<UrlEncode后的url>&pc_slide=true
2020-04-07 20:59:23
3962
原创 Spring中类路径下文件读取方式
InputStream is = 当前类名.class.getClassLoader().getResourceAsStream("test.properties");InputStream is = Class.class.getResourceAsStream("/test.properties");URL url = 当前类名.class.getClassLoader().getRe...
2020-03-16 11:26:46
807
原创 如何优雅的判空
如何优雅的判空Scene1 判空并操作:先看一个例子:package *;import lombok.Data;import java.util.Random;public class Test { private static Father getSomeoneFather() { return Math.random() >...
2019-12-27 15:08:14
1178
原创 一个网站的演进之路
1,应用和数据库分机部署2,应用服务器集群3,软硬件负载均衡4,解决统一session5,数据库读写分离6,缓存7,分布式存储,redis等非关系型数据库8,拆库,按业务垂直拆分数据,专库专用。水平拆分数据库表,sharding9,拆分应用,服务化。10,搜索引擎摘自《大型网站系统与JAVA中间件实践》...
2019-09-23 21:24:35
177
原创 如何画架构图之C4模型画法
如何画架构图之C4模型画法之前一直看别人画架构图,自己画的很烂,最近看了一点点资料,整理了下,分享出来,希望对别人有帮助,如果有不对的地方欢迎指正。C4架构图要解答的问题:1,为哪些用户提供什么服务? 语境图2,完成这个系统使用了哪些服务?容器图3,每一个服务是由哪些组件实现的 组件图4,实现这个组件需要完成什么?类图语境图:意图: 我们构建的软件系统是什么? 谁在使用...
2019-05-12 18:28:02
14817
原创 mac的ideal终端中mvn命令不生效 commang not found
可能是mac的终端使用了zsh,zsh的环境变量没配置vim ~/.zshrc增加环境变量即可修改后source~/.zshrc 生效
2019-04-29 10:30:12
3849
2
原创 操作系统怎么启动
操作系统是怎么启动的?首先,计算机启动时会先加载bios(基本io系统),完成后加载BootLoader(硬盘第一个扇区,512字节,0fc00),然后由BootLoader来加载os。然后os就可以在内存中...
2019-04-07 17:42:54
499
原创 springBoot JunitTest的使用以及如何在junit启动前加载
springBoot JunitTest的使用@SpringBootTest(classes = {Application.class},webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)@TestExecutionListeners(listeners = {TestListener.class, DependencyInj...
2019-03-04 15:54:32
4142
原创 一次C端线上缓存问题的总结
一次C端线上缓存问题的总结做C端需求的第二周,有个小需求,需要将从中央配置中心的拿回来的数据做一个缓存,保证数据访问快速。由于项目中直接有ehcache,集成spring-boot,所以开发起来比较简单,只是随手加上了@Cacheable注解,并在需要清除缓存的时候加上了@CacheEvict。当然,正常情况下没有任何问题。结果….突然当配置中心挂了的时候,我们把null值缓存进去了,导...
2019-02-28 11:45:09
258
原创 mac 上开发需要的软件
mac 上开发需要的软件软件类idealsourcetreetyporascroll reversexmindzsh + itermcharlessublimepostmanAlfred3navicatsecureCrtpdf Expert有道云开发环境类javamavengit...
2019-02-27 14:09:03
533
原创 Base64 加密算法原理
Base64 加密算法原理Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。因为在内存中每个字节占8位,即 1 byte = 8 bit,所有的数据都可以先转成ascii码,然后将对应的ascii码转为8位长度的二进制数据,比如 s 对应 115-&gt; 01110011。而base64做的就是将所有的二进...
2019-01-21 17:19:44
2563
1
原创 ThreadLocal 变量和 与线程池配合使用时可能会出现的问题
ThreadLocal 变量和 与线程池配合使用时可能会出现的问题ThreadLocal 的介绍和使用先看下ThreadLocal变量的使用 public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map...
2019-01-16 11:46:18
1308
原创 JAVA垃圾回收的几点知识
JAVA垃圾回收的几点知识GC Root对象因为java垃圾回收机制都是采用可达性分析法,所以需要有根对象来作为起始点,下面是可以作为GC Root的对象:1.虚拟机栈(栈帧中的本地变量表)中引用的对象2.方法区中的类静态变量引用的对象3.常量池中对象。(方法区中)4.本地方法栈中JNI(即一般说的Native方法)中引用的对象新生代GC(Minor GC)采用复制...
2019-01-15 14:27:37
146
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
727
原创 二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法)
二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法)层序遍历/*** 树结构定义*/private static class BinaryNode&lt;T&gt; { BinaryNode(T theElement) { this(theElement, null, null); } BinaryNode(T theElement, BinaryNode&lt;T...
2018-12-26 17:00:24
2556
原创 快排算法的Java实现
快排算法的Java实现快排的核心是找到在无序数组中找到一个数,然后将比他小的数字放在他的左边,比他大的数字放在他的右边。然后递归的对左右两边进行继续排序,直到完成,下面看算法的实现:public static void sort(int a[], int start, int end) { if (start >= end) { return; } //获取到已经排好序的数字...
2018-12-26 14:30:07
1918
原创 数据库四种隔离级别
数据库四种隔离级别数据库中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间可见,哪些不可见,较低的隔离可支持更高的并发。未提交读 read uncommitted可以读到别的事务中没提交的操作。会产生脏读。可能产生脏读,不可重复读,幻读读提交 read committed大多数数据库系统的默认隔离级别,但不是Mysql的。读到别的事务中已经提交的操...
2018-12-19 15:52:38
285
原创 Http协议报文结构
Http协议报文结构Http请求HTTP请求由状态行、请求头、请求正文三部分组成。状态行包括:Request URL: https://www.baidu.com/his?wd=&from=pc_web&rf=3&hisdata=%5B%7B%22time%22%3A1544595691%2C%22kw%22%3A%22%E5%8C%97%E5%A4%A7%E9...
2018-12-17 17:48:49
1579
原创 二叉树前序、中序、后序遍历求法
二叉树前序、中序、后序遍历相互求法二叉树的三种遍历方法:前序遍历:1.访问根节点2.前序遍历左子树3.前序遍历右子树中序遍历:1.中序遍历左子树2.访问根节点3.中序遍历右子树后序遍历:1.后序遍历左子树2.后序遍历右子树3.访问根节点三种方法的特点:前序:开头是头结点,第一个节点肯定是根节点中序:可以根据头结点划分左右子树的元素后序:末尾是头结点,最后一个节点...
2018-12-17 16:24:55
218
2
转载 Java垃圾回收(GC)机制详解
Java垃圾回收(GC)机制详解 转自:https://www.cnblogs.com/xiaoxi/p/6486852.html一、为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。二、哪些内存需要回收?哪些内存需要回收是垃圾回...
2018-12-17 14:53:41
294
原创 Java中 synchronized 关键字的理解
synchronized 关键字的理解在Java中,synchronized 是一个重量级的控制并发的关键字。这个关键字可以保证并发过程所必须的“原子性”,“可见性”,“有序性”一,用法:在方法内加锁:synchronized 块在代码编译后生成的字节码中实际上是加上monitorenter 和monitorexit。//对当前的this对象加锁,和synchronized成员方法是一...
2018-12-13 21:49:31
242
原创 LinkedHashMap 的理解以及借助其实现LRU
LinkedHashMap 的理解以及借助其实现LRULinkedHashMap中有一个参数 accessOrder,这个参数定义了LinkedHashMap的访问顺序。LinkedHashMap中继承了Node,给Node新增了2个新的属性before和afterstatic class Entry<K,V> extends HashMap.Node<K,V> ...
2018-12-12 17:32:28
211
原创 ConcurrentHashMap源码学习
ConcurrentHashMap源码学习自从学习了AQS之后,想着重新读一下ConcurrentHashMap的源码来加深下理解,所以有了这篇文章,针对ConcurrentHashMap常用的方法进行分析。0,基础知识以及一些字段的含义1.8中的ConcurrentHashMap使用了比较多的CAS操作,例如设置每个tab。设置一些变量值,用UnSafe类来操作。这三个字段值表示了特殊的...
2018-12-11 22:35:25
156
原创 AQS理解之七——AQS中的条件队列
AQS中的条件队列在AQS中还实现了一个类,ConditionObject,它实现了Condition接口,实现一个绑定在锁上的条件队列。先看看他的uml图。主要方法它实现了Condition接口,主要实现的方法是await和signal以及它们的带时间参数方法。条件队列的一般用法:当满足某个条件时,通知正在等待这个条件的线程(signal)当需要满足某个条件才能继续执行时,进行阻...
2018-12-10 16:58:42
2479
原创 AQS理解之六,AQS的其他实现类
AQS理解之六,AQS的其他实现类1,ThreadPoolExecutor 中的 Worker 类protected boolean tryAcquire(int unused) { if (compareAndSetState(0, 1)) { setExclusiveOwnerThread(Thread.currentThread()); ...
2018-12-10 13:44:05
936
原创 AQS理解之五—并发编程中AQS的理解
AQS理解之五—并发编程中AQS的理解首先看下uml类图:AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问。先看下AbstractQueuedSynchronizer 这个类的内部变量。Head和tail是两个Node变量。int型的state。long型的spinForTimeoutThreshold...
2018-12-09 11:45:09
485
原创 AQS理解之四—看看我们写的和 ReentrantLock 的公平不公平锁的区别
AQS理解之四,看看我们写的和 ReentrantLock 的公平不公平锁的区别首先看下ReentrantLock的lock和unlock方法。不公平锁版本lock方法final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThrea...
2018-12-09 11:34:32
589
原创 AQS理解之三,由刚才写的锁转变成一个公平锁
AQS理解之三,由刚才写的锁转变成一个公平锁在第二节里我们实现了一个不公平的锁,之所以说它不公平,主要是因为加锁后解锁时,阻塞的其他线程获取到的锁的可能是随机的,并不是按照顺序来确定的,如果要转变为公平锁,我们应该要记录这个进入的顺序,并在解锁时必须满足是第一个阻塞等待的线程才解锁。其次,在上一节我们实现的锁是一个自旋阻塞等待的,这样的话线程还是在继续白白工作的,我们在这里也进行优化,使用Lo...
2018-12-09 10:37:02
162
原创 AQS理解之二,自己设计一个锁
AQS理解之二,自己设计一个锁一,实现锁的条件首先我们想一想,如果我们自己实现一个类似于java中的锁,我们可能需要哪些必要的东西:1,记录是哪个线程持有了锁。2,如果有一个变量代表加锁,A线程加锁,需要让B线程能看见,这里需要可见性,所以我们可能要用到volatile变量。3,对变量的操作应该是一个原子操作。二,实现首先我们定义一个类,这个类需要有一个持有锁的变量。这里使用owne...
2018-12-08 23:33:41
248
原创 AQS理解之一,基础知识——LockSupport
AQS理解之一,基础知识——LockSupportLockSupport类位于java.util.concurrent包下。顾名思义,就是一个实现锁的辅助类。来看下他的类结构:其中的变量都是通过UNSAFE类来赋值,代码如下:private static final sun.misc.Unsafe UNSAFE; private static final long parkBl...
2018-12-08 21:55:11
729
eclipse Formatter codeStyle.xml
2018-05-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人