- 博客(40)
- 资源 (1)
- 收藏
- 关注
原创 CAP 和 Zookeeper
引言很长一段时间,我执着于将Zookeeper归类为CP系统还是AP系统。对于Zookeeper的C或者A,我感到迷惑,网络上有很多文章都将Zookeeper 标注为一个 CP 系统,但是我不那么认为,因为 Zookeeper 采用投票机制,所以它的一致性并不强烈;同时很多文章中说在Zookeeper 投票期间是丧失了可用性的,我同样也有一些疑问。怎么理解 CAP2000年7月,来自加州大学伯克利分校的 Eric Brewer 教授在 ACM PODC(Principles of Distribute
2021-01-09 17:09:22 497
原创 AQS 杂谈
我想要在代码层面实现一把锁。假如是一把排他锁,获取锁,相当于争夺一份公共资源,即:一个共享变量。那么就可以是一个Boolean类型的变量,false就是锁空闲等待获取,true就是已经被锁,为了在获取锁的时候保证原子性,可以使用AtomicBoolean.这样就实现了不可重入锁,那如果想重入呢,就不能用非错即对的Boolean类型了,可以用integer类型。相应的,为了保证获取锁的原子性,可以使用AtomicInteger。而AtomicInteger是一个比较复杂的工具类,而这里只需要用到一个
2020-06-02 11:52:51 287
原创 浮点类型精度丢失和BigDecimal
精度丢失在工作中经常会遇到数值精度问题,比如说使用float或者double的时候,可能会有精度丢失问题,下面来总结一下吧。为了引出问题,先看一个例子(Java代码): public static void main(String[] args) { float f = 2.25f; double d = (double) f; System.out.println(d); f = 2.2f; d = (doubl
2020-05-27 20:33:43 618
原创 浅谈I/O
I/O设备I/O设备大致可以分为两类:块设备和字符设备。块设备把信息存储在固定大小的块中,每个块有自己的地址。所有传输以一个或多个完整的块为单位。块设备的特征是每个块都能独立于其他的块而读写。字符设备以字符为单位发送或接收一个字符流,而不考虑任何块结构。字符设备是不可寻址的,也没有任何寻道操作。例如打印机、网络和鼠标等。设备控制器I/O设备一般都会有一个设备控制器,或者叫作适配器。负责将设备的数据处理成为一种规整简单的容易处理的数据输出,或者把传输给设备的比特流适配成为设备可以识别的数据交付。以
2020-05-14 15:24:33 978
原创 记录一次机器load高
周一的清晨,当我寻着熟悉的节奏坐在工位前,打开一堆工具,准备开始敲我无谓的代码的时候,发现右边黄色的报警闪个不停,点开,又是机器load高的报警消息。刚巧,记起几天前看到的一篇文章里面有个工具,可以更方便的定位load高的线程。抓耳挠腮,翻找半天,诶,找到了:show-busy-java-threads。把文件传到机器上面,然后看半天说明,有了以下的命令:sudo ./show-busy...
2019-12-23 15:27:28 470
原创 kafka 对外提供服务方案简述
背景首先,用户数据会经过 kafka 队列传递到我们的业务层。我们希望用户能够通过一个通用层接入我们的kafka服务,但是有的用户希望能够直接连到我们的 kafka 上面,这就需要我们的 kafka 对外暴露broke服务以便被接入。那么如何保证用户数据接入的可靠性和安全性,就成为了这篇文章的主要内容。目标我们希望其他公司数据接入的方式尽量松耦合,尽量不依赖内部架构,而对于一些用户要直
2018-01-22 14:01:20 6158
原创 在 kafka 的 broke 和 client 之间加入 SSL 双向认证
参考:https://kafka.apache.org/documentation/#security单向认证首先实现单向的认证,即,client 对 broker 的认证。就像浏览器对服务器的认证一样。 注:密钥生成过程中的密码统一为test123。为broke生成keystore第一步是为集群的每台机器生成密钥和证书,可以使用java的keytool来生产。我们将生成密钥
2018-01-19 19:21:32 4701
原创 SSL 杂谈,想谈的,谈错了
93年,鲁西南某个小村子,那时候,家家户户都比较贫困,黑乎乎的厨房里那口大铁锅也很少沾油腥。蔬菜是不缺的,大家都有庄稼地,村里集中好大的一片地方,大家的菜地都在那里。半晌的时候,肚子咕咕叫,就从屋里抓个馒头跑到那片菜地里,钻进随便谁家的蒜苗或者葱叶里,挑出最嫩的那一缕,夹在掰开的馒头片里面,一口咬下去,浑身的满足。小明和小霞从小就生活在这片土地上,两家是好多年的邻居,小明听他妈说他小时候还吃过
2018-01-05 17:35:50 303
原创 kafka 简单安装以及java小demo
系统:centos7 下载kafka:http://kafka.apache.org/downloads ,我下载的版本为 kafka_2.11-0.10.1.0.tgz 。 安装ZooKeeper,默认已经安装好 zookeeper-3.4.9 并已经启动。第1步,下载解压 kafka:# tar -xzf kafka_2.11-0.10.1.0.tgz # cd kafka_
2018-01-04 18:09:49 8160 2
原创 com/beust/jcommander/ParameterException : Unsupported major.minor version 52.0
起因我把一堆 jar 包引入了某个 Service 工程,然后提交代码,并在 Jenkins 上构建-测试-部署。 结果:构建成功,测试抛异常。异常如下: com/beust/jcommander/ParameterException : Unsupported major.minor version 52.0经过百度一下,典型的用高版本的JDK编译产生的class文件,用低版本的JDK运行
2017-12-07 11:25:52 1013
原创 一个 Top k 问题
这个问题其实是由下面这个问题引入的: 从20亿个数字的文本中,找出最大的前100个。这个问题的比较好的解决方法就是,维护 k 个元素的小根堆,用容量为 k 的最小堆存储最先遍历到的 k 个数,并假设它们即是最大的 k 个数,建堆费时O(k)后,假如 k1 为根,那么有 k1 就是这 k 个元素中最小的元素)。继续遍历数列,每次遍历一个元素x,与堆顶元素比较,x>k1,更新堆(用时logk),否
2017-11-28 15:10:23 448
原创 zookeeper 中 Watcher 通知机制的一点理解
首先,ZooKeeper 提供了分布式数据的发布/订阅功能。这让我想到一种模式,观察者模式:一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题自身状态变化时,会通知所有订阅者,试它们能够做出相应的处理。那 ZooKeeper 是不是也是使用了这个经典的模式呢?在 ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。
2017-11-24 16:37:42 28139 4
原创 OAuth 2.0 ——授权码模式
OAuth 是一个关于授权(authorization)的开放网络标准,主要应用在第三方登录场景,目前的版本是2.0版。本文主要参考材料为:RFC 6749阮一峰的网络日志《理解OAuth 2.0》其实,阮一峰的文章基本上就是翻译的 RFC 6749 文档,卷面很整洁,让人看起来很舒服,但是,内容却不怎么样,前后有点接不上,翻译的不全面,有些地方也没有解释清楚,本文尽量做一些补充。还有一个问题
2017-11-22 17:22:44 4199 2
原创 zookeeper 使用场景
ZooKeeper 是一个高可用的分布式数据管理与协调框架。基于对 ZAB 算法的实现,该框架能够很好地保证分布式环境中数据的一致性。 ZAB 算法、Paxos 算法、2PC、3PC、一致性hash算法 等ZooKeeper 可以保证以下几点分布式一致性的特性:
2017-11-09 18:14:36 432
原创 关于java 数组 forEach() 以及 remove 的使用
首先,对于Java中数组的遍历,目前有三种方式,for循环、Iterator迭代和forEach遍历,下面就来说说这几种循环方式。由于本文只关心数组,所以下面都以ArrayList为例(基于 jdk 1.7 )。
2017-11-07 18:15:15 4455 2
转载 一致性协议——2PC/3PC
为了解决分布式一致性问题,在长期的探索研究过程中,涌现出了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议和 Paxos 算法了。本文将着重介绍二阶段和三阶段提交协议的设计与算法实现流程。
2017-11-01 19:00:01 361
原创 事务从集中式到分布式的转变
对于本地事务处理或者是集中式的事务处理系统,很显然我们可以采用已经被实践证明很成熟的 ACID 模型来保证数据的严格一致性。但是随着分布式事务的出现,传统的单机事务模型已经无法胜任。尤其是对于一个高访问量、高并发量的互联网分布式系统来说,如果我们期望实现一套严格满足 ACID 特性的分布式事务,很可能出现的情况就是在系统的可用性和严格一致性之间出现冲突。于是,如何构建一个兼顾可用性和一致性的分布式系统成为了无数工程师
2017-11-01 15:29:33 598
原创 记一次MySQL使用外网IP连接超时
背景:刚买的一台阿里云ecs服务器,专用网络,centos 7操作系统。现象:安装完MySQL,尝试使用Navicat从外网连接,显示:Can't connect to MySQL server (10060)解决过程:
2017-06-07 18:00:34 2953 4
原创 Java List浅谈(基于jdk1.7)
List是重要的数据结构之一。最常见也是最重要的3种List实现:ArrayList、Vector、和LinkedList,它们的类图如下所示:
2016-11-15 13:35:55 6769
原创 Java Map浅谈(jdk1.7)
Map是非常常用的一种数据结构,最常用的一些Map实现如下图所示:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。
2016-10-28 17:19:03 2974
转载 转:我是怎么招聘程序员的
也特别讨厌面试官去问一些技术细节或者让写出什么算法的伪码什么的,甚至连笔试我都很讨厌。看到一篇关于面试的文章感觉很好,特别喜欢其中的两句话“应聘者真实和自然的表现,从而才能了解到最真实的东西”“重要的不是知识,重要的是其查找知识的能力”“重要的不是那个解题的答案,而是解题的思路和方法”
2016-10-25 11:51:34 2398
原创 redis cluster集群配置
按照redis官方说明进行安装下载redis最新安装包redis-3.2.3.tar.gz,解压,根目录下make&&make install,会在src编译出redis-server、redis-cli等文件下面是一个最少选项的集群的配置文件:port 7000cluster-enabled yescluster-config-file nodes.confcluste
2016-09-14 22:15:30 2490
原创 配置文件分离的maven工程结构
一般来讲,代码的生命周期:编写--->打包--->本地测试--->测试环境测试--->灰度环境测试--->生产环境运行。不同的环境下,代码使用的IP地址、数据库地址以及程序参数等各种配置必定存在差异,如果说每换一种环境就手动修改配置文件手动打包,那就太原始了。假如我要做一个web项目,包含通用性代码(common),逻辑性代码(service),数据库操作代码(DAO)等模块,那么我会分别生成
2016-06-24 16:51:38 794
原创 记录一次Linux下MySQL中文乱码,没有my.cnf
上学的时候就遇到过MySQL中文乱码的东西,工作后好久不用,这几天做个练习,又再次出现。MySQL字符乱码一般有几个地方的配置:1、数据库内置编码格式character_set_server,默认的是latin1;2、数据库的编码格式,创建数据库的时候可以设置;3、表以及字段的编码格式,创建表的时候可以设置;OK,数据库方面主要就是这3个地方了,统一起来一般是utf-8(utf16
2016-06-16 15:50:39 1914
原创 Java编程思想(第四版)笔记(三)
第9章 接口“确认接口是理想选择,因而应该总是选择接口而不是具体的类。”这其实是一种引诱。当然,对于创建类,几乎在任何时刻,都可以替代为创建一个接口和一个工厂。许多人都掉进了这种诱惑的陷阱,只要有可能就去创建接口和工厂。这种逻辑看起来好像是因为需要使用不同的具体实现,因此总是应该添加这种抽象性。这实际上已经变成了一种草率的设计优化。任何抽象性都应该是应真正的需求而产生的。当必需时,你应
2016-06-01 15:29:19 603
原创 Java编程思想(第四版)笔记(二)
第7章 复用类7.6 protected关键字指明“就类用户而言,这是private的,但对于任何继承于此类或其他任何位于同一个包内的类来说,它却是可以访问的。”尽管可以创建protected域,但是最好的方式还是把域保持为private;你应该一直保留“更改底层实现”的权利,然后通过protected方法来控制类的继承者的访问权限。7.7 向上转型由导出类转型成基类(由子类转
2016-05-26 11:04:09 558
原创 Java编程思想(第四版)笔记(一)
闲来无事,重读一遍Java编程思想,有些自己感觉容易忘记的东西,记个笔记。 第2章 一切都是对象 22 基本类型 第3章 操作符 7 关系操作符 16 Java没有sizeof 第4章 控制执行流程 33 逗号操作符 第5章 初始化与清理 2 方法重载 4 this关键字 5 清理终结处理和垃圾回收 7 初始化顺序 第6章 访问权限控制
2016-05-25 11:53:48 1519
原创 centos 7 安装FastDFS 5.09
安装FastDFS还需要安装libfastcommon作为前提条件,首先准备安装包FastDFS和libfastcommon。libfastcommon下载地址: https://github.com/happyfish100/libfastcommon.gitFastDFS的下载地址:https://github.com/happyfish100/fastdfs/releases/t
2016-05-18 17:38:54 8867 5
原创 twemproxy---redis/memcache代理
Use 0.0.0.0 on the listen command to tell twemproxy to listen on all available network interfaces on the server.当使用node_redis连接twemproxy的时候,node_redis默认会向redis服务端发送“info”信息来确认server状态是否是ready,而twemproxy是不支持的,所以要在连接redis的
2015-06-08 21:23:58 843
原创 Socket.io的一点理解
使用io(url)是要优于io.connect(url)的。当参数中的transports 为空的时候,默认为:['polling', 'websocket'],这样那么就觉得很奇怪,并不是按照官网上面所说的那么个顺序:['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling'],所以我将其修改为:
2015-06-01 10:58:22 1371
原创 火狐Firebug提示:ReferenceError: "sth" is not defined
当确定所引用 的文件没问题的时候,当确定路径没问题的时候:JS是解释型语言,是根据标签引用分块顺序执行的,需要用到sth的话,必须将包含它的文件放在使用它的JS前面。
2015-05-15 16:59:50 1267
原创 有关node.js异步以及常用插件的一点了解
node.js是做什么的不再赘述。在使用的过程中有几个组件,又叫第三方插件,觉得比较好用。node.js的异步在无堵塞优势的强大下,又留下了回调大坑,是初次接触node的程序员心里难以磨灭的伤痕。很多情况下,不得不在强大的异步氛围中寻求如何同步的方法。几种第三方插件,我还是喜欢用async,详细的API说明:
2015-05-08 14:29:05 739
转载 轻量级HTTP服务器Nginx(配置与调试Nginx)
Nginx安装完毕后,会产生相应的安装目录,根据前面的安装路径,Nginx的配置文件路径为/opt/nginx/conf,其中nginx.conf为Nginx的主配置文件。这里重点介绍下nginx.conf这个配置文件。 Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位
2014-08-14 16:09:17 442
转载 Nginx 的 Location 配置指令块
最近一段时间在学习 Nginx ,以前一直对 Nginx 的 Location 配置很头大,最近终于弄出点眉目。总结如下:nginx 配置文件,自下到上分为三种层次分明的结构: | http block the protocol level | server block the server level V location block
2014-08-14 14:19:17 344
原创 hibernate中用findByExample方法出现Unknown entity: XXX异常
public List findByExample(Apply instance) { System.out.println("finding Apply instance by example"); try { List results = getSession() .createCriteria("Apply") .add(Example
2014-05-14 10:36:07 1097
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人