自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 背包问题,动态规划实现

背包问题 动态规划

2022-06-10 21:53:11 163 1

原创 字符串相关题目(一) 无重复字符的最长子串 最长回文子串

无重复字符的最长子串,最长回文串 动态规划 滑动窗口

2022-06-09 22:51:17 191

原创 简单动态规划讲解

简单动态规划讲解斐波那契数列思路代码实现青蛙跳台阶问题思路代码实现矩形覆盖思路代码实现斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,

2022-05-17 22:10:46 187

原创 数组相关练习题

数组相关题二维数组中查找思路代码实现旋转数组的最小数字思路代码实现调整数组顺序使奇数位于偶数前面思路代码数组中出现次数超过一半的数字思路代码实现二维数组中查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 1

2022-05-07 22:50:04 527

原创 搜索引擎项目详解

搜索引擎项目详解认识搜索引擎搜索的核心思路倒排索引项目介绍关于分词实现索引模块实现Parser类enumFile方法实现读文件parseHTML方法实现解析文件parseTitle方法实现parseUrl方法实现parseContent方法实现Paraer类整体代码实现Index类Weight类DocInfo类实现getDocInfo和getInverted方法实现addDoc方法buildForward()方法实现buildIndex()方法实现实现save方法 保存索引到文件实现load方法 加载索引到

2022-05-05 21:32:58 735

原创 Spring的创建和使用

Spring的创建和使用创建Spring项目创建一个Maven项目添加Spring框架支持添加启动类存储Bean对象创建Bean将Bean注册到容器获取并使用Bean对象创建Spring上下文ApplicationContext与BeanFactory的区别获取指定的Bean对象使用Bean总结创建Spring项目使用Maven方式创建一个Spring项目,总共分为三个步骤。创建普通Maven项目添加Spring框架支持添加启动类创建一个Maven项目添加Spring框架支持在pom.

2022-04-15 15:45:32 623

原创 Spring核心与设计思想(详解IoC、DI)

Spring核心与设计思想Spring是什么什么是IoC传统程序开发控制反转方式程序开发对比理解SpringIoCDI概念Spring是什么Spring是一种多层的J2EE应用程序框架,其核心就是管理资源组件以及依赖关系,Spring框架为现代基于java的企业应用程序提供了一个全面的编程和配置模型。管理资源组件以及依赖关系,包括IoC/DI.什么是IoCIoC=Inversion of Control 翻译成中文是"控制反转"的意思。下面我们通过一个构造车的例子来理解"控制反转".传统程序开

2022-03-28 20:20:55 890 1

原创 在线OJ项目测试

项目测试 单元测试 自动化测试

2022-03-14 20:06:47 1459

原创 垃圾回收(GC)

垃圾回收(GC)

2022-02-28 21:17:58 388

原创 博客系统(基于模板引擎)

博客系统基于模板引擎前期准备分析需求创建项目数据库设计封装数据库操作构造DBUtil创建实体类User类 表示一个用户Blog类 表示一篇博客UserDao针对用户进行操作BlogDao类针对博客操作进行单元测试实现前后端交互初始化TemplateEngine创建网页模板实现注册功能提示页面并跳转到指定页面实现登录功能实现检测是否登录获取文章列表获取文章详情新增/发布文章删除文章前期准备分析需求注册新用户登录博客列表页博客详情页博客编辑页删除博客创建项目首先创建一个Maven项目.在

2022-02-24 23:18:44 657

原创 在线OJ项目

在线OJ

2022-02-21 00:05:46 568

原创 HTTP-HTTPS的升级打怪之路(加密之路)

@TOC故事背景人物介绍(HTTP,HTTPS)HTTP:是互联网上应用最为广泛的一种网络协议,是客户端和服务端请求和应答的标准,用于从www服务器传输超文本到本地浏览器的传输协议,可以使浏览器更加高效,使网络传输减少。常用的端口号为80。HTTPS:是以安全为目标的HTTP通道,是HTTP的安全版,即在HTTP下加入SSL层。常用端口号为443。HTTPS诞生的契机HTTP协议的诞生主要是为了解决信息传递和共享的问题。但是随着互联网的高速发展,对于安全的要求越来越高,但是HTTP并不具备任何数

2022-01-27 19:34:25 1980

原创 刷题(十八) 查找两个字符串a,b中最长的公共字串 字符串通配符

查找两个字符串a,b中最长的公共字串 字符串通配符查找两个字符串a,b中最长的公共字串思路代码字符串通配符思路代码查找两个字符串a,b中最长的公共字串题目描述:查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!本题含有多组输入数据!数据范围:字符串长度1<=s<=300,1<=t<=5示例:输入:abcdefghijklmnopabcsafjk

2022-01-11 20:09:03 253

原创 刷题(十七) 完全数计算 扑克牌的大小

完全数计算 扑克牌的大小完全数计算思路代码扑克牌的大小思路代码完全数计算题目描述:完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。输入n,请输出n以内(含n)完全数的个数。数据范围: 1<=n<=5*10^5本题输入含有多组样例。输入描述:输入一个数字n。输出描

2022-01-07 22:11:03 181

原创 刷题(十六)查找输入整数二进制中1的个数 手套

查找输入整数二进制中1的个数 手套查找输入整数二进制中1的个数思路代码手套思路代码查找输入整数二进制中1的个数题目描述:输入一个正整数,计算它在二进制下的1的个数。注意多组输入输出!!!!!!输入描述:输入一个整数。输出描述:计算整数二进制中1的个数示例:输入:5输出:2链接:查找输入整数二进制中1的个数思路通过(n>>i)&1可以获得第i位二进制值,n右移一次可以获取一位的二进制值,n变为0循环终止。代码import java.util.*;public c

2022-01-06 22:25:17 76

原创 刷题(十五) 幸运的袋子 计算日期到天数的转换

幸运的袋子 计算日期到天数的转换幸运的袋子思路代码计算日期到天数的转换思路代码幸运的袋子题目描述:一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多

2022-01-05 21:43:28 271

原创 刷题(十四)跳石板 参数解析

跳石板 参数解析跳石板思路代码参数解析思路代码跳石板题目描述:小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6->8->12->18->24于是小

2022-01-05 09:45:20 175

原创 刷题(十三)二进制插入 查找组成一个偶数最接近的两个素数

二进制插入 查找组成一个偶数最接近的两个素数二进制插入思路代码查找组成一个偶数最接近的两个素数思路代码二进制插入题目描述:给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。示例:输入:1024,19,2,6输出:1100链接:二进制插入思路n:1024 二进制为 0100 0000 0000m:19 二进制为 000

2022-01-03 22:31:52 374

原创 刷题(十二) 最近公共祖先 求最大连续bit数

最近公共祖先 求最大连续bit数最近公共祖先思路代码求最大连续bit数思路代码最近公共祖先题目描述:将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。示例:输入:2,3输出:1链接:最近公共祖先思路代码根据上面的二叉树父节点和子节点之间的关系root=child/2,如果a!=b,就让其中较大的除以2,如此循环知道ab,即是两个数的最近公共祖先,如a=2,b=3,b=

2022-01-02 21:05:27 225

原创 刷题(十一) 密码强度等级 井字棋

密码强度等级 井字棋井字棋思路代码密码强度等级思路代码井字棋题目描述:给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。示例:输入:[[1,0,1],[1,-1,-1],[1,-1,0]]输出:true链接:井字棋思路此题是一道基础题,我们只需要把当前玩家可以获胜的情况全部列出来即可。代码import java.util.*;public c

2021-12-31 21:48:40 420

原创 刷题(十)走方格的方案数 另类加法

走方格的方案数 另类加法走方格的方案数思路代码另类加法思路代码走方格的方案数题目描述:请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。注:沿棋盘格之间的边缘线行走本题含有多组样例输入。数据范围: 1<=n,m<=8输入描述:每组样例输入两个正整数n和m,用空格隔开。(1≤n,m≤8)。输出描述:每组样例输出一行结果。示例:输入:2 21 2

2021-12-30 21:28:07 348

原创 刷题(九)求最小公倍数 两种排序方法

求最小公倍数 两种排序方法求最小公倍数思路代码两种排序方法思路代码求最小公倍数题目描述:正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。示例1:输入:5 7输出:35示例2:输入:2 4输出:4链接:求最小公倍数思路思路1:A和B的最小公倍数即最小能够整除A和B的数,令max等于AB中最大的那个数,那么A和B的最小公倍数取值范围为max至AB之间,因此我们

2021-12-29 20:35:14 109

原创 刷题(八) Fibonacci数列 合法括号序列判断

Fibonacci数列 合法括号序列判断Fibonacci数列思路代码合法括号序列判断思路代码Fibonacci数列题目描述:Fibonacci数列是这样定义的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X

2021-12-28 20:21:47 215

原创 刷题(七) 字符串转整数 不要二

字符串转整数 不要二字符串转整数思路代码不要二思路代码字符串转整数题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0数据范围:字符串长度满足 0<=n<=100进阶:空间复杂度O(1) ,时间复杂度 O(n)注意:①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0②字符串中可能出现 +/- 且仅可能出现在字符串首位。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合

2021-12-27 21:50:42 185

原创 应用层协议:HTTP协议

应用层协议:HTTP协议HTTP请求URLURL格式URL初心URL中的encode decodeHTTP响应HTTP中常见的方法常见面试题GET和PUST的区别HTTP的常见状态码状态码小结HTTP的常见headerHTTP请求首行:HTTP方法 请求的URL 版本号(三部分使用空格分割)。首部(请求头):由一堆键值对组成,每个键值对占一行(使用换行符分割),键和值之间使用“冒号空格”来分割。空行:作为请求头结束的标志。正文(body):正文内容也可以是空行。URLURL格式协议名称

2021-12-27 18:37:35 917

原创 刷题(六)统计回文 连续最大和

统计回文 连续最大和统计回文思路代码连续最大和思路代码统计回文题目描述:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如:A = “aba”,B = “b”。这里有4种把B插入A的

2021-12-25 23:33:08 612

原创 刷题(五) 计算糖果 进制转换

计算糖果 进制转换计算糖果思路代码进制转换思路代码计算糖果题目描述:A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。输入描述:输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔

2021-12-22 21:33:50 130

原创 刷题(四)最长的数字串 超过长度一半的数字

最长的数字串 超过长度一半的数字最长的数字串思路代码超过长度一半的数字思路代码最长的数字串题目描述:读入一个字符串str,输出字符串str中的连续最长的数字串。输入描述:个测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述:在一行内输出str中里连续最长的数字串。示例:输入:abcd12345ed125ss123456789输出:123456789链接:字符串中找出连续最长的数字串思路定义两个字符串,一个字符串保存遍历到的数字字符串(cur),另一个字符串保存出现数字

2021-12-21 22:20:58 164

原创 刷题(三)排序子序列 倒置字符串

排序子序列 倒置字符串排序子序列思路代码倒置字符串思路代码排序子序列题目描述:牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2。输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)第二行包括n个整数

2021-12-20 20:45:52 212

原创 刷题(二)组队竞赛 删除公共字符

组队竞赛 删除公共字符组队竞赛思路代码删除公共字符思路代码组队竞赛题目描述:牛牛举办了一次编程比赛,参加比赛的有3n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2为了让比赛更有看点,牛牛想安排队伍使所

2021-12-19 21:37:22 225

原创 刷题(一):盛最多水的容器

盛最多水的容器题目描述题目描述:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。链接:盛最多水的容器示例一:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分

2021-12-19 18:31:56 46

原创 链表必刷题

链表必刷题从尾到头打印链表删除链表节点链表中倒数第K个节点反转链表合并两个排序的链表两个链表的第一个公共节点从尾到头打印链表题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例:输入:head = [1,3,2]输出:[2,3,1]思路1:使用数组,首先遍历链表求出链表长度,然后从尾到头将元素放入数组中,输出数组.public int[] reversePrint(ListNode head) { ListNode cur=head; int

2021-11-20 17:35:42 887

原创 从浏览器输入一个URL后发生的那些事

从浏览器输入一个URL后发生的那些事站在学生角度看待发送前准备中间转发过程接收方收到数据后站在后端工程师角度其他角度站在学生角度看待核心:网络传输的一些基本原理,关键协议如何配合,以及封装分用,路由转发。发送前准备浏览器根据域名查找对应的IP地址(先查看浏览器自身的缓存,再查看hosts文件,再查看DNS服务器)浏览器构造一个HTTP请求,这个HTTP请求包含了刚才的域名信息.浏览器调用操作系统的socket api,把这个HTTP数据交给TCP进一步处理.(TCP协议构建一个TCP数据包,在

2021-11-14 17:33:33 2741

原创 数据链路层核心协议

以太网以太网认识以太网以太网帧格式MAC地址MTUARP协议以太网认识以太网以太网是一种技术标准,包含了数据链路层内容也包含了一些物理层内容。以太网帧格式目的地址和源地址指的是MAC地址,长度48位,在网卡出厂时固定化。帧协议类型字段有三种值分别对应IP,APR,RARP由一个32位冗余校验码结尾,用于检验数据传输是否出现破环。MAC地址MAC地址在网卡出厂时就被写死的,可以做到每个主机都有唯一的地址。MAC地址一般使用十六进制表示如:00-E0-4C-36-27-60下面我们略

2021-11-13 23:13:40 1587

原创 网络层核心协议:IP协议

IP协议IP协议格式IP协议的核心功能地址管理NAT IP转换过程网段划分(组建局域网)路由选择IP协议格式下面我们根据上图划分进行分别讲解:4位版本号:指定IP协议的版本,对应IPv4来说是44位首部长度:IP头部长度0-15 单位是4个字节8位服务类型(TOS):3位优先权字段(已弃用),4位TOS字段,1位保留字段(必须为0),4位TOS表示最小延时,最大吞吐量,最高可靠性,最小成本,4者中只能选其一,这就要求这四个bit位中只能有一个1,其他是0,不能同时有多个1.16位总长度(字节

2021-11-13 00:36:11 2492

原创 UDP相关协议

UDP相关协议UDP协议格式使用校验和的算法:crc使用校验和的算法:md5UDP的特点经典面试题:基于UDP实现可靠传输.UDP协议格式拼装报头的过程就是”封装“UDP长度:整个UDP的长度=报头+载荷,使用2个字节的数据来表示,单位是字节,表示数据范围 0-65535byte,一个UDP数据报最大就是64KB,所有在使用UDP传输数据的时候一定要注意报文长度不能超过64K,超过就会丢失一部分数据.那么传输大的数据报该怎么办呢?最好的办法就是直接改成TCP,TCP对数据的长度没有限制.UDP

2021-11-09 19:29:10 998

原创 TCP的核心特性

TCP的核心特性确认应答超时重传连接管理三次握手四次挥手状态转换滑动窗口流量控制拥塞控制延时应答捎带应答面向字节流粘包问题TCP中的一些异常情况确认应答确认应答保证可靠传输的核心。发送方发数据给接收方,接收方就回应一个应答报文,如果发送方收到这个应答报文,就认为对方已经收到了。但是由于网路传输顺序是不确定的,不能单纯通过收到数据的顺序来确定逻辑。像下边情况就会造成错误。这是就需要对应答进行编号超时重传解决数据在发送过程中出现丢包。丢包存在两种可能:发送方发的消息丢了接收发没有收到消

2021-11-05 16:13:51 88

原创 多线程案例

多线程案例单例模式饿汉模式懒汉模式阻塞队列生产者消费者模型通过循环队列实现生产者消费者模型定时器实现定时器线程池Executors线程池的实现单例模式首先我们需要知道什么是设计模式?设计模式就像“棋谱”,针对常见的问题场景,大佬们总结的固定套路。那么单例模式是什么?单例模式就是限制类只有唯一的实例。下面我们以洗碗这个情景来讲述饿汉模式和懒汉模式饿汉模式饿汉模式就相当于洗碗池里有一堆碗,而你此时要吃饭,你就一股脑的把所有碗都洗了,用的时候全部洗完。饿汉模式:使用static在类加载阶段创建实

2021-10-20 21:41:11 63

原创 线程安全.

线程安全线程不安全的原因线程之间抢占式执行多个线程修改同一个变量原子性内存可见性指令重排序synchronized关键字synchronized的特性volatile关键字wait和notifywait和sleep的区别线程不安全的原因如创建两个线程,进行++运算,使第一个线程自增500次,第二个线程也自增500次,预期的结果为1000,但实际自增的结果是无法预知的。这是为什么呢?public class TestDemo { static class Count{ publi

2021-10-18 17:04:22 62

原创 常见的锁策略

常见的锁策略乐观锁与悲观锁读写锁重量级锁与轻量级锁自旋锁与挂起等待锁公平锁与非公平锁可重入锁与不可重入锁乐观锁与悲观锁乐观锁:既假设锁冲突的概率比较低基本没有冲突,简单的处理冲突。悲观锁:既假设锁冲突的概率比较高基本每次尝试加锁都会产生锁冲突,付出更多的成本处理冲突。Synchronized初始使用乐观锁策略。当发现锁竞争比较频繁的时候就会自动切换成悲观锁策略。乐观锁的一个重要功能就是检测数据是否发生冲突。引入“版本号”解决。如修改账户余额:提交版本号必须大于记录当前版本号才能执行更新读写锁

2021-10-17 14:52:06 122

空空如也

空空如也

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

TA关注的人

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