已经有一个月没有更博文了,不是忘了,而是这一个月实在是忙的没有时间,也没有心情来花上这一个小时。今天,只是个普通的周五,忙完了一周的工作,半夜里突然想写点什么。

  研一开学前,我就一直在思考,研究生生活应该怎样度过才算有意义?专研实验室项目?找个喜欢的实习?或是潜心科研?作为一个对技术满怀热情的工科男,我一直对互联网技术有很大的兴趣,在本科阶段学习计算机专业基础之余,还自学了一些热门技术,比如:HTML5、CSS3、Java、Scala、Node.js等。

  在本科毕设阶段,我做的是与大数据相关的《用Spark并行框架实现基于微博用户数据的Pagerank算法》,当时接触了Scala这门函数式编程语言,因为Scala封装了所有的Java类库,使用起来也十分便捷。由于本科接触了一段时间的Java,本以为以后会将方向定在大数据与云计算上。但是,由于考研成绩不佳,没能如愿地进入到做毕设的实验室,而是调剂到了网研院另一个中心。由于当年报考我校竞争激烈,就没想太多,有学上就已经很幸福了!

  开学后,了解到按照往年惯例,实验室研一不进项目组,主要学习专业课程,不允许出去实习,于是就想干一些项目来充实一下生活。在同学的引荐下,我加入到了一个年轻的创业团队中,大家都是北邮的学生,怀揣着对梦想的追求,一切都是那么充满希望。印象最深刻的是,CEO同学生动而满怀热情地介绍了我们要做一件多么牛逼的事,我的第一感觉是想法很独特,针对性很强,虽然是我不曾涉及的领域,但顿时就热血沸腾了,决定好好干一番!

  当时的近期目标是,在现在的开发基础上,一个月后上线我们的一个APP,感觉好神奇。而自从我们的CTO放下豪言“一个月没什么问题”之后,我已经意识到我要认识一个大牛了,好开心!我们团队一共五个开发,CTO从英国读研回国先工作,又开始创业,有过很多项目经验,是带头航空母舰。而我们四个虽然专业基础不错,但项目经验还很缺乏,是紧随其后的小船。

  CTO在了解了大家的特长与项目经历之后,对我们进行了大概2周的培训。可万万没有想到,今年实验室提前进项目组,再加上我选的一门编程实验课,导致三个项目同时压在我头上!那时的生活变得格外苦逼,上午去实验室写python(学长是pythoner,没办法得统一语言),下午抽点时间写C(老师说计算机基础和最底层的实现很重要),晚上去公司写JS。。。我只想说,苯宝宝脑子要炸了!

  回到正题,我们要开发一个移动端APP,我们确定了初步的项目框架”Angular.js+Node.js+Phonegap"。由于大家都没有原生应用(安卓、IOS)开发经验,开发周期又很短,所以我们决定用Web的开发方式(HTML、CSS、Javascript),再用Phonegap打包到安卓和IOS上来开发移动端APP。

  下面,我简要介绍下这套非原生开发框架:

  Angular.js:是继Jquery之后又一热门的前端框架,在我的上几篇博文中有对它的简要介绍。

  Node.js:是我大三下开始接触的敏捷开发平台,可以理解为用Javascript来做服务器端开发,听起来很极端,但它具有基于Google V8引擎的单线程、异步多并发、非阻塞、适用于IO密集型等优点。目前,很多创业公司都对Node.js情有独钟,甚至阿里这样的大公司,也进行了大量的Node框架迁移(除了核心的Java平台,因为实在太稳定),它们看中的便是Node适用于IO密集型场景(比如:支付宝)给他们带来的超额利润。

  Phonegap:能让基于Web的开发方式(HTML、CSS、Javascript)创建跨平台应用的快速开发平台,较著名的还有Worklight、appMobi、WeX5等,传说性能接近Native App;

  在开发过程中,我一开始主要负责:后台管理系统中用户管理、动态管理、画室管理三个模块的前后端搭建,前端是Angular,后台是Node.js,数据库是Mongodb。由于Angular以前没用过,所以花了一周学习,它的很多特性都是很优秀的模式,比如:自动双向数据绑定、依赖注入、MVC、模块化等,唯一的遗憾是我们的项目对指令的使用很少,使得代码的可重用性不太高。

  后来,当我们的App做的初具雏形时,投资人开始质疑我们的开发模式,抱怨App太卡。。。由于Angular的路由机制,导致了页面加载的灵活性不太高,也没有Webview的概念,CTO也很无奈,眼看马上就要月底了,为了保证性能,在最紧要的关头决定放弃Angular,选择React.js,一个性能可能会更好的框架,而它的最大的特点就是组件化。

  我们四个当时的感觉就是“我靠,这是在搞笑吗!”这意味着整个前端都得干掉,不过也没办法,谁叫CTO永远都是那么牛逼而自信,我们又硬着头皮按照一套新的前端框架”dcloud+react“重新开发!在接下来开发中,我主要负责后台API的编写,数据库的设计等,所以一直没有机会更深地接触我向往已久的react,以及在dcloud下玩玩原生API,也许这就是”前端想写后台,后台想写前端“定理吧。

  下面,我就简单讲讲在服务器端开发过程中遇到的一些坑,做一个经验总结:

  (1)数据库设计

    由于”Node.js+Monodb“已深入人心,Nosql数据库具有查询效率高,表结构易于扩展,适用于大数据量存储等优势,我们选择了Mongodb。

    总结:

    a.每个Collection尽量包含一个完整的数据模型,不要用字段去依赖另一张没有必要的表。比如:我们定义一个用户表,每个用户有自己的画作Work,我们只需定义一个Collection,将画作信息用一个类似JSON对象的形式保存在User的一个work字段里。这样做的好处是:表间populate操作会更慢,而尽量减少读取数据的开销,对于高访问量的APP来说是很重要的性能优化方式,用户的行为读是一定大于写的。

    b.索引的重要性:通过建立单索引、多索引,能够大大提高查询效率,这也是项目接下来需要优化的部分。

    

  (2)后台API编写

    a.对于每个API的传入参数与返回值,一定要和你项目的前端尽早达成一致!(如果不能随时当面交流,可以通过Coding、Email等的文档形式进行接口统一)

    b.后台开发需要对前端有一定的理解,比如:本地缓存机制、动态页面上下拉动与获取动态API间的逻辑是怎样的。

    c.后台开发需要对浏览器、Web请求与响应原理、Web缓存机制、服务器部署方案等有深刻的理解。比如:cookie原理,GET/POST请求的区别,图片、视频等占用大存储空间的资源应该存储在哪里,本地资源缓存有什么作用等。

    d.访问权限和安全问题:哪些API需要session验证,必须带上保存有用户唯一认证的session,而不是一个简单的_id;Sql注入是什么,如何控制等?

    e.Javascript异步的问题:Javascript两个核心概念便是异步和闭包,学会使用Q这个库(Q.promise、Q.defer)能帮助你很好地处理异步问题,后面有机会再分享这里面遇到的坑。

  (3)测试

    学会使用一些工具,如:用grunt去做自动化单元测试、JS压缩、编译等,而不是一直手动F5,用postman去测试每一个API,而不是直接给前端用。

   (4) 项目部署方案

    知道整个项目是如何部署的,前端和服务器端如何交互,数据库与服务器是如何交互的,阿里云等云存储平台与服务器是如何交互的,数据都存在哪的(OSS或数据库)。只有明白了这些的后台开发,才能满足项目扩展的需求,不断进行技术的迭代更新。

   由于个人水平有限,发表的都是自己实际项目开发中遇到的问题和经验,肯定会有不足和纰漏,希望高手指正,和我交流啦!

  

  

  

  

  

  

  

  

  

转载于:https://www.cnblogs.com/tangzhirong/p/tzr.html

一些总结与思考(聊聊最近,希望对大家有所帮助)相关推荐

  1. 图形学思考 - 聊聊透视图投射矩阵perspective projective matrix

    from:版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者允许不得转载. 什么是透视图投射矩阵perspective projective ...

  2. python多线程队列处理_Python线程和队列使用的一点思考

    Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...

  3. 从IT的角度思考BIM(二):模式与框架

    我们满怀着美好期许,鼓起勇气敲响了 BIM 世界的大门.忽然人群中有人高呼:BIM 已死,大家都散了吧! 这时人群开始骚动起来."我早就说这玩意是忽悠人的吧,你们不信还偏要来",& ...

  4. 从IT的角度思考BIM(三):敏捷开发

    人们看到了远处BIM的美丽胜景和阻挡在眼前的宽广河流.有些人自信满满地跳入河中打算孤身游过彼岸,可是却失败了.有些人匆匆忙忙地造了船胡乱地滑向彼岸,可是也失败了. 要如何继续这段探索之旅? 无论是&l ...

  5. 围绕开源的系列思考之二——企业篇

    点击上方"开源社"关注我们 本文为系列文章,分为个人.企业和国家三篇. 现附上第一篇<围绕开源的系列思考--个人篇>,与众位读者分享. (Author: TeroVes ...

  6. 本科+研究生七年之痒,我的经历希望能给你启发和坚持

    总结本应该在功成名就以后才来书写,但是我相信我的未来不是梦,我相信未来一定有一片属于我的天空.(纯属记录一下学生时代的经历,多年后在回顾,会不会感谢这7年的自己呢?值得期待) 本科阶段 认清篇 201 ...

  7. 聊聊编程语言学习之路

    这篇文章是自己编程语言学习之路的总结(还在进行中),因为也踩过不少"坑",希望能对后面的一些初学编程语言的朋友或者希望学习其他编程语言的朋友有一些帮助,避过一些不必要的坑. 9月1 ...

  8. 最近的读书计划-思考中医

    突然很想学中医,今天从"当当网"中买了一本"思考中医",希望对我学习中医有帮助, 我觉得我应学点医学知识.怎么也想不明白为什么考大学时不考医校.呵呵

  9. 一道大厂Python面试题,4种解法,从青铜到王者引发的“思考”!

    "菜鸟学Python",第"518"篇原创 金九银十应该是校招的黄金时间,大家都知道去大厂面试,算法是一个必须要过的关,无论是笔试还是面试的环节都需要.而算法这 ...

  10. 计算机工作两年,决定考研的思考过程

    pixabay.com 上次写的文章2019计算机考研的经验和教训[1]收到了一些读者的反馈,部分读者受到鼓舞,坚定了考研的信念.本文记录自己做这个决定的思考过程,希望给纠结考研的人一些参考. 思考过 ...

最新文章

  1. Vue.js组件学习
  2. 【ssi】增删改查六操作小框架(八)
  3. 突发!Spring 也沦陷了。。。
  4. 计算机组成原理实验存储器部件实验,计算机组成原理实验_存储器部件教学实验...
  5. 让textbox紧贴IME
  6. Python学习小结---函数
  7. 如果创建表提示数据库已经存在该对象,那该怎么办
  8. Win10卸载edge浏览器与后悔重装
  9. UCHOMe重要函数
  10. Vijos 3764 牛奶题
  11. 计算机平面设计是计算机类吗,计算机平面设计是什么?平面设计就业前景怎么样?...
  12. 测试质量报告-为了更好的下一个
  13. 游戏音效中竟然有3D音效,这是什么鬼?
  14. error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR...
  15. keras UserWarning: Discrepancy between trainable weights and collected trainable weigh...
  16. 古时候有个【百僧问题】,一百馒头一百僧,大僧三个更无争,小僧三人分一个,大小和尚各几丁? *...
  17. kotlin发音!这份字节跳动历年校招Android面试真题解析,附架构师必备技术详解
  18. 计算机系统之定量分析
  19. pythonmacd指标编写_利用python编写macd、kdj、rsi、ma等指标 -
  20. Johnson 全源最短路径算法

热门文章

  1. html+css3实现炫酷动画吃豆豆
  2. linux下FTP服务启动与关闭命令(转)
  3. 使用vs2008c++语言开发activex控件教程,使用VS2008C 开发ActiveX控件.pdf
  4. leafletjs 热力图_LeaFlet学习之热力图
  5. 定制开发已经落幕,新的平台强势崛起
  6. 【附源码】计算机毕业设计SSM社区留守儿童帮扶系统
  7. java常量能改变值吗_java中的常量和变量
  8. 【暴寒】爆笑植物大战僵尸四格漫画
  9. 2021年项城一高理科高考成绩查询,项城一高举行2021年高考壮行大会
  10. 米联客FDMA_V3详细解读,单摄像头图像传输模板