- 博客(334)
- 收藏
- 关注
原创 main“java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0
main"java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0的错误。3.将winutils/hadoop/bin里的hadoop.dll 这个文件放到C: windows\System32。将 winutils.exe 放置在 C:\hadoop\bin 目录下。在 Path 环境变量中添加 C:\hadoop\bin。HADOOP_HOME:指向 C:\hadoop。
2025-02-22 15:34:22
137
原创 币安面经(4)
区块链基础共识机制:你能描述常见的区块链共识机制(例如工作量证明和权益证明)吗?它们各自的优点和缺点是什么?是哈希表的核心组件。)中的一个索引(
2025-01-20 10:58:29
818
原创 币安面经(3)
有什么难度,是什么架构,如果中间有什么是面试官熟的会问很深的细节,我面的这个面试官估计是做cosmos的,问了cosmos提案的作用和hub的作用。2.btc生态熟吗?ordinals有了解吗?brc20基于什么判断账户余额,要转一笔铭文需要怎么操作。sol的铭文和brc20有什么差别。要用单调栈,这部分我也不太会。大概模拟了一下这个答案。3.寿司代码,经典反转链表。1.在别的交易所写的业务。在牛客上找了题目描述。
2025-01-17 11:24:43
242
原创 币安面经(2)
线程池核心参数 线程池怎么关闭超过keepalived 的线程?选择分区数量和消费者数量时,需要根据业务需求和吞吐量合理设计,以实现负载均衡和高效消费。你们分库分表怎么做的?MySQL索引,聚集索引和非聚集索引?具体讲讲叶子节点存储的具体区别?一个分区只能被一个消费者线程消费,而一个消费者可以消费多个分区。使用负载均衡器(如 Nginx)分配请求,避免某一节点过载。异步任务处理,尤其是复杂路由规则的任务分发。rocketmq和kafka的选型 区别?需要快速响应的实时系统(如订单处理)。
2025-01-16 16:17:48
801
原创 币安面经(1)
高并发、数据量大一般我们认为,单表行数超过 500 万行或者单表容量超过 2GB之后,才需要考虑做分库分表了,小于这个数据量,遇到性能问题先建议大家通过其他优化来解决。横向拆分(水平拆分)和纵向拆分(垂直拆分)。假如我们有一张表,如果把这张表中某一条记录的多个字段,拆分到多张表中,这种就是纵向拆分。那如果把一张表中的不同的记录分别放到不同的表中,这种就是横向拆分。分表算法全局ID分库分表框架是应文件系统所需而出的一种的变型树。一棵的和m阶的的差异在于:1) 有n棵子树的节点中含有n个关键字(即每个关键字对应
2025-01-16 12:17:37
906
原创 LeetCode hot100-100
这题要领悟这个思想,所以起始是从1到n-1找的。因为有n个数,不重复的数就是1到n-1,重复了一个数之后才有的n个数。后面代码中的各种等号,right=mid,这跟传统二分还是不太一样,就是要理解上面的解法才知道为什么这样写。
2025-01-11 22:01:56
262
原创 LeetCode hot100-99
最后一步reverse是因为。第一步找的就是后面比前面大的数。所以找到i的位置后,i后面的位置的数都是前面比后面大,所以reverse一下的数才会更小。这题的做法,背一下吧。
2025-01-11 21:29:46
165
原创 LeetCode hot100-96
因为异或运算的特性,将所有数字异或处理之后得到的就是那个只出现过一次的数字。对于这道题,可使用异或运算 ⊕。异或运算有以下三个性质。这题的解答挺有意思的。
2025-01-11 19:19:07
296
原创 LeetCode hot100-95
若当前字符不相等,则dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1,分别对应替换、删除、插入操作。dp[i][j]表示将word1的前i个字符转换为word2的前j个字符所需的最小操作数。当i = 0时,将空字符串转换为word2的前j个字符,需要j次插入操作。当j = 0时,将word1的前i个字符转换为空字符串,需要i次删除操作。若当前字符相等,则dp[i][j] = dp[i-1][j-1]。
2025-01-10 00:53:52
214
原创 LeetCode hot100-93
子串的结束位置j是i和len算出来的。如果子串长度大于 2(j - i > 1),还需要判断 dp[i+1][j-1] 是否为 true。内部子串 s[i+1…j-1] 也是回文:dp[i+1][j-1] = true。如果子串长度为 2(j - i == 1),只需判断 s[i] == s[j]。dp[i][j] = false 表示子串 s[i…dp[i][j] = true 表示子串 s[i…如果子串长度为 1(j - i == 0),它本身是回文。两端字符相等:s[i] == s[j]
2024-12-22 19:34:16
332
原创 LeetCode hot100-92
dp[i][j] 表示从左上角出发到 (i,j) 位置的最小路径和。显然,dp[0][0]=grid[0][0]。当 i>0 且 j>0 时,dp[i][j]=min(dp[i−1][j],dp[i][j−1])+grid[i][j]。当 i>0 且 j=0 时,dp[i][0]=dp[i−1][0]+grid[i][0]。当 i=0 且 j>0 时,dp[0][j]=dp[0][j−1]+grid[0][j]。最后得到 dp[m−1][n−1] 的值即为从网格左上角到网格右下角的最小路径和。
2024-12-20 18:10:02
376
原创 LeetCode hot100-91
构建一个二维数组 dp,其中 dp[i][j] 表示从起点到位置 (i, j) 的路径总数。第一行和第一列的路径数都为 1(机器人只能一直向右或向下)。起点 dp[0][0] = 1,因为机器人只能从起点开始。返回 dp[m-1][n-1],即右下角位置的路径数。
2024-12-20 17:24:27
284
原创 LeetCode hot100-90
动态规划的分析看着太复杂了,这题最经典的应该是用栈来做吧。感觉这题就是个模版,需要背一下那种。如果栈不为空,计算当前有效括号的长度(当前索引 - 栈顶索引),并更新最大长度。-1 是一个“哨兵”值,用来帮助计算从字符串开始位置的有效括号长度。如果栈为空,说明当前括号无法匹配,将当前索引入栈,作为新的“起点”。通过索引,我们可以计算出当前有效括号的长度。如果当前字符是 ‘(’,将其索引入栈。栈中的元素表示未匹配的括号的索引。
2024-12-20 16:33:56
265
原创 LeetCode hot100-89
对每个数 num,从后往前更新 dp 数组:如果 dp[j - num] 为 true,则 dp[j] 也可以为 true,表示可以选择该 num 来组成和为 j 的子集。如果 S 是偶数,目标是找到一个子集,使得其和为 S / 2。也就是说,问题转化为 判断是否存在一个子集,其和为 S / 2。如果 S 是奇数,显然无法将数组分割成两个和相等的子集,因为两个相等的子集的和必然是偶数。假设数组 nums 的总和为 S。初始化 dp[0] = true,表示和为 0 的子集是存在的(即空子集)。
2024-12-19 21:02:56
241
原创 LeetCode hot100-88
如果遇到负数,max_so_far 会和 min_so_far 交换,因为负数与最小值相乘可能变成最大值,min_so_far 会乘以负数变得更加负。如果遇到正数,max_so_far 会乘以该数来增大乘积,min_so_far 会乘以该数来减少乘积。如果遇到零,乘积会变成零,此时我们需要重置 max_so_far 和 min_so_far。min_so_far:当前遍历到的位置的最小乘积(因为负数乘以负数可能变成正数)。max_so_far:当前遍历到的位置的最大乘积。
2024-12-19 20:09:03
255
原创 LeetCode hot100-86
我觉得这题比较难的思考的点是不知道字符串怎么和dp方程联系起来,就是用了boolean来找每一位的状态。定义 dp[i] 为 s[0:i] 是否可以由字典中的单词组成。即,dp[i] 表示从字符串的起始位置到第 i 个字符的子字符串是否可以拆分成字典中的单词。如果 dp[j] 是 true 且 s[j:i] 是字典中的一个单词,那么 dp[i] 就是 true。最终的答案是 dp[s.length()],如果它是 true,说明字符串 s 可以被拆分,否则不能。其中 j 是从 0 到 i 的所有位置。
2024-12-18 20:57:44
297
原创 LeetCode hot100-85
这题不用Integer.MAX_VALUE我看了下给的第二个案例就溢出了,coins =[2],amount =3。这题没有用Integer.MAX_VALUE,用了amount+1来表示一个不可达的数,因为凑硬币就算是凑一块一块的也最多只需要amount个,amount+1就可以用来表示凑不出来的情况。也可以不用Integer.MAX_VALUE,用一个Integer.MAX_VALUE/2,测试案例正常情况下是到不了这么大的,我试了下能过。
2024-12-18 20:28:12
429
原创 LeetCode hot100-84
dp[i] = min(dp[i], dp[i - j^2] + 1),其中 j 是从 1 到 sqrt(i) 的整数,j^2 是完全平方数。这里的意义是,如果你从 i - j^2 得到一个解,那么 i 就可以通过加上一个平方数 j^2 来得到。+1 表示使用了一个平方数。定义 dp[i] 为构成整数 i 的完全平方数的最少数量。dp[0] = 0,因为 0 需要 0 个完全平方数。dp[n] 即为所求的最小数量。
2024-12-18 19:14:16
219
原创 LeetCode hot100-83
偷窃第 k 间房屋,那么就不能偷窃第 k−1 间房屋,偷窃总金额为前 k−2 间房屋的最高总金额与第 k 间房屋的金额之和。如果房屋数量大于两间,应该如何计算能够偷窃到的最高总金额呢?在两个选项中选择偷窃总金额较大的选项,该选项对应的偷窃总金额即为前 k 间房屋能偷窃到的最高总金额。两种解法也可以同时掌握,特别是第二种,实现状态转移方程的时候还是得思考一下为什么要这样写。不偷窃第 k 间房屋,偷窃总金额为前 k−1 间房屋的最高总金额。只有两间房屋,选择其中金额较高的房屋进行偷窃。
2024-12-17 20:19:09
182
原创 LeetCode hot100-82
其他元素等于上一行中相邻两个元素之和,即第 i 行的第 j 个元素为:triangle[i-1][j-1] + triangle[i-1][j]。从第三行开始,每一行的第一个和最后一个元素都是 1。就看出这个规则就能开始写代码了。第二行是 [1, 1]。
2024-12-17 19:51:48
267
原创 LeetCode hot100-81
对于每个阶梯 i,你可以从第 i-1 阶跳 1 阶,或者从第 i-2 阶跳 2 阶。因此,dp[i] = dp[i-1] + dp[i-2]。这意味着到达第 i 阶的总方法数等于到达第 i-1 阶的方法数和到达第 i-2 阶的方法数之和。官方解法里对前面三层的算法里我感觉不太好懂,在评论区找了个好懂的解法。设 dp[i] 表示爬到第 i 阶楼梯的方法总数。
2024-12-17 19:24:26
271
原创 LeetCode hot100-80
最开始第一个字母就是a,至少要找到a的最终位置才能划分第一个区间。还好最后一个a后没有出现过b,c了。第二个区间就从d开始,找到最后一个d的过程中囊括了e,f。且最后一个d后还出现过e,那么d到最后一个d就不足以划分区间,还得把出现的e,f全划分进去。当划过第一个d时end更新为最后一个d。当划过第一个e时end已更新为最后一个e。划分结果为 “ababcbaca”、“defegde”、“hijhklij”
2024-12-17 01:05:04
225
原创 LeetCode hot100-79
如果 i == end,表示我们已经到达了当前跳跃范围的边界,也就是说,我们跳跃到这个位置时,已经不能再继续前进,而是需要再进行一次跳跃。例如,假设我们处在索引 2,nums[2] = 3,那么我们可以跳到索引 2 + 3 = 5,也就是我们最远能跳到的位置是 5。通过维护 end 来表示当前跳跃的最远位置,并通过 farthest 来表示我们能到达的最远位置。每当 end 到达当前跳跃范围的最远位置时,我们增加跳跃次数,并更新跳跃范围的最远位置。从当前位置开始,选择下一个跳跃的目标是能跳到的最远位置。
2024-12-17 00:31:23
303
原创 LeetCode hot100-78
贪心算法,第一次做做不出来我原谅自己。看着代码多么简洁啊。官方分析也写得挺好的。注意下为什么要写if(i<=rightmost)因为比如这个例子nums =[3,2,1,0,4]。到数字0那里不应该往后走了的,因为前面的那几个数字最多只走到0那里,如果不加限制条件就会直接往后循环,肯定能走到最后啊。
2024-12-16 23:50:39
185
原创 LeetCode hot100-77
优化在哪里呢,就只需要一次遍历就行。求到从前往后的最低点了,到当前位置只需要找,当前位置减最低点的利润是不是大于维护的最大利润就行。因为最低点是从前往后实时维护的,所以它总是当前位置之前的一段中的最低点。暴力解法,超时,意料之中。
2024-12-15 22:14:47
235
原创 LeetCode hot100-76
小顶堆保存最大的一半数字。大顶堆保存最小的一半数字。然后求中位数就只需要关注 两个堆顶就行。如何做到,看代码吧。主要就是顺序地一个堆进一个数字,就保证了两个堆一人一半数字。小顶堆为最大的一半就是将数字从大顶堆过一遍再把堆顶给小顶堆就可以做到了。这道题用List直接算中位数会超时。
2024-12-15 21:44:30
255
原创 LeetCode hot100-74
这个快排写得比较简洁。就找前面的第k-1个位置就行。用rand作为枢纽也可以加速。这题的解法在leetcode评论区里找的。
2024-12-15 00:07:03
328
原创 LeetCode hot100-70
这题主要目的是实现一个O(1)就能得到最小元素的一个栈。普通的栈无法做到这点。官方解法是用的两个双端队列来实现的。
2024-12-13 21:47:09
211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人