07 2021 档案

摘要:一、概述 类加载器是JVM 执行类加载机制的前提。 ClassLoader的作用: ClassLoader 是 Java 的核心组件,所有的 Class 都是由 ClassLoader 进行加载的,ClassLoader 负责通过各种方式将 Class 信息的二进制数据流读入JVM内部,转换为一个与 阅读全文
posted @ 2021-07-25 14:00 宋佳强 阅读(252) 评论(0) 推荐(0)
摘要:一、概述 在 Java 中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载 按照 Java 虚拟机规范,从 Class 文件到加载到内存中的类,到类卸载出内存位置,它的整个生命周期包括如下七个阶段 其中,验证、准备、解析 3 个部分统称为链接(Li 阅读全文
posted @ 2021-07-22 15:49 宋佳强 阅读(244) 评论(0) 推荐(0)
摘要:一、概述 Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行命令 Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字(称为操作码:Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数:Operands)构成 由于Java虚拟机采用面向操作数栈而不是寄存器的 阅读全文
posted @ 2021-07-22 15:47 宋佳强 阅读(462) 评论(0) 推荐(0)
摘要:零、mysql锁机制 数据库锁机制简单来说,就是数据库为了保证数据的一致性,使各种共享资源在被访问时变得有序而设计的一种规则! MysQL的锁机制比较简单最著的特点是不同的存储引擎支持不同的锁机制。InoDB支持行锁(有时也会升级为表锁);MyISAM只支持表锁; 行锁:锁数据的一行,开销小、加锁快 阅读全文
posted @ 2021-07-20 17:55 宋佳强 阅读(165) 评论(0) 推荐(0)
摘要:一、概述 1.1、Java语言:跨平台的语言 1.当java源代码成功编译成字节码后,如果想在不同的平台运行,无需再次编译 2.这个优势不再那么吸引人,Python 3.跨平台似乎已经快成为一门语言必选的特性 1.2、java虚拟机:跨语言的平台 1.Java虚拟机不和包括Java在内的任何语言绑定 阅读全文
posted @ 2021-07-18 15:46 宋佳强 阅读(322) 评论(0) 推荐(0)
摘要:一、事务简介 (1)在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务 (2)事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。 (3)事务用来管理insert,update,delete语句。 二、事务的四大特性 一般来说,事务必须满足四个条件 阅读全文
posted @ 2021-07-17 22:04 宋佳强 阅读(73) 评论(0) 推荐(0)
摘要:一、MySQL的数据结构类型 1、B树 数据在各个节点上 三层即 百万数据 2、B+树 数据在叶子节点上 3、为什么使用B/B+树 红黑树等数据结构也可以实现索引,但是文件系统以及数据库系统普遍使用B+树来作为索引结构。 Mysql是基于 磁盘 的数据库系统,索引往往以 索引的形式 存储于磁盘上,索 阅读全文
posted @ 2021-07-17 22:02 宋佳强 阅读(104) 评论(0) 推荐(0)
摘要:一、mysql目录结构 安装目录:C:PF\mysql 数据目录:C:PD\mysql\data 二、mysql系统架构 三、mysql存储引擎 负责和文件系统打交道 mysql的常用粗糙引擎 1、InnoDB存储引擎(5.x之后默认的) 支持事务 2、mysqliSa存储引擎 不支持事务 阅读全文
posted @ 2021-07-17 22:01 宋佳强 阅读(105) 评论(0) 推荐(0)
摘要:目标和(LeetCode 494 难度:中等) 下面用目标和来对比动态规划和回溯 回溯思路 任何框架的核心思想都是穷举,回溯算法是一个暴力穷举,前面写过算法框架: result = [] def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) retur 阅读全文
posted @ 2021-07-16 22:50 宋佳强 阅读(845) 评论(0) 推荐(0)
摘要:一、GC的分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 Java不同版本新特性 语法层面:Lambda表达式、 阅读全文
posted @ 2021-07-16 16:34 宋佳强 阅读(132) 评论(0) 推荐(1)
摘要:打家劫舍I(LeetCode 198题 难度:中等) 题目很容易理解,而且动态规划的特征很明显。,解决动态规划问题就是找「状态」和「选择」,仅此而已。 假想你就是这个专业强盗,从左到右走过这一排房子,在每间房子前都有两种选择:抢或者不抢。 如果你抢了这间房子,那么你肯定不能抢相邻的下一间房子了,只能 阅读全文
posted @ 2021-07-16 12:15 宋佳强 阅读(64) 评论(0) 推荐(0)
摘要:零钱兑换②(LeetCode 518题 难度:中等) 我们可以把这个问题转化为背包问题的描述形式: 有一个背包,最大容量为amount,有一系列物品coins,每个物品的重量为coins[i],每个物品的数量无限。请问有多少种方法,能够把背包恰好装满? 这个问题和我们前面讲过的两个背包问题,有一个最 阅读全文
posted @ 2021-07-16 12:13 宋佳强 阅读(144) 评论(0) 推荐(0)
摘要:子集切分问题(LeetCode 416 难度:中等) 描述 对于这个问题,看起来和背包没有任何关系,为什么说它是背包问题呢? 首先回忆一下背包问题大致的描述是什么: 给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性。其中第i个物品的重量为wt[i],价值为val[i],现在让你用 阅读全文
posted @ 2021-07-16 12:12 宋佳强 阅读(128) 评论(0) 推荐(0)
摘要:经典0-1背包问题 0-1背包问题 给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性,其中第i个物品的重量为wt[i],价值为val[i],现在你用这个背包装物品,问最多能装的价值是多少 思路分析 这个题目中的物品不可以分割,要么装进包里,要么不装,不能说切成两块装一半。这也许就 阅读全文
posted @ 2021-07-16 12:10 宋佳强 阅读(141) 评论(0) 推荐(0)
摘要:戳气球(LeetCode 312题 难度:困难) 题目中说 nums[0]=nums[n]=1; 动态规划思路: int n=nums.length; int point[]=new int[n+2]; int m=point.length; point[0]=point[n+1]=1; for ( 阅读全文
posted @ 2021-07-16 12:09 宋佳强 阅读(120) 评论(0) 推荐(0)
摘要:动态规划问题:高楼扔鸡蛋 力扣 887 题 难度:困难 思路分析: 题目是这样: 你面前有一栋从 1 到N共N层的楼,然后给你K个鸡蛋(K至少为 1)。现在确定这栋楼存在楼层0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎(高于F的楼层都会碎,低于F的楼层都不会碎)。现在问你,最坏情况下 阅读全文
posted @ 2021-07-16 12:07 宋佳强 阅读(112) 评论(0) 推荐(0)
摘要:一、System.gc()的理解 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用, 会显示触发 Full gc,同时对老年代和新生代进行垃圾回收,尝试去释放被丢弃对象占用的空间。 然而System.gc()附带一个免责声明,无法保证垃圾收集器的调 阅读全文
posted @ 2021-07-16 12:05 宋佳强 阅读(120) 评论(0) 推荐(0)
摘要:一、标记阶段:引用计数算法 1.1 垃圾标记阶段:垃圾存活判断 答:只有被标记为已经死亡的对象(没有任何指针指向它),GC才会在执行垃圾回收时,释放掉其所占的空间,因此这个过程叫做 垃圾标记阶段 两种方式:引用计数算法和可达性分析算法 1.2 引用计数算法:记录对象被引用的情况,被引用就+1,引用失 阅读全文
posted @ 2021-07-16 12:02 宋佳强 阅读(99) 评论(0) 推荐(0)
摘要:一、什么是垃圾 在程序运行当中,没有任何指针指向的对象,这个对象就是垃圾 哪些内存你需要回收? 什么时候回收? 如何回收? 二、为什么要GC 三、早期垃圾回收 四、java垃圾回收机制 内存的自动分配和垃圾自动回收,虽然不用咱们管,但是也要了解,不要过度依赖 五、大厂面试题 阅读全文
posted @ 2021-07-16 12:00 宋佳强 阅读(72) 评论(0) 推荐(0)
摘要:一、String的基本特性 String str="hello"; String str=new Stirng("hello"); String 被final 修饰,不可被继承,底层(1.8), char[] jdk9是byte[]+标识 放在字符串常量池(hash、数组+链表),在堆中1.8 二、 阅读全文
posted @ 2021-07-16 11:59 宋佳强 阅读(82) 评论(0) 推荐(0)
摘要:一、执行引擎概述 对 加载到 运行时数据区的 字节码文件 ,解释执行,编译成让操作系统认识的机器指令; 执行引擎会根据PC寄存器的值,进行执行 二、java代码编译和执行过程 ...... 2.1、什么是解释器? 答:当java 虚拟机器启动时,会根据预定的规范对字节码采用逐行解释的方式执行,将每条 阅读全文
posted @ 2021-07-08 16:08 宋佳强 阅读(78) 评论(0) 推荐(0)
摘要:一、直接内存概述 在java8之后,元空间使用的是本地内存。 直接内存是java堆外的,直接向系统申请的一块内存 访问直接内存的速度会优于访问java堆的速度 因此,出于性能的考虑,读写频繁的场合可能会考虑使用直接内存】 java的NIO库允许Java程序直接使用直接内存,用户数据缓冲区 IO by 阅读全文
posted @ 2021-07-08 16:07 宋佳强 阅读(220) 评论(0) 推荐(0)
摘要:一、对象的实例化 1.1、判断对象所属于的类是否被加载、链接、初始化 虚拟机需要一条new 指令后,首先去检测这个指令的参数能否在Metaspace的常量池中 定位到一个类的的符号引用,并且去检测这个符号引用代表的类是否被加载、链接、初始化(即判断类元信息是否存在)。 如果没有,则在双亲委派机制下, 阅读全文
posted @ 2021-07-08 16:06 宋佳强 阅读(81) 评论(0) 推荐(0)
摘要:一、栈、堆、方法区的交互关系 二、方法区的理解 jdk7是永久代的一个实现,jdk8是元空间的一个实现 和堆空间很类似,也是存储数据的地方,加载的类太多的话,容易报OOM:metaSpace 三、设置方法区的大小与OOM 3.1、调优 四、方法区的内部结构 4.1、方法区主要存什么? 类型信息、常量 阅读全文
posted @ 2021-07-08 16:04 宋佳强 阅读(211) 评论(0) 推荐(0)
摘要:一、堆的核心概述 JVM启动时,被创建,每一个JVM实例,都对应这一个堆空间,所有的线程共享 java堆 每个线程占一小块(TLAB),线程私有的,并发性更好一些 栈里存放的是 s1实例在 堆里的 地址 1.1、堆空间细分、内存细节 现代垃圾收集器大部分都基于分代收集理论设计的 1.1.1、jdk7 阅读全文
posted @ 2021-07-08 15:59 宋佳强 阅读(953) 评论(0) 推荐(0)
摘要:以最小插入次数构造回文串(难度:中等) 比如说如一个s="abcea",算法返回2,插入两个字符="abecba"或者"aebcbea"。如果输入"aba" 那么返回0,本身就是回文串,无需操作 思路分析 回文串一般都是字符串从中间向两端扩散,构造回文串也是类似的 dp数组定义 上节课说了:字符串问 阅读全文
posted @ 2021-07-05 23:16 宋佳强 阅读(192) 评论(0) 推荐(0)
摘要:编辑距离(LeetCode 72题 难度:困难) 编辑距离问题就是给我们两个字符串s1和s2,只能用三种操作,让我们把s1变成s2,求最少的操作数。需要明确的是,不管是把s1变成s2还是反过来,结果都是一样的,所以后文就以s1变成s2举例。 思路分析 dp数组的定义 dp[i,j]:就是s1[0.. 阅读全文
posted @ 2021-07-05 23:15 宋佳强 阅读(184) 评论(0) 推荐(0)
摘要:最长公共子序列(LeetCode 1143题 难度:中等) 第一步:dp数组定义(字符串一般是二维) dp[i][j]:表示S1[0,i]和S2[0,J]中最长的公共子序列的长度 S1="ace" S2="babcde" 比如dp[2][4]=2的含义,就是 S1="ac"和S2=“babc”,他们 阅读全文
posted @ 2021-07-05 23:14 宋佳强 阅读(88) 评论(0) 推荐(0)
摘要:最大子序和(LeetCode 53题 难度:简单) dp数组定义 dp[i]就是以nums[i]结尾的"最大子数组的和" dp[i]有两种选择: 要么与前面相邻的子数组连接,形成一个更大的子序和的数组 要么不与前面连接,自成一派,自己作为一个子数组 要么 自成一派,要么与前面的子数组合 并形成更大的 阅读全文
posted @ 2021-07-05 23:13 宋佳强 阅读(66) 评论(0) 推荐(0)
摘要:信封嵌套问题(LeetCode 354题 难度:困难) 思路:转二维 为 一维 调用 上篇文章 解答 先对宽度w进行升序排列,如果遇到w相同的情况,则按照高度H进行降序排列(因为宽度一样不可能套娃,比如5 和5 不能同时进 去), 然后把所有的H 作为一个数组,在这个数组上进行 计算(LIS) 官方 阅读全文
posted @ 2021-07-05 23:12 宋佳强 阅读(81) 评论(0) 推荐(0)
摘要:dp数组的遍历方向 我相信读者做动态规划问题时,肯定会对dp数组的遍历顺序有些头疼。我们拿二维dp数组来举例,有时候我们是正向遍历: //正向遍历 int[][] dp = new int[m][n]; for (int i = 0; i < m; i++) for (int j = 0; j <  阅读全文
posted @ 2021-07-05 23:10 宋佳强 阅读(75) 评论(0) 推荐(0)
摘要:动态规划详解 动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等。 既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值呗。 阅读全文
posted @ 2021-07-05 23:08 宋佳强 阅读(96) 评论(0) 推荐(0)
摘要:本地方法栈(线程私有的) java虚拟机栈 是管理java方法的调用 而 本地方法栈 是管理 本地方法(在本地方法库) 的调用 本地方法:主要指的是C语言C++语言写的 阅读全文
posted @ 2021-07-04 18:45 宋佳强 阅读(278) 评论(0) 推荐(0)
摘要:本地方法接口(Native Method Interface) 融合 C/C++(非java)语言,类似于 抽象类,但是方法体 是由 非java 语言实现的 native 关键字 对应的方法 ,调用 非 java 方法, 例如 线程调用本地线程,就需要C语言的帮助 右下角的区域 为什么要使用 本地方 阅读全文
posted @ 2021-07-04 18:44 宋佳强 阅读(67) 评论(0) 推荐(0)
摘要:一、虚拟机栈的概述(线程私有) 基于栈 的 设计的,跨平台 优点:跨平台、指令集小、编译器容易实现 缺点:性能下降、实现同样的功能 指令集多 1.1、堆管存储、、栈管运行 虚拟机栈的作用:主管java程序的运行,它保存方法的局部变量、部分结果,并参与方法的返回 和 调用 局部变量 vs 成员变量(或 阅读全文
posted @ 2021-07-04 18:43 宋佳强 阅读(359) 评论(0) 推荐(0)
摘要:一、PC寄存器的介绍(线程私有) 用来存储指向下一条指令的的地址,也是即将要执行的的指令代码,由执行引擎读取下一条执行 俗话说: 就是线程执行到哪里了(貌似 像 汇编里的 EIP),CPU需要不停的切换线程 在切换回来的时候,PC寄存器里就记录了 执行到哪里了 PC 既没有 GC 也没有 OOM 说 阅读全文
posted @ 2021-07-04 18:42 宋佳强 阅读(434) 评论(0) 推荐(0)
摘要:二分搜索 《算法小抄》作者 labuladong 一首诗 二分查找框架 int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = left + (right - left) 阅读全文
posted @ 2021-07-04 18:40 宋佳强 阅读(50) 评论(0) 推荐(0)
摘要:一、快、慢指针的常用算法 快、慢指针 一般会 初始化 链表头节点head ,前进时 快指针 fast 在前面,慢指针 slow 在后,可以巧妙解决一些 链表中的问题 1.判断链表中是否有环?(LeetCode 141题 难度:简单 ) 如果有环的话,快指针必定超越慢指针 一圈, 然后相交。 如果没有 阅读全文
posted @ 2021-07-04 18:38 宋佳强 阅读(93) 评论(0) 推荐(0)
摘要:广度优先搜索(BFS、队列) 思路:利用队列的“先进先出”的性质,将 根节点的 两个节点 放入队列, 然后 左节点出队列 ,并且将 左节点的 子节点 加入队列,完成之后 右节点出队列,将右节点的子节点 加入队列 ,以此类推 。 算法框架 // 计算从起点 start 到终点 target 的最近距离 阅读全文
posted @ 2021-07-04 18:37 宋佳强 阅读(374) 评论(0) 推荐(0)
摘要:回溯算法 回溯算法 实际上 就是暴力破解(穷举) 解决一个回溯问题:实际上就是解决一个 决策树 的遍历过程,考虑一下三点 1.路径:也就是要做出的选择 2.选择列表:也就是你 当前可以做的选择 3.结束条件:也就是到达决策树的 底层,做的操作,return 回溯代码框架 result = [] de 阅读全文
posted @ 2021-07-04 18:36 宋佳强 阅读(266) 评论(0) 推荐(0)
摘要:一、运行时数据区 红色区(2个):一个进程对应一份,多线程 共享的 一个进程(多线程)共享,方法区(堆外内存、Method Area)和堆空间(Heap) 灰色区(2个):一个线程对应一份,单线程 私有的 一个线程一份 程序技术器(PCS)、本地方法栈(NMS)、虚拟机栈(VMS) 95%的垃圾回收 阅读全文
posted @ 2021-07-04 18:04 宋佳强 阅读(71) 评论(0) 推荐(0)
摘要:一、内存图总体 二、类加载子系统 2.1 类加载子系统三个环节:加载,链接、初始化 补充 _反编译 指令 : javap -v xxx.class 将 .class 文件加载到内存的三个环节: 加载 链接 初始化 ClassLoader 只负责 加载 calss文件 ,至于能不能执行 ,由 执行引擎 阅读全文
posted @ 2021-07-04 18:03 宋佳强 阅读(96) 评论(0) 推荐(0)
摘要:动态规划(dp) 首先:动态规划问题一般的形式就是 求 最值 解 动态规划的核心问题 就是 穷举 然后:动态规划穷举有点特别,因为这类问题存在 “重叠子问题” ,如果暴力穷举,效率会低下,所以需要借助备忘录“ dp table”来优化穷举过程,避免不必要的计算 然后:动态规划 一般 会具备 “最优子 阅读全文
posted @ 2021-07-03 22:37 宋佳强 阅读(268) 评论(0) 推荐(0)