- 博客(29)
- 收藏
- 关注
原创 Java中的可变参数
可变参数是JDK1.5开始引入的新特性,可以简化代码 适用场景:适用于需要传入或处理同类型未知参数个数的场景 package com.google.varargs; import java.io.*; /** * @author : ♞Demons♛ * @date : 2020-01-05 13:31 * Description : java中的可变参数 **/ public c...
2020-01-05 13:53:22
374
1
原创 [IDEA]插件
插件名称 插件功能 Alibaba Java Coding Guidelines 代码规范检测,智能提示 .ignore 自动生成ignore文件,用于git提交代码时排除无需提交的内容 Maven Helper 用于排查和处理maven依赖冲突问题 Rainbow Brackets 可以让代码中的各种括号变得不同颜色,起到醒目,易辨识的作用 Translation...
2020-01-04 21:00:01
387
原创 Java中元组的使用
工作中看到了很多应用元组的场景,记录几个常用的元组工具类 二元组↓ public class Tuple2<K, V> { private K left; private V right; public Tuple2(K left, V right) { super(); this.left = left; this.right = right; } ...
2020-01-04 20:45:49
2103
原创 单元测试规范
虽然一直有写单元测试case,但是对于其规范一直没有系统熟悉,特做此记录 /** * junit单元测试规范: * 1.目录: * 必须在同级目录,包全路径名也相同 * src/ * main/package * test/package * 2.测试类名应以Test结尾 * 3.测试方法应以test开头 * 4.测试方法必须用@Test修饰,且不能带任何参数 * 5.测试方法...
2020-01-04 20:36:54
332
原创 HDFS的javaAPI使用
工作中做资源服务器时用到了HDFS作为资源底层存储,记录一下使用的API public class HdfsUtil { private static final Logger logger = LoggerFactory.getLogger(HdfsUtil.class); private HdfsUtil() { } private sta...
2020-01-04 20:27:23
218
原创 自定义异常
自定义异常不是一件很神秘的事情,看一下已有项目的源码就会了,记录如下: 首先,自定义异常的目的是为了能够更好的区分不同业务对应的异常原因; 再者,自定义异常通常继承Exception或者RuntimeException,然后Override Methods; 注意:异常类需要定义唯一的UID用于序列化和反序列化,可使用IDE自动生成. package com.google.exception;...
2020-01-04 20:10:46
310
原创 Java中的Builder模式
日常开发中经常用到建造者设计模式,记录一下简单的构造形式 package com.google.builder; /** * @author : ♞Demons♛ * @date : 2020-01-04 17:21 * Description : **/ public class FamilyBuilder { private final String mother; ...
2020-01-04 18:06:48
662
原创 获取本机ip和host的方法
public class AddressHelper { private static final Logger logger = LoggerFactory.getLogger(AddressHelper.class); private static Map<String, String> ipAndHostMap = Maps.newHashMa...
2020-01-04 15:15:32
2770
原创 维护本地唯一标识
工作中用到了在本地记录agent唯一标识的需求,实现方式如下: /** * 监测本地是否有保存agentId的文件? * 若有,读取并校验其中的UUID * 若无,代码中重新生成一个UUID,并保存到指定的目录文件中 * 保存该UUID的文件名和路径固定 */ @Test public void testCheckLocalAgentId() throws IOException { ...
2020-01-04 15:12:38
267
原创 日期格式化
工作中遇到了形如(2019-11-08T02:18:21.516Z)的日期,需要对其做格式化操作获取时间戳,记录方法如下: @Test public void testTimestampAbstract() throws Exception { String time = "2019-11-08T02:18:21.516Z"; String ISO_PATTERN = "yyyy-...
2020-01-04 15:06:45
176
原创 Gzip压缩
工作中用到了gzip压缩,记录一下此方法,方便后续使用 /** * 使用gzip对获取到的数据流进行压缩 * @param data数据 * @return 压缩后的字节数组 * @throws IOException IO异常 */ private byte[] zipData(byte[] data) throws IOException { ByteArrayOutputS...
2020-01-04 15:03:30
336
原创 形如1000_000的用法
java7新增的特性,可以使用_增强数字的可读性,方式更优雅,简单测试用例如下: @Test public void testNumberMoreZero() { // 数字中可以使用下划线分割,增强可读性 long a = 1234_560; long b = 600_000; System.out.println(a); System.out.print...
2020-01-04 14:59:42
407
原创 手动创建线程池
之前写了一个手动创建线程池的实现,自定义了factory和handler,记录一下 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( 1, threadNumbers, 60L, TimeUni...
2020-01-04 14:53:18
499
1
原创 log4j2.xml
log4j2是log4j的升级版,略有差异,使用方式不变,引入依赖和配置有所区别 配置文件名称改为log4j2.xml,也放在resources目录下,默认读取 配置 <?xml version="1.0" encoding="UTF-8"?> <Configuration status="debug" strict="true" name="XMLConfigTest" ...
2020-01-04 14:48:03
224
原创 log4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <!-- 日志级别优先级:ERROR > WARN > INFO > DEBUG 向左包含关系 --> <log4j:configuration> ...
2020-01-04 14:37:58
205
原创 调度线程池
工作中用到了线程池和调度线程相关的知识,记录一下 @Test public void testThreadPool() throws InterruptedException { // 错误的创建线程池的方式 ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledE...
2020-01-04 14:32:47
361
原创 位运算
左移,右移 位运算 最近在用findbugs扫描代码中的规范问题时,看到了位运算的用处,记录一下 /** * 位运算 */ @Test public void testUnsignedOperateAverage() { int beginIndex = 3; int endIndex = 5; int midIndex1 = (beginIndex + endIn...
2020-01-04 14:17:57
313
原创 读写锁
工作中用到了读写锁,记录如下: 使用场景:多线程中某些代码块可以被多个线程同时读,但是当某块代码执行写操作时,被读的代码块需要变得不可读,直到写操作完成 @Test public void testReadAndWriteLock() { ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteL...
2020-01-03 22:00:21
212
原创 集合的初始化
如何优雅的初始化集合? package com.google.guava; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import java.util.ArrayList; import java.util.HashMap; /** * @author : ♞Demons♛ ...
2020-01-03 21:52:55
548
原创 cache缓存的使用
计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 package com.google.guava; import com.alibaba.fastjson.JSONObject; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader;...
2020-01-03 21:35:34
793
原创 HashCode源码解析
在实际的工作中我们经常会用到hashCode,不管是简单哈希还是一致性哈希,底层的哈希算法都是一样的,今天参考源码做一个回顾: 先看hashCode的源码: /** * Returns a hash code for this string. The hash code for a * {@code String} object is computed as * &l...
2018-11-09 12:03:19
4734
1
原创 经典MR之WordCount
1. WordCount V1.0 public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWrita...
2018-11-06 18:28:03
2427
原创 Hive基础知识
1. Hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL的查询功能,其本质是将SQL转换成MapReduce的任务进行运算,底层由HDFS来提供数据的存储. 2. 特点 可扩展:Hive可自由的扩展集群的规模,一般情况下不需要重启服务 延展性:Hive支持用户根据需求来自定义函数 容错性:节点出现问题时SQL仍可完成执行(依赖于H...
2018-11-06 18:23:49
403
翻译 爬虫(三):Solr
lucene的索引的修改和删除 solr: 1) solr的概念 2) solr的部署(2种方式) 3) solr的管理界面 4) solr的配置文件: solrConfig.xml schema.xml core.properties 5) solrj 连接solr 相关的操作: C U R D 6) solr的高级: 高亮 分页 排序 1. lucene的索引的修改和删除 索...
2018-10-31 17:49:34
695
翻译 爬虫(二):Lucene
搜索引擎: * 什么是搜索引擎 * 搜索引擎基本运行原理 * 原始数据库做搜索有什么弊端 * 倒排索引(敲黑板) lucene lucene相关的概念 lucene和solr的关系 lucene入门程序(写入索引的操作代码) lucene相关写入索引的api的解释 ik分词器 lucene的搜索: 基础的搜索(2个), 多样化的搜索(5个) lucene的高级(理解) lucene的高亮...
2018-10-31 17:46:45
899
原创 Redis
1.Redis概述 redis是一个内存数据库,以key-value形式存放数据,属于非关系型数据库。 1.1 特点 redis将数据存储在内存中,读写效率非常高(写入:8w/s 读取:11w/s) 包含五种数据类型:string,list,map,set,sortset(注:这里说的数据类型均指的是value的数据类型,key的数据类型固定是string类型) String: 和jav...
2018-10-31 15:52:17
448
1
原创 Hadoop基础知识
Hadoop复习回顾 1. HDFS分布式文件存储系统 1.1 HDFS的架构 主从架构,可以配置主节点的主备架构 冷备份 热备份 HDFS的元数据: fsimage:元数据镜像文件,较为完整的一份元数据 edits:元数据的操作日志(一小部分元数据,用作缓冲) namenode内存中存储的是:fsimage+edits SecondaryNameNdoe:定时定量合并fsimage和edit...
2018-10-31 15:12:44
608
原创 静态代码块
在学习的过程中经常遇到使用静态代码块的情况,之前一直没有系统的梳理,现在借助代码回顾一遍,加深记忆. 静态代码块的应用场景: 有些代码必须在项目启动的时候就准备就绪(执行),此时就需要使用静态代码块.因为这种代码是主动执行的,在项目启动的时候就会自动初始化,并且只在初始化的时候执行一次.下面用一个例子说明: /** * @Author: ♞Demons♕ * @DATE: 2018/...
2018-08-27 09:30:31
1699
原创 爬虫(一):基本内容回顾
本人最近在学习爬虫的相关知识,对于很多基本的概念在此做一个梳理,便于课程的复习和巩固,如有写的不准确或错误的地方,欢迎阅读者批评指正. 要聊爬虫主要是从以下几个方面为主线: 什么是爬虫? 爬虫的价值 爬虫的分类 爬虫的基本运行原理 爬虫的三大模块 爬虫协议 1.什么是爬虫? 想到爬虫,很多人的第一印象就是现实世界中到处爬着找食物的虫子,其实在计算机的世界里亦是如此:所谓的爬虫就是程序员...
2018-08-26 14:56:48
725
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅