第一篇:PHP工程师技能水平区分
PHP工程师技能水平区分
说句实话,写这个真够无聊的.本来看了某位大虾的类似文章,腹诽了几句也就算了.但是昨天晚上有个客户拿着这篇文章问我: 你丫的自己做
外包,你算几段PHPer?遂感觉那篇文章对某些半通不通之人的误导之深.无法,只有写此文章表明我对PHPer的水平区分的立场.关于具体收入水平,总的来说因为这几年PHP培训班的加多,大量PHP新手开始搞乱市场,所以很难说清.在此贸然写出有误导之嫌.而且收入水平和所在地区有很大的关系,例如重庆的同水平PHPer肯定比北京的工资低.但在重庆省着点花钱反而比北京剩的工资多.不过,PHP的市场确实在逐步混乱,目前因为培训班/大学选修课等原因,初级PHPer大量增加.故初级PHPer的工资市场有步asp呈现白菜价的趋势
.但高级PHPer仍然极为缺乏.但我认为:工资水平和实际技术水平基本成正比,目前业界信息透明,且到目前位置高端PHPer的圈子仍然极小.大家交换信息极为方便.如果PHP水平不高,但拿到高工资的概率不高.即使PHP技术差能拿到高工资也不能长久.以下观点属于我的一家之言,您不赞同可以拍砖,可以给我发信讨论,我的mail是 jstel && 126.com(&&换成 @)Arain收.qq :
155313 7 2 4.目前我职业做网站项目外包,也就是大家所说的自由职业者.欢迎大家有网站/crm等活发包给我.0 : 我对PHPer的定义: PHPer是工作/程序以编写PHP程序为主,其他方面略有涉猎的人.部分由C/C++ 转来的人,虽然也做php程序,但工作重点仍是C/C++.不能说是PHPer或者不能说是纯粹的PHPer.1 : 对PHPer的划分,我对PHPer划分为以下几个阶段.a: PHP 爱好者(半个PHPer)
b: PHP 初学者(PHP Beginner)
c: PHP 初级程序员(Primary PHP Coder)
d: PHP 中级程序员(Junior PHP Coder)
e: PHP 高級程序员(Senior PHP Coder)
f: PHP 工程师(PHP Programmar)
以下是对PHPer划分的具体描述:
X: PHPer的共同特点:
0: 会电脑,能上网.1: 知道w3c标准,2: 会html,会JS,会PHP.会MySQL.3: 知道linux.见过linux运行.不满足以上内容者别说自己是PHPer.以下对不同阶段的描述, 每一个高级阶段都需要掌握低级阶段的技能.他们之间具有继承关系.在初级阶段,由于目前国内的情况.经常需要PHPer兼美工/网管的功能.所以也写了一部分其他技能.a: PHP 爱好者
定义: 以PHP程序为业余爱好,建有或正维护着一个或几个使用PHP技术实现的网站/程序的人是PHP 爱好者.描述: 这些人一般不以PHP为谋生手段,他们的分布以网站站长及在校学生为主.特征: 1: 会用dreamweaver/frontpage等工具制作网页.2: 可以对现成PHP程序进行修改.3: 爱好PHP.技术要求: 无.b: PHP 初学者(PHP Beginner)
定义: 准备以PHP程序谋生,准备建设或正在维护一个或几个使用PHP技术实现的网站/程序的人是PHP 初学者(PHP Beginner).描述: 这些人已经或即将以PHP为主要谋生手段,他们的分布以即将毕业的大学生及刚刚加入PHP 程序员行列的人为主
特征: 1: 能够简单维护/操作/优化linux.2: 能够编写PHP程序.3: 会MySQL.4: 会html/js.5: 能够构建符合W3C标准的页面.6: 能够胜任简单的服务器维护工作.技术要求:
1: 服务器运行系统:
a: linux:
I: 能够安装Linux系统、熟练使用Linux常用命令、知道Vim文本编辑器,会软件包管理.II: 能够实际操作用户管理、进程管理、文件系统管理、权限管理功能
III: 知道并会使用Linux网络配置相关文件、基本配置命令、DHCP、VNC、DNS服务器、Samba服务器.能成功配置并使以下服务平稳运行.SSH、FTP、Apache,站点登录控制、日志管理.IV: 能够使用shell对服务器进行维护.V: 能够进行Linux系统安全配置、Iptables、syslog日志管理
b: windows:
仅为初学者和初级程序员要求.I: 能够安装windows、熟练使用windows、能够对IIS进行优化.II: 能够正确配置防火墙、对服务器进行管理维护.III: 能够抵御普通的网络攻击.2 web页面技术及相关:
其实这不应该算是PHP的技术.但实际工作中,大部分PHP初学者都需要兼前台/后台/网管的角色.故在此提出,仅供参考.I: 熟练掌握HTML, Dreamweaver、常用标签、图象地图、表格、分桢框架、表单,Header处理,CSS, 样式表的分类、样
式则规器使用,常用的样式、层标签,JavaScript
II: 各种事件及事件处理程序的应用、window对象、document对象、location对象、body对象、form对象、form表单字段元素对象
III: ajax及其相关技术.能完成常见ajax页面制作
MySQL技术
I: 熟练掌握SQL语句.II: 熟练掌握MySQL的常用操作.包括安全、访问控制和权限、备份和恢复,复制、导入和导出记录.III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.4 PHP技术
I: 熟练掌握PHP语法,常用函数.II: 熟悉PHP的面向对象编程.并能实际使用面向对象思想进行程序写作.III: 熟悉PHP常用库.c: PHP 初级程序员(Primary PHP Coder)
定义: 正在以PHP程序谋生,正在建设或维护一个或几个使用PHP技术实现的网站/程序的人,PHP经验有限的人是PHP初级程序员.描述: 这些人已经以PHP为主要谋生手段,他们的分布以刚刚加入PHP 程序员行列的人为主,也有部分加入PHP行列若干年的人.特征: 1: 能够维护/操作/优化linux.2: 熟练编写PHP程序.3: 熟练掌握MySQL.4: 会html/js.5: 能够快速构建符合W3C标准的页面.6: 能够胜任大部分服务器维护工作.技术要求:
1: 服务器运行系统:
a: linux:
I: 熟练安装Linux系统、熟练使用Linux常用命令和某些日常使用的命令、掌握软件包管理.II: 能够熟练操作用户管理、进程管理、文件系统管理、权限管理功能
III: 能够熟练使用Linux网络配置相关文件、基本配置命令、DHCP、VNC、DNS服务器、Samba服务器.能快速的配置并使
以下服务平稳运行.SSH、FTP、Apache,站点登录控制、日志管理.IV: 能够对MySQL和Apache进行一定的优化以提升网站性能.V: 能够使用shell对服务器进行维护.熟练使用常用的维护工具.VI: 能够进行Linux系统安全配置、Iptables、syslog日志管理
b: windows:
仅为初学者和初级程序员要求.I: 能够安装windows、熟练使用windows、能够对IIS进行优化.II: 能够正确配置防火墙、对服务器进行管理维护.III: 能够抵御普通的网络攻击.2 web页面技术及相关:
其实这不应该算是PHP的技术.但实际工作中,大部分初级PHP程序员在公司里都需要兼前台/后台/网管的角色.故在此提出,仅供参
考.I: 熟练掌握HTML, Dreamweaver、常用标签、图象地图、表格、分桢框架、表单,Header处理,CSS, 样式表的分类、样
式则规器使用,常用的样式、层标签,JavaScript
II: 各种事件及事件处理程序的应用、window对象、document对象、location对象、body对象、form对象、form表单字段
元素对象
III: ajax及其相关技术.能完成常见ajax页面制作.IV: 会photoshop在内的一种或多种图片编辑软件
MySQL技术
I: 熟练掌握SQL语句.II: 熟练掌握MySQL的操作.包括安全、访问控制和权限、备份和恢复,复制、导入和导出记录.III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.IV: 知道MySQL常见性能瓶颈的原因及解决方法.并能实际解决.4 PHP技术
I: 熟练掌握PHP语法,常用函数.II: 熟悉PHP的面向对象编程.并能实际使用面向对象思想进行程序.III: 熟悉php面向对象的特性.能够根据实际运行环境选择开发方法.IV: 熟悉PHP常用库.能够使用常用的php库进行项目开发.V: 拥有良好的编码格式习惯,可以规范的进行代码编写.5 项目相关
I: 实际完成过PHP项目.或全程参与过php网站开发与建设.II: 能够较为快速的进行项目开发.d: PHP 中级程序员(Junior PHP Coder)
定义: 正在以PHP程序谋生,正在建设或维护一个或几个使用PHP技术实现的网站/程序的人,有几年PHP经验但是尚未积累必要的代码库和
快速开发工具的人是PHP 中级程序员.描述: 这些人已经以PHP为主要谋生手段,他们的分布以加入PHP 程序员行列5年内的人为主,也有部分加入PHP行列更多年的人.特征:
1: 能熟练维护/操作/优化linux.2: 快速编写结构清晰,代码格式优美的PHP程序.3: 熟练掌握MySQL的操作和常用优化.4: 熟悉程序性能的出现瓶颈的常见原因,并能在实际编写过程中避免出现性能瓶颈.5: 能够使用某些框架/类库加速项目开发进度.6: 能够胜任大部分服务器维护工作.技术要求:
1: 服务器运行系统:
a: linux:
I: 熟悉操作一种版本linux,并能对此版本的linux进行一些调整优化
II: 能够进行不停机维护升级.III: 能够熟练使用Linux命令行下操作.IV: 能够对MySQL和Apache进行优化以提升网站性能.V: 能够配置小型服务器集群(双服务器或三服务器).VI: 能够进行Linux系统安全配置、Iptables、syslog日志管理
web页面技术及相关:
到中级程序员,一般公司都有专门的美工和前台程序员配合工作.故页面制作技术要求同初级程序员.I: 熟悉常见的通信标准.可以根据手册编写出符合通信标准的程序.3 MySQL技术
I: 熟练掌握SQL语句.II: 熟练掌握MySQL的操作.包括安全、访问控制和权限、备份和恢复,复制、导入和导出记录.III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.IV: 知道MySQL性能瓶颈的原因及解决方法.并能实际解决.4 PHP技术
I: 熟练掌握PHP语法,常用函数.II: 熟悉PHP的面向对象编程.并能实际使用面向对象思想进行程序.III: 熟悉php面向对象的特性.能够根据实际运行环境选择开发方法.IV: 熟悉PHP常用库.能够使用常用的php库进行项目开发.V: 拥有良好的编码格式习惯,可以规范的进行代码编写.5 项目相关
I: 实际完成过PHP项目.或全程参与过php网站开发与建设.II: 能够较为快速的进行项目开发.III: 有自己的代码库.可以在项目中进行复用
IV: 形成了良好的编码习惯,编写的程序代码清晰,注释清楚.V: 能够对项目中的难点与新技术进行攻关.e: PHP 高級程序员(Senior PHP Coder)
定义: 正在以PHP程序为主要工作,建设过多个PHP项目,正在建设或维护一个或几个使用PHP技术实现的网站/程序的人,有多年PHP经验, 有自己的代码库和快速开发工具的人是PHP 高级程序员.描述: 这些人已经以PHP为主要谋生手段,他们的分布以加入PHP 程序员行列5年以上的人为主.高级程序员是PHP项目的核心力量.特征:
1: 能熟练维护/操作/优化linux.2: 快速编写结构清晰,代码格式优美的PHP程序.3: 熟练掌握MySQL的操作/优化和多数据库.4: 能够快速查出程序性能的出现瓶颈的原因,并能根据实际情况进行调整.5: 能够使用框架/类库加速项目开发进度.6: 有自己的代码库.7: 能够胜任大部分服务器维护工作.技术要求:
1: 服务器运行系统:
a: linux:
I: 熟悉操作一种版本linux,并能对此版本的linux进行一些调整优化
II: 能够进行不停机维护升级.III: 能够熟练使用Linux命令行下操作.IV: 能够对MySQL和Apache进行优化以提升网站性能.V: 能够配置和优化服务器集群.VI: 能够进行Linux系统安全配置、Iptables、syslog日志管理
MySQL技术
I: 精通SQL语句.II: 熟练掌握MySQL的操作.III: 熟练掌握 phpMyAdmin或任意一种MySQL管理维护工具.IV: 能够根据实际运行情况对数据库瓶颈进行调整,并适时改变开发方法.4 PHP技术
I: 精通PHP语法,常用函数.并有自己专注的方向.II: 熟练使用PHP的面向对象编程.并能实际使用面向对象思想进行程序.III: 熟悉php面向对象的特性.能够根据实际运行环境选择开发方法.IV: 实际使用工厂化开发等开发方法进行项目开发.能够使用PHP的特性提升开发速度和程序运行速度.V: 有自己的代码库,有自己熟悉兵精通的某些共用类库.VI: 拥有良好的编码格式习惯,可以规范的进行代码编写.5 项目相关
I: 实际完成过多个不同方面的PHP项目.II: 能够快速的进行项目开发.III: 有自己的代码库.可以在项目中使用代码库进行快速开发.IV: 形成了良好的编码习惯,编写的程序代码清晰,注释清楚.V: 能够领导程序员对项目中的难点与新技术进行攻关.VI: 熟悉软件工程,能够根据实际情况选用适当的开发模式.f: PHP 工程师(PHP Programmar)
定义: 正在以PHP程序为主要工作,并正在进行新产品的研发.可以同时使用C+/perl等辅助提高PHP程序性能的人是PHP工程师.描述: PHP工程师是.特征:
1: 精通一种或多种linux.2: 快速编写结构清晰,代码格式优美的PHP程序.3: 能够进行框架级通用程序的研发.4: 能够在程序开发初期就通过项目规划避免未来可能出现的性能瓶颈.5: 能够使用框架/类库加速项目开发进度.6: 有自己的代码库.7: 能够胜任大部分服务器和部分服务器集群优化工作.技术要求我就不说了.具体到PHP中级程序员之后,PHP程序员就开始选择发展方向进行分化了.能够到这一步的人,基本都对自己的职业
规划有清晰的认识.目前国内此类人才奇少.关于其他: PHP程序员从中级程序员阶段就开始分化,具体方向根据公司性质,工作条件,自己的兴趣等不一而同.因此需要擅长的详细技能也不太相同
.例如: 公司使用 joomla 构建网站, 这就要求程序员必须精通joomla.如果公司使用自研CMS+discuz构建网站,这就要求程序员能够熟练进行DISCUZ的二次开发.强行要求程序员精通这精通那,意义不大.到高级程序员开始.PHP程序员由于自己的职业经历.肯定会有自己的专攻方向,有人擅长大负载下程序开发优化,有人擅长项目快速开发.而
到这个阶段,如果PHP程序员还需要看这篇文章规划自己的职业生涯.那么请自己列出自己擅长的PHP技术.并选择一种最擅长的技术专攻.关于coder和programmar.字面上理解第一个是编码员,第二个是程序员.实际因为国内名词的混乱.第一个大多以程序员称呼,第二个目前
大多处于项目核心领导层面.故本文暂以工程师称呼.coder 是进行少量创新的,大量重复工作的人.programmar 是进行新技术摸索开发,并实际领导/带领大中型项目开发的人.关于 C++.PHP初期的语法(php3/4时代)和C几乎一样.我当初就是看一下午PHP速成+php手册入的门.但到一定深度之后.有些PHP的特性
需要实际阅读PHP源码才能理解(相关文档不全或者不好找到).有些实际项目功能使用C++开发远比PHP效率高.比如我现在做的项目需要爬虫持续
海量抓取,当带宽足够的情况时,纯使用PHP实现效率不高.所以必须使用C++.所以C++到需要用的时候自然而然的就要用了.不过如果有C/C++的
基础,学习PHP要轻松很多.关于面向对象.面向对象还是很帅的,小型工程上使用意义不大,大中型工程可以极大的提升开发效率.在php4的时代对面向对象基本没有
什么要求,但是现在需要完整掌握面向对象.关于JAVA/Delphi 他们和php有关么? 我孤陋寡闻.请牛人指教.谢谢 关于软件工程.软件工程是一个实际使用中才能学懂的学科.我才疏学浅,在大学的时候楞没学懂.等实际领导项目了.才慢慢的明白其中 的含义与奥妙.关于开发模式.开发模式的好坏直接关系这项目开发的速度与项目的质量.初期死抠模式意义不大.建议有一定积累了再说.关于名气.嗯...怎么说呢?高端PHP圈子很小,也就那么些人.水平到了,自然就认识那些人了.关于第三方库,初期学习掌握一些,比如smarty.到一定阶段需要决定到底是精通第三方库还是使用自行积累开发的库.总的来说,由于第
三方库大多是外国人开发,所以国内想要时刻紧跟比较被动,phpBB中文的没落便是一例.如果使用自行积累开发的库,难度较大,要注意通用性和
可扩展性.关于英文.这个是废话.最低要求是流畅阅读英文文档.其他:
鸣谢: 国内某培训机构的资料.我引用里你们的3月速成PHP工程师的标准作为PHP初学者的标准.谢谢.因为我也没稿费得.所以就不给你们稿费了.
第二篇:PHP开发工程师岗位职责
1.负责PHP相关产品模块开发工作。
2.负责公司业务系统开发、单元测试、系统对接工作。
3.负责公司已有网络管理系统的二次开发。
4.负责相关系统的设计与编码工作。
5.负责研发产品技术文稍的编写工作。
第三篇:PHP工程师岗位要求
岗位描述1、2、3、4、参与系统框架和核心模块的开发并维护;
根据业务部需求,进行新产品开发;
根据公司技术文档规范编写相应的技术文档;
参与产品测试方案的规划,负责系统测试,集成测试。
职位要求
1、计算机相关专业,本科及以上学历;
2、熟悉PHP开发,有一年以上PHP开发经验;
3、熟悉css/xml等网页技术,熟悉Ajax、JQuery、JavaScript,熟悉Adodb、Smarty、ThinkPHP、WebService等;
4、熟悉 Apache, MySQL, 熟悉MySql数据库的设计、管理、开发和优化,具备一定服务器构建经验,精通数据库存储过程、函数的编写;
5、熟悉面向对象编程,具有良好的编程风格、习惯;了解软件开发流程,熟悉MVC模式;并有在MVC模式下进行中大型web开发的经验;
6、熟悉开发文档的编写,有良好文档编写能力;
7、可以单独对已有的系统进行维护,工作认真细致负责,有良好的自学能力,独立思考能力,能够在短时间内学习并应用新技术;
8、积极热情、沟通能力强,有强烈的责任心,具有良好的团队合作精神和敬业精神;
第四篇:php工程师面试题及答案
PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。下面是小编整理的php工程师面试题及答案,希望对大家有帮助!
【1 】Memcached、redis的使用和理解
Memcached和redis 都是一个key-value的内存式存储系统,通过hash表来存储检索结果,做到强大的缓存机制。像新浪的微博、淘宝等大流量站点都必须的使用了这些东东。
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。
【2】你对于设计模式和MVC的理解
Model-View-Controller,模型、视图、控制器,一想到MVC就会想到JAVA,因为JAVA是一个完全面向对象的语言,MVC最早出现在smalltalk中,其核心就是要将试图和数据模型分离,这样不同的程序就可以有不同的展示。
模型,即程序员写的功能、算法和数据模型,也就是我们说的系统业务逻辑层。
视图,即前端,图形界面。展示给用户看的。
控制器,主要负责对请求处理、转发和加载视图。
设计模式,说白了就是代码的设计经验的总结和归类,设计模式最早应用于建筑行业,编程的设计模式按最早的GoF所述,包括23种设计模式,主要用于面向对象的程序编程。遵循几个设计原则:开闭原则、单一职责原则、里氏替换原则、依赖注入、接口分离、迪米特原则、优先使用组合而不是继承等等。包括创建型模式、结构性模式、行为模式三类。
【3】HTTP协议1.0及1.1的区别,并简单说下HTTP协议
HTTP,超文本传输协议。它定义了浏览器和服务器的通信规则。HTTP协议是基于TCP/IP的TCP协议上,现在万维网使用的是HTTP1.1版本,其特点包括,C/S模式,请求简单(GET/POST/HEAD),灵活(可以传输任何类型的数据HTML、XML、JSON、自定义等),无连接(每次连接只处理一个请求,从发出请求到收到200状态为止断开连接),无状态。
对HTTP协议的考察主要包括,响应消息格式、请求消息格式、状态码等知识点。
一般一个HTTP协议包括:起始行(start line)、首部(header)、主体(body)三个部分。
[响应消息格式]
HTTP/1.1 200 0K
Connectlon:close
Date: Thu, 13 Oct 2005 03:17:33 GMT
Server: Apache/2.0.54(Unix)
Last—Nodified:Mon,22 Jun 1998 09;23;24 GMT
Content—Length:682l
Content—Type:text/html
这个响应消息分为3部分:1个起始的状态行(status line),首部、1个包含所请求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、原因短语字段。
[请求消息格式]
GET /somedir/page.html HTTP/1.1Host:
mod_rewrite 使用基于正则表达式动态的修改传入请求的URL。它可以将URL映射到文件系统路径,也可以将一个URL映射到另一个URL。它使用了没有限制数量的规则来操纵URL,每条规则可以包括没有限制数量的附加条件。你可以通过多种方式来检测,如,服务器变量、环境变量、HTTP头、时间戳等。
mod_rewrite 操作整个URL路径,包括path-info的部分。一个重写规则可以被设置在http.conf或者.htaccess中。一个重写规则生成的路径可以包括一个请求字符串,或者内部的子程序处理,外部请求的重定向,或者穿透内部代理等。
2)PHP框架中的URI路由机制,与apache重写类似,一般包括通配符和正则两种规则。让用户可以重新定向(remap)URI处理程序.设定你自己的路由规则。
【5】MySQL的索引机制,复合索引的使用原则
(深入浅出MySQL一书中对索引的使用讲的比较细致)
一般都会用书本中的目录来介绍索引机制,包括有些书本会有专门的快速检索附录,就很类似于数据库的索引。
MySQL的索引包括4类:主键索引(primary key)、唯一索引(unique)、常规索引(index)、全文索引(fullindex)。
Show index from table_name;–查看表中的索引
Show status like ‘Handler_read%’ –查看索引的使用情况
复合索引,一般遵循最左前缀原则,如table_a 的 a b c 三列建复合索引
create index ind_table_a on table_a(a,b,c);
那么,只有在条件中用到a,或者a、b,或者a、b、c这样的情况下,才会用到刚建的复合索引。
【6】如何理解OOP
OOP,面向对象编程,包括三个方面,继承性、封装性、多态性,其中最根本的东西就是抽象。
继承性,即扩展性,通过子类对已经存在的父类进行功能扩展。
封装性,要求外部不能随意存取对象的内部数据,即对该类中的具体实现做封装,用户不必知道内部的具体实现,只有知道它是干什么的,怎么用就好了。
多态性,就是类的抽象和接口,同一个类能够处理多种类型对象的能力。
我们在现实中,看到的任何东东都可以看做为一个对象,然后通过进一步的抽象为类,类又可以演变为很多类似的对象。举个简单的例子,将我们看到的一个房子抽象为一个ROOM类,包括基本的门,窗,桌子等物件,人可以进出等功能。现在我们继承ROOM类为Classroom,包括扇门,有大窗,有桌椅,另外只包括一个黑白和一个讲台,老师和同学可以上课。现在我们实例化这个Classroom类为Classroom_621对象,包括两扇门,四扇大窗,30套桌椅,有同学正在上毛概课。
第五篇:PHP开发工程师-实习报告
毕业实习报告专用纸
PHP开发工程师实习报告
一、实习目的和意义
我自大二起便对PHP Web开发产生了浓厚的兴趣,然后便一直在进行相关的学习。由于学校没有开设相关课程,所有的学习和实践都只能源于自己思考和书本知识,故而难免在经验上有相当大的欠缺。我越来越清醒地认识到Web开发是一项技术工作,更是一门对经验依赖性很强工作,于是我便决定开始自己的实习。
为了进一步了解PHP Web开发的相关知识,掌握PHP Web开发的基本技术,丰富PHP Web开发的实战经验,巩固SQL的基础知识及正确的运用方法,和有用的相关技术,提高自己的工作效率,我开始了此次实习。通过实习,巩固大学所学专业的基本知识,提高分析、判断和处理实际问题的能力,锻炼自己的实际动手能力,增强自己的团队协作意识,了解软件开发的思考角度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好的工作,打好一定的基础。
二、实习岗位简介
岗位名称:PHP开发工程师
主要工作:本次实习我的主要工作与其他同事合作使用PHP语言在EcShop开源商城项目上二次开发出一个B2C商城。
三、实习内容和过程
入职第一天要求熟悉公司的开发环境,以及代码风格。
公司的开发环境是WAMP平台,即Windows、Apache、MySQL、PHP环境,开发工具是PHPEclipse和Navicat。
原本以为如今公司开发都会在Linux系统下,这才清楚开发环境全凭个人喜好以及熟悉程度。其实同样是做架构,同样是写代码,环境不重要。只是因为最后的服务器是Linux系统,为了避免上线以后出问题,所以对常见的Linux的特点要求熟悉。
Apache并不要求掌握多少,因为服务器维护有专职人员做,而且做的更专
毕业实习报告专用纸
业更好,我们只是简单的能使用就好。
Eclipse是一套很强大的IDE,有各种版本适合各种语言开发,如Java、PHP等。其附带的功能强大而又方便,是大中型项目的开发利器。因为在大中型项目开发时,项目内部结构错乱复杂,各个文件之间存在个各种各样的依赖关系,这时候一个好的IDE可以省下很多使用Notepad开发时的劳力。
Navicat是一套数据库管理工具,用它来连接MySQL比命令行操作更方便,比phpMyAdmin更快捷,因为C/S的系统有更快的响应速度以及处理速度。
代码风格是影响团队开发的一个很重要因素,这一点在我们后面进行开发的时候给我带来相当深刻的感触。从简单的代码缩进、留白,到更深入的数据处理方式,处理环节,每个人都有自己的理解和想法,因为每个人都有自己的经验。
代码格式还好说,在公司见识到了很方便的代码美化工具,可以方便的转化为自己赏心悦目的格式。但是数据的处理方式、流程、环节,却是项目整合的关键。比如关键字过滤的处理,重复处理会影响效率,比如某个显示值的变换,万万不能重复处理。所以在一开始就必须规定好入口参数、出口参数的格式,并且将数据处理流程规定好!即有一套精确的数据流图!
关于数据库架构——理论和实践
该商城是由一个经验丰富的项目经历、还有几个专职人员带领我们几个实习生一起做。在数据库架构的问题上我第一次感受到经验和书本的矛盾关系。
在看到该商城的数据库架构时,我不禁觉得其有问题。按着书上关于数据库范式的讲解,毫无疑问该网站的数据库存在数据冗余等诸多问题,难道这个项目经理和这些工程师们不懂数据库范式?事实证明我猜对了一半,当我满怀疑惑提出数据库的问题后,才发现有一个工程师真的不清楚数据库范式是什么,甚至连这个概念都没听过。另外一个工程师带着我分析这个网站的用途和需求,并讲解了这样设计的优点和缺点,以及按着规范的范式要求去设计的优点和缺点。最终我了解到,数据库范式是一个规范,它在理想程度上解决了数据冗余,删除出错等诸多问题,但是当我们完全按着数据库范式去设计的时候就发现并没有想象中的好。因为有一些冗余或删除出错很可能一年才遇到一次,而且在人为提醒的状况下完全可以避免,但是为了避免冗余所耗费的劳力,所付出的代价却是相当巨大的。
毕业实习报告专用纸
关于注释
开发的时候被一再强调注释的重要性。并且就连注释的格式都规范的死死的。这就是团队开发。每一个文件都必须有文件注释,每一个函数都必须有功能注释以及参数注释,甚至就连每一个变量都必须有注释,必须清清楚楚标明用途,哪怕它的标识符很清楚表示它只是个password。
如今的开发语言都有其相应的自动生成API帮助文档的小软件,每一个软件都规定了注释的规范,以方便生成帮助文档,好在这些文档规范大致相同。刚开始很惊讶,因为注释的内容居然能占一半,甚至更多,这在以前都未曾遇到。
如何解决问题
商城开发到一半遇到两个问题:一个是视频播放上传,再有一个就是自动绘制图表。
视频上传在土豆、优酷上屡见不鲜,可是真正到了自己开发的时候才发现并不像想象的那么容易。我只要一想到上传时网络状况、断点续传、视频格式这些技术问题,头就大了。自动图表就更不必说,根本不知道从哪里下手,更不能接受的是项目经理和两个工程师居然也没遇到过类似问题。
当时我觉得这件事或许解决不了,因为项目已经分好时间,工期只有这么多,即便能解决怕也是要超工期。最后向上级反映一下改一下需求然后可能就不了了之了。事实证明了我的想法很愚蠢,因为经理根本就没向上反映,只是相当淡定地给了一句话:上网找找方法,肯定能实现。没想到真让经理说中了。
最后大家齐心合力,首先把问题分析,难关一个一个克服,经历了整夜守着谷歌翻译看帮助文档,经历了整夜手工输入连接下载flash接口,经理了整夜调试修改别人的代码……经历了一个又一个不眠之夜,工作居然提前完成了!
事后一次聚餐的时候大家说根本没想到这个可能实现,经理说:“类似的状况我之前就遇到很多回了。最开始也是想着该需求,后来才认识到,公司招人来是解决问题的,工作就要尽责!有需求就必须满足!即便满足不了也得尽全力去做。最重要的是:事情都是人做的,别人能做,自己为什么不能,即便不能自创,抄也可以抄来”。
四、实习心得:
1.关于公司的开发环境和代码规范
毕业实习报告专用纸
公司的环境和规范,都是长期以来根据实践经验慢慢总结出来的,很适合当前规模项目的开发,因此必须及时熟悉。这就如生产力和生产关系之间的联系,毫无疑问当前的生产关系是适应生产力的。
规范包括代码规范和架构规范,它制定了数据处理流程的规范,以及考虑因素。然而不同的项目对应不同的需求,应当考虑的因素也是不同的。比如一个普通公司的内网只允许内部员工访,这样的话对安全系数的要求就不高,但大流量大负载的状况就得多加考虑!换过来如果是一个机关部门的网站,显然不会有大流量大负载的情况出现,因此在这上面便可以少考虑,而安全系数就是不得不考虑的致命因素!
2.关于理论和实践
最开始的数据库问题让我明白了书上的理论在面对实现中的硬伤时表现得是那么苍白,那更多的只是理论上的完美,而实际工作中是不存在完美的!
后来的代码实现工作让我认识到,即便是理论上掌握了,实践的话却不一定成功。且不说无数次调试后才能保证语句的正确,单单是逻辑错误出现的频率就几乎让人崩溃。原本在脑海中那么清晰地思路,到实现的时候才发现居然有那么多问题没想到!
公司实习这段时间我清楚了什么叫:纸上得来终觉浅,绝知此事要躬行!3.注释——责任心的体现
在公司开发,最开始被迫写N多注释,到后期整合项目的时候才发现多亏有这些注释。它们使得我们可以很方便地回想起自己当时的想法,更使得我们可以毫无障碍地读懂别人的代码,以后即便是换了一批人员进行二次开发或者维护都会很方便。
注释,既是对自己作品的信心,也是对自己作品的负责!4.公司招人是需要解决问题
商城遇到的两个问题最终被解决,我清楚地知道问题解决的每一个过程。从最开始的毫无头绪,到后来的稍有眉目,再到后来思路清晰,然后一步一步实现!经理那句话给我印象很深刻:公司招人是要来解决问题的!我想我以后都不会轻易说不行了。
毕业实习报告专用纸
五、实习感受
通过本次实习,我基本了解了公司的开发流程,以及一些开发时的注意事项,同时也使自己的代码水平上升了一个层次。然而更多的收获在于了解到工作是什么样的状态,工作中的问题以及遇到问题怎么做。经过这次实习,工作于我不再是想象中的那个空洞的名词,我深深地感受到它的存在!深深地体会到它和学校的区别!