自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (6)
  • 收藏
  • 关注

原创 动态规划问题之闫式DP分析法总结

闫式DP分析法参考视频: https://www.bilibili.com/video/BV1X741127ZM/?spm_id_from=333.788.videocard.0分析思想DP问题一般是求若干有限集合中的最值问题,并且此类问题存在子问题重叠(Overlap-subproblems),如果通过暴力枚举每种可能解决问题,那么将会有大量重复的计算;如果从集合角度来分析DP问题,每次枚举一个集合并且利用子问题重叠特性,将子问题的解存储下来,可以大大提高效率;DP问题的核心是状态集合 f

2020-11-18 21:17:48 413

原创 8-加权有向图的遍历(前序、后序、拓扑)和最短路径树(Dij、BF、Flyod)

有向图的可达性(遍历)与无向图不同,有向图的遍历(或者叫排列)基于DFS,分为以下三种:前序遍历:根最先后序遍历:根最后逆后序遍历(拓扑排序)拓扑排序是将DAG中所有顶点排成一个线性序列,使得图中任意一对顶点 u 和 v,若边<u,v>∈E(G),则 u 在线性序列中出现在 v 之前;定理1:当且仅当一幅有向图是无环有向图(DAG)时它才能进行拓扑排序(即拓扑有序);定理2:一幅有向无环图的拓扑顺序即为所有顶点的逆后续排列;注意:在拓扑排序之前必须检查图中有没有环,如果有则返回

2020-11-18 21:16:15 1283

原创 7-加权无向图的遍历(DFS、BFS)和最小生成树(Prim、Kruskal)

无向图的遍历DFS算法思想深度优先搜索思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。算法特点:栈深度优先搜索是一个递归的过程。首先,选定一个出发点后进行遍历,如果有邻接的未被访问过的节点则继续前进。若不能继续前进,则回退一步再前进,若回退一步仍然不

2020-11-18 21:14:52 2429 1

原创 6-二叉搜索树、平衡二叉树、红黑二叉树

树树的定义:树是一种数据结构,它是由n(n>=1)个有限结点组成的一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树;树的大小:节点的数量;树中一个节点的深度:该节点到根节点的路径上的链接数;树的高度:所有节点中的最大深度;根节点的深度:0,所以只含根节点的树的高度为0。二叉搜索树

2020-11-18 21:13:45 165

原创 5-各种排序算法的总结

性能指标稳定性:如果一个排序算法能够保留数组中重复元素的相对位置则可以称为是稳定的。原地排序:如果在排序过程中,是直接在输入数组上进行操作(比较和交换)来完成排序的,则称为原地排序。时间复杂度:交换和比较的次数随数组规模 N 增长的函数。空间复杂度:需要额外的空间随数组规模 N 增长的函数。各种排序算法的比较算法是否稳定是否原地排序时间复杂度空间复杂度备注选择排序否是N^21插入排序是是N~N^21取决于输入元素的顺序希尔排序否

2020-11-18 21:11:53 68

原创 4-排序之优先队列与堆排序

优先队列堆有序定义:当一颗二叉树的每个节点都大于等于(或小于等于)它的两个子节点时,它被称为堆有序。堆有序原理:根节点是堆有序的二叉树的最大节点(最小节点)。二叉堆表示法:堆有序的二叉树使用完全二叉树来表示,由于使用了完全二叉树,使得我们可以用数组来存储二叉堆,而数组的索引代表节点的位置,即按照层级顺序放入数组,根节点在索引1(第一个位置不使用),两个子节点在索引2,3…二叉堆定义:二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级存储(不使用数组中的第一个元素)。优先队列:基于

2020-11-18 21:11:17 127

原创 3-排序之快速排序

import java.util.Arrays;import java.util.Collections;import java.util.List;/** * 快速排序:基于分治思想,将一个数组分成两个数组独立排序,与归并排序是互补的,与归并排序不同的是它不是任意的划分,而是基于某个值的切分,使两边的数组分别不大于 * 和不小于这个值,所以当两边子数组都有序时整个数组也有序了,并不需要归并;其核心方法是切分,切分的过程也就是排序的过程,每次切分后返回选定值的索引。 * 时间复杂度:对于长..

2020-11-18 21:10:39 76

原创 2-排序之归并排序

import java.util.Arrays;/** * 归并排序:基于递归和分治的思想,将一个数组对半分,然后将结果归并起来,被对半的数组又可以递归的对半分和归并... 其核心方法是原地归并,归并的过程就是排序的过程。 * 时间复杂度:对于长度为N的任意数组,归并排序需要 1/2NlogN~NlogN 次比较,最多访问数组 6NlogN 次。 * 特点:能够将任意长度为N的数组排序所需时间降低到与NlogN成正比,主要缺点是所需的额外空间和N成正比。 * 理论:归并排序是一种渐进最优的基于比

2020-11-18 21:09:57 141

原创 1-排序之初级排序算法(选择排序、插入排序、冒泡排序、希尔排序)

import java.util.Arrays;/** * 初级排序算法: * 选择排序 -- N^2 * 插入排序 -- N ~ N^2 * 希尔排序 -- NlogN ? * * 高级排序算法: * 归并排序 -- NlogN * 快速排序 -- NlogN * 堆排序 -- NlogN */public abstract class Sort { protected Comparable[] toBeSortedArray; // 待排序的数组

2020-11-18 21:09:17 94

原创 Scanner类的next、nextLine、hasNext、hasNextLine

hasNext() 是检测还有没有下一个输入;next() 是指针移动到当前下标,并取出下一个输入;nextLine() 把指针移动到下一行 让然后取出当前这一行的输入;hasNextLine() 是检测下一行有没有输入。next/next**:next 方法在缓存区读取内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next 方法会自动将其过滤掉;只有在读取到有效字符之后,next 方法才将其后的空格键、Tab键或Enter键等视为结束.

2020-11-15 13:27:57 305

原创 正则表达式

正则表达式中的常用字符特殊字符及其操作特殊字符说明^边界匹配符:匹配一行的开头,不占用字符$边界匹配符:匹配一行的结尾,不占用字符.表示任何单个字符?前一个字符 0 次或 1 次扩展*前一个字符 0 次或 无限次扩展+前一个字符 1 次或 无限次扩展|指定两项之间任选一项,例 abc | def 表示 abc、def\用于转义下一个字符( )分组标记,可将多个表达式合并成一个子表达式,内部只能使用 | 操作符[

2020-11-13 20:29:06 97

原创 对于数据结构的理解

程序是什么?程序 = 数据结构 + 算法;把编写程序想象成搭积木的过程,那么数据结构就是一块块形状各异的积木块,而算法则是你要搭配它们的策略,只有你真正了解了每个积木块的特点和用途,然后运用不用的算法,就可以搭建出漂亮的房子、车子…最基本的数据结构是什么?很多人可能对这个问题一头雾水,数组?栈和队列?他们都很基本啊,但显然我想要的答案不是这些,最基本的数据结构是变量,在面向对象的语言中,这个变量的范畴会更加宽泛,例如在Java中,变量包括基本类型变量(基本类型的实例)和对象(类的实例)。接下来我会解

2020-10-30 11:03:57 220

原创 数据库中的范式——从1NF到BCNF

范式一张数据表的表结构所符合的某种设计标准的级别,范式越高,数据表的安全性越高,但查询速度越慢。数据库范式分为:1NF,2NF,3NF,BCNF,4NF,5NF,6NF;一般的数据库到3NF就可以满足基本的设计要求。范式定义1NF关系中每个属性不可再分2NF在第一范式的基础上消除非主属性对于任何一个候选码的部分函数依赖3NF在第二范式的基础上消除非主属性对于任何一个候选码的传递函数依赖BCNF在第三范式的基础上消除主属性对于任何一个候选码的部分函数依赖和传递

2020-09-08 10:39:45 3300 2

原创 一招速记Comparable和Comparator

Comparable、 Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序。怎么理解哪?在这教大家一个速记法,如果英语好的人很容易区分这两者,因为它们的名字已经告诉了我们他们两个最大的区别。后缀able代表某事物具有什么能力,很显然实现了Comparable接口的类自身具有比较大小的能力,假如A类实现了Comparable接口,那么他可以直接调用a1.compareTo(a2)与另一个对.

2020-08-06 17:16:03 239

原创 volatile、synchronized原理与Java内存模型(JMM)

JMMJMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。 其实我们的JAVA程序的执行在内存中是通过一条条指令(编译成字节码)来完成的,而且一行代码往往对应着一到多条指令。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受 cpu 缓存的影响有序性 - 保证指令不会受 cpu 指令并行优化的影响首先需要明确的一点是:这三个特性是针对多线程而言,单个

2020-07-15 23:05:00 257

原创 ReentrantLock详解

ReentrantLock简介都支持可重入,相对于 synchronized 它还具备如下特点可中断可以设置超时时间可以设置为公平锁支持多个条件变量(可理解成多个WaitSet)基本语法// 获取锁(也可以放在try里面)// lock 和 unlock 之间代码的都可以看作临界区reentrantLock.lock();try { // 临界区} finally { // 释放锁 reentrantLock.unlock(); }可重入与 syn

2020-07-15 23:03:08 316

原创 锁的活跃性——死锁、活锁和饥饿

死锁死锁现象有这样的情况:一个线程需要同时获取多把锁,这时就容易发生死锁 。t1 线程 获得 A对象 锁,接下来想获取 B对象 的锁t2 线程 获得 B对象 锁,接下来想获取 A对象 的锁例:@Slf4j(topic = "c.TestDeadLock")public class TestDeadLock { public static void main(String[] args) { test1(); } private static voi

2020-07-15 23:01:48 227

原创 park & unpark

基本使用park 和 unpark 是 LockSupport 类中的方法// 暂停当前线程 LockSupport.park();// 恢复某个线程的运行LockSupport.unpark(暂停线程对象);park&unpark 与 wait&notify 异同park和wait都会让线程进入WAITING或TIMED_WAITING状态;wait、notify 和 notifyAll 必须配合 Object Monitor 一起使用;而 park、unpark 不必

2020-07-15 22:58:49 340

原创 深入解析join源码和保护性暂停模式

join源码解析和保护性暂停模式join(long millis):等待被join的线程的时间最长为millis毫秒。如果在millis毫秒内被join的线程还没有执行结束,则不再等待。源码如下:// wait方法必须在synchronized块里使用,然后让加锁的对象调用wait方法public final synchronized void join(long millis)throws InterruptedException { long base = System.current

2020-07-09 23:05:31 572

原创 linux 当前路径和绝对路径

linux 相对路径和绝对路径在执行路径时,我们经常用到相对路径和绝对路径,但很多人依然不知道具体的用法表示相对路径(两种)什么也不加例如我们当前在/usr目录下,想要切换到/usr/bin目录下,就可以直接cd bin​ ./例如我们当前在/usr目录下,想要切换到/usr/bin目录下,也可以cd ./ bin​ 表示绝对路径/但是我们可不可以只用/哪,我们试一下,我们发现它实际上到了根目录下的/bin,如果我们想用/,只能写完整的绝对路径/usr/

2020-07-02 22:05:35 2164

原创 Thread类里的线程状态和操作系统层面的线程状态

五种状态这是从操作系统层面来描述的。操作系统层面--线程的生命周期(五种状态)-中文操作系统层面--线程的生命周期(五种状态)-英文新建状态:仅是在语言层面创建了线程对象,还未与操作系统线程关联可运行状态(就绪状态):指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行运行状态:指获取了 CPU 时间片运行中的状态 当 CPU 时间片用完,会从运行状态转换至可运行状态,会导致线程的上下文切换阻塞状态:如果调用了阻塞 API,如 BIO 读写文件,这时该线程实际不会用到 CP

2020-06-30 18:12:23 346

原创 Thread类方法之三--setDaemon

主线程与守护线程默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。Thread有一个setDeamon方法,将当前线程设置为守护线程,其中daemon是一个boolean值,通过源码我们发现,他会先通过isAlive方法判断线程的状态。简单介绍一下isAlive方法:判断当前的线程是否处于活动状态。活动状态是指线程已经启动且尚未终止,线程处于正在运行(Running)或就绪(R

2020-06-30 17:21:12 285

原创 Thread类方法之二--interrupt

interrupt 方法打断线程case1:打断sleep, wait, join (阻塞)的线程case2:打断运行中的线程打断阻塞状态中的线程,会抛出一个InterruptedException异常,并且会重置打断标记。介绍一下打断标记Thread类里有一个isInterrupted方法可以返回当前线程是否被打断,被打断返回true,否则false。public boolean isInterrupted() { return isInterrupted(false)

2020-06-30 00:48:31 3801

原创 有道云笔记markdown文件插入图片小窍门

突然发现了一个蛋疼的小窍门,怎么在不充会员的前提下在有道云笔记markdown文件中插入图片,果然是贫穷激发了我的想象力。step1::将本地图片直接拖到有道云笔记中step2: 分享图片,获得链接打开链接,右击图片,复制图片地址step3: 在要插入的md文件中写![image](刚才复制的图片地址)当然如果是插入网上的图片,那可以忽略 step1...

2020-06-29 21:57:21 991 2

原创 Vim入门操作大全

下文出现的所有类似Ctrl+a或者n>>这种形式的命令都代表快捷键操作;如果是底线命令都加了:移动光标基本操作h j k l左 下 上 右高级操作按键含义0将光标定位到行首的位置^将光标定位到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)$将光标定位到行尾的位置g_将光标定位到本行最后一个不是blank字符的位置b将光标定位到光标所在单词的起始处.

2020-06-28 19:49:19 353

原创 MySQL中的存储过程与存储函数

刚开始接触存储过程和存储函数的时候可能会产生误解,这里的“存储”并不是指这种语句是数据库用来存储数据的,“存储”的真正含义是存储预编译的语句,可以简单地把它理解成类似其他编程语言里的函数。存储过程:存储过程就是提前编译好的一段pl/sql语言,放置在数据库端,可以直接被调用,这一段pl/sql一般都是固定步骤的业务。存储函数:在存储过程的基础上加上返回值。MySQL中的存储过程和存储函数跟Oracle中的原理相同,语法也几乎一样,只有细微的差别,但他们的参数列表还是有较大差异的。1. 存储过程

2020-06-24 14:42:37 161

原创 MySQL中的变量

变量分类:系统变量全局变量会话变量自定义变量用户变量局部变量系统变量变量由系统提供,不是由用户自定义的。相关语法 查看所有的系统变量(全局|会话,如果缺省默认为session)SHOW GLOBAL|SESSION VARIABLES; 查看满足条件的部分系统变量SHOW GLOBAL|SESSION VARIABLES LIKE '%char%'; 查看指定的某个系统变量的值SELECT @@global|@@session.系统变量名;.

2020-06-24 13:45:20 113

转载 step over、step into...

step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。所以在不存在子函数的情况下是和step into效果一样的(简而言之,越过子函数,但子函数会执行);step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数);force step into能够进入所有的方法,比如jdk的方法,而step into只会进入自己写的方法;step out:当单步执行到子函数内时,用step out就可以执.

2020-06-24 00:46:31 202

原创 Oracle中的触发器入门

触发器,就是制定一个规则,在我们做增删改操作的时候,只要满足该规则,自动触发,无需调用。语句级触发器:不包含有for each row的触发器;行级触发器:包含有for each row的触发器。加for each row是为了使用 :old 对象或者 :new 对象(一行记录),其含义如下表。触发语句:old:newinsert所有字段都是空(null)将要插入的数据update更新以前该行的值更新后的值delete删除以前该行的值所有字段都为空(

2020-06-22 12:55:11 165

原创 Oracle中的存储过程与存储函数

刚开始接触存储过程和存储函数的时候可能会产生误解,这里的“存储”并不是指这种语句是数据库用来存储数据的,“存储”的真正含义是存储预编译的语句,可以简单地把它理解成类似其他编程语言里的函数。存储过程:存储过程就是提前编译好的一段pl/sql语言,放置在数据库端,可以直接被调用,这一段pl/sql一般都是固定步骤的业务。存储函数:在存储过程的基础上加上返回值。我们以scott用户下的表为例:-- 给指定员工涨100块钱create or replace procedure p1(eno emp.

2020-06-22 12:52:28 145

原创 pl/sql语言入门

pl/sql是一种编程语言pl/sql编程语言是对sql语言的拓展,使得sql语言具有过程化编程的特性;pl/sql编程语言比一般的过程化编程语言更加灵活高效;pl/sql编程语言主要用来编写存储过程和存储函数等。pl/sql中的变量类型pl/sql语句必须写在声明的方法中,有固定的格式,其中declare部分可省略,下面介绍简单的声明方法结构及其变量类型。注意:本文涉及到的用例以scott用户下的表格为例;如果你在sql developer上执行dbms输出可以去’查看’–>

2020-06-22 12:48:15 368

原创 视图的常用作用总结

视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种封装SELECT语句的方式,可用来简化数据处理,重新格式化或保护基础数据。创建视图必须有DBA权限,因为视图主要用来查询,不建议用来修改数据,所以很多视图都创建为只读的:CREATE VIEW view_name AS SELECT... WITH READ ONLY;主要作用如下:通过++重用SQL语句++,简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节。利用视图简化复杂的联结;--

2020-06-16 13:16:43 657

原创 Oracle、MySQL中的分页查询

分页查询在Oracle和MqSQL上的实现有很大区别,首先介绍在MySQL上的实现:MySQL中的分页查询1. limit 是一个MySQL"方言"2. 语法:limit 每页查询的条数 offset 开始的索引, 简化版:limit 开始的索引,每页查询的条数;3. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数 -- 每页显示3条记录 SELECT * FROM student LIMIT 0,3; -- 第1页 SELECT * FROM student LI

2020-06-14 20:31:37 240

原创 WHERE和HAVING的区别其实很简单

having子句和where子句非常容易混淆,它们都有过滤功能,但它们有如下区别。where过滤行,即分组前的数据,where必须在group by之前;having过滤分组,即分组后的数据,having必须groud by之后。以Oracle数据库下scott用户的表为例:查询出平均工资高于2000的部门ID及其对应的平均工资:select e.deptno, avg(e.sal)from emp e group by e.deptnohaving avg(e.sal)>20

2020-06-14 15:41:05 496

原创 Oracle体系结构入门

初学Oracle,会对Oracle的体系结构感到困惑,因为它跟MySQL有很大区别,首先介绍几个重要概念:数据库:数据库指的是用户存储数据的一些物理文件(包括ORA或者DBF、控制文件、联机日志、参数文件)。实例:一个Oracle实例(Oracle Instance)有一系列的后台进程和内存结构组成,一个数据库通常只有一个实例,也可以有n个实例。用户:用户是在实例下建立的,一个实例可以有多个用户,用户是管理表的基本单位,而MySQL中是数据库。表空间:表空间是Oracle对物理数据库上相关数据文件

2020-06-13 19:41:47 113

原创 数据库中的各种约束

1. 非空约束:not null 2. 唯一约束:unique 3. 主键约束:primary key 4. 外键约束:foreign key 5. 检查:check

2020-06-12 13:30:34 2322

原创 深入理解数据库中的各种连接

按照我的理解,我将数据库中的连接分类如下图,稍后我将解释我为什么这么分。所有的广义内连接的核心和共同点是完全基于笛卡尔积原理的,两个表进行笛卡尔积运算得到的结果表是由第一个表的每一行与第二个表的每一行拼接后形成的表,称为‘笛卡尔积表’,结果表的行数等于两个表的行数之积,接下来介绍的所有广义内连接的结果都能在笛卡尔积表里找到。

2020-06-03 13:59:04 1243

原创 MySQL 8.0.20安装教程(Win10)—— 免安装版

MySQL有两种安装方式:通过MSI Installer安装;直接解压配置文件安装(免安装)。第二种方式更简单直接,这里介绍第二种安装方式(反正第一种我没安装成功haha)。

2020-05-26 17:00:45 19395 13

转载 禁忌搜索算法代码注释

在网上看到了一位别人写的禁忌搜索的代码,看了半天才理解,为了让大家更好地理解,我在别人代码的基础上添加了详细的注释,代码我按照算法流程图注释的,配合流程图看会更容易理解。大家可以把代码复制到matlab里看,有详细的分块,看起来会清楚一些这里是原文:禁忌搜索算法(Tabu Search)>%% 一个旅行商人要拜访全国31个省会城市,且每个城市只能拜访一次,求所有路径之中的最小值% 禁忌搜索算法求解TSP问题function [BestShortcut,theMinDistance]=Ta

2020-05-23 11:17:10 4602 4

原创 Thread类的方法之一--start、run、sleep、yield、join

Thread类的sleep(),yield(),join()方法,以及Object类的wait()方法好像都有暂停线程的意思,区别是什么,怎么用?

2020-05-10 19:51:55 521

SQL必知必会样例格数据以及SQL脚本.zip

SQL必知必会样例格数据以及SQL脚本.zip

2020-06-03

微软常用运行库2008-2019.zip

安装软件时如果由于缺少微软的一些运行所需的库而失败,安装这个可以一键解决,仅需一次点击,一次性安装,再也不用一个一个下载安装了

2020-05-27

吴恩达机器学习大作业完成版!

吴恩达机器学习大作业完成版! 吴恩达机器学习大作业完成版!

2019-07-23

Java编程思想(第四版)练习完整版答案.rar

Java编程思想(第四版)练习完整版答案

2019-07-23

狐狸和兔子代码-Java

这是配套大学mooc上翁凯老师的Java进阶,狐狸和兔子的源代码,大家可以参考一下。

2018-12-19

java核心技术第十版源代码

java核心技术第十版源代码,英文版的书籍已经有第十一版,但中文翻译本最新的是第十版,书里讲的非常全面,适合初学者,这是书中的源代码。

2018-12-03

空空如也

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

TA关注的人

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