首先我本人是物理专业出身,并不是科班出身,所以对于计算机方面知识理解的深度和广度还是比不上许多西电的大佬们,所以在这里如果有讲的不到位的地方,希望大家能够谅解,有讲解错误的地方,欢迎大家指正。考虑到这次活动的内容的受众有很多初学者或者在php方面的有很多造诣的同学,以及时间的限制,所以本次的活动议题由且入深的进行,对于技术的细节不过多探讨,但是我会提供一些资料供大家参考。
下面是本次活动的议题:
1>互联网团队的成员组成以及分工和合作。
2>如何开始学习php的知识,以及怎么去加深php的功力。
3>高性能的选择,使用nginx代替apache。
4>使用redis,memacache等nosql去提高网站的并发能力。
以及beanstalked消息队列的介绍。
5>分布式技术的介绍,什么是map reduce,以及一些流行的大数据框架如hadoop的资料的分享。
尾声:后端开发者的职业发展方向,以及对于互联网下半场人工智能技术的一些展望。
1 互联网团队的基本人员配置
PM组=产品需求输出+项目进度把控+半个交互设计
UED组=UI设计+交互设计+平面设计
RD组=客户端开发(安卓、iOS)前端+服务端开发server+WEB前端开发fe+运维op组
QA组=所有项目的质量把控+部分运维工作
这一段是一个比较完备的团队应该有的一个体系,很多小公司产经都是由ceo做了,有些公司甚至前端和server端都是一个人,这些公司往往缺乏专业的运维以及测试人员,所以代码的质量,代码的安全性,以及服务的稳定性都无法得到保证。之所以先去讲一个完善的团队规划,是因为很多学生团队,也缺乏这些基本的人员配置,以及合理的开发流程。这也是导致了很多东西做出来只是花拳秀腿的原因。
这篇文章讲了一个大致的人员分布
http://wenku.baidu.com/link?url=pLjfQoY8zszXtwA7dwXXifDwTd8NtmLekpywFBg_kY3lNaONzPX9Zzs2Ww8dJdqJaL-Cz3iucczdYhiM7Dhah-ScaRSClE21F6m5wdzAmGy
这是一个讲测试工程师的一些方面的知乎上的回答,因为很多同学对于测试工程师的工作不是特别的了解,所以给大家分享出来。
https://www.zhihu.com/question/19666055
这里如果有同学想讨论一下的话,我们可以讨论一下。如果希望继续往下讲的话,我们开始下一个议题,如何开始学习php。
<2>如何开始学习php的知识
首先是搭建php的环境。对于初学者来说使用xampp是个不错的选择,事实上就算在百度,腾讯这些大公司也会推荐在本机上搭建php测试环境的时候使用xampp。因为安装非常简单,而且删除后也很干净。之前在本地单独安装mysql时,删除后还经常碰到端口占用的问题。
这是一个xampp的下载源,是php 5.6版本的。下载速度还是挺快的。
http://rj.baidu.com/soft/detail/12489.html?ald
这是xampp的官方网站,最新的xampp的版本可以在下面这个网站里可以下载到,已经可以支持php 7.0了。
http://www.xampps.com/
这里是xampp的安装以及使用方法。
http://jingyan.baidu.com/article/48a42057bda4d0a9242504b8.html
当然在学习php之前一定的前端知识还是需要具备的。
推荐一个在线学习前端的网站
http://www.w3school.com.cn/
基本的html,css,javascript包括jquery作为php开发者来说还是需要掌握的。
下面推荐两个学习php的开发网站。
http://www.php.net/
这个是php的官方网站,php语言的特性,以及最新的一些特点都可以在这个网站里获得。
下面介绍的网站是鸟哥的博客,作为php7的核心开发者来说,鸟哥可以算的上是大陆上最权威的php开发人员。百度的ap框架以及yaf框架的开发者,现在是链家网的技术总监。
http://www.laruence.com/
像使用c语言开发php的拓展,以及php的多进程的介绍鸟哥写的还是很详细的。
http://www.laruence.com/2009/04/28/719.html
http://www.laruence.com/2009/06/11/930.html
然后我对于php开发进行一个简单的分类。
第一种叫做cli模式:也就是命令行下的模式。使用php来编写一些脚本。执行的时候在php环境下直接使用 php test.php类似于这样的方式来执行。当然前提是你的php的环境变量设置正确,或者是使用alias命令来调用bin目录下的php可执行文件的时候,php的cli模式可以正常使用。一般php的脚本的主要用途是开发爬虫,以及对于数据的处理和采集。这里我介绍一个php处理网页的类库,phpquery。
https://github.com/punkave/phpQuery 可以在全球最大的同性交友平台下载。开个玩笑。
phpQuery的最大特色就是使用类似于Jquery的方式来处理网页数据,所以php程序员懂一些Jquery的知识还是蛮有用的。然后再介绍一款在phpQuery上开发的网页解析工具https://querylist.cc/。
这一款工具非常强大,可以设置session来模拟登陆,甚至可以调用多个进程来加快采集速度。下面的是querylist的官方文档。
https://doc.querylist.cc/
然后php跑脚本的时候有个棘手的问题是内存泄漏,脚本经常跑一段时间就会中断。这里我提出一些解决方案。
1>提高你的php版本。php5.2及其以下的版本内存泄漏是非常严重的,同时php5.2到php5.3 差别很大。所以使用高版本的php还是很有必要的,最好升级到php7。
2>手动释放掉已经使用过的变量。例如unset()函数。
3>增大脚本允许的内存。可以在php.ini文件中设置,也可以通过ini_set(‘memory_limit’, ‘250M’);这个函数来设置脚本的内存。
4>使用父进程去启动及监控子进程的情况,在子进程快要耗尽内存时,将结果返回给父进程,父进程再去启动子进程。
可以看看这篇文章
http://www.jb51.net/article/71232.htm
当然也推荐使用一些进程监控工具,如supervisor
http://www.phpddt.com/php/supervisor.html
第二种php开发也就是我们平时看到的网站。这种模式可以称为cgi模式。
这里就可以介绍一些常用的系统及框架了。
我们使用php经常去搭建一些博客系统,或者是论坛,或者是erp的管理系统。博客系统最出名的当属wordpress。
https://cn.wordpress.org/
论坛呢有著名的discuz。
http://www.discuz.net/forum.php
我们的睿思也是利用discuz进行二次开发搭建而成的。
还有在线商城系统ecshop http://yunqi.shopex.cn/products/ecshop?from=baiduecshop
至于erp的管理系统,包括各式各样的cms,以及很多的模板,这些百度上到处都是了。
thinkphp就是由于拥有出色的权限管理的方法rbac,受到国内很多网站的喜爱。http://www.thinkphp.cn/
但是thinkphp有很严重的安全问题。龚潇大佬(前西电信息安全协会的会长,前乌云核心白帽子)就挖了不少thinkphp的漏洞。
https://www.leavesongs.com/PENETRATION/thinkphp-callback-backdoor.html
所以越是开源的东西,越需要注意系统的安全性,因为你在一个完全白盒的情况下接受测试,很容易出现问题。所以喜爱做黑客的同学,并想增加一下代码审计的功力,学习一下php,看一看各种网站各种框架的源码还是很有好处的。
对于其余的框架的大致介绍我在微信宣传的文章中也讲到了不少,这一次分享不再具体探讨各种框架的细节了,然后在后面的讲解中会提到部分框架。
我想讲一下php如何去提高。
首先推荐一本书叫做(php与mysql程序设计)。
http://download.csdn.net/detail/wodedahua/7379003
这是这本书的下载地址。熟读这本书,可以对于php的基础知识,以及一些php操作mysql的方法,和mysql的一些基础知识,基本的增删改查,mysql的事务管理,此书中都有提及。
然后建议去学习一下smarty。
http://www.smarty.net/
这是smarty的官方网站。smarty作为php模板技术的鼻祖,今天仍旧有很多公司去使用。甚至是百度的fisp,360都会去使用smarty作为模板输出。包括各种框架的模板输出都参考了smarty的方式,所以学习一下smarty还是很有必要的。
对于程序猿来说,算法功底也是很重要的,牛客网上有大量的练习题,算法这里我再就不多说了,多做多练就好。
着重推荐一本叫做<<深入php,面向对象,模式与实践的书>>是前雅虎公司php专家的力作,读一读是很有帮助的。下载地址http://www.jb51.net/books/380336.html
本书介绍了php的反射机制,以及php的设计模式的实现。
包括组合优于继承的思想,工厂方法,单例模式,装饰模式,观察者模式等等设计模式。这本书看了以后,我觉的当面试官问你什么是面向对象,你对面向对象有什么看法的时候,你可以侃侃而谈。另外,读了这本书,再去读各种框架的源代码,你就不会再感到吃力了,像ci大量利用了单例模式,所有的类都继承了一个超级类。
虽然大家都知道mvc模式,了解mvp模式的又有多少呢?
http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html
看了这篇文章,细细想来,很多php框架更多的是mvp,虽然当作presenter的类也常常叫做controller,但是由controller向view传输数据的时候往往是单向的,所以叫做mvp更加合适一点。我觉的能讲出mvp与mvc区别的同学,面试官对你的印象可能会更好一些。
作为世界上最好的语言,php其实是有很多的不足之处的。比起java,php没有完善的线程机制,只能进行系统调用开启进程。同时php做长连接也不是特别合适,这里推荐一篇php socket编程的文章。http://blog.csdn.net/gggxin/article/details/8839630
由于php线程方面的缺失,所以php语言没有像 java中synchronized关键字进行锁的操作。php一般在并发的情况下,设置锁的时候通常都会使用文件锁来代替。http://blog.csdn.net/topasstem8/article/details/6735240。
给大家一个思考题,如何快捷的切换语言。比如你这个网站可以变成全中文的,也可以变成全英文的,甚至是德文的,你会怎么处理?
3>高性能的解决方案:使用nginx代替apache。
到了这一步了,很多人想试着自己开始搭建网站了。对于学生党来说,没有什么闲钱选择一款便宜的服务器还是很有必要的。
https://www.qcloud.com/act/campus?utm_source=pcsem1&utm_medium=bdgj2247&utm_campaign=baidu
然后最好选择centos系统。虽然xampp也有linux版本的,但是作为服务还是推荐nginx。
http://nginx.org/
nginx官网。
这篇文章讲述了nginx为什么比apache效率要高的原因。
http://www.chinaz.com/program/2015/0424/401376.shtml
找了一篇php和nginx配置的文章
http://blog.csdn.net/liigo/article/details/48392701
这是我写的一篇介绍php fqm与nginx的文章。里面的原理大家可以读一读。
http://blog.csdn.net/wanqianbudai/article/details/53198326
我的基友在第四范式,这里有他讲的nginx的视频。
http://pan.baidu.com/share/link?shareid=560420485&uk=807779643
另外《实战Nginx:取代Apache的高性能Web服务器》这本书也推荐大家去读一下。
http://vdisk.weibo.com/s/zl-byfIanq0pU
这是书的下载地址。
最后推荐一个除了github之外的php开源代码的下载地址
https://packagist.org/packages/symfony/console
包括符合现代开发思想的php框架,支持cli模式还可以做到mvc的php代码都可以在这个网站里找到。
4>首先说一下什么叫做nosql。NoSQL,泛指非关系型的数据库。not only sql。
键值(Key-Value)存储数据库 出名的有redis,Memcached 等等。
nosql并不是说比关系型数据库更加强大,只是在查询和插入上速度更快,适合海量数据,非常适合用于网站的缓冲。还有beanstalked—–facebook研发的消息队列系统,http://blog.csdn.net/black_ox/article/details/24792489
利用这些都可以提高网站的并发能力。对于如何提高网站的能力,以及大型网站的架构设计,推荐大家去读一本书。<<大型网站技术架构:核心原理与案例分析>>作者是前淘宝架构师,李智慧。这本书介绍了大型网站的架构技术,这也是为什么我着重去推荐大家去细致学习nginx的原因,因为利用nginx的反向代理及其他特性都可以带来网站性能上的提升,本书中也介绍了这样的技术。
对于关系型数据库,大家可能最常见的就是mysql了。这里我也给大家推荐一本mysql的深入学习的书。《高性能mysql》也是阿里的著名dba所写的。下载地址http://www.linuxidc.com/Linux/2014-10/108464.htm
诚然,mysql是互联网中最常用的开源关系型数据库,但是还有一个叫做postgresql的关系型数据库异军突起,比起mysql支持更多的特性,同时在数据量暴增时,性能仍够保持线性变化。起源为加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL。相信未来postgresql能够占据更多的市场份额。http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql.html
这是postgresql的使用教程,提供给大家阅读。
5>第五部分的讲解就是分布式及大数据的应用了。虽然学校里也有这样的课程,但是这些在学校里你可能并不能很好的掌握,理由很简单,你没有足够的数据,也没有足够的机器,最多折腾一下虚拟主机来模拟一下。然后呢,其实对于很多小公司也没有这样的必要去部署大数据的环境,道理也很简单,数据量不够大。许多小公司的nginx,mysql,等等各种部件往往只部署到一个服务器中,而一个只存储静态网页的服务器就能够支撑数万的访问量,所以初期的phper往往接触不到这些内容。但是当公司发展到一定级别,或者是你的网站提供的服务更加复杂时,分布式技术的应用就不得不去考虑了。
首先介绍一下什么是 map reduce。map 映射 reduce 归约是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。下面两个链接可以帮助我们更好的去理解map reduce
http://blog.csdn.net/lifuxiangcaohui/article/details/22675437
http://baike.baidu.com/link?url=3p82fzICeiD6JTDck9stlIKCRYcAoBIQvJSOAS_FOPOlyOXybFk6yog0MLd6Vqyb1mi_-328xsfforPALbZFY_
因为并发编程的复杂性,google的大牛提出了这样的想法,在此基础上衍生了大名鼎鼎的hadoop框架。
下面这个链接就是讲解hadoop的书籍。
http://vdisk.weibo.com/s/dwMnH489YASj0
这篇文章则讲解了如何使用php去调用hadoop
http://blog.csdn.net/hguisu/article/details/7263746
我觉的,当你学习完上述的所有的知识,再配合上足够的linux 运维的经验,你已经算的上是一个php高级工程师了。诚然,很多知识的细节我也没有完全掌握,但是我希望把这些东西都分享出来,然后给大家指明一个职业发展的方向。
最后的议题就是互联网的下半场,也就是我们即将面临的时代。
我认为的互联网的上半场的主要做的事情就是占领服务领域,吸引流量。这时候的创新就类似于我们去做一个前人从来没有做过的事情,像社交软件的出现,邮箱,搜索,游戏,安全,以及后期的团购,外卖,打车。互联网上半场的主要核心就是一个,发现前人没有发现的领域以及服务,去建立对应的生态。而到了下半场,我们已经很难再去想到别人没有想到过的领域,很有可能,你所有的点子,其他人都有想到过,甚至已经去做了。那么,互联网的下半场的核心是什么呢,就是数据。
这里有一个链家网的案例。https://www.zhihu.com/question/54648229
链家通过数据对用户进行画像,最后动摇到传统的房地产商的地位,这个案例不能说是不漂亮。
同时在安全行业里也兴起了一个概念叫做态势感知。是指在大规模系统环境中,对能够引起系统状态发生变化的安全要素进行获取、理解、显示以及预测未来的发展趋势。
http://www.hnqs.net/media/15632.htm
这篇文章里的一段话,摘出来供大家参考。我们认为互联网公司最重要的资产就是数据。未来所有的产品改进,都应该是通过数据化驱动,而非功能驱动。如果一家公司的竞争力还依旧停留在硬件、软件的功能上,那么这是上一个时代的公司,没有什么前途。以现在的计算机编码发展水平,只要你能想得到,没有什么功能是写不出来的,缺的只是时间和投入而已。面向未来的公司一定是数据驱动的,只有数据驱动才能像滚雪球一样将竞争力做厚,才能在最短的时间内完成高效的规模化,建立起更高的门槛和壁垒。
人工智能技术的兴起,以及各种层出不穷的数据挖掘的手段,也慢慢证明了数据本身也成为了下一个金矿。北京也出现了像第四范式这样的专业的数据处理的公司。这里我再推荐一些机器学习的资料,作为本次讲解的结束,希望大家能够一步一步学习,最终成为各大公司的顶梁柱,时代的弄潮儿,谢谢大家!