解惑

解己之惑,解人之惑

作者:cherami (第78页共82页)

如何使linux系统对ping不反应

  在linux里,如果要想使ping 没反应也就是用来忽略icmp包。可以用:
  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  若想恢复就用:
  echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Linux下SYN的设置

参考文章为:SYN攻击的基本原理、工具及检测方法以及防范技术

LINUX相关的内容摘录如下:

  1. 激活SYN cookies:echo 1 > /proc/sys/net/ipv4/tcp_syncookies
  2. 增加最大半连接数:sysctl -w net.ipv4.tcp_max_syn_backlog=”2048″
  3. 缩短超时时间:sysctl -w net.ipv4.tcp_synack_retries=”1″

其实第一个也应该可以使用sysctl设置的,因为sysctl也是设置/proc/sys/net/ipv4目录下的对应文件的值。

另外这个设置都是一次性的,系统启动后就丢失了,要一直有效需要写入启动脚本,例如/etc/rc.d/rc.local

有点奇怪LINUX系统下为什么要用这种方式设置这些值,每个变量用一个文件设置。

分页策略的选择

在设计开发一个系统时分页是基本的功能之一,但是如何选择分页策略却是一个比较困难的问题,如果选择不对可能适得其反。
选择分页策略需要考虑的几个因素:

  1. 系统的数据的成长性,特别是时间敏感的成长性。
  2. 数据的更新频率,数据内容是否经常更新。
  3. 数据的大小,特别是常用数据的大小。
  4. 系统的用户的要求,例如用户对系统的反应速度要求比较高。
  5. 系统的硬件设施,例如最关键的数据库服务器的负载能力,应用服务器的负载能力,内存大小。

常见的两种分页,一个是基于缓存的,一个是基于实时查询的,而且这两者没有一个是具有绝对优势的,根据系统的特点采用不同的策略才能达到比较好的效果。根据系统的特点,还可以采用混合模式,也就是查询的时候每次查询的是比每页数据多的数据,例如每次查十页的数据。

对于具有高成长性的系统而言,特别是短时间具有高成长性,而且用户要求实时的结果,那么就不能采用缓存式的方案。
对于数据的更新频率比较大的系统而言,同样不适合采用缓存的方案。
系统的数据量比较大,而系统的内存不是非常的充裕,那么使用缓存方案也是不太现实的。

其实最重要的一个因素就是用户的要求,有的用户更关心系统的反应速度,数据旧一点点没有太大的关系,而有的用户要求实时性高,要求看到的永远是最新的数据。
至于系统的硬件限制就很简单了,但是现在这个一般不是关键的因素。

最终,策略的选择就是这些因素的综合考虑,而且可能也不限定选择一种策略,两种策略都可以提供,用户可以自己在这两种策略间方便的切换,但是在应用缓存方案的时候可以设置一个系统内定的最大记录数防止少数极端情况下导致系统崩溃。

需要根据Spring的要求重新省视自己的设计

利用周末的时间把中文版的spring参考手册中的现在需要关注的内容通读了一遍,原来我对自己的系统中考虑到的几个方面的内容spring已经提供了,
因此有必要完整的学习spring提供的内容,可能这次我有有点浮躁了,看来我要花一段时间把spring in
action也看一遍,可惜没有中文版的。现在也越来越懒了,不喜欢看英文原版了,可能是spring参考手册和hibernate参考手册翻译得不错的
缘故吧。

Spring中的多配置文件原来如此简单

一直都在找spring如何指定多个配置文件,因为一个系统一旦比较大以后所有的配置都放在一个文件中是非常不好的,不光是维护的问题,多人开发出现冲突
的可能性也就很大了,一直在搜索,但是没有什么结果,结果今天看了spring的参考手册(中文的那个1.1PR版)才发现非常的简单,在web.xml
中配置的时候直接指定多个文件就可以了,用空格、逗号或者分号分隔都可以,例如:
   <listener>
     
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   <context-param>
      <param-name>contextConfigLocation</param-name>
     
<param-value>/WEB-INF/configs/spring-config.xml
/WEB-INF/configs/db-config.xml</param-value>
   </context-param>

Google推出了Firefox工具栏

Google推出了Firefox工具栏,马上安装了一个,感觉不错,而且一般情况下可以不打开金山词霸了,因为这个工具栏也带单词翻译功能,将鼠标移到英文单词上就会翻译为中文了。

错误的选择了Xstream

今天突然发现我在做页面生成特别是进行Bean到xml的映射的时候错误的选择了Xstream,而我恰恰应该使用的是spring本身提供的功能,因为其实spring的XmlBeanFactory也可以达到相同的目的,所不同的是用spring稍微要复杂一些,但是这个复杂性是可以接受的,而且spring的子Bean功能是Xstream所没有的,避免了我再进行编码的工作。我对spring还是太不了解了,也许应该把spring参考手册完整的看一遍了。

使用XStream自动生成页面

找到XStream后我的页面自动生成的功能就完成一半了,思路基本上确定下来了:
主要是两个文件对页面的生成进行配置,一个就是配置系统中的Element,通常的表单中的一个输入项,例如用户名提示加后面的输入框以及有效性校验,这个在elements.xsl文件中定义一下就行了,然后另外有一个Form,对应一个完整的表单,同时也有一个forms.xsl配置文件,每个form有一个名字,form通过Element的ID进行引用,而且可以额外对引用的Element的缺省配置进行修改,然后JSP就可以根据配置从标准的FORM库里面取出配置好的Form生成页面的Form部分了,当然也可以用比较原始的方式从Elements库里面取出最小的单元手工拼装,然后这个Form可以和一个Bean绑定,完成Element的赋值。
当然这个只是一个思路,真正要完成这个还有很多的代码要写呢,不过有了这个已经比较好做了,剩下的就是生成页面的体力活了。

为什么java世界没有真正的快速开发平台

为什么java世界没有像微软的visual studio那样的快速开发平台,其中一个原因固然是因为微软封装了很多东西,提供了强大的集成工具并且要求你按照微软的设计思路来设计系统,但是java世界具备visual studio中的任何一种组件,所缺少的只是没有人或者厂商将他们集成起来,而之所以没有人去做,一个很大的原因恐怕是java里面每种组件我们都有太多的选择,web框架有struts,spring,webwork2以及其它的,ORM也有EJB,JDO以及hibernate,ibatis,obj供选择,IDE有JBuilder,Eclipse,IDEA,JDeveloper以及Netbeans,另外的其它的组件也是多得不可胜数,但是我们现在已经可以看到快速开发平台推出的希望了,首先是IDE的统一,Borland,BEA都放弃了开发自己的IDE转向Eclipse,而Eclipse3.1的功能和性能表现也足以吸引很多原来使用其它IDE的用户,而SUN的Netbeans一向不为大家所认可(SUN开发的大部分开发工具好像都是这个下场),因此有了IDE的统一,其它的组件基本上都可以围绕她来进行,加上Eclipse插件开发非常的方便,因此这更加促进了对它的扩展,而现在的情况也确实是向这个方向迅猛发展的。有了这个基础,我就来谈谈我对未来的这个快速开发平台的期望了(对于新开发的系统):

  1. 项目管理:可以使用maven或者ant,对于小一些的项目可以使用ant,对于项目管理的内容很多的可以考虑采用maven。
  2. 版本管理:基本上可以选定cvs。
  3. IDE:不用说,就是Eclipse了。
  4. 系统架构:以Spring为核心的架构应该是比较好的选择。
  5. 表现层:struts或者freemarker,这个可能选择性太多,除了struts外好像还没有哪一个有那么广泛的用户基础。
  6. ORM:Hibernate应该是现在的不二之选了。
  7. 辅助工具:xdoclet,可以根据项目的需要进行部分的内容的生成,减少很多手工的工作,也许应该有更多的缺省的扩展。
  8. 单元测试:Junit或者TestNG之类的,虽然有很多人说junit已经不那么好用了,但是对于一般的项目应该还是够用的。
  9. 。。。

其实还有很多其它的组件没有谈到,包括页面测试,报表,缓存等等,但是我这次想说的其实不是这些,我的核心其实是里面最不起眼的xdoclet,因为它其实可以作为所有这些组件的一个黏结剂,核心其实就是代码生成,我理想中的情况如下:

  1. 开发人员最初编写的就是一个POJO的属性列表,而这个属性列表的内容可能来自系统的设计文档或者其它的建模文档。
  2. 根据POJO的属性列表生成对应的POJO类
  3. 修改POJO,增加需要的hibernate或者其它的例如页面生成,spring配置需要的信息。
  4. 生成系统的完整骨架,包括spring配置文件,hibernate映射文件,JSP页面
  5. 修改生成的内容,对于细节的地方进行修改

依然很复杂,那么我们不妨再简单一些,编写POJO属性列表的时候增加hibernate配置信息,页面配置信息以及spring配置信息,一步到位生成全部的基础代码,或者是写一个这样的文件,点击右键,点击Generate target page…,在出现的对话框里面选择需要生成或者更新(覆盖)的对象,可以是hbm文件或者是页面文件或者是spring配置。
可能很多人觉得我是白痴,开发一个系统哪里这么简单,但是这样的一个系统已经为我们生成了系统的骨架,完成了很多烦琐的我们大部分人都不愿意做的枯燥工作,为什么不那样做呢?不管别人如何看,我会自己试验这样的系统的可行性的,也许是一个值得做的方向。
当然,一个复杂的系统的快速开发还远远不止这些,特别是系统要求是中型以上的系统,业务逻辑比较复杂,要求国际化,要求页面美观,易于修改定制等等,但是并非不可能,我们可以根据以前积累的经验定制一套这样的系统,例如ant+eclipse+spring+hibernate+freemarker+xdoclet+css,在系统组件的选择确定的情况下,我们甚至可以抛弃xdoclet使用自己完成的生成工具更好更灵活的的生成我们需要的内容。

隐藏Apache的服务器配置信息

>ServerTokens ProductOnly 和 ServerSignature Off 微调 Apache 的返回信息

http://windtear.net/archives/2005/05/30/000676.html

apache 的 httpd.conf 有两个配置可以控制是否显示服务器信息给用户
ServerTokens
ServerSignature

默认条件下会把apache版本 系统 模块都显示出来 (HTTP 返回头)
还有如果列举目录的话 会显示域名信息(文件列表正文)
(http://httpd.apache.org/docs/mod/core.html表明ServerSignature已经默认Off了)
如果不想要就可以调这两个参数

ServerTokens
ServerSignature

ServerSignature On|Off|EMail
ServerTokens Minimal|ProductOnly|OS|Full

ServerTokens Prod[uctOnly]
    Server sends (e.g.): Server: Apache
ServerTokens Min[imal]
    Server sends (e.g.): Server: Apache/1.3.0
ServerTokens OS
    Server sends (e.g.): Server: Apache/1.3.0 (Unix)
ServerTokens Full (or not specified)
    Server sends (e.g.): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2

 

更早的文章 更新的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑