【实习记】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项目的进化
本文来自网易云社区 作者:林玮园 从点子到落地,是不确定到确定的过程,是从模糊概念到具体现实的实现过程.无论什么点子,在落地变现的过程中都会有很多疑问产生. 首先,不确定点子本身是否成立.点子的背后是 ...
随机推荐
- DAL与数据库类型的对应关系
MSSQL Server类型 DbType类型 C#类型 MySql类型 DbType类型 C#类型 bit Boolean bool bit(1) Boolean bool tinyint ...
- What does the “__block” keyword mean?
It tells the compiler that any variable marked by it must be treated in a special way when it is use ...
- Tornado源码探寻(开篇)
一.先从一个简单的socket说起 运行脚本并在浏览器上访问http://127.0.0.1:8080 #!/usr/bin/env python #coding:utf-8 import socke ...
- poj 2406 Power Strings【最小循环节】
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 36926 Accepted: 15254 D ...
- Pgsql数据库jsonb操作函数集合
CREATE OR REPLACE FUNCTION "json_object_del_path"( "json" json, "key_path&q ...
- iOS OC开发代码规范
1.变量.类名.函数名 使用驼峰命名法 2.尽量使用完整的单词命名,尽量不采用 缩写单词 3.类名使用大写字母打头,前缀统一加上HH 例如:HHHomePageController 4.类的成员变量使 ...
- 安装MYSQL 出现Error 1045 access denied 的解决方法
操作系统:WINDOWS10 系统 数据库版本:mysql 5.x 提示:access denied for user 'root'@'localhost' using password yes/no ...
- 包的定义和导入-----package
1.包的定义 其中: . 表示当前路径 2.包的导入 一个类需要被外包访问的话,需要定义为public class. package org.lxh.demo08.a ; public class ...
- Spring框架:Spring容器具体解释
Spring容器 Spring容器能够帮助你管理所有的Bean对象.专业术语称之为IoC控制反转.在传统的程序中.对象的生成都是由开发人员完毕的.而在控制反转中,对象的生成所有都交给框架完毕.这种优点 ...
- ViewPager的用法
ViewPager 1.布局文件中的配置 ViewPager的路径 方法:在源码文件中输入ViewPager,按下alt+/,上面就会出来viewPager的包路径 viewPager的配置很简单,前 ...