- 博客(59)
- 资源 (3)
- 收藏
- 关注
原创 理解 HBase 的数据模型
本文源自 Unstanding HBase and BigTableHBase 是 Google BigTable 的开源实现。BigTable 是一个稀疏的、分布式的、持久化的多维有序 map,该 map 由 row key, column key 和一个时间戳(timestamp)构成索引,索引对应的值是原始的字节数组。HBase 的数据模型和上述定义类似。这里比较独特的是这个 map ...
2019-03-01 16:02:35
407
原创 ElasticSearch 6.5 keyword 和 text 字段差异及查询
keyword 和 text 字段类型首先,ES 索引的相关信息可以参见建立索引的命令。curl -u user:password \-X PUT "http://host:port/my_test_index" \-H 'Content-Type: application/json' -d'{ "settings":{"index":{"number_of_shar
2019-01-17 11:07:35
7079
原创 ElasticSearch Query DSL
ES 的 DSL 通常由两种子句组成:针对特定字段匹配特定值的 Leaf query clauses,例如 match, match_all, term 或者 range 查询组合了 Leaf query clauses 或其它复合查询的 Compound query clauses (复合查询),例如 bool 或者 dis_max 查询上述两种查询在 匹配和过滤(query cont...
2019-01-16 22:14:43
512
原创 Java Lock 之 lock,tryLock 和 lockInterruptibly
lock,tryLock 和 lockInterruptibly 是 Java ReentrantLock 对象提供的三种获取锁的方式。某个线程调用ReentrantLock 对象的 lock 方法后,如果锁尚未被其它线程占有,则该线程将获得锁;如果锁已经被其它线程占有,则该线程将一直 block 直到它成功获得锁。block 过程中不响应中断,获得锁后才根据中断状态进行相应处理。某个线程调用...
2018-12-04 19:33:18
572
原创 Java synchronized 关键字
一个同步代码块由两部分组成:一个提供锁的对象引用和被锁限定的代码块。每一个 java 对象都可以作为实现同步的锁,该锁是互斥锁、可重入锁。 根据代码写法和锁对象的不同,synchronized 关键字有四种用法 1. 修饰类的实例方法,此时,调用该方法的类的实例提供同步锁,被锁限定的代码块是整个方法体。例如class DoSomethingCounter{ private in...
2018-11-23 14:27:49
202
原创 Presto 学习笔记
Presto是由Facebook开发的一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它的产生是为了解决Hive的MapReduce模型太慢以及不能通过BI或Dashboards直接展现HDFS数据等问题。Presto是一个纯粹的计算引擎,它不存储数据,其通过Connector获取第三方Storage服务的数据。第三方Storage服务的数据,除了前述的Hive,Prest...
2018-10-25 15:21:43
1157
原创 Java 8 Lamba 表达式之方法引用 :: (双冒号)操作符
首先来看一段代码class MethodReferenceTest{ /** * 如果提供了比较器,则使用比较器对 listOfModel 进行排序 * @param listOfModel 需要被排序的 list * @param comparator 比较器,可为空 * @return listOfModel 排序后的 list ...
2018-08-02 17:00:49
5036
原创 Java 虚拟机
* 本文根据 Bill Venners 的著作 Inside Java Virtual Machine 第五章 The Java Virtual Machine 编写。JVM(Java Virtual Machine)可以涉及到以下三个范畴:关于 Java 字节码运行环境的抽象定义。它是一种概念和规则,指导并且限制具体实现。一个 Java 字节码运行环境的具体实现。实现者根据前一条抽象定义,具体实...
2018-01-18 19:51:20
304
原创 JAVA 观察者模式
观察者模式(Observer/Observable)又常常被称为发布-订阅 (Publish/Subscribe) 模式、源-监听器(Source/Listener) 模式,它旨在实现这样一个目标,当 Observable 发生某种变化时,将这种变化通知给一个或多个 Observable ,使得 Observable 可以监测到其变化,并进行相应的操作。例如在 Web 项目中,我们常常使用 Lis
2018-01-07 21:12:39
341
原创 Java 装饰模式在 IO 中应用
装饰模式在保持目标类自身特性的同时,根据需要动态地增加目标类的功能。下面结合 java IO 来了解装饰模式的实现方式。IO 中最基本的一种是输入流,java 类库中提供了抽象类 InputStream 作为输入流的基类。java IO 类库除了输入流之外还有字节类输出流(OutputStream),字符类输入流(Reader),字符类输出流(Writer)。
2017-11-11 11:14:39
1122
原创 JAVA 代理模式
代理模式的应用场景主要有四种。远程代理,虚拟代理,保护代理,缓冲代理,智能引用代理。如果被代理类实现了接口,则可以使用 JDK 自带的动态代理工具实现动态代理;如果被代理类没有实现任何接口,而又需要对其进行代理时,可以借助一个高性能的代码生成库 cglib 来实现。
2017-08-06 21:45:02
461
原创 Spring 及 Spring MVC 配置说明
我们知道,Spring 和 Spring MVC 工作的核心基础 Bean。那么相关配置的目的就是指明需要创建哪些 Bean,给出这些 Bean 创建时所需要的初始化参数,限定 Bean 的生命周期,管理 Bean 之间的关系与工作协作方式等等。
2017-07-22 16:59:47
489
原创 web.xml 配置解析及引入 Spring 特性
WEB 容器加载应用时,首先是从 web.xml 开始解析项目结构。那么当然,如果我们要为项目加入 spring 特性,就首先需要在 web.xml 中配置 spring 的设定。 本文结合 web.xml 中的上下文参数 <context-param>,Listener,Filter 和 Servlet 配置,讲解了 WEB 项目引入 Spring 特性的基本方式。
2017-07-18 15:54:39
1322
原创 CentOS 7 下 WEB 项目运行环境初始化
最近使用阿里云服务器搭建了 WEB 项目的运行开发环境,初始化服务器的过程中主要涉及到了用户管理、防火墙管理和相关软件环境搭建等内容,现将相关操作记录如下。
2017-07-16 15:41:00
980
原创 数据库表主键设计原则
阅读《阿里 Java 开发手册》时,有以下 MySQL 建表规约: 表必备三字段:id, gmt_create, gmt_modified。 说明:其中id必为主键,类型为unsigned bigint、单表时自增、步长为1。gmt_create, gmt_modified的类型均为date_time类型。这样的要求似乎是违反数据设计的范式的,但既然手册中强调这点就搜索学习了一下这样做
2017-07-08 10:52:49
16193
原创 Mybatis 配置文件 useGeneratedKeys 参数
Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回
2017-07-01 13:38:15
33047
1
原创 Spring 核心组件工作原理简析
Spring Framework 的核心组件有三个: Spring Core,Spring Context 和 Spring Beans,它们奠定了 Spring 的基础并撑起了 Spring 的框架结构。Spring 的其它功能特性例如 Web、AOP、JDBC 等都是在其基础上发展实现的。 Spring Context 组件借助上述的控制反转和依赖注入,协助实现了 Spring 的 Ioc 容器。
2017-07-01 11:46:11
24017
原创 JAVA 建造者模式
建造者模式是得到类的实例的方法之一。它常常用于构建参数初始状态复杂的实例,例如有许多可选属性的类,从而可以避免提供过多的、琐碎的构造方法。例如,某个系统的用户类,它有两个必须的属性,若干个可选的属性。public class User { //required fields private final String userId; private String pass
2017-06-04 17:04:34
647
1
原创 JAVA 策略模式
Java 数组的工具类 Arrays 中的排序方法是典型的应用了策略模式的例示。其定义如下:public static T> void sort(T[] a, ComparatorT> c){ //...}sort 方法是使用策略的地方,T[] a 这个数组是策略作用的对象,Comparator
2017-05-22 09:20:37
1300
原创 JAVA 静态工厂方法
静态工厂方法是一个类产生一个该类实例的静态方法,用于补充或取代类的构造器。 静态工厂方法的作用主要是产生一个自身或者子类的实例,从而完善自身的功能和描述。
2017-05-09 12:36:29
814
2
原创 建立 Git 服务器
Git 是一种版本控制软件。Github 是一个公共的服务器,我们可以将自己的项目建立在 Github 上,进而项目参与人员可通过其本机 git 客户端连接 github 进行文件操作,实现项目文件的版本控制。但对于保密性有要求的项目,将其建立在公共服务器上是不明智的,我们可以建立自己的 git 服务器实现版本控制。 本文讨论建立内部 git 服务器供项目参与人员连接使用的方法,并记述了 git
2016-09-05 15:05:40
516
原创 算法导论 - 快速排序的 C 语言实现
在实践中,需要对大量数据排序时,快速排序常常是最佳的选择。快速排序是基于分治思想的一种算法,和归并排序有相似之处。在最坏情况下,快速排序的时间复杂度是O( n^2 );平均情况下,快速排序的时间复杂度是 O( n * lg n)。我们知道归并排序的时间复杂度是O( n * lg n),那么为什么在实践中会发现快速排序常常要优于归并排序呢?通过分析快速算法,我们可以发现最坏情况出现的概率极为小;而在
2015-03-24 15:54:37
1025
原创 算法导论 - 最大和连续子数组
1. 问题描述已知一个整型数组,数组中一个元素或连续的多个元素可构成了该整型数组的子数组。将每个子数组中所有元素相加,即得到该子数组的和。求一个子数组,它的和在所有子数组中最大。本文分别给出利用分治算法和的动态规划的算法解决该问题的示例代码(C 语言实现,python 实现或 JAVA 实现),前者的时间复杂度为 O(n * log n),后者的时间复杂度为 O(n)。
2015-03-03 16:54:38
1050
原创 算法导论 - 归并排序的 C 语言实现
归并排序是 Divide-and-Conquer 编程思想一个简单例子,其逻辑核心主要有以下几点。(1) 将两个有序数列合并的时间复杂度为 O(n),参见函数 void merge(int *src, int st, int md, int ed, int *sorted);(2) 数列中只有一个数的时候,数列处于有序状态。下面是归并排序的示例代码。#include #include
2015-01-27 19:13:55
958
原创 深入理解 Linux 内存管理
1. 内存地址以Intel的中央处理器为例,Linux 32位的系统中,物理内存的基本单位是字节(Byte),1个字节有8个二进制位。每个内存地址指向一个字节,内存地址加1后得到下一个字节的地址。这里用以表示物理内存实际位置的地址,就是通常所说的物理地址(Physical Address)。CPU正在执行的进程代码、进程数据和栈区数据等,都临时保存在物理内存中。线性地址(Linear Ad
2014-11-12 16:15:54
3754
1
原创 WEB项目的基本架构
J2EE WEB项目的一般采用B/S(Browser/Server)架构。B/S针对WEB项目的特点,对原C/S(Client/Server)架构进行了改进,从而降低WEB项目的开发成本和维护难度。本文以Apache Web服务器和Tomcat应用服务器为例,介绍网站的架构和配置意义。J2EE WEB项目物理装置连接图如下所示。 Figure 1 WEB PROJECT CONFI
2014-10-13 13:38:16
5676
原创 CentOS7的新特性介绍
和以前的版本相比,CentOS7主要加入以下新特性。从CentOS6.x在线升级到CentOS7;加入了linux容器(LinuXContainers, LXC)支持,使用轻量级的Docker进行容器实现;默认的XFS文件系统;使用systemd后台程序管理linux系统和服务;使用firewalld后台程序管理防火墙服务。
2014-09-26 14:58:56
7904
原创 U盘安装CentOS 7的方法
本文主要介绍了利用U盘安装CentOS 7操作系统的方法。制作USB启动盘后,设置主板优先从可移动设备启动,进入安装程序。然后在一块已经安装了windows操作系统的硬盘上,开辟一部分空间作为Linux分区,重新格式化,进而安装CentOS 7系统。由于安装完成,开机时失去了win 7系统的引导入口,因此本文继续记述了恢复win 7引导入口的方法。
2014-09-24 08:35:21
8893
原创 python语法笔记
Python是一种面向对象、解释式编程语言。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理内存使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。1.python源文件通常使用后缀名 .py,在shell命令行使用python filename.pyarguments
2014-09-19 12:50:09
1020
原创 awk使用方法笔记
awk最基本的功能是在输入文件中按行匹配指定的字符串格式,如果匹配则将当前行复制到缓冲区进行进一步处理,但并不改变输入文件本身。awk匹配每一行(称为Record)后,使用默认或指定的分割符自动将其分割为若干段(称为Field),每一段可使用$number进行引用和访问。其中段号0对应整个Record的内容。处理完成每一行后继续读入下一行进行处理。
2014-09-16 18:41:24
989
原创 ORACLE数据库中的ROWNUM和ORDER BY执行顺序
使用SQL查询ORACLE表数据的时候,可能会有如下两种结果需求。对查询结果集排序,并获得其排序前的行号对结果集排序后,为每一行加入行号对于上述两种结果需求,编写SQL语句的时候,需要注意ROWNUM赋值和ORDER BY的执行顺序。如果ORDERBY的基准字段是表的PrimaryKey,则查询执行过程是先对表进行排序,然后为排序后的表视
2014-08-27 13:03:26
2504
2
原创 sed命令详解与例示
grep命令的查找功能,sed命令的流编辑功能和awk(现已发展成为一门编程语言)作为更强大的文本编辑命令,在Linux系统管理中,起着重要且全面的作用。而后来出现的perl编程语言(PracticalExtraction and Report Language),可以实现sed和awk的几乎所有功能。但使用perl相对复杂和臃肿,因而sed和awk仍然活跃在shell编程的各
2014-08-26 11:33:19
972
原创 ANT发布SVN WEB项目到TOMCAT以及利用post-commit自动提交编译更新
开发人员在本地提交更新到SVN服务器后,往往需要测试人员重新测试。为了将更新内容即时反映到测试服务器,可以利用post-commit脚本将SVN更新同步到测试服务器中。(1)利用SVN的工作副本(WORKINGCOPY)创建TOMCATWEB项目cd /opt/tomcat_home/webappssvn co svn://svn_host/prjname/trunk prjname
2014-07-21 22:56:16
2844
原创 Configure SVN (Subversion) Server
Note: It may need root user permissions to execute following commands.(1) Install needed packagesyum install mod_dav_svn subversionIn my PC, packages that were installed are Note: if you are goi
2014-06-30 21:45:31
1659
原创 基于Linux C的socket抓包程序和Package分析 (二)
测试运行平台:CentOS 6.5发行版,内核版本3.113. 利用wireshark分析数据包如果要使用wireshark分析数据包,则应将抓取到的数据按照pcap文件指定格式存储到文件中。
2014-05-30 12:34:10
2332
原创 基于Linux C的socket抓包程序和Package分析 (一)
测试运行平台:CentOS 6.5发行版,内核版本3.111. Linux抓包源程序在OSI七层模型中,网卡工作在物理层和数据链路层的MAC子层。进行网络通信时,源主机通过socket(或其它)应用程序产生IP报文,经过各个OSI层层封装,数据包以Ethernet帧的形式进入物理层。Ethernet帧包含源主机地址、IP报文、目标地址(IP地址、端口号或映射的6字节
2014-05-29 16:04:47
6676
1
原创 JavaScript文档加载顺序和事件绑定
为了保证网页代码层次清晰,便于管理,一般HTML中只体现网页结构,具体的行为处理通过JS实现,样式则通过CSS文件管理。在以上原则下通过JS实现行为时,一定要注意文档加载过程中,执行JS代码的时机。页面加载过程有两个事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成。(可以说:ready 在onloa
2014-05-16 15:50:43
1564
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人