- 博客(70)
- 收藏
- 关注
原创 什么是公平锁和非公平锁,基于Lock
非公平锁:首先会在 lock方法调用加锁的时候去抢锁(公平锁调用lock不会上来就去拿锁)如果加锁失败则去看为什么失败(是否锁被人持有),在判断的时候如果锁没有被人持有非公平锁就会直接去加锁(不会判断是否有人排队),成果则进入同步块,失败则park(真正的排队)公平锁:第一次加锁的时候,他不会去尝试加锁,它回去看一下前面有没有人排队没如果有人排队,则进入队列(并不等于排队),然后还不会立刻等待,还会再次看一下有没有拿锁的资格(前面的元素是否为 head),如果有资格(前面那个人正好是h.
2020-09-08 17:09:06
592
原创 Java 方法调用的底层实现
详细内容请移驾我的个人博客品尝:http://www.19971001.com/article/33我们写的代码,经过编译、经过类加载的各种阶段,进入了JVM的运行时数据区。但作为程序员真正关心的是代码的执行,代码的执行其实本质上市方法的执行,站在JVM 的角度归根到底还是字节码的执行。main 函数式 JVM指令执行的起点,JVM 会创建 main线程来执行main函数,以触发JVM一系列指令的执行,真正的把 JVM 跑起来。接着,在我们的代码中,就是方法的调用过程,所以了解方法在 JVM .
2020-08-04 11:24:25
2034
原创 SpringBoot源码tomcat启动解析笔记
进入main启动方法找到refreshContext(这个作用是刷新上下文)找到onRefresh() 实现类,ServletWebServerApplicationContext.java这里是创建webServer,但是还没有启动tomcat,这里是通过ServletWebServerFactory创建,那么接着看下ServletWebSer...
2020-04-08 15:24:39
248
原创 springcloud客户端注册时 Saw local status change event StatusChangeEvent错误
2020-02-26 21:37:29.888 INFO 12516 --- [extShutdownHook] o.s.c.n.e.s.EurekaServiceRegistry : Unregistering application MICRO-ORDER with eureka with status DOWN2020-02-26 21:37:29.889 WA...
2020-02-26 21:46:11
6888
3
原创 Kata Container是什么?
KataContainer首页的几个大字写的是容器的速度,虚拟机的安全性。与Docker一样,都是容器,但相对与docker,Kata更安全、更好的性能在2019年12月份,开源中国发布了一篇:以Docker为代表的传统容器到了生死存亡之际在AWS的官方博客中描述了docker的安全隐患: 由于操作系统内核漏洞,docker 组件设计缺陷,以及不当的配置都会导致 dock......
2019-12-25 15:57:07
2346
原创 锁:可重入式独占锁
什么是可重入锁(ReentrantLock)? 线程可以重复进入任何一个它已经拥有的锁所同步着的代码块,synchronized、ReentrantLock都是可重入的锁。在实现上,就是线程每次获取锁时判定如果获得锁的线程是它自己时,简单将计数器累积即可,每释放一次锁,进行计数器累减,直到计算器归零,表示线程已经彻底释放锁。项目示例:https://gitee.com/...
2019-12-17 16:29:26
285
原创 缓存穿透、击穿、雪崩缓存场景分析及解决方案
由于 CSDN 改版之后导致页面丢失了太多的东西,现已将博客迁移到自己的小站去了:地址:http://www.wangchunlong.cn/article/8 使用缓存通常的操作时先访问缓存数据,如果缓存中不存在的话,就会回源到数据库中然后将数据写入到缓存中。如果存在就直接返回数据,从整个过程来看,缓存层就处于数据库的前置环节,分担了数据库在高并发容易出现故障的风...
2019-12-13 17:05:35
672
原创 缓存领域常用术语
由于博客迁移,已经放在了自己的小站上了详细地址:http://www.wangchunlong.cn/article/7在合理应用缓存前,需要了解缓存领域里相关的几个常用术语:1.1、 缓存命中:表示数据能够从缓存中获取,不需要回源1.2、 Cache miss(缓存没有命中) :表示没有命中缓存,如果缓存内存中还有内存空间的话,会将数据加入到缓存中1.3、 存储成本: ...
2019-12-13 16:00:43
357
原创 spring解析XML和解析自定义标签全过程
由于内容太过于庞大,所有我用一个 Execl 把整个过程给截取下来了,直接下载下来就行了,由于服务器性能限制速度有点慢。由于CSDN不支持附件上传,所有我放在了我自己的小站上,地址:http://www.wangchunlong.cn/article/6进去直接下载下来就可以了...
2019-12-12 20:08:04
207
原创 BerkeleyDB Non-transactional Cursors may not be used in multiple threads; Cursor was created in Thr
报错详细信息:java.lang.IllegalStateException: Non-transactional Cursors may not be used in multiple threads; Cursor was created in Thread[Thread-7,10,main] but used in Thread[nioEventLoopGroup-2-2,10,mai...
2019-10-31 17:00:15
171
原创 BerkeleyDB API、官方文档
示例文档:https://docs.oracle.com/cd/E17277_02/html/TransactionGettingStarted/index.htmlAPI:https://docs.oracle.com/cd/E17277_02/html/java/index.html?com/sleepycat/je/package-summary.htmlOracle Berkeley ...
2019-10-24 15:30:28
648
原创 BerkeleyDB 启动报错com.sleepycat.je.DatabaseException: The Environment directory is not writable问题
背景:这个是我在写一个中间件的时候发现需要用到文件存储数据方面的东西,因为自己写的达不到那个量级的需求,然后去stackoverflow上就看到了推荐 BerkeleyDB 这个文件数据库下面是我的测试代码: public static void main(String[] args) throws Exception { EnvironmentConfig environm...
2019-10-22 17:12:21
950
原创 maven打包 Failed to execute goal on project XX: Could not resolve dependencies for project 问题
将一个新项目打包为 Jar 上线时发生了这个错误Failed to execute goal on project mayimq-client: Could not resolve dependencies for project cn.wangchunlong:mayimq-client:jar:1.0: The following artifacts could not be resol...
2019-10-17 14:31:32
1761
原创 spring项目启动完成后,自动执行一次指定方法
实现ApplicationListener接口,并实现 onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent)方法@Componentpublic class SearchReceive implements ApplicationListener<ContextRefreshedEvent> {...
2019-09-19 14:54:54
693
原创 JVM会在什么时候会发生内存泄漏、触发GC回收
第一个问题,Java在什么时候容易发生内存泄露? 1、静态集合类,如 HashMap、Vector 等,因为GC是不会回收静态类的 2、各种连接,如 数据库连接、网络连接、IO连接等如果没有调用 close 关闭,GC不会回收导致的内存泄露,所以我们一再强调使用完连接之后一定要在 finally 中关闭掉 3、强引用,Object obj = new O...
2019-08-23 15:38:09
1876
原创 JVM 垃圾回收器
分代收集:根据各个年代的特点选取不同的垃圾回收算法 新生代使用复制算法 老年代使用标记-整理或者标记-清除算法 jps -v 显示当前使用的垃圾回收器 在新生代中,每次垃圾收集是都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集,而老年代中因为对象存活率高、没有额外空间对它进行...
2019-08-16 17:37:20
145
原创 JVM GC垃圾回收机制及算法
1、GC 1.1 Minor GC 特点:发生在新生代上,发生的较频繁,执行速度较快 触发条件:Eden 区空间不足 \ 空间分配担保 1.2 Full GC 特点:主要发生在老年代上(新生代也会回收),较少发生,执行速度较慢 ...
2019-08-16 16:20:45
173
原创 本地项目上传到码云,只需这几步
1,首先在码云上新建一个项目2,本地新建一个文件夹3,进入新建的文件夹,点击鼠标右键,选择git bash here然后在窗口输入 git init 这时候文件夹会多出一个.git文件夹,看不到文件夹的,点击鼠标右键选择“显示不显示隐藏的文件”就可以看到这个文件夹了4,进入刚刚在码云新建的项目里,复制(克隆/下载)里的路径5,然后在回到本地新建的文件夹里继续操作git ...
2019-08-14 20:45:55
151
原创 Java获取 IP 详细信息、经纬度
可以自己搭建,也可以直接使用现成的请求链接,每个月月初更新 ip 库 获取城市信息:http://ip.guoxinqi.cn/city/47.96.229.169 获取IP经纬度信息:http://ip.guoxinqi.cn/position/47.96.229.169自己搭建:可用于拦截操作、获取 IP 详细信息、及黑名单操作获取。拦截操作: MvcCon...
2019-08-14 19:57:22
1033
原创 nginx Openresty安装及使用
OpenResty是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,常用的第三方模块以及大多数依赖项。 可以把它看成是Nginx附加众多的第三方插件的合集。其主体是嵌入lua脚本的支持,让你能够使用lua灵活地处理运算逻辑。1、Openresty的安装配置 1.1、简易的yum安装方式 此方式简单,缺点是无法干预启停插件 ...
2019-08-09 18:34:26
2881
原创 shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such fi
[root@izbp1ezc14ouhirf7yb81nzyux luajit-2.1]# source /etc/profileshell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory该错误表示 getcwd 命令无法...
2019-08-08 15:24:04
1728
原创 关于volatile关键字详解
提到volatile首先想到就是:保证此变量对所有线程的可见性,这里的 “可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。 禁止指令重排序优化(happens-before)。1、特性 可见性:对一个volatile 变量的读,总是能看到(任意线程) 对这个 volatile 变量最后的写入。 原子性:对任意单个 volati...
2019-07-28 15:34:02
144
原创 new HashMap()和Maps.newHashMap()的区别以及 newHashMapWithExpectedSize()
1、new HashMap() 这种是java原生API写法,需要你手动加泛型。存在线程安全问题,在扩容计算hash的时候会出现安全问题,在rehash方法中,有兴趣的可以去看一下源码Map<String,Object>result=newHashMap<String,Object>(); 2、Maps.newHashM...
2019-07-25 18:26:17
3546
原创 JMM基础-内存模型及内存模型带来的问题
内存模型 从抽象的角度来看,JMM 定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Momory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是 JMM 的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编辑器优化。Java...
2019-06-11 14:44:18
377
原创 JMM基础-伪共享
CPU中存在好几级的高速缓存。但是CPU 缓存中是以 缓存行 为单位存储的。目前主流的 CPU Cache 的Cache Line 大小都是 64Bytes。Cache Line 可以简单的理解为 CPU Cache中的最小缓存单位,今天的 CPU不再是按字节访问内存,而是以 64 字节为单位的块(chunk)拿取,成为一个缓存行(Cache Line)。当你读一个特定的内存地址,...
2019-06-10 18:04:46
458
原创 JMM基础-计算机原理
Java内存模型即 Java Memory Model,简称JMM。JMM 定义了 Java 虚拟机(JVM)在内存中的工作方式。JVM 是整个计算机虚拟模型,所以JMM 是隶属于 JVM 的。Java1.5版本对其进行了重构,现在的Java仍沿用了 Java1.5的版本,JMM 遇到的问题与现代计算机中遇到的问题是差不多类似的。 物理计算机中的并发问题,物理...
2019-06-10 17:49:38
182
转载 JVM(Java虚拟机)优化大全和案例实战
作者:AlexanderHu原文:https://blog.csdn.net/kthq/article/details/8618052堆内存设置原理JVM堆内存分为2块:PermanentSpace 和 Heap Space。Permanent 即持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系...
2019-05-30 18:19:16
115
原创 Redis-sentinels启动时报错 All sentinels down, cannot determine where is redis-sentinel master is running.
报错信息:Caused by: redis.clients.jedis.exceptions.JedisConnectionException: All sentinels down, cannot determine where is redis-sentinel master is running…1、可用telnet ip+端口 看是否连接成功查看:D:\>tel...
2019-04-26 12:15:12
11824
原创 SpringBoot连接MongoDB集群问题RFC 2732
这是我springboot连接 MongoDB 配置spring: data: mongodb: uri: mongodb://192.168.1.143:9085/test,mongodb://192.168.1.144:9085/test,mongodb://192.168.1.145:9085/test连接MongoDB 集群是出现java....
2019-04-25 16:21:47
3717
原创 MongoDB高可用之可复制集(主从)
什么是可复制集可复制集是跨多个MongoDB服务器(节点)分布和维护数据的方法。MongoDB可以把数据从一个节点复制到其他节点并在修改时进行同步,集群的节点配置为自动同步数据;旧方法叫做主从复制,MongoDB 301 以后推荐使用可复制集; 为什么要用可复制集?它有还说呢么重要性? 避免数据丢失,保障数据安全,提高系统安全性;(最少3节点,最大50节点) ...
2019-04-25 15:46:37
311
原创 MongoTemplate 增删改查,or、and等复杂查询
先来张表图看一看 运算符类型 运算符 描述 范围 $eq 等于 $lt 小于 $gt 大于 $lte 小于等于 $gte ...
2019-04-09 17:05:31
12166
3
原创 MongoDB error processing document #2: invalid character ',' looking for beginning of value
打算把公司登陆系统现在还是直接使用数据库进行查询,今天打算把它优化一下换成 MongoDB 进行查询,结果导入测试数据的时候一直报 Failed: error processing document #2: invalid character ',' looking for beginning of value 错误,搞了大半天才解决,它喵的。[root@iZm5ec7pkk6xphur...
2019-04-08 16:18:28
8010
4
原创 MongoDB Liunx安装
官网下载安装介质:https://www.mongodb.com/download-center,选择适当的版本,这里以linux版本mongodb-linux-x86_64-3.4.18为例; 解压到系统某路径, tar -xvzf mongodb-linux-x86_64-3.4.18.tgz 在安装目录创建data目录,以及logs目录和logs/mongodb.log文件 使用...
2019-04-01 20:23:04
107
原创 bootstrap 输入框只能数字和字母等其他限制
输入中文、数字、英文: <input onkeyup="value=value.replace(/[^\w\u4E00-\u9FA5]/g, '')"> 输入数字和字母:<input onKeyUp="value=value.replace(/[\W]/g,'')"> 输入大小写字母、数字、下划线:<input type="text...
2019-03-23 16:45:11
7470
1
原创 Springboot连接mysql的时区错误问题: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents mo
今天把SpringBoot从1.5升级到2.1的时候出现这个时区问题The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the se...
2019-03-08 10:49:56
1869
原创 Spring(二)注释详解(@Target,@Retention,@Documented)
要深入学习spring就要定义自己的注解,并使用注解,在定义自己的注解之前,我们必须要了解Java为我们提供的元注解和相关定义注解的语句1、元注解(meta-annotation): 元注解的作用就是负责注解其他注解,Java5定义了元注解类型,他们被用来提供对其它annotation类型做说明。@Target @Retention @Documented...
2019-03-07 17:24:00
1948
原创 spring 简介(一)
1、Spring的目标是什么? Spring官方主页(http://spring.io)有两句话:Let's build a better Enterprise. 我们共同来构建更好的企业应用。 Spring helps development teams everywhere build simple, portable, fast and flexible JVM-b...
2019-03-01 17:19:52
556
原创 Docker 安装 Nginx
方法一、docker pull nginx(推荐)查找DockerHub上的 nginx 镜像[root@izbp1ezc14ouhirf7yb81nz /]# docker search nginxNAME DESCRIPTION STARS OFFICIA...
2019-02-28 15:39:46
241
原创 开发者可以使用Docker做什么???
Docker如今赢得了许多关注,很多人觉得盛名之下其实难副,因为他们仍然搞起不清 Docker 和普通开发者到底有什么关系。许多开发者觉得 Docker 里自己很远, Docker是生产环境中的工具,和自己无关,我也是花了很多时间猜想清楚作为不同开发人员如果在自己的开发中使用 Docker 。 坦率的说,我仍处于学习的过程中。 这篇文章提供了一个Docker用例列表,我希望它能...
2019-02-28 15:29:35
1936
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人