9月21
关于单例模式的一些要点:
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生。
2.Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
3.Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。
4.Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
多线程的Singleton模式
代码说明:
1.volatile C#关键字作用,简单来说,编译器编译我们的代码时候,会对代码作一些优化,进而对代码进行了微调,使用volatile关键字就可以避免这个微调。继而严格意义上保证不会产生多线程。更详细的关于volatile 的说明,请看参考资料。
2.双检查加锁模式。在lock之外和之内,我们做了instance是否为空的检查。这叫双检查。因为同步控制的时间太长了。双检查能够最高效地实现多线程安全的访问。
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生。
2.Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
3.Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。
4.Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
多线程的Singleton模式
代码说明:
1.volatile C#关键字作用,简单来说,编译器编译我们的代码时候,会对代码作一些优化,进而对代码进行了微调,使用volatile关键字就可以避免这个微调。继而严格意义上保证不会产生多线程。更详细的关于volatile 的说明,请看参考资料。
2.双检查加锁模式。在lock之外和之内,我们做了instance是否为空的检查。这叫双检查。因为同步控制的时间太长了。双检查能够最高效地实现多线程安全的访问。
9月21
我们在IE中使用ajax时,你可能会发现有时候IE会直接返回缓存的页面,而不是向服务器发送一个新的请求,理论上通过设置这样的head:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
IE就应该不用缓存了,但是实际情况并不是这样,那么怎么办呢?
目前有一个办法很简单可以解决:
使用POST请求来代替GET,这样IE就会永远向服务器发送请求了
。
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
IE就应该不用缓存了,但是实际情况并不是这样,那么怎么办呢?

目前有一个办法很简单可以解决:
使用POST请求来代替GET,这样IE就会永远向服务器发送请求了
。
9月21
使用Spring时,你有时候可能想把某个Bean的属性(而非该bean本身)注入到另外一个bean的某属性中去,这时候你可以参考如下代码:
在上面的例子中,sessionFactory的mappingResources属性是一个字符串数组类型的属性,熟悉Spring和hibernate的朋友知道这是所有映射文件的列表。而我们定义的hibernateMappingManager中,有一个名为mappingFiles的属性是所有这些文件的列表。通过使用PropertyPathFactoryBean我们成功地将mappingFiles注入到了sessionFactory的mappingResources属性
在上面的例子中,sessionFactory的mappingResources属性是一个字符串数组类型的属性,熟悉Spring和hibernate的朋友知道这是所有映射文件的列表。而我们定义的hibernateMappingManager中,有一个名为mappingFiles的属性是所有这些文件的列表。通过使用PropertyPathFactoryBean我们成功地将mappingFiles注入到了sessionFactory的mappingResources属性
9月21
CentOS下Apache2以及PHP,Ruby,Python的安装
现在我们开始安装apache和php:
yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel
编辑/etc/httpd/conf/httpd.conf:
vi /etc/httpd/conf/httpd.conf
然后改变DirectoryIndex:
[...]DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl[...]将apache注册为启动的服务:chkconfig --levels 235 httpd on
启动apache:
/etc/init.d/httpd start
安装mod_ruby
CentOS 5.3上没有mod_ruby,所以如果你要使用ruby必须自己编译安装mod_ruby。首先需要安装一些软件包:yum install httpd-devel ruby ruby-devel
现在我们开始安装apache和php:
yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel
编辑/etc/httpd/conf/httpd.conf:
vi /etc/httpd/conf/httpd.conf
然后改变DirectoryIndex:
[...]DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl[...]将apache注册为启动的服务:chkconfig --levels 235 httpd on
启动apache:
/etc/init.d/httpd start
安装mod_ruby
CentOS 5.3上没有mod_ruby,所以如果你要使用ruby必须自己编译安装mod_ruby。首先需要安装一些软件包:yum install httpd-devel ruby ruby-devel
9月21
Postfix邮件服务器的安装
现在安装Postfix以及Dovecot(Dovecot可以用作pop/imap服务器)。
yum install cyrus-sasl cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain postfix dovecot
现在配置SMTP-AUTH以及TLS(如果你的smtp服务器不需要认证可以跳过这一步),使用root用户:
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
postconf -e 'mynetworks = 127.0.0.0/8'
之后需要编辑/usr/lib/sasl2/smtpd.conf,64位CentOS上是/usr/lib64/sasl2/smtpd.conf:
vi /usr/lib/sasl2/smtpd.conf

现在安装Postfix以及Dovecot(Dovecot可以用作pop/imap服务器)。
yum install cyrus-sasl cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain postfix dovecot
现在配置SMTP-AUTH以及TLS(如果你的smtp服务器不需要认证可以跳过这一步),使用root用户:
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
postconf -e 'mynetworks = 127.0.0.0/8'
之后需要编辑/usr/lib/sasl2/smtpd.conf,64位CentOS上是/usr/lib64/sasl2/smtpd.conf:
vi /usr/lib/sasl2/smtpd.conf
9月21
安装Quota
Quota允许你设置用户的磁盘限额。所以如果你的服务器将来会有多个用户使用,安装Quota还是很有用的。
用root用户运行yum安装quota:
yum install quota
编辑/etc/fstab,对根目录(/)添加,usrquota,grpquota
vi /etc/fstab
编辑后的文件类似这样:
ext3 defaults,usrquota,grpquota 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
Quota允许你设置用户的磁盘限额。所以如果你的服务器将来会有多个用户使用,安装Quota还是很有用的。
用root用户运行yum安装quota:
yum install quota
编辑/etc/fstab,对根目录(/)添加,usrquota,grpquota
vi /etc/fstab
编辑后的文件类似这样:
ext3 defaults,usrquota,grpquota 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
9月21
编辑/etc/hosts
首先用vi打开/etc/hosts:
vi /etc/hosts
内容大概类似于这样:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.0.100 server1.example.com server1
::1 localhost6.localdomain6 localhost6
一般情况下hosts文件的每行为一个主机,每行由三部份组成,每个部份由空格隔开。其中#号开头的行做说明,不被系统解释。
第一部份:网络IP地址;
第二部份:主机名或域名;
第三部份:主机名别名;
当然每行也可以是两部份,即主机IP地址和主机名;比如
192.168.1.100 myhost100。
这里可以稍微解释一下主机名(hostname)和域名(Domain)的区别:主机名通常在局域网内使用,通过hosts文件,主机名就被解析到对应ip;域名通常在internet上使用,但如果本机不想使用internet上的域名解析,这时就可以更改hosts文件,加入自己的域名解析。
首先用vi打开/etc/hosts:
vi /etc/hosts
内容大概类似于这样:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.0.100 server1.example.com server1
::1 localhost6.localdomain6 localhost6
一般情况下hosts文件的每行为一个主机,每行由三部份组成,每个部份由空格隔开。其中#号开头的行做说明,不被系统解释。
第一部份:网络IP地址;
第二部份:主机名或域名;
第三部份:主机名别名;
当然每行也可以是两部份,即主机IP地址和主机名;比如
192.168.1.100 myhost100。
这里可以稍微解释一下主机名(hostname)和域名(Domain)的区别:主机名通常在局域网内使用,通过hosts文件,主机名就被解析到对应ip;域名通常在internet上使用,但如果本机不想使用internet上的域名解析,这时就可以更改hosts文件,加入自己的域名解析。
9月21
这一系列关于Centos的文章目的是解释如何在Centos 5.3上设置一些必须的服务器,包括:apache web服务器,postfix邮件服务器,FTP服务器,DNS服务器,MySQL,防火墙,等等。这一系列文章的步骤是在Centos 5.3的x64版本上进行实验的,不过你应该可以可以在x32版本上按照相同的步骤进行设置。在这一系列文章中我们将使用以下软件:
http://www.hecks.tk/admin.php?act=carecenter
1.Web 服务器: Apache 2.2,PHP 5.1.6
2.数据库服务器: MySQL 5.0
3.邮件服务器: Postfix
4.DNS 服务器: BIND9 (chrooted)
5.FTP 服务器:Proftpd
6.POP3/IMAP 服务器: Dovecot
7.Webalizer 用于web服务器的统计
硬件以及软件需求
首先你需要下载并刻录CentOS 5.3的安装dvd,你可以从http://isoredirect.centos.org/centos/5/isos/x86_64/ 选择64位机器的安装盘。如果是32位的机器可以从这里下载:http://isoredirect.centos.org/centos/5/isos/i386/。下载iso文件以后你需要刻录出来。注意可能dvd的安装文件是BT种子(.torrent文件),如果你需要刻录DVD的话需要有一个BT的客户端。
http://www.hecks.tk/admin.php?act=carecenter
1.Web 服务器: Apache 2.2,PHP 5.1.6
2.数据库服务器: MySQL 5.0
3.邮件服务器: Postfix
4.DNS 服务器: BIND9 (chrooted)
5.FTP 服务器:Proftpd
6.POP3/IMAP 服务器: Dovecot
7.Webalizer 用于web服务器的统计
硬件以及软件需求
首先你需要下载并刻录CentOS 5.3的安装dvd,你可以从http://isoredirect.centos.org/centos/5/isos/x86_64/ 选择64位机器的安装盘。如果是32位的机器可以从这里下载:http://isoredirect.centos.org/centos/5/isos/i386/。下载iso文件以后你需要刻录出来。注意可能dvd的安装文件是BT种子(.torrent文件),如果你需要刻录DVD的话需要有一个BT的客户端。
9月21
在Oracle中分页查询是通过rownum来实现的
,举例来说,假如我希望返回某个特定查询的前20条记录,那么查询应该是类似这样的
:
select * from MY_TABLE where rownum <= 20;
对于一个每页为20条记录第分页查询,加入你希望查询第二页的记录,那么就应该是
select * from MY_TABLE where rownum between 21 and 40
对于mysql来讲,分页查询可以用limit查询实现,比如查询前20条记录可以是:
select * from MY_TABLE limit 20;
同样的,如果需要查询第20到40条记录可以这样:
select * from MY_TABLE limit 19, 20;
其中第一个参数是起始行(从0开始),第二个参数是要返回的行数。
,举例来说,假如我希望返回某个特定查询的前20条记录,那么查询应该是类似这样的
:select * from MY_TABLE where rownum <= 20;
对于一个每页为20条记录第分页查询,加入你希望查询第二页的记录,那么就应该是
select * from MY_TABLE where rownum between 21 and 40
对于mysql来讲,分页查询可以用limit查询实现,比如查询前20条记录可以是:
select * from MY_TABLE limit 20;
同样的,如果需要查询第20到40条记录可以这样:
select * from MY_TABLE limit 19, 20;
其中第一个参数是起始行(从0开始),第二个参数是要返回的行数。
9月21
设置防火墙对于你的Linux服务器来说非常重要。但是默认情况下CentOS的设置通常不能满足我们的需要。你可以通过如下步骤简单设置iptables防火墙:
首先要禁用掉SELinux,通常来说SELinux没有什么特别大的用处。用root用户打开/etc/selinux/config:
vi /etc/selinux/config
将其中的SELINUX=enforcing删除并用下面一行字替换:
SELINUX=disabled
之后我们来修改iptables的设置,打开iptables的配置文件:
vi /etc/sysconfig/iptables
下面是一个iptables的示例:
首先要禁用掉SELinux,通常来说SELinux没有什么特别大的用处。用root用户打开/etc/selinux/config:
vi /etc/selinux/config
将其中的SELINUX=enforcing删除并用下面一行字替换:
SELINUX=disabled
之后我们来修改iptables的设置,打开iptables的配置文件:
vi /etc/sysconfig/iptables
下面是一个iptables的示例:







