- 博客(69)
- 收藏
- 关注
原创 坐标型\序列型\划分型动态规划
坐标型动态规划最简单的动态规划给定一个序列或网络需要找到序列中某个/些子序列或网格中的某条路径– 某种性质最大/最小– 计数– 存在性动态规划方程f[i]中的下标i表示以ai为结尾的满足条件的子序列的性质,f[i][j]中的下标i,j表示以格子(i,j)为结尾的满足条件的路径的性质– 最大值/最小值– 个数– 是否存在坐标型动态规划的初始条件f[0]就是指以a0为结尾的子序列的性质对于网格上的动态规划,如果f[i][j]只依赖于本行的f[i][x]和上一行的f[i-1][y],则
2021-04-17 09:54:26
352
原创 背包型动态规划
背包问题算是很经典的动态规划题型了,刚开始接触很容易想当然的用贪心来做…但是很容易能够举出反例。大致可以分为01背包、多重背包和完全背包。01背包题目内容:给定一个容量为w的背包和n个重量不同的物体,每个物体只能使用一次,问有多少种填满背包的方案。思路:从最后一个物体n开始考虑,要使背包装的重量为w,有两种情况:①背包无法装入n,则前n个物体能装满背包的最大方案数等于前n-1个物体能装满背包的最大方案数。②背包能够装入n,此时考虑前n个物体能装满背包的最大方案数等于{前n-1个物体能装满背包的最
2021-04-17 09:53:46
218
原创 java实现的MD5哈希算法
密码学的实验,参考 (照抄)了https://blog.csdn.net/jankingmeaning/article/details/84778668分享出来供大家学习讨论,最后哈希出来的值应该是和在线工具结果一样的。目录MD5 (MD:message digest,消息摘要)简介MD5 算法实现步骤1:增加填充位步骤2:附加消息长度值步骤3:初始化MD缓冲区步骤4: 以512位的分组(16个字)为单位处理消息基本逻辑函数g字组X常数表T循环左移位数LS步骤5:输出散列值代码实现MD5 (MD:me
2020-12-27 21:16:28
1616
原创 动态规划:基本思路和常见题型
看了九章算法的动态规划专题课,记录一下。动态规划可以解什么题计数有多少种方式走到右下角有多少种方式选出K个数使得和为sum求最大值或最小值从左上角走到右下角路径的最大数字和最长上升子序列长度求存在性取石子游戏,先手是否必胜能不能选出K个数使得和为sum基本思路确定状态从最后一步出发化解为子问题确定转移方程可以根据子问题定义直接得出考虑初始条件和边界情况确定计算顺序需要利用到之前计算的结果常见动态规划类型坐标型动态规划
2020-09-28 21:07:31
247
原创 拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。拓扑排序算法的基本步骤:构造一个队列q 和 拓扑排序的结果队列ans;把所有没有依赖顶点的节点(即入度为0的点)放入q;当q队列非空时,队首元素u出队,u进入ans队列。对所有u开始的边,它的终点v入度均减1。发现新的入度为0的点则将其加入q。重复3直到q为空。代码:publ
2020-09-26 09:32:53
124
原创 二分图最大匹配:匈牙利(Hungary)算法
基本概念二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图匹配:在图论中,匹配是指寻找图中没有任何两条边拥有一个共同顶点的子图最大匹配:一个图所有匹配中,所含匹配边数最多的匹配利用匈牙利算法可以得到二分图的最大匹配参考:1.匈牙利算法与增广路径 2.匈牙利算法代码实现:public
2020-09-25 15:34:09
262
原创 最小生成树:Prim算法
算法思想Prim算法用来寻找一颗带权连通图图的最小生成树(MST)。采用的是贪心策略。步骤如下:选取一个节点作为树根。此时所有节点被分为在生成树中的和不在生成树中的两部分。选取最短的一条连接生成树中的点与非树中的点的边,该点加入生成树集合。重复2直至找不到这样的边为止。代码实现public class Prim { static int[][] mp = new int[1001][1001]; //当数据规模超过10^5时会存不下 static int[] d = new int[1
2020-09-25 09:37:52
301
原创 欧拉通路:Hierholzer算法
基本概念欧拉通路:一条经过图上所有边的路径(每条边只经过一次)欧拉回路:当欧拉通路为回路时,称为欧拉回路对于无向图当无向连通图中不存在奇点时,该图存在欧拉回路当无向连通图中存在奇点且只存在两个奇点时,该图必定存在欧拉通路对于有向图若图连通且每个点的出度与入度相等,则存在欧拉回路若图连通、有且仅有两个点出度与入度不相等,且两个点入度与出度只差为1。则通路的起点一定是出度多1的点,终点一定是入度比出度多1的点Hierholzer算法给定欧拉通路/回路的起点开始递归函数dfs(
2020-09-24 17:03:43
1901
1
原创 Tarjan求强连通分量、缩点、割点、割边
一些概念连通:在图中,若i、j两点互相有路径可以到达则称这两点是连通的。连通图:如果图中任意两点都是连通的,那么图被称作连通图。如果此图是有向图,则称为强连通图。强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected compone
2020-09-24 09:34:25
139
原创 图最短路径:dijkstra算法 、 spfa算法
dijkstra算法对于一个权值非负的有向图,设有两个顶点集S,T;其中S集合中的顶点与源点的的最短已经求出。初始时S集合为空,T集合包含了所有的顶点。设数组D,D[i]表示源点到点i的最短距离,初始时D内源点值为0,其他值为无穷大。从T集合内选出最短距离最小的点,若找不到(T集合为空或者图不连通,有些点源点无法到达),则结束若找到最小的点,则将其加入S集合中,然后用该点的D[i]其更新相邻的D,更新完成后 回到第三步。package Graph;public class
2020-09-23 16:33:12
218
原创 sqli-labs Basic Challenges(less1-less22)
这一部分是比较基础的SQL注入练习,适合入门。考点在图中已经都说明了。常用闭合方式:单引号''、双引号""、括号()、括号+单引号('')、多层括号+单引号,例((((((((''))))))))。另外mysql还可以使用括号+双引号("")和多层括号+双引号((((((((""))))))))less-1请求方式:get拼接方式:id=‘$id’注入类型:联合、报错、布尔、延时payload:?id=-1' union select 1,group_concat(username),g
2020-09-02 02:32:42
149
原创 基本的四种SQL注入方式
目录联合注入基于错误的注入盲注延时注入以sqli-labs less-1为例构造 id=1 and 1=1或者id=1 and 1=2都能够正常查询出结果构造 id=1’ 报错,说明是字符型注入联合注入当查询数据会返回显示界面时可以考虑使用union联合查询的方式联合查询有两个必要条件:两张虚拟表具有相同的列数两张虚拟表对应列的数据类型相同所以当一个地方可以使用联合查询时基本步骤为:猜测虚拟表列数-》获取数据库名-》获取表名-》获取列名-》获取数据使用order by猜测列数可
2020-08-30 16:46:33
13584
1
原创 requests模块
安装requests模块pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests通过使用requests模块可以利用python实现对于网络的请求。主要的请求的方法:方法用途GET发送get请求,获取界面资源POST传输数据PUT传输文件HEAD发送一个head请求,获得响应头DELETE删除文件OPTIONS发送一个options请求,查询支持的方法请求方法
2020-08-18 02:53:04
183
1
原创 Linux 用户管理
目录创建用户口令管理删除用户查询用户信息切换用户修改账号增加删除组在Linux系统中,有三类用户,分别是系统用户、普通用户和根用户。普通用户:是 Linux的真实用户,这类用户可以通过用户名和密码登录,通常普通用户的UID大于500。系统用户:是系统运行时的一些特殊用户,这类用户往往不能登录到系统中,但是一些进程需要使用这类用户运行。UID为1-499根用户:又叫root,它的UID为0,也是系统中的超级用户,拥有最高权限。创建用户useradd [选项] 用户名注:当缺少选项时,
2020-07-20 15:39:59
150
原创 Linux vim简介
vim主要有三种模式。一般模式编辑模式命令行模式三种模式转化关系如图:从一般模式进入编辑模式可用的键有i\a\o\r, 但是一般使用i就已经足够了。它们的区别如下图:vim下常用的几个快捷键(我看到的是韩顺平老师的Linux课程,所以其实是老师总结的,嘻嘻):拷贝当前行:yy, 拷贝当前向下n行并粘贴:nyy删除当前行:dd, 删除当前行向下的n行:ndd在文件中查找某个关键字:/keyword, 输入n下一个,N上一个设置文件行号:set nu, 取消行号:set nonu
2020-07-19 18:01:08
190
原创 XShell rz、sz命令
XShell实现文件上传于下载除了利用xftp外,还可以通过使用rz、sz命令实现。首先需要安装lrzsz工具包yum install lrzszXShell6建立连接后即可直接使用rz命令上传文件。使用sz命令下载文件注:文件上传在rz命令执行的目录输入rz后即可选择要上传的文件。使用sz fileName 可以下载文件到Windows下。...
2020-07-19 15:33:45
7804
原创 二分答案
二分答案是在一组有界且有序数据范围内对答案进行枚举。以期寻求到最优解。常常用来求最大值中的最小值或最小值中的最大值问题。落谷P2678在起点和终点之间,有 N 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 M块岩石(不能移走起点和终点的岩石)。输入格式:第一行包含三个整数 L,N,M,分别表示起点到终点的
2020-07-11 23:21:57
208
原创 java实现C++ STL中的lower_bound( )和upper_bound( )
对于有序数组的查找经常会使用到二分法。在实际问题中我们遇到的数组中常常含有相同的元素。C++标准模板库STL中有lower_bound( )和upper_bound( )可以实现利用二分查找找到元素第一次出现的位置和最后一次出现的位置。但是java中的binarySearch()则无法实现之一要求。故需自己加以完善。思路是使用Arrays.binarySearch(arr, num)找到num在arr中的下标时判断该位置前或后的数是否与num相同,若相同则继续二分查找。public static int
2020-07-07 17:27:22
435
原创 Java竞赛小技巧:快速输入与输出
许多竞赛题对于时间和内存都有要求。而评判的标准大多是以C/C++为准,总之就是在使用java解题时当输入输出数据量一大就时常出现超时的情况。最主要的问题还是出现在Scanner上,它太慢了。解决方法是使用StreamTokenizer和PrintWriter进行输入输出。 StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out=ne
2020-07-07 15:22:51
4338
原创 SpringMVC接收表单数据乱码问题
想要从前端表单中接收一个作者,然后根据作者名字查询该作者的全部作品。------------<br/> <form method="get" action="queryBooks"> 作者:<input type="text" name="bookAuthor"> <input type="submit" value="查询"> </form>一直查询的结果都是空。可是调试发现controller已经接
2020-05-17 23:13:45
202
原创 springMVC : 使用Java类配置springMVC
在servlet 2.5的情况下,要将DispatcherServlet配置到servlet容器中需要配置web.xml,使用spring同样需要配置web.xml<!-- 引入spring --> <!-- needed for ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-val
2020-05-14 14:57:59
193
原创 spring :profile的切换
profile用于指定bean所属的环境,只有当这个环境被激活时,对于的bean才会被装入容器中。profile最常见的应用是数据库环境的切换。可通过spring的 spring.profiles.active 和 spring.profiles.default 属性确定当前环境。用两个简单的类来模拟两个不同的数据环境:public class C3p0 { String dataSo...
2020-04-28 23:50:24
188
原创 spring :bean的初始化和销毁方法
通过初始化和销毁方法可以在bean刚刚被创建时和销毁时对其进行一些我们需要的处理。spring下实现初始化和销毁方法的方式主要有以下:自定义初始化和销毁函数,声明bean时通过initMethod 、destroyMethod指定实现InitializingBean,、DisposableBean接口使用@PostConstruct、 @PreDestroy实现BeanPostProc...
2020-04-28 16:47:05
391
原创 Spring :@ComponentScan设置需要过滤或扫描的bean
@ComponentScan可以用来将指定的某些包下所有带有@Component、@Repository、@Controller、@Service的类加入到spring容器中。但是有时候,我们可能希望过滤掉一些类,或者根据实际情况的不同加入不同的类。这是就需要使用到includeFilters和excludeFilters形式类似于:@ComponentScan(value="package"...
2020-04-26 18:08:42
1227
原创 spring :整合mybatis
需要的jar除了普通spring项目需要的jar、mybatis需要的jar;还需要一个mybatis-spring.jar在applicationContext.xml中配置数据库信息mybatis操作数据库,对应于数据访问层。spring整合mybatis就是将dao层用mybatis处理。以往的mybatis项目中中通过mybatis的config.xml文件加载数据库信息获得SQLS...
2020-04-25 19:05:05
107
原创 spring :结合c3p0实现声明式事务(注解)
通过声明事务可以使service层一系列操作要么全部完成要么全部不完成。需要的jar包:spring-tx-5.2.5.RELEASE.jarspring-jdbc-5.2.5.RELEASE.jarc3p0-0.9.1.2.jar 也可以是dbcpmysql-connector-java-8.0.19.jar 使用什么数据库就使用对应的jdbcaopalliance.jar...
2020-04-16 15:33:33
251
原创 mybatis : 多个输入参数问题
一般我们在传入参数时都会借助到pojo类。但mybatis也提供了直接传入多个参数的方法。此时在mapper.xml文件中的SQL语句不用再写parameterType属性,而是用arg0,arg1,arg2,arg3…或者param1,param2,param3…代替。mapper.xml<insert id="addStudent"> insert into studen...
2020-04-11 00:09:30
486
转载 mybatis :缓存机制
种草一篇不错的博客:https://www.cnblogs.com/wuzhenzhao/p/11103043.html
2020-04-08 14:12:10
74
原创 mybatis :延迟加载
为什么需要延迟加载在涉及到关联查询中的一对多时,假设我们只需要获取“一“部分的数据,那么显然没有查询剩下来的多的必要。比如,学生班级中有全班学生的信息,但是有时候我们查询班级仅仅是想获得班级的基本信息(班级编号之类的)而不关心班级的学生,这时就可以用到我们的延时加载(lazyLoad)。延迟加载延迟加载(也称按需加载或懒加载)是相对立即加载而言提出的。立即加载即不管数据需不需要都一并查询,...
2020-04-07 23:26:39
167
原创 mybatis :log4j日志
使用log4j的三个步骤导入log4j.jar配置conf.xml <settings> <!-- 开启并指定使用的日志类型 --> <setting name="logImpl" value="LOG4J"/> </settings>若此处没有指定日志类型,则mybatis会按照SLF4J →Apache Commons...
2020-04-07 21:19:55
116
原创 mybatis :关联查询
在mybatis中对于关联查询分为两种情况,一对一和一对多。两张表连接起来时,相对应的,实体类中应该增加一个属性来维护两者之间的关联关系。一对一现在,要求查询学生和学生卡信息,一个学生对应一张学生卡,所以学生类中应该有一个学生卡属性,这个属性就维护了学生和学生卡之间一对一的关系。mapper.xml<select id="queryStudent1To1WithSid" param...
2020-04-07 17:03:10
93
原创 mybatis :动态SQL标签
if标签有时SQL语句不一定是写死的,需要根据具体调用时传入的参数来确定选择条件,这时可以用到if标签。<select id="queryPersonName" parameterType="entities.Person" resultType="String"> select name from person where 1=1 <if test="id!=nul...
2020-04-06 19:48:19
257
原创 mybatis :调用存储过程
调用的存储过程CREATE DEFINER=`root`@`localhost` PROCEDURE `queryStudentName`(IN id char(10), OUT stuname VARCHAR(10))BEGINselect sname into stuname from student where sid = id;end配置映射文件<?xml versio...
2020-04-05 17:15:29
233
原创 mybatis : 动态代理crud
基础方式的crud需要使用到一个statement作为参数告诉session我要执行哪个SQL语句,不利于管理。采用动态代理方式,引入一个接口就能像调用函数一样直接调用SQL。接口编写对于接口编写时需要注意几点,这是mybatis的约定,遵循约定mybatis才能理解接口的意思。方法名和mapper.xml文件中标签的id值相同方法输入参数和parameterType相同方法返回值和r...
2020-04-02 15:07:26
125
转载 Mybatis 类型转换器
MyBatis 类型转换器每当MyBatis设置参数到PrepareStatement或者从ResultSet结果集中取值时,就会用到TypeHandler来处理数据库类型与Java类型之间的转换。myBatis类型转换器适用于 Java实体类中的类型和数据库中的类型不对应时。比如:Java实体类中有一个Boolean类型的字段flag,对应到数据库flag字段中类型是int。这时我们会使用...
2020-04-02 13:51:08
442
原创 mybatis初探 :conf.xml和Mapper.xml
百科定义:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。MyBatis 是支持...
2020-04-01 13:36:38
154
转载 script标签放在head标签与body标签中的区别
html代码是从上往下依次执行,<script>放在<head>中时,会在页面加载之前加载到浏览器里,放在<body>中时,会在页面加载完成之后读取。所以:在head中checkInput1 为undefined,而在body的script标签中checkInput2为Object<html> <head> <tit...
2020-03-28 15:58:33
1634
原创 ApacheDButils常用方法及手动提交事务实现
使用ApacheDButils 需要导入commons-dbutils-1.7.jar包里面有几个比较重要的类DbUtilsDButils类中有许多静态方法。1)public static void close(...) throws SQLException ①public static void close(Connection con) throws SQLException...
2020-03-26 14:58:05
405
原创 JNDI
初学jndi还是似懂非懂。看了这几篇博客感觉理解多了。甚至自己都不用动手写关于JNDI的博客了(我不配 )。第一篇:什么是JNDI第二篇:Tomacat配置全局和私有JNDI数据源这里配置的是Tomcat自带的连接池,Tomcat-dbcp对于几种常见的数据库的配置方式:常见数据库JNDI数据源配置说明第三篇:tomcat下使用c3p0数据库连接池配置JNDI数据源...
2020-03-22 18:22:39
78
原创 JavaScript 事件
详细事件信息:https://www.w3school.com.cn/jsref/dom_obj_event.asp绑定事件的三种方法属性直接赋值 element.ontype = function(event){ }使用此方式同一类型事件只可以绑定一个处理函数element.addEventListener(type, func, false)使用此方式同一事件可以绑定多个处理函数(...
2020-03-17 23:37:10
98
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人