实习项目总结文档

项目介绍

项目逻辑很简单,只有几个页面,只能登录,查看,支付和退款。主要作用是熟悉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. Bzoj 2346: [Baltic 2011]Lamp dijkstra,堆

    2346: [Baltic 2011]Lamp Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 179[Submit][Sta ...

  2. parseSdkContent failed Could not initialize class android.graphics.Typeface

    Deleting ".android" is temporarily fixing the problem with me as after sometime it begins ...

  3. 排列的Java递归语言实现

    在做算法题的时候,发现排列经常被使用到,是一个重要的知识点, 下面是博主修改过的代码,初学者,如有不足,欢迎指出 import java.util.ArrayList; import java.uti ...

  4. Test2014-3-1 魅力值比较

    魅力值比较 [问题描述] 大学生恋爱的问题造成了数量众多的异地恋,有许多J大的女生早早被Q大男生追走,这导致了J大男生的强烈不满.就在吐血高调地向一位J大美女展开攻势的之后,J大男生终于爆发了. 为了 ...

  5. Eclipse插件收藏列表

    viPlugin 2.11.0 AnyEdit Tools 2.4.4 EclipseColorer 0.8.0 PyDev – Python IDE for Eclipse 2.7.5 MoreUn ...

  6. Linux中统计某个文件夹的大小

    进入这个文件夹内 然后du -sh命令

  7. window系统上用PHP获取本地物理IP代码

    <?php $res=system("ipconfig -all"); $contents=trim(ob_get_clean()); $contents=str_repla ...

  8. PAT 1016. Phone Bills

    A long-distance telephone company charges its customers by the following rules: Making a long-distan ...

  9. Spring Security4源码解读探寻权限机制

    我们知道springSecurity 会在用户登录的时候获取用户的角色权限, 你是一个普通用户可能没有管理员拥有的权限.用户登录后Authentication 获取用户的权限. 不通用户登录系统会生成 ...

  10. Java整型与字符串相互转换(转)

    1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([S ...