自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 乐观锁悲观锁概念

乐观锁:线程每次在处理共享数据时都不会上锁,在更新时会通过数据的版本号登记制判断其他线程有咩有更新数据。适合读多写少悲观锁:线程每次在处理共享数据时都会上锁,其他线程想处理数据就会一直阻塞直到获得锁。适合写操作比较多的场景...

2020-08-25 15:12:54 188

原创 向线程池中提交任务的过程

向线程池中提交任务的过程(通过execute方法)非空判断,任务为空直接抛NPE。如果此时,线程池中运行的线程数量<corePoolSize,则创建新线程来处理请求。判断线程池状态为RUNNING,且等待队列没满,直接加入等待队列。判断线程池中线程数量是否大于 maximumPoolSize,如果小于,则创建新线程来执行任务。否则执行线程池拒绝策略...

2020-08-14 15:33:04 830

原创 为什么我不喜欢用Long.valueOf()去将String转成long

项目中经常看到有人喜欢用Long.valueOf()去将String转成long,我都忍不住去改Convert.asLong()。原因是如果字符串不管是null还是空串,Long.valueOf()都会抛出异常,导致一些不必要的线上故障( java.lang.NumberFormatException : For input string: “”)。而Convert.asLong()能将null或空串直接转成0,也可以指定默认值。总结我觉得相对来说,用Convert.asLong()能规避风险,减少调

2020-05-13 16:48:40 3095 2

原创 记一次load飙升,频繁FullGC问题解决过程

1.现象load飙升到30+线上sql连接异常tps正常sql查询时间剧增2.解决过程sql连接池不够了,肯定是慢sql导致频繁GC,一般内存使用过多结合堆栈信息,某个对象内存占用特别多某个sql查询数量大,调用量多,全表扫描。3.GC查看top 命令查看资源情况,找到使用率最高的线程sudo -u spring-boot jstat -gcutil 384 2...

2020-03-26 16:30:09 642

原创 IDEA使用lombok的@Data注释之后,还是找不到get和set方法

####解决方法我是新装的IDEA,因为没有安卓lombok插件导致的。装上lombok插件就可以使用了IDEA安装lombok插件1.打开settings,mac是preferences。找到plugins,搜索lombok,之后安装,安装完成之后,重启IDEA就可以啦...

2019-12-28 17:11:44 2786

原创 【踩坑总结】java8中stream的findAny踩坑

java8中stream的findAny踩坑需求:寻找list中符合要求的对象通过findAny去实现A a = bList().stream().filter(b -> "test".equals(b.getName())).findAny().get();结果后面发现这个方法并不是找得到就返回,找不到就不做处理,而是找不到直接抛异常了。于是后面改用了这种方式A a =bLi...

2019-07-04 17:18:52 39511 6

原创 java中的boolean类型占几个字节

根据官方文档的描述:boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type re...

2019-05-29 14:49:15 533

原创 JAVA内存模型

1.主内存和工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。JAVA内存模型规定所有的变量都存储在主内存中每个线程有自己的工作内存(线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行)不同线程之间无法直接访问对方工作内存中的变量。线程间变量值的传递靠主...

2019-05-10 16:00:38 113

原创 设计模式-门面模式

1.简述门面模式举个栗子说一下门面模式:下图是自己喝茶和茶馆喝茶的区别。每个人自己喝茶,需要自己去准备茶具、开水、茶叶等,但其实我们的目的只是喝杯茶,并不希望完全去操作整个过程。于是有了去茶馆喝茶这个选项。我们只需要把我们需求告诉服务员,服务员去帮我们解决茶具、开水、茶叶等事情,然后端茶过来给我们就好了。对应于我们的设计模式,这个茶馆的服务员就相当于我们门面模式中的Facade。门面模式定...

2019-05-08 14:40:31 145

原创 CAS

1.CAS做了什么?CAS有三个操作数:内存值V,旧的预期值A,需要修改的新值BCAS涉及两个步骤:1.compare:比较内存值是否与预期值A相等。2.set:如果内存值与预期值A相等,set值为B。虽然这是两步,但是CAS保证了这两步操作的原子性,因此可以将上面两步视为一个原子操作。2.处理器如何实现原子操作?1.使用总线锁保证原子性总线锁就是使用处理器提供的一个LOCK#...

2019-05-07 14:36:56 93

原创 源码解读-AtomicInteger

前面AtomicBoolean中对原子更新值已经讲得差不多了,AtomicInteger实现的核心也跟AtomicBoolean几乎是一样的,不过AtomicInteger相比起来多了几个方法,我还是理一遍,AtomicBoolean中有的就不过多解释了。1.AtomicInteger是什么一个可以原子方式更新的{@code int}值。{@code AtomicInteger}用于诸如原...

2019-03-28 11:18:43 139

原创 源码解读 -AtomicBoolean

1.AtomicBoolean是什么一个可以原子方式更新的{@code boolean}值。该值可以作为原子更新的标志,但是不能用作java.lang.Boolean的替代。2. AtomicBoolean 内部的属性// 设置为使用Unsafe.compareAndSwapInt进行更新private static final Unsafe unsafe = Unsafe.getU...

2019-03-26 18:24:08 238

原创 设计模式-迭代器模式

1.简述迭代器模式举个栗子说一下迭代器模式:就像电视机,里面有很多频道,我们可以通过按电视机上面的按钮来挨个切换频道。同样的,我们也可以通过遥控板左切或又切频道,甚至遥控板还提供了一个数字功能,我们可以通过输入数字获取到该数字对应的频道,遥控器我们就可以看作是迭代器。迭代器模式定义: 提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行...

2019-03-04 17:26:38 173

原创 源码解读-ArrayList

ArrayList都很熟悉了List的接口大小可调整的实现类除了实现List接口之外,此类还提供了一些方法来操作内部用于存储列表的数组的大小。线程不安全实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们可以通过元素的序号快速获取元素对象;这就是快速随机访问。1....

2019-02-26 17:32:47 135

原创 源码解读-ArrayBlockingQueue

看源码之前,我喜欢先把那个类的介绍看一下,能了解到这个类的大概的特性。原文我就不贴了,总结几点我从介绍里面了解到的几点,后面再通过源码看看,具体怎么实现。这是GUC(java.util.concurrent)包下的一个线程安全的阻塞队列,底层由数组实现。这是一个基于数组的有界的阻塞队列这个队列遵循先进先出(FIFO)原则在队尾插入,队首获取这是一个经典的队列大小固定的"有界缓冲区",一...

2019-02-23 14:41:13 248

原创 SpringBoot项目定制Banner

原博客:http://blog.csdn.net/u012702547/article/details/53740047我们搭建一个SpringBoot项目时,可以将运行时出现的Banner进行修改修改Banner1.首先在SpringBoot项目的src/main/resources路径下新建一个文件banner.txt 2.将想要创建的banner样式复制到banner.tx...

2019-02-20 15:51:04 177

原创 设置IDEA的背景图片

先通过快捷键 ctrl+shirt+A 打开设置可以看看选中不同铺平方式的效果第一种,明显比第二种放大很多,这个主要看图片大小,主图位置之类的决定吧。这里是选中图片位置靠右对齐的效果哈哈,介绍得差不多啦,最终效果...

2019-02-20 14:01:12 6604 6

原创 内存分配与回收策略

1.对象优先在Eden分配大多数情况下,对象在啊新生代Eden中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。对象在Minor GC过程中,发现对象比较大,剩余Survivor空间不足以容纳该对象,那么该对象就会通过分配担保机制被提前转移到老年代去。Minor GC:指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕死的特性,所以Minor GC...

2019-02-15 14:01:01 165

原创 垃圾收集算法

1.标记-清除算法“标记-清除”算法是最基础的垃圾收集算法,分为“标记”和“清除”两个阶段;当堆中的有效内存空间内耗尽的时候,就会停止整个程序,然后进行标记,清除工作。标记:首先将所有死亡对象(在上一篇文章中有说到,如果判断对象是否存活)打上标记清除:清除的过程将遍历堆中所有的对象,将所有被标记的对象全部清除。缺点:1.效率比较低,因为要遍历所有的对象,并且在进行垃圾回收过程中,需要...

2019-02-14 17:17:06 363

原创 如何判断对象是否存活

1.如何判断对象是否存活1.1引用计数法给对象中添加一个 引用计数器,每当有一个地方引用它时,计数器值+1,当引用失效时,计数器值-1。任何时刻计数器值为0的对象就是不可能再被使用的。但是这个方法有个问题不能解决:就是当两个对象相互引用时,他们的计数器值永远不会变成0,导致两个对象无法被回收。1.2可达性分析算法在主流的商用程序语言(Java、C#)的主流实现中,都是称通过可达性分析来判...

2019-02-14 15:57:26 1033

原创 对象的访问方式

对象访问方式目前主流的访问对象的方式有两种:使用句柄和直接指针1.通过句柄访问对象如果是通过句柄的方式来访问对象,那么Java堆中就会划分出一块内存来作为句柄池。reference中存储的就是对象的句柄地址。句柄中包含了对象的实例数据和类型数据的具体地址信息。优势: reference中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象)时只会改变句柄中的实例数据指正,而refere...

2019-01-23 16:27:28 788

原创 对象在内存中的存储

对象包含以下几部分:对象头、实例数据、对齐填充,如下图1. 对象头对象头中包含了MarkWord、class指针、以及数组的长度(当对象为数组时才会有)。MarkWord:- GC分代年龄:占4位,所以当对象GC年龄15岁之后,就会被分配到老年代去- 锁状态:01-未锁定,00-轻量级锁,10-重量级锁,11-GC标记,01-可偏向class指针: 对象指向它的类元数据的指针,虚拟机...

2019-01-23 14:41:57 689

原创 对象的创建

对象的创建对象创建过程:当虚拟机遇到一条new指令时,首先回去检查这个指令的参数是否能在常量池中定位到一个类的符号应用,并且检查这个符号引用代表的类是否已经加载、解析和初始化过。,如果没有,还要先执行相应的类加载过程。(关于类加载过程,后续……)类加载通过之后,为新生对象分配内存。内存分配有两种方式:指针碰撞和空闲列表。下文解释内存分配完成之后,虚拟机需要将分配到的内存空间都初始化为零值...

2019-01-21 17:50:42 105

原创 InnoDB-一致性非锁定读(快照读)(后续再继续更新……)

InnoDB-一致性非锁定读(快照读) mysql官网文档:If the transaction isolation level is REPEATABLE READ (the default level), all consistent reads within the same transaction read the snapshot established by the first ...

2019-01-19 14:26:21 385

原创 元空间

元空间jdk8之前是永久代,jdk8之后换成了元空间,开始一直不知道永久代与元空间的区别,直到听到一句解释:永久代和元空间都是方法区的一种实现。永久代缺点:永久代的大小是在启动时固定好的,很难进行调优。类和方法信息等比较啊难确定大小,因此对于永久代的大小指定比较困难字符串在永久代中,容易出现性能问题和OOM。永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。4.永久代中的元数据...

2019-01-19 14:18:15 1585

原创 JVM 内存模型

JVM 内存模型1. 堆各线程共享的内存区域,在JVM启动时创建,是JVM内存中最大的一块区域。存放对象的实例(对象本身,该对象的引用存在栈中)和数组,由GC进行垃圾处理回收,堆内存的大小可以通过参数-xmx(最大值)和-xms(初始值)进行设置。2. 方法区各线程共享的内存区域,存储虚拟机加载的类的信息(类名称、方法信息、字段信息)、常量、静态变量。被划分为两个主要的区域:持久代和代码...

2019-01-19 14:17:27 144

原创 搭建一个Dubbo

最近开始看dubbo,根据    http://blog.csdn.net/noaman_wgs/article/details/70214612   终于成功搭建了一个自己的DubboDemo。做点记录给自己。一、先搭建dubbo项目的大致框架主干工程建一个Maven project其他工程新建Model下的maven工程在api中新建DemoService在...

2019-01-08 17:15:02 130

原创 事务的隔离级别

事务的隔离级别sql标准定义的四个隔离级别:1.READ UNCOMMITTED(读取未提交的内容-脏读)2.READ COMMITTED3.REPEATABLE READ4.SERIALIZABLE查看当前会话的事务隔离级别和全局的事务隔离级别:1.READ UNCOMMITTED(读取未提交的内容-脏读)在该隔离级别下,所有事务都可以看到其他未提交事务的执行结果。我们先将...

2019-01-05 17:53:56 219 3

原创 mysql事务分类+实现

事务事务分类原子性(Atomicity)一个事务中的操作要么全成功,要么全失败一致性(Consistency)事务开始之前和结束之后,数据库的完整性约束不被破坏隔离性(Isolation)每个读写事务的对象对其他事务的操作对象相互分离,每个事务之间完全隔离持久性(Durability)事务一旦提交,结果永久保存,即使发生宕机等故障,数据库也能将数据恢复。事务的实现1.redo...

2018-12-29 15:56:27 127

原创 设计模式-模板方法

模板方法(TemplateMethod)###1.什么是模板方法?在现实生活中,很多事情都包含几个固定步骤,如考试,考试的步骤大致可以分为:拿考卷-&amp;gt;作答-&amp;gt;交卷。其中拿考卷和交卷的动作几乎一致,不同的是我们每次考试作答的内容。在我们写代码的时候,有时候也会遇到类似的情况。就是某个操作需要实现多个步骤,但是其中几个步骤都是固定不变的,只是有些步骤会变化,这时候,为了提高代码的...

2018-12-29 15:35:22 106

原创 坑死我的remove之ConcurrentModificationException

#坑死我的remove之ConcurrentModificationException####先上段代码 List&amp;amp;amp;amp;amp;lt;String&amp;amp;amp;amp;amp;gt; list = new ArrayList&amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;gt;(); Collections.addAll(list,&amp;amp;amp;amp;qu

2018-11-26 10:07:53 789

原创 invoke执行sql之后,插入数据库的中文字段乱码

需求:invoke 调用方法,修改数据库中某一字段名称代码:`invoke com.XXX.service.XService.modifyXX(&quot;中文字段&quot;);`通过Xshell链接服务器,telnet x.x.x.x 20880,然后执行invoke,此时Xshell编码是utf-8,数据库编码也是utf-8,但是执行之后,插入数据库的中文字段产生了乱码;之后我又将Xshell...

2018-08-14 10:35:52 1242

原创 获取当天零点的毫秒数

获取当天零点的毫秒数1.通过获取当前时间,取整获取long zero = System.currentTimeMillis() / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();//System.currentTimeMillis() / (1000 * 3600 * ...

2018-08-13 15:49:19 7551 3

原创 IDEA自动生成序列化Id

ctrl+alt+s –&gt; inspections –&gt;Serialization issues鼠标放在实现Serializable接口的类名,alt+enter,选择生成ID

2018-03-27 16:15:28 4993

原创 搭建一个SpringBoot项目

先贴出整个SpringBoot项目的结构 1.首先新建一个web项目 2.修改pom.xml配置文件,引入SpringBoot的核心依赖&lt;dependencies&gt; &lt;!--SpringBoot核心模块,包括自动配置支持、日志和YAML--&gt; &lt;dependency&gt; &lt;groupId&g...

2018-02-23 11:12:44 1728

原创 通过IDEA上传本地代码到github

参考:http://blog.csdn.net/dalinsi/article/details/53376818 首先,在gitHub上,新建一个新的仓库 通过IDEA打开本地需要上传的代码 1.初始化本地代码库 操作之后,会在我们本地文件夹中,生成一个.git的隐藏文件夹 提交本地代码到gitHub 这一步完成之

2018-02-05 11:33:21 7700

空空如也

空空如也

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

TA关注的人

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