自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (4)
  • 收藏
  • 关注

原创 如何优雅地处理异常

目录问题Java异常层次结构异常处理1、使用异常替代错误返回码2、先写Try-Catch-Finally语句3、使用非受检异常4、给出异常发生的环境说明5、依调用者定义异常类6、定义常规流程7、别返回NULL值8、别传递NULL值问题1、什么时候才需要抛异常?如果你觉得某些“问题”解决不了了,那么你就可以抛出异常了。问题:对于异常情形,已经无法继续下去了,因为在当前环境下无法获得必要的信息来解决问题,你所能做的就是从当前环境中跳出,并把问题提交给上一级环境。2、抛出什么类型的异常?非受检异常和受

2021-07-22 13:53:22 425

原创 MySQL UPDATE能走索引但产生表锁的原因

1、MySQL InnoDB默认行级锁。行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住。2、产生表锁的一些原因索引失效查询字段未加索引3、思考:针对where查询条件字段增加索引后,索引未失效,update时会产生表锁吗?-- 对name增加了索引-- 事务Astart transaction;update Test set appkey = 'XXX' where name = "test5";COMMIT;​-- 事务Bstar

2020-11-06 20:27:11 1033

原创 重新理解Java中的this关键字

1、this关键字用来表示当前对象本身,或当前类的一个实例,通过this可以调用本对象的所有方法和属性。public class Demo {​ private int a; private int b; public Demo(int a, int b) { this.a = a; this.b = b; } /** * 作为方法名来初始化对象 */ public Demo() {

2020-11-04 10:28:28 376

原创 Mysql中char、varchar和text类型的区别总结

一、基本概念1、基础定义char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。超过char和varchar的n设置后,字符串会被截断。char在存储的时候会截断尾部的空格,varchar和text不会。varcha

2020-11-03 11:28:46 2036 1

原创 重新认识二分法

刚学完二分法时,觉得这个太弱了,只能在一个有序的数组中找特定的元素。实际上,二分法远比我想象中的强大。二分法的基本功能是在一个区间中找到目标值。有很多问题,都可以描述成在区间内查找一个值来解决。最近遇到一道算法题,求一个浮点数的立方根。一开始怎么也没想到用二分法来解决,见代码, public double func(double x) { if (x == 0 || x == 1 || x == -1) { return x; }

2020-09-20 15:28:36 103

原创 JDK1.8 HashMap 扩容 resize

之前一直没了解过HashMap的扩容机制,最近在面试中被问到,没有回答上来,下来看了下它的实现方式,主要是其中的resize()方法,下面着重看下这个方法。final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; i

2020-09-15 15:05:38 234

原创 MySQL事务 InnoDB下隔离级别为RR级别 解决幻读了吗

InnoDB在可重复读提交下为了解决幻读问题引入MVCC + 间隙锁(Gap Lock)结合具体的实例

2020-09-13 22:21:49 433

原创 基于Java实现本地缓存,缓存过期删除和LRU缓存淘汰

我们结合平常使用的Redis来想下,自己实现本地缓存需要考虑哪些因素呢,我这里总结了三点:数据存储,基于Java实现的话我首先想到的是key-value结构的集合,如HashMap,并发环境下的话使用ConcurrentHashMap、有学习了随着访问顺序元素位置会变化的LinkedHashMap缓存过期删除策略,参考Redis的定期删除和惰性删除缓存淘汰策略,有先进先出、最少使用、最近最少使用(LRU)、随机等策略。由以上可知,要实现缓存过期删除的话,需要记录元素的生效时间,可以实现一个监

2020-09-07 23:38:58 2124

原创 Spring7种事务传播类型详解和实践

Spring有7种事务传播类型,我们可以先按支持当前事务和不支持当前事务来区分,1、支持当前事务的传播类型有:Propagation.REQUIREDPropagation.SUPPORTSPropagation.MANDATORY2、不支持当前事务的传播类型有:Propagation.REQUIRES_NEWPropagation.NOT_SUPPORTEDPropagation.NEVER最后还剩一个嵌套事务Propagation.NESTED,下面咱们结合实际代码逐个了解下其

2020-09-07 11:34:04 459

原创 SpringCloud+Eureka多节点+Ribbon负载均衡搭建

1、搭建多节点Eureka服务pom文件加入依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>application文件配置,搭建双节点服务注册中心集群

2020-09-07 10:35:57 485

原创 JVM类加载解析阶段 父类和子类静态方法、私有方法、final修饰方法调用

public class Animal { static { System.out.println("static Animal"); } public static int value = 1; public Animal() { System.out.println("构造方法 Animal"); } public static void main(String[] args) { int value

2020-09-06 18:23:31 302

原创 Java父类与子类强转

我们先来看一段代码,代码一:public class Animal { public void eat() { System.out.println("animal eat"); } public static void main(String[] args) { Animal animal = new Animal(); Dog dog = (Dog) animal; dog.eat(); }}

2020-09-06 12:25:21 464

原创 为什么数组查询快

我们先回忆下数组的基本概念数组是一组数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一值。在声明数组时,需要指出数组类型和数组变量的名字,如声明一个整型数组a:int[] a; 一旦创建了数组,就不能改变它的长度。声明一个数组就是在内存空间中划出一串连续的空间,数组变量名指向连续空间的首地址由数组的特点可知,数组查询快的原因连续的内存地址,元素的内存地址作为整个数组对象的内存地址数组中的元素都是同一类型,占用空间大小一样,通过下标就可以计算出被查找的元素..

2020-09-06 11:39:38 2525

原创 成员变量、局部变量在java中的存放位置

成员变量,线程共享以基本变量或引用变量为成员变量,变量值都是在堆中存放的。局部变量,线程私有基本数据类型,参数和参数值在Java虚拟机栈中存放的。引用数据类型,参数在Java虚拟机栈中存放的,参数值是对象实例,在堆中存放的。顺便解释下,多线程环境下为什么会产生数据安全问题?局部变量是线程私有,所以不会产生数据安全问题。成员变量是在堆中存放的,线程共享的,所以会产生数据安全问题。从Java内存模型角度来看,线程有本地的工作内存,里面存放的是从主内存中拷贝来的变量副本,变量修改后,会先写入到工

2020-08-23 19:48:50 1798

原创 彻底脱坑,Java到底值传递还是引用传递

先说明结果,不管是基本数据类型还是引用数据类型,Java都是基于值传递的。先想下下面这段代码的输出结果, private int a = 10; private int b = 5; private Integer aa = 10; private Integer bb = 5; private int[] arr = {1, 2, 3}; private void test1(int a, int b) { a = 5;

2020-08-23 19:13:42 164

原创 JVM CMS收集器、G1收集器

CMS收集器CMS(Concurrent Mark Sweep) 收集器是一种以获取最短回收停顿时间为目标的收集器。基于 标记-清除 算法实现的,它大致分为4个步骤:1、初始标记,标记GC Roots能直接关联到的对象2、并发标记,根据GC Roots根节点搜索的过程,标记和根节点有引用链的对象3、重新标记,修正并发标记期间因用户程序继续运作而导致标记变动的对象的标记记录4、并发清除,清除未被标记上的对象初始标记和重新标记时需要 Stop The World,执行时间比并发标记和并发清除时耗时少

2020-08-23 15:42:15 307

原创 重新认识单例模式,饿汉、懒汉、加锁、双重检锁、静态内部类

今天我们来重新认识下单例模式,虽然单例模式是Java中最简单的设计模式,但是实现方式涉及到了很多Java知识,下面我们重新学习下饿汉式public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance(){ return singlet

2020-08-18 08:54:03 217

原创 Synchronized和ReentrantLock的区别,锁升级

1、Synchronized和ReentrantLock的区别synchronized是 JVM直接支持的,遇到异常时会自动释放锁ReentrantLock是java类,比较灵活,需要手动的释放锁,可以构造公平锁/非公平锁在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,JDK1.6之后JVM官方对锁做了较大优化,JVM能够在运行时作出相应的优化在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常

2020-08-16 22:45:36 776

原创 HashMap为什么线程非安全

首先,先说明在多线程环境下使用HashMap会产生的问题:resize死循环,扩容(1.8已解决)数据丢失、数据覆盖JDK1.7时,HashMap采用头插法连接链表中的元素,在多线程环境下会产生闭环,所以会导致死循环JDK1.8中,HashMap采用尾插法连接链表元素,解决了死循环的问题,但是在多线程环境下还会产生数据覆盖,丢失问题...

2020-08-16 18:14:50 142

原创 Maven项目,pom.xml基本配置说明

近期整理了下maven构建项目,pom.xml中的基本配置及说明,详情见下 <!--声明项目描述符遵循哪一个POM模型版本 --> <modelVersion>4.0.0</modelVersion> <!--依赖的父模块--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>s

2020-08-16 12:07:48 127

原创 HashMap 为什么是2倍扩容

我们通过源码来分析下,HashMap 为什么是2倍扩容,看源码,得知通过计算(n - 1) & hash来确定key的索引位置,当HashMap的容量是2的n次幂时,n - 1的后几位数都是为1,如15的二进制后四位为1111,这样与1或0进行与运算时,得到的结果可能为1或0。HashMap以2倍扩容,目的就是减少hash碰撞,使元素分配均匀。...

2020-08-16 11:16:52 2368

原创 Mysql 联合索引,最左前缀原则、失效问题

1、为什么索引支持最左索引前缀原则?针对数据库存储引擎为InnoDB来说,索引的底层数据结构是B+树,当设置联合索引时,只能按一个键值构造B+树,因此索引只支持最左索引前缀原则。2、使用联合索引时需注意设置的索引是否被正确使用上,举例说明,现在针对字段a、b、c建立联合索引:全值匹配时,用到了索引,where子句几个搜索条件顺序调换时也会用到索引,因为Mysql中有查询优化器,会自动优化查询顺序select * from table_name where a ='' and b='' and c='

2020-08-16 10:09:24 1965

原创 Git 版本控制/基本命令

版本控制是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。Git 不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。Git有四个工作区域:工作区(Working Directory):平时存放项目代码的地方暂存区(Stage/Index):用于临时存放你的改动,事实上它只是一个

2020-08-02 18:04:19 112

原创 Typora支持图片上传(picgo)

1、点击:文件 -》偏好设置 -》图像,选中PicGo-Core(command line),点击下载,如下2、下载完成后,进行 github 配置(文件位置:C:\Users…picgo\config.json){ "picBed": { "github": { "repo": "github名称/仓库名", "token": "github access-token", "path": "img/", "customUrl": "", "branch": "master" },

2020-08-02 17:36:56 246

FastStoneCapture_8.9_PortableSoft.7z

FastStoneCapture_8.9_PortableSoft.7z,非常好用的截图软件

2018-06-07

龙果学院_Dubbo分布式系统架构实战视频教程

龙果学院_Dubbo分布式系统架构实战视频教程,需要的可以下载看看

2018-06-07

深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)

深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理),需要的可以下载看看

2018-06-07

亿级流量电商详情页系统实战-缓存架构+高可用服务架构+微服务架构一版、二版合辑

最新亿级流量电商详情页系统实战-缓存架构+高可用服务架构+微服务架构一版、二版合辑,课程质量非常赞!!!

2018-06-06

空空如也

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

TA关注的人

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