- 博客(64)
- 收藏
- 关注
原创 再谈Comparator与Comparable接口
3.Comparator接口提供了一个“事后补救”措施,它其实是可以独立于一个类之外的,也就是说你可以先定义你的类,然后之后再给该类定义一个比较器,那么这个时候你就可以创建一个“比较器类”,Comparator 参数为待比较的类,然后当某个集合想要使用这个新定义的比较器进行排序时,只需要将这个比较器的实例传到相应的比较器参数上就好了。这是一种无侵入的做法。若保证升序排列,要返回o1-o2,降序则o2-o1。-1:前面的数后面的数,是降序(从大到小)排列。
2022-08-19 16:35:10
281
1
原创 通过Kaptcha初步学习Spring boot starter的原理
```//@Configuration//public class KaptchaConfig {// @Value("${youkol.web.kaptcha.config.kaptcha.image.width}")// private String width;// @Value("${youkol.web.kaptcha.config.kaptcha.image.height}")// private String height;// @Value("$...
2022-01-21 00:32:23
726
1
转载 由反转链表学习递归算法,寻求递推公式而不是层层调用再返回
这个思路对写递归代码来说,还是比较简单适用的,比我看到的这些把递归掰开来揉碎了来讲的要更容易出代码**。希望对写递归还比较迷茫的同学们有所帮助,如果我写的对你有帮助,还望大家能多点赞转发。 ### 先放结论 **Rules Number One**,基本上,**所有的递归问题都可以用递推公式来表示。有了这个递推公式,我们就可以很轻松地将它改为递归代码。**。所以,遇到递归不要怕,先想**递推公式**。 ##### 例1: (比较明显的能递推公式的问题)问题:斐波那契数列的第n项 递推公式:f(..
2022-01-07 21:50:04
193
原创 Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank
在使用nacos作为spring boot的配置中心和服务发现的时候,遇到了错误Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank搜了一下说可能是因为,既配置了服务注册发现又配置了配置中心,所以就需要在项目中写上对应的服务注册和配置信息,找了一下发现确实这个服务只配置了服务注册 没有添加配置信息,于是新建bootstrap.properties文件,在其中指定好了nacos的配置信息,重启服务,问题解决
2021-12-26 11:27:07
3184
转载 KMP算法
【参考资料】关于KMP算法,大家可以查阅博客园的这篇文章:阮一峰:字符串匹配的KMP算法这篇解释文章相当简明,当然july的这篇文章也可以读一读:六之续、由KMP算法谈到BM算法【算法原理】这里抄录第一篇参考资料的例子:下面,我用自己的语言,试图写一篇比较好懂的 KMP 算法解释。 1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"ABCDABD"的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。 2..
2021-12-23 22:56:51
75
原创 leetcode面试题 16.25. LRU 缓存 LinkedHashMap + 哈希表与单链表 + 哈希表与双链表
解题思路最先想到的是哈希表加单链表的方式:由于get和put都视为是一次使用,所以在get和put之后都要将节点移动到链表的最前面(最前面的表示最近一次使用的,显然最后面的一个就是要被淘汰的一个)哈希表中记录的是key-value值,链表上只存放key值即可,不断地调整链表上的key的排列顺序即可实现最近最久未使用的排序效果。这种做法问题挺多的,一个是map中没有存放key对应的链表节点,导致在寻找链表上的节点时需要顺序遍历链表,这导致我写的程序 花费300多ms...改进的办法就是map中存放对
2021-12-23 22:54:54
385
原创 Java HashMap源码分析
、HashMap的底层实现原理。以jdk 7为例******** HashMap map = new HashMap();* 在实例化以后,底层创建了长度为16的一维数组Entry[] table.* ...可能已经执行过多次put...* map.put(key1,value1):* 首先,调用key1所在类的hashCode()方法计算key1哈希值,此哈希值经过某种计算以后,得到在Entry数组中的存放位置* 如果此位置上的数据.
2021-12-21 23:06:55
542
原创 DHT分布式哈希表
DHT的主要思想是:首先,每条文件索引被表示成一个(K, V)对,K称为关键字,可以是文件名(或文件的其他描述信息)的哈希值,V是实际存储文件的节点的IP地址(或节点的其他描述信息)。所有的文件索引条目(即所有的(K, V)对)组成一张大的文件索引哈希表,只要输入目标文件的K值,就可以从这张表中查出所有存储该文件的节点地址。然后,再将上面的大文件哈希表分割成很多局部小块,按照特定的规则把这些小块的局部哈希表分布到系统中的所有参与节点上,使得每个节点负责维护其中的一块。这样,节点查询文件时,只要把查询报文路由
2021-12-01 17:16:47
527
转载 libp2p 概念之发布/订阅
发布/订阅发布/订阅是一种系统,在该系统中,对等点聚集在他们感兴趣的主题周围。对某个主题感兴趣的对等点被称为订阅了该主题:对等点可以向主题发送消息。每条消息都会传递给订阅该主题的所有对等方:pub/sub 的使用示例:聊天室。每个房间都是一个发布/订阅主题,客户端发布聊天消息,房间中的所有其他客户端都会收到这些消息。 文件共享。每个发布/订阅主题代表一个可以下载的文件。上传者和下载者在发布/订阅主题中公布他们拥有的文件的哪些部分,并协调将在发布/订阅系统之外发生的下载。设计目标
2021-11-30 16:00:37
584
原创 java Thread中start() 和run()方法的区别
start用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止。start方法源码示例一个 Java 线程的创建本质上就对应了一个本地线程(native thread)的创建,两者是一一对
2021-11-20 15:53:28
329
原创 记录goland导入go项目 Unresolved 错误
导入go项目后如果出现引包的错误,一般设置一下gopath 、goroot、go mod之类的就可以正常引入包了,但是今天设置好之后无论如何也不行。搜索了一下,这个方法是有效的:删除项目下的.idea目录,然后再用goland打开,问题解决。...
2021-11-05 14:19:25
952
原创 LeetCode 42.接雨水 平凡解法+DP
解题思路平凡解法:感觉这个题的难点在于理解题意,找出具体位置上的雨水是如何计算得出的就好办了,显然一个位置所能存放雨水的值为其两边的最大的值的较小值减去在该位置的柱子长度既可以求得。那么遍历所有的位置,并在遍历的同时求某个位置上的左边最大值和其右边最大值既可以求得该位置的储水量。求和即可得到答案。整体时间复杂度为O(n2)。动态规划:既然要求所有位置的左边最大值,那么我们可以采用一个dp数组来记录每个位置上的左边最大值,遍历求这个leftMax[]的值即可,每个位置只需要对比当前位置的高度和前一个
2021-10-10 11:13:49
102
原创 LeetCode 139. 单词拆分 DFS / DP java
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple", wordDict .
2021-10-09 17:46:33
106
原创 基于OpenWRT+FreeRadius+TinyRadius+Daloradius实现portal加radius安全认证
OpenWRT+FreeRadius+TinyRadius+Daloradius实现portal加radius认证想要实现的需求是:当接入网络时,需要跳转到自定义的portal认证页面,输入用户名和密码后,跳转到Freeradius进行认证,认证完成后才允许用户联网。实质上就是实现了portal认证和radius认证方式的相结合,以此来实现多重安全认证。基本知识介绍AAA:AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的简称,是
2021-09-29 14:31:21
2626
转载 iptables基本概念
原文链接:iptables详解(1):iptables概念-朱双印博客首先致谢原作者,写的真的是通俗易懂,让我一下就懂了。防火墙相关概念此处先描述一些相关概念。从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。主机防火墙:针对于单个主机进行防护。网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。iptables其实不是真正的防火墙,..
2021-09-28 10:23:54
114
原创 650. 只有两个键的键盘 动态规划 DFS
最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。Paste(粘贴):粘贴 上一次 复制的字符。给你一个数字n ,你需要使用最少的操作次数,在记事本上输出 恰好n个 'A' 。返回能够打印出n个 'A' 的最少操作次数。示例 1:输入:3输出:3解释:最初, 只有一个字符 'A'。第 1 步, 使用 Copy All 操作。第 2 步, 使用 Paste 操作来获得...
2021-09-19 10:22:13
85
原创 Leetcode 502
502. IPO难度困难156收藏分享切换为英文接收动态反馈假设 力扣(LeetCode)即将开始IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多k个不同的项目。帮助 力扣 设计完成最多k个不同项目后得到最大总资本的方式。给你n个项目。对于每个项目i,它都有一个纯利润profits[i],和启动该项目需要的最小资本capital[i]。最初,你的资本为w。当你完成...
2021-09-08 15:55:33
107
原创 Leetcode 746. 使用最小花费爬楼梯
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:输入:cos...
2021-09-03 15:40:40
77
原创 Leetcode 70.爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶分析:把问题拆解缩小化,想一下一二三阶楼梯的话有几种方法,显然一节楼...
2021-09-03 15:01:26
88
原创 智能合约实现事件监听两种方式:基于原生web3.js和使用truffle-contract方式
在学习以太坊开发的过程中,我最大的感受和经验是一定要依据官方文档进行开发和调错,百度得来的东西很多是只适用于文章个人所使用版本的方案,寻求官方文档的帮助才是解决问题的王道。一、使用web3.js对智能合约事件进行监听如果你使用truffle框架并且在js中 使用truffle-contract中间件对合约实例化,例如:另外,你的智能合约代码如下:合约中定义了一个在添加设备时会触发的事件NewProduct。此时,你去查看相应web3.js的文档想看一下如何监听这个事件:你会看到这个实例:但
2021-03-31 11:15:36
1661
原创 HotSpot虚拟机演进之方法区的改变
方法区与java堆一样都是各个线程共享的内存区域,它用于存放类型信息,域信息,常量,JIT后的代码缓存等数据。原本在方法区中的静态变量、字符串常量池在jdk7以后便迁移到了堆中。JDK8版本中彻底放弃了永久代的,改为了采用本地内存来实现方法区,即元空间MetaSpace。静态变量、字符串常量池仍然存放在堆里。...
2021-02-20 00:01:37
173
原创 LeetCode 321. 拼接最大数 单调栈解题
去除重复字母(困难)拼接最大数(困难)移掉 K 位数字(中等)不同字符的最小子序列(中等)这四道题都可以使用单调栈的思想来解决, 单调栈即为栈中元素为单调递增或者单调递减,而且在构建栈的时候可以保持原数组中的元素相对位置。其中单调性的保证是一个动态调整的过程,即当前插入元素时需要向前找是否影响了前面的元素结构,如果有影响则需要在前面的栈中弹出受到影响的元素。这四道题中最难的是321,它涉及了两个数组,需要分别在两个数组中构建最大子序列,然后想办法把这两个序列拼接成一个。拼接最大数给定长度分别.
2020-12-03 11:44:22
233
原创 用truffle构建dapp
###### 一、成功的环境配置: truffle v5.1.50 solc:0.5.16 web3:1.2.9 "devDependencies": { "copy-webpack-plugin": "^5.0.5", "webpack": "^4.41.2", "webpack-cli": "^3.3.10", "webpack-dev-server": "^3.9.0" }, "de...
2020-10-26 22:32:45
412
1
转载 ubuntu 修改环境变量(PATH)
ubuntu 修改环境变量(PATH)1、什么是环境变量(PATH)在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行。我们知道查阅文件属性的指令ls 完整文件名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:"为什么我可以在任何地方执行/bin/ls这个指令呢? " 为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH 的帮助所致呀!...
2020-10-19 23:06:28
4829
原创 以太坊-geth环境配置记录
一、在ESXI上创建ubuntu虚拟机打开esxi客户端或者浏览器管理页面新建虚拟机,一步步的根据需求选择相应的cpu核数,内存,硬盘。创建虚拟机后,选择Ubuntu18.04镜像。打开控制台进行ubuntu系统的安装。安装完毕。。。二、设置root账户密码1.为root设置初始密码(1)登录系统,打开终端,输入命令:sudo passwd root(为root用户设置密码)(2)设置root密码(建议简单点,没必要那么复杂);(3)重复root密码;2.修改/u
2020-10-18 20:08:35
2268
1
原创 332. 重新安排行程 java Priorityqueue
给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前所有的机场都用三个大写字母表示(机场代码)。假定所有机票至少存在一种合理的行程。示例 1:输入: [.
2020-08-28 10:45:57
144
原创 java 169. 多数元素
摩尔投票法:核心就是对拼消耗。玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。最后能剩下的必定是自己人。给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非..
2020-08-26 14:57:33
308
2
原创 LeetCode 287. 寻找重复数 抽屉原理
给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:1不能更改原数组(假设数组是只读的)。2只能使用额外的 O(1) 的空间。3时间复杂度小于 O(n2) 。4数组中只有一个重复的数字,但它可能不止重复出现一次。来源:力扣(LeetCode)链接:h...
2020-08-25 18:14:15
303
转载 二分查找经验
下面提到的一些点可能不是您存在的问题,如果讲得过分了,还请您谅解,在这里给同样有问题的朋友提个醒:我的经验是把定义区间成为左闭右闭区间,左右边界是无差别的,弄成左闭右开,反而增加了思考的复杂程度; 明确int = left + ( right - left ) / 2这里除以 2 是下取整; 明确while(left <= right)和while(left < right)这两种写法其实在思路上有本质差别,while(left <= right)在循环体内部直接查...
2020-08-25 17:17:48
121
原创 LeetCode 33. 搜索旋转排序数组 java 部分有序条件下的二分查找
https://www.lingluan.vip假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例2:输入: ...
2020-08-24 17:24:25
179
转载 leetcode 15. 三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]比较经典的题目,难点不在于能否找得到,而在于不能包含重复的三元组,首先进行一个排序,这样在每次遍历的时候如果得到一组...
2020-08-12 17:35:38
78
转载 [转]String、StringBuffer与StringBuilder之间区别
String是一个不可变对象,每次对String对象操作时都是产生新的对象,然后将指向新的String对象,故如果涉及大量对String的操作时会造成资源的浪费。一、Java String 类——String字符串常量简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的
2020-08-03 16:12:31
146
原创 wordpress博客网站全站启用HTTPS记录
我们在搭建网站的时候默认都是开启的HTTP协议,但现在更为推荐的是HTTPS的方式,这样会更加安全,有利于网站被百度收录,提高排名。 我们先来了解一下 HTTPS 和 SSL吧。 SSL证书是数字证书的一种,SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。SSL证书...
2020-04-30 14:07:24
768
原创 基于树莓派与YOLOv3模型的人体目标检测小车(四)
前面几篇文章完成了训练端和部署端的环境搭建以及模型的训练,并经过两次模型转化最终将YOLOv3 TINY模型部署在了树莓派上。其实最核心的内容已经完成了,接下来就是一些应用层面的东西了。树莓派控制马达:1. 材料硬件:1.树莓派3B+2.四个直流电机3.一个小车底盘+四个车轮(某宝上有卖)4.L298N驱动模块(介于树莓派与马达之间的桥梁)5.充电宝一个(用于给树莓派供电)6...
2020-03-30 20:08:25
2653
4
原创 基于树莓派与YOLOv3模型的人体目标检测小车(三)
模型效果:在上文中,我们制作了数据集,并利用数据集进行了模型的训练,利用静态图片和视频对模型的检测效果进行了检验,发现效果还是不错的。 前两张为静态图片检测,后一张为视频检测效果截图。 但是模型要想部署在算力微弱的树莓派上,还需要进行两次模型转化才能运行在NCS上进行前向推理。模型转化:...
2020-03-24 00:54:47
2435
1
原创 基于树莓派与YOLOv3模型的人体目标检测小车(二)
上篇文章介绍了如何搭建深度学习环境,在Ubuntu18.04TLS上搭建起了 CUDA:9.0+cuDNN7.0+tensorflow-gpu 1.9 的训练环境。本篇文章将介绍如何制作自己的数据集,并训练模型。本文训练数据集包括从VOC数据集中提取出6095张人体图片,以及使用LabelImg工具标注的200张python爬虫程序获取的人体图片作为补充。一、爬取人体图片并标记# codin...
2020-03-21 20:53:06
1539
原创 基于树莓派与YOLOv3模型的人体目标检测小车(一)
项目介绍:本科毕业选的深度学习的毕设,一开始只是学习了一下YOLOv3模型, 按照作者的指示在官网上下载下来权重,配好环境跑出[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lx66vRVG-1584783869784)(https://s1.ax1x.com/2020/03/21/8WNrm4.png#pic_center)]来Demo,后来想着只是跑模型会不会...
2020-03-21 17:49:04
3182
3
原创 北邮OJ-257- 最近公共祖先-软件14 java
思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑。我们可以用一个数组表示某个节点的父节点是谁,在判断的时候顺着数组遍历下去就能达到根节点1,并依次记录下该节点的所有的祖先节点。再与另外一个节点的所有的祖先进行比较。Problem C. 最近公共祖先...
2019-03-14 19:52:53
609
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人