- 博客(275)
- 资源 (1)
- 收藏
- 关注
原创 java学习与总结:索引
文章目录索引的优缺点索引的底层数据结构索引类型索引存储结构【不同存储引擎不同】联合索引和覆盖索引创建索引的注意事项索引失效的情况索引的优缺点优点:能加快查找速度。【前提是数据量大,否则没啥用其实】缺点:需要维护,牺牲空间。索引的底层数据结构hash表【特点:无序】优点: 单值查找快。缺点:哈希冲突,并且不支持范围查找。B+树【特点:有序】为什么不是平衡树、红黑树、B树,而是B+树呢?- 简单来说,前面的几种树都有缺点。- 平衡树:极限情况会退化成链表,就没有意义了。- 红黑
2022-03-27 17:25:55
1099
原创 java学习与总结:MySQL和数据库基础知识
文章目录MySQLMySQL数据库索引数据结构B树和B+树的区别MySQL一条数据是怎么保存到数据库的WAL : WRITE AHEAD LOGbinlog 和 redo log 流程MySQL增删改查流程以及三大日志的联系事物提交流程-redo 刷盘数据库基础知识数据库系统和数据库管理系统的关系码、元组、候选码、主码、外码的关系三大范式存储过程drop 、 truncate 、 delete的区别数据库设计步骤MySQLMySQL数据库索引数据结构B树和B+树的区别B+树的结构独特之处:
2022-03-27 15:48:36
6749
原创 java学习与总结:计算机网络
文章目录计算机网络体系结构osi七层结构四层结构五层网络结构以及对应的协议TCP和UDP协议tcp三次握手与四次挥手、11个状态socket的结构用户态、内核态http和https的区别长连接和短连接的区别http中常见的状态码http的缺点和ssl(security socket layer)的优点ssl加密方式ssl ca证书验证http的交互方法post和get的区别DNS 域名查找流程传输流程计算机网络体系结构osi七层结构四层结构五层网络结构以及对应的协议TCP和UDP协议
2022-03-26 21:59:06
9662
原创 java学习与总结:线程池
文章目录7个参数最重要的三个参数其他常见参数创建方式Executor【阿里巴巴开发手册强制不允许次方法创建线程】ThreadPoolExecutor【阿里巴巴建议创建线程方法】饱和策略 handler线程池excute方法Runnable接口和Callable接口的区别execute方法和submit方法的区别7个参数最重要的三个参数maximumPoolSize 最大线程数corePoolSize 核心线程数workQueue 工作队列其他常见参数keepAliveTime 非核心线
2022-03-26 21:06:09
316
原创 java学习与总结:反射及动态代理
文章目录反射、反射流程、应用场景静态代理||动态代理类加载子系统类加载机制全盘负责缓存机制双亲委派机制打破双亲委派机制---tomcat容器反射、反射流程、应用场景获取Class的方法Class.forname()Object.getClass()String.Class反射的应用场景:1.框架-ioc、aop、注解2.JDBC连接数据库: 加载数据库的驱动程序静态代理||动态代理动态代理的实现方式:1.JDK重写 InvocationHandler接口中的invoke()
2022-03-26 20:42:22
510
原创 java学习与总结:操作系统
文章目录cpu的三级缓存逻辑空间跟物理空间TLB 快表内核态和用户态的变化进程调度策略FIFO短作业优先最高相应比优先时间切片多级队列 ![在这里插入图片描述](https://img-blog.csdnimg.cn/078ab0d8bc914b57b4d15a5339a6c85b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hlbnlzb24=,size_19,color_FFFFFF,t_
2022-03-26 18:14:14
740
原创 java学习与总结:多线程与并发
文章目录进程与线程创建线程的方式多线程通信方式线程开多少数量合适?线程的安全活跃态竞态条件终止线程的四种方式Java线程的生命周期CASi++和++i是否安全?如何实现安全自增AtomicInteger类Synchronized和lock、ReentrantLock的区别锁升级DCLcountdownlatch的用法Synchronize底层AQS锁同步器阻塞队列ArrayBlockQueue和LinkedBlockQueue的区别Volatile原理ThreadLocal进程与线程代码程序进程
2022-03-26 17:57:00
311
原创 java学习与总结:集合类
文章目录集合类常见类ArrayList特点:核心源码解读HashMap结构HashMap的优化ConCurrentHashMapJDK1.7JDK1.8CopyOnWriteArrayListCopyOnWriteArrayList和CopyOnWriteSet的区别HashTable集合类常见类ArrayList特点:快速随机访问能被克隆,Cloneable支持序列化,Java.IO.Serializable核心源码解读默认容量大小 10最小扩容容量 :minsize=Math.
2022-03-26 17:05:56
6549
原创 java学习与总结:JVM
文章目录类加载过程运行时数据区执行引擎过程没有逃逸的时候,进行优化虚拟机栈本地方法栈PC计数器堆空间结构垃圾收集器serial/serial oldParNew /Serial OldParallel Scavenge/Parallel OldCMSG1类加载过程类变量值在这里被指派,静态代码块在这里执行。将字节码文件加载到以下即将介绍的运行时数据区里的方法区[或叫永久代]中运行时数据区方法区【永久代】JDK1.8之后被元数据替换,并且元数据不在存在于JVM中,而是存在直接内存中,但是像一
2022-03-26 16:08:55
908
原创 leetcode 3. 无重复字符的最长子串
难度:中等频次:319题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。解题思路:滑动窗口代码class Solution { public int lengthOfLongestSubstring(String s) { Map<Character,Integer> hashmap=new HashMap<Character,Integer>(); int maxlen=0; int le
2022-03-06 21:16:31
337
原创 leetcode 40. 组合总和 II
难度: 中等频次:19题目:给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合。解题思路:回溯注意:注意这里是不能出现顺序不一样,但是内容一样的结果还是用for,然后start+1 这是全遍历结果上面的结果还会出现重复的,所以需要减枝减枝: 先排序,然后如果在同一个节点下,如果两个节点的大
2022-03-04 22:18:27
335
原创 leetcode 39. 组合总和
难度:中等频次:49给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。解题思路:回溯 (DFS+剪枝)注意:用for+star
2022-03-04 21:24:33
2456
原创 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
难度:中等频次:46题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?解题思路:logn +有序 ==二分查找代码class Solution { public int[] searchRange(int[] nums, int target) { int
2022-03-01 23:40:38
2357
原创 leetcode 122. 买卖股票的最佳时机 II
难度:中等频次:35题目:给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润 。解题方法:动态规划、暴力解法[两遍循环]动态规划用于多阶段决策问题;动态规划问题的问法:只问最优解,不问具体解;掌握无后效性解决动态规划问题:把约束条件设置成为状态。解题思路:1.题目只问最大利润,没有问这几天具体哪一天
2022-03-01 23:11:26
1693
原创 leetcode 518. 零钱兑换 II
难度:中等频次:28题目:给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。解题思路:完全背包的组合问题注意:背包问题的解析查看背包类型0-1 背包 : 背包里的元素只能用一次先背包循环,后target循环(倒序),且target>num[i]完全背包 : 背包里的
2022-03-01 22:07:53
241
原创 322. 零钱兑换
难度:中等频次:52题目:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。解题思路:完全背包的最小值问题注意:背包问题的解析查看背包类型0-1 背包 : 背包里的元素只能用一次先背包循环,后target循环(倒序),且target>num[i]完全背包 : 背包里的元素能够重复利用
2022-03-01 21:58:52
238
原创 leetcode 470. 用 Rand7() 实现 Rand10()
难度:中等频次:55题目:给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数。你只能调用 rand7() 且不能调用其他方法。请不要使用系统的 Math.random() 方法。每个测试用例将有一个内部参数 n,即你实现的函数 rand10() 在测试时将被调用的次数。请注意,这不是传递给 rand10() 的参数。解题思路:数学规律规律1:randX-1=【0,X-1】==arandY=【1,Y】
2022-03-01 20:08:28
1683
原创 leetcode 1047. 删除字符串中的所有相邻重复项
难度:中等频次:17题目:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。解题思路:用栈辅助,更栈顶的数据比较,不相等就入栈,相等就出栈代码:class Solution { public String removeDuplicates(String s) { Stack<Character> stack=ne
2022-02-27 22:51:45
259
原创 多写写 leetcode 43. 字符串相乘
难度:中等频次:55题目:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。解题思路: 拆出来的乘法最后的结果是string,最后用string+string得出string注意:前提先掌握字符串的相加string下的==和equals的区别得反转代码class Solution { public String mult
2022-02-27 22:09:43
184
原创 多看看把,条件太多了--leetcode 93. 复原 IP 地址
难度:中等频次:62题目:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不
2022-02-26 23:11:22
1674
原创 leetcode 22. 括号生成
难度:中等频次:62题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。解题思路:DFSDFS注意构造一棵树,只要遍历就行了递归结束条件是 left right(每次遍历一个节点就为0) 的值为0需要剪枝,条件是需要left>right[因为这道题的前提就是,一个字符串里”(“必须要比“)”多,才有机会合成,不然你剩下一堆的”("没地方用]每次遍历都需要判断条件,只有left和right>0才有必要进行相应的遍历代码c
2022-02-26 21:36:27
171
原创 leetcode 155. 最小栈
难度:简单频次:59题目:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。解题思路: 用辅助栈||只用一个栈用辅助栈注意:因为提示里的pop等操作都是在非空栈上调用,所以不用考虑太多初始化
2022-02-26 21:08:46
212
原创 leetcode 232. 用栈实现队列
难度:简单频次:94题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop
2022-02-26 20:29:20
184
原创 剑指 Offer 36. 二叉搜索树与双向链表
难度:中等频次:37题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地完成转换操作。当转化完成以
2022-02-26 01:24:25
57
原创 leetcode 98. 验证二叉搜索树
难度:中等频次:98题目:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解题思路:中序遍历递归法注意:搜索二叉树的中序遍历是一个递增数组只要每次中间的时候判断是否代码:/** * Definition for a binary tree node. * public class TreeNode {
2022-02-26 01:02:47
232
原创 剑指 Offer 54. 二叉搜索树的第k大节点
难度:简单频次:35题目:给定一棵二叉搜索树,请找出其中第 k 大的节点的值。解题思路:递归法 DFS注意:最大的亮点:就是中序遍历后是一个递增序列做一遍中序遍历,然后再get一下倒数第k个即可代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(
2022-02-26 00:33:42
184
原创 leetcode 226. 翻转二叉树
难度:简单频次:47题目:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。解题思路:1.DFS遍历的时候反转root的左右节点即可2.后者用队列模拟栈模拟递归代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *
2022-02-26 00:04:42
157
原创 leetcode 78. 子集
难度:中等频次:53题目:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。解题思路: 递归+回溯递归解法注意:res添加temp在结束条件之前通过层数判断结束条件从左到有迭代temp添加元素搜索下一层回溯递归回溯代码class Solution { List<List<Integer>> res=new ArrayList<List
2022-02-25 23:59:54
75
原创 leetcode 113. 路径总和 II
难度:中等频次:60题目:给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。解题思路:DFS 递归注意:递归结束条件添加到res的条件Deque 的用法 offerLast pollLast一棵树的左右节点遍历完要把root从队列里poll出来代码/** * Definition for a binary tree node. * public class
2022-02-25 23:06:43
65
原创 leetcode 129. 求根节点到叶节点数字之和
难度:中等频次:64题目:给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。解题思路:DFS迭代注意:DFS迭代的时候,终止条件是root==null,所以起始i每一条路径都有两个相等的和被放到res里,最后和得除以2注意叶子节点最终的结果su
2022-02-25 01:47:11
218
原创 leetcode 62. 不同路径
难度:中等频次:43题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?解题思路:DFS迭代(超时…)||动态规划注意:我自己写的版本,创建多一行,dp[m][n]代表的是m x n一共的不同路径和起始状态dp[1][1]状态转移方程分为3部分- 第一部分 上边界, dp[i][j]=dp[i][j-1];-
2022-02-25 01:28:53
74
原创 leetcode 112. 路径总和
难度:简单频次:52题目:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。解题思路:DFS递归||普通递归DFS递归代码/** * Definition for a binary tree node. * public class TreeNode { * int
2022-02-25 00:31:55
158
原创 leetcode 31. 下一个排列
难度:中等频次:题目:整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排
2022-02-24 23:54:36
94
原创 leetcode 151. 翻转字符串里的单词
难度:中等频次:69题目:给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。解题思路:一次遍历(倒序+标记位置+截取)注意遍历的时候分成两种形式,第一种是遍历跳过空格,直到非空格的位置,一种是遍历非空格,
2022-02-24 22:26:45
89
原创 leetcode 169. 多数元素
难度:简单频次:48给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。解题思路:摩尔投票法注意这一题主要是思路你把每一个数字的意义当成一个国家,然后数字的多少相当于兵力的多少。[1,2,7,4,5,6,7,7,7,7,5,4,7,7,7]假设上面的例子是多国混战,那么如果规则是1打1(数量),同归于尽 ,那么众数代表的国家一定会赢。因为最坏的情况就是其他的国家联合在一起跟
2022-02-23 23:47:43
369
原创 leetcode 2. 两数相加
难度:中等频次:72给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。注意:不要受逆序影响,他本来就是为了你方便做,给你逆序的。解题思路:遍历【按加法运算来即可】注意 //先算个位,个位值不影响进位 value=(add+t1+t2)%10; //而进位会影响进位
2022-02-23 23:21:25
86
原创 leetcode 8. 字符串转换整数 (atoi)
难度:中等频次:75题目:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数
2022-02-23 22:39:23
178
原创 leetcode 56. 合并区间
难度:中等频次:83题目以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间解题思路: 用排序辅助判断前后元素是否有交集即可注意:排序用了Arrays类自带的静态函数sort,并且借助了lambda表达式(v1,v2)-> v1[0]-v2[0])用k计数新的res里一共有多少个元素迭代用 for(int[] interv
2022-02-23 20:33:12
268
原创 leetcode 101. 对称二叉树
难度:简单频次:53题目:给你一个二叉树的根节点 root , 检查它是否轴对称。解题思路:DFS递归注意:这里root不允许为空,树节点为1,1000之间这里的DFS是返回boolean值,返回为boolean值的递归都是在return上面做的而且每个DFS里都需要做两个递归左节点的左节点和右节点的右节点----对称节点左节点的右节点和右节点的左节点----对称节点递归的结束条件有3个左右节点都为null,对称左右节点有1个为null,不对称左右节点存在且不相等
2022-02-22 23:39:05
268
原创 leetcode 543. 二叉树的直径
难度:简单频次:57题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。解题思路:递归方法注意:类似使用递归的有- leetcode 110. 平衡二叉树- leetcode 104. 二叉树的最大深度其实本质就是求某一个节点左右子树深度和【left+right】的最大值在递归循环体里添加一个res,负责添加每一个节点的左右子树深度和,最后返回res最大值即可。代码/** * Definit
2022-02-22 23:13:12
213
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人