自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 资源 (1)
  • 收藏
  • 关注

原创 线程池ThreadPoolExecutor源码剖析

线程池执行源码分析

2022-07-27 09:46:59 302

原创 关于if-else代码的优化

if-else分支代码在我们日常开发中基本上是最常用的逻辑,但是,经常在if-else代码过多的情况下,代码会变得特别臃肿,并且代码的可扩展性会变得不好,所以,优化if-else代码逻辑是很有必要的。以下介绍几种我在日常工作中比较常用的优化手段1.通过switch-case优化这是最简单的优化方式,基本上每一个程序员都能运用。下面举个例子:int value = this.ge...

2017-07-06 20:49:50 11282 1

原创 Spring循环依赖

Spring循环依赖

2022-08-03 09:09:54 301 1

原创 jvm之字节码解读——番外篇之经典面试题:从字节码角度分析synchronized的执行过程

面试过java岗位的同学,应该会很多次遇到过这个问题:synchronized这个关键字,它的原理在字节码是怎么体现的?今天我们来分析一下首先,我们要明确,synchronized这个关键字用在方法上有2种使用方式:一是直接作为方法的修饰符,二是作为方法里synchronized块出现synchronized直接作为方法修饰符我们先看第一种情况——直接作为方法的修饰符 public synchronized void test() { }看看生成的字节码对应的助记符是怎

2021-03-15 14:53:27 366

原创 jvm之字节码解读——番外篇之经典面试题:e=(a+b-c)*d的执行过程

今天我们来聊一下一个经典面试题,下面这段程序,执行的过程是怎样的呢? public void test() { int a=1,b=2,c=3,d=4; int e = (a+b-c)*d; }我们先看看生成的字节码是怎样的(重点关注Code部分) public void test(); descriptor: ()V flags: ACC_PUBLIC Code: stack=2, locals=6, ar

2021-03-13 22:27:42 220

原创 jvm之字节码解读——字节码文件结构解析(Methods)

根据前文jvm之字节码解读——认识字节码,我们可知,java的字节码文件结构为前文已经对魔数和版本号进行了分析访问修饰符/本类/父类/成员变量作了介绍jvm之字节码解读——字节码文件结构解析(访问修饰符/本类/父类/成员变量)下面,对紧跟在版本号的字段——Methods(方法)进行分析我们先贴一下源代码和javap命令执行后的代码package com.bill;public class MyByteCodeTest1 { private int a = 1; ..

2021-03-12 20:05:49 215

原创 jvm之字节码解读——字节码文件结构解析(访问修饰符/本类/父类/成员变量)

根据前文jvm之字节码解读——认识字节码,我们可知,java的字节码文件结构为前文已经对常量池进行了分析jvm之字节码解读——认识字节码文件结构解析(常量池)我们先把常量池的内容贴一下Constant pool: #1 = Methodref #4.#20 // java/lang/Object."<init>":()V #2 = Fieldref #3.#21 // com/bill/M..

2021-03-12 17:54:27 192

原创 jvm之字节码解读——番外篇之JNI字段描述符

在上一篇文章中jvm之字节码解读——认识字节码文件结构解析(常量池),可能会有人对常量池里面的一些内容有疑问,例如#1 = Methodref #4.#20 // java/lang/Object."<init>":()V这里的"()V"表示的是什么意思呢?其实,这东西我们叫做JNI字段描述符,这里"()V"表示的是“没有入参并且返回参数为void”的方法。要搞清楚这个,我们得从头捋起我们先来看java定义方法是怎么定义的,最基础的,你是.

2021-03-12 16:49:30 181 1

原创 jvm之字节码解读——字节码文件结构解析(常量池)

根据前文jvm之字节码解读——认识字节码,我们可知,java的字节码文件结构为前文已经对魔数和版本号进行了分析jvm之字节码解读——认识字节码文件结构解析(魔数、版本号)下面,对紧跟在版本号的字段——Constant Pool(常量池)进行分析关于常量池,它的作用是,在jvm执行方法或者GC等动作时,jvm可以直接从常量池拿到数据,进行直接操作(因为有些数据会重复去拿,常量池的存在就使得整个字节码文件变得更小)我们先把之前的源代码和用javap命令得到的内容贴出来packa..

2021-03-12 15:19:55 294 1

原创 jvm之字节码解读——字节码文件结构解析(魔数、版本号)

根据前文jvm之字节码解读——认识字节码,我们可知,java的字节码文件结构为Magic Number(魔数)根据上图可知,魔数在字节码文件里占据4个字节,由于1个十六进制占据4位,所以2个十六进制就占据1个字节,所以4个字节,就是占据8个十六进制,那么,魔数对应的字节码内容就是魔数是一个固定的数值,它的意义在于能快速判断一个文件是不是字节码文件,如果不符合这种规则开头的,就不是字节码文件了PS:魔数的定义为CAFE BABE,由来也挺有意思的,CAFE是咖啡,java的图标就是..

2021-03-12 11:23:34 312

原创 jvm之字节码解读——认识字节码

1.准备工作准备工具十六进制编辑器,如果没有请绕道这里下载https://pan.baidu.com/s/1NxRCcQfJe8IJqRZ46IUHuA提取码:u0a3准备代码及字节码内容package com.bill;public class MyByteCodeTest1 { private int a = 1; public int getA() { return a; } public void setA(int

2021-03-12 11:13:59 154

原创 日常坑记录贴

1.使用jetcache,如果要用redis存储java对象,该类必须实现Serializable(本地local不需要)

2020-02-27 16:49:21 146

原创 ThreadLocal的使用及其原理

ThreadLocal:ThreadLocal是线程局部变量,所谓的线程局部变量,就是仅仅只能被本线程访问,不能在线程之间进行共享访问的变量。ThreadLocal的使用非常广泛,典型的,mybatis的分页插件PageHelper用的就是ThreadLocal。在我们日常的开发里,最典型的应用就是例如一个请求(单线程)的执行过程要执行很多方法:a->b->c->d-&g...

2019-05-11 17:56:57 18078 3

原创 强引用、弱引用、软引用和虚引用

划分几种引用类型目的:使程序能更加灵活地控制对象的生命周期。强引用强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Object obj= new Object();当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果强引用对象不使用时,需要...

2019-05-11 15:30:45 710

原创 https小结

大家都知道,https俗称为安全的http,何谓安全?在讲https之前,我们先来看一个简单的聊天软件demo看下面例子,我们要实现A能发一个hello消息给B:如果我们要实现这个聊天软件,本文只考虑安全性问题,则要实现:A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容。

2018-10-27 20:00:13 629 1

转载 浅析pagehelper分页原理

原文链接 https://blog.csdn.net/qq_21996541/article/details/79796117 之前项目一直使用的是普元框架,最近公司项目搭建了新框架,主要是由公司的大佬搭建的,以springboot为基础。为了多学习点东西,我也模仿他搭了一套自己的框架,但是在完成分页功能的时候,确遇到了问题。框架的分页组件使用的是pagehelper,对其我也是早有耳...

2018-10-20 15:36:45 2687 1

原创 zigzag压缩算法

前文 Base 128 Varints 编码(压缩算法) 介绍了Base 128 Varints这种对数字传输的编码,了解到了这种编码方式是为了最大程度压缩数字的。但是,在前文里,我们只谈论到了正数的情况,那如果出现了负数,该怎么办?zigzag压缩算法解决的就是这个问题。在聊这个算法之前,我们得先补补课,聊聊二进制补码相关的东东。一、二进制及补码我们知道,计算机存储的数据都是二进制的...

2018-10-13 14:52:43 6457 1

原创 Base 128 Varints 编码(压缩算法)

Base 128 Varint可以说是一种编码方式,也可以说是一种压缩算法。这种压缩算法是用来压缩数字的传输的,压缩的依据是基于一个现实:越小的数字,越经常使用我们来看看一个例子:如果我们要网络传输数字1,会怎样传输呢?假设我们用的是32位的整形传输,那么经过编码,这个1的传输形式是:00000000 00000000 00000000 00000001然而,在这一堆要传输的数...

2018-10-13 12:03:13 6057 2

原创 mysql间隙锁

前面一文 mysql锁 介绍了mysql innodb存储引擎的各种锁,本文介绍一下innodb存储引擎的间隙锁,就以下问题展开讨论1.什么是间隙锁?间隙锁是怎样产生的?2.间隙锁有什么作用?3.使用间隙锁有什么隐患?一、间隙锁的基本概念1.什么叫间隙锁当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值...

2018-08-14 21:15:02 977 2

原创 “跨库分页”方案

前提:表按照uid水平分为2张,其他情况类似推理需求:通过字段time升序分页,实现 select * from T order by time offset X limit Y1.全局视野法假设现在要拿到第3页的数据,如下图所述,服务层通过uid取模将数据分布到两个库上去之后,每个数据库都失去了全局视野,数据按照time局部排序之后,不管哪个分库的第3页数据,都不一定是全局排序的第3...

2018-08-11 15:33:24 664

转载 ReenTrantLock可重入锁(和synchronized的区别)总结

ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的...

2018-08-08 21:03:53 170

原创 关于opcache中opcache.revalidate_freq参数设置测试报告

1.测试目的:测试出opcache中,opcache.revalidate_freq这个参数最适合的大小说明:如果opcache.revalidate_freq参数越大,服务器单位时间能接收的请求越多,但是加载代码的频率越低,会造成代码加载不及时的问题,本次测试要找出相对最适合值2.测试方法(1)加载文件&lt;?phpfor($i=0;$i&lt;1000;$i++...

2018-08-08 11:06:50 6332

原创 基于websocket的netty demo

前面2文基于http的netty demo基于socket的netty demo讲了netty在http和socket的使用,下面讲讲netty如何使用websocketwebsocket是html5提出来的一个东西,功能很强大,可以支持长连接,实现服务器向客户端的通信,这里不做过多的介绍,只说说netty如何使用websocket作为协议来通信这里采用表单提交的时候,使用we...

2018-07-19 17:38:50 2064

原创 基于socket的netty demo

前面一文说了 基于http的netty demo和http不一样,http可以用浏览器来充当客户端调用,所以基于socket的netty,必须要编写客户端和服务器的代码 实现功能:客户端给服务器发消息,服务器给客户端回消息一直循环服务器代码package com.bill.socketdemo;import io.netty.bootstrap.ServerBoot...

2018-07-19 17:23:24 888

原创 Buffer的重要属性 position/limit/capacity

package nio;import java.nio.IntBuffer;/** * Buffer的重要属性 position/limit/capacity * position:buffer当前所在的操作位置 * limit:buffer最大的操作位置 * capacity:buffer的最大长度 */public class NioTest2 { public...

2018-07-19 17:14:13 2168

原创 基于http的netty demo

1.引入netty的pom&lt;dependency&gt; &lt;groupId&gt;io.netty&lt;/groupId&gt; &lt;artifactId&gt;netty-all&lt;/artifactId&gt; &lt;version&gt;4.1.10.Final&lt;/version&gt;&lt;/dependency&am

2018-07-18 21:19:46 652

转载 Redis原理知识点集锦

1、Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。高级数据结构HyperLogLog:基数统计GEO:地理位置PUB/SUB:订阅发布2、Redis是单进程单线程的吗?是的。Redis是基于内存的单进程单线程KV数据库,基于C语言编写,不比单进程多线程的Memcached差。快的原因:(1)完全基于...

2018-07-17 20:31:13 134

原创 redis持久化的方式

RDB持久化配置Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:save 900 1              #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。save 300 10        ...

2018-07-17 20:26:26 137

原创 深入分析ConcurrentHashMap

效率低下的HashTable容器     HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争...

2018-07-15 16:32:43 152

原创 synchronized关键字jvm实现及各种锁

一.synchronized的字节码执行过程在java语言中存在两种内建的synchronized语法:1、synchronized语句;2、synchronized方法。对于synchronized语句当Java源代码被javac编译成bytecode的时候,会在同步块的入口位置和退出位置分别插入monitorenter和monitorexit字节码指令。而synchronized方法则会被翻译...

2018-07-15 15:53:47 490

原创 zookeeper选举算法

一.ZAB协议三阶段– 发现(Discovery),即选举Leader过程– 同步(Synchronization),选举出新的Leader后,Follwer或者Observer从Leader同步最新的数据– 广播,同步完成后,就可以接收客户端新的事务请求,并进行消息广播,实现数据在集群节点的副本存储二.服务器状态1.LOOKING寻找Leader状态,当服务器处于此状态时,表示当前没有Leade...

2018-07-04 20:16:16 1405

原创 git远程操作

1.git remote add origin xxx(url)从远程仓库里创建出git本地仓库,执行这个命令后,origin就可以代表url的值了2.git push -u origin master上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了3.git clone xxxx(url)把远程仓库的信息克隆到本...

2018-06-27 17:05:48 249

原创 git分支的创建与分支之间合并的底层原理

开发一个版本,采用的发布流程:(1).从master的最新代码拉取一个开发分支,在上面进行开发(这里假设开发分支为dev)(2).在开发分支上不断地进行提交版本,期间,master也会有因为其他版本上线而不停有版本合并(3).要发布的时候,把master代码重新合一遍到dev分支(4).发布完成了,把dev的代码合到master1.什么是分支分支是一个commit对象链:一条工作记录线git每一次...

2018-06-26 21:05:27 6148

原创 员工贷项目总结

项目概述项目名称:员工贷一期项目目的:a)拉新,通过授信平台使更多用户使用分期乐平台进行消费;b)增加GMV,通过授信平台获取更大额度,进行消费负责内容:员工贷授信侧用户:企业级员工主要工作内容(1) 完成用户的授信/激活/提额流程(主要工作);(2) 打通授信-CRM系统的通道;(3) 打通授信-消费的通道(包括开通乐花、对接收银台);(4) 打通授信-乐卡的通道(会员);(5) RCOA对授信...

2018-06-26 17:28:15 798

原创 员工贷项目优劣点总结

优点总结:1.用注解实现输入和输出日志的打印,别人的工程都是显示调用日志打印接口的2.dubbo接口文件使用分文件管理,provider文件根据自身的业务功能(授信/激活/提额/基础)拆分,consumer文件根据不同的应用来拆分,最大程度避免冲突的发生3.使用MQ注解(自定义的)来配置mq,使得开发者在MQ接收端,只需要配置一个注解,就可以成为MQ的接收者。别人都是在MQ的启动类里,一个个ser...

2018-06-26 17:28:06 272

转载 mysql事务_事务隔离级别详解

使用事务语法1. 开启事务start transaction,可以简写为 begin2. 然后记录之后需要执行的一组sql3. 提交commit4. 如果所有的sql都执行成功,则提交,将sql的执行结果持久化到数据表内。5. 回滚rollback6. 如果存在失败的sql,则需要回滚,将sql的执行结果,退回到事务开始之时7. 无论回滚还是提交,都会关闭事务!需要再次开启,才能...

2018-06-25 17:33:32 733

原创 mysql锁

一.mysql锁的结构图如上图所示,针对mysql的innodb存储引擎,mysql锁包括了乐观锁和悲观锁。而悲观锁又包括共享锁和排它锁,排它锁里又有行锁和表锁的实现,下面一个个说明他们的内容。二.锁详解1.乐观锁乐观锁不是数据库自带的,需要我们自己去实现。乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行...

2018-06-20 15:31:51 426

转载 mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml

在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: ...

2018-06-12 15:56:34 5041 2

原创 关于char是否能表示一个中文

char是可以表示中文的这个问题点有3个考核点1 char是多少位的 2 java用的是什么方式表示字符 3 Unicode是用多少位表示的1的答案是16位的,2的答案是Unicode,3的答案是16位值得注意的是,2的答案并不是utf-8Unicode字符集有包含中文,并且char类型和Unicode类型是相同存储长度的所以char是可以表示中文的...

2018-06-10 16:10:47 7045

原创 关于Iterator

1.在迭代过程中,用list来删除元素的坑package test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class IteratorTest { public static void main(String[] args) { Lis...

2018-06-10 16:10:43 132

netty基于http socket websocke及心跳包机制t的demo

netty框架基于http socket websocket及心跳包机制的demo

2018-07-19

空空如也

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

TA关注的人

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