实习项目总结文档

项目介绍

项目逻辑很简单,只有几个页面,只能登录,查看,支付和退款。主要作用是熟悉C++的cgi的web服务开发方式。

项目页面截图

图一:登录页面

图二:买家查看

图三:买家支付

图五:卖家查看

图六:卖家退款

准备:一个星期

8月28日,第1天,入域,安装rtx,qq,wps,管家。不太顺利,可能我比较笨,用了半天。
安装git,vim,firefox,chrome。发现git必须配置http://web-proxy.oa.com:8000代理。
颇不如意,挺折腾人。
导师根据实际工作内容,为我写了一个培训计划。于是从编写linux-c的tcp层的服务端客户端开始,配置服务器,到mysql数据库操作我都做了搜索资料和实践。这时我对我们组的工作还是不太了解,正疑惑,又问了leader,他说的是http服务经转发到cgi,cgi层调middle层。我似懂非懂,后来导师强调了重点,server层操作数据库,封装了接口给cgi层调用。于是我隐约觉得middle是实际server,用于隔离数据库操作,cgi是个业务逻辑层,根据业务调用middle处理请求。也问过一些同事,一直到现在我都认为是对的。

前期工作:约一星期

准备做个小项目了,导师给说了开发流程,需求文档-设计文档-(接口文档-后面leader加的)-开发-测试。于是没有做过开发文档的我开始痛苦的探索之旅,一开始连需求文档和设计文档都分不清,研究导师发给我的示例,模仿着写,可是一天都没孵化出一点觉得靠谱的内容。后面也是摸爬滚打,艰难原始积累的过程,还学了visio画uml序列图,用了两天多,终于作出一个7页的,还是需求设计一起放那了。于是我懂了产品经理的苦。导师说需求也可以用html,我就用一天做了个html的demo。然后我放下一边开始进入真正开发里的设计阶段,首先写了init.sql,写的同时其实也是在重构数据库。然后开始写server端。周末加了一天半,学C++去了,对之后是挺有益的。

开发冲刺:一个星期+周末加班到深夜

写server要考虑一些事:与cgi通信的协议,要不要多线程,用C还是C++等等。这个代码宏观层的设计和代码结构的微观层设计同样重要。设计不佳则导致开发过于痛苦,设计好则一马平川。我的设计后面发现不使用与json等通用格式,所以设计的不好。所以server后面改过一些代码。让通信协议不统一了,这种混乱是很多灾难隐藏地。然后我写cgi和前端,由于我一年的web开发经验,jquery,bootstrap顺手拿来,还算顺利,不过还是有几个残忍的bug,让人揪心。Cgicc库最让我深刻的就是cgicc的cookie功能太惨白,还有参数获取太过于stl化,晦涩而冗长。还好,这几个cgi的功能单一,还能吃得消。这个星期是整个项目的开发主力时期,周末甚至加班到11点,不过进度倒是有提升不少,比较满意。我开发时就是这样的,一旦我知道要做什么,怎么做,就会全力以赴。熬夜,休息不够那也是常事。

修饰美好UI:一天

8月18号,第22天,星期一,听导师意见美化UI,完善提示功能后,还修改了一两小bug,终于完成了这个项目。

项目发散思考

这个项目让我重新学习了C++,让我完成参与过的项目又多了一个。写了很多篇博客,来记录我遇到的问题和解决方法的总结,还有我的思考总结。

刚好我的上一个项目是python的django项目,这个项目是C++写的,同样是web-server的项目,说一说我的比较和收获吧。

1、2-8原则,一个项目,80%的时间可能都在运行的那20%的代码。那20%的代码应该由最顶尖的工程师设计和编写。我总觉得,平台型程序员比较牛,那些写库的写手都是强人。
2、cgicc库比较小,总共8000行,基于stl库的。在这个项目了,我因为要用cookie功能而自己查看源代码。通过这种方式,对cgicc库本身架构有了个原始了解,c++写的东西总是很抽象的。我想要更简单的获取cookie方式,而不是返回HTTPCookie类的iterator,我还要看这个iterator是不是end再用类函数调出字符串来,那还不如直接返回给我好了。我试过封装,但是发现必须好些类都封装上层子类才行,这无异与在写个新库,要知道cgicc也很小。
总之,cgicc有不少抽象,抽象的同时还底层。拿个cookie都麻烦,这大哥就是STL带过来的脾气。
3、效率问题。分两个方面:一,开发效率,显然,python胜C++5倍以上,代码至少差2倍。如果那个微信项目用C++的cgi开发,估计要3个月以上。二、运行效率,显然一流的程序员写的C++程序应该比Python快很多。尽管这样,我还是发现在迭代方面,Python的list类型比C++的vector类要快,这是我以前在研究最大子序列和问题时发现的,都是o(N)算法,但当长度大于10000时,Python开始后来居上,长度越长,差距越大。根本原因可以言简意赅的说:list在python里是一等公民,vector在C++是二等公民。
4、C++与Python的一点见解。C++的文档,C++的库非常少。Python的库多如繁星,文档更是一点不落。C++已经被微软冷落了,google后来成了它重要支柱力量之一,后来开源社区的力量挺起了C++。C++经历从开始的热火朝天到现在不温不火状态,而Python一直是开源社区明星之一,如今它以成为美国大学了的第一名了。
C/C++/Python一直是我关注的语言,在我看来,如果C++继承了C语言99%,但它是个联邦,C是它的邦国。Python形式上与C截然不同,但他的基因是C的,他是C的儿子。

C++和Python的一个比喻(自创)

中国历史上有两个著名的人,苏轼和朱熹。苏轼提倡书“越读越薄”;朱熹相反,提倡“越读越厚”。拿到这里来比喻,苏轼是Python,朱熹是C++。

 
 

【实习记】2014-08-20实习的mini项目总结的更多相关文章

  1. 【实习记】2014-09-24万事达卡bin查询项目总结

            8月28号,接到这个问题:现有前缀查询速度较慢,改进此知值求区间问题. 一开始没想到用二分法,更没有想到这个项目用了一个月,这一个月里,我学习并使用了middle框架写出了server ...

  2. 【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件

        情景,ubuntu下把NTFS格式的盘中的“实习记”文件夹彻底删除了,追毁莫及,粗心觉不是一件好的事情. linux下回复ntfs盘下的文件不能用ext3grep,而使用debugfs命令实在 ...

  3. 实习记——《Rethink》

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gmszone/article/details/30045055 最终能够在和自己的电脑上写下这些字了 ...

  4. 2016年12月25日 星期日 --出埃及记 Exodus 21:20

    2016年12月25日 星期日 --出埃及记 Exodus 21:20 "If a man beats his male or female slave with a rod and the ...

  5. 2016年11月4日 星期五 --出埃及记 Exodus 19:20

    2016年11月4日 星期五 --出埃及记 Exodus 19:20 The LORD descended to the top of Mount Sinai and called Moses to ...

  6. 2016年6月23日 星期四 --出埃及记 Exodus 14:20

    2016年6月23日 星期四 --出埃及记 Exodus 14:20 coming between the armies of Egypt and Israel. Throughout the nig ...

  7. http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

    http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

  8. js 时间 Fri Dec 12 2014 08:00:00 GMT+0800

    第一种var d = new Date('Fri Dec 12 2014 08:00:00 GMT+0800'); ) + '-' + d.getDate() + ' ' + d.getHours() ...

  9. Image Processing and Computer Vision_Review:A survey of recent advances in visual feature detection(Author's Accepted Manuscript)——2014.08

    翻译 一项关于视觉特征检测的最新进展概述(作者已被接受的手稿) 和A survey of recent advances in visual feature detection——2014.08内容相 ...

  10. 如何从“点子”落地到“执行”?—完整解析1个手游传播类mini项目的进化

    本文来自网易云社区 作者:林玮园 从点子到落地,是不确定到确定的过程,是从模糊概念到具体现实的实现过程.无论什么点子,在落地变现的过程中都会有很多疑问产生. 首先,不确定点子本身是否成立.点子的背后是 ...

随机推荐

  1. JavaScript高级程序设计54.pdf

    过滤输入 对于一些浏览器,可以使用正则表达式里的text()测试用户按下的按键,Firefox和safari(3.1版本之前)会对向上向下.退格键和删除键触发keypress事件,在Firefox中, ...

  2. 【转】git - 简明指南

    git - 简明指南 助你入门 git 的简明指南,木有高深内容 ;) 作者:罗杰·杜德勒 感谢:@tfnico, @fhd 和 Namics其他语言 english, deutsch, españo ...

  3. tensorflow 保存变量,

    代码: #!usr/bin/env python# coding:utf-8"""这个代码的作用是 通过 tensorflow 来计算 y = 0.3x + 0.1 的线 ...

  4. storm的acker机制理解

    转载请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/6142356.html Storm 的拓扑有一些特殊的称为"acker"的任务,这 ...

  5. tomcat多域名配置

    1.找到你的tomcat然后在conf文件中找到server.xml打开: <Server port="8005" shutdown="SHUTDOWN" ...

  6. Android-打反编译工具的一种方法

    转载请注明出处:http://blog.csdn.net/goldenfish1919/article/details/41010261 首先我们来看下dex文件的格式: class_defs的结构: ...

  7. CCControlSlider和CCControlStepper用法

    一开始,size的大小是系统分配.玩家可以通过setDefaultSize()更改值 1. CCControlSlider用法 CCSpriteFrameCache::sharedSpriteFram ...

  8. 从Swap函数谈加法溢出问题

    1.      初始题目 面试题:). 这个题目太经典,也太简单,有很多人都会不假思索结出答案: //Code 1 void Swap(int* a, int* b) { *a = *a + *b; ...

  9. http 与https 安全链接

    安全连接 Web应用最常见的用途之一是电子商务,可以利用Web服务器端程序使人们能够网络购物,需要指出一点是,缺省情况下,通过Internet发送信息是不安全的,如果某人碰巧截获了你发给朋友的一则消息 ...

  10. C++数据结构和算法每天一练(线性表)

    #include <iostream> using namespace std;  class  ArrayLinerTable { public:       void InitLine ...