自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Win10家庭版安装Docker

如果你安装docker出现docker desktop stopping网上找了不少方法,什么下4.4,还是改注册表为pro版,删除docker文件夹,都比较麻烦或没用。下面介绍一种简单的方法。首先你要知道家庭版是没有hyperv的,所以首先先安装它1.桌面新建hyperv.cmd,复制下面的代码到里面pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txtfor /f %%i in

2022-05-16 12:44:54 470

原创 编辑距离题目总结

判断子序列class Solution { public boolean isSubsequence(String s, String t) { //dp定义:dp[i][j]为到i-1,j-1最长子序列的长度 //递推:相等,dp[i][j] = dp[i-1][j-1] + 1; //不相等,dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]); int[][] dp = new int[s.len

2022-03-30 17:32:50 396

原创 买卖股票问题总结

题目列表买卖股票的最佳时机1 可以买卖一次买卖股票的最佳时机2 可以买卖多次买卖股票的最佳时机3 最多买卖两次买卖股票的最佳时机4 最大买卖k次买卖股票的最佳时机含冷冻期 如题买卖股票的最佳时机含手续费 如题解答class Solution { public int maxProfit(int[] prices) { //dp[i][0]表示持有股票所得的最大金额 //dp[i][1]表示不持有股票所得的最大金额 int[]

2022-02-28 16:20:05 188

原创 打家劫舍三部曲

打家劫舍1打家劫舍2打家劫舍3第一题打家劫舍是经典的dp问题,所以套用动态规划五部曲dp数组定义dp[i] 表示到下标为i的房子可以偷到的最多的钱递推公式无非两种情况,偷当前房子和不偷当前房子,即dp[i] = Math.max(dp[i - 2] + nums[i],dp[i - 1])dp数组初始化dp[0] = nums[0],dp[1] = Math.max(dp[0],dp[1])遍历顺序dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的,所以是从

2022-02-10 10:26:13 532

原创 Linux上安装Redis

第一步下载redis,我下的是最新版,将压缩包移动到Linux平台上,程序一般放到opt目录下。移动到opt目录。

2022-02-07 15:50:49 496

原创 单词拆分两种做法(动规+记忆化搜索)

单词拆分回溯法普通的递归会超时,因为有大量的递归重复计算,所以我们可以使用记忆化搜索,创建一个memory数组,如果开始下标之后的字符串无法拆分,把该位置设为true,递归调用到的话直接返回,这种算法时间复杂度是O(n ^ 3),因为substring的时间复杂度是O(n),其实还可以再提速,把这里优化掉,我们可以使用字符串哈希算法,原理很简单,给你一个很长的字符串可能存不下和很长的数字可以存下,后者所占的空间会少很多,但主要还是为了方便判断一个字符串是否出现过,这是最基础的部分。具体算法可以参考字符

2022-01-16 23:30:57 269

原创 完全背包问题基础知识及两道经典例题

定义有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。它的大体步骤和01背包相同,有兴趣可以去我的博客背包问题之01背包了解这里介绍下不一样的地方,因为它的物品可以拿无数件,所以在遍历顺序这里不同先来回顾一下01背包的遍历,为什么是这个顺序,内外能不能换,遍历容量为什么要从大到小我也在前

2022-01-15 20:49:31 625

原创 01背包问题做题总结(二)

目标和这道题和之前的不太一样,乍一看可以拿组合总和问题一样,想尝试回溯法,发现超时,于是我们可以用动态规划,这时我们要考虑dp数组的定义是什么我们假设加法的和为x,那减法的和就是sum-x,可以推出x-(sum-x) = target,举个例子,以示例1为例,tar=3,加法和为2的话,一减,减法和就是1,所以x要减(sum-x)才是target,这里要注意,不是加,还有就是nums都要参与运算,不是取几个构造也要注意,可以推出x = (sum+target)/2;x为背包容量,所以dp的定义为填满

2022-01-13 15:59:02 256

原创 01背包问题做题总结(一)

这周是两道类似的题分割等和子集题目概述给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。class Solution { public boolean canPartition(int[] nums) { //dp[j]:背包容量为j,本体j指目标sum/2,dp[j]为最大可以组成j的自己总和 //weight为nums[i],value为nums[i] //递推公式为

2022-01-12 17:15:55 282

原创 背包问题之01背包

背包问题图解01背包定义N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。最基本的01背包问题流程dp数组定义dp[i][j] 我们从下标0到i的物品任意选,背包容量为j,物品价值的最大值。时刻记住这个定义。递推公式定义对于每个物品,我们只有两种状态,放与不放不放物品:那么dp[i][j] = dp[i-1][j],和之前没什么两样放物品,这时就要考虑放进去之后

2022-01-11 15:26:58 815

原创 动态规划做题总结(一)

定义动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。与贪心区别贪心是局部最优达到全局最优,每次你只需要关心拿最大还是最小即可,没有状态推导,而动规则是要从上一个状态推导得来。解题步骤明确dp数组和下标的含义定义递推公式dp数组初始化确定遍历顺序举例推导dp写题时,自己尝试推导,看和自己想的一不一样。爬楼梯以这道题作为切入点,class Solution {

2022-01-08 19:56:40 211

原创 贪心总结(二)

贪心解决重叠区间问题最近写了几道这种题,感觉他们都有规律可循。用最少数量的箭引爆气球class Solution { public int findMinArrowShots(int[][] points) { if(points.length == 0) { return 0; } Arrays.sort(points,(o1,o2) -> Integer.compare(o1[0],o2[0]));

2022-01-03 18:22:43 489

原创 Arrays.sort()深入理解(一)

用法sort(T[] a):对指定T型数组按数字升序排序。sort(T[] a,int formIndex, int toIndex):对指定T型数组的指定范围按数字升序排序。sort(T[] a, Comparator<? supre T> c): 根据指定比较器产生的顺序对指定对象数组进行排序。sort(T[] a, int formIndex, int toIndex, Comparator<? supre T> c): 根据指定比较器产生的顺序对指定对象数组的指定对

2021-12-19 12:07:26 333

原创 springcloud面试题(一)

一、什么是微服务微服务是一种用于构建应用的架构方案。微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。一组小服务每个服务运行在独立进程中服务之间使用轻量级通信服务可独立部署是基于业务能力实现无集中式管理那么我们为什么需要微服务呢?servlet+jsp不能用吗,springboot不香吗。其实只是它们无法应付当今需求多种多样的情况了。这些单体架构紧耦合,牵一发动全身,修改

2021-12-14 17:51:35 545

原创 贪心总结(一)

贪心的定义贪心就是每一阶段都达到局部最优,从而在整体上达到最优。举个栗子,地上一堆钱,你可以拿5张,那每次拿最大的,这就是局部最优,最后自然总钱数也是最大的。但有些题也不能用贪心,如果你要拿有体积和价值的东西,而你的背包容量有上限,这时就不能贪心了。贪心没有公式,也没有通用的套路,要靠经验,一般举不出反例,就尝试贪心吧,没准有奇效。(反例就是如果你贪别的看看能不能利益更大,不能,就试试贪心)贪心一般步骤把大问题分解成若干小问题确定贪心策略求解每个子问题的最优解将子问题的最优解堆叠成

2021-12-13 12:30:58 1190

原创 回溯算法总结篇

定义首先先来了解一下回溯的定义吧回溯是递归的副产物,只要有递归就会有回溯所以回溯经常和二叉树,深度优先遍历等操作联系到一起,因为他们都用到了递归。回溯本质上是暴力搜索,效率并不高,最多剪枝一下。回溯法可以解决的问题组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等回溯模板(重点)void backtracking(

2021-12-07 18:35:07 788

原创 回溯去重方法总结

去重问题使用used数组来标记是否使用过该元素。子集2如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!而子集也是一种组合问题,它的集合是无序,既然是无序,取过的元素不会重复取,写回溯算法的时候,for就要从startIndex开始,而不是从0开始。那什么时候从0开始呢?等到计算排列问题时就会从0开始。去重分为两种,树层去重和树枝去重。例题如下全排列2used[i-1]来判断是哪一种,是true,说明上一个使

2021-12-01 15:18:34 452

原创 代码随想录 回溯法做题总结(一)

了解回溯回溯是递归的副产品,只要有递归就会有回溯。但回溯法并不是什么高效的算法。因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。回溯可以解决的问题组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等组合是不强调元素顺序的,排列是强调元

2021-11-22 22:14:15 156

原创 二叉树做题阶段总结

递归三部曲确定传递参数和返回值:需要注意的是,遍历整颗二叉树,不需要返回值,而遍历某一条边则需要返回值,因为遇到符合条件的路径就要及时返回。当然有些遍历整颗二叉树的题,如果递归结束条件,如果需要接住返回值也可以加上返回值,不过不加也能做就是了确定终止条件确定单层递归的逻辑二叉树的基本知识需要了解种类、存储方式、遍历方式、定义可以参考二叉树总结(一)二叉树做题总结涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函

2021-11-18 20:51:08 198

原创 二叉树总结(一)

二叉树种类满二叉树满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树完全二叉树完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1 个节点。二叉搜索树若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值

2021-11-07 13:33:49 147

原创 哈希表相关问题解法

    一般来说哈希表都是用来快速判断一个元素是否出现集合里。对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用.哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。接下来是常见的三种哈希结构:数组set(集合)set.add() 一些需要去重的问题可能会用map(映射)常用方法 map.getOrDefault(xx,0),map.put(xx,map.getOrD

2021-10-24 15:53:29 183

转载 @Autowired注解理解

@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这样用的<property name="属性名" value=" 属性值"/> 通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注释下面用案例来具体说明UserRepository.java package c

2021-10-23 16:38:46 1611

原创 第一个Vue程序

Vue背景Vue 是一套用于构建用户界面的 渐进式框架 。集合了React和angular的优点,它被设计为可以自底向上逐层应用。它的核心库只关注视图层.简单的vue<body><div id="app1">{{message}}</div><script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script><script> var

2021-07-29 11:15:54 133

原创 RestFul风格学习

定义RestFul风格定义restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 ——百度百科在REST中,每一个对象都是通过URL来表示的,对象用户负责将状态信息打包进每一条消息内,以便对象的处理总是无状态的。它是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。REST 的基本原理包

2021-06-01 23:28:19 146

原创 Maven静态资源过滤

使用Maven构建项目的时候,会默认过滤掉静态资源< include>里指定过滤的文件,默认是pom.xml的位置false是不过滤<build> <resources> <resource> <directory>src/main/java</directory> <includes>

2021-05-30 20:55:07 304

原创 JavaScript笔记

引入js1.内部标签<script></script>2.外部引入有一个js文件 xxx.js<script src = xxx.js></script>js里一般使用===,绝对等于,只有类型一样,值一样才为true NaN不能参与比较,只有isNaN(NaN)才为truenull 空 undefined 未定义数组 js不需要相同类型,和Java不同var arr = [1,2,3,'thl',null,true];对

2021-05-27 21:01:52 484 5

原创 CSS选择器

基本选择器标签选择器h1{}p{}但是如果有复数标签,它只能统一修改样式它是选择一类标签类选择器< h1 class=“important”>This heading is very important.< /h1>< p class=“important”>This paragraph is very important.< /p>.style1(类名){}来修改样式可以实现复用选择所有class属性一直的标签,跨标签id

2021-05-10 20:43:36 179

原创 Mybatis配置和一个简单的mybatis程序

为什么需要Mybatis帮助程序员将数据存入到数据库中传统的JDBC代码太复杂了,简化,框架,自动化优点:简单易学灵活sql和代码的分离,提高了可维护性。提供映射标签,支持对象与数据库的orm字段关系映射提供对象关系映射标签,支持对象关系组建维护提供xml标签,支持编写动态sql一、创建一个Maven工程1.删掉src目录好处是子项目再也不用导包了2.导入依赖<!--导入依赖 --> <dependencies>

2021-03-29 20:05:02 95 1

原创 监听在线人数demo

创建Maven项目配置pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mave

2021-03-17 20:55:16 79

原创 Servlet,ServletContext,Request,Response总结

Servlet定义概念:Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。定位:Java Servlet用Java编写的服务器端程序(web application)。作用:其主要功能在于交互式地浏览和修改数据,生成动态Web内容。理解:狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,

2020-11-29 15:19:02 115

原创 求结构体大小公式附举例

结构体大小两个原则结构体变量中该成员的偏移量是该成员大小的整数倍结构体的总大小为结构体最宽基本类型的整数倍1 .先根据系统位数、编译器位数判定结构体中成员变量自身的大小;2.该成员的偏移量如果不是该成员变量自身大小的整数倍,编译器就会在前一个成员变量后面补几个字节,凑成原则1;3.如果最后整个结构体大小不是所有成员大小的整数倍,编译器就会在最后一个结构体成员后面补几个字节,凑成原则2;以这个结构体为例struct stu1{  int i;  char c;  double j;

2020-11-11 19:22:10 330

原创 SQL注入及如何解决

一.SQL注入SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。目前SQL注入大致分为普通注入和盲注普通注入:根据后台数据库提示有价值的错误信息进行注入盲注:有经验的管理员在给出错误页面时,没有提供详细的错误信息。测试者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探

2020-10-25 18:48:59 1248

原创 SQL练习题(员工表)

DROP TABLE IF EXISTS EMP;DROP TABLE IF EXISTS DEPT;DROP TABLE IF EXISTS SALGRADE;CREATE TABLE DEPT --部门表 (DEPTNO int(2) not null , --部门编号 DNAME VARCHAR(14) , --部门名称 LOC VARCHAR(13), --部门位置 primary key (DEPTNO) );

2020-10-25 16:09:51 3123 1

原创 MySql索引事物联查

1.索引1.1 概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现1.2 作用可用于快速定位,检索数据1.3 使用场景要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:数据量较大,且经常对这些列进行条件查询。该数据库表的插入操作,及对这些列的修改操作频率较低。索引会占用额外的磁盘空间。满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。反之,如果非条件查询列,或经常做插入、修

2020-10-18 17:53:32 139

原创 JavaSE总结(思维导图)

2020-10-08 19:09:59 151

原创 IO流基础知识(一)

IO流总结(一)java.io.OutputStream.字节输出流此抽象类是表示输出字节流的所有类的超类。定义了一些子类共性的成员方法:public void close() 关闭此输出流并释放与此流相关联的任何系统资源。public void flush() 刷新此输出流并强制任何缓冲的输出字节被写出public void write(byte[] b):将 b.length字节从指定的学节数组写入此输出流。publtc vold wrlte(byte[] b int

2020-09-27 13:45:04 88

原创 Java后台考核总结

一、基础语法Java有哪些数据类型?基本数据类型数值型整数类型(byte,short,int,long)浮点类型(float,double)字符型(char)布尔型(boolean)引用数据类型类(class)接口(interface)数组([])Java四种访问修饰符?作用范围分别是什么?访问修饰符 public,private,protected,以及default(默认)时的区别private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰

2020-09-27 13:16:14 777

原创 简单易懂的多线程初阶

认识线程进程是系统分配资源的最小单位,线程是系统调度的最小单位。一个进程内的线程之间是可以共享资源的。每个进程至少有一个线程存在,即主线程创建多线程的几种方式第一种方式创建Thread类的子类Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类实现步骤:1.创建一个Thread的子类2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么)3.创建Thread类的子类对象4.调用Thread类中的方法,开启新的线程,执行r

2020-09-19 16:03:44 102

原创 MySQL约束 与 查询(进阶)

1.数据库约束约束:数据库针对数据进行一系列的校验,如发现插入的数据不符合约束中描述的校验规则,就会插入失败,为了更好的保证数据的正确性。1.1 约束类型NOT NULL - 指示某列不能存储 NULL 值。UNIQUE - 保证某列的每行必须有唯一的值。DEFAULT - 规定没有给列赋值时的默认值。PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。FOREIGN KEY - 保

2020-07-27 21:57:07 331

原创 Java练习题(day01)

1.下面代码将输出什么内容:() public class SystemUtil{ public static boolean isAdmin(String userId){ return userId.toLowerCase()=="admin"; } public static void main(String[] args){ System.out.println(isAdmin("Admin")); } }A trueB false

2020-06-04 21:01:56 880

空空如也

空空如也

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

TA关注的人

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