Arganzheng's Blog

stay hungry, stay foolish

使用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 ...

spring AOP internal

Spring AOP mechanisms in a word, Spring AOP is proxy-based. That’s, AOP by proxying. and Spring use one of the following two ways to create the proxy for a given target bean. JDK dynamic proxi...

使用curl和wget模拟REST请求

模拟HTTP请求一般使用curl,例如有这么一个REST接口 会员卡推送接口文档 1. 绑卡 开放平台POST消息格式: { "topic": "wecard", "event": "bindCard", "uin": 商家的uin, "data": { "openId": "用户的唯一标识", "mob...

return async result in java

在java中,异步操作往往喜欢返回一个Future对象,顾名思义,表示结果在未来的某个时刻才完成,虽然future是立马返回的,但是其实是一个未知的结果。调用方可以(需要)查询这个future对象,看是不是已经出结果了。其实是一种polling方式来的。 这些Future对象,一般都是实现java.util.concurrent.Future接口: package java.util.c...

Java并发学习笔记

线程 线程VS进程 lightweight processes fork is expensive. Memory is copied from the parent to the child, all descriptors are duplicated in the child, and so on. Current implementations...