自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凯凯王的技术生涯

想做架构师的小菜鸟

  • 博客(25)
  • 资源 (1)
  • 收藏
  • 关注

原创 Class.forName和Class.loader有什么区别?

类加载机制代码示例public class User { private static int a=10; { System.out.println("普通代码块"); } static { System.out.println("静态代码块"+a); }}public class Main { pub...

2020-04-29 19:39:05 258

原创 Mysql事务隔离

事务是保证一组操作原子性进行,MySQL中事务隔离是在引擎层实现的。隔离性与隔离级别事务的:ACID,I指的的隔离性当数据库上多个事务同时执行的时候,就可能出现脏读、幻读、不可重复读,为了解决这些问题,隔离级别诞生了,SQL的隔离级别分为 读未提交、读提交、可重复读、串行化都指的是当前事务读未提交: 一个事务还没提交时,它做的变更就能被别的事务看到读提交:一个事务提交之后,他做的变更...

2020-04-28 21:47:45 87

原创 ConcurrentHashMap源码

类注释所有操作都是线程安全的,操作无需再加锁多个线程可以同时进行put、remove,可以同时进行迭代过程中,结构被修改,也不会抛出ConcurrentModificationException异常除了数组+链表+红黑树的基本结构外,新增转移节点,保证扩容时的线程安全提供了很多Stream流失方法结构...

2020-04-27 17:16:52 85

原创 Bellman-Ford单源最短路径

如果一个图没有负权环,从一个点到另外一个点最多V个顶点,有V-1条边,否则某个顶点经过2次,存在负权环

2020-04-26 16:19:19 99

原创 Dijkstra单源最短路径算法

图中不能有负权边复杂度O(E log(V))

2020-04-26 14:43:20 161

原创 并发List、Map源码面试题

1 CopyOnWriteArrayList相关1.1 和ArrayList相比有哪些相同点和不同点答:相同点:底层数据结构相同 不同点:CopyOnWriteArrayList是线程安全的,多线程环境下无需加锁1.2 CopyOnWriteArrayList 通过哪些手段实现了线程安全答:数组容器被volatile关键字修饰,保证数组被修改后,内存地址发生变换,会通知到其他线程。对数组的...

2020-04-26 08:51:01 164

原创 CopyOnWriteArrayList源码解析

底层数据结构线程安全的锁+数组拷贝+volatile关键字保证线程安全每次数组操作,都会拷贝一份出来,在新数组进行操作底层是个数组private transient volatile Object[] array;...

2020-04-24 10:20:23 95

原创 LinkedHashMap源码解析

数据结构继承于HashMap结构, static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before, after; Entry(int hash, K key, V value, Node<K,V> next) { ...

2020-04-23 19:29:44 207

原创 TreeMap核心源码解析

底层数据结构底层数据结构就是红黑树,根据key进行排序,把元素插入合适的位置,适用于key需要排序的场景。常见属性及操作 /** * 比较器,外部传了用外部,外部没有用key自己的 */ private final Comparator<? super K> comparator; /** * 红黑树的根节点 */ ...

2020-04-23 18:25:59 89

原创 Map源码会问哪些问题

HashMap底层数据结构

2020-04-23 17:14:54 87

原创 List源码会问哪些面试题

1.1 说说你对ArrayList的理解先回答整体架构,再详细解释细节。例如 ArrayList底层是个数组,其API都做了一层对数组底层的封装,可以按照之前总结的来1.2 扩容类问题1.2.1 ArrayList无参构造器构造,add 一个值进去,此时数组的大小是多少,下一次扩容前可用大小是多少,扩容之后是多少答:数组大小为1,下一次扩容前可用大小为10,扩容一半,为151.2.2...

2020-04-20 22:47:25 201

原创 LinkedList源码解析

结构当链表中没有数据时,first和last是同一个节点,都是null添加

2020-04-17 10:12:58 226

原创 ArrayList源码解析和设计思路

transient Object[] elementData; // non-private to simplify nested class accessArrayList无参构造器初始化时,默认大小是空数组,第一次add的时候扩容的数值是10初始化三种初始化方式:无参初始化、指定大小初始化、指定初始数据初始化新增和扩容扩容本质删除迭代器hasNext 还是否可以迭代...

2020-04-16 22:25:27 174

原创 Arrays、Collections、Objects常用方法源码解析

工具类特征构造器私有。工具类直接使用,无需初始化,所以通过私有构造器让类不能new用static final关键字修饰工具类方法ArraysArrays.sort底层使用双轴快速排序算法Arrays.binarySearch前提是数组必须有序Arrays.copyOfRange底层调用System.arraycopy这个native方法Collections求集合中...

2020-04-16 10:29:22 163

原创 Java常见关键字

staticstatic是静态的、全局的意思,修饰之后在一定范围内是共享的,那么就需要注意并发读写的安全性。1.1 修饰的方法、方法块、类变量static修饰public变量的时候,任何类都可以直接访问它,无需初始化类,直接类名.变量名。安全性问题:public static List list=new ArrayList(),如果list被多个线程访问的话,就会出现线程安全问题,这个可...

2020-04-15 08:58:48 189

原创 String和Long源码解析

String不变性public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[];...

2020-04-14 15:59:14 312

原创 堆的实现方式和堆排序

理解堆堆是一个完全二叉树堆中的每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值存储:由于堆是一种完全二叉树,完全二叉树比较适合用数组来存储堆化:插入和删除堆中元素之后,需要重新调整,让其满足堆特性的过程往堆中插入一个元素(从下往上堆化)删除堆中的一个元素(从上往下堆化)堆排序建堆有两种建堆方式,一种是利用一个空堆,不断插入。另外一种是从第一个非叶子...

2020-04-13 08:00:04 212

原创 哈希算法

是什么将任意长度的二进制串映射为固定长度的二进制串。要求从哈希值不能反向推导出原始数据对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大不相同散列冲突概率要小,不同的原始数据,哈希值冲突的概率要小哈希算法的执行效率要高,针对很长的文本,也要很快计算出哈希值应用安全加密唯一标识数据校验散列函数负载均衡数据分片(关键词次数、判断图片是否在图库中)...

2020-04-07 15:48:22 108

原创 散列表

是什么散列表是数组的一种扩展,利用的是数组的随机访问特性。散列表的核心是散列函数,散列函数有三个要求:1. 散列函数得到的值是一个非负整数; 2. 如果key1=key2,那么hash(key1)==hash(key2);3. 如果key1!=key2,那hash(key1)!=hash(key2),这种情况几乎不可能存在散列冲突开放寻址法线性探测、二次探测、双重散列数据量小,装载因子...

2020-04-07 11:17:14 157 1

原创 跳表

Redis里的有序集合就是通过跳表来实现的。跳表是什么链表+多级索引,实现了一种类二分查找的操作。利用的是一种空间换时间的思想跳表的时间复杂度假设有n个几点,首先按每两个节点抽出一个索引为例,那么第k级索引的索引数为n/2^k, 最高级索引数有2个,则 n / 2 ^ k=2,k=logn-1,加上最后一层,高度h为h=logn,没一层需要遍历的元素个数呢,如图分析可知,是3个,则跳表的查...

2020-04-03 09:43:46 99

原创 接口和抽象类有什么区别

接口对行为进行抽象,是抽象方法的集合,达到定义和实现分离的目的不能实例化,不能包含任何非常量的成员任何field都隐含public static final

2020-04-02 11:27:24 91

原创 JDK动态代理

静态代理JDK动态代理Cglib动态代理

2020-04-02 10:11:56 82

原创 基数排序

适用场景基础排序对要排序的数据有要求的,需要分割出独立的位来比较,而且位之间有递进关系,如果a数据的高位比B数据大,那剩下的地位就不用比较了。同时每一位的数据范围也不能太大,要可以用线性排序算法来排序,否则基数排序的时间复杂度就无法做到O(n)了。...

2020-04-01 10:24:29 72

原创 计数排序

介绍计数排序其实是桶排序的一种特殊情况,在排序的n个数据,范围不大的情况下,根据最大值分桶,每个桶里的数据都是相同的,省掉了桶内排序的时间。思路使用场景高考排名系统计数排序和桶排序的区别就在于桶的粒度不一样计数排序只能给非负整数排序...

2020-04-01 10:15:24 84

原创 IO流

IO流是什么IO流:JAVA程序进行数据传输的管道,流就是管道。把数据传到程序中是输入流,把数据从程序中输出是输出流

2020-04-01 09:08:26 92

QConf 架构和实现原理

QConf 架构和实现原理

2019-03-13

空空如也

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

TA关注的人

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