自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java-BIO

Java BIO概述IO流的分类文件流(节点流)缓冲流转换流标准输入& 输出流打印流数据流对象流随机存取文件流概述全程为 Block Input/Output(同步阻塞式输入/输出), 指的就是传统 IO, 是用于处理设备之间的数据传输. 如 读写文件, 网络通讯等数据的输入或输出操作是以流(Stream)的方式进行IO流的分类按照操作数据的单位: 字节流(8bit), 字符流(16bit)字节流: 非文本文件, 就是按照二进制形式进行读写操作. 如 .mp3,.avi,.r

2020-11-30 22:33:50

原创 Java-List& Set& Map

List& Set& MapArrayList / LinkedList / Vector特点及比较ArrayList特点:LinkedList特点:Vector特点:MapHashMap / LinkedHashMap / TreeMap / Hashtable / Properties特点及比较HashMap特点:LinkedHashMap特点:TreeMap特点:Hashtable特点:Properties特点:HashSet / LinkedHashSet / TreeSet特点及比

2020-11-23 21:02:44 27 1

原创 算法-马踏棋盘算法

马踏棋盘算法概述概述马踏棋盘算法也被称为骑士周游问题, 规则是将马随机放在国际象棋的6x6棋盘(board[05][05])的某个方格中, 马儿走棋规则(马走日字)进行移动, 且每个方格只进入一次, 走遍所有方格代码思路深度优先搜索(Depth First Search): 每当走到尽头未走完所有方格, 便会回退, 也就是会发生大量的回溯使用贪心算法(Greedy algorithm), 优化深度优先搜索时产生的回溯代码实现public class HorseChessbo

2020-11-14 19:49:05 36

原创 算法-最短路径算法(弗洛伊德算法 Floyd`s algorithm)

Floyd`s algorithm概述最短路径问题概述弗洛伊德算法(Floyd’s algorithm)也是最短路径算法, 用于计算图中各个顶点之间的最短路径. 与迪杰斯特拉算法(Dijkstra’s algorithm)不同的是, 迪杰斯特拉算法是指定某一个顶点到其它顶点的最短路径, 而弗洛伊德算法是每一个(所有)顶点到其它顶点的最短路径最短路径问题胜利乡有7个村庄(A,B,C,D,E,F,G)各个村庄的距离用边线权值来表示, 比如 A-B距离5公里计算出各个村庄到其它各个村庄的最

2020-11-13 19:17:47 36

原创 算法-最短路径算法(迪杰斯特拉算法 Dijkstra`s algorithm)

Dijkstra Algorithm概述最短路径问题概述迪杰斯特拉算法(Dijkstra Algorithm)是最短路径算法, 用于计算一个节点到其它节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想), 直到扩展到终点为止最短路径问题战争时期, 胜利乡有7个村庄(A,B,C,D,E,F,G), 现在有六个邮差, 从 G点出发, 需要分别把邮件分别送到 A,B,C,D,E,F,G六个村庄各个村庄的距离用边线权值来表示, 比如 A-B距离5公里计算出 G村庄到其

2020-11-12 20:22:07 32

原创 算法-最小生成树算法(克鲁斯卡尔算法 Kruskal`s algorithm)

Kruskal`s algorithm概述公交站问题概述克鲁斯卡尔算法(Kruskal`s algorithm)也是求最小生成树的算法, 也就是在包含 n个顶点的带权无向连通图中, 找出(n-1)条边的最小耗费生成树(Minimum Cost Spanning Tree), 简称 MST克鲁斯卡尔算法的时间复杂度为 O(eloge) e为网中的边数基本思想: 将所有的边, 按照权值从小到大进行排序, 并保证边的终点不构成回路(指每个边的终点不允许重合)公交站问题某城市有7个居民区(A,B,

2020-11-11 20:45:26 142 2

原创 算法-最小生成树算法(普里姆算法 Prim`s algorithm)

Prim’s algorithm概述修路问题概述普里姆算法(Prim’s algorithm)是求出最小生成树的算法, 也就是在包含 n个顶点的带权无向连通图中, 找出(n-1)条边的最小耗费生成树(Minimum Cost Spanning Tree), 简称 MST普里姆算法的时间复杂度为: 邻接矩阵 O(v^2), 邻接表 O(elog2v) e为网中的边数修路问题有叫(A,B,C,D,E,F,G)的7个村庄, 现在需要将这7个村庄通过修路连通. 各个村庄的距离用边线权值来表示, 比如

2020-11-10 19:54:33 42

原创 算法-贪心算法(Greedy algorithm)

Greedy Algorithm概述贪心算法最佳应用-集合覆盖两种方式概述贪心算法(Greedy Algorithm), 又称贪婪算法. 此算法对问题进行求解时, 在每一步选择中都采取最好或者最优(即最有利)的选择, 从而希望能够导致结果是最好或者最优的算法贪心算法最佳应用-集合覆盖假设有多个需付费的广播台, 及各个广播台有限制, 只能传递信号到部分区域. 问题: 如何选择最少的广播台, 让所有的地区都可以接收到广播信号广播台可覆盖地区K1北京, 上海, 天津K

2020-11-09 20:32:59 34

原创 算法-字符串匹配算法(暴力匹配算法& KMP算法)

Brute Force Match Algorithm& KMP Algorithm暴力匹配算法(Brute Force Match Algorithm)KMP算法(KMP Algorithm)暴力匹配算法(Brute Force Match Algorithm)从原文字符串 str1中匹配, 子字符串 str2如果当前字符匹配成功, 即 str1[i]==str2[j], 则 i++; j++; 继续匹配下一个字符如果当前字符匹配失败, 则 i=i-(j-1); j=0; 也就是每次

2020-11-08 17:58:17 73

原创 算法-分治算法& 动态规划算法

Divide and Conquer Algorithm& Dynamic Programming Algorithm分治算法概述分治步骤分治算法最佳实践-汉诺塔动态规划算法概述动态规划算法最佳实践-背包问题分治算法概述分治算法(Divide and Conquer Algorithm)是把一个复杂的问题分成多个小问题, 再继续分成更小的, 直到问题简单到很容易求解为止, 最后将各问题的解合并的算法分治步骤分治法在每一层递归上都有的三个步骤:分解: 将原问题分解为若干个规模较小,

2020-11-07 21:30:28 27

原创 数据结构-图

Graph概述2种表示方式两种访问策略由于线性表和树结构都局限于一个直接前驱和一个直接后继的关系, 无法表示多对多的关系. 此时通过图来实现概述图是一种数据结构, 其中节点可以有零个或多个相邻节点. 节点与节点之间的的连接称为边. 节点也可以称为顶点图的常用概念:顶点(Vertex)边(Edge)路径: 比如从 D->C的路径有2个(1) D->B->C(2) D->A->B-C无向图: 顶点之间的连接没有方向, 比如 A-B, 既可

2020-11-06 20:59:33 50

原创 数据结构-B树(六)

23 tree, 234 tree, B tree, B+tree, B*tree概述23树& 234树(23 tree& 234 tree)B+树(B+tree)B*树(B*tree)二叉树的问题是当数据量多时, 容易产生海量节点, 会直接引起树的高度变大, 导致整体性能下降. 此种情况的解决方案就是多路查找树, 简称多叉树概述B树(B tree, Balanced tree), 属于多叉树(节点的路径可能不止两个), 它通过重新组织节点, 降低树的高度, 且减少 I/O次数来

2020-11-05 20:42:37 17

原创 数据结构-平衡二叉树(五)

AVL Binary Tree概述实例代码当创建二叉树时添加的首个节点相对小于整个数列时, 会引起整个二叉树的左右节点不平衡, 严重影响查询速度. 此种情况的解决方案就是平衡二叉树概述平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree), 又被称为 AVL树, 可以保证查询效率较高平衡二叉树的常见实现有红黑树, AVL, 替罪羊树, Treap, 伸展树等* 特点: 一棵的左右两个子树的高度差的绝对值不超过1, 并且左右两个子树都是一棵平衡

2020-11-04 20:33:00 25

原创 数据结构-二叉排序树(四)

Binary Sort Tree概述概述二叉排序树(BST, Binary Sort Tree), 任何一个非叶子节点相比左子节点大, 相比右子节点小.* 如果值相同, 即可以放左或右子节点## 实例代码public class BinarySortTreeApp { public static void main(String[] args) { int[] arr = {7, 3, 10, 12, 5, 1, 9, 11, 13}; BinaryS

2020-11-03 20:16:07 25

原创 算法-赫夫曼编码

Huffman Coding简介3种编码原理代码实现简介赫夫曼编码是可变字长编码(VLC)的一种, 常用于数据文件压缩. 其压缩通常在20%~90%之间3种编码原理在通信领域中信息的处理方式定长编码:变长编码:* 变长编码的缺点是编码格式重叠无法避免, 即不能匹配重复的编码3) 赫夫曼编码:代码实现字符串解压缩public class HuffmanCodeApp { public static void main(String[] args)

2020-11-02 19:47:14 253 1

原创 数据结构-赫夫曼树(三)

Huffman Tree|哈夫曼树|霍夫曼树概念概念路径和路径长度:路径: 从一个节点往下可以达到的子节点或子子节点之间的通路路径长度: 通路中分支的数目称之为路径长度. 根节点到指定节点的路径长度为 L层-1节点的权及带权路径长度:节点的权: 为每个节点定义字段赋予有着某种含义的数值带权路径长度: 从根节点到该节点之间的路径长度和该节点的权的乘积WPL(Weighted path length): 所有叶子节点的带权路径长度之和WPL = 132 + 72 + 82

2020-11-01 20:27:01 225 2

原创 进制& Java基本数据类型简单整理

进制& Java基本数据类型简单整理二进制运算二进制转八进制二进制转十进制二进制转十六进制二进制特性八进制八进制转十进制十进制十进制转二进制十六进制十六进制转十进制进制间区分Java基本数据类型数值类型浮点类型布尔类型字符& 字符串类型二进制计算机有两种基础状态, 0和1也就是二进制, 表示的是开关. 因为中央处理器(CPU)和基本所有的电子元件也都只识别0和1计算机最小的存储单位是字节(byte), 一个字节有8个二进制位(bit), 可以存储十进制数范围是无符号时0255和有符号

2020-10-31 21:13:15 48

原创 数据结构-顺序存储二叉树& 线索化二叉树(二)

Binary Tree顺序存储二叉树线索化二叉树(Threaded Binary Tree)顺序存储二叉树节点编号规则:顺序存储二叉树通常只会考虑完全二叉树第 n个元素的左子节点为2*n+1第 n个元素的右子节点为2*n+2第 n个元素的父节点为(n-1)/2* n表示二叉树的第几个元素(起始编号从0开始)通过以上规则, 可以将树和数组互相转换的public class ArrayToBinaryTreeApp { public static void main(St

2020-10-31 21:09:53 16

原创 数据结构-二叉树(一)

Binary Tree树(Tree)二叉树(Binary Tree)三种遍历查找节点删除节点树(Tree)树与数组& 链表对比数组存储优点: 通过下标访问元素, 速度快缺点: 检索具体元素值, 或数组底部或元素与元素之间插入新元素或删除元素, 效率都很低链式存储优点: 插入和删除效率较好缺点: 检索效率很低树存储增删改查4样性能都比较好二叉树(Binary Tree)每个节点最多只能有两个子节点, 一个左节点一个右节点如果二叉树的所有叶子节

2020-10-30 19:55:56 18

原创 数据结构-哈希表

Hash table哈希表(Hash table)哈希表(Hash table)又称散列表, 它是键值对数据结构, 也就是 key& value的映射集, 其中键是通过散列计算后, 将映射到表中某一个位置, 以此加快查找的速度. 此映射函数叫做散列函数, 存放值的数组叫做散列表public class HashtableApp { public static void main(String[] args) { HashTab hashTab = new Hash

2020-10-29 20:22:34 73 2

原创 算法-查找算法(顺序查找,二分查找,插值查找,斐波那契查找)

Search Algorithm:Sequence Search, Binary Search, Interpolation Search, Fibonacci Search线性查找算法(Sequence Search)二分查找(Binary Search)插值查找(Interpolation Search)斐波那契(黄金分割法)查找(Fibonacci Search)线性查找算法(Sequence Search)又称线性查找时间复杂度为线性阶 O(n)public class Sequenc

2020-10-24 20:57:04 41

原创 算法-排序算法(冒泡排序,选择算法,插入排序,希尔排序,快速排序,归并排序,基数排序,堆排序)

Sort Algorithm:Bubble Sort, Selection Sort, Insertion Sort, Shell`s Sort, Quick Sort, Merge Sort, Radix Sort排序算法概述排序的分类冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell`s Sort)快速排序(Quick Sort)归并排序(Merge Sort)基数排序(Radix Sort)排序算法概述排序算法(

2020-10-18 16:03:02 83

原创 算法-时间频度& 时间复杂度& 空间复杂度

Temporal Frequency& Time Complexity& Space Complexity计算算法执行时间时间复杂度(Time Complexity)常数阶O(1)对数阶O(log2n)线性阶O(n)线性对数阶O(nlog2n)平方阶O(n2)立方阶O(n^3)k次方阶O(n^k)指数阶O(2^n)空间复杂度(Space Complexity)计算算法执行时间时间频度(Temporal Frequency): 一个算法所花费的时间与算法中语句的执行次数成正比. 算法中的

2020-10-15 19:46:48 66

原创 递归-迷宫问题和八皇后问题

Recursion: Maze Puzzle& EightQueens Puzzle递归的基本规则迷宫问题八皇后问题递归的基本规则递归中的方法的局部变量都是独立的如果方法的形参是引用类型, 由于传递的是指针递归方法之间是共享的递归必须向退出的条件逼近, 否则就是无限递归迷宫问题map[i][j]: 0表示未走过, 可以尝试; 1表示墙; 2表示该路, 可以走通; 3表示该路, 已走过, 但走不通当 map[6][5] == 2, 则已到达目的地(最右下角), 结束递归pub

2020-10-14 21:09:39 1542 5

原创 前缀表达式(波兰表达式)& 中缀表达式& 后缀表达式(逆波兰表达式)& 中缀表达式转换后缀表达式

Polish expression& Infix expression& Reverse Polish expression& Infix expression invert to Reverse Polish expression前缀表达式(Polish expression, 波兰表达式)中缀表达式(Infix expression)后缀表达式(Reverse Polish expression, 逆波兰表达式)中缀表达式(Infix expression): 实现简单计算器后缀

2020-10-13 20:41:05 92

原创 数据结构-栈(通过数组和单向链表实现)

Array Stack& Single Linked List Stack概述应用场景通过数组实现通过单向链表实现概述栈是一个先入后出(FILO, First In Last Out)的有序列表栈的出/入操作限制只能在线性表的同一个端进行应用场景子程序的调用: 在跳往子程序前, 会先将下一个指令的地址存到栈中, 直到子程序执行完后再将地址取出, 回到原来的位置 如浏览器的后退/向前, JVM的虚拟机栈表达式的转换(如 中缀表达式转后缀表达式)与求值二叉树的遍历图形的深度优先(d

2020-10-12 20:30:12 109 2

原创 数据结构-单向环形链表解决 Josephu问题

Circular Single Linked ListJosephu(约瑟夫, 约瑟夫环)是一个数学应用问题解决思路代码示例Josephu(约瑟夫, 约瑟夫环)是一个数学应用问题n个人按编号1, 2, …n围坐一圈, 从编号为 k的人开始报数, 数到 m的那个人出列, 此时它的下一个人又从1开始报数, 数到 m的那个人再出列, 依次反复, 直到所有的人全部出列为止, 最后输出出列人的编号顺序解决思路首先创建有 n个节点的不带头的单向环形链表, 然后从 k节点开始计数, 计到 m时, 删除对应

2020-10-11 15:40:59 38

原创 数据结构-单链表& 双向链表

Single Linked List& Double Linked List概述单链表(Single Linked List)双向链表(Double Linked List)概述链表是有序列表以节点方式链式存储, 也就是节点之间不一定是连续的地址每个节点包含数据域和指向下一个节点的地址/引用链表分带头节点的链表和不带头节点的链表单链表(Single Linked List)/** 定义链表节点类*/class DataNode { /** 节点编号*/ publ

2020-10-10 20:59:03 42

原创 数据结构-稀疏数组& 环形队列

SparseArray& CircularQueue数据结构稀疏数组(Sparse Array)环形队列(CircularQueue)数据结构数据结构分为2种, 线性结构和非线性结构线性结构(1) 数据元素之间是一对一的线性关系. 常见有数组, 队列, 链表和栈等(2) 存储结构有两种:顺序存储结构: 顺序存储的线性表称为顺序表, 顺序表中的存储元素是连续的链式存储结构: 链式存储的线性表称为链表, 链表中的存储元素不一定是连续的(元素节点中存放的数据包括:元素和相邻元素

2020-10-09 20:55:59 41

原创 JVM垃圾回收-G1收集器(六)

Garbage-First Collector概述区域(Region)Humongous区域特征G1的垃圾回收的过程年轻代回收(Young GC)并发标记过程混合回收(Mixed GC)Full GC配置选项常见的配置方式概述G1是一款面向服务端的垃圾收集器, 主要针对具有大内存以及多处理器的机器Jdk7开始正式使用 启用参数为 -XX:+UseG1GC, Jdk9时成为默认垃圾收集器, 取代了 CMS以及 Parallel& Parallel Old的组合与 CMS相比, 当小内存环境可

2020-10-03 20:13:01 65

原创 JVM垃圾回收-Serial收集器& ParNew收集器& Parallel收集器& CMS收集器(五)

Serial GC& ParNew GC& Parallel GC& CMS GCSerial垃圾收集器(串型回收)1. Serial新生代收集器2. Serial Old老年代收集器ParNew垃圾收集器(并行回收)Parallel垃圾收集器(并行回收)CMS垃圾收集器(并发回收)Serial垃圾收集器(串型回收)Serial GC是最基础, 历史最悠久的垃圾收集器, Jdk1.3.1之前回收新生代的唯一选择, 它是一个单线程的串行收集器, 当开始回收时, 将引起所有用户线程

2020-09-30 19:15:12 59

原创 JVM垃圾回收-垃圾回收的各种分类& 垃圾收集器的组合关系(四)

垃圾回收的各种分类& 垃圾收集器的组合关系垃圾回收的各种分类垃圾收集器的分类7款经典收集器组合关系近期垃圾收集器发展过程垃圾回收的各种分类垃圾收集器的分类按线程数分类: 分为单核(串行收集器)和多核(并行收集器)单核 CPU中适合使用串行收集器多核 CPU中适合使用并行收集器两种收集器共同点都是采用独占式, 也就是回收时都会 STW按工作模式分类: 分为独占式(串行& 并行)垃圾收集器和并发式垃圾收集器独占式垃圾收集器, 一旦开始回收, 会将所有的用户线程 ST

2020-09-29 20:46:07 102

原创 JVM垃圾回收-强引用, 软引用, 弱引用, 虚引用以及终结器引用(三)

String Reference, Soft Reference, Weak Reference, Phantom Reference, Final Reference概述强引用(String Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)终结器引用(Final Reference)概述对象的引用级别为4种, 由高到低依次分别为: 强引用, 软引用, 弱引用和虚引用强引用(String Reference

2020-09-28 20:20:21 49

原创 JVM垃圾回收-finalization机制& 安全点& 安全区域(二)

finalization& Safe Point& Safe Regionfinalization机制概述对象的3种状态销毁对象之前具体判断过程演示例子安全点与安全区域安全点(Safepoint)安全区域(Safe Region)finalization机制概述当垃圾回收时对象被销毁前, 总会先调用对象的 finalize()方法(被调用的前提是必须重写此方法, 同时未被调用过, 因为此方法只会调用一次), 常用于处理资源释放 如关闭文件, 套接字, 数据库连接等对象的3种状态

2020-09-27 20:07:36 196

原创 JVM垃圾回收-算法(一)

Algorithm什么是垃圾?为什么需要 GC垃圾回收算法标记阶段:`标记阶段 - 引用计数算法(Reference Counting):``标记阶段 - 可达性分析算法(Reachability Analysis)或又称追踪性垃圾收集(Tracing Garbage Collection)/根搜索算法(GC Roots Tracing):`清除阶段(回收阶段):`清除阶段 - 标记-清除算法(Mark-Sweep):``清除阶段 - 复制算法(Copying):``清除阶段 - 标记-压缩算法(Mark-

2020-09-26 20:42:52 61

原创 JVM执行引擎

Execution Engine执行引擎概述编译分为前/后端内部结构解释器(Interpreter)即时编译器(JIT Compiler)即时编译的执行条件Hotspot VM内嵌两种 JIT编译器选择模式虚拟机与物理机的对比物理机上的执行引擎是直接建立在处理器, 缓存, 指令集(如 x86架构的指令集, ARM架构的指令集)和操作系统层面上的, 而虚拟机的执行引擎是由软件自行实现的, 因此不受物理条件制约的定制指令集, 并能够执行那些不被硬件直接支持的指令集格式执行引擎概述class

2020-09-25 20:42:36 39

原创 JVM StringTable

StringTableString类的基本特性两种定义方式设置 StringTableJVM版本的演变字符串拼接操作intern()的使用String的垃圾回收相关调优参数String类的基本特性不可变的, 不可被继承的(final类), 支持序列化(实现了 Serializble接口), 可以比较大小(实现了 Comparable接口)两种定义方式字面量方式: 也就是直接使用双引号括起字符串的声明方式此方式会将 String对象直接存储在字符串常量池中String s1 = "a

2020-09-23 19:56:44 97 1

原创 JVM方法区

Method Area概述版本之演变历程元空间与永久代的区别内部结构类型信息常量池(Constant Pool Table)运行时常量池(Runtime Constant Pool)字符串常量池(StringTable)方法区的垃圾回收概述线程间是共享的可以是固定大小或动态扩展大小. 如果系统定义了太多的类, 导致空间不足, 则会抛出内存溢出 OOM虽然方法区在运行时数据区属独立的存在, 但逻辑上属于堆空间版本之演变历程Jdk6或之前的内部实现是永久代(Permanent Space),

2020-09-21 21:08:23 83

原创 JVM对象的实例化

Object Instance对象实例化步骤对象的内存布局对象内存布局代码实例对象的访问定位对象实例化步骤判断对应的类是否已加载(1) 当 new一个对象时, 首先检查 new指令的参数(如 new Demo()的类)能否在常量池中定位到一个类的符号引用(即判断类元信息是否存在)(2) 如果没有, 则按双亲委派机制, 使用当前类加载器加载对应的 .class文件, 并生成对应的 Class类对象. 此时如果找不到对应的 .class文件, 则抛出ClassNotFoundException异常

2020-09-19 21:04:08 53

原创 JVM堆空间

Heap Space概述内存结构(`分代收集算法`的落地实现)堆内部结构JVM内存逻辑上分为三部分GC(JVM的垃圾回收)GC按回收区域分为两大类GC触发机制GC过程TLAB(Thread Local Allocation Buffer)缓冲区逃逸分析(Escape Analysis), 堆外存储技术简单例子标量替换配置选项概述一个 JVM实例中只存在一个堆空间, 以及在运行时数据区中空间最大的区域, 同时 GC(Garbage Collection, 垃圾收集器)最频繁的区域所有的线程间共享一个堆

2020-09-17 22:00:15 91

中文转拼音/中文转五笔/汉字转拼音/汉字转五笔 字典

Java 中文转拼音/中文转五笔/汉字转拼音/汉字转五笔 字典. 通过 https://blog.csdn.net/qcl108/article/details/100981774 提供的 Java代码使用.

2019-09-18

空空如也

空空如也

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

TA关注的人 TA的粉丝

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