- 博客(31)
- 收藏
- 关注
原创 多线程测试
测试代码public class ThreadPoolTest { private static ExecutorService ExecutorService = new ThreadPoolBuilder.FixedThreadPoolBuilder().setPoolSize(10).build(); public static void main(String[] a...
2020-02-13 13:49:01
227
原创 ThreadLocal使用场景分析
一、什么是ThreadLocalThreadLocal是与线程绑定的一个变量。二、ThreadLocal和Synchonized区别1、ThreadLocal和Synchonized都用于解决多线程并发访问2、Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。Synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而T...
2019-11-18 17:55:21
407
原创 java访问修饰符及反射使用
一、访问修饰符1、添加 public:全部可见 private:本类可见 protected:子类可见 defult:包类可见2、不添加默认protected:对当前包开放二、反射1、什么是反射Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称...
2019-11-14 17:18:11
375
原创 Java 8 Stream
什么是 Stream?Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted...
2019-10-23 17:01:16
191
原创 Spring之AOP
一、AOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它...
2019-07-30 11:07:55
172
原创 设计模式之模板模式
模板模式一、定义定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。二、模式结构三、代码实现1、抽象父类public abstract class Dish { /** * 具体的整个过程 */ protected void dodish(){ this....
2019-07-23 18:47:15
99
原创 设计模式之策略模式
标题策略模式一、 定义是一种定义了一系列算法的方法,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少各种算法类之间的耦合二、构造图三、代码实现1、环境角色public class Context { private Strategy strategy; public Context(Strategy strategy) { ...
2019-07-23 16:54:00
112
原创 高并发之幂等性与分布式锁
一、什么是幂等性一个幂等操作任其执行多次所产生的影响均与一次执行的影响相同。用数学的概念表达就是: nx1 = n 一样, x1 就是一个幂等操作。无论是乘以多少次结果都一样。二、常见的幂等性问题幂等性问题经常会是由网络问题引起的,还有重复操作引起的。场景一;比如点赞功能,一个用户只能对同一片文章点赞一次,重复点赞提示已经点过赞了。public void like(Article art...
2019-07-06 16:36:43
294
原创 IntelliJ IDEA 最新版 2019.1 安装与激活
一、先下载压缩包解压后得到jetbrains-agent.jar,把它放到你认为合适的⽂文件夹内。下载页面:https://zhile.io/2018/08/17/jetbrains-license-server-crack.html二、 启动你的IDE,如果上来就需要注册,选择:试用(Evaluate for free)进⼊入IDE三、点击你要注册的IDE菜单: Configure 或 H...
2019-07-06 15:06:17
7896
3
原创 JWT
一、JWT是什么JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。跨域身份认证的解决方案。二、特点1、紧凑:可以通过URL,POST参数或者在HTTP header发送,因为数据量小,传输速度也很快2、自包涵:负载中包含了所有用户所需要的信息,避免了多次查询数据库或缓存。 { ...
2019-06-22 16:06:42
268
原创 基本数据结构之二叉查找树
一、树的定义线性数据结构: ArrayList、LinkedList及其组合HashMap。非线性数据结构:树。如上图,从数据结构进化的角度来看,树(tree) 的生成是 链表 进化而来。链(Linked) 每个节点最多只有一个 前驱节点 ,那么可以称这个 链 为 树(tree) 。二、二叉查找树1、定义:二叉树是每个节点最多只有两个子树的树。子树通常被称为左子树(Left subtr...
2019-03-22 18:20:50
211
原创 基本排序算法
一 、 冒泡排序1、算法描叙- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。- 针对所有的元素重复以上的步骤,除了最后一个。- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。2、代码实现public class BubbleSort implement...
2019-03-21 17:42:33
142
原创 RPC框架实现原理
1、什么是RPC框架RPC,全称为Remote Procedure Call,即远程过程调用,是一种计算机通信协议。如:分别部署了应用A和应用B,位于A机器上的A应用要调用位于B机器上的B应用提供的函数或是方法,A应用和B应用不在一个内存空间里,所以不能直接调用,此时就需要通过网络来表达调用的方式和传输调用的数据。2、RPC协议组成一个典型RPC的使用场景中,包含了服务发现、负载、容错、网...
2019-03-14 16:01:21
241
原创 REST/HTTP/HTTPS协议基础
1、HTTP协议基础1.1 定义:HTTP协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。目前我们使用的是HTTP/1.1 版本。当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。 原理是怎样的呢?实际上我们输入URL(简单理解就是网址)后...
2019-03-13 15:57:29
6165
原创 JAVA分布式锁实现
1、背景目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要...
2019-03-12 15:41:31
402
原创 Java并发编程:AbstractQueuedSynchronizer源码分析1.8
1、背景:1.1、concurrent包的整体实现图如下图所示1.2、AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)同步队列,它提供了一个基于FIFO队列,构建锁或者其他同步组件(信号量、事件等)的基础框架类。JDK中很多工具类的实现都是依赖于AQS,如ReentrantLock, Semaphore, CountDown...
2019-03-07 00:55:26
196
原创 Java并发编程:ThreadPoolExecutor源码分析1.8
http://www.cnblogs.com/dolphin0520/p/3932921.htmlhttps://www.cnblogs.com/leesf456/p/5585627.htmlhttps://www.cnblogs.com/fixzd/p/9253203.html一、ThreadPoolExecutor的继承关系Executor接口:只有一个方法execute,传入线程任...
2019-02-28 23:08:11
233
原创 LinkedList源码分析1.8
一、LinkedList数据结构:LinkedList底层使用的双向链表结构,有一个头结点和一个尾结点,双向链表意味着我们可以从头开始正向遍历,或者是从尾开始逆向遍历,并且可以针对头部和尾部进行相应的操作注:源码中先将index与长度size的一半比较,如果index<size/2,就只从位置0往后遍历到位置index处,而如果 index>size/2,就只从位置size往前遍...
2019-02-27 15:12:02
177
原创 ArrayList源码分析1.8
一、ArrayList属性:1、ArrayList属性主要就是当前数组长度size,以及存放数组的对象elementData数组public class ArrayList<E> extends AbstractList<E> implements List<E>, Rando
2019-02-27 11:40:20
157
原创 ConcurrentHashMap实现原理及源码分析
一、ConcurrentHashMap跟HashMap,HashTable的对比HashMap不是线程安全:在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的HashTable是线程安全的:HashTable和HashMap的实现原理几乎一样,差别:1.Ha...
2019-02-26 23:27:15
51845
8
原创 HashMap源码分析1.8
一、HashMap在JDK1.8以前,HashMap采用数组+链表来处理hash冲突,即相同hash值的节点都存在一个链表中,但是链表长度变长,查找的效率就越低。在JDK1.8之后,HashMap采用数组+链表+红黑树,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。下图数组+链表结构:jdk1.8之前的hashmap都采用上图的结构,基于一个数组和多个单链表,h...
2019-02-26 17:06:35
223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人