自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

横云断岭的专栏

日落黄金台金黄落日--微信公众号:横云断岭的专栏

  • 博客(210)
  • 资源 (4)
  • 收藏
  • 关注

原创 kafka web console安装

貌似很多小伙伴都不能成功打包,共享下之前打包的文件:http://pan.baidu.com/s/1sjkE37J ========kafka自己居然没有还一个Web管理界面。。这里有个第三方的: https://github.com/claudemamo/kafka-web-console坑爹的是居然没有详细的安装步骤,只有一些简单的说明,对于不熟悉scala pla...

2014-10-24 19:15:37 23122 7

原创 移动App通讯协议及序列化方式的选择

简单列一下不同协议,序列化方式等的考虑。http还是私有协议?http协议优/缺点:在服务器端只需要提供一份接口,浏览器和app共用。在app中嵌入web view也很容易。http协议的相关工具非常多。开发人员很方便 。比如负载均衡,直接nginx搞定。比如统计一个接口的调用次数,相当的方便,有现在的分析工具。压力测试也很方便。http协议可能http服务器有漏洞

2014-07-12 17:59:36 7806

原创 Android 的WebView使用CookieManager崩溃的问题

应用里,如果用户退出登陆了,而WebView里还没有退出登陆,这就有点蛋疼了。所以在用户退出时,要清除WebView的Cookie。但是据说调用CookieManager应用可能会崩溃。先来看下微信是怎么做的,反编绎了下微信的apk,发现是这样的:private void a(Activity paramActivity, String[] paramArrayOfString){

2014-07-03 20:18:39 8100 1

原创 从一篇Blog看两个并发编程错误

发现公司支付宝接入的代码有点神奇,在网上搜索了下,找到原始版本。估计有不少人都是抄那份代码的。原文在:http://blog.csdn.net/simdanfeg/article/details/9011603    Android支付接入(一):支付宝但是代码里有两个明显的并发问题,尽管在Android下可能不会有问题。下面摘抄一段: public class Mobi

2014-07-03 20:03:00 2128 1

原创 C++11的thread代码分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/class threadthread类直接包装了一个pthread_t,在linux下实际是unsigned long int。class thread{ pthread_t __t_; id get_id() const _NOEXCEPT {return __t_;}}

2014-06-29 20:50:57 12974 2

原创 移动App该如何保存用户密码

 update 2018-06-042015年出的一个规范 JSON Web Token (JWT)  https://tools.ietf.org/html/rfc7519 JWT 官网: https://jwt.io/  八幅漫画理解使用JSON Web Token设计单点登录系统: http://blog.leapoahead.com/2015/09/07/user-auth...

2014-06-28 14:15:01 56639 12

原创 C++11中的mutex, lock,condition variable实现分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。不过里面也有很多细节值得学习。std::mutex先来看下std::mutex:包增了一个pthread_mutex_t __m_,很简单,每个函数该干嘛就干嘛。class mutex

2014-06-22 22:57:32 13635 1

原创 C++11中once_flag,call_once实现分析

本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅助类once_flag,call_once。声明首先来看一下once_flag和call_once的声明:struct once_flag{ constexpr

2014-06-22 01:29:00 15081 2

原创 写程序很难之去除字符串的空白字符

在做性能调优时,用JProfiler测试Web应用的性能,发现有个replaceBlank函数占用了10%的CPU时间,进去看了下,是个简单的用正则去除XML文档里空白字符串的功能。但是这个简单功能却消耗了10%的性能。在Web应用里,去掉空白字符串,似乎是个简单的功能,但是真正写起来,却也有些麻烦事。总结下。方式一:正则表达式http://stackoverflow.com/ques

2014-06-16 02:51:44 6515

原创 Java的LockSupport.park()实现分析

LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); public native void park(boolean isAbsolute, long ti

2014-06-03 02:52:12 49605 17

原创 并行编程之条件变量(posix condition variables)

在整理Java LockSupport.park()的东东,看到了个"Spurious wakeup",重新梳理下。首先来个《UNIX环境高级编程》里的例子:#include struct msg { struct msg *m_next; /* ... more stuff here ... */};struct msg *workq;pthread_cond_t qread

2014-06-02 00:24:44 7102 2

原创 有意思的游戏:Google XSS Game

Google最近出了一个XSS的游戏:https://xss-game.appspot.com/我这个菜鸟看提示,花了两三个小时才全过了。。这个游戏的规则是只要在攻击网页上弹出alert窗口就可以了。题目页面是在iframe里嵌套的展现的,那么父窗口是如何知道iframe里成功弹出了窗口?是这样子实现的:题目页面加载了这个js,改写了alert函数,当alert被调

2014-05-31 17:34:38 5384

原创 扯谈web安全之JSON

前言JSON(JavaScript Object Notation),可以说是事实的浏览器,服务器交换数据的标准了。目测其它的格式如XML,或者其它自定义的格式会越来越少。为什么JSON这么流行?和JavaScript无缝对接是一个原因。还有一个重要原因是可以比较轻松的实现跨域。如果是XML,或者其它专有格式,则很难实现跨域,要通过flash之类来实现。任何一种数据格式,如

2014-05-29 21:03:53 30340 3

原创 利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码

 安装hsdis要查看JIT生成的汇编代码,要先装一个反汇编器:hsdis。从名字来看,即HotSpot disassembler。实际就是一个动态链接库。网络上有已经编绎好的文件,直接下载即可。国内的:http://hllvm.group.iteye.com/也可以自己编绎,只是编绎hsdis,还是比较快的。参考这里:http://www.chrisnewland.com...

2014-05-25 15:04:26 13836 5

原创 并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环

背景大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码:static int flag = -1;void thread1(){ while(flag > 0){ //wait or do something }}void thread2(){ //do something f

2014-05-25 01:30:26 6200 3

原创 ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析

原理这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码。其实官方是清楚这个漏洞

2014-05-23 02:11:32 15226

原创 写程序很难之logstash之file input插件实现分析

前言写程序有时候真的有点难,要考虑各种情况。应用在运行中,会不断生成日志文件。假如要实现一个日志收集的工具,不考虑其它的分析功能,只考虑收集,有哪些方面要考虑的?首先看下一般的log框架是如何输出日志的:可能是这样的:a.log.1,  a.log.2, a.log.3, a.log.4, a.log.5 循环输出;可能是这样的: a.2014-5-5.log, a.2014-

2014-05-14 20:24:09 28659 4

原创 扯谈网络编程之Tcp SYN flood洪水攻击

 update 2017-5-11: syncookies 会点用 tcp_options 字段空间,会强制关闭 tcp 高级流控技术而退化成原始 tcp 模式。此模式会导致 封包 丢失时 对端 要等待 MSL 时间来发现丢包事件并重试,以及关闭连接时 TIME_WAIT 状态保持 2MSL 时间。 简介TCP协议要经过三次握手才能建立连接:(from wiki)于是出...

2014-05-12 20:45:03 26288 6

原创 ZPush--基于netty4实现的苹果通知推送服务(APNs)Java客户端

简单说下实现苹果通知推送服务(APNs)客户端的一些要注意的地方:使用长连接;sanbox服务器是没用的,调试时直接用“gateway.push.apple.com”域名;对于错误的Notification,苹果会回应一个Error response,里面有个identifier,在这个identifier之后的Notification全都失败;因此发送者要缓存已经发送的Not

2014-05-10 00:46:11 8449 12

原创 蛋疼的Apple IOS Push通知协议

简介Apple Push通知机制其实很简单,就是Apple的APNs服务器做为中间人,把消息推送到对应的设备上。一张来自Apple文档的图:当然,示意图看起来简单,但是还有一些实际的问题。比如,如何区分Provicer的?如何区分设备的?简单而言,是这样的:每个应用都有一个自己的证书(certificate),开发者可以从苹果那里获得;应用可以到APNs服务

2014-05-10 00:33:07 10556 1

原创 用KGdb和VMware调试Linux内核,System Call

Linux的内核和System Call不好调试,参考这里:http://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-code简单来说,如果想在本机调试system call,那么当你进入system call时,系统已经在挂起状态了,那么它又怎样能响应用户的输入?所以,有一个UML

2014-05-03 20:59:10 4376

原创 JVM GC调优一则--增大Eden Space提高性能

缘起线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。思路思路是Tomcat本身的代码应该是没有问题的,有问题的可能是应用代码升级,或者环境改变了,总之Tomcat的优先级排在最后。先把应用的heap dump下来分析下:jmap -dump:format=b,file=path pid用IBM的...

2014-05-03 18:29:54 71537 7

原创 扯谈网络编程之自己实现ping

ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的。ping实际上是发起者发送一个Echo Request(type = 8)的,远程主机回应一个Echo Reply(type = 0)的过程。为什么用ping不能测试某一个端口刚开始接触网络的时候,可能很多人都有疑问,怎么用ping来测试远程主机的某个

2014-05-03 05:37:12 6129

原创 Apache HttpClient 没有设置time out导致应用长时间阻塞的问题

现在的对外接口一般都是Http + json的,因为简单,语言无关。Apache HttpClient应该是最常用的Java http组件了。这货有个坑爹的地方,Apache HttpClient如果对方不回应,或者网络原因不返回了,那么HttpClient会一直阻塞。这种情况在公网可能比较容易碰到。在内网时,也有一次因为一台中转的nginx挂掉而导致hessian请求长时间阻塞。因为Ht

2014-04-21 19:46:12 25292 2

原创 利用redis缓存热门数据,分页的一种思路

普通分页一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。一种思路最近想到了另一种思路。数据以ID为key缓存到Redis里;把数据ID和排序打分存到Redis的skip list,即zset里;

2014-04-21 19:26:52 30496 3

原创 在Java里处理文件的技巧

update: 2016-8-4从URL转换为File的方法:1. 先判断URL是否是 file: 开头的2. 用new File(url.toURI()); 来转换为File注意,因为url当有空格时,会被转义为%20,所以要转换为URL,再转为File。另外要注意处理这个转义时不能使用URLDecoder。参考:http://stackoverflow.com/a/17870390写这篇B...

2014-04-19 21:05:52 21288

原创 为什么在Spring的配置里,最好不要配置xsd文件的版本号

为什么dubbo启动没有问题?这篇blog源于一个疑问:我们公司使了阿里的dubbo,但是阿里的开源网站http://code.alibabatech.com,挂掉有好几个月了,为什么我们的应用启动没有问题?我们的应用的Spring配置文件里有类似的配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns...

2014-03-30 14:24:31 63918 8

原创 应对Memcached缓存失效,导致高并发查询DB的几种思路

当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升。这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询。个人认为,当缓存将要失效时,及时地把新的数据刷到memcached里,这个是解决缓存失效瞬间高并发查DB的最好方法。那么如何及时地知道缓存将要失效?解决这个问题有几种思路:比如一个key是

2014-03-07 22:45:30 13978 9

原创 Web API 版本控制的几种方式

http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html这篇文章写得很好,介绍了三种实现web api版本化的三种方式。我从评论里又收集到两种方式,所以一共是5种:方式一:利用URL HTTP GET:https://haveibeenpwned.com/api/v2/breacheda...

2014-03-05 20:28:32 39558 13

原创 扯谈下XA事务

普通事务普通事务的实现是比较好理解的。以jdbm3为例,大概是这样的过程:每个事务都新建一个事务文件,当commit时,先把修改过的数据块,写到事务文件里,然后再一次性地写到数据库文件里。如果commit时挂掉了,那么重启之后,会再次从事务文件里把修改过的块写到数据库文件里。最后再删除事务文件。https://github.com/jankotek/JDBM3 但是XA事务...

2014-02-20 21:34:19 21685 2

原创 抢红包的红包生成算法

过年微信红包很火,最近有个项目也要做抢红包,于是写了个红包的生成算法。 红包生成算法的需求预先生成所有的红包还是一个请求随机生成一个红包简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)范围的整数,再加上mi...

2014-02-18 22:16:32 61662 21

原创 分片(Sharding)的全局ID生成

数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求:不能有单点故障。以时间为序,或者ID里包含时间。这样一是可以少一个索引,二是冷热数据容易分离。可以控制ShardingId。比如某一个用户的文章要放在同一个分片内,这样查询效率高,修改也容易。不要太长,最好64bit。使用long比较好操作,如果是96bit,那就要各种移位相当的不方便,还有可能有些组件不能支持这么大的ID。

2014-02-16 18:37:48 22130 3

原创 zookeeper运维

尽管zookeeper在编程上有很多的阱陷,API也非常的难用,但zookeeper服务本身可以说是很牢靠的了,所以在网上貌似关于运维的文章比较少。但省心并不代表不会出麻烦,下面总结下zookeeper运维相关的东东。重要的参考资料这里有一个很好的Pdf,介绍了很多zookeeper的东东,作者是zookeeper的committer之一:http://www.infoq.com/p...

2014-02-09 15:06:37 89421 3

原创 Linux配置启动项,自启动服务

Linux下有两种机制,一个是旧式的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart机制。参考:http://www.cnblogs.com/cassvin/archive/2011/12/25/ubuntu_init_analysis.html这个也可以说是Linux的蛋疼的地方了,启动的

2014-02-08 21:02:00 17956 1

原创 适应各种开发,测试,线上,线下环境的Spring配置方式

 背景假设开发了一个中间件,比如是一个缓存系统,这个中间件要配置一个IP地址,还要配置一个Factory,从这个Factory里得到一个client,如:  <bean name="cacheFactory" class="com.test.cache.Factory"> <property name="address" value="192.168...

2014-01-25 22:36:43 9540

原创 hazelcast的坑爹事

简介开源中国的简介:Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括:提供java.util.{Queue, Set, List, Map}分布式实现。提供java.util.concurrency.locks.Lock分布式实现。提供java.util.concurrent.ExecutorService分布式实现。提供用于一对多关系的分布式MultiMa

2014-01-19 22:11:44 35516 4

原创 Java7里try-with-resources分析

这个所谓的try-with-resources,是个语法糖。实际上就是自动调用资源的close()函数。和Python里的with语句差不多。例如: static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(...

2014-01-18 22:18:34 40277 9

原创 编绎调试HotSpot JVM及在Eclipse里调试

编绎整个OpenJDK要很久,而且有很多东西是不需要的。研究HotSpot的话,其实只要下HotSpot部分的代码就可以了。下面简单记录下编绎调试HotSpot一些步骤。一、编绎进入hotsopt的make目录下:cd code/cpp/openjdk/hotspot/make/用make help可以看到有很多有用的信息。当然查看Makefile文件,里面也有很多有用的注释。...

2013-12-08 16:20:29 9643 2

原创 http response乱码的真相

这个是很久以前的笔记,最近遇到一个编码问题,重新把它翻出来了。这个只和java servlet有关,现在通常都用各种框架,很少会直接用到Servlet了。查看servlet源代码的方法查看servlet源代码的方法。因为servlet只是一些接口,并不是真正的实现,所以,如果想看真正的代码。要去下对应的服务器的实现的源代码。比如Tomcat的代码在这里:http://a

2013-12-01 16:09:44 19499

原创 http request乱码的真相

当然,终极原因http协议里没有规定request一定要指定编码,导致浏览器,web服务器都各搞一套……下面一一理清。首先,从浏览器端看下有多少种情况:1.在浏览器的地址栏,或者搜索框里输入地址:http://www.test.com/衣服/search?keyword=T恤 2.在一个指定了编码的网页中,提交一个form,如: 你好 搜索当然还有

2013-12-01 15:58:13 30705 1

The XA Specification XA规范

The XA Specification XA规范

2014-02-20

处理器分支预测研究的历史和现状

处理器分支预测研究的历史和现状。 一篇介绍cpu分支预测技术的文章。

2012-07-08

同时多线程处理器上的动态分支预测器设计方案研究.pdf

同时多线程处理器上的动态分支预测器设计方案研究。 一篇关于分支预测的论文

2012-07-08

QT 提问的程序代码

QT 提问的程序代码 QT 提问的程序代码 QT 提问的程序代码 QT 提问的程序代码 QT 提问的程序代码

2010-12-13

空空如也

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

TA关注的人

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