- 博客(109)
- 资源 (3)
- 收藏
- 关注
原创 Git 学习笔记
学习 Git1. 名词解释1.1 工作区新建一个仓库之后,当前目录就成为了工作区1.2 版本库工作区下有一个隐藏目录 .git,它属于 Git 的版本库 History。Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区,还有 Git 为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。1.3 示意图学习 G...
2019-11-30 15:27:55
284
原创 使用 golang 发送电子邮件的两种方式
目录使用 golang 发送电子邮件的两种方式1、使用 golang 官方自带的 net/smtp 包2、使用第三方库2.1 安装第三方库2.2 参考代码html 模板文件参考使用 golang 发送电子邮件的两种方式1、使用 golang 官方自带的 net/smtp 包// 使用go自带的net/smtp包发送邮件func SendToEmail(fromUser string, to...
2019-11-10 00:04:02
2177
原创 设计模式 — 原型模式
思想:原型模式其实就是从一个对象再创建另外一个可制定的对象,而且不需知道任何创建的细节工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建 的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()原理结构图:原理结构图说明IPrototype : 原型类,声明一个克隆自己的接口ConcretePrototype: 具体的原型类, 实现一个克隆自己的...
2019-10-07 11:37:57
297
原创 设计模式 — 工厂模式
简单工厂模式**思想:**在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。**实现:**简单工厂把实例化的操作单独放到一个类中,这个类就称为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。**优点:**工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端而言,去掉了与具体产品的依赖三、工厂方法模式**思想:**定义了一个创...
2019-10-06 21:47:48
212
原创 设计模式 — 单例模式
思想: 确保一个类只有一个实例,并提供该实例的全局访问点。实现:使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。单例模式有八种方式:1) 饿汉式(静态常量)Java 代码实现package singleton;public class Singleton1 { ...
2019-10-06 21:39:42
142
原创 【排序算法(八)】排序算法总结(下)
1. 八大排序算法目录总结所有排序算法源码地址: https://github.com/WeCanRun/Sorting-Algorithm【排序算法(一)】选择排序及其改进【排序算法(二)】冒泡排序及其改进【排序算法(三)】直接插入排序及其改进【排序算法(四)】希尔排序【排序算法(五)】归并排序【排序算法(六)】快速排序【排序算法(七)】基数排序【数据结构】堆应用之堆排序【...
2019-07-25 10:42:59
213
原创 关于 KMP 算法的个人理解(附 Java 实现代码)
为什么会提出 KMP 算法为了解决传统的朴素算法匹配字符串的低效为什么朴素算法会低效传统的朴素算法在匹配字符串失败的时候,主串和模式串都要回溯,主串回溯到匹配起始位置加1, 模式串回溯到第一个字符,从头开始匹配,这样会产生很多不必要的回溯,所以朴素算法低效。时间复杂度为O( (n - m +1)* m),即O(n * m)。KMP 算法的思想既然朴素算法会产生不必要的回溯,那么就要想办法...
2019-07-22 14:17:06
251
原创 字典树的实际应用场景之敏感词过滤(附 Java 实现代码)
文章目录前言敏感词过滤Trie 实现敏感词的过滤Java 代码实现前言这篇文章主要介绍怎么用字典树实现敏感词的过滤,关于字典树的一些介绍可以参考其他文章,也看一下我的另一篇文章:Trie(字典树,前缀树)及其实现;敏感词过滤在很多场景都会用到敏感词过滤,比如在网站提交的内容,游戏中的聊天等等…那么这些敏感词是如何被过滤掉的呢?其实这就是一个字符串的匹配过程,我们很容易就可以想到的就是准备一...
2019-07-13 21:43:18
1200
原创 生产者与消费者模式
所谓生产者与消费者模式就是通过平衡生产线程与消费线程的工作能力来提高程序整体处理数据的速度…在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完才能继续生产数据,反之亦然,为了解决这种生产消费能力不均衡的问题,便有了生产者消费者模式。下面先从一个简单的例子入手:package multithread;...
2019-07-09 17:13:18
865
原创 学习 Fork / Join框架
分支/合并框架的目的是以递归的形式将可以并行执行的任务拆分成更小的任务,然后将每一个任务的结果合并起来生成整体的结果,它是ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。1. 运行流程2. 工作窃取算法工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。工作窃取的运行流程图如下:那么为什么需...
2019-07-09 10:19:16
198
原创 Java IO 入门
文章目录1. 几个 IO 概念1.1 流1.2 类 InputStream, OutputStream, Reader 和 Writer2. Java IO:文件2.1 通过 Java IO 读文件2.2 通过 Java IO 写文件2.3 通过 Java IO 随机存取文件2.4 文件和目录信息的获取Java 的 IO 包主要关注的是从原始数据源的读取以及输出原始数据到目标媒介。以下是最典型的...
2019-06-20 22:24:14
330
原创 详解 ExecutorService 接口及其实现类 ThreadPoolExecutor
文章目录1. ExecutorService 接口简介2. ThreadPoolExecutor2.1 对各个参数的解读2.2 任务队列的四种类型2.3 饱和(拒绝)策略的四种类型3. newFixedThreadPool4. newSingThreadExecutor5. newCachedThreadPool1. ExecutorService 接口简介Executor 框架中有两个关键类...
2019-06-20 15:33:31
2592
原创 Java 多线程 与 线程池
文章目录1. Java 中线程的生命周期2. 创建 Java 线程的三种方法3. 实现接口 VS 继承 Thread4. Runable 和 Callable 的比较5. 使用线程池5.1 Executors, Executor and ExecutorService5.2 实例化线程池1. Executors 类的工厂方法2. 直接创建线程池5.3 向线程池提交任务1. execute()2. ...
2019-06-20 15:31:21
195
原创 Java8—新的日期和时间API的入门使用
传统的处理接口设计并不是很友好,不易使用。终于,Java 8 借鉴第三方优秀开源库 Joda-time,重新设计了一套 API,这里记录一下自己的学习过程package dateandtime;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoFie...
2019-06-19 15:05:54
221
原创 实现自己的收集器以获得更好的性能
将质数按质数与非质数分区package streams;import java.util.List;import java.util.function.Predicate;import java.util.stream.IntStream;public class PrimeNumber { public static boolean isPrime1(int num) {...
2019-06-17 12:14:44
205
原创 Java8新特性之Lambda,Stream,Optional
前言Java 8是Java自Java 5(发布于2004年)之后的最重要的版本。这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。1. Lambda表达式1.1 何为Lamdba表达式Lambda表达式理解为简洁地表示可传递的一种表达式:它没有名称,但有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。最简单的Lambda表达式可由逗号分隔的参数列表、->...
2019-06-16 21:25:57
574
转载 创建 Java 对象的几种方法
转载自:https://www.cnblogs.com/baizhanshi/p/5896092.html使用new关键字:这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的够赞函数(无参的和有参的)。比如:Student student = new Student(); 使用Class类的newInstance方法:我们也可以使用Class类的newIn...
2019-03-18 19:14:20
149
转载 HashMap原理分析总结
1.HashMap的工作原理HashMap是基于hashing的原理,我们使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,先对Key调用hashCode方法,来计算hash值,返回的hash值用来找bucket对象,来放entry键值对。在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现...
2019-03-16 23:26:43
198
原创 【LeetCode】字符串相乘
class Solution { public static String multiply(String num1, String num2) { if(num1.equals("0") || num2.equals("0")) return "0"; StringBuilder result = new StringBuilder()...
2019-03-12 18:07:27
133
原创 【图算法】最小生成树之克鲁斯卡尔算法
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。克鲁斯卡尔算法(Kruskal)克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。**基本思想:**按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。**具体做法:**首先构造一个只含n个顶点的森林,...
2019-03-05 17:38:40
901
原创 【图算法】最小生成树之普里姆算法
所谓最小生成树,就是用最少的边连接所有的顶点。对于给定的一组顶点,可能又很多种最小生成树,但是最小生成树边E的数量总是比顶点V的数量小1,即E=V-1。普里姆算法 假设N=(V,{E})是连通网,TE是N上最小生成树中边的集合,算法从U=u0(u0∈V)U={u_0}(u_0∈V)U=u0(u0∈V),TE={}开始。重复执行下述操作:在所有u∈U,v∈V-U的边(u,v)∈E中找...
2019-03-05 11:34:34
461
原创 【数据结构】Java实现图的深度优先搜索与广度优先搜索
在图中实现的基本操作之一就是搜索从一个顶点可以到达其他哪些顶点,或者找所有当前顶点可到达的顶点。有两种常用的方法可用来搜索图:深度优先搜索(DFS)和广度优先搜索(BFS),它们最终都会到达所有的连通顶点。深度优先搜索通过栈来实现(类似于树的前序遍历,树的前序遍历就是深度优先搜索的特殊版本),而广度优先搜索通过队列来实现(类似于树的层次遍历,树的层次遍历就是广度优先搜索的特殊版本)。具体的见下面的...
2019-03-04 20:13:28
448
原创 【数据结构】图的一些重要术语
一、图的定义在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图,含有n个顶点的无向完全图有n∗(n−1)/2n*(n-1)/2n∗(n−1)/2条边。含有n个顶点的有向完全图有n∗(n−1)n*(n-1)n∗(n−1)条边。有些图的边或弧具有与它相关的数字,这种与图的边或弧相关的数叫做权 。带权的图称为网。无向图的边数等于各顶点度数和的一半,多出一半是因为重复两次计数 。...
2019-03-03 20:55:08
254
原创 【数据结构】哈夫曼树及其应用的Java实现
哈夫曼树的定义路径长度:从树的一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度树的路径长度:从树根到每一个结点的路径长度之和。哈夫曼树:如果考虑带权的结点,结点的带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带权路径长度之和,带权路径长度WPL最小的二叉树称为哈夫曼树。哈夫曼树的算法描述根据给定的n个权...
2019-03-02 13:32:08
759
原创 【剑指offer】字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。答案来源:https://www.nowcoder.com/questionTerminal/fe6b651b66ae47d...
2019-02-22 22:55:59
138
原创 【剑指offer】把字符串转换成整数
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入描述: 输入一个字符串,包括数字字母符号,可以为空输出描述: 如果是合法的数值表达则返回该数字,否则返回0示例1输入+2147483647 1a33 ...
2019-02-22 15:26:15
128
原创 【剑指offer】表示数值的字符串
时间限制:1秒 空间限制:32768K 热度指数:110864本题知识点: 字符串题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是Java实现版本1package test
2019-02-22 12:06:02
246
原创 【剑指offer】左旋转字符串
时间限制:1秒 空间限制:32768K 热度指数:153887本题知识点: 字符串题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!Java...
2019-02-22 10:18:26
111
原创 字符串模式匹配算法的 Java 实现
字符串匹配算法:检查模式P是否另一个字符串T(T代表文本)的子串,因为要检查整个定长的字符串P,所以有时这些算法称为精确字符串匹配算法。蛮力法(BF算法)对于文本T中的每个可能的位置,检查P是否匹配,由于文本T的长度为n,模式P的长度m, 所以T的最后m -1个位置无需检查,即有n-m+1个可选的位置来比较。/** * 搜索模式字符串P在文本字符串T中第一次出现的位置的蛮力解...
2019-02-21 20:28:39
1800
原创 【剑指offer】重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。Java版本/** * Definition for binary tree * public class TreeNode { * ...
2019-02-17 11:26:31
158
原创 【剑指offer】从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。Java版本1实现/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* ...
2019-02-16 20:07:23
104
原创 【剑指offer】替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。Java版本实现public class Solution { public String replaceSpace(StringBuffer str) { String temp = str.toStr...
2019-02-16 19:25:49
147
原创 【剑指offer】二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例 1:输入:array = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: ...
2019-02-16 19:22:41
137
原创 计算机网络的几个概念
OSI七层参考模型层数名称基本功能对应设备第1层物理层负责链路上比特流传输中继器,集线器第2层数据链路层负责网络内部帧的传输网桥,交换机第3层网络层负责网间两点间可达性路由器第4层传输层保证端到端的传输软件实现,无特殊设备第5层会话层会话的控制软件实现,无特殊设备第6层表示层数据的表达及数据格式的转换软件实...
2019-02-15 20:33:17
1714
原创 数据库的几个概念
关系模型的完整性约束实体完整性:关系必须有主键,主键必须唯一且不能为空参照完整性:维护实体之间的引用关系,外键可以为空,或者其值为被参照关系对应的主键值。用户定义的完整性:由应用环境决定,针对具体关系数据库的约束条件索引1. 索引的概念 索引是一种数据库对象(数据结构),是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑...
2019-02-14 20:07:10
369
原创 操作系统的几个概念
PV原语执行一次P操作,信号量的值减1,当信号量的值小于等于0时,则阻塞该进程;执行一次V操作,信号量的值加1,若信号量大于0,V原语停止执行,若信号量值小于等于0,应唤醒等待(阻塞)队列中的进程。进程状态在进程的生命周期中,一个进程至少有5种基本状态: 初始状态,执行状态,等待状态(阻塞状态),就绪状态和终止状态。 死锁 所谓死锁是指多个并发进程,各自持有资源又都等待...
2019-02-14 17:26:43
251
原创 【查找算法(五)】分块查找
算法简介 要求是顺序表,分块查找又称索引顺序查找,它是顺序查找的一种改进方法。 算法思想将n个数据元素"按块有序"划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,……算法流程1、先选取各块中的最大关键字构成一个索引表;2、查找分两...
2019-02-13 21:35:23
9780
原创 【查找算法(三)】斐波那契查找
算法简介斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、····,在数学上,斐波那契被递归方法如下定义:F(1)=1,F(2)=1,F(n)=f(n-1)+F(n-2) (n>=2)。该数列越往后相邻的两个数的比值越趋向于黄金比例值(0.618)。算法描述斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于...
2019-02-13 16:53:22
797
原创 【查找算法(二)】插值查找的Java实现
插值查找在介绍插值查找之前,首先考虑一个新问题,为什么二分查找算法一定要是折半,而不是折四分之一或者折更多呢? 打个比方,在英文字典里面查“apple”,你下意识翻开字典是翻前面的书页还是后面的书页呢?如果再让你查“zoo”,你又怎么查?很显然,这里你绝对不会是从中间开始查起,而是有一定目的的往前或往后翻。 同样的,比如要在取值范围1 ~ 10000 之间 100 个元素从小到大均匀分...
2019-02-12 17:54:23
769
1
Java-Web-ChatRoom-master.zip
2019-06-24
Javaweb 聊天室
2019-04-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人