web 全棧 學習 1 工程師成長思路圖


第一部分: 技術的三個階段php

實現 ---> 借鑑 ---> 優化css

實現:爲了實現功能,不考慮可讀性。
借鑑:閱讀開源代碼,開源程序,學到編程思想。
優化:可讀性,可執行。html

階段一:實現
多作事,多接觸技術前端

一、多作事
多接觸各類類型的網站:門戶、SNS、BBS、商城等等。
多接觸各方面的技術:前端、後端、服務器等。
什麼沒作過就是作什麼。
這個階段的程序員容易加班、熬夜。java

二、要接觸各類技術node

前端技術
HTML,css,js,
phonegap,
cocos2d,
response
核心問題:特效python

後端技術
PHP,java,
python,nodejs
OPP,MVC,AOP,
REST,SOA,
Webservice
核心問題:程序架構mysql

系統底層
Linux,Apache,
nginx,mysql,LVS,
mongodb
核心問題:高併發nginx


階段二:借鑑
善於分析別人的代碼git

五種分析代碼的方法:

看文檔 開發文檔、phpDocument
作調試 Xdebug
自帶函數 debug_backtrace
debug_print_backtrace
var_export
var_dump
get_included_files
SocketLog 一、不能var_dump的地方: ajax、api;
二、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自動提交表單的操做。

------------------------------------------------------------
數據庫、服務器優化
一、使用緩存
啓用php的APC模塊對OPCODE進行緩存。
用Memcache, Xcache等對數據庫查詢結果進行緩存。
Apache, nginx, varnish 等運行環境都有緩存模塊
根據HTTP協議對用戶瀏覽器設置緩存

二、數據庫優化
選擇好mysql引擎(myisam,innodb)
作好mysql索引優化,表結構優化,用explain進行分析
配置mysql配置文件,配置查詢緩存 (query_cache_*) ,索引緩存 (key_buffer), 線程緩存 (thread_cache_size), 臨時表大小 (tmp_table_size), 用 mysqlreport 分析

三、使用隊列:耗時的程序能夠用隊列處理,用 gearman, redis
四、搭建分佈式環境 (nginx, LVS), 搭建主從讀寫分離的數據庫。
五、壓縮文件:
Apache, nginx 運行環境有壓縮模塊, PHP能夠設置配置項 zlib.output_compression, 前端壓縮js,css文件,使用css sprite 方法切圖。
六、使用雲計算
推薦書:《海量運維、運營規劃之道》、《構建高性能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

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

相關文章
相關標籤/搜索