于吉吉的技术博客

建造高性能门户网

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  65 随笔 :: 6 文章 :: 149 评论 :: 0 Trackbacks

2010年8月25日 #

posted @ 2014-03-04 10:49 陈于喆 阅读(414) | 评论 (0)编辑 收藏

posted @ 2014-02-23 12:54 陈于喆 阅读(375) | 评论 (0)编辑 收藏

     摘要: 最近接手项目从cocos2dx 2.0 升级为 3.0 ,至于为什么要升级我也弄不清楚,只感觉3.0是要摆脱cocos2d-iphone的身影,这是要作死的态度吗,没时间去了解3.0的核心发生了神马变化,只为了从cocos2dx2.0经常适应到3.0做了一些纪录,以便查阅和方便正在从2.0到3.0的朋友。  阅读全文
posted @ 2013-12-27 23:29 陈于喆 阅读(17995) | 评论 (5)编辑 收藏

posted @ 2013-07-05 17:18 陈于喆 阅读(4484) | 评论 (6)编辑 收藏

posted @ 2012-03-19 16:33 陈于喆 阅读(4343) | 评论 (3)编辑 收藏

     摘要: 其实为什么javascript的定时器会出现所谓的不可靠或偏差的情况,这是可以理解的,最主要的问题是它们并不是所谓的线程,其实
javascript是运行于单线程的环境中,而定时器只是计划代码在未来某个执行的时间,执行的时间点是不能被保证的,因为在页面的生命周期中,不同时间可能存在其他代码,或各个浏览器的内核控制住javascript进程。  阅读全文
posted @ 2012-01-10 15:15 陈于喆 阅读(3501) | 评论 (6)编辑 收藏

posted @ 2011-12-06 16:22 陈于喆 阅读(4961) | 评论 (7)编辑 收藏

posted @ 2011-08-21 15:55 陈于喆 阅读(6371) | 评论 (0)编辑 收藏

posted @ 2011-08-15 16:51 陈于喆 阅读(6285) | 评论 (13)编辑 收藏

     摘要: Starting and Stopping Mongo
Security and Authentication
Monitoring and Diagnostics
Backups
  阅读全文
posted @ 2011-07-30 18:23 陈于喆 阅读(20494) | 评论 (2)编辑 收藏

posted @ 2011-06-15 15:07 陈于喆 阅读(865) | 评论 (0)编辑 收藏

     摘要: objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。
下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个"_id"建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。
当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key  阅读全文
posted @ 2011-06-12 18:30 陈于喆 阅读(15212) | 评论 (8)编辑 收藏

posted @ 2011-06-02 16:11 陈于喆 阅读(946) | 评论 (0)编辑 收藏

     摘要: google map测距的实现和分析
不断有传闻google map在今年的7月1号之后在大陆停止运营,具体原因是因为天朝的牌照问题,这个就不多讲了,可以发现现在搜房网的地图,和安居客等的地图纷纷都撤下 google map,而重新选择了mapabc或baidu,当然网易房产地图也不例外,现在也在使用mapabc作为网易房产地图的开发,预计将在6月底前上线,到 时再跟大家分享一下mapabc的一些开发实践。
还是说回google map的开发,自从上次建了个qq群就有不少人在问测距怎么实现,当然很多人想的是拿来主义的,当时是拿http://xf.house.163.com /gz/map/000B.html的例子出来,但确实页面上进行了封装也写得比较乱,所以还是比较难以抽离,先给个简单实现的例子:  阅读全文
posted @ 2011-06-02 14:01 陈于喆 阅读(3908) | 评论 (1)编辑 收藏

     摘要: 有朋友去一家大型的互联网公司参加了java程序员的笔试,抄下了一些笔试题,可能有的抄的并不全,试了解答一下,有些还真的答不出来

1.cookie和session的作用以及他们的应用场合
2.怎样让jvm加载一个Class的同时执行一段代码
3.post和get区别
4.事务的属性有哪些?写出spring或jdbc管理事务的例子
5.实现一个高并发、高性能的hashmap。写出伪代码
6.解析一段xml,拼接成一个url。  阅读全文
posted @ 2011-04-21 17:23 陈于喆 阅读(3524) | 评论 (9)编辑 收藏

     摘要: 好吧,这个错误浪费了我今天几个小时的时间,必须把它记录下来。
问题是这样的,在启动更新了portmap,exportfs,一些没问题后,在做/etc/init.d/nfs-kernel-server restart 出现

/etc/init.d/nfs-kernel-server start
Exporting directories for NFS kernel daemonexportfs: /etc/exports [1]:
Neither 'subtree_check' or 'no_subtree_check' specified for export
"foobar".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x

.
Starting NFS kernel daemon: nfsd
Not st  阅读全文
posted @ 2011-04-06 17:13 陈于喆 阅读(1780) | 评论 (1)编辑 收藏

     摘要: NFS服务器端
apt-get install nfs-kernel-server nfs-common portmap

vi /etc/hosts.allow
portmap: 192.168.0.
lockd: 192.168.0.
rquotad: 192.168.0.
mountd: 192.168.0.
statd: 192.168.0.

vi /etc/hosts.deny
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

vi /etc/default/portmap
将 -i 127.0.0.1 注释掉  阅读全文
posted @ 2011-04-06 17:09 陈于喆 阅读(1422) | 评论 (0)编辑 收藏

     摘要: google Map的交互基本都是事件驱动的,这表示js是通过生成时间来响应交互的,并且处于监听我们设定的事件,每个 Google Maps API 对象都可导出大量已命名的事件。如果程序想要实现某些事件,则会为这些事件注册 Javascript 事件侦听器,并会在通过在 google.maps.event 命名空间中注册 addListener() 事件处理程序接收这些事件时执行相应的代码。

初步的事件响应

google map中的所有对象都可以对用户事件监听并作出响应,用户的事件可以包括鼠标或键盘,对象可以监听以下这几种事件:
'click','dblclick','mouseup','mousedown','mouseover','mouseout'
这些事件看上去很像标准的DOM事件,但这些时间可以在不同的浏览器实现不同的DOM事件模型。  阅读全文
posted @ 2011-03-30 16:58 陈于喆 阅读(26513) | 评论 (0)编辑 收藏

     摘要: 在微博看到介绍的一款linux系统信息神器,dstat,收藏一下

dstat可以直接可直接替换vmstat, iostat, netstat ,nfsstat, ifstat等系统工具,监控cpu、disk 、mem、load、interrupt、net、proc、CS....

安装
wget http://rpmforge.sw.be/redhat/7.3/en/i386/rpmforge/RPMS/dstat-0.6.9-1.rh7.rf.noarch.rpm
rpm -ivh dstat-0.6.9-1.rh7.rf.noarch.rpm
or
apt-get install dstat
yum install dstat  阅读全文
posted @ 2011-03-24 17:15 陈于喆 阅读(2231) | 评论 (3)编辑 收藏

     摘要: 本来是想将房产地图google map的应用记录一个系列,但继1)记录完之后总找不到时间继续记录下去,1)中主要解决了Google Maps JavaScript API V3 与 Google Local Search API两者由于版本问题带来的一系列麻烦,思路是使用一个iframe作为兼容的跳板,子页面应用Local Search API获得查询的result后返回给父页面,下面再记录一些地图坐标的定位和一些UI的组成。

可参考 http://xf.house.163.com/gz/map/00Xa.html  阅读全文
posted @ 2011-03-05 16:02 陈于喆 阅读(4364) | 评论 (2)编辑 收藏

     摘要: 一直以来似乎都有一个错觉,认为map跟其他的集合类一样继承自Collection,其实不然,Map和Collection在结构层次上是没有任何关系的,通过查看源码可以发现map所有操作都是基于key-value对,而不是单独的元素。

下面以HashMap为例子,深入对Map的实现机制进行了解,在这个过程中,请打开jdk源码。

Hash算法

HashMap使用Hash算法,所以在解剖HashMap之间,需要先简单的了解Hash算法,Hash算法一般也成为散列算法,通过散列算法将任意的值转化成固定的长度输出,该输出就是散列值,这是一种压缩映射,也就是,散列值的空间远远小于输入的值空间。
简单的说,hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值),这样可以快速在数组等里面存取数据。

下面我们建立一个HashMap,然后往里面放入12对key-value,这个HashMap的默认数组长度为16,我们的key  阅读全文
posted @ 2011-02-15 19:18 陈于喆 阅读(10146) | 评论 (6)编辑 收藏

     摘要: 以前的房产地图一直都是使用有道地图,虽然有道地图是很好,但是为了更好,还是决定使用google地图来重新开发^_^,下面是一个开发完毕的简单应用http://xf.house.163.com/gz/map/000B.html

1)整合Google Maps JavaScript API V3 与 Google Local Search API

Google Maps JavaScript API V3
地址 http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/

Google Maps JavaScript API V3 文档读起来真的是很清晰,各种demo也很齐全,并且论坛的拥有巨大的论坛支持,对比了一下Google Maps JavaScript API V3 和 V2 的版本,虽然第3版的 Google Maps API 看上去跟第2版挺相识,但在内在机制上有了较大的变化,尤其在对移动浏览器的支持上,专门针对iphone和android  阅读全文
posted @ 2011-02-12 15:57 陈于喆 阅读(4917) | 评论 (6)编辑 收藏

     摘要: 对于进程管理工具平时大多用的是ps,kill,top,sleep等等这些命令,平时linux的一些指令我都会做一些记录,本着好记性不如烂博客的精神,也把进程管理的命令做一点系统性的记录,参考资料基本是鸟哥还有网上的一些文章。

ps
ps命令主要是查看系统进程的状态,平时最常用的命令是ps aux,然后再使用管道导向到grep查找特定的进程,然后进此特定进程进行操作。
要对进程进行操作必须先了解到当前进程的情况,ps命令体现了现实当前运行进程的快照,ps和top和相似,但ps提供了更多的信息,可以确定哪些进程正在运行,哪些进程被挂起,运行了多长时间,以及进行使用的资源和进程的优先级,这些信息对我们都有很重要的作用,当我们使用ps aux可以获得终端所有用户的有关进程信息。  阅读全文
posted @ 2011-01-21 17:56 陈于喆 阅读(1075) | 评论 (0)编辑 收藏

posted @ 2011-01-21 12:34 陈于喆 阅读(574) | 评论 (0)编辑 收藏

     摘要: 问题是这样的,有个脚本需要10秒钟执行一次,脚本具体功能就不细说,定时任务自然选用crontab,但是crontab最小的执行时间为分钟,最后决定选用死循环进行实现。

脚本
vi hello.sh
#!/bin/sh
while :
do
echo `date` >> /home/chenyz/1 //这里是任务的实现
sleep 10
done

这里的程序运行时间间隔是10s,小心咯,如果没有加sleep 10,你的机器很快就会耗尽资源,负载会狂飙。

接着需要把脚本用后台守护进程来运行,避免用户退出而导致脚本失效  阅读全文
posted @ 2011-01-19 17:47 陈于喆 阅读(2520) | 评论 (0)编辑 收藏

     摘要: 对于用户管理工具平时大多用的是groupadd,useradd,usermod等等这些命令,平时linux的一些指令我都会做一些记录,本着好记性不如烂博客的精神,也把用户管理的命令做一点系统性的记录,参考资料基本是鸟哥还有网上的一些文章。

用户组的管理
linux可以对一个用户组中的所有用户进行集中的管理,用户组的管理包括用户组添加,删除修改,实际上这些操作就是对/etc/group文件作出修改。

groupadd 新增一个用户组
groupadd [-g gid [-o]] [-r] [-f] group
-g 其中gid是指定新用户组的标识号,除非配合使用-o参数,不然该值必须是唯一的
-o 标识新用户组gid可以和系统中原有的用户组的gid值相同
实例:
groupadd chenyuzhe1
groupadd -g 789 chenyuzhe2

groupdel 删除用户组
实例:
groupdel chenyuzhe1  阅读全文
posted @ 2011-01-19 15:36 陈于喆 阅读(1430) | 评论 (0)编辑 收藏

     摘要: 对于磁盘管理工具平时大多用的是df,du这些命令,平时linux的一些指令我都会做一些记录,本着好记性不如烂博客的精神,先把磁盘管理的命令做一点系统性的记录。

du
du的英文为:disk usage,含义是磁盘空间使用情况,功能是逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块的情况,如果没有指定目录,则对当前的目录进行统计。
du的命令各个选项含义如下:

a:显示全部目录和其次目录下的每个档案所占的磁盘空间
s:只显示各档案大小的总合
b:大小用bytes来表示
x:跳过在不同文件系统上的目录不予统计
a:递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数  阅读全文
posted @ 2011-01-19 13:08 陈于喆 阅读(482) | 评论 (0)编辑 收藏

     摘要: List在数据结构中表现为是线性表的方式,其元素以线性方式存储,集合中允许存放重复的对象,List接口主要的实现类有
ArrayList
ArrayList 其实就是一组长度可变的数组,当实例化了一个ArrayList,该数据也被实例化了,当向集合中添加对象时,数组的大小也随着改变,这样它所带来的有优点是快速的随机访问,即使访问每个元素所带来的性能问题也是很小的,但缺点就是想其中添加或删除对象速度慢,当你创建的数组是不确定其容量,所以当我们改变这个数组时就必须在内存中做很多的处理,如你想要数组中任意两个元素中间添加对象,那么在内存中数组要移动所有后面的对象。

LinkedList
LinkedList 是通过节点的连接实现链表的数据结构,向linkedList中插入或删除元素的速度是特别快,而随机访问的速度相对较慢,这个是由于链表本身的性质造成的,在链表中,每个节点都包含了前一个节点的引用,后一个节点的引用和节点存储值,当一个新节点插入式,只需要修改其中相关的前后关系节点引用即可,删除节点也是一样。操作对象只需要改变节点的链接,新节点可以存放在  阅读全文
posted @ 2011-01-16 17:36 陈于喆 阅读(11376) | 评论 (1)编辑 收藏

     摘要: 我们都知道Set是一种最简单的集合,对象的排序无特定的规则,集合里面存放的是对象的引用,所以没有重复的对象,在上面的代码中,程序创建了a、b、 c、d、e五个变量,其中a和c,b和e所引用的字符串是一致的,然后向set添加了这5个变量。打印出来的size()只有3个,实际上向集合加入的只有3个对象,在执行Set的add()方法时已经进行了判断这个对象是否存在于集合,如果对象已经存在则不继续执行。
Set的接口有两个实现类,HashSet和TreeSet,HashSet是按照哈希算法来进行存取集合中的对象,存取速度比较快,TreeSet类显示了SortedSet接口,具有排序功能

HashSet
HashSet是按照哈希算法来存取集合中的对象,具有很好的存取和查找性能,当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获取哈希码,然后根据这个哈希吗来计算对象在集合中的存放位置。
在Object类中定义了hashCode()和equal(),equal()是按照内存地址比较对象是否相同,如果 object1.equal(  阅读全文
posted @ 2011-01-06 18:07 陈于喆 阅读(8594) | 评论 (0)编辑 收藏

posted @ 2011-01-04 14:10 陈于喆 阅读(71381) | 评论 (6)编辑 收藏

     摘要: The minimum requirement for a POM are the following:

project root
modelVersion - should be set to 4.0.0
groupId - the id of the project's group.
artifactId - the id of the artifact (project)
version - the version of the artifact under the specified group

Here's an example:  阅读全文
posted @ 2010-12-29 17:50 陈于喆 阅读(305) | 评论 (0)编辑 收藏

     摘要: 由于历史原因,几个项目都选用hessian作为web service的实现方式,hessian的确是非常轻量级,基于http协议进行传输,通过自定义的串行化机制将请求信息进行序列化,以二进制传输节省了不少的开销,速度跟socket差不多.客户端和服务器发起和接收请求都是通过spring提供的hessian api进行请求和接收,但是在服务端中并没有记录和控制远端ip地址和主机的信息,所以需要对源码进行一些重写

对org.springframework.remoting.caucho.HessianServiceExporter进行重写

/**
* 重写HessianServiceExporter.handleRequest(),拦截获取远端调用信息
* @author chenyz
*
*/
public class HouseHessianServiceExporter extends HessianServiceExporter {

private static S  阅读全文
posted @ 2010-12-21 16:05 陈于喆 阅读(2997) | 评论 (0)编辑 收藏

     摘要: 目前几套系统中主要使用的hessian进行远程调用webservice服务的有hessian的 HessianProxyFactory(com.caucho.hessian.client.HessianProxyFactory)和 spring的 HessianProxyFactoryBean(org.springframework.remoting.caucho.HessianProxyFactoryBean).

1.HessianProxyFactory
查看HessianProxyFactory源码后发现,hessian在创建http请求连接webservice服务并没有对连接超时进行相关的参数设置,所以当网络出现问题就会造成整个hessian处理的阻塞,进而阻塞整个线程后续的处理
以下是HessianProxyFactory对连接处理的源码

protected URLConnection openConnection(URL url)
throws IOException
{
URL  阅读全文
posted @ 2010-12-16 14:46 陈于喆 阅读(11933) | 评论 (11)编辑 收藏

     摘要: 对很久以前的一个bug进行分析和总结

function parsePost(data, action) {
try {
var postData = eval("(" + data + ")");

// TO DO1
} catch (e) {

// TO DO2
}
}


这是一段页面的老代码,data是数据库body字段,既是用户录入并取出的数据,由于业务的关系,data是以json格式保存的,为了使数据能实现兼容,这里使用try...catch...方式处理,如果变量data能被转换成对象,则执行TO DO1,否则执行TO DO2.

我们知道eval的作用很简单,就是把一段字符串传递给js解析器,由javascript解析器将这段字符串解释成为  阅读全文
posted @ 2010-12-15 11:31 陈于喆 阅读(4292) | 评论 (2)编辑 收藏

     摘要: 上次因工作的需求对一台apache的log做了一次整体的分析,所以顺便也对apache的日志分析做下简单的介绍,主要参考apache官网的Log Files,手册参照 http://httpd.apache.org/docs/2.2/logs.html

一.日志分析
如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log
1.access_log
access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志的内容和格式
例如,我的其中一台服务器配置如下

CustomLog "| /usr/sbin/rotatelogs /var/log/apache2/%Y_%m_%d_other_vhosts_access.log 86400 480" vhost_combined

-rw-r--r-- 1 root root 22310750   阅读全文
posted @ 2010-12-10 17:52 陈于喆 阅读(12455) | 评论 (3)编辑 收藏

     摘要: 下载地址 http://awstats.sourceforge.net
下载最新版本

安装
cd /home/download
wget http://awstats.sourceforge.net/files/awstats-7.0.tar.gz
tar zxf awstats-7.0.tar.gz
mv awstats-7.0 awstats
perl awstats_configure.pl

在[y/n]选择时,输入y
接着输入你要分析的域名,输入tech163
一路Enter

配置
vi /etc/awstats/awstats.tech163.com  阅读全文
posted @ 2010-12-10 17:28 陈于喆 阅读(1198) | 评论 (0)编辑 收藏

     摘要: 下面一个伴随了好几个工程的时间操作的工具类,提供了一些常用的时间操作和计算的方法,每段时间都会进行一次整理,希望能去冗余和得到好的扩展

package com.***.product.util;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Pattern;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class DateUtil {
protected static Log logger = LogFa  阅读全文
posted @ 2010-12-09 18:37 陈于喆 阅读(429) | 评论 (0)编辑 收藏

     摘要: 大名鼎鼎的分布式缓存系统memcached,在开源社区中可谓是无人不知无人不晓,memcached支持分布式的横向扩展,但memcached的服务端却是单实例,并无"分布式"的功能,所谓的分布式只是客户端在存储的主键做分布的存储;还有memcached组件缓存对象,如果组件无进行序列化必定无法正确取得数据;如何使用memcached的java组件来监控memcached的运行状态;以上等等的问题是我在日常的工作中碰到并解决的,拿出来跟大家做个分享^_^

对象的序列化
首先memcached是独立的服务器组件,独立于应用系统,从客户端保存和读取对象到memcached是必须通过网络传输,因为网络传输都是二进制的数据,所以所有的对象都必须经过序列化,否则无法存储到memcahced的服务器端.
正如我们以往在集群中应用的序列化一样,memcached的序列化的性能也是往往让大家头疼,如果我们对我们的domain类进行对象的序列化,第一次序列化时间会比较长,但后续会优化,也就是说序列化最大的消耗不是对象的序列化,而是类的序列化,如果存储的只是一个String  阅读全文
posted @ 2010-12-08 15:00 陈于喆 阅读(5588) | 评论 (4)编辑 收藏

     摘要: 很久以前就见过这本1000页的书<代码大全>,觉得应该是说些写代码的东西,没怎么又兴趣去读它,一次偶然的机会,发现自己是误解了它,<代码大全>觉得应该叫软件百科好像更合适一点,因为它里面涵盖了架构,分析,设计,编程,测试,重构,面向对象,调试,规范,管理,软件质量控制,协作,优化,开发工具,注释,甚至个性,开发艺术等等等,让人感觉就是一本软件百科全书.

书读的不多,不过刚开始读了100多页有一点感悟,所以做了一点记录,叫读<代码大全>的一点记录之1.

利用隐喻
隐喻通过把软件开发与你所熟知的事情联系在一起,从而使你对其更有深刻的理解,正是因为如此在计算机中的发展不过仅有数十年的历史,却拥有着所有科学最为丰富多彩的语言

盖房子的隐喻
狗屋
霹雳啪啦,木材加铁钉,犯错了怎么办?无所谓,拆了再来过  阅读全文
posted @ 2010-12-07 17:59 陈于喆 阅读(1228) | 评论 (0)编辑 收藏

     摘要: memcached需要依赖到以下的一系列包
gcc
libevent
glibc-devel

下载
cd /home/download
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz

安装
tar -zxvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure --prefix=/usr/local/libevent
make && make install

tar -zxvf memcached-1.4.0.tar.gz  阅读全文
posted @ 2010-12-07 16:34 陈于喆 阅读(324) | 评论 (0)编辑 收藏

     摘要: 上个月参加的网易游戏部QA组的黑盒测试培训,觉得挺有意思的,不过最让我感兴趣的是,能和真正专业的测试人员做了一点讨论,发现站在开发人员的角度看待测试和站在测试人员看待测试时完全不同的一种东西.

程序员和测试人员的心理差别
程序员和测试人员的心理差别可以简单的归纳为以下几种

成功 / 不成功
什么才是一次成功的测试,大多数的开发人员对自己的程序测试完没发现错误,就会说"这是一个成功的测试",如果发现某些新的错误则称"这是不成功的测试";而测试人员刚好相反,当然这也是因为双方的职责不同而引起的

维护 / 破坏,施虐
开发人员对测试往往是一种维护性的测试,目标在于证明自己开发的程序没有错误,可能跟我们开发人员经常做建设性工作,更倾向创造事物,而不是将事物破坏有关;而测试人员在测试更多是一种破坏的过程,甚至是一种施虐,摆出一种把鸡蛋打碎搅黄来挑骨头的姿态  阅读全文
posted @ 2010-12-03 16:00 陈于喆 阅读(1702) | 评论 (3)编辑 收藏

     摘要: PHP-FPM 是 一个PHP FastCGI进程管理器

FastCGI是一个可伸缩的,高速地在web server和脚本语言间交互的接口。FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上,以大规模扩展和改进安全性而不损失生产效率。

php-fpm可以和任何支持远端FastCGI的web server工作

安装
php-5.2.13.tar.gz
php-5.2.13-fpm-0.5.14.diff.gz

tar zxvf php-5.2.13.tar.gz
gunzip php-5.2.13-fpm-0.5.14.diff.gz

patch -d php-5.2.13 -p1 < php-5.2.13-fpm-0.5.14.diff (给php源码打fpm补丁)

cd php-5.2.13

./configure --prefix=/usr/local/p  阅读全文
posted @ 2010-11-30 18:44 陈于喆 阅读(2787) | 评论 (0)编辑 收藏

     摘要: mysql的官方网站是 http://www.mysql.com

tar zxvf mysql-5.1.50.tar.gz

cd mysql-5.1.50

./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charset=all --enable-hread-safe-client
--enable-local-infile --with-low-memory

make && make install

chmod +w /usr/local/mysql

chown -R mysql:mysql /usr/local/mysql

cp support-files/my-medium.cnf /etc/my.cnf  阅读全文
posted @ 2010-11-30 15:21 陈于喆 阅读(380) | 评论 (0)编辑 收藏

     摘要: nginx的官方网站是:http://www.nginx.org

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。

nginx的特性
1.目前官方 Nginx 并不支持Windows,您只能在包括Linux,UNIX,BSD系统下安装和使用
2.Nginx 本身只是一个HTTP和反向代理服务器,它无法像Apache一样通过安装各种模块来支持不同的页面脚本,例如PHP、CGI等
3.Nginx 支持简单的负载均衡和容错
4.支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机  阅读全文
posted @ 2010-11-30 12:45 陈于喆 阅读(2601) | 评论 (0)编辑 收藏

     摘要: 1.卸载rpm包
通过 rpm -qa | grep httpd 搜索出

httpd-2.2.3-43.el5.centos.3



rpm -e httpd-2.2.3-43.el5.centos.3

如果出现提示有其他相关包依赖此rpm,可以选择强制卸载

2.yum 或 apt-get 卸载

yum -y remove httpd
yum -y remove httpd* 卸载多个相识的软件

3.卸载自编译包
make uninstall 或 手动删除  阅读全文
posted @ 2010-11-29 15:14 陈于喆 阅读(250) | 评论 (0)编辑 收藏

     摘要: NET-SNMP的官方网站是:http://www.net-snmp.org
先阅读一下官网的一点说明(详细见官网)
Simple Network Management Protocol (SNMP) is a widely used protocol for monitoring the health and welfare of network equipment (eg.routers), computer equipment and even devices like UPSs. Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6
...
  阅读全文
posted @ 2010-11-29 11:34 陈于喆 阅读(2413) | 评论 (0)编辑 收藏

posted @ 2010-11-23 09:00 陈于喆 阅读(269) | 评论 (0)编辑 收藏

     摘要: 刚在一台新安装ubuntu的机器上进行vi,出现
-bash: vi: command not found
使用vim则可以正常的操作,当然这个应该是vi/vim没安装好的原因,重新执行命令
yun -y install vim*
完整的安装完毕后则可以正常使用vi/vim

以前只知道vim是vi的升级版,大部分时候也只使用vi,至于vim和vi的一些区别上还真的不知道,以下为在网上查找整理的内容

vim,意为VI iMproved,主要的优势体现在以下几个方面:  阅读全文
posted @ 2010-11-22 14:57 陈于喆 阅读(231) | 评论 (0)编辑 收藏

     摘要: 把我上次的工程所用到的jar包做了一个整理,也加了一些简单的描述,下面图是上次工程用到的所有jar吧



JAR包与描述对照表 注:jar包尾后的版本号不代表当前最高版本
activation-1.1.jar Sun的JavaBeans Activation Framework(JAF),JavaMail要运行必须依赖于它的支持
asm-3.0.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
asm是一个轻量级字节码处理和分析框架
alveole-struts2.jar
alveole-tools.jar

aspectjtools-1.5.3.jar
Aspect提供的注释类库和相应的解析类库
atomikos-util.jar
数据库提供分布式事务支持
  阅读全文
posted @ 2010-11-03 14:59 陈于喆 阅读(3242) | 评论 (1)编辑 收藏

     摘要: 上周给同事讲解了cacti的安装及其使用时做了一份ppt,在这里将这份ppt简单梳理一下介绍一下cacti在我们日常工作中的监控使用

cacti的结构
在广义上来说cacti是一套网络流量监测图形分析工具,但从狭义来说cacti只是由php语言实现的一个软件,

它需要PHP,apache,Mysql,SNMP,RRDTool等工具的支持  阅读全文
posted @ 2010-11-02 17:28 陈于喆 阅读(3241) | 评论 (0)编辑 收藏

     摘要: 上次写的中提到了openVPN,也做了一点点简单的介绍,有朋友也问了一些关于vpn的问题
首先,我所购买的vps是基于OpenVZ类型,无法配置标准的VPN(无测试过),部分手机可能无法支持,但OpenVZ支持pptp和openVPN

请登录OPENVPN官网查阅最新资料

ok!在安装之前请确认一下你购买的vps是否开启了tun/tap的支持,burst vps默认是不开启tun/tap的,可以使用cat /dev/net/tun 进行检查

如果是没有权限的话可以发个ticket要求客服为你开启tun/tap

出现File descriptor in bad state说明tun/tap已经开启,可以开始进行openVPN的安装配置

我的vps安装的系统为CentOS release 5.5 (Final),下面一系列安装和配置都在此vps上进行,根据 配置

一.服务端安装  阅读全文
posted @ 2010-11-01 17:35 陈于喆 阅读(8918) | 评论 (2)编辑 收藏

     摘要: 先感谢同事梁员外在去年就给我们介绍了VPS,前段时间也购买了一个VPS,使用了一段时间感觉还不错
先介绍一下VPS,下面是一些讲座的笔记,部分内容直接摘自梁员外的ppt

What is VPS

VPS是Virtual Private Servers的简称,也就是我们说的虚拟专用服务器,在一台物理服务器上创建多个相互隔离的虚拟专用服务器。这些虚拟服务器以最大化的效率共享硬件、软件许可证以及管理资源。对其用户和应用程序来讲,每一个VPS平台的运行和管理都与一台独立主机完全相 同,因为每一个VPS均可独立进行重启并拥有自己的root访问权限、用户、IP地址、内存、过程、文件、应用程序、系统函数库以及配置文件。

国外的主流VPS类型

国外的主流VPS类型主要是OpenVZ和XEN,先介绍一下OpenVZ

OpenVZ(Virtuozzo)
SWsoft公司的商用版虚拟化技术,而OpenVZ 则是基于Virtuozzo的开源项目。多个虚拟服务器在一个内核上运行,具有高性能和出色管理等优点.   阅读全文
posted @ 2010-10-12 15:17 陈于喆 阅读(7720) | 评论 (4)编辑 收藏

     摘要: 听DBA的人说,相比oracle,MySQL就是一个玩具级别的数据库,在网易门户中,DBA基本很少去管理到MySQL的东西,所以我们产品使用到的MySQL的一些配置和优化还是需要我们开发人员自己动手,下面就简单介绍一下实用的定期优化方法

定期分析表

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]

本语句用于分析和存储表的关键字分布。在分析期间,使用一个读取锁定对表进行锁定。这对于MyISAM, BDB和InnoDB表有作用。对于MyISAM表,本语句与使用myisamchk -a相当。

MySQL使用已存储的关键字分布来决定,当您对除常数以外的对象执行联合时,表按什么顺序进行联合。

mysql> analyze table a;
+--------+---------+----------+-----------------------------+
| Table | Op | Msg_  阅读全文
posted @ 2010-10-10 14:55 陈于喆 阅读(5603) | 评论 (2)编辑 收藏

     摘要: 如果你的MyIsam表存在大量高并发的读写,那么就可能出现坏表的现象,这是因为MyIsam存储引擎所决定的,一张损坏的表的症状可能是以前某些错误

*.frm 被锁定不能更改
找不到*.MYI
文件意外结束
记录文件损坏

处理1
使用MySQL自带的myisamchk的工具进行修复,myisamchk不仅可以检查和修复MyIsam表,还可以进行优化和分析表,实际上,它集成了mysql中的check,repair,analyze,optimize的功能,下面是用myisamchk进行修复

myisamchk -r tablename

其中-r参数的含义是recover,在以往的应用,这语句几乎可以解决上面所述碰到的问题,如果还不行,可以使用

myisamchk -o tablename

其中-o参数的含义是--safe-recover,可以进行更安全的修复

处理2
使用MySql的CHECK TABLE和REPAIR TABL  阅读全文
posted @ 2010-10-10 14:11 陈于喆 阅读(1964) | 评论 (0)编辑 收藏

     摘要: 先感谢同事renial的<解析xml时遇到的一些问题>技术分享,下面是一些记录和实际操作

1.使用Dom4j解析大文件时内存溢出的问题

问题是这样的,当我用dom4j去解析一个几十M的xml时,就出现out of memory.当然了,这也是根据你的机器性能而定的,我们都知道dom4j在各种DOM解析器中应该算是性能最好的,连大名鼎鼎的Hibernate都是用dom4j来解析XML配置文件的
问题出在于使用dom4j的SAXReader是会把整个XML文件一次性读入,如果XML文件过大就会抛出out of memory,但即使是使用SAXParser批量读入解析,但它也是一次解析完,假设XML文件有几万条数据,那么解析后就必须在内存放入这几万条对象.

常用的Dom4j文件解析方式:

InputStream is = new FileInputStream(filePath);
SAXReader reader = new SAXReader(); //将整个XML构建为一个Document 阅读全文
posted @ 2010-09-28 17:10 陈于喆 阅读(14980) | 评论 (2)编辑 收藏

     摘要: 对于的用户输入搜索出现XSS漏洞的问题,主要是由于开发人员对XSS了解不足,安全的意识不够造成的。现在让我们来普及一下XSS的一些常识,以后在开发的时候,每当有用户输入的内容时,都要加倍小心。

一、什么是XSS
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性
在WEB2。0时代,强调的是互动,使得用户输入信息的机会大增,在这个情况下,我们作为开发者,在开发的时候,要提高警惕。

二、XSS攻击的主要途径
方法只是利用HTML的属性,作各种的尝试,找出注入的方法。现在对三种主要方式进行分析。

第一种:对普通的用户输入,页面原样内容输出。
打开http://go.ent.163.com/goproducttest/test.jsp(限公司IP),  阅读全文
posted @ 2010-09-26 19:21 陈于喆 阅读(3172) | 评论 (5)编辑 收藏

     摘要: 先感谢同事梁员外的技术分享,下面是一些相关的笔记,当然啦,在应用Morphia之前需要有MongoDB的使用经验.

What is Morphia?

Morphia is a lightweight type-safe library for mapping your Java objects to/from MongoDB

简单的来说Morphia与MongoDB的关系就如Hibernate与关系数据库的关系, 是一个实现Java对象到MongoDB双向映射的类库。

下面是摘自Morphia官方的简介,带有一定的广告性,呵呵

Easy to use, and very lightweight; reflection is used once per type and cached.

Annotations describe mapping behavior; there are no XML files.

Provi  阅读全文
posted @ 2010-09-16 17:41 陈于喆 阅读(13110) | 评论 (3)编辑 收藏

     摘要: 自从dropbox被墙了之后就一直在寻找更好的同步工具,毕竟使用同步工具比什么google doc和网易网盘要爽的多,起码不用上传下载,用了什么PathSync和DBSync都觉得不如dropbox的爽(纯属个人感觉哈).
其实我的需求倒是挺简单的,就是要同步家里和公司两台电脑的一些指定的文件夹,突然想到每天都在使用的rsync,自己配一个吧,反正服务器是现有的,只不过是linux,两台需要同步的电脑都是windows,下面就分享一个rsync如何在windows和linux两个系统中进行文件同步.

linux服务端
按照rsync工具
建议采用yum install rsync 或 apt-get install rsync安装,因为方便嘛
安装完毕后

vi /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid
uid = nobody
gid = nobody
max connections = 36000
log file  阅读全文
posted @ 2010-09-06 18:44 陈于喆 阅读(8577) | 评论 (1)编辑 收藏

     摘要: mysql有4种不同的日志,分别是二进制日志,查询日志,慢查询日志和错误日志,这些日记记录着数据库工作的方方面面,可以帮助我们了解数据库的不同方面的踪迹,下面先介绍二进制日志的作用和使用方法,并利用二进制日志对数据库进行各种维护和优化,其他日志也会在后面陆续会做详细的介绍。

二进制日志(bin-log日志)
在上一篇介绍mysql主从配置的blog中,已经提过bin-log日志的作用和使用,bin-log日志记录了所有的DDL和DML的语句,但不包括查询的语句,语句以事件的方式保存,描述了数据的更改过程,此日志对发生灾难时数据恢复起到了极为重要的作用。

开启
mysql默认是没有开发bin-log日志,首先我们需要开启bin-log日志,在my.cnf中修改



指定了bin-log日志的路径,开启日志后需要myssqladmin flush log才生效,重启后我们发现在刚才设定的路径新增了log文件,这就是我们需要的二进制日志



由于日志是以二进制方式存储的,不  阅读全文
posted @ 2010-09-04 18:55 陈于喆 阅读(17032) | 评论 (1)编辑 收藏

     摘要: 记得问过身边的一些开发工程师(非前端)缓存要分几个层次,从哪里做起,答案很多,比如反向代理缓存,DNS缓存,memcached,数据库缓存等等,确实很完整,不过好像漏掉了我们用户跟我们联通的最根本的工具浏览器,确实好似很少有人把用户的浏览器当作是web站点的组成部分来看待

缓存协商
现在我们需要将用户的浏览器也纳入我们构建网站各个缓存层次中的其中一个重要层次,网站信息和内容在由web服务器生成,而将这些信息和内容作为一段二进制的文件作为本地缓存文件存放在用户的浏览器,是两个独立个体共同完成的任务,所以两者之间需要一种沟通的机制,也就是HTTP的缓存协商

Last-Modified和If-Modified-Since协商
Last-Modified和If-Modified-Since分别位于响应头信息和请求头信息中,都是记录请求的页面最后的修改时间
在第一次访问web服务器会返回200状态,并在浏览器的响应头Last-Modified上写上此页面最后修改的时间戳
使用firebug进行查看


  阅读全文
posted @ 2010-08-25 00:03 陈于喆 阅读(6412) | 评论 (0)编辑 收藏