主页 | 新闻 | 深度报道 | 技术文章 | 开源软件 | 资源站点 | 书讯 | 往日版面  | 网站地图
 Linux 日报 

  LinuxDaily.net  
Linux 日报
信箱 1: linuxdaily.net AT 163.com
信箱 2: linuxdaily.net AT gmail.com
2008年04月11日
星期五

技术文章
总第52期

北京:
本期技术文章共1页, 这是第1页
Linux操作系统下安装Perl及其模块的方法

Linux和perl都属于自由软件,将二者结合真是妙不可言。遵循以下步骤一般就可安装好perl,perl 就能在linux下欢唱。

1、取得最新版本的 perl,当前版本为 5.6.0,即 stable.tar.gz。

2、解文件包:

gunzip stable.tar.gz

tar xvf stable.tar

得到目录 perl-5.6.0

3、在目录 perl-5.6.0 下安装 perl:

rm -f config.sh Policy.sh

sh Configure -de

make

make test

make install

config.sh Policy.sh 为以前安装时的配置文件,新安装或升级安装时

需要将其删除。

sh Configure -de 安装使用默认配置,一般而言将会 ok 。

安装完成后 perl 所在目录为 /usr/local/lib/perl5, perl 执行文件

在 /usr/local/bin 中。

4、关于 .html 文件

安装 perl 时不能自动安装 .html 文件, 在 perl-5.6.0 目录中有一

个installhtml 文件, 执行 perl installhtml --help

可得到使用帮助,使用

installhtml可将 .pod 及 .pm 文件编译得到相应的 .html 文件文件, 它的具

体使用请自己看。

下面是我所写的一个具有类似功能的程序。

关于Linux操作系统DHCP配置步骤概括介绍

Server的配置

1.netconfig //配置服务器端IP

service ntework restart

2.mount /dev/cdrom //安装dhcp所需软件

rpm -ivh dhcp-3………

rpm -ivh dhcp-d………

umount /dev/cdrom

3.vi /etc/dhcpd.conf //配置dhcp服务器配置文件(默认文件不存在,需手工建立)

cp /usr/share/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf

vi /etc/dhcpd.conf

4.service dhcpd restart //启动dhcp服务

service dhcpd status

Client的配置

Windows: ipconfig /release //释放IP

ipconfig /renew //重新获取IP

ipconfig //查看IP

Linux: netconfig //设置IP为动态获取

service network restart

Server信息查看

tail /var/lib/dhcp/dhcpd.leases //查看租约文件内容

原文链接: http://tech.ccidnet.com/art/302/...

用SecureCRT上传和下载Linux服务器数据

设置一下上传和下载的默认目录就行

options-->session options-->file transfer 下可以设置上传和下载的目录

剩下的你只要在用SecureCRT登陆linux终端的时候:

发送文件到客户端:

sz filename

zmodem接收可以自行启动。

从客户端上传文件到linux服务端:

只要服务端执行:

rz

然后在 SecureCRT 里选文件发送,协议zmodem

系统需要安装lrzsz-0.12.20-22.1.i386.rpm这个rpm包。

原文链接: http://tech.ccidnet.com/art/302/...

Linux操作系统下关于光驱挂载的技巧解析

Linux将每一个物理设备都映射成了一个文件,这些文件都放在了/dev文件(linux中目录也是文件)下面,光驱映射成的文件就是一个名为cdrom的文件。mount命令是挂载光驱的基本命令,其后可以跟参数。在挂载光驱之前首先要选好挂载点,强烈建议在不要将文件直接挂载/***的下面,这里我将文件挂载到了/mnt/cdrom下面cdrom是新建的文件。整个过程详细描述如下:

操作过程:

[OK_008@CentOS4 ~]$ mount -t auto /dev/cdrom /mnt/cdrom

mount: only root can do that --一般用户无法挂载cdrom,只有root用户才可以操作。

[OK_008@CentOS4 ~]$

--切换用户操作:

[root@CentOS4 /]# mount -t auto /dev/cdrom /mnt/cdrom

mount: mount point /mnt/cdrom does not exist --/mnt/cdrom目录不存在,需要先创建。

[root@CentOS4 /]# cd /mnt

-bash: cd: /mnt: No such file or directory

[root@CentOS4 /]#

[root@CentOS4 /]# mkdir -p /mnt/cdrom --创建/mnt/cdrom目录

[root@CentOS4 /]# ls

bin dev home lib media mnt proc sbin srv tmp var

boot etc initrd lost found misc opt root selinux sys usr

[root@CentOS4 /]# mount -t auto /dev/cdrom /mnt/cdrom --挂载cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only --挂载成功

[root@CentOS4 /]# ls -l /mnt/cdrom --查看cdrom里面内容

参数

-V

显示程序版本

-h

显示辅助讯息

-v

显示较讯息,通常和 -f 用来除错。

-a

将 /etc/fstab 中定义的所有档案系统挂上。

-F

这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。

-f

通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。

如何提高Linux系统应对短连接的负载能力

在存在大量短连接的情况下,Linux的TCP栈一般都会生成大量的 TIME_WAIT 状态的socket。

你可以用下面的命令看到:

netstat -ant| grep -i time_wait

有时候,这个数目是惊人的:

netstat -ant|grep -i time_wait |wc -l

可能会超过三四万。这个时候,我们需要修改 linux kernel 的 tcp time wait的时间,缩短之,有个 sysctl 参数貌似可以使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,也就是60秒,很多网上的资料都说将这个数值设置低一些就可以减少netstat 里面的TIME_WAIT状态,但是这个说法是错误的。经过认真阅读Linux的内核源代码,我们发现这个数值其实是输出用的,修改之后并没有真正的读回内核中进行使用,而内核中真正管用的是一个宏定义,在 $KERNEL/include/net/tcp.h里面,有下面的行:

#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT

* state, about 60 seconds */

而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10 秒比较合适,也就是把上面的修改为:

#define TCP_TIMEWAIT_LEN (10*HZ) /* how long to wait to destroy TIME-WAIT

* state, about 60 seconds */

然后重新编译内核,重启系统即可发现短连接造成的TIME_WAIT状态大大减少:

netstat -ant | grep -i time_wait |wc -l

一般情况都可以至少减少2/3。也能相应提高系统应对短连接的速度。

原文链接: http://tech.ccidnet.com/art/302/...

Java关键字new和newInstance的区别方法

【赛迪网技术报道】在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。

Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:

class c = Class.forName(“Example”);

factory = (ExampleInterface)c.newInstance();

其中ExampleInterface是Example的接口,可以写成如下形式:

String className = "Example";

class c = Class.forName(className);

factory = (ExampleInterface)c.newInstance();

进一步可以写成如下形式:

String className = readfromXMlConfig;//从xml 配置文件中获得字符串

class c = Class.forName(className);

factory = (ExampleInterface)c.newInstance();

上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。

从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。

现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。

最后用最简单的描述来区分new关键字和newInstance()方法的区别:

newInstance: 弱类型。低效率。只能调用无参构造。

new: 强类型。相对高效。能调用任何public构造。

原文链接: http://java.ccidnet.com/art/3539...

Linux系统下服务启动和禁止及对应端口号

/etc/services 查看系统预设服务及端口对应.各个DAEMONS(服务)的启动与关闭的scripts是放置在/etc/init.d/内,而RED HAT系统则是放到/etc/rc.d/init.d里面,至于super daemon的控制参数档案则放在/etc/xinetd.d里面。

stand alone(独立启动) 与 super daemon(超级服务)

stand alone

顾名思义,stand alone 就是直接执行该服务的扫行档,让该执行文件直接加载到内存当中运作,用这种方式来启动可以让该 服务具

有较快速响应的优点。一般来说,这种服务的启动scrip都会放置到/etc/init.d/这个目录底下,所以你通常可以使用:

[/etc/init.d/sshd restart]之类的方式来启动这种服务;

super daemon

用一个超级服务作为总管,以管理一些网络服务.在CENTOS4.3里面使用的则是xinetd这个super daemon,这种方式启动的网络服务虽然

在响应上速度会比较慢,不过,可以透过super daemon额外提供一些控管,例如控制何时启动、何时可以进行联机、那个IP可以连进来、

是否允许同时联机等等。通常设定档放置在/etc/xinetd.d/当中,但设定完毕后需要重新以[/etc/init.d/xinetd restart]重新来启动才行。

如果要将系统上面的PORT25关掉,最简单的作法就是先找出那个PORT25的启动程序。

Linux防火墙示例 用简单规则集保护网络

防火墙的配置要求如下:

1、 拒绝所有外面传入的、向外的和转发的包。

2、 允许所有外传的TCP连接:我们这里允许的如web/telnet/ssh/ftp等外传。

3、 允许外发的TCP连接的返回封包通过防火墙,需检查封包的状态。

4、 允许向外发送UDP连接在端口53上指定域名服务器,但只允许伟入的DNS封包进入内部的域名服务器chivas。

5、 创建允许内核从一个网络接口向另一个网络接口适当转发封包的规则:来自专网的向因特网传递的封包需从内部接口eth0向外部接口eth1转发。返回的封包以相反方向发送回来。

6、 在内核中启用IP转发功能。

构建一个基本的防火墙

[root@linux-tys root]# sysctl –p -----设置IP转发

[root@linux-tys root]# cat /proc/sys/net/ipv4/ip_forward -----确认IP转发,可以见到结果为1

[root@lg root]# iptables –F -----清除预设表filter中所有规则链的规则

[root@lg root]# iptables –X -----清除预设表filter中自定义规则链的规则

[root@lg root]# iptables –F –t mangle -----清除表mangle中所有规则链的规则

[root@lg root]# iptables –t mangle -X -----清除表mangle中所有自定义规则链的规则

[root@lg root]# iptables –F –t nat -----清除表nat中所有规则链的规则

[root@lg root]# iptables –t nat -X -----清除表nat中所有自定义规则链的规则

[root@linux-tys root]# iptables -A INPUT -p tcp - -dport 22 -j ACCEPT

[root@lg root]# iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

[root@linux-tys root]# iptables -P INPUT DROP

[root@linux-tys root]# iptables -P OUTPUT DROP

[root@linux-tys root]# iptables -P FORWARD DROP

[root@linux-tys root]# iptables -A OUTPUT -j ACCEPT -o lo ----此两行为在回送接口上允许内部网络流量

[root@linux-tys root]# iptables -A INPUT -j ACCEPT -i lo

[root@linux-tys root]# iptables -A OUTPUT -j ACCEPT -o eth1 -p tcp -m state --state ESTABLISHED,NEW

Linux下Grub和NT Loader启动菜单的编写

电脑上有WINDOWS 又有LINUX

有的人喜欢GRUB,也有的人喜欢NT Loader来启动

不管你怎么玩,都要知道他们的运行流程

关系:

windows-NT Loader-ntldr-boot.ini

linux-Grub-grldr-menu.lst(menu.lst已加载在grldr中,grldr中的菜单可以用“grub4dos内置菜单编辑器”进行替换)

无论是安装winxp或者是linux系统,都会在mbr处写入引导器。windows系统的叫NT Loader,linux的叫Grub原本是Linux上的引导器,与Lilo齐名,Grub和NT Loader可以互相引导

知道windows和linux各自的加载方法后就好办了

喜欢用boot.ini 加载的朋友

既然是NT Loader加载,MBR中就不会有GRUB 的信息

可以在XP下装个WinGrub软件,配置生成C:\Grub\menu.lst 在boot.ini中最后添加一行 C:\GRLDR="zasuei Linux" “”里的随便取。

修改C:\Grub\menu.lst

改成linux下/boot/grub/menu.lst的内容一样就行。

重起选择此菜单。(注意:boot.ini 的timeout=5 或更多,不然就开机狂按F8 吧)

有的人说开机就进了GRUB菜单,那肯定是安装LINUX时把grub写入了MBR。也不要紧,修复MBR就行了.

在XP里装个MaxDOS V6 ,它真是好用啊。不管你C盘(XP系统盘)是NTFS 还是FAT32 ,我的就是NTFS都能在DOS下修复MBR。

重起 ,在grub菜单中选择XP 回车 之后,马上按F8 进入 安全模式菜单 ,选择最后一个 返回操作系统菜单 就到了boot.ini 中 选MaxDOS V6 进去之后 在A:\ 下输入fdisk /mbr 就可以恢复MBR了 但在恢复之前最好把linux下/boot/grub/menu.lst的内容复制到XP下,不然到时候MBR没了GRUB 进不了linux了,虽然可以拿linux盘修复,但麻烦啊

Linux操作系统下文件保护与彻底删除技巧

在网上经常看到使用chmod修改文件权限的介绍文章,但是介绍linux里面的另外两个经典的文件操作命令chattr和lsattr,shred的文章确很少,这是我的学习笔记,希望对新学linux的朋友有所帮助。

chattr命令有很多用处,可以防止重要文件被错误的修改,误删。或把一些不在用机密的文件彻底删除,使其无法恢复。

好了下面看看chattr命令的具体用法。

chattr的作用是修改文件属性,需要超级用户的权限。

我们可以用下面的命令看看chattr命令的具体用法

$chattr --help

usage: chattr [-RV] [- =AacDdijsSu] [-v version] files...

lsattr的作用是查看文件属性。

可以用下面的命令看看lsattr命令的具体用法

$lsattr --help

Usage: lsattr [-RVadlv] [files...]

先用vi建立一个叫test1的目录,内容随便。

$vi test1

用lsattr先看一下test1文件的属性

$ lsattr test1

------------- test1

发现属性项都为空

好了我们为test1文件加一个属性看看。

$chattr s test1

再用lsattr看一下test1文件的属性

$ lsattr test1

------------ test1

会发现test1多了一个s属性

s属性:意思是当删除test1这个文件时,相应的磁盘空间会被清零。就像我们常在windows用的一种彻底删除文件的软件。删除的文件不能被恢复

好了我们再看一个例子

$chattr a test1

a属性:意思就是使文件只可以追加数据,不能修改或覆盖。这时我们再用vi编辑文件会发现只能追加数据,但不能修改以前的数据。

想删除已经添加的文件属性也很容易,只要用-减去就可以了,和chmod的操作一样。

$chattr -a test1

这样就去掉了test1只能追加数据的限制,可以自由修改了。

chattr还有很多参数可以选择,除了上面介绍的两个,常用的还有

i属性:不允许对这个文件进行修改,删除或重命名

c属性:保存文件时,压缩该文件。

其他还有很多参数,大家可以参考chattr的使用帮助。然后说说shred,使用 shred /dev/hda 就可以让你的硬盘数据立刻消失,永不超升。当然要使用你的硬盘的正确的设备文件。

默认情况下使用各种垃圾数据反复重写25遍,加上 -v 参数就可以看到。

Linux操作系统下如何使硬盘进入休眠状态

man hdparm

hdparm -Y /dev/hd*:使硬盘进入睡眠模式;

hdparm -y /dev/hd*:使硬盘进入省电模式;

hdparm -S[num] /dev/hd*:设置超时值使硬盘进入睡眠模式;

唤醒硬盘hdparm好像没有相应参数,实际上你去操作硬盘就会自动唤醒硬盘,使用ioctl有个参数可以唤醒硬盘,你可以查看硬盘操作的相应头文件。

具体看hdparm的源代码,实际是使用ioctl操作硬盘相应寄存器。

原文链接: http://tech.ccidnet.com/art/302/...

程序员生活 J2EE学习者值得研究的开源项目

【赛迪网技术社区整理】

一、JavaServlet和JSP方向

很多人都是从Servlet和JSP步入J2EE的。它就是J2EE的表现层,用于向客户呈现服务器上的内容。J2EE很重要的方面。不罗嗦了!大家都知道的!下面就开始推荐吧!

1. Jakarta Tomcat

Apache基金会提供的免费的开源的Serlvet容器,它是的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司(都是IT界的大鳄哦)及个人共同开发而成,全世界绝大部分Servlet和Jsp的容器都是使用它哦!由于Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。

不过它是一个非常非常全的Serlvet容器,全部源码可能有4000页,对于初学者或者一般的老手可能还是比较大了!在你有能力时推荐研究!下载地址:http://jakarta.apache.org/tomcat/index.html

下面推荐两个小一点的吧!

2. Jetty

Jetty是一个开放源码的HTTP服务器和Java serverlet容器。源代码只有1000页左右,很值得研究。有兴趣可以去http://jetty.mortbay.com/下载看看。我曾经翻了一下,只是目前没有时间。(都化在博客上了,等博客基本定型,且内容完整了,再干我热衷的事件吧!)

3. Jigsaw

Jigsaw是W3C开发的HTTP,基于Java的服务器,提供了未来Web技术发展的蓝图。W3C知道吧!(太有名气了,很多标准都是它制订的!有空经常去看看吧!)下载网址:http://www.w3.org/Jigsaw代码仅仅1000页左右。

4. Jo!

Jo!是一个纯Java的实现了Servlet API 2.2, JSP 1.1,和HTTP/1.1的Web服务器。它的特性包括支持servlet tag,支持SSI,高级线程管理,虚拟主机,数据缓存,自动压缩text或HTML文件进行传输,国际化支持,自动重新加载Servlet、Jsp,自动重新加载web工程文件(WARs),支持WAR热部署和一个Swing控制台。jo!可以被用做jboss和jakarta avalon-phoenix的web容器。下载地址http://www.tagtraum.com/。我极力推荐大家在研究Tomcat之前研究该软件,主要是其比Tomcat小多了,且开发者提供比较全的手册。该方向研究这两个也就可以了!

使用Java Annotations来管理对象生命周期

【赛迪网技术报道】Java Annotations主要用来标注deprecated的代码。在这篇文章中,它们用来把方法调用的控制权移交给一个轻量级框架中负责处理一系列方法调用的组件。因此,正确的初始化和设置等操作被委派给客户端应用而不是类,以做到设置和控制都可以调整。

对于开发者来说,复杂的应用通常有很多初始化问题需要处理。许多不同的步骤无非是建立面板,配置服务之类。而这些事情的难点在于,有一些步骤需要重复,另一些则不需要。把这种管理问题交给类自己处理是非常麻烦的,因为逻辑可能会变化。另外,现代软件设计强调分离职责。简单来说,我们的目的是把做什么和怎么做分离开来。

这篇文章展示给大家如何使用 Annotations来做初始化控制,这种做法超越了简单的标注。它介绍了一个小的API,可以用它来开发你自己的“phaseable” Annotations,或者在这种新特性上给你提供一些灵感。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接

作者:Norbert Ehreke;deafwolf(作者的blog:http://blog.matrix.org.cn/page/deafwolf)

原文:http://www.matrix.org.cn/resource/article/44/44403_Java Annotations.html

关键字:Java;Annotations

Annotations

Annotations是J2SE 5.0引入的新语言特性。通常, Annotations允许开发者用一种跟运行代码无关的次要信息来标注类,方法以及成员。这样就可以使用类似评价的 Annotations,比如“好方法”、“坏方法”,或者更详细一些,“不推荐的方法”、“覆写的方法”。这些用法的可能性是无穷的。不过请注意,方法或类跟标注实际可能不相关,比如“不推荐的”。如果想知道关于 Annotations的更多详细讨论,请阅读Java 5.0 Tiger: A Developer's Notebook。

因为 Annotations可以用来描述用例或者实体比如方法和类的意思,所以这是一种语法棒棒糖。反过来,这些附加信息也可以被其他东西(比如框架)用于各种各样的动作,比如生成文档(Javadoc),或者像这里讨论的,作为一种特殊内容来控制行为,比如对象的生命周期。

生命周期管理

生命周期管理通常发生在中间件环境中,比如应用服务器。这种思想是把对象的创建、使用以及销毁跟对象本身分开。例如在一个发布不同服务的应用服务器中,它通常不关心所请求的特殊服务(译注:此处的意思应该是应用服务器对所有请求都一视同仁),调用服务的机制或多或少的采用了同一种方案。这取决于应用的状态,呼叫者以及其他参数,一些必要的变量,但是在一个易于管理的环境中,基本的算法通常是一系列操作的顺序链。在Java客户端应用中,必须处理mask的显示,或者form允许用户输入或修改数据。

Java技术社区杂文 J2EE开发框架发展简史

【赛迪网技术社区整理】Java2企业版为中间件领域思想的统一上发挥了很大的作用。比如,J2EE为分布式事务管理、目录服务和消息服务提供了一套标准的编程接口。J2EE的基础——Java2标准版(J2SE) ,成功地为Java提供了一套访问关系数据库的标准。

但是,就像本文中“J2EE缺乏对编程的支持”提到的一样,J2EE这个平台没有能够提供一个令人满意的应用程序编程模型(application programming model)。Sun公司和一些大的应用服务器供应商都想用开发工具来降低J2EE开发的复杂性,但是这些工具没有其他的JAVA 开发工具优秀,后者有先进的重构工具,和.NET平台相比,J2EE的工具支持显得很逊色。

很多J2EE开发工具自动产生的代码像这些工具本身同样复杂。在开源社区很多小型J2EE开发者选择了另外一种开发方式—— 一些可以降低J2EE开发难度的开发框架,较为流行的比如: Struts, Hibernate, 和 Spring Framework,他们当今很多J2EE项目种扮演着重要角色。

为什么要采用框架?

框架是一由一些类组成,正式这些类为应用程序提供了一个可重用的设计――或者我们经常提到的——应用程序种的一层。应用程序代码访问类库从而执行任务,而框架是调用应用程序代码,从而管理程序的流程。这就是经常说道的好莱坞原则:“不要试图联系我们,我们到时候自会通知你。”开发者写的程序在运行时由框架调用。

设计一个在各种未知背景下都可以使用的框架是很有挑战性的。框架很适合在复杂的J2EE开发中使用,它可以为开发者提供一个简单易用的模型。采用一个经过良好设计的开源框架有很多好处:

* 在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。 这一点很重要。

* 经过良好设计的框架可以为程序提供清晰的结构并且提高程序的内聚性。好清晰的结构使得其他人可以更容易加入项目。

* 一个容易使用的框架可以通过一些例子和文档为用户提供最佳实践。

* 采用成功的框架的代码比自己的代码容易测试

* 框架只有提供了一些值得使用的功能才会变得流行。J2EE工程只有真正需要框架的时候才会用它,而自己的框架并不是这样,后者是处于统治地位的。

Java编程语言在软件开发中的几个认识误区

【赛迪网技术社区整理】越来越多人开始使用Java,但是他们大多数人没有做好足够的思想准备(没有接受OO思想体系相关培训),以致不能很好驾驭Java项目,甚至 导致开发后的Java系统性能缓慢甚至经常当机。很多人觉得这是Java复杂导致,其实根本原因在于:我们原先掌握的关于软件知识(OO方面)不是太贫乏就是不恰当,存在认识上和方法上的误区。

软件的生命性

软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构的原由,反复强调都不过分。

一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能。

目前很多人对软件的思想还是焦点落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功能需要加入,但是因为基础架构不灵活不能方便加入,死路一条。

正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如ofbiz compiere和slide也存在这方面陷阱,貌似非常符合胃口,其实类似国内那些几百元的盗版软件,扩展性以及持续发展性严重不足。

那么选择现在一些流行的框架如Hibernate、Spring/Jdonframework是否就表示基础架构打好了呢?其实还不尽然,关键还是取决于你如何使用这些框架来搭建你的业务系统。

存储过程和复杂SQL语句的陷阱

首先谈谈存储过程使用的误区,使用存储过程架构的人以为可以解决性能问题,其实它正是导致性能问题的罪魁祸首之一,打个比喻:如果一个人频临死亡,打一针可以让其延长半年,但是打了这针,其他所有医疗方案就全部失效,请问你会使用这种短视方案吗?