小凯子丶
码龄3年
  • 106,492
    被访问
  • 53
    原创
  • 162,883
    排名
  • 328
    粉丝
关注
提问 私信

个人简介:it's tough.

  • 加入CSDN时间: 2019-01-03
博客简介:

当一个合格的软件工程师

博客描述:
不做代码的搬运工。
查看详细资料
  • 3
    领奖
    总分 396 当月 5
个人成就
  • 获得130次点赞
  • 内容获得37次评论
  • 获得68次收藏
创作历程
  • 53篇
    2021年
成就勋章
TA的专栏
  • 计算机网络
    1篇
  • Java数据结构与算法
    51篇
  • 学习和开发过程中遇到的小问题
    1篇
兴趣领域 设置
  • Java
    tomcatmavenintellij-ideajava-ee
  • 后端
    spring
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

OSI七层模型相关知识

什么是ISO?ISO是“国际标准化组织”的英文简称,其全称是International Organization for Standardization。ISO成立于1947年2月23日,是世界上最大的国际化标准组织。OSI七层协议模型OSI模型(Open System Interconnection Model)是一个由ISO提出得到概念模型,试图提供一个使各种不同的的计算机和网络在世界范围内实现互联的标准框架。分层结构OSI七层模型主要分为以下七层(从下至上): 物理层、数据链路层、
原创
发布博客 2021.12.15 ·
32 阅读 ·
0 点赞 ·
0 评论

@RunWith注解找不到,怎么办?

1、新版spring-boot-starter-test不再集成junit,而是junit-jupiter在这里,先说明我使用的版本SpringBoot 2.5.5spring-boot-starter-test 2.5.52、该问题的起因是在测试类中使用@RunWith注解,发现找不到该类,到依赖里从父依赖到子依赖都没有找到junit ?只找到一个相似的,junit-jupiter,初步估计是junit的替代品。到百度一查,发现确实如此。那么就简单了,使用junit-jupiter,不再使用
原创
发布博客 2021.10.20 ·
1487 阅读 ·
2 点赞 ·
0 评论

和互联网大厂的爱恨情仇

刚开始盲猜一波,我相信肯定有一些人认为,想要找一份java后端工作,要去学习redis,要去学习dubbo,还要去学习springboot,springcloud等等等等一系列的知识。没错,需要学习这些,这时候有人还补充说,还需要项目,对,也没错,这可以丰富你的简历。但是,如果你的定位是大厂,如果是腾讯,阿里,百度,字节这种大型互联网公司,如果你还是只学习刚才说的那些,我相信你永远都走不到面试那一关。如果有幸看到这篇文章,而且还是在校生,我建议你着重学习一下基础,比如数据结构与算法,比如jvm.
原创
发布博客 2021.10.13 ·
2012 阅读 ·
3 点赞 ·
0 评论

Java对马踏棋盘问题(骑士周游问题)的实现

14.10.2 马踏棋盘游戏代码实现马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用。如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了 53 个点,如图:走到了第 53 个,坐标(1,0),发现已经走到尽头,没办法,那就只能回退了,查看其他的路径,就在棋盘上不停的回溯…… ,思路分析+代码实现对第一种实现方式的思路图解分析第一种方式的问题,并使用贪心算法(greedyalgorithm)进行优化。解决马踏棋盘问题。不使用贪心算法,要回溯的太多,效率太低。使用
原创
发布博客 2021.10.13 ·
1808 阅读 ·
1 点赞 ·
0 评论

Java实现用弗洛伊德(Floyd)算法解最短路径问题

14.9 弗洛伊德算法14.9.1 弗洛伊德(Floyd)算法介绍和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗
原创
发布博客 2021.10.13 ·
1897 阅读 ·
2 点赞 ·
0 评论

Java用迪杰斯特拉算法(Dijkstra)求最短路径问题

14.8 迪杰斯特拉算法14.8.1 应用场景-最短路径问题看一个应用场景和问题:战争时期,胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六个村庄各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何计算出 G 村庄到 其它各个村庄的最短距离?如果从其它点出发到各个点的最短距离又是多少?这个问题先放在这,我们先来看看什么是迪杰斯特拉算法,在来解题。14.8.
原创
发布博客 2021.10.13 ·
1783 阅读 ·
1 点赞 ·
0 评论

Java用克鲁斯卡尔算法(kruskal)解决公交站问题

14.7 克鲁斯卡尔算法14.7.1 应用场景-公交站问题看一个应用场景和问题:某城市新增 7 个站点(A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通各个站点的距离用边线表示(权) ,比如 A – B 距离 12 公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?14.7.2 克鲁斯卡尔算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不
原创
发布博客 2021.10.13 ·
1773 阅读 ·
1 点赞 ·
0 评论

Java用普里姆算法(prim)解决修路最短路径问题

14.6 普里姆算法14.6.1 应用场景-修路问题看一个应用场景和问题:有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路: 将 10 条边,连接即可,但是总的里程数不是最小。正确的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少。这个问题我们一会在解决,先来看看普里姆算法相关的东西。1
原创
发布博客 2021.10.12 ·
2509 阅读 ·
4 点赞 ·
3 评论

Java用贪心算法解决集合覆盖问题

14.5 贪心算法14.5.1 应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号14.5.2 贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。14.5.3 贪心算法最佳应用-集合覆盖假设存在如下表的需要付
原创
发布博客 2021.10.12 ·
2340 阅读 ·
3 点赞 ·
1 评论

Java用KMP算法解决字符串匹配问题

14.4 KMP 算法14.4.1 应用场景-字符串匹配问题字符串匹配问题:有一个字符串 str1= “迪丽热巴 迪丽热巴你你好 迪丽迪丽热巴迪丽热巴你好”,和一个子串 str2=“迪丽热巴你好”现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1先看一下暴力匹配法(不是KMP算法,用暴力匹配和KMP算法做对比)如果用暴力匹配的思路,并假设现在 str1 匹配到 i 位置,子串 str2 匹配到 j 位置,则有:如果当前字符匹配成功(即 s
原创
发布博客 2021.10.12 ·
2317 阅读 ·
3 点赞 ·
2 评论

Java实现用动态规划算法解决背包问题

14.3 动态规划算法14.3.1 动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 ( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )动态规划可以通过填表的方式来逐步
原创
发布博客 2021.10.12 ·
2681 阅读 ·
3 点赞 ·
1 评论

Java实现分治算法解决汉诺塔问题

14.2 分治算法14.2.1 分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表 汉诺塔14.2.2
原创
发布博客 2021.10.12 ·
2297 阅读 ·
3 点赞 ·
1 评论

Java实现二分查找算法(非递归)

14.1 二分查找算法(非递归)14.1.1 二分查找算法(非递归)介绍之前发过二分查找算法,是使用递归的方式,下面我们用二分查找算法的非递归方式二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假设从[0,99]的队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次( 2^6 < 100 < 2^7)
原创
发布博客 2021.10.12 ·
2315 阅读 ·
3 点赞 ·
1 评论

Java实现图的深度优先遍历(dfs)和广度优先遍历(bfs)完整代码

13.7 图的深度优先遍历(dfs)和广度优先遍历(bfs)完整代码import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;/** * @author zk * @version 1.0.0 * @ClassName Grap.java * @Description TODO 图(深度优先遍历和广度优先遍历) * @createTime 20
原创
发布博客 2021.10.12 ·
2477 阅读 ·
3 点赞 ·
1 评论

Java构建图和图的深度优先遍历(dfs)和广度优先遍历(bfs)

13.1 图基本介绍13.1.1 为什么要有图前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图13.1.2 图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:13.1.3 图的常用概念顶点(vertex)边(edge)路径无向图(下图)有向图带权图13.2 图的表示方式图的表示方式有两种:
原创
发布博客 2021.10.12 ·
2409 阅读 ·
4 点赞 ·
1 评论

二叉树与B树、B+树、B*树和2-3树

12.1 二叉树与 B 树12.1.1 二叉树的问题分析二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题:问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响。问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度。12.1.2 多叉树在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每
原创
发布博客 2021.10.12 ·
2380 阅读 ·
3 点赞 ·
1 评论

Java实现创建平衡二叉树(AVL 树)和AVL树的增删改查

11.5 平衡二叉树(AVL 树)11.5.1 看一个案例(说明二叉排序树可能的问题)给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在。 左边 BST 存在的问题分析:左子树全部为空,从形式上看,更像一个单链表。插入速度没有影响。查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢。解决方案-平衡二叉树(AVL)11.5.2 基本介绍平衡二叉树也叫平衡二叉搜索树(Self-balan
原创
发布博客 2021.10.12 ·
2320 阅读 ·
3 点赞 ·
1 评论

Java实现二叉排序树创建、遍历、增加和删除

11.4 二叉排序树11.4.1 先看一个需求给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加11.4.2 解决方案分析使用数组数组未排序:优点:直接在数组尾添加,速度快。缺点:查找速度慢。数组排序:优点:可以使用二分查找,查找速度快。缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动。咱们下面使用二叉排序树
原创
发布博客 2021.10.11 ·
2880 阅读 ·
4 点赞 ·
3 评论

Java实现赫夫曼编码、解码、文件压缩和解压

11.3 赫夫曼编码11.3.1 基本介绍赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法。赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间赫夫曼码是可变字长编码(VLC)的一种。Huffman 于 1952 年提出一种编码方法,称之为最佳编码11.3.2 原理刨析通信领域中信息的处理方式-----赫夫曼编码步骤如下:传输的字符串 i like li
原创
发布博客 2021.10.11 ·
2994 阅读 ·
7 点赞 ·
2 评论

Java实现赫夫曼树的构建和遍历

11.2 赫夫曼树11.2.1 基本介绍给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近11.2.2 赫夫曼树几个重要概念和举例说明路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第 L 层
原创
发布博客 2021.10.11 ·
2802 阅读 ·
2 点赞 ·
0 评论
加载更多