成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

career-tips | 踩坑路

kviccn / 530人閱讀

摘要:因為是多進程單線程同步模式,即一個子進程同時最多處理一個請求,所以子進程數(shù)等于最大并發(fā)數(shù)。

a little tips in my code career | 碼碼踩過的那些坑2015-2016

記一下這一年碼碼中我需要去了解的基礎(chǔ)知識,有不對的歡迎大家指證出來:https://github.com/TIGERB/car...

關(guān)于設(shè)計模式

關(guān)于PHP

關(guān)于互聯(lián)網(wǎng)協(xié)議


設(shè)計模式
面向?qū)ο蟮脑O(shè)計原則

對接口編程,不要對實現(xiàn)編程

使用對象之間的組合,減少對繼承的使用

抽象用于不同的事物,而接口用于事物的行為

設(shè)計模式的設(shè)計原則

開閉原則:對擴展開放,對修改封閉

mean: 實例的內(nèi)部不可修改,但可以增加新功能

依賴倒轉(zhuǎn):對接口編程,依賴于抽象而不依賴于具體

mean: 就是把公共的拿出來,定義成抽象類、接口、抽象方法,然后大家再去實現(xiàn)這個抽

象,實現(xiàn)的方法各有不同,各個實體相互獨立沒有依賴,各個實體離開誰都能活

接口隔離:使用多個接口,而不是對一個接口編程,去依賴降低耦合

mean: 就是抽象再抽象

最少知道:減少內(nèi)部依賴,盡可能的獨立

mean: 實現(xiàn)依賴注入容器,把依賴的實體注入到一個實例(所謂容器)

合成復(fù)用:多個獨立的實體合成聚合,而不是使用繼承

mean:盡可能不用繼承,使用以上三種方式構(gòu)成代碼結(jié)構(gòu)

里氏代換:超類(父類)出現(xiàn)的地方,派生類(子類)都可以出現(xiàn)

mean:能用父類實現(xiàn)的子類也能實現(xiàn)

簡單設(shè)計原則

通過所有測試:及需求為上

盡可能的消除重復(fù):高內(nèi)聚低耦合

盡可能的清晰表達:可讀性

更少代碼元素:常量,變量,函數(shù),類,包 …… 都屬于代碼元素,降低復(fù)雜性

以上四個原則的重要程度依次降低

核心:高內(nèi)聚松耦合(單一職責(zé)),外部依賴,實體對抽象編程,抽象就是分層
PHP
client和nginx簡易交互過程

step1:client發(fā)起http請求

step2:dns服務(wù)器解析域名得到主機ip

step3:默認端口為80,通過ip+port建立tcp/ip鏈接

step4:建立連接的tcp/ip三次握手,建立成功發(fā)送數(shù)據(jù)包

step5:nginx匹配請求

case .html: 靜態(tài)內(nèi)容,分發(fā)靜態(tài)內(nèi)容響應(yīng)

case .php: php腳本,轉(zhuǎn)發(fā)請求內(nèi)容到php-fpm進程,分發(fā)php-fpm返回的內(nèi)容響應(yīng)

step6:斷開連接的tcp/ip四次握手,斷開連接

nginx和php簡易交互過程

背景:web server和服務(wù)端語言交互依賴的是cgi(Common Gateway Interface)協(xié)議,由于cgi效率不高,后期產(chǎn)生了fastcgi協(xié)議(一種常駐型的cgi協(xié)議),php-cgi實現(xiàn)了fastcgi,但是相比php-cgi,php-fpm提供了更好的PHP進程管理方式,可以有效控制內(nèi)存和進程、可以平滑重載PHP配置

流程:

step1:nginx接收到一條http請求,會把環(huán)境變量,請求參數(shù)轉(zhuǎn)變成php能懂的php變量

// nginx 配置資料
location ~ .php$ {
      include snippets/fastcgi-php.conf; //step1
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

step2:nginx匹配到.php結(jié)尾的訪問通過fastcgi_pass命令傳遞給php-fpm.sock文件,其實這里

的ngnix發(fā)揮的是反向代理的角色,把http協(xié)議請求轉(zhuǎn)到fastcgi協(xié)議請求

// nginx 配置資料
location ~ .php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;// step2
}

step3:php-fpm.sock文件會被php-fpm的master進程所引用,這里nginx和php-fpm使用的是

linux的進程間通信方式unix domain socks,是一種基于文件而不是網(wǎng)絡(luò)底冊協(xié)議的通信方式

step4:php-fpm的master進程接收到請求后,會把請求分發(fā)到php-fpm的子進程,每個php-fpm

子進程都包含一個php解析器

step5:php-fpm進程處理完請求后返回給nginx

知識碎片
//phpfpm配置

pm.max_children = 最大并發(fā)數(shù)

詳細的答案:
pm.max_children 表示 php-fpm 能啟動的子進程的最大數(shù)量。
因為 php-fpm 是多進程單線程同步模式,即一個子進程同時最多處理一個請求,所以子進程數(shù)等于最大并發(fā)數(shù)。
//日志調(diào)試方法

/**
 * 超級調(diào)試
 *
 * 調(diào)試非本地環(huán)境或分布式環(huán)境,通過Log查看變量傳遞
 * 寫入變量值到varlogphp_super_debug.log
 * @param  mixed  $data     日志數(shù)據(jù)
 * @param  string $log_path 日志路徑
 * @param  string $log_name 日志名稱
 * @return void       
 */
function super_debug($data, $log_path="varlog", $log_name="debug")
{
  error_log(json_encode($data, JSON_UNESCAPED_UNICODE)."
", 3, $log_path.$log_name);
}
// php實現(xiàn)下載圖片

header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=download_name.jpg");
readfile($yourFilePath);
// php5.6開始干掉了@語法,php上傳圖片兼容版本寫法

if (class_exists("CURLFile")) {
    curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
    $data = array("file" => new CURLFile(realpath($destination)));//5.5+
} else {
    if (defined("CURLOPT_SAFE_UPLOAD")) {
        curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
    }
    $data = array("file" => "@" . realpath($destination));//<=5.5
}
// 序列化與反序列化

概念:
序列化:把變量(所有類型)轉(zhuǎn)成能傳輸和儲存的變量(不丟失原變量的屬性和結(jié)構(gòu))
反序列化:把字符串轉(zhuǎn)成原變量

函數(shù):
序列化:serialize, json_encode(不能序列化對象)
反序列化:unserialize, json_decode
// 記一個坑

ip2long函數(shù)
- 32位系統(tǒng)下會轉(zhuǎn)成帶符號的int,范圍-2^31~2^31-1
- 64位系統(tǒng)下會轉(zhuǎn)成帶不符號的int,范圍0~2^32-1
# redis發(fā)布訂閱
ini_set(‘default_socket_timeout’, -1);

$redis = new Redis();
$redis->pconnect("127.0.0.1", 6379);

//訂閱
$redis->subscribe(["msg"], "callfun");

function callfun($redis, $channel, $msg)
{
  var_dump([
    "redis" => $redis,
    "channel" => $channel,
    "msg" => $msg
  ]);
}

//發(fā)布
$redis = new Redis();
$redis->connect("127.0.0.1", 6379);
$redis->publish("msg", "moon cake");
$redis->close();
技巧

linux

df -h: 更易讀的查看磁盤空間

du -h --max-depth=1 file_path:查看文件夾占用的空間,--max-depth文件夾下顯示層級

sudo rm -rf *.log:清理日志

socket

http socket = ip:port

unix domain socket: unix process communication 進程間通信

ubuntu16.04安裝php5源:sudo apt-add-repository ppa:ondrej/php

ubuntu中文支持:sudo apt-get install language-pack-zh-hant language-pack-zh-hans

mysql

數(shù)據(jù)清理:TRUNCATE TABLE XXX

水平分表:MERGE關(guān)鍵字

完全克隆一張表:

克隆表結(jié)構(gòu):CREATE TABLE table_copy LIKE table_destination

克隆數(shù)據(jù):INSERT INTO table_copy SELECT * FORM table_destination

重命名字段:ALTER TABLE table_destination CHANGE column_destination new_name data_type

導(dǎo)出數(shù)據(jù): mysqldump -h 127.0.0.1 -u root -p "database_name" "table_name" --where="condition" > file_name.sql

導(dǎo)入數(shù)據(jù):source "flie"

php:

json_encode($data, JSON_UNESCAPED_UNICODE)

php的自定義頭信息都可以使用$_SERVER["HTTP_*"]來獲取

如果你想知道腳本開始執(zhí)行(譯注:即服務(wù)器端收到客戶端請求)的時刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()

error_log(json_encode($data, JSON_UNESCAPED_UNICODE), 1/3, "[email protected]/log_path")

sudo watch service php5.6-fpm status

foreach后的好習(xí)慣reset指針位置,unset掉$key,$value

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

laravel ["l?r?,v?l]

php中的語言結(jié)構(gòu):echo,exit(),print,empty(),unset(),isset(),list(),eval(),array()

git:

git commit --amend 重寫最近commit message

git cherry-pick 移花接木

composer:

修改包來源: sudo composer config repositories.包名 vcs 包地址

PHP的不足

PHP還是有很多不足的地方,比如無法進行高效的運算

互聯(lián)網(wǎng)協(xié)議

概括:從上到下,越上越接近用戶,越下越接近硬件

應(yīng)用層:

規(guī)定應(yīng)用程序的數(shù)據(jù)格式

[HEAD(以太網(wǎng)標(biāo)頭) [HEAD(IP標(biāo)頭) [HEAD(TCP標(biāo)頭) DATA(應(yīng)用層數(shù)據(jù)包)]]]

傳輸層(端口到端口的通信):

端口:

0到65535(2^16)的整數(shù)

進程使用網(wǎng)卡的編號

通過IP+mac確定主機,只要確定主機+端口(套接字socket),就能進行程序間的通信

UDP協(xié)議:

數(shù)據(jù)包中加入端口依賴的新協(xié)議

數(shù)據(jù)包[HEAD(發(fā)送、接收mac) [HEAD(發(fā)送、接收ip) [HEAD(發(fā)送、接收端口) DATA]]]

簡單,可靠性差,不知道對方是否接受包

TCP協(xié)議:

帶有確認機制的UDP協(xié)議

過程復(fù)雜,實現(xiàn)困難,消耗資源

  tcp/ip connect: tcp/ip的三次握手
          syn握手信號
          ------------->
          syn/ack確認字符
  client  <-------------  server
          ack確認包
          -------------->

網(wǎng)絡(luò)層(主機到主機的通信):

IP協(xié)議

ipv4:

32個二進制位表示,由網(wǎng)絡(luò)部分和主機部分構(gòu)成,

子網(wǎng)掩碼: 網(wǎng)絡(luò)部分都為1,主機部分都為0,目的判斷ip的網(wǎng)絡(luò)部分,如255.255.255.0(11111111.11111111.11111111.00000000)

IP數(shù)據(jù)包:標(biāo)頭Head+數(shù)據(jù)Data,放進以太網(wǎng)數(shù)據(jù)包的Data部分[HEAD [HEAD DATA]]

IP數(shù)據(jù)包的傳遞:

非同一網(wǎng)絡(luò):無法獲得mac地址,發(fā)送數(shù)據(jù)到網(wǎng)關(guān),網(wǎng)關(guān)處理

同一網(wǎng)絡(luò):mac地址填寫FF:FF:FF:FF:FF:FF:FF,廣播數(shù)據(jù),對比ip,不符合丟包

鏈接層:

定義數(shù)據(jù)包(幀F(xiàn)rame)

標(biāo)頭(Head):數(shù)據(jù)包的一些說明項, 如發(fā)送者、接收者、數(shù)據(jù)類型

數(shù)據(jù)(Data):數(shù)據(jù)包的具體內(nèi)容

數(shù)據(jù)包:[HEAD DATA]

定義網(wǎng)卡和網(wǎng)卡唯一的mac地址

以太網(wǎng)規(guī)定接入網(wǎng)絡(luò)的所有終端都應(yīng)該具有網(wǎng)卡接口,數(shù)據(jù)包必須是從一個網(wǎng)卡的mac地址到另一網(wǎng)卡接口的mac地址

mac全球唯一,16位16位進制組成,前6廠商編號,后6網(wǎng)卡流水號

廣播發(fā)送數(shù)據(jù)

向本網(wǎng)絡(luò)內(nèi)的所有設(shè)備發(fā)送數(shù)據(jù)包,對比接收者mac地址,不是丟包,是接受

實體層:

終端(pc,phone,pad...)的物理連接(光纜,電纜,路由...),負責(zé)傳遞0和1信號

掃面下方二維碼關(guān)注我的技術(shù)公眾號,及時為大家推送我的原創(chuàng)技術(shù)分享

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30493.html

相關(guān)文章

  • 指尖一點歌聲來--微信小程序之仿網(wǎng)易云音樂心得

    摘要:為了提高自己,最近在學(xué)習(xí)微信小程序,選題是仿網(wǎng)易云音樂。查文檔發(fā)現(xiàn),小程序中圖片加載完成后,有一個加載完成事件。前者在微信客戶端版本就不開始維護了,后者低版本需做兼容處理。目前還有一些功能暫未實現(xiàn),會在以后繼續(xù)完善項目,繼續(xù)學(xué)習(xí)。 為了提高自己,最近在學(xué)習(xí)微信小程序,選題是仿網(wǎng)易云音樂。期間踩過了大把的坑,bug出現(xiàn)的難受和解決bug歡喜,一直是伴隨我階段性學(xué)習(xí)這個項目的心情。初步完成...

    KitorinZero 評論0 收藏0
  • React 歷史項目維護與優(yōu)化實踐

    摘要:本文介紹了作者接手維護一個中型歷史項目時的一系列改進實踐,包括模塊結(jié)構(gòu)拆分業(yè)務(wù)邏輯梳理打包優(yōu)化等。代碼中如菜單名稱結(jié)構(gòu)表單字段名等的各種硬編碼配置分散在各處。最后,在提升面向開發(fā)者的打包體驗方面,本次優(yōu)化中主要實現(xiàn)的是與的解耦。 本文介紹了作者接手維護一個中型 React 歷史項目時的一系列改進實踐,包括模塊結(jié)構(gòu)拆分、業(yè)務(wù)邏輯梳理、Webpack 打包優(yōu)化等。 背景 這是一個 PC 的...

    toddmark 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<