自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 ElasticSearch自定义评分-看这篇就够了

ElasticSearch自定义评分

2023-01-12 00:17:14 3271

原创 for里面多条件判断慎用

问题产生的原因是最近在leetcode刷题,零钱兑换2中产生的,思路一下子陷进了死胡同,放两段代码,上面的是错误的,下面是正确的。//错误的public int change(int amount, int[] coins) { int[] dp = new int[amount + 1]; dp[0] = 1; for (int coin : coins) { for (int i = 1; i <= amount &amp

2021-10-05 21:07:03 476

原创 关于@valid注解的使用

@valid 是在 javax.validation.Valid包下面的,主要功能就是帮我校验参数封装到pojo时使用,比如一个登录的请求,我们会把前端传过来的username,password封装进一个实体,由于我们不知道username,和password的数据是否为空(前端传来的一切数据都是不可信的)。正常我们就在service进行校验,这样会产生大量的冗余代码。这是我们就可以使用@valid注解配合别的校验注解在封装进实体的时候校验。controller层使用会校验你后面实体的成员变量

2020-12-24 14:51:04 1051

原创 java中HashMap的扩容机制

i = (n - 1) & hash 这个是hashmap中根据hashcode判断数组位置上有没有元素的存在,这里非常关键的一个运算符就是这个&与了&运算符操作,在二进制中只有1&1的时候才为1,其他的都为0比如 11100010 & 00011110 = 00000010在了解扩容之前我们需要了解下二进制的乘法和除法二进制的乘法,比如1110 x 2 = 11100,就是把所以位向前移动一位,空出来的用0补上,其实也不难理解,二进制每一位都是2的次方,那每

2020-12-15 20:59:19 437 2

原创 斐波那契数(动态规划)

斐波那契数:当前的数等于前两个数的和,0,1,1,2,3,5.。。。。递归写法我想大家肯定都不陌生了public int get(int n) { if(n < 2) { return n; } return get(n - 1) + get(n - 2);}这个是我刷剑指offer看到的,看到瞬间哇,竟然可以这么写public int get(int n) { int i = 0; int j = 1; while(n-- > 0) { j += i;

2020-12-09 20:58:02 168

原创 堆排序递归和非递归

在了解堆排序之前,基本的二叉树的概念是需要知道的完全二叉树:叶子节点在最后一层或者次一层,且节点从左往右连续大根堆:任何根节点都比他的左右子节点都要大i为节点在数组中的索引,求节点的父节点:(i - 1) / 2, 求节点的左节点 i * 2 + 1,求节点的右节点 i * 2 + 2在构建一个堆之前,我们需要先把他们的左右节点构建成堆,所以我们从下往上依次构建堆,由于叶子节点是没有子节点的,所以从最后一个节点的父节点开始构建,想画个个图,可是实力实在不允许那就都放在代码中吧,老铁干了这段代码,先写

2020-12-09 20:41:39 224

原创 Spring循环依赖问题

在面试时候经常碰到spring的循环依赖问题,今天突然心血来潮,自己都没有碰到过这种问题。现在就来写个例子测试下。@Service@Scope("prototype")public class ImcWaitServiceImpl implements ImcWaitService { @Autowired private ImcWaitMapper imcWaitMapper; @Autowired private ImcSendResultService imc

2020-11-20 19:52:20 127

原创 tkmybatis自定义xml报错

刚刚再写一个项目,然后项目使用的是tk-mybatis,后面我有在项目中引入了mybatis-plus,想使用公司的自动生成类的文件,当引入进来后,我以为一切都是水到渠成的,当一执行,它给我报个这个错我一看这个先去配置文件看了下,配置的路径,没毛病,然后再去看了下,namespace也没毛病,反复搞来搞去,就是不行,然后又是移动文件,又是修改方法名,最后发现原来实体类上生成的时候使用了mybatis-puls的注解。...

2020-11-18 19:44:03 247

原创 KMP算法(思想真的不复杂)

在了解KMP之前,我们需要了解两个概念,字符串的前缀,和字符串的后缀字符串的前缀,我举个例子你们就懂了,一个字符串abcde,它包含的前缀有,{a, ab, abc, abcd}字符串的后缀,{bcde, cde, de, e}知道这两个概念后,我们就可以来聊kmp的思想了,现在假如我们需要知道一个字符串(这个字符串我们称为被匹配字符串)中是否包含另一个字符串(这个字符串我们称为被目标字符串),我们最容易想到的自然就是遍历匹配字符串中每一个字符为开头,然后逐一向下匹配。这样自然是可以也很容易想到,但是

2020-11-11 16:05:14 125

原创 骑士周游算法(跳马)

骑士周游算法:主要就是两个思想深度遍历和回溯,以当前点为目标,算出下一个能走的点的集合,然后以下一个能走的目标,然后算出下下个能走的目标,最后不能走时,看有没有完成,没有完成就回退,这里需要一个辅助数组来进行判断点是否有没有走。接下来就是算法了//标记点位是否走过private boolean[] flag;//多少行,这里设置成8行8列private int Y = 8;private int X = 8;//标记算法是否完成private boolean isComplete = fal

2020-11-06 22:16:53 890

原创 迪杰斯特拉算法(Dijkstra)-Java实现

迪杰斯特拉算法也是求两点之间最短路径的算法,它的思想和普利姆算法有点相似,不断通过已找到点集合和未找到点之间的集合之间的最短路径。这个算法需要用到三个数组,一个是存储结点是否已经访问,一个是结点到起始点的最短距离,还有一个是结点到起始点第一个需要经过的点。我们不断通过迭代更新这三个数组,最终就可以得到每个点到起始点的最短距离数组了。接下来可以结合代码理解,我也把代码注释写的尽量详细。//是否已经访问过private boolean[] isVisited;//第一个经过的结点private in

2020-11-06 21:50:42 269

原创 弗洛伊德算法(floyd)

弗洛伊德算法和迪杰斯特拉算法都是求两点之间最短路径的问题,弗洛伊德算法使用了动态规划的思想,用二维矩阵记录了所有点之间最短的距离,虽然代码只有几行,但是思想还很值得回味的。其主要的思想就是两个点之间的直接距离能否使用第三个点来缩短。公式:vj > vk + kj,这个公式讲的就是,三个点v,j,k。v点如果需要到j点,v直接到j的距离,是否要大于v到某个中间点k的距离加上k到点的距离,然后依次遍历所以点为中间点,就可以得出所有点之间的最短距离,这样讲可能有点很难理解。下面我举个例子吧。比如现在有5

2020-11-06 20:50:05 986

原创 克鲁斯卡尔算法(kruskal)

我自己感觉,克鲁斯卡尔算法比普利姆算法更好理解,它就两个要点,排序和判断是否成环。排序:我们把两两相邻的边根据边的权值,从小到大依次排序,这个十大排序算法可以自己选一个去实现下,刚好还可以回忆下以前的算法,下面我们使用冒泡来实现边的排序。是否成环:这个也是这个算法里比较难的一个点了,这里使用了并查集,每次添加一条边时候,我们需要去寻找这两个点是否有相同的父节点,如果有说明成环了,我们就可以选择下一条边了,直到有n-1条边。如果不了解并查集的,可以看看下面这一篇文章,讲的很通俗易懂。(https://

2020-11-05 22:52:35 598

原创 普利姆算法(Prim)

普利姆算法和克鲁斯卡尔算法都是求连接图中所有结点的最短路径,也就是最小生成树。普利姆算法其实就是不断获取已经访问结点和未访问结点之间的最短边来获取所有结点间的最短路径,也可以认为是广度+贪婪。接下来看算法的实现,这里只给出关键代码,基本的图数据结构可以自己实现。//结点数量private int[] vertexs;//矩阵实现图private int[][] edges;//n:为指定开始的结点public void prim(Graph graph , int n) { //这里我们需要

2020-11-05 22:07:58 776

原创 图的深度遍历和广度遍历(java实现)

在说图的广度遍历和深度遍历之前,我们可以回想下,树的先序遍历和层次遍历,先序遍历我们是不是从根节点一直递归到叶子节点,然后再慢慢回退,图的深度遍历也是类似的。图的深度遍历,只需要额外一个数组记录顶点是否有访问过,下面就使用矩阵来实现图,和图的深度遍历。//这里n为顶点的数量private boolean[] isVisited = new boolean[n];//这里为矩阵构建的图1为边private int[][] edges;public void dfs(int n){ //这里打印对

2020-11-04 23:10:21 297

原创 树的后序遍历(递归和非递归)

树的后序遍历:左右根,代码写起来还是很简单的,就几行代码。public void postOrder(Node node) { if(node.getLeft() != null){ postOrder(node.getLeft()); } if(node.getRight != null){ postOrder(node.getRight()); } System.out.print(node.getValue());}这里如果不是很熟悉,可以自己debug下,在纸上自己画画过程

2020-11-03 23:35:18 593

原创 树的层次遍历和确定层次问题

树的层次遍历其实就是使用了队列的特性,从跟节点开始,把左右节点分别加入队列,出来时候,自然就是一层一层的打印出来的。代码还是很简单的public void levelOrder(Node root) { LinkedList<Node> queue = new LinkedList(); queue.add(root); while(queue.size() > 0){ Node node = queue.removeFirst(); System.out.print(n

2020-11-03 22:07:58 694

原创 递归实现钢条切割问题(Java版)

钢条切割问题递归有两种思想: 1.切割一刀分别获取两两边的最优解相加,获取两两相加的最优解和不切割的比较这样就可以得出可以分割的最大价值。 公式:r(n)=max(p[n] , r(1)+r(n-1) , r(2)+r(n-2) ,……,r(n-1)+r1)public static int cut(int[] p, int value) { if (value == 0) { return 0; } else { i

2020-10-23 22:46:41 458 1

原创 冒泡排序及优化(JAVA实现)

冒泡排序的的思想还是很简单的,通过相邻的两个数比较,直到比较完无序区的数,无序区最大的数就到了末尾。接下来看一段冒泡排序的动图,可以更好的理解。图片中把比较完无序区,我们称为一趟,我们每一趟都可以得出一个最大值,n-1次我们就可以得到一个有序的数组了,无序区我们用当前值和它后面一个值比较,如果当前值大于后一个值,那么我们就交换他们,这样每次大的都在后面,当比较完整个无序区,我们就得到无序区最大的值了。接下来就是代码了:public static void bubblingSort(int[] ar

2020-10-14 23:12:35 171

原创 分组排序取前几条之子查询和用户变量的使用

关于一次面试的sql题:题目:在一张订单表中有三个字段,order_id, sale_num, type(类型有:衣服,鞋子,皮包),现在希望取出每种类型销量前三的记录。我在面试时候还想,啥,啥玩意,要我写单表的查询?看不起我?这不就是group by ,在order by啊,等等好像不太对劲,在仔细想想,好吧我做不出来,是我菜了后来根据百度和自己琢磨也搞了出来。有两种方法,思想都是一样的,给每个同类型的加个排名最后再过滤。方法1(子查询): select or...

2020-09-03 23:01:42 193

原创 关于路由表,ARP表,MAC表的一些理解

以下均为个人理解,如有不对之处,希望大家不吝指教。数据在网络传输中有几个比较重要的东西:一个是IP地址,分为源地址和目的地址,一个是MAC地址,分为源MAC地址和目的MAC地址,发送一个信息需要填写源IP,和目的IP,源MAC地址,和目的MAC地址,目的IP决定逻辑上的目的地,这个在传输是不会改变的,目的MAC地址决定下一跳的位置,传输过程中源MAC和目的MAC都是会改变的。ARP表:主要是IP与MAC地址的映射,存在PC电脑中。MAC表:主要是MAC地址和接口的映射,存在交换机中。路由表:

2020-05-10 22:52:16 2327

原创 公钥,私钥,数字签名,CA证书

1.公钥和私钥其实就是一组用来加密解密的字符串样的东西。2.私钥存放在自己这里,公钥给别人。3.公钥加密只有拥有私钥才能解开,私钥加密也只能公钥解开。4.总的来说私钥公钥就是你和别人解密加密的工具。5.数字签名我对他的理解,有三点作用:一 识别发信人,通过公钥解开数字签名其实有两点作用,一个是获得摘要,另一个就是识别发信人。 二 判断信息内容是否被改变,在获取摘要后,我们在通过信息的内容进...

2020-03-26 00:00:49 499

原创 关于oauth2.0为什么返回code而不直接返回token

结论:直接返回不安全。1.因为认证服务器认证通过后是需要浏览器302重定向到你的服务器,如果直接返回token,不安全,别人可以获取到。2.为什么需要浏览器重定向到你的服务器,而不直接让认证服务器直接调用你的接口。那可以想想,认证服务器直接调用你的接口,那你应该怎样让浏览的页面进行跳转呢?这时候发送请求的不是浏览器了,而是认证服务器,所以你只能给认证服务器发送一个url地址,让认证服务器控制浏...

2020-03-24 23:46:44 1743

java springboot+springcloud

因上传大小受限,所以采用txt格式存放云盘地址和密码,从零开始,包含源代码和资料,有企业级开发项目。

2020-03-01

空空如也

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

TA关注的人

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