如有侵权,请告知作者删除。scottzg@126.com
很荣幸参加QCon全球软件开发大会,这里特别感谢我们部门的总经理,也是《互联网广告算法和系统实践》此书的作者王勇睿。因为他我才有这次参会机会参加这次软件开发大会。
接下来,我将从以下几点来撰写这篇文章:
- 什么是QCon?
- 我参加的专题演讲有哪些?
- 我在QCon大会上学习到了什么?
1.什么是QCon?
QCon是由InfoQ主办的全球*技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、上海、旧金山召开。自2017年3月份首次举办以来,已有超过万名高级技术人员参加过QCon大会。QCon内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上工作经验的技术团队负责人、架构师、工程总监、高级开发人员分享技术创新和最佳实践。
北京QCon2017是在国家会议中心举办,时间为:2017年4月16日—18日。
2.我参加的专题研究有哪些?
由于时间原因,我是最后一天去的QCon。早上8:30起床,然后坐地铁到了国家会议中心。然后开始了参会学习。以下是参会内容:
Part 1.《Software Performance Analytics: Past,Present and Future》
演讲人是Kingsum,来自阿里,是阿里巴巴基建服务首席专家。主要介绍的是软件性能分析:过去,现在和未来。
可能是自己英文差的原因,他演讲的过程中经常出现各种英文,所以有的时候没有听太懂。(学习英文很重要)
他介绍了一个好的程序,但是有一下几点会影响或者制约其功能:
- Software doesn’t scale
- Hardware is too slow
- Tuning software doesn’t work
- Tuning software in the data center is difficult
这个Part就这么多了,讲的太高深,表示没有听懂。
Part 2.《代码未写,漏洞已出–谈谈设计不当导致的安全问题》
演讲人是于旸(TK老师),他是腾讯玄武实验室总监。主要介绍了:
- 设计不当导致的漏洞。
设计分为单点设计和多点耦合。举个例子来说,单点设计就是只设计一个功能,多点耦合就是多个功能组合在一起去实现某个新的功能。也许一个功能的设计是没问题的,也不会出现错误,但是如果多个没有问题的功能组合成一个新的功能,由于耦合也许就会出现漏洞。
就拿类似购物类的系统,支付系统和交易系统本身他们是没有任何漏洞可言的。但是当我们将他们组合使用的时候就容易产生问题。比如我们在交易的时候手动将交易金额改写,100元改成1元,支付系统不会校验钱数,只会告诉用户是否支付成功,所以当交易的时候,交易系统收到了支付系统返回的成功就会提示用户购买商品成功。这样的话你就用1元买了100元的商品。比较靠谱的办法就是在支付系统成功之后返回给交易系统成功再加上支付金额。这样就能避免这个漏洞了。 - 实现不当导致的漏洞。
举个例子,对比两个字符串相等的方法,在对比对应位的字符是否相等时,我们也许这样来判断:1234567891011public bool isEqual(String s1,String s2) {if (s1.length != s2.length) {return false;}for(int i=0;i<s1.length;i++) {if (s1[i] != s2[i]) {return false;}}return true;}
这里在对比s1[i]与s2[i]不相等的时候(类代码,也许不能运行),攻击者可能会在for循环做事情,比如黑客通过某种攻击让代码返回true,那么就算是两个不相等的字符串也会返回true,但是这里面有一点我们会忽略,那就是时间维度。一般来说,如果对比两个字符串最慢只需要1s,但是被黑客攻击的代码由于需要进行破解攻击,所以消耗的时间也会长一点,所以如果我们的代码在实现的过程中考虑到时间,那么代码就会更健壮,不容易攻破。
TK老师也说明了这一点:时间是很容易被忽略的维度。
- 使用不当导致的漏洞。
这里TK老师还介绍了他们用扫描器做实验,扫描的的初衷就是让支付和读取数据方便,但是它有的时候可以做为一个外接键盘。将控制电脑的指令装载在二维码或者条形码里面,然后通过扫码器就能够控制电脑。甚至也可以利用激光灯,通过激光灯远程照射让扫描器识别,进而控制电脑。
另外还有运营商的“短信保管箱”、”自助换卡”等功能,由于涉及不当也在推出一段之间之后被取消。这里的短信保管箱就是运营商将短信同步到云里面,然后就算用户手机不再身边也可以通过登录云查看短信。但是业界公认手机验证码作为安全验证,如果用户的短信存储云密码被盗,那么用户的短信安全验证也就失去了作用。
期间还说了一些漏洞问题,比如badbarcode问题、badtunnel问题等等。
一句话总结:是故圣人不治已病治未病,不治已乱治未乱。
Part3.《软件开发之禅》
演讲人是蔡超,Amzaon(中国)技术团队的首席架构师。主要介绍了以下几点:
- 形似与神似
这里主要讲了MVC。其实还有很多其他的架构:MVVM、MVP等等,其实他们的本质都是MVC的衍生。我们要在使用的过程中发现其本质的东西,也要发现其差异。 - 教条与变通
这里我听到最多的是黑板模式,所谓黑板模式,就是应用中的多种不同数据处理逻辑相互影响和协同完成数据分析处理,就好像多位不同的专家在同一黑板上交流思想,每个转件都可以获得别的专家写在黑板上的信息,同时也可以用自己的分析去更新黑板上的信息,从而影响其他专家。比较典型的使用就是数据库:数据库充当黑板,不同的应用共享数据库中的信息,并且可以更新数据信息。是最常见的实现方式。 - 优势与劣势
一个新的技术出现之后,它可能会给大家带来方便,进而去解决那些现在已知技术无法解决的问题。但是我们一定要明白:使用新技术的同时一定要考虑到新技术所带来的问题。只有将其研究之后,然后将其所带来的其他问题解决,这样才可以尝试去使用,以免在以后的过程中遇到问题再去想解决方法。要平衡使用中的矛盾。 - 数据与模型
- 简单与容易
我们遇到问题的时候,想到的不是用如何牛逼的方法去解决,而是从问题的本身去开始研究,从最简单的技术开始,一定要找到最简单、最有效、最实用的方法去解决。
在我们学习或者读书的时候,我们应该在学习的时候先问一下自己:我学的东西要解决的问题是什么? 当我们学习完之后,要想想学过之后是否解决了我们遇到的问题。
总之这场分享听下来之后,给我的感觉就是一定要发现事物的本质,用最简单、最有效、最实用的方法去解决问题,而不是多绕弯路。
Part4.《基于移动的快速工程模式》
演讲人是徐大芮(子之),淘宝无线技术专家。内容主要是如何基于移动,应用去做快速开发。
主要是为了应对手淘的快速开发,比如马老板说淘宝首页来个发红包,那么就需要及时迅速的去完成这个需求。而他们开发团队仅仅用了几个小时就将此需求上线。
在应对业务发展快、流量集中、交互复杂的情况下(过山车),如何快速开发完成并成功上线是一个很值得研究的问题。
所以他们就通过模板配置、插件组装的方式来让研发提速。比如说淘宝的一个页面:
他们做了一套模板,然后去承载这个页面,然后通过配置数据,从而完成了快速开发迭代。在开发的过程中如果可以使用现有模板,那么久直接装载即可。在开发过程中,模板会有不同的版本,有自己的独立版本控制,而业务实例每个版本都有独立关联的一个模板ID和版本。
然后还开发了各种组件,榜单、投票、评论等等,通过数据配置就能完成快速开发。
另外还有淘宝不定期推出的活动动画,淘宝这边使用AE做成动画,然后用JSON承载,然后通过移动端的ViewController上面的一层Layer或者Player来展示,期间允许对JSON进行二次定制开发。
这里还有一个很有趣的事情,有位观众提了一个问题:苹果不允许JSBridge,那马如何实现不发版的情况下实现更新呢?演讲人的回答是不知道。但是他说不太确定苹果是不允许拉文件更新,还是允许类似RN方式的开发。如果只是不允许拉文件的话,那么可以考虑使用RN的方式来搞。
Part5.《3x3:提速移动App交付》
演讲人是来自LinkedIn的软件开发工程师胡克秋。主要介绍了如何快速发版。
介绍了LinkedIn发版,说是一周发一次,我看了一下领英iOS更新记录,没有那么频繁,也许是能够支持一周发一次吧。
他们移动开发是专门的一个移动平台组,里面没有任何的产品、UI什么的。当其他有需求的时候,就会把人派到指定的部门开发。从当初的30个移动工程师到现在的超过300个移动工程师,从原来的的超过一个月交付一次App到现在的3x3快速开发。
所谓3x3快速开发,就是:
一天发布3次。
代码提交到发布<3个小时
后来经了解他们的1天发布三次其实是每天发布3个可用的版本,这些版本能够随时拿过来使用。
他们的iOS客户端完全采用Swift开发。因此在经历Swift2.2—Swift3.0升级的过程中,8个人在开发项目室从上午9:00到晚上10:00做升级。总共用了一个礼拜的时间才将Swift2.2升级到了Swift3.0。
关于代码提交,他们只有一个分支,然后在开发过程中,他们有个小要求:就是在有限制的时间内做代码提交,如果超过了这个deadline,那么久不能提交代码。这样保证了代码在某个时间点的稳定性。
关于测试,他们还有个DogFood,也就是所有公司员工必须去使用他们的最新版本,然后他们会收集Crash信息,然后进行修复。
还顺便介绍了几个开源的框架:
- LayoutTest-iOS
-
bluepill
有兴趣的同学可以自行下载查看。
还有一点:他们的iOS开发做UITest和UnitTest,关于测试,他们做的很足,而且一般QA写测试场景,开发写测试用例。而且他门能够很好控制写测试用例的时间再10%左右。
以上就是我在QCon上参加的专题演讲。
3. 我在QCon大会上学习到了什么?
以下是对我学到的东西进行的一些简单总结:
- 编程不仅仅只是写代码那么简单,还有多考虑其安全性。另外在设计的时候也要提前构思、考虑全面
- 用最有效最实用、最简单的方法去解决问题。
- 新技术的产生有的时候一定要先对其进行学习和多方面的了解。如何应对新技术可能引发的问题?如果解决?
- 人家的iOS开发都是有用UITest和UnitTest。
- 通过模块和组件化的方式做开发,提升开发效率。
- 学习好英语很重要。
- 使用模块化和组件化的方式提高开发效率。(个人觉得仅限于比较大型的项目,小项目就大材小用了)
注:
如有侵权,请告知作者删除。scottzg@126.com