我的20天项目经历--至今令我难忘的技术难题

时间转眼过去一年多了,我离开那个公司也已经一年多了.往事不堪回首,世事也总是以成败论英雄的,因为我知道前面的一个接口项目先后导致3个人离职,2个人被处罚;而这个项目只有我一个人,在项目割接的当天我也算完成了;我是成功者,也是失败者;我证明了自己是可以笑着离开H公司.其实我一直不太想写出来,毕竟申请离职也不是一件很光彩的事情.

[@more@]

时间转眼过去一年多了,我离开H公司也已经一年多了.往事不堪回首,世事也总是以成败论英雄的,因为我知道前面的一个接口项目先后导致3个人离职,2个人被处罚;而这个项目只有我一个人,在项目割接的当天我总算不辱使命完成了;我既是成功者,也是失败者;我证明了自己是可以笑着离开H公司的.其实我一直不太想写出来,毕竟申请离职也不是一件很光彩的事情.

2006年是全国号码百事通风起云涌的一年,Z电信公司正是第一个勇于吃螃蟹的人且率业界之先的公司;我就是2006年初被派到Z电信公司跟着另外一个项目经理讨论接口需求的(原因很简单,为了避免垄断,Z电信公司把省中心业务给了Q公司,12各地市给了H公司,所以在省中心和地市之间需要通过Web Service接口进行互连),其实在这之前的一年内我是做BI和数据库优化的,对于所谓的接口和114是一窍不通的.估计看出了点苗头,项目经理当了甩手掌柜,只好由我一个人来负责此事了.

2 8 , 春节还没过完, 我便来到了H , 经过反复的讨论和调研, 其实我做的工作只是号码百事通业务的一部分, 即实现对现有知识库的智能访问, 当然访问是需要通过接口来完成的, 此外还要实现一定的功能, 例如发送短信, 来电转接, 记录计费信息, 当然也是通过接口来实现.
114

其实我很早就已经有了初步的想法,最简单的就是我自动生成存储过程和自动生成html网页(其实基本上已经实现了),但是了解到存储过程需要在友商的数据库中创建,以及考虑到相关的风险和双方的剑拔弩张的气氛,这显然是不可能实现的任务.现在只能自己另辟蹊径建一个独立的Web Server服务器,通过正在流行的Web Service接口来实现这一切功能了.

上述的图片显示的框架源于我对BI和数据库的理解,只要有一个开放的数据字典,基本上就可以实现任何的自定义查询和自定义组合;如果复杂一点的话,甚至可以实现一套简单的报表系统.正是基于这样的想法和相关数据结构开始和Q公司谈相关的接口.但是有几个问题一直缠绕着我:

1. 采用什么样的WEB服务器,Tomcat还是Resin

2. 采用什么样的编程工具,Jbuilder还是Eclipse?

3. Web Service接口到底是什么,如何完成发布和调用

4. 采用什么样的Java框架(Struct还是Spring还是纯粹的JSP)

5. Ajax技术

6. 关于树型目录的实现(需要高效,无延迟)

7. 最难缠的还是和Q公司的谈判和交流(要面对对方5,6人的轮番轰炸)

也许对于java高手而言这根本不算什么,可对于我而言,那简直是一场噩梦,我的Java水平和HTML水平仅限于写一些简单的JSP页面和JavaBean完成简单的封装,我自认为自己水平最高的还是HTMLjavascript水平,不管多么复杂的页面和frame我都可以整理出一个头绪出来.我从来不是一个唯工具论者,我相信任何工具都只是手段,而条条马路都可以通向罗马的.可惜给我留的时间太短了,只有3周的时间.说真的,那时候天天对着西湖的美景,没有一丝丝观看的心情,真的想扑通一声跳下去,一了百了.

言规正传首先需要确定系统大体的架构,TomcatEclipse都是开源的架构,不涉及到版权和费用,从网上downTomcat,呵呵,如果Z电信公司知道了非要气个半死不可.按照从网上搜索的资料把TomcatEclipse环境配置完毕,然后按照公司的java高手指点,配置Spring框架.

关于Spring框架的配置

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

其实在这样的小型系统里,它提供了一个便于调试和控制的开关;至少在本文中,是为了解决无法使用接口环境进行调试的时候,改用数据库接口方式.

<!-- =======如果是和soap接口连接,请去掉该bean的注释===========--&gt

http://192.168.1.2/Forxxx/ForQuery.asmx

http://tempuri.org/

<!-- ===========如果是和db接口连接测试,请去掉该bean的注释 =====--&gt

<!--

--&gt

关于树型目录的框架

严格说来写一个树型目录的架构是一项非常复杂的工作,树型目录的实现有两种方式:全部画出所有的树节点和当触发时实时画出下一层节点。前一种的实现相对简单一些,但是当节点数量超过1000之后,采用递归算法会导致页面首次显示时出奇的缓慢,我曾经做过对js脚本和相应的存储过程做过调优,但是效果还是不甚理想;触发时才实时画出下一层节点技术难度很高,还好公司有比较现成的框架,java类和接口就有10几个,完全阅读并理解显然是不现实的,只能通过摸索把先有的业务和原来的接口进行不断的测试,花费了一天时间才得以完成.

关于Web Service

Web Service是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。总得来讲它能够突破平台限制,穿越企业防火墙,通过开放的接口和认证实现信息的共享和传递.

WSDL

对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。 WSDL (Web Services Description Language) 规范是一个描述接口,语义以及Web服务为了响应请求需要经常处理的工作的XML文档。这将使简单地服务方便,快速地被描述和记录。

对于.NetWSDL调用来说是很简单的,例如一个简单的VBS脚本

Dim obj

set obj=createobject("MSSOAP.SoapClient30")

obj.MSSoapInit "QueryService.wsdl"

MsgBox obj.getPhoneByName("0578", "XXX单位",10)

但是对于java而言调用一个.Net产生的WSDL简直被折磨了半死,Q公司又不肯提供技术支持,不断的进行调试跟踪最后才发现是一个setEncodingStyle参数设置的问题.

public class CpSpInterface {

protected Log logger = LogFactory.getLog(this.getClass());

private String endpoint = "http://192.168.1.2/Service1.asmx";

private String nameSpace = "GetSPInfo";

public String callGetIndexByType(String strTypeID, String strParaList,String strResultType)

{

String ret = "<?xml version="1.0" encoding="gb2312" ?>";

try {

String methodName = "GetIndexByType";

Service service = new Service();

Call call = (Call) service.createCall();

call.setTimeout(new Integer(120000));

call.setTargetEndpointAddress(new java.net.URL(endpoint));

call.setUseSOAPAction(true);

call.setSOAPActionURI(nameSpace + "/GetIndexByType");

call.setOperationStyle(org.apache.axis.constants.Style.WRAPPED);

call.setEncodingStyle("literal");

call.setOperationName(new QName(nameSpace, methodName));

StringHolder holder = new StringHolder("0");

// Set Call Parameter

call.addParameter(new QName(nameSpace, "strTypeID"),

Constants.XSD_STRING, ParameterMode.IN);

…………

//Set back Parameter

call.setReturnType(Constants.XSD_STRING);

ret = (String) call.invoke(new Object[] { strTypeID, strParaList,

strResultType });

ret = ret.replaceAll("utf-8","gb2312");

logger.debug("ret = "+ret);

logger.info("return errorcode = " + holder.value);

} catch (Exception e) {

logger.error("Error " + e);

}

return ret;

}

}

关于Ajax

单纯从Ajax本身来说,其最主要不过就是解决在网页上一个无刷新获取数据的问题,再加上减少了数据的传输量,将数据解析的工作推到了客户端,的确能解决很多传统的问题,很方便的实现一些动态效果。Ajax的应用本来是为了增强用户体验,于是就有了一个新的名词WEB2.0.

其实在该系统的应用很简单即获取到COM组件传过来的主叫号码和被叫号码,记录到Session,具体的JSP页面是一个非常简单的页面,就不必再写了,呵呵

Xh = new ActiveXObject(“Microsoft.XMLHTTP");

var link = "./beginSession.do?callID="+callid+"&callerNo="+callerno+"&calleeNo="+calleeno;

关于交流

其实整个系统过程中,最头疼的问题还是和Q公司的交流,Q公司是一家新型的在电信领域刚刚展露头脚的公司,面对这样一个扬名立万的机会,当然不会错过了,于是派了40个现场人员进行现场开发,真不知道他们的项目成本控制是怎么做的;而我方总计也只有3个人,参与接口的讨论最多也只有2个人;每次都要面对对方嗡嗡的一群人的轮番轰炸;最后不得已拉着Z电信公司一起参与讨论.还好对方也有很多的软肋(双方都要提供一些接口),才不至于被折磨的太惨.

2006228,是个特殊的日子,当天下午Q公司终于把接口调试完毕,当天晚上我也把相应的功能完善起来,终于到了一个milestone.彷佛经历了一场噩梦.连续3周的时间,每天从早9点到晚上3点不停的写代码,调试代码,查询资料,讨论需求;极度厌烦了这样的生活,最后终于借口身体不好,仓惶逃离了这个地方,把工作交接给一位新来的同事,他又继续维护了6个月.我回去后休整了1个多月,身体仍然比较虚弱,再过了一个月就黯然离职了

补记:时年6月份便发生了一幕惨剧,一位同事因过劳而死不知道我再呆上几个月,轮到的是不是我

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8128313/viewspace-919247/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8128313/viewspace-919247/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在撰写关于你的 sqli-labs 靶场项目经历时,你可以按照以下结构组织你的内容: 1. 引言:简要介绍 sqli-labs 靶场项目是什么,其目的和意义。 2. 背景:说明你参与该项目的原因和动机,例如提升自己的网络安全技能、学习 SQL 注入漏洞等。 3. 角色和职责:说明你在项目中扮演的角色和担任的职责,例如是项目组成员还是负责特定部分的开发者或测试员。 4. 实施过程:描述你在项目中所采取的具体步骤和方法。例如,你可以提及你使用的工具和技术,以及如何设计和建立 sqli-labs 实验环境。 5. 遇到的挑战:讲述在项目过程中遇到的挑战和困难,并描述你是如何克服它们的。这可以包括技术难题、时间限制、资源限制等方面。 6. 成果与收获:详细描述你在 sqli-labs 靶场项目中取得的成果和收获。例如,你可以提及成功实现了一系列 SQL 注入攻击、加深了对网络安全的理解、提升了解决问题的能力等。 7. 后续工作:展望 sqli-labs 靶场项目的未来发展,并提出你个人希望在该领域继续深入学习和探索的计划。 8. 结论:总结你的 sqli-labs 靶场项目经历,并强调它对你个人和专业发展的重要性和价值。 记住,在写作时要用清晰、准确的语言来描述你的经历,突出你在项目中的贡献和取得的成果。同时,尽量与具体实例和数据来支持你的陈述。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值