Arganzheng's Blog

stay hungry, stay foolish

Thrift的序列化版本控制

在现实世界中,唯一的不变就是变化。即使是接口定义也不例外。所以,做好接口版本控制,升级和兼容是非常重要的一个指标。 The system must be able to support reading of old data from log files, as well as requests from out-of-date clients to new servers, and...

tips for sublime text

Command Palette 类似于shell终端,提供了sublime text的所有支持命令。可以说是总入口,比如Package Control就是通过Command Palette调用出来的(Press ⌘⇧P to bring up the command palette, begin to type “install”, and select “Package Control:...

BTrace实战

什么是BTrace 官方文档上有个非常简洁精辟的介绍。 BTrace is a safe, dynamic tracing tool for the Java platform. BTrace can be used to dynamically trace a running Java program (similar to DTrace for OpenSolaris app...

循环引用序列化问题

假如一个对象里面引用了自己,那么序列化的时候如果不做特殊处理就会死循环了。在XStream中是采用reference处理的。反序列化的时候也根据reference来特殊处理。JSON也是类似的,不过貌似支持不是很好。 package me.arganzheng.study.xstream; import org.apache.commons.lang.StringUtils; impo...

使用EC2和SSH翻墙

前提 拥有一台墙外的机器——这里是EC2。具体申请和配置过程请参考笔者的上一篇文章 使用亚马逊EC2搭建web工程 步骤 1. SSH配置 参考文章EC2 + SSH 翻墙 3/3— SSH 翻墙设置中有针对windows和linux详细的配置说明。笔者这里只针对mac做简要的说明: cd ~/.ssh vim config 输入以下内容 Host ec2-ami HostN...

mina学习笔记

Mina框架 mina的设计非常简单,由于几个模块组成: IoService: Acceptor or Connector IoProcessor,如果没有指定,默认是NioProcessor。 IoFilterChain IoHandler 其中IoAccetor主要负责监听绑定的端口,接收客户端连接。它有一个selector,对listener端口进行轮询s...

多次编解码导致的的奇怪乱码问题

今天遇到一个诡异的编码问题:我们这边一个客户端A调用某个网关B,网关调用某个服务C,服务C又调用服务D。结果发现收到的数据有中文乱码。但是这个乱码和用错编码的乱码很不同:大部分都是正确的,就是几个字符是乱码(基本都是’?’)。在A直接调用D,编码没有问题。说明A和D都是同一种编码(确定是utf-8编码)。那么就是中间的B和C编码出问题了。于是确定了一下B和C的编码,果然B是utf-8,C是G...

一个简单的性能优化和防止DOS攻击的示例

需求 提供一个根据商品ID(itemID)返回质检报告图片URL的链接。 问题与相应的解决方案 问题1. 根据商品ID获取质检报告图片URL需要查询DB 解决方案: 因为质检报告基本就是不会更新,另外,实时性也不是很高。所以可以考虑用Cache。本地化Cache或者Memcachd都可以。 问题2. 恶意用户使用随机商品ID拼凑URL进行调用攻击 解决方案:对于错误的商品ID,往Ca...

用Photoshop磨皮

需求:色斑、痘痘如何PS掉呢? 思路:斑点是由于色调和明度相对于光滑部分的皮肤而言比较暗淡,只要将他们的色调和明度调高就可以了。 关键:如何选择色斑。 方法:通道与选区的关系:黑不选中,白选中。 实战 步骤一:在通道中选择色斑比较明显的通道,如这里的green通道,复制该通道,得到green copy通道。 步骤二:对该通道进行更进一步的对比度强化。 使用Filter...

如何实现用户认证授权系统

需求 用户注册 登陆(Authentication) 登出 访问权限控制(Authorization,匿名用户、普通用户、管理员) 实现 Authentication 一旦用户注册之后,用户信息就保存在服务器端(DB/Cache)。关键在于用户需要提供身份凭证,一般是用户名和密码。即常见的登陆页面:用户输入username和password,勾选Remember ...