自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

逆光世间

个人博客地址:www.chenguanting.top

  • 博客(47)
  • 收藏
  • 关注

原创 线程池导读2:浅谈JAVA线程返回值工作原理

1. 前言请先看浅谈JAVA线程池工作原理后再看本篇内容2. 小Demo123456789ExecutorService executorService = Executors.newCachedThreadPool();Future<Demo1> future = executorService.submit(new Callable&l...

2020-02-27 03:00:31 311

原创 线程池导读1:浅谈JAVA线程池工作原理

1. 前言可以先看看这篇博客: JAVA中的线程和操作系统中的线程的关系,从这里面我们可以直到以下几点Thread类调用start方法会通过jvm调用系统底层函数创建线程。创建完一个新的线程后, 新的线程会回调我们的run方法创建线程很麻烦,开销很大以下代码均为伪代码,目的是提供思路2. 分析1234567final List list = ...

2020-02-26 15:06:24 164

原创 jdk1.7-ConcurrentHashMap

1. 前言ConcurrentHashMap是一种支持多线程的hashmap, 相对于hashTable它使用了分段锁的方式加锁, 大大提升了并发的性能1.1. 数据结构ConcurrentHashMap与hashmap有所不同的是最初初始化的数组的每一个节点中存放的都是n个数组, 这些数组中存放的才是最终存放数据的链表.1.2. UNSAFEUNSAFE是Jav...

2020-02-24 03:49:00 265

原创 jdk1.7-HashMap

1. 前言jdk1.7下载链接jdk1.8下载链接以上为官网下载链接, 没有账号的同学建议搜索oracle账号共享,使用共享账号下载.以mac为例,两个版本下载完成后续添加至idea添加: file->project structure->platorm setting->sdks->点击加号选择项目使用的jdk: file->pro...

2020-02-19 13:12:19 196

原创 Redis实用API

1. 前言学习过程中遇到的感觉比较有意思的API做一个整理2. setNx如果指定的Key不存在,则设定该Key持有指定字符串Value,此时其效果等价于SET命令。相反,如果该Key已经存在,该命令将不做任何操作并返回。这个命令常用语分布式锁, 用法如下1234567891011121314void test(){ Boole...

2020-02-16 14:32:47 89

原创 Redis缓存三大问题

1. 前言使用redis做缓存一般使用如下方式:后台接受到请求查询redis看是否存在,存在则直接返回查询数据库,如果查询到则插入redis后返回, 否则返回null但是, 在大数据量请求的情况下往往存在以下问题2. 缓存穿透查询一条不存在的数据举例: 黑客攻击黑客以一个不存在的订单号不停的对数据进行查询, 这会造成我们查询redis后查询不到结果,...

2020-02-15 13:55:32 114

原创 Redis持久化

1. 前言Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。2. RDB(redis dataBase)RDB持久化是把当前进程的数据转换成二进制文件生成快照保存到硬盘; 触发RDB持久化过程分为手动触发和自动触发 2.1. 触发机制手动触发分别对应save和bgsave命令 ...

2020-02-13 12:29:32 79

原创 布隆过滤器

1. 前言布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。(来源:百度百科)1.1. 是什么可以理解为一个很长的数组, 将大批量的数据初始化进这个数组后, 我们可以判断一个...

2020-02-13 07:32:38 82

原创 并发9:Condition源码解析

1. 前言Condition 接口的实现类有两个, 本篇只介绍 AbstractQueuedSynchronizer 中的实现 ConditionObject通过上一篇Condition介绍及使用我们看到在创建Condition对象时调用的是’newCondition()’, 并且 Condition只能在lock锁内使用, 我们可以大胆猜想: Condition 和...

2020-02-04 08:35:39 127

原创 并发8:Condition介绍及使用

1. 前言 Condition是用来替代传统的Object的wait()、notify()的,相比使用Object的wait()、notify()实现线程间协作更加安全和高效2. 介绍生成一个Condition的代码是lock.newCondition() 调用Condition的await()和signal()方法,都必须在lock之内,就是说必须在lock.loc...

2020-02-03 02:43:56 133

原创 并发7:ReentrantLock

ReentrantLock 依赖 AQS 实现,请先理解AQS1. 介绍1.1. 小 DEMO123456789101112ReentrantLock lock = new ReentrantLock();public void demo() { lock.lock(); try { doSomething();...

2020-02-02 14:00:00 160

原创 并发6:AQS

1. 简介AQS 全拼为 AbstractQueuedSynchronizer , 即队列同步器. 它是构建锁或者其他同步组件的基础框架(如 ReentrantLock、ReentrantReadWriteLock、Semaphore 等). 它是 J.U.C 并发包中的核心基础组件。JAVA API 描述如下: 提供一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁...

2019-12-30 02:45:22 100

原创 并发5:CAS

1. 简介CAS 全拼为 Compare And Swap 比较和交换, 也有人理解为 Compare And Set比较和赋值2. 锁与共享变量加锁是一种悲观的策略,它总是认为每次访问共享资源的时候,总会发生冲突,所以宁愿牺牲性能(时间)来保证数据安全。无锁是一种乐观的策略,它假设线程访问共享资源不会发生冲突,所以不需要加锁,因此线程将不断执行,不需要停止。一旦碰到...

2019-12-29 10:00:25 167

原创 并发4:懒汉模式与枚举模式

0.1. 懒汉模式0.1.1. 懒汉模式(初始版)1234567891011121314151617public class Singleton { private static Singleton singleton; private Singleton() { } public Singleton ge...

2019-12-23 13:35:22 115

转载 并发3:volatile

0.1. 硬件内存架构在CPU内部有一组CPU寄存器,寄存器是cpu直接访问和处理的数据,是一个临时放数据的空间。一般CPU都会从内存取数据到寄存器,然后进行处理,但由于内存的处理速度远远低于CPU,导致CPU在处理指令时往往花费很多时间在等待内存做准备工作,于是在寄存器和主内存间添加了CPU缓存,CPU缓存比较小,但访问速度比主内存快得多,如果CPU总是操作主内存中的同一址地...

2019-12-22 03:45:44 66

原创 markdown合并单元格

markdown本身不支持合并单元格, 但是兼容html, html支持该功能0.1. html实现表格0.1.1. 基础用法1234567891011121314151617<table> <tr> <td>姓名</td> <td>年龄&...

2019-12-18 03:38:06 651

原创 并发2:Synchronized

0.1. 锁机制有如下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的值),否则另一个线程可能是在本地缓...

2019-12-17 03:45:44 85

原创 maven-optional可选依赖

0.1. 规则项目 A 依赖项目 B, 项目 B 依赖项目 C123456<dependency> <groupId>com</groupId> <artifactId>C</artifactId> <version>1</version> <optional...

2019-12-11 13:38:05 652

原创 自定义redis锁注解

项目中经常使用的redis锁写起来十分繁琐, 同样的代码需要编写多次. 于是想到使用注解方式来解决0.1. 构思由于使用注解不能确定返回值, 所以采用自定义异常的方式来解决redis锁一般需要指定过期时间, 考虑到特殊情况设置默认过期时间为永久0.2. 启动类123456789// 开启AOP代理自动配置 // exposeProxy = ...

2019-12-11 13:24:25 306

原创 hexo后台运行

前言: hexo部署在服务器后, 一旦断开ssh链接就会自动关闭. 故在网上找了个接管hexo进程的工具0.1. 安装pm21234567891011npm install -g pm2// 下方为打印出的日志信息/self/app/node-v12.13.1-linux-x64/bin/pm2 -> /self/app/node-v12...

2019-12-03 06:16:17 1313

原创 linux安装node.js

0.1. 1.下载官网安装地址123456789选择当前的长期支持版本对应的linux版本右键复制链接得到如下链接https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.xz在服务器上创建文件夹下载即可wget https://nodejs.org/dist/v12.13.1/nod...

2019-11-23 05:48:25 58

原创 hexo设置搜索

0.1. 安装hexo-generator-searchdb插件1npm install hexo-generator-searchdb --save0.2. 配置1234567891011在 blog/_config.yml 文件追加search: path: search.xml field: post format: html...

2019-11-16 07:04:32 276

原创 hexo配置本地图片

1. 修改配置文件123vi /blog/_config.ymlpost_asset_folder: true2. 安装hexo-asset-image12在hexo目录执行npm install https://github.com/CodeFalling/hexo-asset-image --save3. 使用1hexo n "git...

2019-11-13 04:55:03 337

原创 git配置sshkey

之前一直使用git提供的http链接来推送代码, 不过今天mac的sourcetree炸了,不能保存密码. 网上查了很多方法都不能解决, 最后决定改用ssh登录. 1. 1.Git的userName和email12git config --global user.name "yuyu"git config --global user.email &...

2019-11-12 06:16:33 80

原创 hexo

1. Hexo优势: 部署方便, 第三方主体非常漂亮, 可以在git上直接运行生产网页(免费)官方文档2. 安装首先需要本地安装npm , git(此处略过)安装hexo12345678910mkdir hexocd hexonpm install hexo-cli -ghexo init blogcd blognpm install...

2019-11-12 06:16:33 198

转载 索引合并

索引合并转载自The Index Merge method is used to retrieve rows with several range scans and to merge their results into one. The merge can produce unions, intersections, or unions-of-intersections of its u...

2019-10-31 10:29:22 613

转载 mysql索引最左原则

mysql索引最左原则作者:沈杰表结构CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `cid` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name_cid_INX` (`na...

2019-10-31 10:28:44 187

原创 聚集索引与辅助索引

聚集索引与辅助索引聚集索引InnoDB存储引擎表是索引组织表,即按照主键的顺序存储数据。当一个表没有主键,或者没有一个索引,Innodb会如何处理呢。请看如下规则:如果一个主键被定义了,那么这个主键就是作为聚集索引。如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引。如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一...

2019-10-31 10:28:04 153

原创 二分查找法与二叉树

二分查找法与二叉树二分查找法定义: 将记录按有序化递增或递减排列,在查找过程中采用跳跃方式进行查找,即先以有序的中间位置为比较对象,如果要查找的值小于中点元素,则将待查序列缩小为左半部分,否则为右半部分从图中可以看出,用了3次就查到了48这个数. 如果是顺序查找则需要8次.二叉树定义: 在二叉树中,左子树的值总是小于根的值,右子树的值总是大于根的值查找方式为先查根,比根小查...

2019-10-31 10:27:25 1058

原创 Spring 统一资源加载策略

Spring 统一资源加载策略ResourceFileSystemResource :对 java.io.File 类型资源的封装,只要是跟 File 打交道的,基本上与 FileSystemResource 也可以打交道。支持文件和 URL 的形式,实现 WritableResource 接口,且从 Spring Framework 5.0 开始,FileSystem...

2019-10-31 10:26:20 169

原创 BeanDefinition加载、解析、处理、注册

BeanDefinition加载、解析、处理、注册前言: IOC的Bean从xml中进行解析到注册到IOC容器中, 之前只知道容器的加载流程,具体实现却一直模糊.今天正好追了源代码并记录下来简单的注册代码// 获取资源ClassPathResource resource = new ClassPathResource("org/springframework/beans/factor...

2019-10-31 10:25:40 123

原创 算法入门1:堆栈和队列互相模拟

算法入门1:堆栈和队列互相模拟堆栈模拟队列需要两个堆栈, 一个负责输入, 另一个负责输出将数据push到输入队列a中将a中数据pop到输出队列b中pop出b中数据public static void stackToQueue(Stack<Integer> inPut){ Stack<Integer> outPut = new Stack<&g...

2019-10-31 10:24:45 209

转载 JVM

JVM转载自Java运行时数据区Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:程序计数器:指向当前线程正在执行的字节码指令。线程私有的。虚拟机栈:虚拟机栈是Ja...

2019-10-31 10:23:46 94

原创 Linux 安装 Elasticsearch6.4.x

Linux 安装 Elasticsearch6.4.x安装JDKes依赖于jdk,服务器上已经安装jdk,略过安装es1. 下载// 创建目录cd /usr/local/mkdir es// wget下载wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz// 解...

2019-10-31 10:21:22 144

原创 spring-boot-data-elasticsearch

spring-boot-data-elasticsearch前言:网上很多人说spring-boot-data-elasticsearch支持es版本过低不推荐使用,我在官网只找到如下版本对应说明,没有关于spring-boot-data对应版本说明就点开本地pom看了下spring-data-elasticsearchelasticsearch3.1.x6.2.2...

2019-10-31 10:15:36 777

原创 Linux安装Elasticsearch6.4.x

1. Linux 安装 Elasticsearch6.4.x1.1. 安装JDKes依赖于jdk,服务器上已经安装jdk,略过1.2. 安装es1.2.1. 1. 下载1234567// 创建目录cd /usr/local/mkdir es// wget下载wget https://artifacts.elastic.co/downloads/ela...

2019-09-25 06:27:57 90

原创 并发1:JVM

1. JVM转载自1.1. Java运行时数据区Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:程序计数器:指向当前线程正在执行的字节码指令。线...

2019-08-12 15:43:22 119

原创 堆栈和队列互相模拟

1. 算法入门1:堆栈和队列互相模拟1.1. 堆栈模拟队列需要两个堆栈, 一个负责输入, 另一个负责输出将数据push到输入队列a中将a中数据pop到输出队列b中pop出b中数据1234567891011121314151617181920public static void stackToQueue(Stack<...

2019-07-30 01:55:03 150

原创 springboot配置Druid监控

1. springboot配置Druid监控1.1. 配置类(配置信息在类中)1234567891011121314151617181920212223242526@Configurationpublic class DruidDBConfig { @Bean public ServletRegist...

2019-07-24 14:20:49 277

原创 item2免密ssh登录

0.1. 查看项目结构,tree0.2. 1. ssh携带pom远程登录0.2.1. 方法1: 直接登录1ssh -i /Users/yuyu/.ssh/123/yuyu.pem yuyu@ops.com登录后需要输入密码0.2.2. 方法2: 免密登录12345// 添加pom到ssh中ssh-add -k /Users/yuyu/.ssh/123/...

2019-07-11 06:16:33 252

空空如也

空空如也

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

TA关注的人

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