第一部分: 技术的三个阶段

实现 ---> 借鉴 ---> 优化

实现:为了实现功能,不考虑可读性。
借鉴:阅读开源代码,开源程序,学到编程思想。
优化:可读性,可执行。

阶段一:实现
多做事,多接触技术

1、多做事
多接触各种类型的网站:门户、SNS、BBS、商城等等。
多接触各方面的技术:前端、后端、服务器等。
什么没做过就是做什么。
这个阶段的程序员容易加班、熬夜。

2、要接触各种技术

前端技术
HTML,css,js,
phonegap,
cocos2d,
response
核心问题:特效

后端技术
PHP,java,
python,nodejs
OPP,MVC,AOP,
REST,SOA,
Webservice
核心问题:程序架构

系统底层
Linux,Apache,
nginx,mysql,LVS,
mongodb
核心问题:高并发

阶段二:借鉴
善于分析别人的代码

五种分析代码的方法:

看文档 开发文档、phpDocument
做调试 Xdebug
自带函数 debug_backtrace
debug_print_backtrace
var_export
var_dump
get_included_files
SocketLog 1、不能var_dump的地方: ajax、api;
2、var_dump了也看不见的地方:cron脚本、队列。
思维整理 UML图像、思维导图(xmind)

分析代码方法一:看文档

看代码
---> 编程思想
看文档

注释提取成文档
phpDocumentor 官网地址:http://www.phpdoc.org/
四种安装方法
生成文档的命令:
phpdoc -o HTML:frames:earthli -d ./code -t./docs
在代码目录内:输入以上命令
-o 生成文档的风格
-d 代码的目录
-t 生成文档的目录

分析代码方法二:做调试
Xdebug
具体使用教程:https://netbeans.org/kb/docs/php/debugging_zh_CN.html

分析代码方法三:PHP自带函数

打印调用栈:
debug_backtrace(); 打出调用栈,可以查看调用的文件和方法,返回值。
debug_print_backtrace(); 打出调用栈,可以查看简单的调用栈,返回值。

ThinkPHP的执行流程:
index.php 加载 ThinkPHP
ThinkPHP 执行 Think:start()
Think.class.php 中执行 App:exec()
App.exec() 中用反射方法调用了控制器

输出变量:$arr=array('a'=>'aaa', 'b'=>'bbb');
echo $arr; ---> var_dump($arr); //可以看到结构
//记录日记结构
//var_export 变量原样输出
file_put_content('./log.log', $arr); ---> file_put_content('./log.log', var_export($arr, true), FILE_APPEND);

获取所有加载的文件 get_included_files() 返回值

分析代码方法四:SocketLog

用SocketLog做微信调试

用户 ->发消息-> 微信 ->请求接口-> 服务器

用户 <-显示给用户<- 微信 <-返回内容(xml)<- 服务器

var_dump调试 -> 服务器

SocketLog原理:
php程序 -> WebSocket -> 浏览器

php程序 -×-> 浏览器

SocketLog 使用方法:
浏览器 安装插件
设置插件
websocket 启动websocket服务:
node sever/index.js
php程序 导入类库
include 'SocketLog.class.php';
配置设置
slog($arr, 'set_config');
发送日志
slog($log[,type])
Github地址:https://github.com/luofei614/SocketLog

分析代码方法五:思维整理
思维导图。
软件:xmind

UML图像:理清类的关系

阶段三:优化
------------------------------------------------------------
可读性,安全性,可扩展性,服务器优化
------------------------------------------------------------
可读性:
1:命名规范:函数名,类名,变量名,数据库表名,字段名不要是拼音声母缩写,尽量用英文
2:注释规范:勤于写代码注释,对与逻辑复杂的代码段可以先注释后写代码。注释尽量符合phpdocument的规范。调试代码加上//debug注释。

更多编码规范可参考discuz的编码规范:
http://open.discuz.net/?ac=document&page=dev_coderule

------------------------------------------------------------
可扩展性:(高聚合、低耦合)
可扩展性.png

推荐书:《深入PHP面向对象、模式与实践》《程序员修炼之道》

------------------------------------------------------------
安全性:

xss:
Cross-site scripting 跨站脚本攻击,可用于盗号
因为网站对用户输入的数据没有严格过滤,用户可以输入js代码,导致页面能执行js代码。用户js代码获得用户的cookie。

Sql注入:
因为对用户输入的内容没有严格过滤,用户输入的内容又作为sql语句查询条件时,导致用户能执行自己编写的sql语句,获得网站的数据中的数据。

CSRF:
Cross-site request forgery跨站请求伪造,可用于刷粉丝
因为网站没有对用户提交数据的来源进行判断,导致黑客可以在第三方网站用js自动提交表单的操作。

------------------------------------------------------------
数据库、服务器优化
1、使用缓存
启用php的APC模块对OPCODE进行缓存。
用Memcache, Xcache等对数据库查询结果进行缓存。
Apache, nginx, varnish 等运行环境都有缓存模块
根据HTTP协议对用户浏览器设置缓存

2、数据库优化
选择好mysql引擎(myisam,innodb)
做好mysql索引优化,表结构优化,用explain进行分析
配置mysql配置文件,配置查询缓存 (query_cache_*) ,索引缓存 (key_buffer), 线程缓存 (thread_cache_size), 临时表大小 (tmp_table_size), 用 mysqlreport 分析

3、使用队列:耗时的程序可以用队列处理,用 gearman, redis
4、搭建分布式环境 (nginx, LVS), 搭建主从读写分离的数据库。
5、压缩文件:
Apache, nginx 运行环境有压缩模块, PHP可以设置配置项 zlib.output_compression, 前端压缩js,css文件,使用css sprite 方法切图。
6、使用云计算
推荐书:《海量运维、运营规划之道》、《构建高性能Web站点》

------------------------------------------------------------
------------------------------------------------------------

第二部分:技术团队的管理

------------------------------------------------------------
开发流程

分析
需求
陈述处理
怎么做
(按姓名拼音排序)
做什么
难点
demo
优雅降级(例:缓存)
设计
数据库口
接口 (十分详细,如何查表,判断逻辑)
前端页面
编码
排期
正交设计
防卫式编程
测试
人工测试
CodeReview
单元测试 (代码发布系统)
网站报警
(定时程序检测状态。状态不对,就发邮件,或者短信。甚至拨打电话)
(端口,状态码,连接数,监听指标很多,不止errorlog)
(异常情况监察机制)

------------------------------------------------------------
分析和设计在Xmind中完成
用trello排期(划分功能,分配工作)
------------------------------------------------------------
------------------------------ 重点 ------------------------------
形成团队开发规范(文档)

checklist
开发前,用xmind分析整理
开放前,发现产品有特殊情况下缺少的页面、文案及时反馈
开发前,简历git分支,注意更新master和develop
开发中,及时更新看板,记录时间
开发中,写好注释,复制逻辑要先写注释后写代码,相同逻辑//@same 注释,调试代码//debug 注释,特殊逻辑要写注释说明
开发中,注意安全问题。变量在sql语句拼接时要过滤,SQL关键词大写,表名、字段名用反引号括起,值用引号括起。
开发中,注意操作去重,如驳回操作前判断是否为能驳回的状态
开发中,开发过程注意解决报警错误
开发中,针对少数情况写报警 ,如:数据量
开发中,遇到问题第一反应是找问题
开发后,完成后运行单元测试,做的没有语法错误,sql语句错误,产品逻辑错误。
开发后,测试前codeview
开发后,按产品流程测试(建立测试checklist,多个接口按产品逻辑测试,如果有前端在前端上面测试,注意边缘情况)
开发后,项目上线前运行端对端测试
开发后,修复bug时要先自己重现错误
附加注意项:1.及时删除无用代码。2.及时重构有问题的代码

*多赞扬,少批评
单元测试写的很好,下次注意把注释写好就可以了。
*严重问题,出现一次说一次。
变量没有过滤。
*不要说不对,要说可以这么用另外一种方法。
*对上司不要问为什么,要问是不是。
------------------------------------------------------------
网站Wanning报警

register_shutdown_function('jd_fatal_error');
set_error_handler('jd_error_handler');
function jd_fatal_error()
{
if($e = error_get_last()) {
swith($e['type']) {
case E_ERROR:
case E_PARSE:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
js_error_handler($e['type'], $e['message'], $e['file'], $e['line']]);
break;
}
}
}
function jd_error_handler($errno, $errstr, $errfile, $errline){

}
------------------------------------------------------------
业务逻辑报警
$user = db_find('seeker', '`uid`, `realname`, `email`, `token`', "`uid`='".s($uid)."'");
if(empty($user))
{
jdlog("id为".intval($uid)."的 recomment_user表记录查询不到", 'recommend_weixinlogin', true, true);
}

$emails = get_data("SELECT * FROM subscribe WHERE `email_statsu` = 1 AND `unsubscribe` = 0");
if(count($email)>5000)
{
jdlog('##订阅邮箱大于5000了,队列数过大,需要考虑分批加入队列##','subscribe_big', true, true);
}

------------------------------------------------------------
GeekCompany
报警发到slack
国外的软件,接收消息的东西,可以定义消息的类型。
有app,PC的软件。
有带用户信息,可以联系用户。可以留住用户,告诉用户错误解决了,可以回来继续浏览了。可以观看用户的行为。

------------------------------------------------------------
管理方面的书
《程序员修炼之道》
《带人的技术》
《精益创业》
《精益创业实战》
《敏捷开发一千零一夜》

------------------------------------------------------------
------------------------------------------------------------
总结:
工程师的成长
技术
实现 -> 多做事
借鉴 -> 5种分析代码的方法:
看文档 phpDocument
做调试 Xdebug
php自带函数
debug_backtrace
debug_print_backtrace
var_export
var_dump
get_included_files
SocketLog
思维整理

优化 -> 可读性、可扩展性、安全性、服务器优化
管理
分析 xmind
设计 xmind
编码 trello
测试 slack

------------------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------

web 全栈 学习 1 工程师成长思路图的更多相关文章

  1. web 全栈 学习 2 一个好的页面是如何炼成的

    第一章:Web页面内容的构成2.Web内容的分工一个Web页面可能的构成(视觉上看):①文字.链接.标题②交互入口(表单元素)③图片(哪些类型)④动画 Flash动画 HTML5 CSS3 动画⑤音视 ...

  2. 《web全栈工程师的自我修养》读书笔记

    有幸读了yuguo<web全栈工程师的自我修养>,颇有收获,故在此对读到的内容加以整理,方便指导,同时再回顾一遍书中的内容. 概览 整本书叙述的是作者的成长经历,通过经验的分享,给新人或者 ...

  3. 《web全栈工程师的自我修养》阅读笔记

    在买之前以为这本书是教你怎么去做一个web全栈工程师,以及介绍需要掌握的哪些技术的书,然而看的过程中才发现,是一本方法论的书.读起来的感觉有点像红衣教主的<我的互联网方法论>,以一些自己的 ...

  4. Web全栈工程师修养

    全栈工程师现在是个很热的话题,如何定义全栈工程师?在著名的问答网站Quora上有人提出了这个问题,其中一个获得了高票的回答是: 全栈工程师是指,一个能处理数据库.服务器.系统工程和客户端的所有工作的工 ...

  5. web性能优化 来自《web全栈工程师的自我修养》

    最近在看<web全栈工程师的自我修养>一书,作者是来自腾讯的前端工程师.作者在做招聘前端的时候问应聘者web新能优化有什么了解和经验,应聘者思索后回答“在发布项目之前压缩css和 Java ...

  6. web前端全栈学习之路

    web前端全栈学习之路 --- 陆续更新中 一.HTML相关 1.HTML常用标签:http://www.cnblogs.com/wyb666/p/8733699.html 2.HTML5基础: 3. ...

  7. Java全栈学习路线、学习资源和面试题一条龙

    肝了一个月,终于把Java学习路线.面试题资源和电子书资源都整理好了. Java 从基础到微服务的学习路线,其中还包括科班知识.学习建议.后续的学习引导和相应的学习资源(视频.书籍.网站),还整理了J ...

  8. 处女作《Web全栈开发进阶之路》出版了!

    书中源码下载地址:https://github.com/qinggee/WebAdvanced 01. 当初决定写博客的原因非常的纯洁:只要每个月写上 4 篇以上博客,月底的绩效奖金就多 500 块. ...

  9. 2020 Web 全栈面经

    2020 Web 全栈面经 1.简历 2. 技术 3. 项目 4. 架构 5. 沟通,协作 6.成长 7. 面试技巧 准备 电话确认,面试流程,五险一金缴纳情况 有无笔试,几轮,面试时间,答复时间 细 ...

随机推荐

  1. api 接口开发理论 在php中调用接口以及编写接口

    如: http://localhost/openUser.php?act=get_user_list&type=json 在这里openUser.php相当于一个接口,其中get_user_l ...

  2. 【DQ冰淇淋】—— Babylon 冰淇淋三维互动营销项目总结

    前言:在学习过Babylon.js基础之后,我上手的第一个网页端3D效果制作项目就是‘DQ冰淇淋’.这个小项目应用到了Babylon最基础的知识,既可以选味道,选点心,也可以旋转.倒置冰淇淋,互动起来 ...

  3. 多媒体层预览(Media Layer OverView)

    音频模块位于多媒体层里.多媒体层包含了图形.音频.视频三种技术.这三种技术会给你带来声觉.视觉上的良好体验. 来看看ios的结构体系以及媒体层上的内容:                         ...

  4. jquery方法

    $.inArray(被判断的量,ArrayName);  如果存在返回索引值,如果不存在返回-1 $.unique() 数组去重   根据去重前后的长度,判断是否有重复 $.each(被遍历的数组,f ...

  5. css:html() text() val()

    转http://www.jb51.net/article/35867.htm .html()用为读取和修改元素的HTML标签    对应js中的innerHTML .html()是用来读取元素的HTM ...

  6. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  7. css 使表格随着内容自动适应宽度

    所谓难而不会,会儿不难.这个问题让我纠结了很长时间,一句css解决了,仅仅靠一个属性 td { white-space: nowrap; }

  8. 研发团队如何借助Gitlab来做代码review

    代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现有工具在团队内部形成代码revie ...

  9. java中BigDecimal的学习

    干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习. 最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉 ...

  10. 献给写作者的 Markdown 新手指南及语法

    烈推荐所有写作者学习和掌握该语言.为什么?可以参考: 『为什么作家应该用 Markdown 保存自己的文稿』. 『Markdown写作浅谈』 让你专注于文字而不是排版. 标题 只需要在文本前面加上 # ...