- 博客(22)
- 资源 (51)
- 收藏
- 关注
转载 分布式锁的基本原理和实现
欢迎关注作者简书 文章目录一、什么是分布式锁?二、分布式锁的使用场景。三、分布式锁的实现(Redis) 转发:原文来自 传送门 一、什么是分布式锁? 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。 线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享...
2018-11-27 21:37:41 904
转载 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore 欢迎关注作者博客 简书传送门 转载:原文地址 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 一.CountDownLatch用法 CountDow...
2018-11-25 23:38:58 447
原创 剑指offer之找出数组中出现次数超过一半的数字
找出数组中出现次数超过一半的数字 欢迎关注作者简书 csdn传送门 题目 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。如:int a[] = {2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2 分析 解法一 数组中有一个数字出现的次数超过了数组长度的一半,如果把数组排序,排序之后位于数组中间的数字一定是出现次数超过数组长度一半的数字。排序算法可以使用s...
2018-11-24 21:43:27 969
转载 HashMap实现原理分析及简单实现一个HashMap
HashMap实现原理分析及简单实现一个HashMap 欢迎关注作者博客 简书传送门 HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashMap和Hashtable之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实...
2018-11-21 23:46:53 696
原创 剑指offer之二叉搜索树的后序遍历序列
剑指offer之二叉搜索树的后序遍历序列 欢迎关注作者博客 简书传送门 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 二叉树三种遍历方式 先序遍历 先序遍历先从二叉树的根开始,然后到左子树,再到右子树 中序遍历 中序遍历先从左子树开始,然后到根,再到右子树 后序遍历 后序遍历先从左子树开始,然后到...
2018-11-19 21:45:49 400
原创 剑指offer之数组最短路径规划
剑指offer之数组最短路径规划 欢迎关注作者博客 简书传送门 题目 寻找一条从左上角(arr[0][0])到右下角(arr[m-1][n-1])的路线,使得沿途经过的数组中的整数和最小。 思路 递归法 倒着来分析:最后一步到达arr[m-1][n-1]只有两条路,即通往arr[m-2][n-1]到达或者通往arr[m-1][n-2]到达,最后一步选择的路线为min{f(m-2,n-1),...
2018-11-18 23:07:22 849
原创 剑指offer之复杂链表的复制
剑指offer之复杂链表的复制 欢迎关注作者博客 简书传送门 题目 请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。 在复杂链表中,每个结点除了有一个pNext指针指向下一个结点之外,还有一个pSibling指向链表中的任意结点或者NULL。 结点的定义如下: public static class Comple...
2018-11-17 20:34:56 454
原创 通过锁顺序来避免动态的锁顺序死锁
通过锁顺序来避免动态的锁顺序死锁 前言 两个线程试图通过不同的顺序获取多个相同的锁。如果请求的顺序不相同,那么会出现循环的锁依赖现象,产生死锁。但是如果保证同时请求锁L和锁M的每一个线程,都是按照从 L 到 M 的顺序,那么就不会发生死锁了。 比如:银行账户转账问题,两个用户转账的话,如果采用一般的synchronized嵌套的话,容易造成死锁。 思想 我们可以制定锁的顺序,并在整个应...
2018-11-16 20:59:25 2009
原创 剑指offer之二叉搜索树的后序遍历序列
剑指offer之二叉搜索树的后序遍历序列 欢迎关注作者博客 简书传送门 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 二叉树三种遍历方式 先序遍历 先序遍历先从二叉树的根开始,然后到左子树,再到右子树 中序遍历 中序遍历先从左子树开始,然后到根,再到右子树 后序遍历 后序遍历先从左子树开始,然后到...
2018-11-15 20:25:43 566
原创 带日志和计时等功能的线程池
带日志和计时等功能的线程池 欢迎关注作者博客 简书传送门 前言 我们先来聊聊ThreadPoolExecutor的拓展。 扩展ThreadPoolExecutor 在执行任务的线程中将调用beforeExecute和afterExecute等方法,在这些方法中还可以添加日志、计时、监视或者统计信息收集的功能。无论任务是从run中正常返回,还是抛出一个异常而返回,afterExecute都会...
2018-11-14 21:22:18 1366
原创 使用Semaphore控制线程池任务提交的速率
使用Semaphore控制线程池任务提交的速率 欢迎关注作者博客 简书传送门 介绍 当线程池的工作队列被填满后,如果没有预定义的饱和策略来阻塞任务的执行,则可以通过信号量Semaphore来限制任务的到达率。Semaphore是一个同步工具类,用来控制同时访问某个特定资源的操作数量。它的acquire方法返回一个虚拟的许可,如果没有可用的许可,则阻塞该方法的调用线程直到有可用许可为止。如果线程...
2018-11-13 21:44:53 2539
原创 剑指offer之二叉树的镜像
二叉树的镜像 欢迎关注作者博客 简书传送门 题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 思路 树的镜像不是我们所熟知的内容,通常在课本上所熟悉的就是树的遍历等基本的操作。但是我们可以通过图像来把镜像的过程给描述出来。比如像下面的两个二叉树就是互为镜像 下面我们来分析,镜像发生的过程是怎么样的。 这两个树根结点都是1,那么先交换根结点的左右结点,得到图2。交换后,我...
2018-11-11 22:15:49 1016
原创 剑指offer之树的子结构
树的子结构 欢迎关注作者博客 简书传送门 题目 输入两颗二叉树A和B,判断B是不是A的子结构 思想 要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和B的根结点的值一样的结点N,第二步再判断树A中以N为根结点的子树是不是包括和树B一样的结构。 第一步在树A中查找与根结点的值一样的结点。这实际上就是树的遍历。 第二步判断以树A中以N为根结点的子树是不是和...
2018-11-10 13:26:16 982
原创 剑指offer之合并两个排序的列表
合并两个排序的列表 欢迎关注作者博客 简书传送门 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的,并返回合并后的头结点。 思路 假如List1中的头节点是小于List2中的,那么新的链表的头节点必将是List1的头节点,同理对List2也一样,那么在比较完头节点之后,再将List1中的下一个节点再与List2中的头节点比较,同样谁小谁进入新链表,然后再比...
2018-11-09 21:57:27 1046
原创 剑指offer之旋转数组的最小数字
剑指offer之旋转数组的最小数字 欢迎关注作者博客 简书传送门 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 如果直接遍历数组,时间复杂度为O(...
2018-11-08 21:24:14 1036
原创 多线程异步任务处理
@(多线程&&并发) 多线程异步任务处理 欢迎关注作者博客 简书传送门 文章目录多线程异步任务处理线程池线程池的优缺点常用的线程池技术@Async注解源码 我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,那我们怎么去使用它呢?我们先来了解下什么是线程池? 线程池 线程池是指在初始化一个多线程应用程序过程中创建一个...
2018-11-07 21:29:31 10309
原创 剑指offer之二分查找
@(算法) 二分查找 欢迎关注作者博客 简书传送门 思想: 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。 代码: /** * @program: * @description: 二分查找 ...
2018-11-06 20:23:58 1087
原创 剑指offer之数值的整数次方
数值的整数次方 欢迎关注作者博客 简书传送门 /** * @program: * @description: 数值的整数次方 * @author: zhouzhixiang * @create: 2018-10-31 20:48 */ public class Pow { public static void main(String[] args) throws Excepti...
2018-11-03 21:49:17 1131
原创 剑指offer之冒泡排序
冒泡排序 欢迎关注作者博客 简书传送门 冒泡排序(Bubble Sort),它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,所以叫“冒泡排序”。 原理 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比...
2018-11-02 22:52:15 1995
原创 剑指offer之Fibonacci青蛙跳台阶
Fibonacci青蛙跳台阶 欢迎关注作者博客 简书传送门 /** * @program: * @description: * @author: zhouzhixiang * @create: 2018-10-31 19:38 */ public class Fibonacci { public static void main(String[] args) throws Ex...
2018-11-01 21:07:41 1876
原创 剑指offer之给定链表的头指针和一个结点指针,在O(1)时间删除该结点
给定链表的头指针和一个结点指针,在O(1)时间删除该结点 欢迎关注作者博客 简书传送门 函数的声明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted); 分析: 这是一道广为流传的Google面试题,能有效考察我们的编程基本功,还能考察我们的反应速度,更重要的是,还能考察我们对时间复杂度的理解。 在链表中删除一个结点,...
2018-11-01 21:05:13 3498
原创 剑指offer之快速排序
快速排序 欢迎关注作者博客 简书传送门 今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。 思想 快速排序采用的思想是分治思想。 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后...
2018-11-01 20:59:18 2899
国家标准软件开发规范所有规范文档
2018-10-16
项目周报模板--县级海域动态监管能力建设项目(第1期)
2018-10-16
springboot-shiro认证系统框架--成型框架
2018-09-17
freemarker_lastest最新最全--文档+安装包+操作手册
2018-08-17
fiddler4_4.6.2.0
2018-08-17
Linux单机环境下HDFS伪分布式集群安装操作步骤v1.0.pdf
2018-05-06
GRPC调用全程示例加详细步骤+包含所有安装包+程序文件+操作文档(项目中记载下来的资料)
2018-05-06
GitHubSetup.exe+msysgit.zip+GitHub最新官方版
2018-05-06
Git最全--Git安装包+TortoiseGit64+TortoiseGit语言包+Git所有命令文档+Windows下安装git操作步骤文档
2018-05-06
ELK(Elastic+Logstash+Kibana)部署+配置操作文档.docx
2018-05-06
EditPlus_3.50.241_SC.exe破解版
2018-05-06
dubbo所有文档英文+中文.rar
2018-05-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人