自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (3)
  • 收藏
  • 关注

原创 Java系列笔记第十章: Junit、反射、注解

本文目录第十章 Junit、反射、注解1. Junit1.1 Junit简介1.2 Junit的使用1.3 `@Before` 注解1.4 `@After` 注解2. 反射2.1 反射的概念2.2 获取Class对象的三种方式2.2.1 在源代码阶段2.2.2 在类对象阶段2.2.3 在运行时阶段2.3 获取Filed2.3.1 获取公有成员变量2.3.2 获取所有成员变量2.3 获取构造方法2.4 获取成员方法2.5 获取类名2.6 反射的案例3. 注解3.1 简介3.2 JDK 预定义的注解3.3 自定

2020-06-20 14:28:47 239

原创 Java系列笔记第九章:Stream流与方法引用

本文目录第九章:Stream流与方法引用1. Stream流1.1 Stream简介1.2 获取流1.3 流的常用方法1.3.1 forEach方法1.3.2 filter方法1.3.3 map方法1.3.4 count方法1.3.5 limit方法1.3.5 skip方法1.3.6 contract方法1.4 Stream注意事项2. 方法引用2.1 简介2.2 语义分析2.3 通过对象名引用成员方法2.4 通过类名引用静态成员方法2.5 通过super引用父类成员方法2.6 通过this引用本类的方法2

2020-06-18 23:39:01 245

原创 Java系列笔记第八章:函数式编程

本文目录第八章 函数式编程1. 函数式接口简介1.1 概念1.2 格式1.3 `@FunctionalInterface`注解1.4 lambda 的小例子2. 函数式编程2.1 lambda的延迟执行2.1.1 性能浪费的日志案例2.2 函数式接口的使用2.2.1作为方法的参数。2.2.2 作为方法的返回值3. 常用的函数式接口3.1 Supplier接口3.2 Consumer接口3.3 `Predicate`接口3.3.1 接口的使用3.3.2 接口中的三个默认方法3.4 Function接口第八章

2020-06-17 20:59:30 185

原创 Java系列笔记第七章:Java基础网络编程

本文目录第七章 : Java基础网络编程1. 网络编程入门1.1 软件结构1.2 网络通信协议1.3 网络编程三要素2. TCP通信程序2.1 概述2.2 TCP客户端代码实现2.3 TCP服务端代码实现3. 文件上传示例3.1 文件上传3.2 文件上传的阻塞问题4. 文件上传的多线程优化4.1 文件名称4.2 服务端多线程监听并接收客户端的套接字5. 模拟B/S结构的服务端第七章 : Java基础网络编程1. 网络编程入门1.1 软件结构C/S结构与B/S结构。1.2 网络通信协议专注于研究传

2020-06-16 21:19:33 216

原创 Java系列笔记第六章:文件与流

本文目录1. 文件File类1.1 File类静态成员变量1.2 File类的构造方法1.3 File类的常用构造方法1.3.1 File类用来获取的方法1.3.2 File类用来判断的方法1.3.3 创建删除功能1.3.4 目录遍历2. 递归2.1 递归概述2.2 递归遍历多级文件夹2.3 文件过滤器3. IO流3.1 字节输出流3.1.1 字节输出流简介3.1.2 文件字节输出流3.2 字节输入流3.2.1 通用方法3.2.2 FileInputStream 文件字节输入流3.3 字符输入流3.3.1

2020-06-15 21:25:01 346

原创 Java系列笔记第五章:异常、多线程、lambda、函数式编程

本文目录1. 异常1.1 异常的类型1.2 异常的产生过程1.3 异常的处理1.3.1 throw1.3.2 throws1.3.3 try-catch 异常捕获1.4 Throwable类1.5 finally代码块1.6 多个异常捕获的注意事项1.6.1 多个异常分别处理1.6.2 多个异常一次捕获多次处理1.6.3 多个异常一次捕获一次处理1.6.4 子类父类抛出异常1.7 自定义异常2. 多线程2.1 并发与并行2.2 多线程与多进程2.2.1 线程调度2.3 主线程2.4 创建线程的第一种方法 :

2020-06-15 21:23:00 319

原创 Java系列笔记第四章:高级数据结构进阶

本文目录1. List2. ArrayList3. LinkedList4. Vector5. HashSet5.1 使用5.2 遍历6. 哈希表原理6.1 哈希值6.2 哈希表6.3 Set存储不重复元素的原理6.4 Set存储自定义类型元素7. LinkedHashSet 插入有序集合8. 可变参数(变长参数表)9. Collections工具类9.1 shuffle9.2 addAll9.3 sort10. Map1. List继承自Collection有序带索引可以存储重复元素常用方法

2020-06-15 21:19:45 185

原创 Java系列笔记第三章:高级数据结构入门

本文目录1. Object类1.1 toString()方法1.2 equals()方法1.3 Objects类2. 日期类2.1 Date类的空构造函数2.2 Date类的带参数构造函数2.3 Date.getTime()方法3. DateFormat类4. Calendar类4.1 Calendar类的方法5. System类5.1 public static long currentTimeMillis()5.2 arraycopy()6. StringBuilder类6.1 构造函数6.2 常用函

2020-06-15 21:18:03 295

原创 Java系列笔记第二章:面向对象(OOP)

第二章 : 面向对象(OOP)成员变量和局部变量的区别作用域不同:局部变量只能在方法体内使用,成员变量能在整个类内使用。定义的位置不同:局部变量在方法体内定义,成员变量在类内定义。初始值不同:局部变量使用必须手动初始化,成员变量如果不手动初始化,会被自动初始化为默认值。内存中的位置不一样:局部变量在JVM栈中,成员变量在堆中。生命周期不同:局部变量随方法结束被回收,成员变量随对象被回收而结束。OOP三大特征:封装继承和多态1. 封装1.1 什么是封装两种封装性的体现:方法 : 对

2020-06-15 21:15:42 349

原创 Redis系列笔记第一篇----Redis基础

Redis学习系列第一篇笔记,学习了Redis五种数据类型及其基本操作,学习了Redis的key的通用命令及数据库的通用命令,还学习了如何用Java通过Jedis库来操作Redis数据库。

2020-06-03 21:40:55 486 2

原创 Java系列笔记第一章:入门数组

数组数组初始化动态初始化,指定长度。静态初始化,指定内容。// 动态初始化,int默认被初始化为0,String默认初始化为\u0000// boolean类型默认为false, 引用类型默认为nullint[] arr = new int[10];//静态初始化,长度会被初始化的元素个数推断出来int[] arr2 = new int[] {1,2,3,4,5};int[...

2020-04-15 10:12:27 225 2

原创 awk笔记

AWK用法:awk 选项 “命令语句” 文件名选项部分-F 定义字段分割符号,默认的分隔符是空格。"-F:" 这样就把分隔符改成了冒号。 效果和修改FS一样 -F ‘[]’ 使用多个分隔符"-F '[ ,]' 先使用空格分隔,再把结果用,分隔。 -v 定义变量并赋值-v num=1#这样就定义了一个变量num,在后面使用时,num可以直接用,不用加$符号。...

2020-04-13 17:32:39 190 1

原创 Anaconda 安装与jupyter配置

Anaconda 部署1 安装官网安装最新版Anaconda管理员权限启动 Anaconda Prompt更改为清华大学TUNA源conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://...

2018-05-10 20:12:03 13019 1

原创 垃圾回收笔记

方法区的垃圾回收:废弃常量的回收。没有任何对象引用常量池的常量,而且虚拟机中也没有其他地方引用这个常量,那么这个常量就可以被回收。不再使用的类型。不再使用的类的回收是非常苛刻的。要满足下面三个条件。该类的所有实例均被回收。Java堆中不存在任何该类的实例以及子类实例。加载该类加载器被回收。这个条件除非是经过精心设计的场景,比如可替换类加载器的场景,否则是很难实现的。该类对应的Class对象没有在任何地方被引用。无法在任何地方通过反射来访问类的方法。分代收集理论新生代。每次

2020-07-16 12:09:17 250

原创 力扣96. 不同的二叉搜索树(动态规划&&数学推导)

96. 不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1

2020-07-11 16:48:40 234

原创 剑指 Offer 59 - I. 滑动窗口的最大值(暴力循环 / 单调双端队列)

剑指 Offer 59 - I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6

2020-07-06 23:18:42 258

原创 剑指 Offer 36. 二叉搜索树与双向链表(DFS&&头指针)

剑指 Offer 36. 二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例: 4 / \ 2 5 / \ 1 3我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head

2020-07-05 18:53:50 156

原创 剑指 Offer 33. 二叉搜索树的后序遍历序列

剑指 Offer 33. 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000分析二叉搜

2020-07-05 11:39:26 165

原创 剑指 Offer 65. 不用加减乘除做加法(位运算)

剑指 Offer 65. 不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数分析联想一下二进制加法,只要两位同为1,就需要进位,如果不考虑进位,这个位置就是变成了0,显然和异或类似。所以两个数字的异或,就是不计算进位的加法。然后考虑进位,只有两个都是1的才需要进位,所以想到了与运算,两个位置

2020-07-05 10:27:57 188

原创 力扣148. 排序链表(归并排序)

力扣148. 排序链表在 O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5分析题目要求时间复杂度是O(nlogn),就需要二分,既然是二分,就确定了归并排序。空间复杂度要求O(1),就不能使用递归,并且不能创建额外的空间来保存临时数组。

2020-07-01 23:00:25 655

原创 Redis系列笔记第四篇----Redis企业级解决方案

Redis企业级解决方案本文目录Redis企业级解决方案1. 缓存预热1.1 问题排查1.2 解决方案1.3 总结2. 缓存雪崩2.1 问题排查2.2 解决方案12.3 解决方案22.4 总结3. 缓存击穿3.1 问题描述3.2 问题排查3.3 分析3.4 解决方案3.5 总结4. 缓存穿透4.1 现象4.2 问题排查4.3 分析4.4 解决方案4.5 总结5. 性能监控指标6. 性能监控工具1. 缓存预热服务器启动后迅速宕机。1.1 问题排查请求数量较高。主从之间数据吞吐量较大,数据同步操作

2020-07-01 20:15:33 357

原创 Redis系列笔记第三篇----Redis集群

Redis 集群本文目录Redis 集群1. 主从复制1.1 主从复制简介1.2 高可用集群方案1.3 主从复制工作流程1.3.1 建立连接1.3.2 数据同步1.3.3 命令传播阶段1.4 心跳机制1.5 主从复制的常见问题2. 哨兵模式2.1 哨兵简介2.2 启用哨兵2.3 哨兵工作原理2.3.1 监控阶段2.3.2 通知阶段2.3.3 故障转移阶段3. 集群3.1 集群结构设计3.2 集群搭建3.3 设置与获取数据3.4 主从下线和主从切换3.4.1 slave下线3.4.2 master下线1.

2020-07-01 16:12:39 1781

原创 力扣718. 最长重复子数组(暴力循环 / 动态规划)

力扣718. 最长重复子数组给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释: 长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100分析注意: 子数组是连续的,子序列可以不连续。暴力法对于a中的每个数字,

2020-07-01 09:53:53 465

原创 Redis系列笔记第二篇----Redis高级

Redis笔记第二篇—Redis高级Redis学习系列第二篇笔记,将学习Redis持久化、Redis事务、Redis删除策略、Redis配置文件以及高级数据类型。1. Linux环境的Redis安装1.1 从Redis源码编译安装$tar -xvf redis-VERSION.tar.gz$cd redis-VERSION$make install1.2 从指定端口号启动#服务端从6380端口启动$redis-server --port 6380#客户端从6380端口连接$re

2020-06-30 16:47:14 462

原创 剑指 Offer 47. 礼物的最大价值(动态规划 / DFS)

剑指 Offer 47. 礼物的最大价值在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物提示:0 < grid.length <

2020-06-28 10:28:52 417

原创 剑指 Offer 42. 连续子数组的最大和(动态规划)

剑指 Offer 42. 连续子数组的最大和输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100注意

2020-06-27 17:23:00 557 2

原创 剑指 Offer 30. 包含min函数的栈(辅助栈&&对象的相等判断)

剑指 Offer 30. 包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top()

2020-06-27 09:23:09 147

原创 剑指 Offer 27. 二叉树的镜像(递归)

剑指 Offer 27. 二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000分析镜像二叉树,需要递归地将每个

2020-06-27 08:45:55 296

原创 剑指 Offer 12. 矩阵中的路径(回溯&&DFS)

剑指 Offer 12. 矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符

2020-06-26 19:25:53 131

原创 剑指 Offer 07. 重建二叉树(递归&&二叉树遍历的性质)

剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <= 节点个数 <= 5000分析先序遍历是先根,再左,再右,中序遍历是先左,再中,再右。先序根

2020-06-26 19:14:37 126

原创 力扣295. 数据流的中位数(排序/大顶堆+小顶堆求中位数)

力扣295. 数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5addNum

2020-06-23 20:51:28 459

原创 面试题 16.18. 模式匹配(解方程)

力扣面试题 16.18. 模式匹配分析主方法里就是遍历数字解方程,x*countA+y*countB = valueLen找到可行解后就可以根据解来判断是否能匹配。当然,在解方程之前先把特殊情况解决掉,比如字符串为空、a或者b代表空字符串的情况。排除掉这几种特殊情况后,解方程里a和b的数量肯定是都超过1了。思路全在注释里了。代码class Solution { public boolean patternMatching(String pattern, String value) {

2020-06-22 10:42:37 530

原创 力扣3. 无重复字符的最长子串(滑动窗口+双指针)

3. 无重复字符的最长子串题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是

2020-06-21 23:20:57 288

原创 力扣5. 最长回文子串(标准动态规划)

力扣5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"分析1. 暴力法。时间复杂度O(n³),超时。2. 动态规划。既然是回文字符串,那么如果内层的字母是回文的,并且外层的也是回文,整个字符串就是回文字符串。我们就得到了这么一个关系:从短到长,第i个字母到第j个字母的状态dp[i][j

2020-06-21 18:07:35 209

原创 力扣124. 二叉树中的最大路径和(递归+类似DP)

力扣124. 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: 42分析这道题应该从叶子节点往上看,既然

2020-06-21 17:50:41 238

原创 力扣 572 另一个树的子树(双递归)

#572 另一个树的子树给定两个非空二叉树 s和 t,检验 s中是否包含和t具有相同结构和节点值的子树。s的一个子树包括 s的一个节点和这个节点的所有子孙。s也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相...

2020-05-07 10:38:05 199

原创 力扣 98 验证二叉搜索树(树的递归中序遍历)

#98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ ...

2020-05-05 16:04:08 240

原创 力扣 面试题 08.12. 八皇后(回溯&&剪枝&&深度搜索)

设计一种算法,打印 N皇后在 N × N棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。注意:本题相对原题做了扩展示例: 输入:4 输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]] 解释: 4 皇后问题存在如下两个不同的解法...

2020-04-30 20:57:59 384

原创 力扣 #36. 有效的数独(状态记录)

#36 有效的数独判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 '.'表示。示例 1:输入:[ ["5","3",".","....

2020-04-30 19:47:33 180

原创 力扣 #46. 全排列(回溯法&&剪枝)

#46. 全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路:一般输出所有结果的题目,都是用回溯算法进行深度搜索。回溯算法一般是如下过程:def backtrack(路径, 选择列表): ...

2020-04-30 15:56:57 269

CheatEngine6.7中文版

CheatEngine6.7是一款修改内存数据的软件,功能极其强大。

2018-01-03

空空如也

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

TA关注的人

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