自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 WSL2使用Nvidia-Docker实现CUDA版本自由切换

WSL2使用Nvidia-Docker实现不同CUDA版本的自由切换。

2023-03-04 22:50:01 4033 1

原创 WSL2配置网络代理

WSL网络代理

2023-01-27 12:18:06 8794 4

原创 XShell美化文件

XShell美化使用方式:创建任意文件,将其后缀改为.xcs,然后将下面的代码复制进去XShell菜单栏 => 工具 => 配色方案… => 导入 => 选择配色文件[isayme]text(bold)=eaeaeamagenta(bold)=ff00fftext=ffffffwhite(bold)=eaeaeagreen=00c000red(bold)=d20000green(bold)=00ff00black(bold)=808080red=c000

2022-05-03 21:54:58 744

原创 SpringBoot-LomBok插件

我们以往在书写JavaBean的时候,有几个麻烦的地方:我们需要写上JavaBean的get、set方法、有参、无参构造,同时还要重写toString、equals和hashCode等方法,非常繁琐。这里,我们介绍LomBok插件,可以帮助我们加快JavaBean 的开发进度。1 依赖的引入SpringBoot的父级依赖中已经默认为我们配置好了LomBok,因此我们直接在Pom中添加下述依赖即可:<dependency> <groupId>org.projectlombok

2021-12-15 20:16:05 631

转载 SpringMVC-详解

文章目录一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖3、配置web.xmla>默认配置方式【不推荐】b>扩展配置方式【推荐】4、创建请求控制器5、创建springMVC的配置文件6、测试HelloWorlda>实现对首页的访问b>通过超链接跳转到指定页面7、总结三、@RequestMapping注解1、@R

2021-11-30 20:40:18 1004

转载 Maven-自动化的构建工具

Maven 自动化的构建工具本帖文转载自B站Up主:守护全世界最美的老杜第一章 Maven简介1.1 软件开发中的阶段需要分析: 分析项目具体完成的功能,有什么要求, 具体怎么实现。设计阶段:根据分析的结果, 设计项目的使用什么技术, 解决难点。开发阶段:编码实现功能。 编译代码。自我测试测试阶段:专业的测试人员,测整个项目的功能十分符合设计要求。出一个测试报告。项目的打包,发布阶段: 给用户安装项目1.2 Maven能做什么1)项目的自动构建,帮助开发人员做项目代码的编译,测试, 打包

2021-11-25 12:49:21 204

原创 Spring5-事务详解

文章目录1. 事务的概念2. 事务的特性3. 转账案例演示3.1 创建表并添加记录3.2 非事务的Service和Dao3.3 为什么要使用事务3.4 传统方式如何使用事务4. Spring事务管理4.1 Spring事务管理API4.2 基于注解方式实现声明式事务管理【最常用】4.2.1 配置文件中创建事务管理器4.2.2 配置文件中开启事务注解4.2.3 在Service 类或 Service类指定方法上添加事务注解4.2.4 声明式事务管理的参数配置4.2.4.1 `propagation`:事务的传

2021-11-23 16:31:15 784

原创 Spring5-JdbcTemplate简要介绍

文章目录1. 什么是JdbcTemplate2. 准备工作2.1 引入相关jar包2.2 配置数据库连接池2.3 配置JdbcTemplate对象2.4 创建Service与Dao层2.5 创建对应的JavaBean3. 使用JdbcTemplate实现对数据库的操作3.1 添加、修改、删除操作3.2 查询操作3.2.1 查询返回Scalar3.2.2 查询返回JavaBean3.2.3 查询返回集合3.3 批量操作1. 什么是JdbcTemplateSpring 框架对 JDBC 进行了封装,使用 J

2021-11-22 22:26:01 739

原创 Spring5-AOP详解

1. 什么是AOP在软件业,AOP为 Aspect Oriented Programming 的缩写,意为面向切面编程,是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。通俗描述:不通过修改源代码的方式,在主干功能中添加新功能。这里,我们通过一个登

2021-11-21 16:54:31 795

原创 Java-代理模式

1. 代理模式的原理使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理对象去调用。代理对象决定是否以及何时将方法调用转到原始对象上。2. 静态代理模式这里通过一个衣服工厂的例子来说明静态代理模式:代理类和被代理类需要共同实现一个接口(规范),接口中包含核心功能。代理类中需要有一个与接口相同类型的私有成员,被代理类只需要完成所有的核心功能,而代理类的核心功能在实现时可以增加其他辅助核心功能的方法,真正核心功能的执行还是调用被代理类的核心功能。package c

2021-11-20 13:15:28 262

原创 Java-反射机制详解

文章目录1. 反射机制概述1.1 Java反射机制1.2 Java反射机制提供的功能1.3 反射相关主要的API2. Class类2.1 如何理解Class类2.2 Class类实例的获取方式2.3 哪些类型可以有Class对象实例3. 类的加载与类加载器3.1 类的加载过程3.2 类加载器的作用3.3 类加载器的划分3.4 使用类加载器加载配置文件4. 创建运行时类的对象1. 反射机制概述1.1 Java反射机制Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期间借助于Re

2021-11-20 10:13:03 364

原创 Spring5-IOC容器详解

文章目录1. IOC容器的概念1.1 什么是IOC容器1.2 IOC容器底层原理2. IOC容器常用接口2.1 BeanFactory 接口2.2 ApplicationContext 接口2.3 ApplicationContext 接口实现类2.3.1 ClassPathXmlApplicationContext 实现类2.3.2 FileSystemXmlApplicationContext 实现类3. IOC容器操作Bean管理3.1 什么是Bean管理3.2 Bean管理-XML方式3.2.1 基

2021-11-18 21:29:49 848 2

原创 JavaWeb-JSON的使用

文章目录1. 什么是JSON2. JSON在JavaScript中的使用2.1 JSON的定义2.2 JSON的访问2.3 JSON的两个常用方法3. JSON在Java中的使用2.1 JavaBean和Json的转换2.2 List和Json的转换2.3 Map和Json的转换1. 什么是JSONJSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON 采用完全独立于语言的文本格式,而且受很多语言的支持。这样就

2021-11-15 11:10:44 894

原创 JavaWeb-使用Filter过滤器进行权限检查

文章目录1. 什么是Filter过滤器2. Filter初体验3. Filter的生命周期4. FilterConfig类5. FilterChain过滤器链6. Filter的拦截路径6.1 精确匹配6.2 目录匹配6.3 后缀名匹配1. 什么是Filter过滤器Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器。Filter 过滤器它是 JavaEE 的规范,也就是接口。Filter过滤器的作

2021-11-14 19:54:13 2081

原创 JavaWeb-表单重复提交问题

1. 使用请求转发用户提交完表单,服务器使用请求转发来进行页面跳转。这个时候,如果用户按下功能键F5进行刷新,就会重复发起最后一次请求,造成表单的重复提交。// 错误示范public class RegistServlet extends HttpServlet { UserService userService = new UserServiceImpl(); @Override protected void doGet(HttpServletRequest req, HttpServletR

2021-11-14 11:13:45 1097

原创 JavaWeb-谷歌验证码的使用

1. 验证码解决表单重复提交的原理2. 谷歌kaptcha验证码的使用谷歌kaptcha验证码的使用步骤如下:2.1 导入谷歌验证码的 jar 包导入 kaptcha-2.3.2.jar 和其依赖的 filters-2.0.235.jar 包。2.2 在web.xml中配置用于生成验证码的Servlet程序因此,以后访问kaptcha.jpg的时候,就会自动生成验证码图片、将验证码内容保存在session域中,并且每一次刷新验证码都不同。<servlet> <ser

2021-11-14 11:13:11 1251

原创 JavaWeb-BeanUtils的使用

当我们指定了一个想要的JavaBean对象后,BeanUtils工具类可以一次性地从客户端传过来的所有参数中选择该JavaBean类setXxx()方法中,与xxx同名的参数封装到该JavaBean对象中返回,如果某个setYyy()方法中对应的yyy属性不在客户端传进来的参数名中,则设置为 null 返回。举个例子,当我们做用户登录、用户注册模块时,我们都需要使用 req.getParameter() 把 username 和 password 等信息封装到一个 User 的JavaBean中传给 Us

2021-11-12 20:39:16 551

转载 Java-泛型 <T> T 与T的用法

转载自:【Java之泛型<T> T与T的用法】

2021-11-12 20:07:52 587

原创 JavaWeb-BaseServlet的抽取

1. 一个模块对应一个Servlet在实际的项目开发中,一个模块一般只使用一个 Servlet 程序。而我们以前往往根据一个功能写一个 Servlet,比如给用户注册功能写一个 RegistServlet,再给用户登录功能写一个 LoginServlet,事实上,我们完全可以将 用户注册功能 和 用户登录功能 封装为一个用户模块,然后给这个模块写一个单独的 UserServlet,我们接下来看看如何操作。这里我们需要在前端使用 hidden 属性的 <input> 标签:在 login

2021-11-12 19:44:51 468

原创 Java-代码块的使用细节

文章目录1. 代码块的基本介绍2. 代码块的基本语法3. 使用代码块的好处4. 使用代码块的细节1. 代码块的基本介绍代码块又称初始化块,属于类中的成员【是类的一部分】,类似于方法,将逻辑语句封装在方法体中,通过 {} 包围起来但和方法不同,代码块没有方法名,也没有返回值和参数列表,仅仅只有一个方法体。代码块不能通过对象或者类去显示调用,而是在加载类时、或者创建对象时隐式调用。2. 代码块的基本语法[修饰符] {      逻辑语句;

2021-11-12 12:34:17 706

原创 JavaWeb-文件的上传和下载

一、文件的上传HTML代码需要一个 <form> 表单,注意如下:要有一个 <form> 标签,method="post"<form> 标签的 encType 属性值必须为 "multipart/form-data" 值<form> 标签中的 <input> 标签,type="file"编写服务器代码,接收上传的数据说明: encType="multipart/form-data" 表示提交的数据以多段(每一个input标签为一个段

2021-11-11 20:29:25 1001

原创 Java8新特性-Optional类

1. 什么是Optional类到目前为止,臭名昭著的空指针异常是导致 Java 应用程序失败的最常见原因。以前,为了解决空指针异常,Google 公司著名的 Guava 项目引入了 Optional 类,Guava 通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到 Google Guava 的启发,Optional 类已经成为 Java 8 类库的一部分。Optional<T> 类(java.util.Optional) 是一个容器类,他可以保存类型 T 的值,代表这个

2021-11-07 19:01:56 100

原创 Java8新特性-Stream API

1. 什么是Stream APIStreamStreamStream APIAPIAPI (java.util.stream)(java.util.stream)(java.util.stream) 把真正的函数式编程风格引入 Java 中。这是目前为止对Java类最好的补充,因为 StreamStreamStream APIAPIAPI 可以极大地提供 Java 程序员的生产力,让程序员写出高效率、干净、简洁的代码。StreamStreamStream 是 java8 中处理集合的关键抽象概念,它

2021-11-07 17:23:58 430

原创 Java8新特性-方法引用、构造器引用与数组引用

方法引用和构造器引用是基于Lambda 表达式的基础上产生的,关于Lambda表达式,可以看这个帖子。1. 方法引用的概念当要传递给Lambda 题的操作,已经有现成的实现的方法了,就可以直接使用方法引用!方法引用可以看做是Lambda 表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda 表达式的一个语法糖。要求:实现函数式接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致

2021-11-06 23:43:37 258 3

原创 Java8新特性-Lambda表达式与函数式接口

1. 为什么使用 Lambda 表达式Lambda 表达式是一个 匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样可以传递)。使用它可以写出更简洁、灵活的代码。2. Lambda 表达式的本质与函数式接口Lambda 表达式在 Java 中本质还是一个对象,它针对的是函数式接口,它可以产生函数式接口的一个匿名实现类的实例。所以,以前我们用匿名实现类实现的代码,都可以通过Lambda 表达式来更简单的书写。能够用Lambda 表达式实现的接口有一定的要求,就是接

2021-11-06 16:39:12 204

原创 Java-多态的动态绑定机制

Java-动态绑定机制在通过学习完 Java 的封装、继承、多态 之后,我们通过下面一道例题来引出一个 Java 非常重要的一个机制:动态绑定机制。习题class A { // 父类 public int i = 10; public int sum() { return getI() + 10; } public int sum1() { return i + 10; } public int getI() { return i; }}class B extends

2021-11-06 10:41:14 715

原创 基于最短路的差分约束模型

1. 差分约束的功能求不等式组的可行解求满足不等式组的每一个变量的最值不等式组中每一个不等式形式如下:xi≤xj+ckx_i ≤x_j+c_kxi​≤xj​+ck​其中,xix_ixi​ 和 xjx_jxj​ 是自变量, ckc_kck​ 是应变量。我们可以类比一下之前的最短路问题,假设存在一条从 jjj 走到 iii,边权为 ccc 的边。在进行最短路计算时,只要遇到 dist[j]>dist[i]+cdist[j] > dist[i] +cdist[j]>dist[

2021-09-07 12:32:04 114

原创 DFS的三大类型

深度优先搜索可以解决指数型、组合型、排列型等问题,很多小伙伴拿到DFS的问题时不知道该如何处理,这篇文章主要是帮助对DFS的写法有更深的理解。一. DFS实现指数型枚举(求集合的所有子集)题目来源:【递归实现指数型枚举】1. 题目描述从 1∼n1∼n1∼n 这 nnn 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 nnn。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好 111 个空格隔开。对于没有选任何数的方案,输出空行(空集)。本题有自

2021-09-04 00:47:26 1132 1

原创 DFS的搜索顺序与剪枝

1. DFS什么时候需要回溯?DFS分为两种搜索模式:内部搜索和外部搜索:为了便于大家的理解,我们用一个棋盘来模拟两种情况:1.1 内部搜索模式如果我们要求解棋盘上起点到终点的路径,那么对这张棋盘而言,下一个搜索状态与当前搜索状态一样,变化仅仅发生在同一个棋盘里,如下图:我们可以看到,在内部搜索模式中,即使搜索到了下一个状态,其本质还在同一个棋盘中。这种情况,之前的搜索结果不影响下一步的搜索,因此不需要回溯。这种搜索模式,一般而言不是传统意义上的“暴搜”的问题。1.2 外部搜索模式外部搜索

2021-09-03 18:41:16 459

原创 约数、最大公约数

1. 约数约数,又称因数。整数 aaa 除以整数 b(b≠0)b(b≠0)b(b​=0) 除得的商正好是整数而没有余数,我们就说 aaa 能被 bbb 整除,或 bbb 能整除aaa。aaa 称为 bbb 的倍数,bbb 称为 aaa 的约数。2. 试除法求约数试除法求约数的原理和试除法判断质数的原理基本一致,但是注意求约数的时候要从 111 开始,时间复杂度是 O(sqrt(n))O(sqrt(n))O(sqrt(n))。#include <iostream>#include &

2021-09-01 17:56:42 145

原创 质数、分解质因数、质数筛

1. 质数的定义质数:在大于1的整数中,如果某一个数仅仅包含1和其本身这两个约数,则称这个数为质数,或者叫素数。2. 质数的判断—试除法首先,有一种从其定义出发的判定方法,时间复杂度是 O(n)O(n)O(n)。bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i < x; i ++ ) if (x % i == 0) return false; return true;}但是,我们可以发

2021-09-01 11:57:15 247

原创 不同进制之间的转换

1. kkk 进制转 101010 进制转换公式:(an−1an−2...a0)k=(an−1kn−1+an−2kn−2+...+a0k0)10(a_{n-1}a_{n-2}...a_0)_k = (a_{n-1}k^{n-1}+a_{n-2}k^{n-2}+...+a_0k^0)_{10}(an−1​an−2​...a0​)k​=(an−1​kn−1+an−2​kn−2+...+a0​k0)10​但是我们在实际计算的时候并不会使用上述公式,而是使用将上述展开式变形的秦九昭算法进行转换。秦九韶算法

2021-08-24 18:08:29 225

原创 摩尔投票法(过半众数算法)

1. 题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,如果不存在满足条件的数字,返回-1。思考题:假设要求只能使用 O(n)O(n)O(n) 的时间和额外 O(1)O(1)O(1) 的空间,该怎么做呢?样例1输入:51 2 1 1 3输出:1样例2输入:51 1 2 2 3输出:-12. 摩尔投票法摩尔投票算法的时间和空间都很低,时间复杂度为O(n),空间复杂度为O(1)。算法原理:每次从数组中找出一对不同的元素,将它们从数

2021-08-24 11:31:34 464 2

原创 红黑树的详解

1. 红黑树的提出既然平衡树家族中已经有了AVL树这种成员,并且其时间复杂度已经达到了 O(logh)O(logh)O(logh) 的要求,那么为啥要提出红黑树呢?我们来回顾一下AVL树的操作:插入操作:在AVL树中插入一个数,只要经过一次 O(1)O(1)O(1) 的旋转操作,AVL树局部乃至整个树的高度都能够复原。删除操作:在AVL树中删除一个数,有可能自底而上逐层引发 loghloghlogh 次的 O(1)O(1)O(1) 旋转,导致树型拓扑结构的剧烈变化。因此,在涉及到大量的动态操作

2021-08-22 00:47:38 750

原创 B-树的详解

文章目录一、B-树的提出二、B-树的定义三、B-树的查找四、B-树的插入4.1 分裂4.2 再分裂五、B-树的删除5.1 旋转5.2 合并一、B-树的提出从严格意义上讲,B-树并不是二分查找树。在物理上,B-树的每一个结点都可能包含多个分支。然而,在逻辑上将,B-树依然等效于传统的二叉搜索树。B-树的定义者,将其定义为一棵平衡的多路搜索树。为什么要提出B-树呢?最初,B-树的提出原因就是弥合不同存储级别之间在访问速度上的巨大差异,也就是实现高效的I/O。在现实生活中 系统存储容量的增长速度 <

2021-08-20 22:44:39 2207

原创 数组模拟AVL树(平衡二叉树)

一、AVL树的相关定义AVL树本质上还是一棵二叉搜索树,AVL=BST+AVL = BST +AVL=BST+ 平衡操作。AVL树的特点是:本身首先是一棵二叉搜索树。带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为 111。树中的每个左子树和右子树都是AVL树也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。为何引入AVL树?对于一般的二叉搜索树,其各操作的时间复杂度 O(log(h))O(log(h))O(log(h))

2021-08-19 20:01:35 969 1

原创 数组模拟二叉搜索树(二叉排序树)

一、二叉搜索树的定义二叉搜索树 (BST) 递归定义为具有以下属性的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值它的左、右子树也分别为二叉搜索树二叉搜索树有一个特殊的性质:二叉搜索树的中序遍历是一个有序序列。二、二叉搜索树精华模板这里的二叉搜索树的构建是基于一个序列元素的依次插入。#include <iostream>#include <cstring>using nam

2021-08-18 20:54:43 1979 3

原创 数组模拟的【哈希集合】与【哈希映射】

一、哈希映射 hash(x)我们知道,std::unordered_map是一种非常高效的哈希映射,他相对于红黑树实现的std::map抛弃了有序性,但是提高了效率,插入和查询操作时间复杂度仅仅为 O(1)O(1)O(1)。但是,在算法考试、算法竞赛中,std::unordered_map常常因为常数太大,非常容易被出题人卡掉。因此我们需要换一种更加高效的数组模拟的方法。在看下面的内容之前,请先阅读这篇文章:【AcWing 840. 模拟散列表】,来了解std::unordered_set的数组实现思

2021-08-17 18:17:45 411

原创 AcWing 859. Kruskal算法求最小生成树

题目来源:AcWing 859. Kruskal算法求最小生成树一、题目描述给定一个 nnn 个点 mmm 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E)G=(V,E)G=(V,E),其中 VVV 表示图中点的集合,EEE 表示图中边的集合,n=∣V∣n=|V|n=∣V∣,m=∣E∣m=|E|m=∣E∣。由 VVV 中的全部 nnn 个顶点和 EEE 中 n−1n−1n−1

2021-08-15 11:25:10 518

原创 AcWing 858. Prim算法求最小生成树

题目来源:AcWing 858. Prim算法求最小生成树一、题目描述给定一个 nnn 个点 mmm 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E)G=(V,E)G=(V,E),其中 VVV 表示图中点的集合,EEE 表示图中边的集合,n=∣V∣n=|V|n=∣V∣,m=∣E∣m=|E|m=∣E∣。由 VVV 中的全部 nnn 个顶点和 EEE 中 n−1n−1n−1 条边构

2021-08-15 10:03:09 460

空空如也

空空如也

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

TA关注的人

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