自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

长风破浪会有时

万千相遇已是莫大的缘分

  • 博客(87)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于单元测试的想法

1、有分支、有逻辑、你不确定的代码,需要单元测试。 2、单元测试不是应付sonar检查,想要达标,可以走巧(写一些简单的单元测试),但是切记,关键的代码一定要单元测试覆盖,当你写起来的时候,会对自己的代码逻辑有更清晰的理解。 3、需要详细了解单元测试工具的, 不应该是生搬硬套。只有了解清楚了、熟悉工具,才能更好地运用工具来解决我们的问题。 4、自己要清楚什么需要写单元测试,什么不需要写。既然...

2018-05-21 16:18:17 235

原创 源码阅读之ConcurrentHashMap(JDK1.7)

HashMap实际上是一个线性数组,数组上的每个元素都是一个链表(俗称桶)。 ConcurrentHashMap则是对这个线下数组进行了划分,划分成若干个段(segment),在并发操作时,会对对应的段加锁。 HashEntry:用来封装映射表的键 / 值对;Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个 HashEntry 对象链接...

2018-08-24 16:25:31 325

转载 JDK之sun.misc.Unsafe

//下面是sun.misc.Unsafe.java类源码package sun.misc;import java.lang.reflect.Field;/*** * This class should provide access to low-level operations and its * use should be limited to trusted code. Field...

2018-08-22 09:18:26 1257

原创 装饰器模式在项目中实战-创建领域对象缓存

需求背景:根据不同的场景,需要调用多个外部接口,每个外部接口耗时不等,我根据要求做成可动态增加的模式。优点:用起来很方便,动态地追加功能,可以随意匹配调用接口的数量,且只调用一次方法即可,这会使业务代码非常清晰。配合回调函数和模板,可以实现动态地调用任意组合类型的接口。缺点:代码有点多。会new出不少对象。因为本来掉接口的类完全可以用注入来的。现在的装饰器必须自己来new,否则无法保证灵活...

2018-08-16 21:41:36 694

原创 Guava缓存项目实战

项目中涉及到数据缓存,对一致性要求还行,本来打算用Guava做。后来发现6台机器且数据量3亿左右,内存大小和路由达不到要求。换成redis做缓存,但是guava代码已经初步写好,放在此处用于记录。/** * 〈一句话功能简述〉<br> * 〈功能详细描述〉Guava缓存处理抽象类 * * @author wangzha * @see [相关类/方法](可选) * @si...

2018-08-16 21:21:21 1710

转载 深入解析volatile关键字

转载地址:https://www.cnblogs.com/dolphin0520/p/3920373.html1、计算机计算过程2、并发编程的三要素3、深入解析volatile关键字4、volatile运用场景计算机计算过程大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理...

2018-08-09 17:15:49 262

原创 垃圾收集器与内存分配策略

思考GC的三个问题: 1. 哪些内存需要回收 2. 什么时候回收 3. 如何回收1.为什么要了解GC和内存分配(哪些内存需要回收)当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集称为系统达到更高并发的瓶颈时,我们就需要对这些”自动化”的技术实施必要的监控和调节。 程数计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,分配的内存是在编译器就已经已知的。因此这几个区域...

2018-07-11 18:40:04 197

原创 虚拟机字节码执行引擎

摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 代码编译的结果是从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。概述 执行引擎是 Java 虚拟机最核心的组成部分之一。“虚拟机” 是一个...

2018-07-10 16:48:38 330

原创 JVM字节码指令集

加载和存储指令:用于将数据在栈帧中的局部变量表和操作数栈之间的来回传输。 将一个局部变量加载到操作栈:iload、iload_<n>、lload、lload_<n>、fload、fload_<n> 、dload、dload_<n>、aload、aload_<n>将一个数值从操作数栈保存到局部变量表:istore、isto...

2018-07-03 16:17:42 540

原创 Class类文件结构

Class类文件结构:魔数版本号常量池访问标志类索引、父类索引和接口索引集合字段表集合方法表集合属性表集合任何一个class文件都对应着惟一 一个类或接口的定义信息,反过来说,类和接口并不一定都定义在文件里。class文件是一组以8位字节为基础单位的二进制流,各项数据项目严格按照顺序紧凑排列在class文件中。中间没有任何分隔符,这使得整个class文件中存储的内容几...

2018-07-02 14:53:41 271 1

原创 深入学习JAVA I/O工作机制

我们知道,读取和写入文件I/O操作都调用操作系统提供的接口,因为磁盘设备是由操作系统管理的,应用程序要访问物理设备只能通过系统调用的方式来工作。读和写分别对应read()和write()两个系统调用。而只要是系统调用就可能存在内核空间地址和用户空间地址切换的问题,这是操作系统为了保护系统本身的运行安全,而将内核程序运行使用的内存空间和用户程序运行的内存空间进行隔离造成的。但是这样虽然保证了内核程序...

2018-06-29 16:06:26 243

原创 MySql学习之事务和并发控制

ACID:原子性(automicity):一个事务必须被看作一个不可分割的最小单元。对于事务里的操作要么全部成功,要么全部失败,不可能执行其中一部分。这就是事务的原子性。 一致性(consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态。在事务没有提交之前,事务中做出的修改不会被保存到数据库中。 隔离性(isolation):通常来说,一个事务做的修改,对于其他事务...

2018-06-28 22:11:09 733

翻译 ES学习之单个索引映射多个类型

在ES6.0.0及更高的版本中,创建的索引只能包含一个映射类型。在6.0.0以下的版本中创建的一个索引映射多个类型的索引在6.0.0版本中继续发挥作用,但是将在7.0.0中完全删除。自第一次发布弹出式搜索以来,每个文档都存储在一个索引中,并分配一个映射类型。映射类型用于表示被索引的文档或实体的类型,例如Twitter索引可能具有用户类型和推特类型。每个映射类型都可以有自己的字段,因此用户类...

2018-06-19 13:31:00 12791 1

翻译 ES学习之数据类型和映射分词

本文主要内容:1、精确值和全文搜索2、创建倒排索引3、内置分析器、分词测试4、基本数据类型5、自定义映射6、更新映射(只能增加)7、复杂数据类型精确值和全文Elasticsearch 中的数据可以概括的分为两类:精确值和全文。精确值 如它们听起来那样精确。例如日期或者用户 ID,但字符串也可以表示精确值,例如用户名或邮箱地址。对于精确值来讲,Foo 和 foo 是不同的,...

2018-06-06 21:22:23 1701

翻译 ES学习之分片路由

本文主要内容:1、路由一个文档到一个分片2、新建、索引和删除请求3、取回单个文档4、局部单个文档5、多文档模式6、理解一下ES深度分页(from-size)的劣势路由一个文档到一个分片当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢...

2018-06-06 19:59:53 5521 3

翻译 ES学习之数据输入和输出

无论我们写什么样的程序,目的都是一样的: 以某种方式组织数据服务我们的目的。 但是数据不仅仅由随机位和字节组成。我们建立数据元素之间的关系以便于表示实体,或者现实世界中存在的事物 。 如果我们知道一个名字和电子邮件地址属于同一个人,那么它们将会更有意义。尽管在现实世界中,不是所有的类型相同的实体看起来都是一样的。 一个人可能有一个家庭电话号码,而另一个人只有一个手机号码,再一个人可能两者兼有...

2018-05-28 11:44:51 1147

翻译 ES学习之集群原理

本文主要内容: 1、集群 2、索引 3、副本ElasticSearch 的主旨是随时可用和按需扩容。 而扩容可以通过购买性能更强大(垂直扩容,或 纵向扩容) 或者数量更多的服务器(水平扩容,或 横向扩容 )来实现。虽然 Elasticsearch 可以获益于更强大的硬件设备,但是垂直扩容是有极限的。 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分...

2018-05-24 17:42:50 7132

翻译 ES学习之基础入门(二)

本文主要内容:1、ES的特点2、索引文档、检索文档、轻量级查询、表达式查询、结构化搜索、全文检索 短语检索、高亮搜索、分析聚合3、ES分布式特性 ES和关系型数据库差别: 在应用程序中对象很少只是一个简单的键和值的列表。通常,它们拥有更复杂的数据结构,可能包括日期、地理信息、其他对象或者数组等。 也许有一天你想把这些对象存储在数据库中。使用关系型数据库的行和列存储,这相当于是...

2018-05-24 11:39:32 2971

翻译 ES学习之更新API

本文主要内容:1、脚本更新文档 (1).更新常规字段值 (2).更新数组类型字段值 (3).通过脚本进行一定判断,再执行更新操作2、传递部分文档形式更新文档,可以理解成追加文档 (1).检查noop更新3、upsert更新,即存在更新,不存在另行其他操作4、更新操作支持以下查询字符串参数 脚本更新文档更新API允许根据提供的脚本更新文档。 该操作从索引获...

2018-05-23 22:23:57 14088 1

翻译 Hadoop(分布式计算开发框架)

Apache Hadoop项目为可靠的,可扩展的分布式计算开发开源软件。Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集。它旨在从单个服务器扩展到数千台机器,每台机器提供本地计算和存储。该库本身不是依靠硬件来提供高可用性,而是设计用于在应用层检测和处理故障,从而在一组计算机之上提供高可用性服务,每个计算机都可能出现故障。该项目包括这些模块...

2018-05-23 17:22:27 2321

原创 Powermock学习之基本用法

本文主要内容:1、@PrepareForTest注释2、访问私有状态内容3、抑制(禁止加载),即不运行,不需要的内容4、测试听众5、模拟策略6、模拟系统类参考:https://github.com/powermock/powermockPowerMock是一个Java模拟框架,可用于解决通常认为很难甚至无法测试的测试问题。使用PowerMock,可以模拟静态方法,删除静态初始化...

2018-05-22 10:04:24 20955

翻译 ES学习之搜索API(二)

基础搜索搜索API允许您执行搜索查询并取回与查询匹配的搜索匹配。可以使用简单的查询字符串作为参数或使用 请求主体来提供 查询。示例:GET /sfeicuss/_search?service=wangzha.query多种类型搜索:GET /sfeicuss/testlog,testservicelog/_search?service=wangzha.query...

2018-05-21 16:09:43 2390

翻译 ES学习之搜索API(一)

本文主要内容:单条精准匹配查询多条精准匹配查询bool查询过滤查询(范围查询)执行聚合分析查询返回内容命令:GET sfeicuss/servicelog/_search我们这里分析一下,成功请求后返回内容的含义:{ "took": 124, "timed_out&amp

2018-05-17 22:56:14 1700

翻译 ES学习之集群API

1、查看集群信息:GET /_cat/health?v 2、列出所有指标:GET /_cat/indices?v,这里我们先创建一个索引看看查询效果创建索引:查看指标:5个分片,1个副本,文档数0…3、创建索引:这里健康状态是yellow的原因是,默认分片5个,副本1个,但是这里是单节点的,所以没有其他节点加入集群。导致副本没有分配。 PUT /customer?pre...

2018-05-17 21:48:23 694

翻译 ES学习之基础入门(一)

ES基本概念: Elasticsearch是一个接近实时的搜索平台。这意味着从索引文档的时间到可搜索的时间之间存在轻微的延迟(通常为一秒)。1、cluster(集群) 群集是一个或多个节点(服务器)的集合,它们一起保存整个数据,并提供跨所有节点的联合索引和搜索功能。集群由默认名称为“elasticsearch”的唯一名称标识。此名称很重要,因为如果节点设置为通过名称加入群集,则节点只能成为...

2018-05-17 20:36:36 11051

原创 JestClient之HTTP长连接判断

目的: 判断jestclient连接ES集群时,是HTTP短连接,还是HTTP长连接。为什么要判断: 因为如果是短连接,我们需要连接池控制连接数,防止大量请求,重复创建连接导致系统崩溃;如果是长连接,我们需要注意如果长连接断开,该组件是否具备自动重连机制,防止生产因为长连接断开而导致不可补救的错误。验证步骤: 第一步,验证是否为长连接: 通过jestclient向ES集群里重复连续...

2018-05-16 18:09:55 7069

原创 Jest客户端索引添加、数据查询、分页实例【反思】

之前写的Jest客户端,可扩展性太低了。 ES的一大核心就是查询检索,所以涉及这种大量的查询检索模式,最好是具备抽象且易于扩展的设计模式。 ES查询下个版本设计,这个版本查询代码废掉。先在此保存一下,,,/** * 〈一句话功能简述〉<br> * 〈功能详细描述〉组合查询DTO * * @author wangzha * @see [相关类/方法](可选) * @s...

2018-05-15 11:00:23 1267 1

原创 Jest客户端索引添加、数据查询、分页实例

/** * 〈一句话功能简述〉操作ES的Jest客户端<br> * 〈功能详细描述〉 * * @author wangzha * @see [相关类/方法](可选) * @since [产品/模块版本] (可选) */public class JestService<T> { public stat

2018-05-11 15:24:25 8292 5

翻译 Spark对ES的读写

Apache Spark是一个快速且通用的集群计算系统。 它提供了Java,Scala和Python中的高级API以及支持通用执行图的优化引擎。Spark通常通过将数据缓存到内存中,从而为大型数据集提供快速的迭代/功能类功能。 与本文档中提到的其他库相反,Apache Spark是一种计算框架,与Map / Reduce本身无关,但它与Hadoop集成,主要针对HDFS。 elasticsea...

2018-04-28 20:01:45 13450 2

原创 动态规划

动态规划(DP)思想:通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。(在分治思想中,前一子问题和后一子问题互不影响)在求解任一子问题时,列出各种可能的局部解,通过决策保...

2018-04-25 20:09:23 188

转载 java实现汉诺塔

转载自:http://blog.csdn.net/ljmingcom304/article/details/50296939 存在A、B、C大小形同的3根石柱,其中A石柱从下往上按照大小顺序依次摆放着n个盘子,现在需要将A石柱的盘子全部移动到C石柱上,并且每次只能移动一个圆盘,小圆盘不能放在大圆盘上,请问该如何移动? 算法分析: 当n=1时,也就是刚开始A石柱上仅仅摆放一个圆盘,那么...

2018-04-24 17:25:42 5390 1

原创 树和堆的一些概念

对于大量的输入数据,链表的线性访问时间太慢。树是一种简单的数据结构,其大部分操作的运行时间平均为O(logN)。二叉查找树是TreeSet和TreeMap实现的基础。树可以用几种方式定义。一种方式是递归,一棵树是一些节点的集合。这个集合可以是空集,若不是空集,则树由称作根的节点root已经0个或多个非空子树组成。一棵树是N个节点和 N-1条边的集合。 二叉树:其中每个节点都不能有多于两个的...

2018-04-24 16:58:49 1399

转载 分治算法

分治算法:快速排序,归并排序,汉诺塔问题,傅立叶变换,包括动态规划,贪心算法都有运用到分治思想。分治策略是: 对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。1、将问题的规模变小,变成若干个子问题...

2018-04-24 11:35:19 124

原创 java实现二叉查找树

package com.algorithm;import java.util.Comparator;import java.util.Iterator;import java.util.Stack;/** * 功能简述<p>: * 功能详述: * * author:wangzha */public class BinarySearchTree<T&gt...

2018-04-23 23:33:56 165

原创 LeetCode算法练习(三数之和)

题目给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。注意事项 在三元组(a, b, c),要求a <= b <= c。结果不能包含重复的三元组。您在真实的面试中是否遇到过这个题? 样例 如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:(-1, 0, 1)(-1, -1...

2018-04-23 17:13:34 1556

转载 计算机如何启动的

原文地址: http://www.ruanyifeng.com/blog/2013/02/booting.html我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示…… 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义先问一个问题,”启动”用英语怎么说?回答是boot。可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这...

2018-04-23 15:05:52 134

转载 java实现二叉查找数迭代

题目描述Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST. 实现一个适用于二叉查找树的迭代器,该迭代器通过二叉查找树的根结点来实例化。Calling next() will return the next ...

2018-04-23 14:59:27 178

转载 堆排序

堆排序  堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆  堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数...

2018-04-23 11:28:28 96

转载 归并排序

基本思想  归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。分而治之   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递...

2018-04-23 11:27:23 108

转载 快速排序

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列基本步骤三数取中  在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。在此我们采用三数取中...

2018-04-23 11:26:10 136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除