一些Java代码编程规范

1. 命名

驼峰命名

class命名尽量表达含义,尽量使用常用单词

非static的方法和变量,使用驼峰命名

static的方法,使用驼峰命名

static的变量,尽量使用大写,以下划线区分单词

 

2. 代码格式化

统一代码格式化,导入格式文件

每次写一部分代码后按ctrl+shift+f格式化代码,ctrl+shift+o重新组织import。

尽量不自己进行格式化,而是用eclipse的自动格式化。

code template和code style的xml格式文件可以网络上搜索下载。

 

3. 注释

类注释,写清楚作者,类的大致作用

方法[……]

继续阅读

如何用phantomjs操作修改DOM并截图

前一篇初步学会了如何使用phantomjs实现基本的网页截图,跟进上一篇的TODO,如何操作网页的DOM后再进行截图呢?That is to say, how to use phantomjs to manipulate DOM and render image?

 

参考phantomjs的API Reference,我们主要要利用的就是这个函数,它的usage如下:

evaluate(function, arg1, arg2, ...) {object}

Evaluates the given function in the context of the we[……]

继续阅读

使用Jakarta Commons Pool对象池技术

1. 为什么使用对象池技术

创建新的对象并初始化,可能会消耗很多时间。在这种对象的初始化工作中如果依赖一些rpc远程调用来创建对象,例如通过socket或者http连接远程服务资源,最典型的就是数据库服务以及远程队列(Remote Queue),建立连接 -> 发送数据 -> 接收连接 -> 释放连接的过程无疑对于客服端来说相当繁重。在需要大量或者频繁生成这样的对象的时候,就可能会对性能造成一些不可忽略的影响。要解决这个问题在软件层面上可以使用对象池技术(Object Pooling),而Jakarta Commons Pool框架则是处理对象池化的有力外援。
&nbsp[……]

继续阅读

判断Redis运行状况是否正常的Python监控脚本

import commands
 
'''
    execute system command
'''
def execSysCmd(cmd):
    (status,output) = commands.getstatusoutput(cmd)
    return (stat[......]<p class="read-more"><a href="http://neoremind.com/2012/06/%e5%88%a4%e6%96%adredis%e8%bf%90%e8%a1%8c%e7%8a%b6%e5%86%b5%e6%98%af%e5%90%a6%e6%ad%a3%e5%b8%b8%e7%9a%84python%e7%9b%91%e6%8e%a7%e8%84%9a%e6%9c%ac/">继续阅读</a></p>

memcache关于键值的一些限制

memcached的key最大长度

key的最大长度是250个字符。推荐使用使用较短的key,因为可以节省内存和带宽。
 

memcached的最长过期时间

过期时间最大可以达到30天。memcached把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,memcached就把item置为失效状态。
 

memcached最大存储数据大小

1MB。如果你的数据大于1MB,可以考虑在客户端压缩或拆分到多个key中。
 
为什么单个item的大小被限制在1M byte之内? 
简单的回答:因为内存分配器的算法就是这样的。
详细[……]

继续阅读

统计全年的一个shell脚本

有时候需要做一些统计操作,例如统计今年以来分天的某个操作,可以写出一个伪调用

for everyday in this year

    process_program everyday

其中everyday为参数。

 

问题来了,假定现在有一个脚本process_program可以接受一天的参数,如果计算今年的呢?

尝试用下面的shell脚本吧,全手工雕琢,作为自己的统计利器了。

#!/bin/bash
 
datefile="datefile"
rm -f $datefile
 
function importOne[......]<p class="read-more"><a href="http://neoremind.com/2012/06/%e7%bb%9f%e8%ae%a1%e5%85%a8%e5%b9%b4%e7%9a%84%e4%b8%80%e4%b8%aashell%e8%84%9a%e6%9c%ac/">继续阅读</a></p>

应用系统常用性能指标

PV

PV是Page View的缩写。用户通过浏览器访问页面,对应用服务器产生的每一次请求,记为一个PV。可以将这个概念做了延伸,系统真实处理的一个请求,视为一个PV。即,PV的概念也适用于接口。PV的统计一般可以通过一些监控或者统计访问日志统计得出。说到PV还有个特殊的情况,叫PeakPV,指一天中 PV数达到的高峰PV值。
 
 

QPS/TPS

QPS是Queries Per Second的缩写,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。我的理解QPS更趋向于“读操作”。
&n[……]

继续阅读

Is memcached a dinosaur in comparison to Redis?

下面内容来自Redis作者在stackoverflow上的一个回答,对应的问题是《Is memcached a dinosaur in comparison to Redis?》(相比Redis,Memcached真的过时了吗?)
 
You should not care too much about performances. Redis is faster per core with small values, but memcached is able to use multiple cores with a single executable and TCP port[……]

继续阅读

[转]Redis几个认识误区

1. Redis介绍

这个问题的结果影响了我们怎么用Redis。如果你认为Redis是一个key value store, 那可能会用它来代替MySQL;如果认为它是一个可持久化的cache, 可能只是它保存一些频繁访问的临时数据。Redis是REmote DIctionary Server的缩写,在Redis在官方网站的的副标题是A persistent key-value database with built-in net interface written in ANSI-C for Posix systems,这个定义偏向key value store。还有一些看法则认为Redis[……]

继续阅读

Redis典型应用场景

毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。

 

下面是一篇新鲜出炉的文章,其作者是Redis作者@antirez,他描述了Redis比较适合的一些应用场景:
 
1.取最新N个数据的操作
比如典型的取你网站的最新文章,通过下面方式,我们可以将最新的5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取
使用LPUSH latest.comment[……]

继续阅读

pymongo批量插入

通常我们可以用pymongo这个驱动来作为API操作mongodb,一个典型的需求就是批量插入大量的document(文档),我们知道mongodb是fire-and-forget的模型,即发送数据到mongdb-server后,客户端就认为数据已经保存,这种类似于非阻塞的方式,可以立刻返回。要保存的文档可以放在一个python的数据结构list中,那么如果这list过于庞大,那拍脑袋想想也不利于mongo-server插入内存,更何况内存碎片,网络IO等风险。所以批量操作吧,见下面的一段代码。

from pymongo import Connection
 
loadsplitsiz[......]<p class="read-more"><a href="http://neoremind.com/2012/05/pymongo%e6%89%b9%e9%87%8f%e6%8f%92%e5%85%a5/">继续阅读</a></p>

shell中输出从某一天起所有日期的方法

 最近在项目中有这么一个需求,导入历史所有日志到DB中,而导入的脚本usage如下:

./importApiaccessLog-main.py <date like 20120506>

因此需要从一个很早的时间点开始,依次调用该脚本,顺序传入日期。那么每年每个月的天数都会不同,怎么办,写了个shell脚本,以后面对这种需求,可以直接板砖了。不多说,上脚本:

#!/bin/bash
 
datefile="datefile"
echo > $datefile
 
function importOneMonthLog()
{
	s[......]<p class="read-more"><a href="http://neoremind.com/2012/05/shell%e4%b8%ad%e8%be%93%e5%87%ba%e4%bb%8e%e6%9f%90%e4%b8%80%e5%a4%a9%e8%b5%b7%e6%89%80%e6%9c%89%e6%97%a5%e6%9c%9f%e7%9a%84%e6%96%b9%e6%b3%95/">继续阅读</a></p>

mongodb学习笔记

mongoDB介绍篇

mongodb由C++写就,其名字来自humongous这个单词的中间部分。最简洁描述为:scalable, high-performance, open source, schema-free, document-oriented database
 
mongoDB是一个基于分布式文件存储的数据库开源项目,旨在为WEB应用提供可护展的高性能数据存储解决方案。Mongodb由专门的公司来开发,公司名叫做10gen,2009年发行了以一个release版本。
 
跟mysqld一样,一个mongod服务可以有建立多个数据库,每个数据库可以有[……]

继续阅读

有关Python拼SQL操作数据库的故事

小白问:

我想用python操作数据库,我拼sql该怎么半?
 
PY控:
想想java吧
 
小白:
sql += name
sql += ‘, now(),’
 
PY控:
No No No
第一,拼string浪费内存,你这样不好于StringBuffer(‘123’+’ABC’)的错误。
 
第二,这样容易造成了sql注入,看看下面的笑话吧
一个家长接到电话: 
Teacher: Hi. This is your son’s school. We are having some computer[……]

继续阅读

利用spring的BeanNameAutoProxyCreator做事务管理配置

在项目开发时候,很多目标bean需要生成事务代理,可以为每一个目标bean配置一个 TransactionProxyFactoryBean  bean。这样做的话,可能最后变成配置地狱,此时可以考虑使用自动事务代理。 

 
applicationContext.xml配置可以加入如下,不解释:
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN&quo[......]<p class="read-more"><a href="http://neoremind.com/2012/05/%e5%88%a9%e7%94%a8spring%e7%9a%84beannameautoproxycreator%e5%81%9a%e4%ba%8b%e5%8a%a1%e7%ae%a1%e7%90%86%e9%85%8d%e7%bd%ae/">继续阅读</a></p>