【实习记】2014-08-20实习的mini项目总结
实习项目总结文档
项目介绍
项目逻辑很简单,只有几个页面,只能登录,查看,支付和退款。主要作用是熟悉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项目总结的更多相关文章
- 【实习记】2014-09-24万事达卡bin查询项目总结
8月28号,接到这个问题:现有前缀查询速度较慢,改进此知值求区间问题. 一开始没想到用二分法,更没有想到这个项目用了一个月,这一个月里,我学习并使用了middle框架写出了server ...
- 【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件
情景,ubuntu下把NTFS格式的盘中的“实习记”文件夹彻底删除了,追毁莫及,粗心觉不是一件好的事情. linux下回复ntfs盘下的文件不能用ext3grep,而使用debugfs命令实在 ...
- 实习记——《Rethink》
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gmszone/article/details/30045055 最终能够在和自己的电脑上写下这些字了 ...
- 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 ...
- 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 ...
- 2016年6月23日 星期四 --出埃及记 Exodus 14:20
2016年6月23日 星期四 --出埃及记 Exodus 14:20 coming between the armies of Egypt and Israel. Throughout the nig ...
- http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html
http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html
- 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() ...
- 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内容相 ...
- 如何从“点子”落地到“执行”?—完整解析1个手游传播类mini项目的进化
本文来自网易云社区 作者:林玮园 从点子到落地,是不确定到确定的过程,是从模糊概念到具体现实的实现过程.无论什么点子,在落地变现的过程中都会有很多疑问产生. 首先,不确定点子本身是否成立.点子的背后是 ...
随机推荐
- 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
- 初识chromium thread的实现
接触chromium已有一段时间,写点东西学习一下吧. 首先说一下用法,如何利用chromium封装好的thread类来开一个线程.在base里有一个封装该类的头文件thread.h,include它 ...
- iOS全景
一张鱼眼图或者6方图,展现出来的全景影像效果图 PanoramaGL PanoramaGL是世界上第一个开源的实现360度全景图像的iOS.Android类库.基于OpenGL 支持球,立方体,圆柱. ...
- oc学习之路----内存管理
直接上图啊.
- JAVA基础英语单词表(上)
action / 'ækʃən / 动作,行为 active / 'ækti ...
- java转c#代码工具集合
1#:Java语言转换器助手地址:http://www.microsoft.com/en-us/download/details.aspx?id=14349 2#:Octopus的.NET转换器地址: ...
- 使用泛型简单封装NGUI的ScrollView实现滑动列表
懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...
- Karma-Jasmine之安装与实例详解(一)
本文先介绍karma-jasmine的安装.接下来的(二)中主要通过实例利用断言库详解karma-jasmine如何进行单元测试. Karma介绍 首先说一下karma,官方是这样给出的,karma不 ...
- EBS OAF开发中实现參数式弹出窗体
EBS OAF开发中实现參数式弹出窗体 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 參数式弹出窗体和嵌入式弹出窗体不一样,它拥有独立 ...
- android83 Activity的生命周期,启动模式,返回时传递数据
#Android四大组件 * Activity * BroadCastReceiver * Service * ContentProvider #Activity生命周期 * oncreate:Act ...