自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 经典面试题目笔记二

1、在行也有序、列也有序的二维数组中,找num,找到返回true,否则false public static boolean isContains(int[][] matrix, int K) { int row = 0; int col = matrix[0].length - 1; while (row < matrix.length && col > -1) { if (matrix[row][col] == K) { return

2021-06-22 23:40:30 314 1

原创 经典面试题目笔记一

1、给定一个有序数组arr,从左到右依次表示X轴上从左往右点的位置给定一个正整数K,返回如果有一根长度为K的绳子,最多能盖住几个点绳子的边缘点碰到X轴上的点,也算盖住

2021-06-03 15:28:02 346

原创 算法与数据结构进阶课第十三节笔记

AC自动机与卡特兰数AC自动机1)关键在于fail指针的理解(网上帖子几乎没有解释)fail指针含义:目前来到的节点,之前路径上的字符串记为str,除了str之外哪个前缀字符串,和str的后缀串匹配最大,fail指针就指向那个最大匹配串的最后字符底下的节点。(难理解吧?其实是精髓,看视频)2)构建和使用看视频...

2021-05-28 21:28:51 415

原创 算法与数据结构进阶课第十二节笔记

有序表的原理、应用、扩展搜索二叉树搜索二叉树一定要说明以什么标准来排序经典的搜索二叉树,树上没有重复的用来排序的key值如果有重复节点的需求,可以在一个节点内部增加数据项...

2021-05-28 20:11:45 214

原创 算法与数据结构进阶课第十一节笔记

资源限制类题目1)布隆过滤器用于集合的建立与查询,并可以节省大量空间(已讲)2)一致性哈希解决数据服务器的负载管理问题(已讲)3)利用并查集结构做岛问题的并行计算(已讲)4)哈希函数可以把数据按照种类均匀分流5)位图解决某一范围上数字的出现情况,并可以节省大量空间6)利用分段统计思想、并进一步节省大量空间7)利用堆、外排序来做多个处理单元的结果合并题目1:32位无符号整数的范围是0~4,294,967,295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现

2021-05-27 22:33:34 197

原创 算法与数据结构进阶课第十节笔记

哈希函数有关的结构和岛问题认识哈希函数 -> out f(in data)1)输入参数data,假设是in类型,特征:可能性无穷大,比如str类型的参数2)输出参数类型out,特征:可能性可以很大,但一定是有穷尽的3)哈希函数没有任何随机的机制,固定的输入一定是固定的输出4)输入无穷多但输出值有限,所以不同输入也可能输出相同(哈希碰撞)5)再相似的不同输入,得到的输出值,会几乎均匀的分布在out域上重点:第5条!一个40亿的整数文件,一个整数是4个字节,只有1...

2021-05-27 20:34:20 157

原创 算法与数据结构进阶课第九节笔记

数组累积和问题三连例1、给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K,并且是长度最大的,返回其长度。准备一个窗口[L..R] 的累积和是windowSumwindowSum > K, R++ 因为都是正数,已经大于 ,那么之后再累加不可能再小于等于KwindowSum < K, L ++windowSum = K, max = Math.max(R-L+1,max) public static i.

2021-05-27 16:29:53 138

原创 算法与数据结构进阶课第八节笔记

打表技巧和矩阵处理技巧打表法1)问题如果返回值不太多,可以用hardcode的方式列出,作为程序的一部分2)一个大问题解决时底层频繁使用规模不大的小问题的解,如果小问题的返回值满足条件1),可以把小问题的解列成一张表,作为程序的一部分3)打表找规律(本节课重点),有关1)和2)内容欢迎关注后序课程打表找规律1)某个面试题,输入参数类型简单,并且只有一个实际参数2)要求的返回值类型也简单,并且只有一个3)用暴力方法,把输入参数对应的返回值,打印出来看看,进而优化code.

2021-05-27 11:44:49 120

原创 算法与数据结构进阶课第七节笔记

线段树1,一种支持范围整体修改和范围整体查询的数据结构2,解决的问题范畴:大范围信息可以只由左、右两侧信息加工出,而不必遍历左右两个子范围的具体状况给定一个数组arr,用户希望你实现如下三个方法1)void add(int L, int R, int V) : 让数组arr[L…R]上每个数都加上V2)void update(int L, int R, int V) : 让数组arr[L…R]上每个数都变成V3)int sum(int L, int R) :让返回arr[L…R]这..

2021-05-26 21:53:48 148 1

原创 算法与数据结构进阶课第六节笔记

Morris遍历及其相关扩展一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1)通过利用原树中大量空闲指针的方式,达到节省空间的目的当前节点cur,一开始cur来到树头1、cur无左树,cur = cur.right2、cur 有左树,找到左树最右节点mostRight(1)、mostRight 的右指针指向null, mostRight.right = cur, cur = cur.left(2)、mostRight 的右指针指向 cur,mostRight..

2021-05-25 21:29:35 93

原创 算法与数据结构进阶课第五节笔记

Manacher算法及其扩展假设字符串str长度为N,想返回最长回文子串的长度,时间复杂度O(N)暴力解法,以每个字符为中心计算回文子串的长度,但是要给每个字符中间加一个特殊字符,例如31211214 ---- #3#1#2#1#1#2#1#4# 这样计算出来的每个结果除2就是实际的回文子串长度Manacher就是在这个暴力解法的基础上利用信息做加速1、回文半径(从中心开始数一半)、回文直径(整个回文串的长度)2、回文半径数组 pArr[] 记录每个位置得出的答案3、回文最右..

2021-05-22 20:35:09 81

原创 算法与数据结构进阶课第四节笔记

KMP算法及其扩展假设字符串str长度为N,字符串match长度为M,M <= N,想确定str中是否有某个子串是等于match的。时间复杂度O(N)指标,i 位置前的字符串的,前缀与后缀相同的最大长度,不能等于整体建立这样一个指标数组a a b a a b c -1 0 1 0 1 2 3 -1和0人为规定 public static int getIndexOf(Str...

2021-05-21 23:05:02 82

原创 算法与数据结构进阶课第三节笔记

bfprt算法与蓄水池算法蓄水池算法例1:假设有一个源源吐出不同球的机器,只有装下10个球的袋子,每一个吐出的球,要么放入袋子,要么永远扔掉,如何做到机器吐出每一个球之后,所有吐出的球都等概率被放进袋子里?第k个球到来的时候,以10/k的概率放入袋子,扔的时候10个里面随机选一个例2:给定一个能概率的返回0-7的函数,怎么做能等概率的返回某个范围首先将这个给定的函数,均分,奇数时最大的那个返回重roll,这样可以概率的返回0,1, 之后想要概率的返回(0,n)就看n用二进制k位能表示,等

2021-05-21 23:04:42 143

原创 算法与数据结构进阶课第二节笔记

类似斐波那契数的递归斐波那契数的快速幂f(n-1) * a + f(n-2) * c = f(n)f(n-1) * b + f(n-2) * d = f(n-1) 可以计算出a,b,c,d因为f(n) = f(n-1) + f(n-2) 必然会有上面的公式替换进去就能得出继续推导得出 public static int f3(int n) { if (n < 1) { return 0; } if (n == 1 ||...

2021-05-21 18:02:58 134 2

原创 算法与数据结构进阶课第一节笔记

单调栈和滑动窗口滑动窗口是什么?滑动窗口是一种想象出来的数据结构:滑动窗口有左边界L和有边界R在数组或者字符串或者一个序列上,记为S,窗口就是S[L..R]这一部分L往右滑意味着一个样本出了窗口,R往右滑意味着一个样本进了窗口L和R都只能往右滑初始L,R都是0,L<=R双端队列的作用,在此时的状态下,R不再动,L往右移,哪些数是最大值的优先级窗口不管L还是R滑动之后,都会让窗口呈现新状况,如何能够更快的得到窗口当前状况下的最大值和最小值?最好平均下来复杂度能

2021-05-21 15:53:21 140

原创 算法与数据结构基础课第十二节笔记

暴力递归转动态规划什么暴力递归可以继续优化?有重复调用同一个子问题的解,这种递归可以优化如果每一个子问题都是不同的解,无法优化也不用优化例1:假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2开始时机器人在其中的M位置上(M 一定是 1~N 中的一个)如果机器人来到1位置,那么下一步只能往右来到2位置;如果机器人来到N位置,那么下一步只能往左来到 N-1 位置;如果机器人来到中间位置,那么下一步可以往左走或者往右走;规定机器人必须走 K 步,最终能来到P位置(P也是1

2021-05-20 11:36:06 153 2

原创 算法与数据结构基础课第十一节笔记

暴力递归暴力递归就是尝试1,把问题转化为规模缩小了的同类问题的子问题2,有明确的不需要继续进行递归的条件(base case)3,有当得到了子问题的结果之后的决策过程4,不记录每一个子问题的解熟悉什么叫尝试?例1:打印n层汉诺塔从最左边移动到最右边的全部过程1、1 ~ n-1 左到中2、n 左到右3、1~n-1 中到右模拟手动移的过程: public static void hanoi1(int n) { leftToRight(n); }

2021-05-15 20:48:58 144

原创 算法与数据结构基础课第十节笔记

并查集结构和图相关算法并查集有若干个样本a、b、c、d…类型假设是V 在并查集中一开始认为每个样本都在单独的集合里 用户可以在任何时候调用如下两个方法: boolean isSameSet(V x, V y) : 查询样本x和样本y是否属于一个集合 void union(V x, V y) : 把x和y各自所在集合的所有样本合并成一个集合 isSameSet和union方法的代价越低越好 public static class Node<V> { V val

2021-05-15 17:52:58 145

原创 算法与数据结构基础课第九节笔记

贪心算法最自然智慧的算法 用一种局部最功利的标准,总是做出在当前看来是最好的选择 难点在于证明局部最功利的标准可以得到全局最优解 对于贪心算法的学习主要以增加阅历和经验为主例1:给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的拼接结果中,字典序最小的结果贪心策略1:先给数组按照字典序排序,然后依次拼起来,适用于大多数case,但是个别如:ba,b 会拼成bba,但是bab实际上字典序更小,也就是两个字符串x,yx 的字典序 小于等于 y 的,那么x

2021-05-14 21:51:52 138

原创 算法与数据结构基础课第八节笔记

二叉树的递归套路例1:如何设计一个直观打印整棵二叉树的函数将原本的树逆时针转90度右中左的顺序public static void printTree(Node head) { System.out.println("Binary Tree:"); printInOrder(head, 0, "H", 17); System.out.println(); } public static void printInOrder(Node head, int height, St

2021-05-13 20:55:33 272

原创 算法与数据结构基础课第七节笔记

二叉树的基本算法先序,中序,后序遍历先序 中左右中序 左中右后序 左右中public static class Node { public int value; public Node left; public Node right; public Node(int v) { value = v; } }public static void pre(Node head) { if (head == null) { retu...

2021-05-13 17:13:33 156

原创 算法与数据结构基础课第六节笔记

链表相关面试题面试时链表解题的方法论对于笔试,不用太在乎空间复杂度,一切为了时间复杂度 对于面试,时间复杂度依然放在第一位,但是一定要找到空间最省的方法快慢指针1)输入链表头节点,奇数长度返回中点,偶数长度返回上中点2)输入链表头节点,奇数长度返回中点,偶数长度返回下中点3)输入链表头节点,奇数长度返回中点前一个,偶数长度返回上中点前一个4)输入链表头节点,奇数长度返回中点前一个,偶数长度返回下中点前一个public static class Node { public

2021-05-13 15:46:49 128

原创 算法与数据结构基础课第五节笔记

trie,桶排序、排序总结前缀树单个字符串中,字符从前到后的加到一棵多叉树上 字符放在路上,节点上有专属的数据项(常见的是pass和end值) 所有样本都这样添加,如果没有路就新建,如有路就复用 沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1可以完成前缀相关的查询功能点void insert(String str) 添加某个字符串,可以重复添加,每次算1个 int search(String str) 查询某个字符...

2021-05-13 11:22:46 115

原创 算法与数据结构基础课第四节笔记

比较器与堆堆 堆结构就是用数组实现的完全二叉树结构 完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 堆结构的heapInsert与heapify操作 堆结构的增大和减少 优先级队列结构,就是堆结构 数组保存堆的位置索引 0开头 1开头(使用位运算加速)左孩子: 2*i+1 2*i右孩子: 2*i+...

2021-05-11 20:57:29 85

原创 算法与数据结构基础课第三节笔记

归并排序与随机快排归并排序整体是递归,左边排好序+右边排好序+merge让整体有序 让其整体有序的过程里用了排外序方法 利用master公式求解时间复杂度 非递归实现递归实现:public static void mergeSort1(int[] arr) { if (arr == null || arr.length < 2) { return; } process(arr, 0, arr.length -

2021-05-11 17:19:46 168 1

原创 JVM学习笔记58——动态代理实现机制深层次分析与动态代理运作机制

实现一个动态代理:public interface Subject { void request();}public class RealSubject implements Subject{ @Override public void request() { System.out.println("From real subject"); }}public class DynamicSubject implements Invocat

2021-05-10 19:56:34 63

原创 JVM学习笔记51——栈帧与操作数栈剖析及符号引用与直接引用的转换

栈帧(stack frame)是一种帮助虚拟机执行方法调用与方法执行的数据结构,封装了方法的局部变量表、动态链接信息、方法的返回地址以及操作数栈等信息。slot是存储局部变量表的最小单位 可复用 复用情况与虚拟机的具体实现有关有些符号引用是在类加载阶段或是第一次使用时就会转换为直接引用,这种转换叫做静态解析;另外一些符号引用则是在每次运行期转换为直接引用,这种转换叫做动态链接,这体现为Java的多态性。直接引用的五种情况:invokeinterface:调用接口中的方法,实际上是运行期决定的

2021-05-10 19:07:47 258

原创 JVM学习笔记47——通过字节码分析this关键字以及异常表的重要作用

public class MyTest3 { public void test(){ try{ InputStream inputStream = new FileInputStream("test.txt"); ServerSocket serverSocket = new ServerSocket(9999); serverSocket.accept(); }catch (FileNot.

2021-05-10 15:10:42 105

原创 JVM学习笔记46——synchronized关键字所产生的字节码详细分析

javap -verbose -p 显示私有成员,方法的命令public class MyTest2 { String str = "Welcome"; private int x = 5; public static Integer in = 10; public void setX(int x) { this.x = x; } public static void main(String[] args) {

2021-05-10 14:28:18 120

原创 JVM学习笔记38-42——Java字节码内容剖析

1、使用javap -verbose命令分析一个字节码文件时,将会分析该字节码文件的魔数、版本号、常量池、类信息、类的构造方法、类中的方法信息、类变量与成员变量等信息。2、魔数:所有的.class字节码文件的前四个字节都是魔数,魔数值为固定值:0xCAFEBABE3、魔数之后的4个字节为版本信息,前两个字节表示minor version (次版本号),后两个字节表示major version(主版本号)。这里版本号为00 00 00 34,换算成十进制,表示次版本号为0,主版本号为52,所以该版本号

2021-05-10 14:28:05 128

原创 JVM学习笔记37——Java字节码文件结构剖析

public class MyTest1 { private int a = 1; public int getA() { return a; } public void setA(int a) { this.a = a; }}查看MyTest1的字节码文件$ cd target/classes$ javap -c com.yshuoo.jvm.bytecode.MyTest1Compiled from "My.

2021-05-10 14:27:52 67

原创 JVM学习笔记32——JVM类加载器阶段性总结与学习方式升级

加载、连接、初始化程序的生命周期连接的过程初始化的作用主动使用的七种方式加载.class文件的方式初始化与类实例化要区分开类的初始化步骤接口与普通类初始化的区别类加载的父亲委托机制...

2021-05-09 16:57:24 73

原创 JVM学习笔记31——通过JDBC驱动加载深刻理解线程上下文加载器机制

public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytestdb", "username", "password"); }通过源码看JDBC到底是如何被加载.

2021-05-09 16:32:25 83

原创 JVM学习笔记30——线程上下文类加载器实战分析与难点剖析

将当前线程的类加载器设置为扩展类加载器public static void main(String[] args) { Thread.currentThread().setContextClassLoader(MyTest26.class.getClassLoader().getParent()); ServiceLoader<Driver> loader = ServiceLoader.load(Driver.class); Iter.

2021-05-09 15:43:39 86

原创 JVM学习笔记29——ServiceLoader在SPI中的重要作用分析

以JDBC为例,介绍SPI如何打破双亲委托模型首先看看驱动的类加载器public class MyTest26 { public static void main(String[] args) { ServiceLoader<Driver> loader = ServiceLoader.load(Driver.class); Itera...

2021-05-09 15:15:44 169

原创 JVM学习笔记28——线程上下文加载器本质剖析与实现

public class MyTest25 implements Runnable{ private Thread thread; public MyTest25 (){ thread = new Thread(this); thread.start(); } @Override public void run() ...

2021-05-09 14:43:28 169

原创 JVM学习笔记27——线程上下文加载器分析与实现

编写MyTest24public class MyTest24 { public static void main(String[] args) { System.out.println(Thread.currentThread().getContextClassLoader()); System.out.println(Thread.class.g...

2021-05-09 14:43:15 191

原创 JVM学习笔记26——自定义系统类加载器源码分析与forName方法底层剖析

public static Class<?> forName(@NonNls String name, boolean initialize, ClassLoader loader) throws ClassNotFoundExceptionExternal annotations available:@org.jetbra...

2021-05-09 14:43:04 93

原创 JVM学习笔记25——Launcher类源码分析

public static ClassLoader getSystemClassLoader()Returns the system class loader for delegation. This is the default delegation parent for new ClassLoader instances, and is typically the class loader used to start the application.This method is first in

2021-05-09 14:42:52 161

原创 JVM学习笔记24——平台特定的启动类加载器深入分析与自定义系统加载器详解

在运行期,一个Java类是由该类的完全限定名(binary name,二进制名)和用于加载该类的定义类加载器(defining loader)所共同决定的。如果同样名字(即相同的完全限定名)的类是由两个不同的加载器所加载,那么这些类就是不同的,即便.class文件的字节码完全一样,并且从相同的位置加载亦是如此。编写MyTest23public class MyTest23 { ...

2021-05-09 14:42:38 226

空空如也

空空如也

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

TA关注的人

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