负责7K+应用,100K+机器的Spring Boot微服务技术落地,关注开发体验,微服务,APM,应用诊断技术。Dubbo/Arthas开源。 github: https://github.com/hengyunabc
缘起 最近有个分布式限速的需求。支付宝的接口双11只允许每秒调用10次。 单机的限速,自然是用google guava的RateLimiter。
000 最近碰到一个问题,把解决的过程记录下来。 故障原因 同事的应用上线,Tomcat无法正常启动。抛出这样的异常: org.
貌似很多小伙伴都不能成功打包,共享下之前打包的文件: http://pan.baidu.com/s/1sjkE37J ======== kafka自己居然没有还一个Web管理界面。
简单列一下不同协议,序列化方式等的考虑。 http还是私有协议? http协议优/缺点: 在服务器端只需要提供一份接口,浏览器和app共用。
应用里,如果用户退出登陆了,而WebView里还没有退出登陆,这就有点蛋疼了。所以在用户退出时,要清除WebView的Cookie。
发现公司支付宝接入的代码有点神奇,在网上搜索了下,找到原始版本。估计有不少人都是抄那份代码的。 原文在:http://blog.csdn.net/simdanfeg/article/details/9011603 Android支付接入(一):支付宝 但是代码里有两个明显的并发问题,尽管在Android下可能不会有问题。
本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ class thread thread类直接包装了一个pthread_t,在linux下实际是unsigned long int。
update 2018-06-04 2015年出的一个规范 JSON Web Token (JWT) https://tools.
本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。
本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。
在做性能调优时,用JProfiler测试Web应用的性能,发现有个replaceBlank函数占用了10%的CPU时间,进去看了下,是个简单的用正则去除XML文档里空白字符串的功能。
LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); public native void park(boolean isAbsolute, long time); isAbsolute参数是指明时间是绝对的,还是相对的。
在整理Java LockSupport.park()的东东,看到了个"Spurious wakeup",重新梳理下。 首先来个《UNIX环境高级编程》里的例子: #include struct msg { struct msg *m_next; /* .
Google最近出了一个XSS的游戏: https://xss-game.appspot.com/ 我这个菜鸟看提示,花了两三个小时才全过了。
前言 JSON(JavaScript Object Notation),可以说是事实的浏览器,服务器交换数据的标准了。目测其它的格式如XML,或者其它自定义的格式会越来越少。
安装hsdis 要查看JIT生成的汇编代码,要先装一个反汇编器:hsdis。从名字来看,即HotSpot disassembler。
背景 大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码: static int flag = -1; void thread1(){ ...
原理 这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。
前言 写程序有时候真的有点难,要考虑各种情况。 应用在运行中,会不断生成日志文件。假如要实现一个日志收集的工具,不考虑其它的分析功能,只考虑收集,有哪些方面要考虑的? 首先看下一般的log框架是如何输出日志的: 可能是这样的:a.
update 2017-5-11: syncookies 会点用 tcp_options 字段空间,会强制关闭 tcp 高级流控技术而退化成原始 tcp 模式。
简单说下实现苹果通知推送服务(APNs)客户端的一些要注意的地方: 使用长连接; sanbox服务器是没用的,调试时直接用“gateway.
简介 Apple Push通知机制其实很简单,就是Apple的APNs服务器做为中间人,把消息推送到对应的设备上。 一张来自Apple文档的图: 当然,示意图看起来简单,但是还有一些实际的问题。
Linux的内核和System Call不好调试,参考这里: http://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-...
缘起 线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。
ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的。
update 2014-5-18: 今天又处理了一个HttpClient阻塞的问题,还是socket read没有超时设置。
普通分页 一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。 如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。
update: 2016-8-4 从URL转换为File的方法: 1. 先判断URL是否是 file: 开头的 2. 用 new File(url.toURI()); 来转换为File 注意,因为url当有空格时,会被转义为%20,所以要转换为URL,再转为File。
为什么dubbo启动没有问题? 这篇blog源于一个疑问: 我们公司使了阿里的dubbo,但是阿里的开源网站http://code.alibabatech.com,挂掉有好几个月了,为什么我们的应用启动没有问题? 我们的应用的Spring配置文件里有类似的配置: 我们都知道Spring在启动时是要检验XML文件的。
最近看到nginx的合并回源,这个和下面的思路有点像。不过nginx的思路还是在控制缓存失效时的并发请求,而不是当缓存快要失效时,及时地更新缓存。
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html 这篇文章写得很好,介绍了三种实现web api版本化的三种方式。
普通事务 普通事务的实现是比较好理解的。以jdbm3为例,大概是这样的过程: 每个事务都新建一个事务文件,当commit时,先把修改过的数据块,写到事务文件里,然后再一次性地写到数据库文件里。
抢红包的需求分析 抢红包的场景有点像秒杀,但是要比秒杀简单点。 因为秒杀通常要和库存相关。而抢红包则可以允许有些红包没有被抢到,因为发红包的人不会有损失,没抢完的钱再退回给发红包的人即可。
过年微信红包很火,最近有个项目也要做抢红包,于是写了个红包的生成算法。 红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。
这里最后redis生成ID的文章已经过时,新的请参考: http://blog.csdn.net/hengyunabc/article/details/44244951 前言 数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。
尽管zookeeper在编程上有很多的阱陷,API也非常的难用,但zookeeper服务本身可以说是很牢靠的了,所以在网上貌似关于运维的文章比较少。
--2014-02-15 更新: 看到新闻说ubuntu将切换到systemd。。 http://www.cnbeta.com/articles/272538.htm Linux下有两种机制,一个是旧式的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart机制。
背景 假设开发了一个中间件,比如是一个缓存系统,这个中间件要配置一个IP地址,还要配置一个Factory,从这个Factory里得到一个client,如: 然后这个中间件有三个集群(clusterA, clusterB, clusterC),分别给不同的业务使用,那就这时会有很多的配置的麻烦。
简介 开源中国的简介: Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括: 提供java.util.{Queue, Set, List, Map}分布式实现。
这个所谓的try-with-resources,是个语法糖。实际上就是自动调用资源的close()函数。和Python里的with语句差不多。
编绎整个OpenJDK要很久,而且有很多东西是不需要的。研究HotSpot的话,其实只要下HotSpot部分的代码就可以了。
这个是很久以前的笔记,最近遇到一个编码问题,重新把它翻出来了。 这个只和java servlet有关,现在通常都用各种框架,很少会直接用到Servlet了。
当然,终极原因http协议里没有规定request一定要指定编码,导致浏览器,web服务器都各搞一套…… 下面一一理清。 首先,从浏览器端看下有多少种情况: 1.在浏览器的地址栏,或者搜索框里输入地址:http://www.test.com/衣服/search?keyword=T恤 2.在一个指定了编码的网页中,提交一个form,如: 你好 搜索 当然还有,各种细分的选项,如get/post,form里是否指定了编码。
估计有很多人都在想用jconsole连接远程机器上的进程时,发现没有配置jmx端口,或者其它的东东。 下面介始一种很简单的办法,可以不用重启远程机器的进程: ssh -X 192.168.66.66 -l username 连接上去之后,可以直接运行jconsole进程,然后在本机就会弹出一个jconsole的窗口了。
文中的 Random即:java.util.Random, ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandom SecureRandom即:java.security.SecureRandomQ:Random是不是线程安全的? A:Random是线程安全的,但是多线程下可能性能比较低。
因为对于Java里的vtable,itable,有个地方还没搞明白,不得已去下个OpenJDK来研究下。 本来很不愿意去编绎OpenJDK,因为很有可能做的只是无用功,还有可能要去解决各种找不到链接库的问题。
Spring最近换域名了,去转转,发现了一个有意思的项目:spring mobile。 http://projects.spring.io/spring-mobile/ 这个项目有很多实用的功能,如识别访问我们网站的设备是什么类型的(手机,平板,PC),据域名或者url来切换不同访问内容,据不同的访问设备转到不同的view中。
T 到底是什么东东 Java泛型的语法相当的别扭,看到一个这样的写法,感觉到很神奇,正好研究下Java泛型是怎么实现的。
很久以前的笔记了,翻出来整理下。 有用的资源 在Tomcat的webapps/examples/ 目录下有很多实用详细的jsp代码例子。
文章地址:http://blog.csdn.net/hengyunabc/article/details/14108617 前言: 最近发现一个很有用的Eclipse插件:http://andrei.gmxhome.de/bytecode/,可以在Eclipse直接查看,调试Java的字节码。