- 博客(199)
- 收藏
- 关注
原创 Java反射知识点整理
反射 概念 在运行期,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java的反射机制。 简单来说,反射就是在运行期提供的动态地获取类信息(属性、方法)或调用对象的方法的功能。 反射API Class 和 java.lang.reflect 一起对反射提供了支持,java.lang.reflect 类库主要包含了以下三个类: Field :可以使用 get() 和 set() 方法读取和修改 Fie
2020-12-27 12:48:38
346
原创 Redis学习之删除策略
前置知识 Redis会维护一块expires的空间,用于维护这些数据。expires中存储的是一种键值对的数据,key是对应的是数据的地址,value对应的是其到期的时间。 过期数据:Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态 XX :具有时效性的数据 -1 :永久有效的数据 -2 :已经过期的数据 或 被删除的数据 或 未定义的数据 Redis的数据过期后,并没有立马删除 数据删除策略 Reids中有三种数据删除策略 1.定时删除: 创建一个定时器
2020-11-05 11:58:38
338
原创 Redis学习之持久化
持久化简介 1.什么是持久化? 利用永久存储介质将数据进行保存,在特定的时间内将数据进行恢复的工作机制称为持久化。持久化的目的是防止意外的数据丢失,确保数据的安全性。 2.持久化保存什么? ①对数据状态进行保存—快照形式。,存储格式简单 ②对数据的操作过程进行保存—日志形式,存储格式复杂 Redis的持久化方式 1.RDB快照 (1)RDB概念: Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数
2020-11-01 20:25:42
279
原创 LeetCode日记 76.最小覆盖子串
class Solution { public String minWindow(String s, String t) { if (s == null || t == null || s.length() == 0 || t.length() == 0) return ""; int[] freq = new int[128];//要匹配的字符的频次 char[] cht = t.toCharArray(); char[].
2020-10-10 21:10:43
220
原创 LeetCodes日记438.找到字符串中所有字母异位词
题目来源:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/ class Solution { public List<Integer> findAnagrams(String s, String p) { char[] chS = s.toCharArray(); char[] chP = p.toCharArray(); int[] freq = new in.
2020-10-10 19:03:21
292
1
原创 LeetCode日记 75.颜色分类
颜色分类(来源:https://leetcode-cn.com/problems/sort-colors/) 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代.
2020-09-09 16:51:52
204
原创 LeetCode日记 3.无重复字符的最长子串
无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke".
2020-09-06 22:49:53
179
原创 LeetCode 日记 209. 长度最小的子数组
长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 class Solution { public int minSubArrayLen(int s, int[] nums) { if(nums.length == .
2020-09-06 20:58:39
166
原创 LeetCode日记 42.接雨水
接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 思路:单调栈,参考了题解:https://leetcode-cn.com/problems/trapping-rain-water/soluti.
2020-09-04 14:45:22
197
原创 剑指Offer 刷题 从1到n整数中1出现的次数
求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数) 来自:https://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6?tpId=13&&tqId=11184&
2020-08-05 20:38:44
268
原创 广联达笔试复盘7.29
1.杰夫非常喜欢种草,他自己有一片草地,为了方便起见,我们把这片草地看成一行从左到右,并且第 i 个位置的草的高度是hi。 杰夫在商店中购买了m瓶魔法药剂,每瓶魔法药剂可以让一株草长高x,杰夫希望每次都能有针对性的使用药剂,也就是让当前长得最矮的小草尽量高,现在杰夫想请你告诉他在使用了m瓶魔法药剂之后,最矮的小草在这种情况下最高能到多少。 输入描述 第一行三个整数n, m, x分别表示小草的个数,魔法药剂的个数以及每瓶魔法药剂让小草长高的高度。(1≤n,m,x≤1e5) 第二行n个整数分别表示第i株小草的
2020-07-30 09:35:11
2073
原创 LeetCode日记 239.滑动窗口的最大值
题目描述: 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 你能在线性时间复杂度内解决此题吗? 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [1 3
2020-07-29 18:35:11
184
原创 LeetCode 日记 62.不同路径
题目链接:https://leetcode-cn.com/problems/unique-paths/ 思路: class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int [m][n]; //dp[i][j]]表示到坐标(i,j)的路径有多少种 for(int i = 0;i < n ;i++){ dp[0][i] = 1; .
2020-07-29 17:55:30
200
原创 LeetCode日记 343.整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/integer-break 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2020-07-29 16:37:54
233
原创 LeetCode日记 64.最小路径
题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-path-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出
2020-07-29 15:16:54
198
原创 LeetCode日记 120.三角形最小路径和
题目描述: 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/triangl
2020-07-29 14:26:03
223
原创 LeetCode日记 300.最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-increasing-subsequence 著作权归领扣网络所有。商业转载
2020-07-27 22:50:32
203
原创 LeetCode日记 392.判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 示例 1: s = “abc”, t = “ahbgdc” 返回 true. 示例 2: s = “axc”, t = “ahbgdc
2020-07-27 21:17:57
162
原创 理解ThreadLocal
理解ThreadLocal 1.概览: ThreadLocal提供了线程的局部变量,每个线程都可以通过 set() 和 get() 来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离。简单的来说往 ThreadLocal 中填充的变量是属于当前线程的。设计的目的就是为了能够在当前线程中有属于自己的变量,并不是为了解决并发或者共享变量的问题 2.重要属性: // threadLocalHashCode 表示当前 ThreadLocal 的 hashCode,用于计算当前 T
2020-07-27 20:15:55
543
原创 LeetCode日记 41.缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/first-missing-positive 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路参考题解区: class Solution {
2020-07-26 16:08:08
169
原创 LeetCode日记 442.数组中重复的数据
给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-all-duplicates-in-an-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明
2020-07-26 14:54:00
236
原创 LeetCode日记 448.寻找所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-all-numbers
2020-07-26 10:45:30
161
原创 LeetCode日记 55.跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。 来源:力扣(Lee
2020-07-25 15:00:01
168
原创 LeetCode 日记287.寻找重复数
题目描述 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次 来源:力扣(LeetCode) 链接:https:/
2020-07-20 18:04:17
205
原创 Session、Cookie和Token
我们知道HTTP是一种无状态的协议,为了分辨链接是谁发起的,需自己去解决这个问题。而且一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。导致有些情况下即使是同一个网站每打开一个页面也都要登录一下。而Session和Cookie就是为解决这个问题而提出来的两个机制。 同样的Token也能解决这个问题,它们之间只是一个说法的差别,其实做的事情都是一样的。 Cookie 实际上是一小段的文本信息是访问某些网站后在本地存储的一些网站相关信息,下次访
2020-07-20 14:45:39
256
原创 LeetCode 日记 124.二叉树的最大路径和
给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 示例 1: 输入: [1,2,3] 1 / \ 2 3 输出: 6 示例 2: 输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 输出: 42 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/b
2020-07-19 17:32:57
210
原创 LeetCode 日记 146.汉明距离
汉明距离 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置 思路:将x,y按位异或得到res,将问题转化为求i的二进制位中1的个数count class Solution { public int.
2020-07-19 16:59:29
222
原创 LeetCode日记 122.买卖股票的最佳时机II
题目来源:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 思路参考题解: class Solution { public int maxProfit(int[] prices) { if (prices == null||prices.length <2){ return 0; } int sumProfit =
2020-07-18 22:20:37
184
原创 LeetCode 152.乘积最大子数组
题目来源:https://leetcode-cn.com/problems/maximum-product-subarray/ 思路:参考题解 解题方案 思路 标签:动态规划 遍历数组时计算当前最大值,不断更新 令imax为当前最大值,则当前最大值为 imax = max(imax * nums[i], nums[i]) 由于存在负数,那么会导致最大的变最小的,最小的变最大的。因此还需要维护当前最小值imin,imin = min(imin * nums[i], nums[i]) 当负数出现时则imax与
2020-07-17 16:54:11
263
原创 LeetCode日记 229.求众数II
题目来源:https://leetcode-cn.com/problems/majority-element/ class Solution { public List<Integer> majorityElement(int[] nums) { if(nums == null||nums.length == 0){ return new ArrayList(); } int res1 = nums[0];
2020-07-17 16:18:42
195
原创 LeetCode 日记 169.多数元素
题目来源:https://leetcode-cn.com/problems/majority-element/ 思路:摩尔投票法 class Solution { public int majorityElement(int[] nums) { int len = nums.length; if(len == 0){ return 0; } int res = nums[0];
2020-07-17 15:52:07
191
原创 LeetCode 日记 20.有效的括号
class Solution { private static Map<Character,Character> map = new HashMap<Character,Character>(); public Solution() { map.put('#','#'); map.put('(',')'); map.put('{','}'); map.put('[',']'); ..
2020-07-17 14:49:58
180
原创 CopyOnWriteArrayList源码解析学习总结
CopyOnWriteArrayList源码解析 1.概览: 1.1简介: CopyOnWriteArrayList和ArrayList的底层数据结构一样,也是个数组,采用volitale关键字修饰,一旦数组被更改,其他线程能立马被感知到。CopyOnWriteArrayList是一个写时复制的容器,对容器中的元素进行增删改时,不在当前容器上进行操作,而是复制一个新的的Object数组newElements,在新的容器内进行增删改。操作后再将原容器的引用指向新的容器 setArray(newElemen
2020-07-17 10:43:10
304
原创 LeetCode日记 198.打家劫舍
题目来源:https://leetcode-cn.com/problems/house-robber/ 思路: class Solution { public int rob(int[] nums) { if (nums == null||nums.length == 0){ return 0; } if(nums.length == 1){ return nums[0]; }
2020-07-16 16:35:16
162
原创 LeetCode 日记 234.回文链表
思路:先找到两个链表的中间节点,以此为界,分为两个链表,将后半部分链表反转。然后逐个比较两链表的值。不一样,就不接着比较了。比较完将链表恢复原状。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public b.
2020-07-16 15:46:00
177
原创 LeetCode日记 146.LRU缓存机制
class LRUCache { class Node{ int key; int val; Node pre; Node next; public Node(){} public Node(int key,int val){ this.key = key; this.val = val; } } private in.
2020-07-15 22:54:01
186
原创 HashMap源码解析
HashMap源码解析: 本文除了自己看了些源码,也看了很多博客,还有慕课网的专栏。本文的用途主要是为了自己复习。 1.概览: HashMap是基于哈希表的Map接口实现的,它存储的是内容是键值对<key,value>映射。此类不保证映射的顺序,假定哈希函数将元素适当的分布在各桶之间,可为基本操作(get和put)提供稳定的性能。 1.1底层结构 在JDK1.7时,HashMap是数组+链表的结构。在JDK1.8,HashMap是数组+链表+红黑树结构。当链表长度大于等于8时,会变成红黑树结构,
2020-07-15 16:11:01
229
原创 LeetCode日记 350.两个数组的交集II
题目来源:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 1.思路:先将两个数组排好序,用两个指针s1,s2分别同时遍历两个数组,如果两个指针指向的数相同,就一起后移并将结果存入list中。nums[s1]<nums[s2],那就s1后移;nums[s1]>nums[s2],就s2后移。最后遍历list,将结果集存放到数组中。 时间复杂度:O(m log m+n log n) 空间复杂度:O(min(m,n)) c.
2020-07-13 22:25:48
222
原创 LeetCode日记 15. 三数之和
题目来自:https://leetcode-cn.com/problems/3sum/ 参考题解区写出来的代码: package code; import java.util.ArrayList; import java.util.Arrays; import java.util.List; class solution { public List<List<Integer>> threeSum(int[] nums) { //数组为空,或者长度小于3.
2020-07-12 21:40:01
171
原创 LinkedList源码解析
LinkedList源码解析 1.概览: 1.1底层结构: LinkedList底层使用的双向链表结构,使用 Node 存储链表节点信息,除了结点的值以外,包括前驱结点和后继结点。每个链表都维护了一个头指针first和一个尾指针last。这意味着我们可以从头开始正向遍历,或者是从尾开始逆向遍历,并且可以针对头部和尾部进行相应的操作。 1.2 属性: public class LinkedList<E> extends AbstractSequentialList<
2020-07-12 17:45:59
200
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅