網路協議
計算機網路的五層協議:物理層、資料鏈路層、網路層、運輸層、應用層
計算機網路的七層協議(osi):物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層
tcp/ip(是乙個協議族,非單個協議):網路介面層、 ip層、傳輸層、應用層
網線與集線器屬於物理層
網絡卡與交換機屬於資料鏈路層
路由器屬於網路層
tcp和udp
tcp面向連線的位元組流服務,對系統資源要求較多,程式結構複雜,保證資料的正確性和順序性
udp是無連線的,面向資料報,對系統資源要求較少,程式結構簡單,不能保證資料的正確性和順序性
**安全與防護
sql注入防治方法:使用例如pdo的預處理,使用或者編寫類似mysqli_real_escape_string的方法對sql的特殊字元進行轉義
xss(cross site script)跨站指令碼攻擊:將外部指令碼植入到頁面中
防治方法:htmlspecialchars()轉義特殊字元為字元實體,strip_tags()過濾html標籤, addslashes(可轉義單雙引號反斜槓null) 在特殊字元前面加反斜槓進行轉義
防治方法:請求附加隨機token進行校驗,或驗證碼
基礎演算法相關
基本排序演算法:
氣泡排序(時間複雜度:o(n方))
for($i = 0; $i < count($arr); $i++)
for($j = 0; $j < count($arr) - 1 - $i; $j++)
if($arr[$j] < $arr[$j+1]) 兩者交換
選擇排序(時間複雜度:o(n方))
for($i = 0; $i < count($arr) - 1, $i++)
$min = $i;
for($j = $i + 1; $j < count($arr); $j++)
if($arr[$min] > $arr[$j])
$min = $j;
將最小值與當前的第i位置內容交換
快速排序思想:通過一趟排序將序列分成兩部分,一部分所有資料比另一部分所有資料小,然後在這兩個序列的內部再分別進行快速排序操作,直到最後形成乙個有序序列
二分插入排序思想(之前的序列為有序):插入第i個元素時,對前面的0~i-1進行折半,當前元素與中間元素比較,如果小,前半部分再次折半,如果大,後半部分進行折半,直到最後left>right,然後把目標位置到i-1的所有元素整體後移,把當前元素放進去
基本查詢演算法:
順序查詢
二分法查詢(折半查詢):將序列分為兩部分,找到序列的中間值,如果查詢值大於中間值,繼續對右半部分進行折半,如果查詢值小於中間值,對左半部分進行折半,直到找到或front>end結束,時間複雜度o(log2n)以2為底n的對數
設計模式
mvc是一種設計框架,而不是設計模式,框架是比模式更高的概念
model負責資料邏輯
controller負責使用者互動
view負責資料顯示
流程:使用者對控制器的某個方法發出請求,控制器呼叫相應的模型返回資料,然後將資料渲染到檢視中返回給使用者
1) 單例模式
i. 私有化構造方法和__clone方法
ii. 提供公有的靜態的方法返回例項
iii. 提供私有的靜態屬性儲存例項
2) 簡單工廠模式(重點在建立不同物件,作用就是用來建立物件的) – 例如乙個計算器的加減乘除求餘取整
i. 定義抽象基類讓子類分別繼承並實現相應方法
ii. 定義factory工廠類裡面提供靜態方法用於根據不同的引數例項化相應的子類物件
3) 策略模式(重點在於例項化不同類的解決策略不同,作用是根據不同的情況呼叫相應的策略或演算法) – 例如qq普通使用者 vip svip購買**的優惠策略
i. 定義抽象基類讓子類分別繼承並實現相應的方法
ii. 根據不同的場景例項化相應的類,然後呼叫其中的方法獲取結果
4) 觀察者模式
i. 需要有乙個抽象的主題介面和乙個抽象的觀察者介面
ii. 實現乙個主題,實現多個觀察者
iii. 例項化主題,然後呼叫主題的方法並將不同的觀察者物件例項化傳入,在主題的方法中儲存傳入的觀察者物件到乙個屬性,在主題中定義另外的方法通過儲存觀察者物件呼叫觀察者的方法
名詞解釋
orm模型:將表對映到類,將行記錄對映到例項物件,將字段對映到物件的屬性
oop:物件導向程式設計
nosql:redis、mongodb、memcached
大流量高併發**解決思路
cdn加速
減少http請求,新增非同步請求
啟用瀏覽器快取
**壓縮(去除空白符)
頁面靜態化:資訊變更不是很頻繁的頁面進行靜態化處理,生成html檔案
資料快取(資料庫快取redis,檔案快取)
使用nginx,負載均衡
mysql資料庫優化
字段資料型別優化
索引優化
sql語句優化
儲存引擎優化
表結構設計優化
分表分庫分割槽
主從複製,讀寫分離
cookie 和 session
session與cookie都是會話技術,預設情況下session在客戶端依賴於cookie
cookie儲存在客戶端,儲存的是字串,session儲存在服務端,儲存的是物件
cookie安全性低,可被攔截或從本地分析得到,session安全性高
session儲存在伺服器上,會占用伺服器的資源,理論上大小沒有限制,和伺服器記憶體有關
單個cookie儲存的資料不能超過4k,很多瀏覽器都限制乙個站點最多20個cookie
登入資訊等重要資訊存放為session,其他資訊如需保留,可以存在cookie中
include 和 require
引入檔案,include在用到時載入,require在一開始就載入
include引入檔案出現錯誤,會給出警告,並繼續執行下面**,require引入檔案出現錯誤,報出致命錯誤並終止當前程式執行
myisam 和 innodb
myisam不支援事務和外來鍵操作,innodb支援事務處理和外來鍵
myisam是表級鎖,innodb是行級鎖
執行大量的select myisam更好,執行大量的insert update用innodb更好
global 和 $globals
$globals[『var』] 是外部的全域性變數$var本身。
global $var 是外部$var的同名引用或者指標
empty 和 isset
empty以下條件會被認為空
"" (空字串)
0 (作為整數的0)
0.0 (作為浮點數的0)
"0" (作為字串的0)
null
false
array() (乙個空陣列)
$var; (乙個宣告了,但是沒有值的變數)
isset以下條件會被認為存在
變數存在並且值不是 null,則返回 true
get 和 post
get主要用於獲取資料,post主要用於提交資料
get提交引數追加在url後面,post通過http body提交
get的url會有長度上的限制,post傳遞資料理論上是無限
get提交資訊明文顯示在url上,不夠安全,post相對來說比較安全
get提交可以被瀏覽器快取,post不會被瀏覽器快取
static 和 self
self 可以用於訪問類的靜態屬性、靜態方法和常量,但 self 指向的是當前定義所在的類,這是 self 的限制。
static 也可以用於訪問類的靜態屬性、靜態方法和常量,static 指向的是實際呼叫時的類。
當進行非靜態方法呼叫時,該類名(static指向的類名)為該物件所屬的類,即實際呼叫時的物件所屬的類。
一次完整的http請求過程
2.建立tcp連線:三次握手
客戶端:你能聽到我說話嗎?
伺服器:我能聽到,你能聽到我說話嗎?
客戶端:我也能,那我開始傳送資料嘍。。
3.瀏覽器向伺服器發起http請求
4.伺服器響應http請求,返回html**
5.瀏覽器解析html**並請求html中的資源
6.瀏覽器對頁面進行渲染然後展示給使用者
7.關閉tcp連線:四次揮手
- 客戶端:「兄弟,我這邊沒資料要傳了,咱關閉連線吧。」
- 服務端:「收到,我看看我這邊有木有資料了。」
- 服務端:「兄弟,我這邊也沒資料要傳你了,咱可以關閉連線了。」
- 客戶端:「好嘞。」
MySQL 資料庫關係模型
關聯式資料庫是建立在關係模型上的。而關係模型本質上就是若干個儲存資料的二維表,可以把它們看作很多excel表。1 表的每一行稱為記錄 record 記錄是乙個邏輯意義上的資料。2 表的每一列稱為字段 column 同乙個表的每一行記錄都擁有相同的若干字段。3 字段定義了資料型別 整型 浮點型 字串 ...
linu下修改mysql資料庫面
修改密碼 1.例如你的 root使用者現在沒有密碼,你希望的密碼修改為123456,那麼命令是 mysqladmin u root password 123456 2.如果你的root現在有密碼了 123456 那麼修改密碼為abcdef的命令是 mysqladmin u root p123456 ...
面經 資料庫的索引(MySQL)
索引是資料庫中對資料查詢 檢索的一種優化方案。主要有hash索引和b tree兩種資料結構。mysql預設的innodb引擎中,預設的是b tree。hash索引底層是hash表,hash表以一種鍵值對儲存資料的結構 多個資料在儲存關係上沒有任何順序關係,在區間查詢時候無法直接通過索引查詢,就需要進...