web 全栈 学习 1 工程师成长思路图
第一部分: 技术的三个阶段
实现 ---> 借鉴 ---> 优化
实现:为了实现功能,不考虑可读性。
借鉴:阅读开源代码,开源程序,学到编程思想。
优化:可读性,可执行。
阶段一:实现
多做事,多接触技术
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 工程师成长思路图的更多相关文章
- web 全栈 学习 2 一个好的页面是如何炼成的
第一章:Web页面内容的构成2.Web内容的分工一个Web页面可能的构成(视觉上看):①文字.链接.标题②交互入口(表单元素)③图片(哪些类型)④动画 Flash动画 HTML5 CSS3 动画⑤音视 ...
- 《web全栈工程师的自我修养》读书笔记
有幸读了yuguo<web全栈工程师的自我修养>,颇有收获,故在此对读到的内容加以整理,方便指导,同时再回顾一遍书中的内容. 概览 整本书叙述的是作者的成长经历,通过经验的分享,给新人或者 ...
- 《web全栈工程师的自我修养》阅读笔记
在买之前以为这本书是教你怎么去做一个web全栈工程师,以及介绍需要掌握的哪些技术的书,然而看的过程中才发现,是一本方法论的书.读起来的感觉有点像红衣教主的<我的互联网方法论>,以一些自己的 ...
- Web全栈工程师修养
全栈工程师现在是个很热的话题,如何定义全栈工程师?在著名的问答网站Quora上有人提出了这个问题,其中一个获得了高票的回答是: 全栈工程师是指,一个能处理数据库.服务器.系统工程和客户端的所有工作的工 ...
- web性能优化 来自《web全栈工程师的自我修养》
最近在看<web全栈工程师的自我修养>一书,作者是来自腾讯的前端工程师.作者在做招聘前端的时候问应聘者web新能优化有什么了解和经验,应聘者思索后回答“在发布项目之前压缩css和 Java ...
- web前端全栈学习之路
web前端全栈学习之路 --- 陆续更新中 一.HTML相关 1.HTML常用标签:http://www.cnblogs.com/wyb666/p/8733699.html 2.HTML5基础: 3. ...
- Java全栈学习路线、学习资源和面试题一条龙
肝了一个月,终于把Java学习路线.面试题资源和电子书资源都整理好了. Java 从基础到微服务的学习路线,其中还包括科班知识.学习建议.后续的学习引导和相应的学习资源(视频.书籍.网站),还整理了J ...
- 处女作《Web全栈开发进阶之路》出版了!
书中源码下载地址:https://github.com/qinggee/WebAdvanced 01. 当初决定写博客的原因非常的纯洁:只要每个月写上 4 篇以上博客,月底的绩效奖金就多 500 块. ...
- 2020 Web 全栈面经
2020 Web 全栈面经 1.简历 2. 技术 3. 项目 4. 架构 5. 沟通,协作 6.成长 7. 面试技巧 准备 电话确认,面试流程,五险一金缴纳情况 有无笔试,几轮,面试时间,答复时间 细 ...
随机推荐
- SVN环境搭建详解
SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网 ...
- HDU1421
提交啦n次一直WA,这个bug找啦几个小时,最终才发现数组开小啦,真是遗憾.这是一个典型的DP问题,题目要求从n个中选出k对使得最终疲劳度最小.首先对物品质量a[n]进行一次排序,用dp[i][j]表 ...
- linux调整缓存写入磁盘的时间,减少磁盘爆掉的可能性
缓存数据存入磁盘的最长时间,如果这段时间写不完,就会报异常停止写,这样缓存数据会不断积累,导致内存爆掉. echo 0 > /proc/sys/kernel/hung_task_timeout_ ...
- ylb: 触发器(Trigger)之Instead Of触发器 [注:没内容]
ylbtech-SQL Server:SQL Server-触发器(Trigger)之Instead Of触发器 触发器(Trigger)之Instead Of触发器 [注:没内容]. ylb: 触发 ...
- 【前端阅读】——《JavaScript入门经典》摘记之JavaScript与XML
前言:这本书除了基础的JavaScript理论体系之外,有一个特别的章节,就是讲解——JavaScript与XML的关系,从中,我更进一步的了解了XML的基础.创建.显示以及使用JavaScript如 ...
- 【C语言天天练(十一)】深入理解指针
引言:在C语言中.指针的地位是不言而喻的,要想非常好的掌握C语言,掌握指针是必须的,这也是C语言不同于其它语言的地方. (一)指针的指针 样例: int i; int *pi;/*把pi初始化为指向变 ...
- jquery代码小片段
1. 使用jQuery来切换样式表 //找出你希望切换的媒体类型(media-type),然后把href设置成新的样式表. $(‘link[media="screen"]‘).at ...
- Nginx 一些常用的URL 重写方法
url重写应该不陌生,不管是SEO URL 伪静态的需要,还是在非常流行的wordpress里,重写无处不在. 1. 在 Apache 的写法 RewriteCond %{HTTP_HOST} n ...
- Linux远程无密码登陆并远程执行脚本
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa ss ...
- C语言日期计算器
记录下码子 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <stdlib.h> int days ...