自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (3)
  • 论坛 (1)
  • 收藏
  • 关注

原创 神奇的位运算

1 基础知识n & (n - 1) 可以去除 n 的位级表示中最低的那一位,例如对于二进制表示 11110100 ,减去 1 得到 11110011,这两个数按位与得到 11110000。n & (-n) 可以得到 n 的位级表示中最低 的那一位,例如对于二进制表示 11110100,取负得到 00001100,这两个数按位与得到 000001002 2的次方首先我们考虑一个数字是不是 2 的(整数)次方:如果一个 n 是 2 的整数次方,那么它 的二进制一定是 0…010…0 这样的

2021-02-28 11:17:00 12

原创 【ALGO】07 动态规划精准复习--不要等过了山丘才发现无人守候

1 算法解释动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能 完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问 题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规 划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。 动态规划是自下而上的,即先解决子问题,再解决父问题;而用带有状态记

2021-02-26 13:16:52 29

原创 【IO】Java异步非阻塞编程的几种方式

1 服务端执行,最简单的同步调用方式:缺陷: 服务端响应之前,IO会阻塞在: java.net.SocketInputStream#socketRead0 的native方法上:2 JDK NIO & Future java 1.5之后优点:主线程可以不用等待IO响应,可以去做点其他的,比如说再发送一个IO请求,可以等到一起返回; 缺点: 主线程在等待结果返回过程中依然需要等待,没有根本解决此问题;3 使用Callback回调方式优点:主线程完成发送请求后,再也不用关心这.

2021-02-25 20:12:33 14

原创 【LRU】LinkedHashMap 实现 LRUCache

1 结构示意图2 源码实现package classloader.lc;import java.util.LinkedHashMap;import java.util.Map;/** * LinkedHashMap实现Map的接口,和HashMap不同的是维持了一个所有entries的双向链表, * 并持有一个该有序链表的迭代器,并有两个Entry<K,V>引用transient LinkedHashMap.Entry<K,V> head,tail..

2021-02-25 15:08:07 19

原创 【ALGO】 替换后最长子串长度

1 java 源码 解析public class LongestCommonStr { public static void main(String[] args) { String LC = "ABABCCCCCC"; int k = 2; char[] chars = LC.toCharArray(); System.out.println(getMaxCommonLength(chars, k)); }

2021-02-24 10:19:10 12

原创 【Mysql】意向锁

1 意向锁为什么要存在?意向锁主要是解决:表级锁 和 行锁(其他排它锁如间隙锁,next key gap锁)共存问题;2 举例说明事务A锁住了表中的行锁。事务B申请整个表的写锁,表级锁。为了保证A释放后,B才能获取锁,如何让B事务堵塞等待呢?数据库要怎么判断这个冲突呢?1:判断表是否已被其他事务用表锁锁表2:判断表中的每一行是否已被行锁锁住。但是2这一步时间复杂度实在是太高了,因为需要遍历整个表。于是出现了 意向锁。在意向锁存在的情况下,事务A必...

2021-02-24 09:35:01 14

原创 【ALGO】最深公共祖先

1 源码class Solution { Map<Integer, TreeNode> parent = new HashMap<Integer, TreeNode>(); Set<Integer> visited = new HashSet<Integer>(); public void dfs(TreeNode root) { if (root.left != null) { pare

2021-02-23 19:02:37 13

原创 【ALGO】中序遍历+后序遍历构造二叉树

1 源码import java.util.HashMap;public class LCP { HashMap<Integer,Integer> memo = new HashMap<>(); int[] post; public TreeNode buildTree(int[] inorder, int[] postorder) { for(int i = 0;i < inorder.length; i++)

2021-02-23 18:31:50 20

原创 【ALGO】买卖股票的最佳时机

1 算法public class GuPiao { public static void main(String[] args) { int[] array = new int[]{7, 1, 5, 3, 6, 4}; // 累加所有的上升期间之和就是 最大收益值 System.out.println(maxProfit(array)); } public static int maxProfit(int[] prices)

2021-02-23 17:57:11 18

原创 【charles】charles https还是unknown 解决办法

1 charles mac 端安装证书-->client 端安装证书, https还是unknown 解决办法!2 配置通配符 *.*:*

2021-02-23 11:24:50 15

原创 【算法】寻找第K个最小的数

1 直接上源码实现public class QuickSort { private static final int[] array = new int[]{4,1,2,3,5,6,7,8,9,0}; public static int quickSortFindK(int[] array, int begin, int end, int k){ if(begin >= end){ return array[begin];

2021-02-22 19:33:25 16

原创 【约瑟夫环】java 数组实现

package com.xiaodaka.rec.data.refresh.lc;public class YueSeFu { private static int[] peopleCircle = new int[41]; static { for(int i = 0; i < 41; i++){ peopleCircle[i] = 1; } } public static void main(Str.

2021-02-21 20:11:39 32

原创 【01背包问题】java 实现源码,解题思路

1 背包问题有N(4)件物品和一个容量为V(BeiBaoSpace = 8)的背包。第i件物品的占用空间是space,价值是value。求解将哪些物品装入背包可使价值总和最大。抽象模型如下:2 java 代码实现import com.google.common.collect.Lists;import lombok.Data;import java.util.List;import java.util.Map;import java.util.function.F.

2021-02-21 17:40:19 60 1

原创 【netty与rpc】quick review rpc netty4 dubbo 同步转异步 all-in-one 知识库

1 Netty 原理Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞 的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。2 Netty 高性能在 IO 编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者 IO 多路复用技术 进行处理。IO 多路复用技.

2021-02-20 17:48:34 32 1

原创 【Mysql】quick review 分布式事务 存储 redo undo all-in-one

1 存储引擎存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated1.1 InnoDB(B+树):InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page大小是固定的, 一般设为 16k。其中非叶子节点只有键值,叶子节点包含完成数据。适用场景: 经常更新的表,适合处理多重并发的更新请求。 支持事务。 可以从灾难中恢复(通过 bin-log 日志等) 外键约束。只有他支持外键

2021-02-19 18:40:10 47 1

原创 【Spring】JSR-250 对Bean的生命周期影响@PostConstruct 、@PreDestroy

1 面试细节源码(生命周期:初始化如何完成的?)由上图初始化部分,跟进得到继续跟进初始化 invokeInitMethods 方法2 初始化小结1 初始化顺序一定是:@PostConstruct--->InitializingBean#afterPropertiesSet() -->自定义init-method 2 关于@PostConstruct 、@PreDestroy 来自 JSR-250 特征 3 参考UML图3 面试细节源码(生命周期:销毁方法如何注册

2021-02-19 11:31:12 26

原创 【java】基础 quick review all-in-one

1. JAVA 异常分类及处理1.1 异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception.1. Error (比如ThreadDeath) 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果 出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。 2. Exception(RuntimeException、CheckedException)又有两个分支,一个是运行时异常 Check

2021-02-18 21:27:48 18

原创 【集合】java 集合 quick review all-in-one

3.1. 接口继承关系和实现1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。 2. Iterator:迭代器,可以通过迭代器遍历集合中的数据 3. Map:是映射表的基础接口Java 的 List 是非常常用的数据类型。List 是有序的 Collection。Java List 一共三个实现类:3.2. List分别是 ArrayList、Vector 和 LinkedList。3.2.1. ArrayList(数组

2021-02-18 19:52:55 24

原创 【JVM】 jvm quick review知识 all-in-one

1 总体结构2 运行过程:① Java 源文件—->编译器—->字节码文件② 字节码文件—->JVM—->机器码用户线程: 这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。 Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把.

2021-02-18 19:25:08 30

原创 【Thread】Thread并发知识 JUC all-in-one

1 并发知识库2 JAVA 线程实现/创建方式继承Thread类,native start()方法; 实现Runnable接口(自己的类已经extends 另一个情况,new Thread()); ExecutorService、Callable<Class>、Future 有返回值线程(有返回值的任务必须实现 Callable 接口,类似的,无返回值的任务必须 Runnable 接口) 基于线程池的方式(线程和数据库连接这些资源都是非常宝贵的资源。那么每次需要的时候创建,不需

2021-02-18 14:49:19 41

原创 【LOCK】 java lock all-in-one

9 JAVA 锁9.1 乐观锁(读多写少 java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作)9.2 悲观锁(写多java 中的悲观锁就是 Synchronized,AQS 框架下的非公平锁则是先尝试 cas 乐观锁去获取锁,获取不到, 才会转换为悲观锁,如 RetreenLock)9.3 自旋锁(持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁 的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋), 等持有锁的线程释放...

2021-02-18 11:45:42 26

原创 【MAP】 HashMap ConcurrentHashMap all-in-one

0 文章结构 HashMap 1.7 vs 1.8 ConcurrentHashMap 1.7 vs 1.81 HashMap 1.7 1.8(数组+链表OR红黑树)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快 的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null,允许多条记 录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导 致数据的不...

2021-02-17 21:53:15 1818 5

原创 【ClassLoader】 类加载器all-in-one

1 类加载器的代理模式--Java 类是否相同两个类是由不同的类加载器实例来加载的,因此不被 Java 虚拟机认为是相同的。了解了这一点之后,就可以理解代理模式的设计动机了。代理模式是为了保证 Java 核心库的类型安全。所有 Java 应用都至少需要引用java.lang.Object类,也就是说在运行的时候,java.lang.Object这个类需要被加载到 Java 虚拟机中。如果这个加载过程由 Java 应用自己的类加载器来完成的话,很可能就存在多个版本的java.lang.Obj...

2021-02-17 21:01:31 39

原创 【zookeeper】一致性协调中间件

1 是什么?Zookeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等。 Zookeeper 提供了一个类似于 Linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但 只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控与通知机制。Zookeeper 集群是一个基于主从复制的高可用集群.2 角色?LeaderLeader: 一个 Zookeeper 集群同一时间只会有一个实际工作的 Leader,它会发起并维护与各 F

2021-02-17 18:37:04 71

原创 【限流】常用算法

1、漏桶算法漏桶作为计量工具(The Leaky Bucket Algorithm as a Meter)时,可以用于流量整形(Traffic Shaping)和流量控制(TrafficPolicing),漏桶算法的描述如下:● 一个固定容量的漏桶,按照常量固定速率流出水滴;● 如果桶是空的,则不需流出水滴;● 可以以任意速率流入水滴到漏桶;● 如果流入水滴超出了桶的容量,则流入的水滴溢出了(被丢弃),而漏桶容量是不变的。可见这里有两个变量,一个是桶的大小,支持流量突发增多时可以存多少的水(b

2021-02-15 09:03:08 29

原创 【ALGO】快速排序算法复习

1 循环不变量import java.lang.reflect.Array;public class quickSort { private static final int[] array = new int[]{9,-8,7,6,500,1,2,3,4}; public static void quickSort(int[] array, int begin, int end){ if(begin >= end){ ...

2021-02-13 13:24:58 67 3

原创 【2020】年终总结-佩奇OFFER

1 收获: 较为完整的搭建了推荐系统,增强了业务sense,对关键的技术挑战有沉淀,并针对系统性能进行了持续优化,思路清晰,对用的基础技术原理也有一定的学习和理解。2 不足:对于一些服务的基础技术原理了解还不是很深。------待更新-------...

2021-02-09 19:33:13 38

原创 【dubbo】dubbo bio nio socket netty 等方式调用dubbo server 附源码

1 该源码包含了 tcp 调用dubbo server的多种实现,以及dubbo协议的分析。2 主要包含:原生API,原生泛型,NIO Client, BIO Client 标准或者泛型方法的调用代码。 public static void main(String[] args) { // 当前应用配置 ApplicationConfig application = new ApplicationConfig(); applicati

2021-02-07 11:57:50 49

原创 【事件通知机制epoll】 epoll - I/O event notification facility 水平触发以及边缘触发存在的问题?

1 背景:分析epoll系统调用2 工具:使用strace分析 zk 客户端连接时,server发生的系统调用bin/zkCli.sh -server 172.16.208.137:2181 和zkserver连接以后3 监控分析过程:3.1 连接事件如下3.2 对于epoll_data疑惑:3.3op类型3.4events:(边缘处罚和水平出发,默认是level Triggerd)3.5 查看man手册第七部分 man 7 epoll...

2021-02-06 11:13:17 26

原创 【不懂就画,一千零一夜】dubbo 2.7.+ RPC 过程(全程图示)

1 Dubbo的RPC概览(其中包含 consumer provider registry netty 主从网络模型等核心模块)2 RPC 数据流--流程3 客户端启动4 服务端启动

2021-02-06 10:01:13 34

原创 [OS] IO 堵塞VS非堵塞 同步VS异步

自己认为最明确的答案:异步IO模型 -->异步模型:不需要自己去读IO数据,即 AIO, 通知并主动执行回调任务,业务thread不需要自己执行; 同步IO模型 -->同步模型:自己去读IO数据, BIO (poll,selector,epoll等多路复用器也是同步IO模型) 堵塞:thread线程被挂起,等待IO完成 非堵塞:thread 用户线程调用method 立马返回,通常-1无数据,或者ready的数据;...

2021-02-02 23:42:10 27

原创 [AQS] ArrayBlockingQueue put AQS signal 源码分析

1 put堵塞操作 (区分 offer(E e)非堵塞以及 中间状态 offer(E e, long timeout, TimeUnit unit))// 有异常addpublic boolean add(E e) { if (offer(e)) return true; else throw new IllegalStateException("Queue full");}2 源码分析 /** * Inserts t...

2021-02-01 11:23:10 26

原创 [AQS] ArrayBlockingQueue take AQS await 源码分析

1 take堵塞操作 (区分 poll() 非堵塞以及 中间状态 poll(long timeout, TimeUnit unit))2 源码分析public E take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { while (count == 0) notEmpt..

2021-02-01 11:00:05 36

整理流程.png.zip

喜欢dubbo等rpc框架的伙伴

2021-02-07

Memory Management in the Java HotSpot™ Virtual Machine.

15年最新

2016-12-28

zookeeper快速指导

zookeeper快速指导

2017-04-07

平静不绝望的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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