eclipse使用SVN插件,在svn服务器无法连接的情况下,eclipse启动会出现死锁
JVM崩溃,报告 SIGNAL11,可能是SWT的BUG,可以试着使用SUn的JVM替换解决。
LinkedList 用于排序效率会比较低,因为collections.sort用到了list的set方法,LinkedList实现这个方法需要逐个遍历
找到某个位置的元素,非常耗时,可以用arraylist,vector代替
RCP程序异常结束,通常是由于进程间的调用引起的,可以将一些数据通过参数穿过去,避免线程间的互操作
用来做hashmap hashset等容器的关键字的对象是不能改变的,因为其改变了会导致对象的hascode()返回值改变,
也就是关键字变了,用于。 如果两个对象equals()返回的是假,那么他们的hascode()值必须不一样。实际使用中,object
的hashcode()能保证同一次运行的两个对象返回值是不同的。
java模块通常药分作三部分:模型,界面和IO,模型是界面背后的东西,包括各种逻辑和算法,界面是面向平台和用户的,
IO是各种数据的输入和输出,当三者分开后,即使从桌面程序切换到web程序,界面和IO部分要更换,但最重要的模型部分
可以最大程度的保留下来。
eclipse里,为了把界面和算法分开,操作不能放在与界面有关的command里,应该保留在单独的类和包里(如命名为tools包)
为什么attributeview中的find command加了new thread就会先定位后闪,不加就先闪后定位呢?
原因未知,但经过证实对方法调用的按序执行非常有效
要维持详细并保持最新的文档的代价是很大的,比较好的做法可能如下:
1 要有代码review,保证设计是合理的。这样新人和接手的人可以较快的融入项目,避免只有作者才能理解的代码,可以使代码的维护代价降到最小。
2 要有教详细的代码注释。
3 要有最基本的开发文档
4 要有定期的技术讨论会,促进开发人员的相互交流。
常量的放置可分如下几种情况
1 软件使用过程中需要用户配置的,应该给在软件中提供界面并放在单独的配置文件中,如使用EMF。
2 部署过程中用到的配置主要是供开发人员使用的,不需要界面,也要使用单独的文件存放。
3 一些相对固定的常量,如要使用到的文件路径和名字,可以放在常量类中。
解耦是系统设计中一个重点,要将各个模块的代码物理上和逻辑上分开,如和gis系统解耦,和db解耦,这样可以显著提高系统的稳定性,提高代码重用率,降低开发,调试和维护工作量。
起名字的时候,createXXX和getXXX要分清,create是创建新对象,要消耗较多的资源,而get应该是可以直接得到的对象。
要让开发team的每个人都清楚team和自己的目标
需要为开发人员设定目标,程序员都有很高的成就激励感
通过单一的bug发现方法查找bug,bug的检出率会很低,必须联合多种方式。
通过检查代码来发现并修改bug的成本比通过测试来减少bug的成本要低得多,因此代码复查是很重要的。
正式的代码复查包括被复查人,主持人,记录员,评论员,3-6个人为好,经理不应参加。
eclipse出现Transport dt_socket failed to initialize, rc = 509.错误,项目无法启动
解决办法:将sde/jre/bin目录下的dt_socket.dll拷贝到sdk/bin目录下就可以了
代码大全P42 需求核对表
察看aixcpu个数 lsdev -Ccprocessor|wc -l
架构设计应该描述系统有哪些构造块,每条需求至少有一个构造块覆盖到,减少构造块之间的关联,增加内聚,减少耦合,描述构造块的依赖关系,以及禁止的依赖关系。描述构成系统80%行为的20%类。说明对稀缺资源的管理,如数据库连接。可伸缩性,如如何应对用户数量和存储的增长。
所有软件技术的目标都是为了降低复杂度,这是项目中首要的问题。
当知道要解决的技术问题中的首要目标是降低复杂度之后,设计上的很多考虑就变得直截了当了。
好的设计: 最小的复杂度,易于维护,松散耦合,可扩展性,可重用性,高扇入,低扇出,可移植性,精简性,层次性(封装),标准技术
以信息隐藏为目标来设计类,可以激发很多好的设计,很多棘手的问题会迎刃而解。
需求中应该包含一份潜在的需求变化清单,可以包含在风险列表中。设计时应该将容易变化的部分同其他部分隔离开来。困难的区域也应该隔离开来,由于这部分可能构建的比较差,将来也需要重做或者做比较大的改动.
容易变化的区域:业务规则,对硬件的依赖
自上而下和自下而上两种设计方法,实际项目中可以将二者结合起来使用。先用自下而上的设计找出并解决系统中的关键问题,然后用自上而下的方式设计整体架构。
面向对象的编程中,很少用到长度超过一个屏幕的子程序,如果出现这种情况,常常意味着是在面向对象的框架下使用结构化编程。
为了保证JSP页面一部分的内容针对角色或者运行环境进行控制,可以使用标签的方式,可以避免控制的代码出现在很多JSP页面中。
WEB-INF目录是不可以公共访问的,因此可以把重要的文件放在此目录下面。
arcims的服务只能用用户名和密码的方式启动,不能用本地用户,否则sde里面的图层可能不好用
arcims地图服务有时会出现无法显示AcetateLayer,即不能画,但其他图层显示正常的问题,可能是由于axl文件编码的问题,编码必须是utf-8
SOA的应用由于是internet based,所以应该是减少交互,数据应该一次性大量交换
SOA构件的划分是以业务为基础的,可以完成一个完整的业务
使用业务规则有利于应对业务的迅速变化,修改业务规则的任务可以由熟悉业务的人员而不是技术人员,使用的是
wps提供的web工具而不是专业的桌面开发工具。
如果arcims总是在初始化不结束,可以重新启动服务,然后进行postinstall,或者删除D:\Program Files\ArcGIS\ArcIMS\AppServer 下ArcIMSSite.sez AimsAdmPw
JAR在重用上的问题在于版本的管理,业务是在不断更新的,不可能每次更新jar包后四处拷贝
确保仅在模型层中处理业务逻辑,在控制器层中进行应用程序导航,而视图应该只关心如何将模型对象呈现为合适的 HTML 和 Javascript™。
如果要实现集群部署,要求session内保存的对象实现序列化接口。另外,配置文件要在多个服务器间保持一致。
SOA顾名思义,要求从业务需要的角度构建服务模块,而不是从技术的角度划分。这样的思考方式有利于应对业务的快速变化。
SOA强调松耦合,可以方便的对业务进行重新组装部署。
arcengine中 IFeatureLayer.search(filter, false)的搜索结果得到的feature是可以放到map或list里保存供随后使用的,如果false换成true,则返回的地址不能保存使用,但速度会比较快。
SOA需要业务部门和IT部门更加紧密的合作。
如果Arcims administrator显示server没有运行,则需要重起apache
在JavaScript中调用WebService
<script language="javascript">
function PostRequestData(URL,data){
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("POST",URL, false);
xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=utf-8");
xmlhttp.SetRequestHeader ("SOAPAction","http://tempuri.org/myService/test/isNumner");
try {
xmlhttp.Send(data);
var result = xmlhttp.status;
}
catch(ex) {
return("0" + ex.description + "|" + ex.number);
}
if(result==200) {
return("1" + xmlhttp.responseText);
}
xmlhttp = null;
}
function loadit(value){
var url = @#http://localhost/myService/test.asmx@#;
var data ;
var r;
data = @#<?xml version="1.0" encoding="utf-8"?>@#;
data = data + @#<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">@#;
data = data + @#<soap:Body>@#;
data = data + @#<isNumner xmlns="http://tempuri.org/myService/test">@#;
data = data + @#<str>@#+value+@#</str>@#;
data = data + @#</isNumner>@#;
data = data + @#</soap:Body>@#;
data = data + @#</soap:Envelope>@#;
r=PostRequestData(url,data);
document.write(r);
}
loadit(@#5@#);
</script>
用户的密码信息不能直接存储在数据库中,应该使用sha1或者md5方法获取摘要,将摘要存储在数据库中,用户登陆时,将输入的密码再计算一个摘要,与数据库中的摘要比较就可以了,如果用户忘记密码,则在确认用户身份后允许用户重新设定一个密码。这样任何时候只有用户本人知道登陆密码,即使有人攻入数据库也无法得到用户的密码信息。java.security.MessageDigest
应该使用集中的例程对用户输入进行验证,避免分散的验证代码;同时采用客户端验证和服务器端双重验证,在完善用户体验的同时保证输入的信息得到验证。
jsp注释
<%--JSP 注释部分--%>
jsp声明
<%!
//声明一个整形变量
public int count;
//声明一个方法
public String info ()
{
return "hello";
}
%>
eclipse不编译项目中的java文件,通常是缺了类库文件,只要看看problem视图就可以找到原因。
调用其他iframe内的网页里面的javascript函数:frames[\'mainFrame\'];
调用JAVASCRIPT函数的时候,如果出现找不到对象的错误,通常是JAVASCRIPT部分出现了语法错误,如括号不全,非法字符做标识符如“-“等。
安装oracle9的时候,安装到最后的assistant出现停顿,是因为有需要输入信息的弹出窗口,按alt+tab能看到
arcsde数据导入后要建立相应的空间索引,否则会导致速度慢甚至查询错误
arcsde的featureclass经过大量编辑操作后,需要删除空间索引并重新建立索引,否则可能会很慢。
直到迫切需要的时候才编写文档,文档应该短小而不是冗长,靠团队工作传承知识。
publishing的时候报 resource XX does not exist。原因是在eclipse外面删除了项目文件,只要刷新一下项目就可以了。
关于极限编程xp:
1 不能也不必要过早深入到需求的细节,因为需求会不断变化。只要记下能够确认的点就可以了。
2 两周完成一次迭代并交付。
3 结对编程,结对关系每天改变至少一次,保证每人每天至少参与两个开发。每个成员都要参与迭代中的所有开发。
4 测试驱动开发,先编写测试代码有利于代码的解耦设计
5 不做过多的前瞻性设计和实现。够用就好。
6 不允许有重复的代码。