时 间转眼过去一年多了 ,我离开 H公司也已经一年多了 .往事不堪回首 ,世事也总是以成败论英雄的 ,因为我知道前面的一个接口项目先后导致 3个人离职 ,2个人被处罚 ;而这个项目只有我一个人 ,在项目割接的当天我总算不辱使命完成了 ;我既是成功者 ,也是失败者 ;我证明了自己是可以笑着离开 H公司的 .其实我一直不太想写出来 ,毕竟申请离职也不是一件很光彩的事情 .
2006年是全国号码百事通风起云涌的一年 ,而 Z电信公司正是第一个勇于吃螃蟹的人且率业界之先的公司 ;我就是 2006年初被派到 电信公司跟着另外一个项目经理讨论接口需求的 (原因很简单 ,为了避免垄断 ,Z电信公司把省中心业务给了 Q公司 ,而 12各地市给了 H公司 所以在省中心和地市之间需要通过 Web Service接口进行互连 ),其实在这之前的一年内我是做 BI和数据库优化的 ,对于所谓的接口和 114是一窍不通的 .估计看出了点苗头 ,项目经理当了甩手掌柜 ,只好由我一个人来负责此事了 . Z ,
2月 8号 ,春节还没过完 ,我便来到了 H市 ,经过反复的讨论和调研 ,其实我做的工作只是号码百事通业务的一部分 ,即实现对现有知识库的智能访问 ,当然访问是需要通过接口来完成的 ,此外还要实现一定的功能 ,例如发送短信 ,来电转接 ,记录计费信息 ,当然也是通过接口来实现 .
其 实我很早就已经有了初步的想法 ,最简单的就是我自动生成存储过程和自动生成 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完成简单的封装 ,我自认为自己水平最高的还是 HTML和 javascript水平 ,不管多么复杂的页面和 frame我都可以整理出一个头绪出来 .我从来不是一个唯工具论者 ,我相信任何工具都只是手段 ,而条条马路都可以通向罗马的 .可惜给我留的时间太短了 ,只有 3周的时间 .说真的 ,那时候天天对着西湖的美景 ,没有一丝丝观看的心情 ,真的想扑通一声跳下去 ,一了百了 .
言 规正传首先需要确定系统大体的架构 ,Tomcat和 Eclipse都是开源的架构 ,不涉及到版权和费用 ,从网上 down的 Tomcat,呵呵 ,如果 Z电信公司知道了非要气个半死不可 .按照从网上搜索的资料把 Tomcat和 Eclipse环境配置完毕 ,然后按照公司的 java高手指点 ,配置 框架 . Spring
关 于 Spring框架的配置
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一 个组件,同时为 J2EE 应用程序开发提供集成的框架。
其 实在这样的小型系统里 ,它提供了一个便于调试和控制的开关 ;至少在本文中 ,是为了解决无法使用接口环境进行调试的时候 ,改用数据库接口方式 .
<!-- ======= 如果是和 soap 接口连接,请去掉该 bean 的注释 ===========-->
<bean id="QueryData" class="com.xxx.yyy.inf.SoapInterface">
<property name="endpoint">
<value>http://192.168.1.2/Forxxx/ForQuery.asmx</value>
</property>
<property name="nameSpace">
<value>http://tempuri.org/</value>
</property>
</bean>
<!-- =========== 如果是和 db 接口连接测试 , 请去掉该 bean 的注释 =====-->
<!--
<bean id="QueryData" class="com.xxx.yyy.inf.DBInterface">
<property name="dataSource">
<ref local="DataSource"/>
</property>
</bean>
-->
关 于树型目录的框架
严 格说来写一个树型目录的架构是一项非常复杂的工作 ,树型目录的实现有两种方式 :全部画出所有的树节点和当触发时实时画出下一层节点。前一 种的实现相对简单一些 ,但是当节点数量超过 1000之后 ,采用递归算法会导致页面首次显示时出奇的缓慢 ,我曾经做过对 js脚本和相应的存储过程做过调优 ,但是效果还是不甚理想 ;触发时才实时画出下一层节点技术难度很高 ,还好公司有比较现成的框架 ,光 java类和接口就有 10几个 ,完全阅读并理解显然是不现实的 ,只能通过摸索把先有的业务和原来的接口进行不断的测试 ,花费了一天时间才得以完成 .
关 于 Web Service
Web Service是一种可以接收从 Internet或者 Intranet上的其它系统中传递过来的请求,轻量级的独 立的通讯技术。总得来讲它能够突破平台限制 ,穿越企业防火墙 ,通过开放的接口和认证实现信息的共享和传递 .
WSDL
对 于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。 WSDL (Web Services Description Language) 规范是一个描述接口,语义以及 Web服务为了响应请求需要经常处理的工作的 XML文档。这将使简单地服务方便,快速地被描述和记录。
对 于 .Net的 WSDL调用来说是很简单的 ,例如一个简单的 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" ?><root status="1" lines="0"></root>";
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电信公司一起参与讨论 .还好对方也有很多的软肋 (双方都要提供一些接口 ),才不至于被折磨的太惨 .
2006年 2月 28日 ,是个特殊的日子 ,当天下午 Q公司终于把接口调试完毕 ,当天晚上我也把相应的功能完善起来 ,终于到了一个 milestone.彷佛经历了一场噩梦 .连续 3周的时间 ,每天从早 9点到晚上 3点不停的写代码 ,调试代码 ,查询资料 ,讨论需求 ;极度厌烦了这样的生活 ,最后终于借口身体不好 ,仓惶逃离了这个地方 ,把工作交接给一位新来的同事 ,他又继续维护了 6个月 .我回去后休整了 1个多月 ,身体仍然比较虚弱 ,再过了一个月就黯然离职了
补 记 :时年 6月份便发生了一幕惨剧 ,一位同事因过劳而死 …不知道我再呆上几个月 ,轮到的是不是我 …

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

  1. 一面准备:项目经历、开放问题回答、基础

    文章目录 1⃣️项目1:Chrome插件 作用和怎么想到的: 目录树以及作用: 前端: 扩展程序的扩展页面和将信息发到页面其他js的操作:popup.html.popup.js 得到popup的跳转指 ...

  2. NLP面试时,项目经历要怎么讲?

    很多粉丝问我,NLP算法工程师面试的时候.或者在简历中,项目经历要怎么讲? 我去请教了在BAT大厂长期担任面试官的大佬,并结合自身的一些经历,统一给大家回答一下. 一.项目介绍稿 针对自己做过的项目, ...

  3. 理想、激情、生存———位技术管理人员的20年工作经历和感悟(2)

    [正文]第9节 -- 第18节 9. 人脉关系 工作中建立起来的人脉关系应该说是自然形成的,互相间觉得比较投缘,就多了一些来往,各自工作中碰到技术问题,也可以交流一下.因为工作了20年,走过几家公司, ...

  4. 项目经历怎么写_工程监理简历范文,【工作经历+项目经验+自我评价】怎么写...

    工程监理简历模板,工作经历+项目经验+自我评价怎么写 [网盘下载]100+清新大气简历模板: https://zhuanlan.zhihu.com/p/115911695 https://zhuanl ...

  5. 简历上面的项目经历怎么写?怎么写才能显得突出?

    项目经历可不可以是课堂项目? 其实对很多同学来说,不是不会写项目经历,而是根本不知道什么是项目经历,哪些内容可以写在项目经历中.所以看到简历中的项目经历模块,感觉不知道怎么写?那么对于大学生来说,即使 ...

  6. 项目经历:基于TM4C LaunchPad的电能质量分析仪

    项目经历:基于TM4C LaunchPad的电能质量分析仪 一.任务要求 二.实现思路 0.参考博文 1.思路概述 2.ADC采样 3.频率测量 4.数据运算的时序设计 三.实现代码 1.ADC采样 ...

  7. 项目管理实践篇(二):总结项目经历

    满打满算,今年是 17 年毕业之后的第 4 个年头了. 4 年时间很长,经历的人和事数不过来:4 年时间太短,想打造自己的专业能力还要假以时日.我一直在思考,程序员到底在互联网这条路上能够走多远呢? ...

  8. 未明学院活动:新零售热门背景提升项目上线,阿里、腾讯都看重的项目经历,你来不来?

    新零售行业前景 马云曾经在杭州云栖大会上提出未来五大新趋势:新零售.新制造.新金融.新技术与新能源,并称未来这五个新的发展将会深刻地影响到中国甚至世界上的每个人.对于新零售马云认为,纯电商时代已经过去 ...

  9. mysql项目经历_计算机专业项目经历怎么写

    项目经历(案例一) 项目时间:2015-03到至今 项目名称:商户后台 | 项目工具:Eclipse 项目描述: 项目介绍 1.按照商户签约开通的业务,对应相关角色和权限,商户登录后展示不同的菜单和功 ...

最新文章

  1. 畅通工程//最小生成树prim
  2. 普通的年轻状态机,纯C语言
  3. 计算机组成原理——数据表示、运算与校验1
  4. 华润网络签约神策数据 数据赋能打造跨行业综合移动服务生态圈
  5. 九、股票收盘价与滑动平均线MA
  6. pytorch指定用多张显卡训练_Pytorch中多GPU训练指北
  7. python 锁 多进程
  8. ATS读小文件(内存命中)
  9. Pandas常用操作总结
  10. Tensorboard --logdir=logs 无法显示图像的处理办法
  11. ACM MM 2022 Call for Papers
  12. 如何在Kubernetes上运行PostgreSQL
  13. 云服务器定时启动程序_过去、现在和未来:开发一款微信小程序的技术迭代全过程...
  14. 你的电脑已经成为肉鸡的六种现象
  15. CVE-2021-2429:MySQL InnoDB Memcached 插件中的堆缓冲区溢出漏洞详解
  16. oracle不能插入,oracle – 在过程中截断和插入不能一起工作
  17. PCB走线载流能力-揭秘一
  18. linux查看内网命令,nmap命令查看内网信息的几个...-centos6.3中lspci查看硬件信息提...-学习linux cut 命令的用法_169IT.COM...
  19. 【读书笔记《Android游戏编程之从零开始》】9.游戏开发基础(如何快速的进入 Android 游戏开发)
  20. RootKit检测工具

热门文章

  1. Hibernate依赖包简单介绍
  2. 美女同事DL-624+A家庭办公无线路由的解决方案!
  3. Saltstack_实战指南01_系统规划
  4. Linux中最受欢迎的邮件传输代理(MTA)
  5. 【转载】Gradle学习 第一章:引言
  6. 进击的UI------------------UISegmentedControlUISlide
  7. 浏览器为什么会有兼容性问题
  8. C# Lambda表达式 基础
  9. robots.txt文件里面怎样屏蔽蜘蛛
  10. vs2005之主题与皮肤的学习