
Java
文章平均质量分 72
骄傲的白兰地
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
敏感词过滤
实现 敏感词过滤 我们用的是DFA思想,就是提前构建好一个Trie树(前缀树),让指定词在前缀树中搜索,搜索过程类似于KMP算法,找到了就是敏感词,否则就不是。那么Trie树是什么呢? Trie树 是一个数据结构,一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字...原创 2019-10-13 17:09:32 · 990 阅读 · 0 评论 -
Guava(七)
【并发编程】 并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava 定义了 ListenableFuture 接口并继承了JDK concurrent包下的 Future 接口。Guava强烈建议在代码中多使用 ListenableFuture 来代替JDK的 Future, 因为:● 大多数 Futures 方法中需要它。● 转到 List...原创 2018-10-13 17:07:45 · 726 阅读 · 0 评论 -
Guava(五)
【函数式编程】 Guava推出的函数式编程起到简化代码的作用。但过度使用会造成代码的冗长、混乱、可读性差等缺点。此外,还可以了解下Java8中的函数式编程,但仅限于JDK8及以上的版本。 一、Function 函数 Function<F, T> 函数声明了一个 T apply(F input) 的方法,通过对输入F的操作,输出类型T的结果。Function&l...原创 2018-09-15 10:17:16 · 314 阅读 · 0 评论 -
Guava(六)
【字符串处理】一、Joiner 连接器 Joiner用于将字符串序列通过指定的分隔符连接起来,另外通过一些属性的设置可以让字符串的连接变的更简单。String join = Joiner.on(",").skipNulls().join(Lists.newArrayList(1, 2, null, 3)); // 1,2,3Joiner.on(";").useForNull("-1...原创 2018-09-23 15:56:23 · 346 阅读 · 0 评论 -
Guava(四)
【强大的集合工具】 之前的章节中不少次提到了Lists集合工具,通过 Lists.newArrayList(E… elements) 可以很方便的构建ArrayList集合去使用。除了List,Guava对所有的集合类型都有对应的封装,包括JDK没有的新集合类型,并且构造器支持多种类型的参数传递,光这一点就很强大了! 集合 来源 Guava工具类 Colle...原创 2018-09-08 16:06:55 · 757 阅读 · 0 评论 -
Guava(三)
【不可变集合】 不可变集合就是在初始化时定义好数据,在之后的使用过程中不能再修改的集合。Guava对所有的JDK集合类型和新集合类型都封装了对应的不可变集合。但需要注意的是,所有Guava不可变集合的实现都不接受null值。一、为什么使用不可变集合 Guava给出了使用原因: 不可变对象有很多优点,包括: ● 当对象被不可信的库调用时,不可变形式是安全的; ● 不可变对...原创 2018-09-01 21:36:05 · 264 阅读 · 0 评论 -
Guava(二)
【新集合类型】 Guava在现有的JDK集合中有新增了Multiset、Multimap、BiMap、Table、ClassToInstanceMap、RangeSet、RangeMap等新集合。这些新集合能够跟JDK集合框架共存,并遵循JDK接口契约。所有新集合的构造器都进行了私有化处理,并通过静态函数生成实例。一、Multiset Multiset多用于统计元素个数,例如统计一...原创 2018-08-26 20:42:33 · 511 阅读 · 0 评论 -
Guava(一)
【基本工具】 一、Optional 针对Java开发中null的问题,guava设计了Optional类。虽然util包下也有自带的Optional类,但是Guava对其做了更好的处理。Optional 用来表示可能为null的T类型的引用,两个实现类Present(存在)和Absent(不存在)。 那么Optional究竟有什么用呢,我们来看一下主要的方法: 1. Optiona...原创 2018-08-12 18:22:19 · 2131 阅读 · 0 评论 -
Java生成图形验证码
验证码是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的操作。 图形验证码是最传统的一种的验证码形式,都是由后台进行生成绘制的,生成过程要考虑到机器识别的可能性,因此要添加干扰线来扰乱机器的识别。下面贴下生成图形验证码的Java代码(该代码运行后会生成JFrame窗口...原创 2018-08-04 11:49:29 · 2279 阅读 · 4 评论 -
Guava集
最近学了一段时间的Guava,感觉是个不错的工具,在原有的JDK基础上封装、修饰了许多集合、工具以及开发中经常会用到的数据结构等等,使用起来真的有很大的帮助,因此想在这里分享记录下学习的内容,方便后续回顾。 学习内容来源于并发编程网站,有一些内容直接粘贴自这里,还有些自己所写。由于初接触Guava,在某些方面有偏差的还请留言讨论,博客会不定期完善更新和添加新内容。目录一、基本...原创 2018-10-14 13:09:16 · 315 阅读 · 0 评论 -
Guava(八)
【原生类型】 Java原生类型就是指8中基本类型:byte、short、int、long、float、double、char和boolean。 原生类型不能当作对象或泛型的类型参数使用,就意味着许多通用方法都不能应用于它们。Guava提供了若干通用工具,包括原生类型数组与集合API的交互,原生类型和字节数组的相互转换,以及对某些原生类型的无符号形式的支持。原生类型Gua...原创 2018-10-21 22:37:02 · 279 阅读 · 0 评论 -
Java 分支合并框架(Fork/Join)
Java的 分支合并框架 是以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果。它是ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。 该框架由 JDK1.7 提供,思想类似于 分治法,只不过是并行执行。要使用它首先需要创建 RecursiveTask<V> 的一个子类,...原创 2019-08-05 22:02:11 · 966 阅读 · 0 评论 -
Java 注解
Java在JDK5之后引入了"注解"的概念,实际上就是为了起到简化代码、易于理解的作用,并且通过注解也可以在编译时期发现一些代码格式的错误,更方便的进行开发。注:这里只是简单记录下 Java 注解的相关概念,未详细讨论。且不涉及 Java 8 新加入的注解。后续会更新补充…注解的声明类似于 接口 的声明,但稍有不同// 声明注解使用 @interface 关键字public @in...原创 2019-03-16 16:26:57 · 306 阅读 · 0 评论 -
Quartz 任务调度
Quartz是一个完全由java编写的开源作业调度框架。为在 Java 应用程序中进行作业调度提供了简单却强大的机制。多用在轮询、定时任务处理等。相对于JDK 自带的Timer 有着更强大的功能。 使用Quartz需要在quartz.jar官网下载相应的jar包(访问可能比较慢) 或者 pom文件导入<groupId>org.quartz-scheduler</...原创 2019-03-02 13:26:49 · 590 阅读 · 0 评论 -
代理模式(Proxy)
设计模式 代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。(结构型模式)代码示例:业务需求:银行提供 存钱 和 取钱 的功能1、提供一个银行类的接口,包含 存钱 和 取钱 的功能p...原创 2018-12-01 21:46:49 · 440 阅读 · 0 评论 -
Guava(十二)
【散列】&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;散列码也可称作哈希函数,即我们在存储数据时,数据和关键字是按照一定的规律存放,以便在查找时能按照这样的规律高效准确的找到对应记录,这里的规律就是由哈希函数确定的。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JDK对于散列码并没有提供很好有效的方法,因此原创 2018-11-24 17:11:41 · 455 阅读 · 0 评论 -
Guava(十一)
【数学运算】 Guava 对于数学运算进行了专门的封装,对运算溢出、性能以及可读性等方面做了精心的设计。来看看吧:Guava Math主要处理三种整数类型:int、long和BigInteger。这三种类型的运算工具类分别叫做IntMath、LongMath和BigIntegerMath。一、整数运算有溢出的检查运算:当运算结果溢出时,会抛出运算失败异常而不是忽略溢出。in...原创 2018-11-11 11:59:58 · 401 阅读 · 0 评论 -
Guava(十)
【缓存】 缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。Guava Cache与ConcurrentMap很相似,但也不完全一样。最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除。相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素。在某些场景下,尽管 Lo...原创 2018-11-03 12:18:11 · 515 阅读 · 0 评论 -
Guava(九)
【区间】 第二章 提到的RangeSet中有用到 Range区间工具,现在就这里详细了解下。Range就是指所谓的区间,仅支持传入所有实现 Comparable接口的类型,但支持多种区间的定义、计算等操作。一、构建区间由于 Range的构造器被声明为私有类型,因此初始化实例都是通过静态方法实现。静态方法区间类型open(C, C)(a, b)closed(...原创 2018-10-27 16:51:08 · 333 阅读 · 0 评论 -
Java网络编程
一、网络通信IP地址: 1. IP网络中每台主机都必须有一个惟一的IP地址; 2. IP地址是一个逻辑地址; 3. 因特网上的IP地址具有全球唯一性; 4. 32位,4个字节,常用点分十进制的格式表示,例如:192.168.0.16。协议: 1. 为进行网络中的数据交换(通信)而建立的规则、标准或约定;(=语义+语法+规则) ; 2. 不同层具有各自不同的协议。端口号: 端口使用一个1原创 2017-12-23 13:38:39 · 301 阅读 · 0 评论 -
Java多线程(图解)
这里总结下java多线程的相关概念一、线程的创建和启动1.扩展java.lang.Thread类 用户的线程类只需要继承Thread类, 覆盖Thread类的run()方法,然后通过该类的实例对象调用start()方法启动线程即可。// 类A继承了Thread类 A a = new A(); a.start() // 启动线程注意:不要覆盖Thread类的start()方法、一个线原创 2017-12-20 22:49:52 · 1911 阅读 · 0 评论 -
约瑟夫环(Java)
约瑟夫环问题描述: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。输入:两个整数n,m,如上所述。输出:出列人的编号代码:import java.util.Scanner;public class Jos原创 2017-08-14 13:39:45 · 361 阅读 · 0 评论 -
模拟扫雷--Java控制台操作(一)
扫雷——生成地雷(Java)描述:生成地雷图,保存在int型二维数组中,-2表示灰色区域,-1表示地雷,数字1~8表示提示数字,用于说明数字周围的地雷数。输出中‘~’表示灰色区域,‘*’表示地雷,数字1~8表示提示数字。说明:通过新建对象传递参数输入行、列、地雷数,其中最大行不超过24,最大列不超过30,地雷数根据行列的数学关系限制。结果可调用 printRes()函数查看。注:该结果仅作后原创 2017-08-06 09:40:37 · 1803 阅读 · 0 评论 -
扑克牌比较 (Java)
扑克牌比较 描述:本程序主要实现52张扑克牌(除去大小王)的洗牌,发牌,比较功能。首先创建两个用户,输入用户名,各分发两张扑克牌,然后从两用户中各自拿出手中最大的扑克牌比较,大的获胜。扑克牌的比较规则:先按数值比较:2>A>K>Q>J>10>9>8>7>6>5>4>3;若数值相同:则比较花色:红桃 > 黑桃 > 方片 > 梅花。输入:两用户名,之后洗牌、发牌、比较自动执行。输出:洗牌、发牌、比较过程原创 2017-08-05 19:48:22 · 3404 阅读 · 2 评论 -
Java集合类
集合类 集合类似于保存一组对象的存储库,是用来存储和管理其他对象的对象,即对象的容器。它是Java中最重要的一种数据结构。和数组类似,一个集合中可以存放很多元素,但与数组不同的是集合的长度是可变的,而数组的长度是固定不变的;集合用来存放对象的引用,而数组用来存放基本类型的数据;集合可以存储多种类型的数据,而数组只能存储单一类型的元素。下面来看看这些类及接口:1、Collection接口原创 2017-08-13 13:13:42 · 294 阅读 · 0 评论 -
正则表达式(Java)
正则表达式介绍:实际应用中,我们经常会用到需要匹配、查找、替换、判断字符串的情况,正则表达式是解决这类问题的主要手段。正则表达式是一种字符串的语法规则,是一种可以用于模式匹配和替换的规则,主要用于文本和字符串处理。1、元字符 元字符 写法 意义 . . 任何一个字符 \d \\d 0~9的任何一个数字 \D \\D 任何一个非数字字符 \s \\原创 2017-08-12 11:47:40 · 353 阅读 · 0 评论 -
打印乘法表(Java)
打印乘法表描述:三种循环打印九九乘法表源代码:public class Multiple { public static void main(String[] args) { System.out.println("-------------------------for循环输出-----------------------------"); for (int原创 2017-08-11 21:39:18 · 286 阅读 · 0 评论 -
成绩分类 总结(Java)
成绩分类描述:对0到100分的成绩按等级进行分类,其中:|———-|:——:| | 0~59分 | 不及格 | | 60~69分 | 及格 | | 70~79分 | 中等 | | 80~89分 | 良好 | | 90~100分 | 优秀|原创 2017-08-10 19:40:23 · 1318 阅读 · 0 评论 -
解数独(Java)
解数独(Java)说明:输出数据,0代表要填的数源代码import java.util.*;public class ShuDu { static int[][] arr = new int[9][9]; static int h=0, l=0; public static void main(String[] args) { Scanner sc = new原创 2017-08-09 12:37:38 · 527 阅读 · 0 评论 -
模拟扫雷--Java控制台操作(二)
扫雷——游戏操作(Java)描述:首先选择难度,根据选择的难度生成地雷图,并在控制台输出游戏界面,其中‘~’表示灰色区域,‘*’表示地雷,‘_’表示空白区域,‘1~8’表示提示数字,之后根据提示输入进行游戏操作。说明:控制台输入输出,根据输入的行、列情况进行显示,可标注地雷。若当前选中的为数字则显示数字,若为地雷则游戏结束,若为灰色区域则将灰色区域周围的8格全部显示,直至周围全为数字为止。当提示数字原创 2017-08-07 11:17:42 · 632 阅读 · 0 评论 -
ZXing生成二维码(Java)
ZXing生产二维码说明:生成二维码需要用到zxing的jar包,可以去下载zxing-3.3.0.jar,在项目中引入即可。生成二维码最常用的格式为QRcode(因为此格式支持中文且专利开放),因此该项目就创建QRcode格式的二维码,也可包含中文。import java.io.File;import java.util.HashMap;import com.google.zxing.Barco原创 2017-08-22 16:44:40 · 342 阅读 · 0 评论 -
十进制数转换n进制(Java)
十进制数转换 将十进制数转换为n(2<=n<=16)进制数,原理跟数学上的转换方法相同,即对一个数不断的进行除n取余运算,直至商为0,将余数倒序排出即为转换结果。以下是递归代码:// 2-16进制表示的位数public String[] arr = {"0", "1", "2", "3", "4", "5", "6", "7",原创 2017-11-23 21:39:07 · 5337 阅读 · 0 评论 -
Linux下配置jdk
Liunx下进行Java开发首要的的就是个jdk环境的配置,下面就来具体介绍下配置过程。 首先配置Java环境必备的就是jdk,这里我们用的是linux64位的jdk1.7版本,点击这里下载jdk1.7-linux-x64。下载完成后在Linux系统下进行配置。详细步骤: 1、打开终端,进入 /opt 目录下,因为opt目录一般用于存放第三方应用。$> cd /opt2、将下好的jdk1.7原创 2017-11-20 22:06:48 · 268 阅读 · 0 评论 -
CCF JSON查询(Java)
试题编号: 201709-3试题名称: JSON查询时间限制: 1.0s内存限制: 256.0MB问题描述: JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,可以用来描述半结构化的数据。JSON 格式中的基本单元是值 (value),出于简化的目的本题只涉及 2 种类型的值: * 字符串 (string):字符串是由双引号原创 2017-10-13 14:14:08 · 1489 阅读 · 2 评论 -
CCF Markdown(Java)
试题编号: 201703-3试题名称: Markdown时间限制: 1.0s内存限制: 256.0MB问题描述: Markdown 是一种很流行的轻量级标记语言(lightweight markup language),广泛用于撰写带格式的文档。例如以下这段文本就是用 Markdown 的语法写成的: 这些用 Markdown 写成的文本,尽管本身是纯文本格式,然而读者可以很原创 2017-10-04 16:52:23 · 990 阅读 · 0 评论 -
CCF 分蛋糕(Java)
试题编号: 201703-1试题名称: 分蛋糕时间限制: 1.0s内存限制: 256.0MB问题描述: 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继原创 2017-10-03 22:36:36 · 367 阅读 · 0 评论 -
Java实现“前世今生”测试
模拟网上的“前世今生”应用程序,通过输入今生的姓名来计算你前世的姓名。 PS:输入不合法可纠错。import java.util.*;public class PreviousAndPresent{ private String name; // 今生姓名 private String FirstName; // 姓 private String Last原创 2017-10-03 22:31:47 · 770 阅读 · 0 评论 -
CCF 数字排序(Java)
试题编号: 201503-2试题名称: 数字排序时间限制: 1.0s内存限制: 256.0MB问题描述: 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。输出格式 输出多行,每行包含两个整数,分别表示一个给定的原创 2017-09-01 13:45:46 · 458 阅读 · 0 评论 -
Linux终端编译并执行Java文件
条件: 配置好jdk,搭建好java环境。shell 中操作:1、先创建java项目目录,名称project。 mkdir project2、在项目中创建src和bin目录,src下用于存放 “.java” 文件,bin下存放 “ .class ” 文件。 cd project mkdir src bin3、在src下创建包com.company。 mkdir -p原创 2017-09-10 16:51:28 · 43552 阅读 · 0 评论