自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 收藏
  • 关注

原创 数据结构:自己实现一个LRU的缓存(初始化传入缓存最大容量)

最近爱上了刷力扣,越刷越上瘾!然后今天有道题是让自己实现一个LRUCache,也就是LRU缓存。LRU缓存呢,就是当容量不够的时候就要淘汰掉最近最少使用的缓存值,也就是Least Recently Used,这也就是LRU缓存名字的由来。我在力扣上面提交的题也不少了,这道题还是比较有意思的(这道题的力扣网址),我也是直接借用了JDK的LinkedHashMap来实现的,这里直接上代码:import java.util.LinkedHashMap;import java.util.Map;/**

2021-07-07 23:12:51 436 2

原创 算法:计算股票的最大收益(动态规划经典案例)

有一道算法题,很有意思:给你一个数组,代表每天股票的买/卖价序列,要求在序列期间内最多只允许买、卖各一次(先买后卖,买要在卖之前),求此期间内的最大收益是多少(可以选择不卖,即收益为0)。举例如下:价格序列为[7,1,5,3],则代表第一天股票价格为7,第二天为1,第三天为5,第四天为3(数组长度不定),此时第二天价格为1的时候买入,第三天价格为5的时候卖出,则赚取最大的收益4。如果到了第四天再卖,则只能收益2了。你也不能第一天卖,第二天买,虽然收益是6,但是没有买就卖不出去,只能先买后卖,所以这样是犯

2021-04-09 22:35:49 3858

原创 踩坑:Navicat 连接 SqlServer 数据库,老是报错误:HRESULT: 0x800736FD,最后神奇解决

最近有一个项目,需要连接 SqlServer 数据库,但是我的 Navicat Prenium 12 呢一直是连不上,说是需要安装一个东西,如下图:然后我就安装啊,结果安装的途中,一直报这个错误:我就各种搜解决方案,但是网上的那些解决方案,都不行!我试过的无效方案有以下这些(后面围绕着 HRESULT:0x800736FD 错误码来搜的):修改注册表值,去除注册表大小限制,把RegistrySizeLimit的值修改为ffffffff即可!需要修改的注册表为HKEY_LOCAL_MACHINE\

2020-11-17 23:59:13 6035 3

原创 前端踩坑:关于谷歌浏览器携带cookie失效解决方案

有的时候,明明是登录成功了,但是却又退出来了,这种情况可能就是谷歌浏览器携带cookie失效了,没有了cookie,服务器认为你没有登录,也就登录不进去了。但是有可能360浏览器却能登录进去!其实是因为360浏览器没有做这方面的设置(我曾经一度认为是后台的Spring Security框架的问题,但是后来偶然发现,是cookie丢失了…)解决方法:谷歌浏览器访问 chrome://flags/,搜索SameSite设置为disabled即可!...

2020-08-31 16:11:53 8360 1

原创 网络:Java用Netty实现一个群聊服务器与群聊客户端

记录一下实现代码,写得很粗糙,先启动1个服务端,然后起1到多个客户端,每个客户端先控制台输入聊天昵称,然后可以在聊天室发送消息。退出时输入特定字符 “bye” 即可退出群聊。服务器会显示所有聊天过程(包括系统信息)。客户端在线时也能收到所有聊天信息(包括系统信息)。大概如下:下面是代码:1、Maven依赖<dependency> <groupId>io.netty</groupId> <artifactId>netty-all&lt

2020-08-07 23:14:33 480

原创 多线程:Java两个线程,一个打印A-Z,另一个打印1-26,输出结果:A1 B2 C3 ...... Z26

最近看到一个题,很有意思,就是在Java里实现两个线程,一个线程打印字母,也就是 ABCD … Z,另一个线程打印数字,也就是 1234 … 26。但是这两个线程需要交替打印:第一次字母线程先打印A,然后数字线程打印1,第二次字母线程先打印B,然后数字线程打印2 … 一直到最后一次,字母线程打印Z,数字线程打印26。得到如下结果(为了美观,我在数字后面多打印了一个空格):A1 B2 C3 D4 E5 F6 G7 H8 I9 J10 K11 L12 M13 N14 O15 P16 Q17 R18 S19 T

2020-08-02 19:34:46 4038 2

原创 经验:在Maven项目中,打包时指定 main class 的配置(亲测有效)

Maven打包的时候,是不是经常会出现 “没有主清单属性” 的报错?以下的配置,放在 pom.xml 最后的 中,就能自定义main函数所在的类,然后打包了:<build> <finalName>JarPackageFileName</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</grou

2020-07-22 11:20:09 15393 3

原创 证明:Java代码在执行过程中,并不一定是从上到下,每句代码依次顺序执行的

以下程序是证明指令重排的,也就是说,每一行代码并不是从上到下顺序执行的,各位看官先看看,看能否看得懂:import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @Author: LiYang * @Date: 2020/6/13 11:19 * @Description: 证明指令重排 *

2020-06-13 13:53:01 3557 3

原创 算法:用Java实现用KMP算法来进行字符串的匹配

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与内容串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next[]数组来实现,next[]数组本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。下面是我用Java实现的KMP字符串匹配算法:KMP.java类

2020-05-12 17:13:14 491 1

原创 数据库:MySQL数据库使用踩坑记录

如果表的数据量达到百万甚至千万以上的级别,则查询速度会减慢,此时就应该考虑在表的某些字段建立索引MySQL 的 IN 查询,在数据量大的时候更应该建立索引提升查询速度,但是要注意, MySQL5.5版本以前 IN 查询是不走索引的, 5.5版本及以后版本 IN 查询走索引。所以你希望 IN 查询能走索引提升查询速度,部署的时候要选择5.5及以上的 MySQL 版本...

2020-04-01 11:18:47 181

原创 算法:用Java实现双轴快速排序(DualPivotQuickSort)

本文是用Java实现双轴快速排序,我找不到参考的文章地址了,十分抱歉,在此感谢参考文章的原作者,是你给了我思路和灵感!双轴快速排序和普通的快速排序不同的地方在于,普通的快速排序选出一个数字,作为一个基准值,然后通过数组值交换的方式,让左边区域的数字都小于基准值,右边区域的数字都大于基准值,然后再对左右两边的区域进行递归快速排序,直到数组全部有序。而双轴快速排序则是选出两个基准值a和b,且a不大于...

2020-03-27 10:19:46 908 2

原创 数据库:SQL语句的执行顺序,及每一步的详细解释

一、SQL语句的执行顺序举例(sqlServer版):(8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>(12)INTO<new_table>(1) FROM <left_table> (3) <join_type> JOIN <right...

2020-03-24 10:46:14 1400

原创 算法:用Java实现跳表(SkipList),让查找的时间复杂度媲美红黑树

今天略微有些晚了,我就暂时不讲解什么是跳表了,先上我实现跳表的Java代码以及测试结果,空了再补上我自己用Java实现的跳表类:SkipList.javaimport java.util.ArrayList;import java.util.List;/** * @Author: LiYang * @Date: 2020/3/6 23:57 * @Description: 跳表的实...

2020-03-07 00:29:41 427

原创 算法:用Java实现有序trie树,并用于实现单词字典排序的功能

上一遍博客,我已经给大家介绍过trie树。trie树算是一种前缀树,用来储存单词再合适不过了,而且很多单词都有相同的前缀,如果用这个树来存单词,那是相当省空间的。今天我要实现的这个有序trie树,和上一篇博客的trie树的最大不同,就是今天的有序trie树,字母的下级结点集合是用的TreeSet实现的。这就使得每个字母结点的下级结点都是按照字典序列来排布的。这样设计有什么好处呢?如果我们仿照二叉...

2020-02-27 23:55:24 2548

原创 算法:用Java实现trie树,并用于实现敏感词过滤的功能

trie树,可能大家都比较陌生。trie树,又叫字典树,是一种树形结构,一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。trie树有3个基本性质: 1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符 2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 3. 每个节点的所有子节点包含的字符都不相同

2020-02-20 19:54:16 978 3

原创 学习笔记:计算机网络基础 - 应用层(课后习题)

一、填空题 1. 两个应用程序的交互模式采用这样一种形式,即在一端的一个应用程序(客户端)向另一端的一个应用程序(服务器端)提出服务请求,经服务器处理后向客户返回服务结果,我们把这种交互模式称为______。万维网、文件传输服务等都采用这种服务模式。 2. IP地址是主机在Internet中唯一的逻辑地址标识符,而物理地址是主机在进行直接通信时使用的地址形式、在一个IP网络中负责完成主机域名与主机IP地址映射所采用的协议是______;而负责完成IP地址与物理地址之间的映射所采用的协议是______。

2020-02-17 00:00:52 3161 1

原创 学习笔记:计算机网络基础 - 传输层(课后习题)

一、填空题 1. 从通信和信息处理的角度看,在TCP/IP模型中向其上面的应用层提供通信服务的协议层称为______层。 2. 传输层使用了______层提供的服务,并通过执行______,向______提供了一个标准的完善的通信服务。 3. 传输层中的TCP协议可以为其用户提供______、面向连接的、全双工的数据流传输服务。 4. 传输层中的UDP协议可以为其用户提供不可靠、______的数据传输服务。 5. 人们把将待发送的完整的数据块称为报文,在传输层直接对应用层交下来的报文进行封装的协议

2020-02-16 23:57:56 3650

原创 学习笔记:计算机网络基础 - 网络层(课后习题)

一、填空题在广域网中,网络层提供了______和______两种服务。在当今的因特网中,主要使用______服务功能,网络层不提供可靠的传输服务,而是把通信的可靠性交给上层的端到端的用户主机来处理。以太网数据链路层上的数据帧又称为______,在装配帧时除了在首部加上控制信息外,还有在原始数据的尾部加上______。IP数据报是工作在______层的最小传输单元,在构造IP数据报时,只是在原...

2020-02-14 00:02:35 2055

原创 学习笔记:计算机网络基础 - 数据链路层(课后习题)

一、填空题数据链路层的最基本功能是向该层用户提供______、______的数据传输基本服务。数据链路层传送的基本数据单元称为______。帧同步是指数据的接收方应当从接收到的______中准确地区分帧的开始和结束的位置。将二进制数1010011与另一个二进制数1110100进行异或操作,其结果为______。循环冗余检验CRC是一种检验方法,而帧检验序列FCS是添加在数据后面的___...

2020-02-04 22:39:03 4353

原创 学习笔记:计算机网络基础 - 物理层(课后习题)

一、填空题数据可以分为______数据(如声音、温度、压力等)和______数据(如计算机中处理的“文字”和“数字”等)。什么是基带信号?______。在数字通信信道上直接传输基带信号的方法称为______。基带信号必须经过调制(即基带调制)才能在信道上传输,基带调制过程通常称为______。常用的编码方式有不归零编码、归零编码、和。除了基带调制还有带通调制(即使用载波调制基带信号)。三...

2020-01-30 02:37:56 5002 1

原创 学习笔记:计算机网络基础 - 概述(课后习题)

一、填空题从资源共享的角度来定义计算机网络,计算机网络指的是利用______将不同地理位置的多个独立的______连接起来以实现资源共享的系统。在TCP/IP的应用层协议使用的是______,在这里,客户是服务请求方,服务器是服务提供方。美国的IBM公司在1974年宣布了它研制的网络体系结构______。通信线路上的______是指在通信线路上允许通过的信号频带范围(或通频带),单位是HZ...

2020-01-29 21:34:21 3042

原创 Nginx:我的Nginx学习笔记

Nginx是什么?Ngnix是高性能的HTTP和反向代理服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达50000个并发连接数Nginx的内容:正向代理:需要在客户端配置代理服务器进行指定网站的访问反向代理:暴露的是代理服务器的地址,隐藏了正式服务器的IP地址负载均衡:增加了服务器的数量,然后将请求分发到各台服务器上,将原先请求集中到的单个服务器上的情...

2020-01-18 22:02:44 327

原创 算法:用Java递归回溯求解八皇后问题的所有解(共92种解)

八皇后问题,就是国际象棋上面的皇后,可以横竖斜地走,很威风。国际象棋棋盘是8*8的,上面需要放8个皇后,这8个皇后无论横纵斜,都无法攻击到其他的皇后,这样就是一个八皇后问题的解。今天我们就用Java来实现八皇后问题的所有解:import java.util.HashSet;import java.util.Set;/** * @author LiYang * @ClassName Ei...

2019-12-26 14:43:31 854

原创 算法:根据输入的字符串,生成其全排列字符串集合

最近遇到一个很有意思的问题,那就是生成指定字符串的全排列集合。什么意思呢,我举两个例子你就明白了: 1. 字符串 "ABC" 的全排列集合:ABC, ACB, BAC, BCA, CAB, CBA 2. 字符串 "ABB" 的全排列集合:ABB, BAB, BBA相信你已经看明白了,就是组成字符串的所有字符重新打乱顺序,然后生成其所有排列形式的新字符串的集合。如果字符串里面有重复的字符,则结果集合需要去重。这个算法我还是打算用递归来实现,不得不说递归真的是太好用了!下面是实现这个算法的源码:

2019-12-25 13:33:21 491

原创 算法:浅谈算法思想中的动态规划(Dynamic Programming),并附六个动态规划算法题的详细解法

动态规划(Dymamic Programming),简称DP,是算法设计技巧的一种(还有贪婪算法、分治算法、回溯算法、随机化算法等)。其主要思想,就是通过把原问题分解为相对简单的子问题的方式求解复杂问题的算法思想,当然,动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。动态规划的使用规则:最优化原...

2019-12-11 13:51:14 242

原创 算法:用Java实现 AVL 二叉平衡搜索树(Adelson-Velskii & Landis Tree)

今天我用Java给出一种经本人测试通过的、附测试用例的、可以直接使用的AVL树的实现。AVL树的概念,在CSDN上面随便都可以搜得到,这里就不再赘述了,就直接给大家附上AVL树的Java实现源码,你复制源码后,可以直接在你的IDE里面运行、测试和使用。我的Java实现参考了《数据结构与算法分析 Java语言描述 第三版》一书,具体是该书86-94页的相关内容,并在其实现上做了一些补充和优化,最后封装为AVLTree类,可以调用insert()、remove()、find()等方法来操作AVL树。顺便说一下,

2019-12-09 16:37:31 204

原创 算法:根据四色定理(Four color theorem),求出地图的所有着色方案

地图着色,需要每一个区域都使用一种颜色来进行填充,然后为了与相邻接壤的区域分开,就要求两个接壤的区域需要使用不同的颜色。四色定理的意思是,最多只需要四种颜色,就可以为所有的地图进行全部区域着色,且任意两个接壤的区域都是不同的颜色。在四色定理的指导下,我用Java来实现求解任意一副地图的所有可行的区域着色方案的算法,并求解下面这幅示例地图的所有着色方案:算法思路:将所有的区域进行编号,从0开...

2019-12-08 02:34:37 7920

原创 算法:用Java实现一个带删除功能的布隆过滤器(BloomFilter)

上一篇博客,我实现了一个迷你的布隆过滤器(BloomFilter)。今天我再实现一个带删除功能的布隆过滤器增强版布隆过滤器删除功能的原理,就是原来是通过true和false来判断,而现在是通过计数来判断了。add()操作就是往那些哈希值上面+1,删除就是对应的哈希值-1。当然删除之前需要判断,如果有的哈希值都是0了,肯定就不让删了。和exists()操作一样,删除功能也有可能失效,就是删除了之后...

2019-12-02 18:49:14 2526

原创 算法:用Java实现一个mini布隆过滤器(BloomFilter)

实际上,布隆过滤器是一种数据结构(我的博客以"算法"开头的,都是指数据结构与算法)。布隆过滤器(BloomFilter)是一种比较巧妙的概率型数据结构,可以比较高效地进行插入和查询(本博客的实现暂不包含删除)操作。比如插入一些字符串后,可以查询某个字符串一定不存在,或者可能存在。一般用于URL查重、邮箱黑名单过滤等操作。本博客我打算实现的布隆过滤器的操作,有add()和exists()操作两种:...

2019-12-02 16:35:28 253

原创 算法:用不相交集类(并查集)实现随机迷宫生成算法,并最终得到能显示迷宫图的HTML文件

之前我用不相交集类(并查集)辅助实现了克鲁斯卡尔(Kruskal)算法求出图的最小生成树,今天我就用并查集来再实现一个其经典的应用:随机迷宫图的生成并查集生成迷宫图的原理如下,也是迷宫图算法实现的思路:根据自定义迷宫的宽高,有一系列 宽×高 的矩阵点,从0开始编号刚开始这些矩阵点都是不连通的,对应并查集也是都不相交我们随机找到两个相邻的矩阵点,然后通过并查集的union算法,查看相邻矩阵...

2019-11-29 23:24:55 446

原创 算法:用Java实现图论算法中欧拉回路的求解(一笔画问题),并求出 "奥运五环" 的所有一笔画画法

今天我准备用Java来求解图论算法中的欧拉回路(EulerCircuit)问题,这个名字可能对大家有些陌生,如果我说一笔画,大家肯定就都清楚了。原来有一个"七桥问题",不知道的可以百度,这里就不详述。继而引出了一笔画的问题。后来欧拉大神就提出了一笔画的一个原则,那就是一个图形如果可以一笔画,那么把它抽象为图的话,度为奇数的顶点只能是0个或两个。意思也就是,可以一笔画的图形,顶点要么全部都是度为偶数的,要么有且仅有两个度为奇数的顶点,而且一笔画路径的开始和结束,都得是这两个度为奇数的顶点。然后一笔画问题就又叫

2019-11-21 14:17:08 3982

原创 算法:用Java尝试解决图论算法中的网络流问题,以求得最大流

这篇博文,我尝试用Java解决图论算法中的网络流问题,以求得最大流的流量和与其对应的所有增广路径组合

2019-11-19 11:18:17 532

原创 算法:用Java实现图论算法中的拓扑排序,并应用拓扑排序安排课程表

本文我打算用Java实现图论算法中的拓扑排序,并应用拓扑排序安排课程表。课程表就是很常规的那种Java学习的简单路线图,首先下图就是Java课程学习的一个拓扑顺序图:上面这张图是什么意思呢?黑色的字就代表要学习的课程,而红色的箭头就代表课程学习的拓扑顺序,课程之间是有依赖的,箭头代表课程学习顺序: 1. 最左边的Java、SQL、HTML、CSS这类课程则不需要提前学习任何课程,即可开始学习 2. 想学习Servlet课程,你就需要先学习Java课程,然后才能学习Servlet课程 3. 想学习J

2019-11-18 17:03:08 2574

原创 算法:以不相交集类(DisjointSet)作为辅助工具类,用Java实现克鲁斯卡尔(Kruskal)算法求出图的最小生成树

之前我用克鲁斯卡尔(Kruskal)算法求出了图的最小生成树(还记得是如何求出最小生成树的吗?就是把图的所有边拿出来,按权重从小到大排列,然后先拿最小的边放到图中。如果不形成环,则继续拿剩下的最小权重的边,直到图中所有点连通,共需要图顶点数-1条边),因为当时还不知道不相交集类这么个数据结构与算法,所以在判断一条边是接受还是舍弃的时候,用的邻接矩阵的的广度优先遍历算法(BFS)来判断两个顶点是否是...

2019-11-18 15:59:00 255

原创 算法:用Java实现不相交集类(DisjointSet),也叫并查集

本文我用Java实现不相交集类(DisjointSet)的数据结构与算法。在这里先解释一下不相交集类,你可以想象成为刚开始有N个独立的元素,N个元素两两都不等价(不属于一个同等价集合,刚开始有N个等价集合,每个等价集合都只有一个元素,且这个元素就是等价集合的根元素,可以理解为等价集合的代表)。然后可以通过合并操作,把两个元素变为等价,随着后面合并操作的量越来越大,两个元素的合并就等于这两个元素所代表的两个等价集合的合并,最后合并成一个最大的等价集合。除了合并操作,还有寻找操作,就是寻找一个元素所在的等价集合

2019-11-12 11:38:19 528

原创 算法:用Java实现在海量的数据中,找到最大的N个数字,也就是TopN问题

我准备用优先队列来实现TopN问题,海量数据是指计算机内存装不下的很大的数据文件,在里面找到最大的N个数字。因为是海量的数据文件,所以还是按照以前外部排序那种,每次读文件的一部分,然后一个一个地吐数字,以确保内存可以处理。然后在读文件吐出的一个个数字中,找到最大的N个数字

2019-11-12 11:35:53 1544

原创 算法:用Java实现外部排序(ExternalSort)

外部排序,是相对于内部排序而言的。之前我分享了很多种排序,这些排序都是将待排序的乱序数组全部放到内存里面,然后执行相应的排序算法,完成排序并输出结果的。整个排序的过程都是在内存里一次性加载所有的待排序数字,然后在内存里完成排序算法,这种叫内部排序。外部排序,就是需要排序的数字太多了,以至于内存一次加载不了所有的数字,然后就只能通过今天分享的外部排序来完成

2019-11-12 11:32:12 2035 1

原创 算法:用Java实现睡眠排序(SleepSort)

本文我准备用Java实现睡眠排序。睡眠排序由于其独有的排序方式,排序数字最好是非负整数,且最大值不要太大,否则算法会运行很久……非负小数其实也可以,但是排序后的相邻小数的差值不要太小,否则可能会出错,因为多线程的运行有其不确定性和延迟的可能……虽然睡眠排序挺欢乐的,但是想写好一个睡眠排序也挺不容易的,涉及到多线程的设计、启动、运行,以及控制的方法,可以算是多线程编程的一次小小实战!本次睡眠排序,...

2019-11-11 17:23:39 1025

原创 算法:用Java实现基数排序(RadixSort)

本文我准备用Java实现基数排序。基数排序由于其独有的排序方式,只适合待排序的数字都是非负整数的情况。基数排序和计数排序名字很相像,不要搞混淆了。接下来我列举一下二者的共同点和不同点不过他们有共同点:计数排序和基数排序的共同点:1、都是只适合对非负整数的排序2、都是线性的时间复杂度计数排序和基数排序的区别:1、计数排序不能接受有很大值的待排序元素;而基数排序可以接受2、计数排序实现和操...

2019-11-06 15:35:07 286

原创 算法:用Java实现计数排序(CountSort)

本文我准备用Java实现计数排序(计数排序由于其独有的排序方式,只适合待排序的数字都是非负整数的情况)。具体的排序算法过程已经在注释里面了,大家可以复制代码到IDE里面,用DEBUG模式研究算法的过程:import java.util.Arrays;import java.util.Random;/** * @author LiYang * @ClassName CountSort ...

2019-11-05 20:30:20 670

空空如也

空空如也

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

TA关注的人

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