- 博客(29)
- 收藏
- 关注

原创 Summer——从头开始写一个简易的Spring框架
Github仓库地址 Release V1.0 使用文档 更新日志 如何适配 参考Spring框架实现一个简易类似的Java框架。计划陆续实现IOC、AOP、以及数据访问模块和事务控制模块。项目持续维护中…欢迎Star!Thanks~~~ 本项目参考自Spring,但又做出了自己的创新,最大的创新点在于解决循环依赖的问题,引入了自己的解决方案,具体方法可以参考更
2021-05-22 12:11:04
1194

原创 vfd-cloud——一个适合练习上手的云存储网盘springboot项目(开发中)
vfd-cloudRelease v1.0.0项目仓库地址项目体验地址,服务器性能较差,可能体验并不是很完美 一个基于SpringBoot的云存储网盘项目,适合练手学习SpringBoot,用到的技术栈列到了下面。支持用户的注册登陆及修改密码,利用邮箱进行验证。支持文件上传下载以及删除。支持文件夹的创建删除。一、核心技术栈后端SpringBoot2MyBatisRedisRabbitMQMySQL前端Html5+Css+JavaScriptJQueryBoots
2021-01-29 12:23:34
223
原创 图解Leetcode组合总和系列——回溯(剪枝优化)+动态规划
Leetcode组合总和系列——回溯(剪枝优化)+动态规划组合总和 I给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]来源:力扣(L
2021-04-29 10:49:42
394
原创 每天定时获取必应每日一图并保存做壁纸
每天定时获取必应每日一图并保存做壁纸 必应每天会更新每日一图,这些图片都是特别好看,适合做封面壁纸等等。我做了一个自动脚本,让它每天定时获取每日一图,然后设置为个人主页博客的封面,封面和背景一共九张图片,每天更新后以队列的顺序替换。 这里是成品:个人搭建的博客主页获取每日一图的链接从接口获取链接必应提供了一个获取每日一图的接口,https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1,访问此接口会返回一个json
2021-01-30 14:26:42
1471
2
原创 <二分查找+双指针+前缀和>解决子数组和排序后的区间和
<二分查找+双指针+前缀和>解决子数组和排序后的区间和题目重现:给你一个数组 nums ,它包含 n 个正整数。你需要计算所有非空连续子数组的和,并将它们按升序排序,得到一个新的包含 n * (n + 1) / 2 个数字的数组。请你返回在新数组中下标为 left 到 right (下标从 1 开始)的所有数字和(包括左右端点)。由于答案可能很大,请你将它对 10^9 + 7 取模后返回。示例 1:输入:nums = [1,2,3,4], n = 4, left = 1, right
2021-01-12 15:40:46
238
原创 常见算法技巧之——双指针思想
常见算法技巧之——双指针思想欢迎访问我的个人主页 双指针思想是指设置两个指针解决一些算法问题。一般用的比较多的就是去解决数组、链表类的问题,还有很耳熟能详的二分查找问题。本文将根据自己平时做题的总结以及在网上看到的其他大佬的总结讲解来讨论一下双指针的使用技巧。本文会根据我平时做题实时更新。快慢指针 双指针的快慢指针用法是我最开始理解的第一种用法。快慢指针一般用来解决链表的问题多一些。设置一快一慢两个指针fast和slow,初始化指向链表表头。1、计算链表的中点 给定一个链表,要求返回
2021-01-12 15:39:03
385
原创 设计模式之——单例模式
单例模式个人主页单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。饿汉式单例 由于饿汉式单例是在类加载的时候创建的实
2021-01-12 15:38:01
127
原创 操作系统试验——读者写者模式(写优先)
操作系统实验——读者写者模型(写优先)个人博客主页参考资料:Java实现PV操作 | 生产者与消费者读者写者对一个公共数据进行写入和读取操作,和之前的生产者消费者模型很类似,我们梳理一下两者的区别。都是多个线程对同一块数据进行操作生产者与生产者之间互斥、消费者与消费者之间互斥、生产者与消费者之间互斥写者与写者之间互斥、读者与写者之间互斥、但读者与读者之间并发进行写优先是说当有读者进行读操作时,此时有写者申请写操作,只有等到所有正在读的进程结束后立即开始写进程定义PV操作/** *
2021-01-12 15:36:25
1093
原创 操作系统——内存管理
操作系统——内存管理Basic memory managementBase and Limit register将上图这块称为MMUSwapping操作系统中的内存是动态分配的,如图所示:A进程启动,占用一部分内存B进程启动,占用一部分内存C进程启动,占用一部分内存A进程结束,又会将之前A占用的内存释放随后又启动D进程,占用掉一部分内存B进程结束,释放掉B占用的内存再启动A,这时又会划分给A一部分内存这些动态的对内存的规划,就要用到swap交换内存,所以一般在linux系统
2021-01-12 15:34:04
329
原创 操作系统PV操作之——生产者消费者模型
操作系统PV操作之——生产者消费者模型个人博客主页参考资料:Java实现PV操作 | 生产者与消费者浙大公开课在操作系统的多进程、多线程操作中经常会有因为同步、互斥等等问题引发出的一系列问题,我们的前辈为了解决这些问题,发明出了“信号量(Semaphore)”这么一个令人称奇的变量,就目前来看,很巧妙的解决了这些问题。信号量是个整形变量信号量S只允许两个标准操作wait()和signal(),或者他的发明者称呼的P操作和V操作wait()和signal()是原子操作,不可分割的原语对P
2021-01-12 15:32:47
2317
原创 五大常见算法策略之——回溯策略
回溯策略欢迎大家访问我的个人搭建的博客Vfdxvffd’s Blog回溯是五大常用算法策略之一,它的核心思想其实就是将解空间看作是一棵树的结构,从树根到其中一个叶子节点的路径就是一个可能的解,根据约束条件,即可得到满足要求的解。求解问题时,发现到某个节点而不满足求解的条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。下面通过几个例子来讨论这个算法策略。货郎问题有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的具有最短路程的环路。(最后回到
2021-01-12 14:50:11
1167
原创 五大常见算法策略之——动态规划策略
Dynamic Programming Dynamic Programming是五大常用算法策略之一,简称DP,译作中文是“动态规划”,可就是这个听起来高大上的翻译坑苦了无数人,因为看完这个算法你可能会觉得和动态规划根本没太大关系,它对“动态”和“规划”都没有太深的体现。 举个最简单的例子去先浅显的理解它,有个大概的雏形,找一个数组中的最大元素,如果只有一个元素,那就是它,再往数组里面加元素,递推关系就是,当你知道当前最大的元素,只需要拿当前最大元素和新加入的进行比较,较大的就是数组中最大的,这就是
2021-01-12 14:48:15
348
原创 快速排序
快速排序官方说法:快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。通俗来说,就是不断的挖坑和填坑1、其实就是先选择一个基准数,然后这个基准数我们保存为x,那它所在的位置就是一个空出来的坑。2、我们从右向左迭代,如果遇到比基准
2021-01-12 14:46:06
151
原创 五大常见算法策略之——递归分治策略
递归与分治策略递归与分治策略是五大常见算法策略之一,分治策略的思想就是分而治之,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的解。而分治与递归很多情况下都是一起结合使用的,能发挥出奇效(1+1>2),这篇文章我们将先从递归说起,再逐渐向分治过渡,主要讲解方式是通过9个例题来说明问题的,问题都是根据难度由简到难,由浅入深,对递归与分治能有个大概的了解雏形,当然最重要还是要做大量练习才能掌握。0、递归 0.0、Fibonacci数
2021-01-12 14:42:57
425
原创 数据结构之——八大排序算法
排序算法小汇总1、交换排序类 1.1、冒泡排序 1.2、快速排序2、选择排序类 2.1、简单选择排序 2.2、堆排序3、插入排序类 3.1、直接插入排序 3.2、希尔排序4、归并排序5、基数排序交换排序类冒泡排序(优化) 冒泡排序一般将前面作为有序区(初始无元素),后面作为无序区(初始元素都在无序区里),在遍历过程中把当前无序区最小的数像泡泡一样,让其往上...
2019-10-27 14:27:43
219
原创 Java IO File类
File类构造方法 作为IO操作中的最基本的类,File类可以封装文件夹和文件,其构造方法如下:1、通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。File(File parent, String child);2、通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。File(String pathname) 3、根据 parent 路径名字符串...
2019-10-17 19:05:41
145
原创 一个帮你记住密码的小程序
OnePass 现在的人们社交软件越来越多。需要记住的社交账号也越来越多,我就是前几天忘了某个密码折腾了好久,于是心血来潮想使用Qt整一个小程序来帮助自己查询密码。取个名字叫OnePass吧。思路: 因为技术原因所以做的只需要满足自己的需求。计划着是用Qt做界面,方便操作,然后用数据库记录各个社交平台的账号密码。1、初始界面需求:1、打开后会先弹出一句欢迎的话(虽然做的简陋,但礼貌...
2019-10-13 11:42:29
795
2
原创 BS结构的一个注册用户的功能
注册用户功能 学了Java一段时间,就想折腾折腾,就做了一个注册的功能,用HTML写了一个网页上的比较简陋的界面,用Java做了一个后台简陋的服务器处理数据,最后将数据存储到数据库中。注册界面 先是最简单的用HTML表单做一个简陋的界面,上一个效果图: 这块就直接上代码了,用到了HTML的表单,没有什么花里胡哨的渲染美化<!DOCTYPE html><ht...
2019-10-13 11:32:51
502
原创 图的深度优先和广度优先遍历
深度优先遍历 首先我们说一下邻接点的定义,对于无向图,如果两个顶点之间相互连接,那么它们互称为邻接点。 深度优先遍历支持从指定的结点开始遍历。深度优先遍历,也称作深度优先搜索,缩写为DFS。深度优先遍历从某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点触发深度优先遍历图,直至所有和v有路径想通的顶点都被访问到。 上面这段话听起来有点官方还有点笼统,不太好理解,所以我们通俗一点...
2019-10-13 11:27:43
253
原创 向图中增加结点
向图中增加结点 我们前面说过采用邻接矩阵来存储图,那么向图中增加结点其实只需要改变顶点数目,以及在邻接矩阵中增加点与点,点与边的关系即可。先看增加结点的函数 就是向函数中传入结点,判断图如果未满就将其存入存放结点的数组,然后给节点数目加一。 //向图中增加顶点 bool addNode(Node* pNode) { if (pNode == NULL) ...
2019-10-13 11:26:17
580
原创 图数据类型的定义
图介绍 图是相较于树更复杂的一种数据结构类型,它表示了多对多的对应关系。图的结构其实就是一些顶点和一些边的集合。图又分为有向图和无向图。存储图的方法有很多,比如使用邻接矩阵,邻接表,十字链表和邻接多重表等等。下面我们一一介绍一下这些内容。图的结构:无向图:无向图其实就是说顶点与顶点之间的关系没有方向,只有说是连接的还是断开的。有向图:相对的,有向图就是顶点与顶点之间不...
2019-10-13 11:25:10
925
原创 Huffman树及编解码
Huffman树——编解码介绍: Huffman树可以根据输入的字符串中某个字符出现的次数来给某个字符设定一个权值,然后可以根据权值的大小给一个给定的字符串编码,或者对一串编码进行解码,可以用于数据压缩或者解压缩,和对字符的编解码。 可是Huffman树的优点在哪? 1、就在于它对出现次数大的字符(即权值大的字符)的编码比出现少的字符编码短,也就是说出现次数越多,编码越短,保证了...
2019-10-13 11:22:42
556
原创 AVL平衡二叉查找树
二叉排序树:定义 二叉排序树,又叫二叉查找树,它或者是一棵空树;或者是具有以下性质的二叉树: 1. 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 2. 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 3. 它的左右子树也分别为二叉排序树。 比如下图就是一棵...
2019-10-13 11:13:28
138
原创 字符串模式匹配——KMP算法
KMP算法匹配字符串朴素匹配算法 字符串的模式匹配的方法刚开始是朴素匹配算法,也就是经常说的暴力匹配,说白了就是用子串去和父串一个一个匹配,从父串的第一个字符开始匹配,如果匹配到某一个失配了,就重新去从父串的下一个字符开始匹配,这样的算法虽然理解起来容易,但是算法的时间复杂度无疑是很高的,假如父串是一个很长的字符串,而字串恰恰不和父串匹配,那无疑是对CPU的迫害。 下面贴几张图看看这...
2019-10-13 11:09:59
178
原创 案例——UDP聊天
UDP聊天案例 做一个网络编程相关的案例,想着用利用UDP的快速且不用连接的优点做一个聊天室,我们一个聊天程序需要可以接收消息,也要可以发送消息,所以我们的DatagramSocket对象不但需要调用send函数,还需要调用recieve函数。 而且由于聊天的特殊性,有可能在你发送的时候有消息需要接收,所以我们需要用到线程,开启两个线程,一个负责接收,一个负责发送,为了清晰起见,我们将收发...
2019-10-12 19:52:52
148
原创 TCP方式的传输
TCP客户端先创建socket对象建立tcp客户端,明确服务端的地址和端口,必须与服务端对应,要不然对方收不到消息,就像快递填错了送货地址。Socket s = new Socket("127.255.255.255", 10003);然后建立起连接通道后就会出现socket的IO流,作为客户端我们是发送数据的,我们将数据发送到服务端让它去处理,所以我们获取的也就是OutPutStrea...
2019-10-12 19:52:12
178
原创 UDP方式的传输
UDP部分内容需要查文档学习,我们需要了解下面的两个类:java.net.DatagramSocket和 java.net.DatagramPacketjava.net.DatagramSocket:此类表示用来发送和接收数据报包的套接字。它就像数据传输过程中的司机或者接站员一样,它指引着数据发送的方向和传输到达的地方构造方法:DatagramSocket() 构造数据报套接字并将...
2019-10-12 19:50:36
306
原创 Java通信——获取自己IP
获取自己的IP地址import java.net.InetAddress;import java.net.UnknownHostException;public class getip { public static void main(String[] args) throws UnknownHostException { /** * ip地址对...
2019-10-12 19:47:23
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人