自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AES加密原理

AES加密原理,看不懂你砍我!

2022-02-09 18:53:15 8230

原创 Reentranlock源码分析及底层原理

ReentranLock类图ReentranLock实现了Lock接口、支持序列化,并且根据传入的参数来判断是使用公平锁还是非公平锁。底层是使用AQS阻塞队列来实现。Sync类直接继承了AQS,它的子类NonfairSync和FairSync分别实现了获取锁的非公平与公平策略。案例此案例使用了ReentranLock,来保证线程安全。如果不上锁,number的值由于线程之间的竞争导致最终结果是不正确的。public class ReentranlockDemo extends Thread{

2021-07-06 11:34:59 472

原创 ThreadLocal源码解读

ThreadLocal多线程访问同一个共享变量时特别容易出现并发问题,在多个线程需要对一个共享变量进行写入时。为了保证线程安全,在访问共享变量时需要进行适当的同步。说一下什么是线程安全?如果你的代码在某个进程中有多个线程同时执行,这些线程可能会同时运行这段代码,如果每次运行结果和单线程运行的结果一致,并且得到的结果和预期也是一致的,那么就是线程安全。而我们为了线程安全,同步的措施一般是加锁来保证线程安全,来控制不同线程对临界区的访问。但使用了锁,性能肯定会有所下降,加重了使用者的负担。那Threa

2021-05-12 14:53:32 214

原创 MySQL索引-B+树(看完你就明白了)

概念索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引Hash 索引全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数据结

2021-02-03 15:53:12 604 1

原创 HashMap1.8源码

HashMap1.8源码分析简介hashmap1.8的数据结构有所变化,hashmap1.8以前的数据结构是数组+链表。现在的数据结构是数组+链表+红黑树。在1.8以前,如果在某个桶(数组)中,出现了hash碰撞,并且key不相同的情况下,就会生成一个链表。随着元素的增多,链表可能会越来越长,我们在去查找的时候,遍历单链表会需要很长的时间,时间复杂度为O(n)。但在1.8以后,加了红黑树,在单链表长度大于8,并且数组元素大于64时,会将链表转化为红黑树,这样将会提高很大的效率,增删改查的时间复杂度为O(

2021-01-23 16:04:57 285

原创 ArrayList源码分析

ArrayListArrayList是一个装载数据的数组集合,也可以说是动态数组。但我们先说一下Java中的普通数组,Java中普通数组只能用来存储基本数据类型的数据,并且容量一旦定义了,就只能装这么多数据。但是ArrayList不是,它的容量能动态增长。允许包括 null 在内的所有元素。除了实现 List 接口外,它还提供一些方法来操作内部用来存储列表的数组的大小。(它大致上等同于 Vector 类,但是它不是线程安全的,而Vector是线程安全的)结构public class ArrayList

2021-01-15 16:49:39 152

原创 synchronized背后不为人知的秘密

Synchronized为什么要学习Synchronized?在我们学习多线程的时候,会遇到共享内存两个重要的问题。一个是竞态条件,另一个是内存可见性。解决这两个问题的一种方案是使用Synchronized。在介绍什么是竞态条件,什么是内存可见性之前,我们先讲解一下synchronized的用法和基本原理。用法 (synchronized可以用于修饰类的实例方法、静态方法和代码块)synchronized修饰普通同步方法:锁对象为当前实例对象public synchronized

2021-01-02 15:52:43 292

原创 BigDecimal使用总结以及使用时可能遇到的(坑)

BigDecimal总结(坑)概念BigDecimal是一个不可变的,任意精度的有符号十进制数BigDecimal由任意精度的整数非标度值和32位的整数标度(scale)组成。如果为零或整数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以10的负scale次幂。因此,BigDecimal表示的数值是(unscaledValueX10‾scale)。BigDecimal对象内通过BigInteger IntVal存储传递对象数字部分,通过int scale记录小数点位数,通过int pr

2020-12-26 19:44:14 8381 6

原创 tomcat启动失败( org.apache.catalina.core.StandardContext.startInternal 由于之前的错误,Context[]启动失败)

org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到org.apache.catalina.core.StandardContext.startInternal 由于之前的错误,Context[]启动失败今天启动tomcat,发现启动不起来。找了半天错误,原来是maven导入依赖的包没有起作用。然后,我自己去创建了个lib包,手动导入,解决!具体步骤:第一步:第二步:

2020-07-26 18:38:49 52372 27

原创 JavaWeb实现文件下载 (案例)

@WebServlet("/download")public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* * 1. 要获取下载文件的路径 * 2. 下载的文件名是

2020-07-22 09:53:18 334

原创 Cause: java.sql.SQLException: No suitable driver found for http://www.example.com (maven搭建mybatis出错)

Cause: java.sql.SQLException: No suitable driver found for http://www.example.com当我们使用Maven搭建Mybatis时,Maven在程序运行进行编译时,如果mybatis使用外部配置文件,会发生url地址替换错误的现象。外部配置文件如下:driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mydb?useUnicode=true&charac

2020-06-28 23:09:20 4412 2

原创 算法学习笔记——无重复字符的最长子串

无重复字符的最长字串import java.util.ArrayList;public class 无重复字符的最长字串 { public static void main(String[] args) { Solution s=new Solution(); String str="pwwkew"; System.out.println(s.lengthOfLongestSubstring(str)); }}class Solut

2020-05-20 14:52:19 171

原创 算法学习笔记——两数之和

两数相加public class 两数相加 { public static void main(String[] args) { int[] arr={2,7,11,15}; int target=9; System.out.println(Arrays.toString(两数相加.twoNums(arr,target))); public static int[] twoNums(int[] nums, int target){

2020-05-20 14:51:03 138

原创 内部类

typora-root-url: …\应用软件\Typora\upload内部类成员内部类外部类是不能直接调用内部类的变量和方法,可以先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法当外部类与内部类有相同的成员变量或方法时,内部类默认访问自己的成员变量或方法,如果内部类要访问外部类的成员变量或者方法,可以是用类名.this.变量名称/变量方法。外部类的.class文件为 类名.class 内部类的class文件为 外部类$内部类.class内部类的对象中不能.

2020-05-18 16:04:48 100

原创 ArrayCopy

ArrayCopy底层实现分析int[] arr=new[]{1,2,3,4,5};int[] arr1=Arrays.copyof(arr,6);System.out.println(Arrays.toString(arr1));//控制台[1, 2, 3, 4, 5, 0]这里是拿int类型的copyof来做示范,其实其他类型也都一样,这里就不一一为大家详细介绍其他类型的了。int[] original:这个参数指的是arr数组,此数组为源数组int newLength:这个参数指

2020-05-16 16:32:32 2130

原创 Java标识符规则

Java标识符给类、接口、抽象、方法、变量、包、常量等定义名称的规范组成规则:大小写字母、数字、_(下划线)、$、中文字符注意:不能以数字开头也不能单独使用建议不要使用中文字符_以及$不要随便使用不能与关键字冲突组成规范:见名知义驼峰规则类、接口、抽象:①首字母大写 例如 Demo②多个单词中每个单词的首字母大写 例如FirstDemo方法、变量:①首字母小写public void add(){}②多个单词中第一个

2020-05-16 13:44:10 147

原创 个人学习笔记SpringIOC

IOCIOC:所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周期的管理,而是在需要时由Spring框架提供,这个由spring框架管理对象创建和生命周期的机制称之为控制反转。原理:在初始化一个Spring容器时,Spring会去解析指定的xml文件,当解析到其中的标签时,会根据...

2020-04-25 13:10:54 132

空空如也

空空如也

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

TA关注的人

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