java
文章平均质量分 95
小小北漂
专注于大数据开发、调优、运维和web、爬虫相关开发
展开
-
Java SPI思想梳理
为什么要使用spi面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候不用在程序里动态指明,这就需要一种服务发现机制。java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。这有点类似IOC的思想,将装配的控制权移到了程序之外。以上文字从别处复制而来,想必你还是一脸懵逼,但不要慌,去搜一下spi你就会感觉更懵逼,因为你搜出来的只会是这个:转载 2021-06-02 15:25:04 · 144 阅读 · 0 评论 -
commons-dbutils 简单实现按行处理数据
commons-dbutils作为一个jdbc框架在日常简单的程序开发中简直不要太好用,但是在使用commons-dbutils的时候我发现没有提供一个可以按行处理数据功能。但是我如果我需要逐行扫描并按行处理一个数据量很大的表,不管把全量数据加载到什么样的数据结构中应该都是一个很耗费内存和降低效率的事情,而且有可能会导致内存溢出,于是自己实现了一个简单的按行处理的功能。测试数据表结构CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_I...原创 2020-07-25 12:48:17 · 217 阅读 · 0 评论 -
开源网络爬虫汇总
文章出处:https://www.cnblogs.com/SH-xuliang/p/7248963.html互联网爬虫,蜘蛛,数据采集器,网页解析器的汇总,因新技术不断发展,新框架层出不穷,此文会不断更新...交流讨论欢迎推荐你知道的开源网络爬虫,网页抽取框架.开源网络爬虫QQ交流群:322937592email address: liinux at qq.comP转载 2017-12-29 19:24:24 · 1627 阅读 · 0 评论 -
Java基础之—反射(非常重要)
原文作者:敬业的小码哥点击打开链接反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先...转载 2018-03-14 11:23:17 · 252 阅读 · 0 评论 -
java正则匹配json
有些时候如果json格式数据里如果value带有双引号,则这样的数据无法直接用json工具解析出来,需要手动去处理,下边的正则表达式匹配出带有双引号的value。原创 2018-05-11 14:22:12 · 6556 阅读 · 0 评论 -
java中synchronized关键字的用法
文章出处:https://www.cnblogs.com/wl0000-03/p/5973039.html在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同...转载 2018-06-04 16:14:31 · 304 阅读 · 0 评论 -
Reactor模式详解
在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。I/O的四种模型I/0 操作 主要分成两部分① 数据准备,将数据加载到内核缓存② 将内核缓存中的数据加载到用户缓存 Synchronous blocking I/O Typical flow ...转载 2018-12-05 14:55:21 · 227 阅读 · 0 评论 -
并发研究之CPU缓存一致性协议(MESI)
CPU缓存一致性协议MESICPU高速缓存(Cache Memory)CPU为何要有高速缓存CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。在CPU...转载 2019-03-14 12:49:28 · 238 阅读 · 0 评论 -
Netty笔记4-如何实现长连接
前面三章介绍了Netty的一些基本用法,这一章介绍怎么使用Netty来实现一个简单的长连接demo。Netty入门教程——认识Netty Netty入门教程2——动手搭建HttpServer Netty入门教程3——Decoder和Encoder关于长连接的背景知识,可以参考《如何使用Socket实现长连接》 一个简单的长连接demo分为以下几个步骤:长连接流程创建...转载 2019-03-20 17:28:03 · 113 阅读 · 0 评论 -
java单例模式几种实现方式
单例模式的五种实现方式1、饿汉式(线程安全,调用效率高,但是不能延时加载): 1 2 3 4 5 6 7 publicclassImageLoader{ privatestaticImageLoader instance =newImageLoader; priv...原创 2019-03-25 14:29:54 · 294 阅读 · 0 评论 -
JAVA 中BIO,NIO,AIO的理解
在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下:序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方...转载 2019-05-20 16:42:53 · 106 阅读 · 0 评论 -
Java并发之线程池ThreadPoolExecutor源码分析学习
线程池学习以下所有内容以及源码分析都是基于JDK1.8的,请知悉。我写博客就真的比较没有顺序了,这可能跟我的学习方式有关,我自己也觉得这样挺不好的,但是没办法说服自己去改变,所以也只能这样想到什么学什么了。 池化技术真的是一门在我看来非常牛逼的技术,因为它做到了在有限资源内实现了资源利用的最大化,这让我想到了一门课程,那就是运筹学,当时在上运筹学的时候就经常做这种类似的问题。...转载 2019-05-15 22:01:37 · 96 阅读 · 0 评论 -
java基于函数作为参数的文本工具类
日常开发中经常碰到一些需要对文件处理的需求。一般有可能是过滤、解析里边指定字段然后存储在指定的集合结构中;又或者是对每行数据做一些操作。这些东西常常是大同小异。因此尝试封装了一个简单的工具类,用于减少重复代码,只写自己的业务逻辑。import org.apache.commons.lang3.ArrayUtils;import java.io.IOException;import jav...原创 2019-05-21 16:10:26 · 250 阅读 · 0 评论 -
Java NIO?看这一篇就够了!
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。在前面2篇文章《什么是Zero-Copy?》和《NIO相关基础篇》中我们学习了NIO的相关理论知识,而在本篇中我们一起来学习一下Java NIO的实战知识。全文较长,建议先马后看(记得关注不迷路)。一、概述NIO...转载 2019-05-12 21:03:17 · 274 阅读 · 0 评论 -
Lombok插件的安装与使用
1)lombok介绍lombok能够极大的简化消除我们写的代码,使用注解的方式省略get set toString….等方法,使得代码看起来更加的美观。lombok是在编译时候生成对应的方法的,所以在性能上面大家完全不用担心,是与我们写上get set方法是一样的。它自带了这些标签lombok使用(常用的几个注释)2)安装lombok插件IDEA下 File—setting—p...转载 2019-06-24 15:24:59 · 328 阅读 · 0 评论 -
聊聊Greenplum的那些事
开卷有益——作者的话 有时候真的感叹人生岁月匆匆,特别是当一个IT人沉浸于某个技术领域十来年后,蓦然回首,总有说不出的万千感慨。笔者有幸从04年就开始从事大规模数据计算的相关工作,08年作为Greenplum 早期员工加入Greenplum团队(当时的工牌是“005”,哈哈),记得当时看了一眼Greenplum的架构(嗯,就是现在大家耳熟能详的那个好多个X86框框的图),就转载 2017-12-07 19:31:48 · 5271 阅读 · 0 评论 -
Linux下Redis的安装和部署
一、Redis介绍Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。转载 2017-12-04 20:25:07 · 166 阅读 · 0 评论 -
Java 并发工具包 java.util.concurrent 用户指南
译序本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html。本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf[带书签] 进行下载。转载 2017-08-09 10:34:39 · 287 阅读 · 0 评论 -
基于JAX-WS的Web Service服务端/客户端
JAX-WS简介:JAX_RPC(Java API for XML-Based RPC)允许Java应用程序可以通过已知的描述信息调用一个基于Java的Web服务,描述信息与Web服务的WSDL描述相一致JAX-RPC2.0更名为JAX-WS2.0(java API for XML-Based Web Services)JAX-WS中,一个远程调用可以转换为一个基于XML的转载 2017-08-02 16:55:19 · 593 阅读 · 0 评论 -
Java操作XML的工具:JAXB
Java Architecture for XML Binding (JAXB) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序转载 2017-08-03 14:17:41 · 519 阅读 · 0 评论 -
intelliJ idea 2017破解
一、先进入Intellij IDEA的官网:https://www.jetbrains.com,下载安装 二、破解。 网上的破解方法较多,总结下来大概有下面几种办法供大家作为参考 声明:破解用于学习和试用,如果有经济条件的话,请支持正版。方法一:转载 2017-08-04 15:24:05 · 1194 阅读 · 0 评论 -
Intellij IDEA 2017 详细图文教程之概述
简介Intellij IDEA 是JetBrains公司研发的又一款伟大的IDE工具,主要面向广大的Java开发人员。为什么说是“又一款伟大的IDE工具”呢?,因为该公司已经生成过 PHPStorm、PyCharm、WebStorm等优秀的开发工具。JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室。根据国内的使用习惯,在本教转载 2017-08-04 15:36:18 · 1380 阅读 · 0 评论 -
equals()方法总结
超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等。该方法的源码如下:public boolean equals(Object obj) { return (this == obj); } 我们知道所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的的内存地址,所以说使用Object的equals()转载 2017-07-28 09:37:18 · 281 阅读 · 0 评论 -
HashCode的作用原理和实例解析
HashCode定义 (1)HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode是用来在散列存储结构中确定对象的存储地址的;(2)如果两个对象相同, equals方法一定返回true,并且这两个对象的HashCode一定相同;(3)如果对象的equals方法被重写,那么对象的HashCode也尽量重写,并且产生Has转载 2017-07-28 09:40:17 · 212 阅读 · 0 评论 -
java:String使用equals和==比较的区别
"=="操作符的作用1、用于基本数据类型的比较2、判断引用是否指向堆内存的同一块地址。equals所在位置:在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写public boolean equals(Object obj) { return (this == obj); }转载 2017-07-28 10:02:10 · 182 阅读 · 0 评论 -
正则表达式30分钟入门教程
正则表达式30分钟入门教程版本:v2.3.5 (2017-6-12) 作者:deerchao 转载请注明来源目录跳过目录本文目标如何使用本教程正则表达式到底是什么东西?入门测试正则表达式元字符字符转义重复字符类分枝条件反义分组后向引用零宽断言负向零宽断言注释贪婪与懒惰处理选项平衡组/递归匹配还有些什么东西没提到联系作者网上的资源及本文参考文献更新纪录本文目标转载 2017-07-28 19:33:35 · 160 阅读 · 0 评论 -
centos mysql安装与卸载
第1步、yum安装mysql[root@stonex ~]# yum -y install mysql-server安装结果:Installed: mysql-server.x86_64 0:5.1.73-3.el6_5转载 2017-08-14 10:50:24 · 172 阅读 · 0 评论 -
IDEA更换主题
更换IDEA主题只需要3步1. 下载主题在主题网站上IDEA Color Themes 上浏览喜欢的主题并下载该主题。(如果网址有变更,google IDEA themes即可。) 2. 导入主题在IDEA中导入该主题,具体如下:file –> import setttings –> 选中 1 中下载的主题jar文件 –> 一路确认 –> 重启转载 2017-09-11 14:50:51 · 560 阅读 · 0 评论 -
java日志文件log4j.properties配置详解
一、Log4j配置第一步:加入log4j-1.2.8.jar到lib下。第二步:在CLASSPATH下建立log4j.properties。内容如下:放在src下的话就不用配置 否则得去web.xml里面配置一个Listener参考:log4j.rootCategory=INFO, stdout , R log4j.appender.stdout=o转载 2017-11-20 11:52:20 · 125 阅读 · 0 评论 -
深入理解JVM—JVM内存模型
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子转载 2017-11-22 10:59:37 · 160 阅读 · 0 评论 -
java8新特性:Stream多线程并行数据处理
将一个顺序执行的流转变成一个并发的流只要调用 parallel()方法public static long parallelSum(long n){ return Stream.iterate(1L, i -> i +1).limit(n).parallel().reduce(0L,Long::sum);}并行流就是一个把内容分成多个数据块,并用不不同的线程分别处理每个数据块转载 2017-12-20 11:38:42 · 11257 阅读 · 0 评论 -
函数式编程入门教程
原文出处:http://www.ruanyifeng.com/blog/2017/02/fp-tutorial.html你可能听说过函数式编程(Functional programming),甚至已经使用了一段时间。但是,你能说清楚,它到底是什么吗?网上搜索一下,你会轻松找到好多答案。与面向对象编程(Object-oriented programmi转载 2017-12-20 15:50:03 · 176 阅读 · 0 评论 -
webservice之实现一个基于JWS的webservice项目
webservice之实现一个基于JWS的webservice项目 JAX-WS(Java6引进) 是SOAP协议的一个Java的实现规范,这个新规范是为了简化基于SOAP的Java开发。JAX-WS规范其实就是一组XMLweb services的JAVA API,JAX-WS允许开发者可以选择RPC-oriented或者message-oriented来实现自己的web serv转载 2017-08-01 14:57:56 · 441 阅读 · 0 评论