整理

HTML中DTD意義和作用

DTD文檔類型定義,是一種保證html文檔格式正確的有效方法,在解析網(wǎng)頁(yè)時(shí),瀏覽器將使用DTD來檢查頁(yè)面的有效性(是否符合規(guī)范,元素和標(biāo)簽使用是否正確) 并且采取相應(yīng)的措施.同時(shí)它還會(huì)影響瀏覽器的渲染模式(工作模式)

XHTML和HTML的區(qū)別

xhtml必須強(qiáng)制指定義文檔類型
XHTML所有標(biāo)簽必須閉合,html比較隨意
xhtml嚴(yán)格區(qū)別大小寫,所有標(biāo)簽的元素和屬性的名字都必須使用小寫
xhtml要求所有標(biāo)記都必須要有一個(gè)相應(yīng)的結(jié)束標(biāo)記
xhtml規(guī)定所有屬性都必須有一個(gè)值,沒有值就重復(fù)本身 比如checked="checked" 

div和span標(biāo)簽的區(qū)別

語(yǔ)義化角度:div,span對(duì)于包含元素?zé)o意義,P是語(yǔ)義化標(biāo)簽,表示一個(gè)段落
顯示角度: span行內(nèi)元素前后不斷行(內(nèi)聯(lián)元素) 
div,p 是塊級(jí)元素,要斷行且P斷兩行

列舉常用的meta元素

<meta name='kegwords' content=''> 向搜索引擎說明你的網(wǎng)頁(yè)的關(guān)鍵詞

<meta http-equiv="Pragma" content="no-cache" />  禁止瀏覽器從本地計(jì)算機(jī)的緩存中訪問頁(yè)面內(nèi)容

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 用于告知瀏覽器以何種版本渲染當(dāng)前頁(yè)面

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 舊的 不推薦  <meta charset="UTF-8" >  html5推薦

<meta http-equiv="refresh" content="30;URL="http://www.baidu.com" >
讓網(wǎng)頁(yè)在一定的時(shí)間內(nèi)刷新自己,或者在多長(zhǎng)時(shí)間后跳轉(zhuǎn)到其他網(wǎng)頁(yè)

<meta http-equiv="Cache-Control" content="no-siteapp" />
避免百度打開網(wǎng)頁(yè)時(shí)可能會(huì)對(duì)其進(jìn)行轉(zhuǎn)碼

<meta http-equiv="expires" content="Sat, 29 Apr 2017 04:25:02 GMT" >
指定網(wǎng)頁(yè)的過期時(shí)間,過期后必須重新請(qǐng)求服務(wù)器

<meta name="description" content="前端博客知識(shí)分享" />
網(wǎng)站內(nèi)容描述,用來告訴搜索引擎你網(wǎng)站的主要內(nèi)容

<meta name="author" content="Caroline,xx@xxxx.com" />
標(biāo)注網(wǎng)頁(yè)的作者 比如 phpopenfather--

<meta name="renderer" content="webkit/ie-comp/ie-stand" /> 
雙核瀏覽器的渲染方式,用于指定雙核瀏覽器默認(rèn)以何種方式渲染頁(yè)面

怪異模式和xhtml模式下IE的寬的區(qū)別

標(biāo)準(zhǔn)模式指瀏覽器按照w3c標(biāo)準(zhǔn)解析執(zhí)行代碼
怪異模式則是使用瀏覽器自己的方法解析執(zhí)行代碼,解析模式與網(wǎng)頁(yè)中DTD聲明直接相關(guān),忽略DTD聲明,將是網(wǎng)頁(yè)進(jìn)入怪異模式

如何添加html元素事件

直接視同元素的屬性 如<img onclick = 'alert(1)'; />
使用DOM0級(jí)事件,簡(jiǎn)單,兼容性好
使用DOM2級(jí)事件,功能更強(qiáng)大 在非標(biāo)準(zhǔn)瀏覽器中使用addEventListener

strlen()和mb_strlen

都是用于獲取字符串長(zhǎng)度
strlen計(jì)算的是字符串的總字節(jié)數(shù),只針對(duì)單字節(jié)編碼字符
mb_stalen 獲取字符數(shù),要開啟mbstring擴(kuò)展并制定字符集

include與require

都是把另外一個(gè)文件包含到當(dāng)前文件 
include被包含的文件不存在的話,提示錯(cuò)誤 代碼繼續(xù)執(zhí)行
require包含文件不存在的話或無(wú)法打開 導(dǎo)致一個(gè)致命錯(cuò)誤 中斷代碼執(zhí)行
include_once和require_one被包含的文件只引入一次,可避免重復(fù)引入

預(yù)定義全局變量

 $_SERVER['REMOTE_ADDR']  瀏覽當(dāng)前頁(yè)面的用戶的 IP 地址
    $_SERVER['REMOTE_HOST']  瀏覽當(dāng)前頁(yè)面的用戶的主機(jī)名
    $_SERVER['REMOTE_PORT']  用戶機(jī)器上連接到 Web 服務(wù)器所使用的端口號(hào)
 
    $_SERVER['SERVER_ADDR']  當(dāng)前運(yùn)行腳本所在的服務(wù)器的 IP 地址    
    $_SERVER['SERVER_NAME']  當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名
    $_SERVER['SERVER_PORT']  當(dāng)前運(yùn)行腳本所在的服務(wù)器的端口號(hào)
 
    $_SERVER['REQUERT_METHOD']  訪問頁(yè)面使用的請(qǐng)求方法
    $_SERVER['REQUERT_TIME']  請(qǐng)求開始時(shí)的時(shí)間戳
    $_SERVER['REQUEST_URI']  URI 用來指定要訪問的頁(yè)面
    $_SERVER['QUERY_STRING'] query string(查詢字符串),如果有的話,通過它進(jìn)行頁(yè)面訪問。 
 
    $_SERVER['SCRIPT_FILENAME']  當(dāng)前執(zhí)行腳本的絕對(duì)路徑。 
    $_SERVER['HTTP_HOST']  當(dāng)前訪問頁(yè)面的域名
 
    當(dāng)前訪問頁(yè)面的地址 $_SERVER['HTTP_HOST']. $_SERVER['REQUEST_URI']  

GET和POST

get發(fā)送請(qǐng)求HTTP協(xié)議通過url參數(shù)傳遞進(jìn)行接收,而POST是實(shí)體數(shù)據(jù),可以通過表單提交大量信息
get不安全,數(shù)據(jù)會(huì)顯示在url地址欄 ,Post比較安全
get有限制255字符大小限制2KB  post從理論上來數(shù)無(wú)限制 默認(rèn)設(shè)置為8M 可通過php.ini中設(shè)置
get值分開傳送,post把值集中傳送
get非常靈活  , post必須依存表單

echo print print_r()

echo 是一個(gè)語(yǔ)言結(jié)構(gòu),輸出一個(gè)或多個(gè)字符串
print 實(shí)際上不是一個(gè)函數(shù) 而是一個(gè)語(yǔ)言結(jié)構(gòu),因此可以不加括號(hào) 輸出一個(gè)字符串
print_r()是一個(gè)函數(shù),打印變量的信息,基本類型數(shù)組,對(duì)象

sort() asort() ksort()

sort 根據(jù)數(shù)組中元素的值以英文字母順序排序,索引鍵會(huì)由0到n-1重新編號(hào),主要是當(dāng)數(shù)組索引鍵的值無(wú)關(guān)緊要時(shí)用來把數(shù)據(jù)排序
asort() 對(duì)數(shù)組進(jìn)行排序 數(shù)組的索引保持和單元關(guān)聯(lián),主要用于對(duì)那些單元順序很重要的結(jié)合數(shù)組進(jìn)行排序
ksort() 根據(jù)數(shù)組中索引鍵的值,以英文字母順序排序,特別適合用于希望把索引鍵排序的關(guān)聯(lián)數(shù)組

PHP

php是超文本預(yù)處理器的字母縮寫是一種被廣泛應(yīng)用的開放源代碼的多用途腳本語(yǔ)言,可嵌入html,尤其適合web開發(fā)
php腳本有三個(gè)領(lǐng)域
1)服務(wù)器腳本
2)命令行腳本
3)編寫桌面應(yīng)用程序

數(shù)組涉及到的常用函數(shù)

array--聲明一個(gè)數(shù)組
count -- 計(jì)算數(shù)組中單元數(shù)目或?qū)ο笾械膶傩詡€(gè)數(shù)
foreach -- 遍歷數(shù)組
list -- 遍歷數(shù)組 可用于交換變量值
explode -- 將字符串轉(zhuǎn)成數(shù)組
implode -- 將數(shù)組轉(zhuǎn)成一個(gè)新字符串
array_merge -- 合并一個(gè)或多個(gè)數(shù)組
is_array -- 檢查是否是數(shù)組
print_r  --  輸出數(shù)組
sort -- 數(shù)組排序
array_keys -- 返回?cái)?shù)組中所有的鍵
array_values -- 返回?cái)?shù)組中所有的值
key --從關(guān)聯(lián)數(shù)組中取得鍵名

字符串的常用函數(shù)

trim() -- 去除首尾空格
strlen() -- 字符串長(zhǎng)度
strpos() --找字符串在另一字符串中第一次出現(xiàn)的位置
substr() -- 截取字符串
str_replace() -- 替換字符串函數(shù)
substr_replace() -- 對(duì)指定字符串中的部分字符串進(jìn)行替換
strstr() -- 檢索字符串函數(shù)
implode() -- 將數(shù)組合并成字符串
str_repent() -- 重復(fù)一個(gè)字符串
addslashes() -- 轉(zhuǎn)義字符串
htmlspelialchars() HTML實(shí)體轉(zhuǎn)義

sql安全性

防止sql注入 -- 對(duì)特殊字符進(jìn)行轉(zhuǎn)義,過濾或使用預(yù)編譯的sql語(yǔ)句綁定變量
最小權(quán)限原則 -- 為不同類型的動(dòng)作或組件使用不同的賬戶 特別不要使用root賬戶
當(dāng)sql運(yùn)行出錯(cuò)時(shí)不要把數(shù)據(jù)庫(kù)返回的錯(cuò)誤信息全部顯示給用戶,以防止泄露服務(wù)器和數(shù)據(jù)庫(kù)相關(guān)信息

索引 主鍵 唯一索引 聯(lián)合索引

索引是一種特殊的文件,包含著對(duì)數(shù)據(jù)表里所有記錄的引用指針

普通索引(index) 的唯一任務(wù)是加快對(duì)數(shù)據(jù)的訪問速度

唯一索引和 普通索引 允許被索引的數(shù)據(jù)列包含重復(fù)的值 ,如果能確定某個(gè)數(shù)據(jù)列將只包含彼此各不同的值就可以使用關(guān)鍵字unique定義為唯一索引 可保證數(shù)據(jù)記錄的唯一性

主鍵:特殊的唯一索引,在一張表中只能有一個(gè)主鍵索引,用于唯一標(biāo)識(shí)一條記錄

聯(lián)合索引:索引可以覆蓋多個(gè)數(shù)據(jù)列

索引可以極大的提高數(shù)據(jù)的查詢速度,但是會(huì)降低插入,刪除,更新表的速度, 因?yàn)樵趫?zhí)行這些操作時(shí),還要操作索引文件

sql優(yōu)化

盡量選擇較小的列
將where中用的比較頻繁的字段建立索引
select 字句避免使用'*'
避免在索引列上使用計(jì)算 .<> . not in 的操作
當(dāng)只需要一行數(shù)據(jù)時(shí) 使用limit 
保證表單數(shù)據(jù)不超過200w 適當(dāng)分割表 - 分區(qū) -分表
針對(duì)查詢慢的sql語(yǔ)句使用explain分析語(yǔ)句具體的執(zhí)行情況

mysql_fetch_row 和mysql_fetch_array

mysql_fetch_row() 是從指定的結(jié)果標(biāo)識(shí)關(guān)聯(lián)的結(jié)果集中取得一行數(shù)據(jù)并作為數(shù)據(jù)返回,每個(gè)結(jié)果的列儲(chǔ)存在一個(gè)數(shù)組的單元中 偏移量(下標(biāo))從0開始
mysql_fetch_array 是fetch_row 的擴(kuò)展版本,除了將數(shù)字索引方式存儲(chǔ)存在數(shù)組之外,還可以將數(shù)據(jù)作為關(guān)聯(lián)索引存儲(chǔ),用字段名作為鍵名
mysql_fetch_array 中可選的第二個(gè)參數(shù) result_type 是一個(gè)常量可以接受以下值:mysql_assoc mysql_num和mysql_BOTH 其默認(rèn)值為mysql_BOTH

PHP訪問數(shù)據(jù)庫(kù)的步驟

mysql_connect ('127.0.0.1','root','root','數(shù)據(jù)庫(kù)名')  連接數(shù)據(jù)庫(kù)
mysql_select_db('數(shù)據(jù)庫(kù)名') 選擇數(shù)據(jù)庫(kù)
mysql_query('set names utf8') 設(shè)置字符集
mysql_query(sql) 執(zhí)行sql語(yǔ)句
mysql_close($link) 關(guān)閉連接

mysql外連接 內(nèi)連接,自連接?

交叉連接又稱笛卡爾積,它是指不使用任何條件,直接將一個(gè)表的所有記錄和另一個(gè)表中的所有記錄一一匹配

內(nèi)連接則是只有條件的交叉連接,根據(jù)某個(gè)條件篩選出符合條件的記錄,不符合條件的記錄不會(huì)出現(xiàn)的結(jié)果集中,即內(nèi)連接只有連接匹配的行

外連接 其結(jié)果集不僅包含符合連接條件的行,而且還會(huì)包含左表和右表或兩個(gè)表中的所有數(shù)據(jù)行,有一次稱之為左外連接,右外連接

左連接 也稱為左連接,左表為主表為主表,左表中的所有記錄都會(huì)出現(xiàn)在結(jié)果集中,對(duì)于那些在右表中并沒有匹配的記錄,仍然要顯示,右表也對(duì)應(yīng)的那些字段值以NUll來填充

右外連接 也稱右連接,右表為主,右表中的所有記錄都會(huì)出現(xiàn)在結(jié)果集中

MySQL中MYISAM和InnoDB

a. MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持.
b. MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快.
c. InnoDB不支持FULLTEXT類型的索引.
d. InnoDB 中不保存表的具體行數(shù),也就是說,
執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來計(jì)算有多少行,
但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可.
e. 對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
f. DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。
g. LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,
但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用.
h. MyISAM支持表鎖,InnoDB支持行鎖。

存儲(chǔ)過程的適用情況

當(dāng)需要處理復(fù)雜的查詢和運(yùn)算時(shí),可以使用存儲(chǔ)過程

從應(yīng)用分層的原則,大量使用存儲(chǔ)過程導(dǎo)致業(yè)務(wù)邏輯分散在DB和應(yīng)用服務(wù)器層,不利于維護(hù)和更新

總體來說,存儲(chǔ)程序可以用,但要慎用,最好只用來維護(hù),不利于業(yè)務(wù)邏輯和支撐高并發(fā)性能的東西

MVC

MVC是一種架構(gòu)設(shè)計(jì)模式是一種設(shè)計(jì)理念.是為了達(dá)到分層設(shè)計(jì)的目的,從而使代碼解耦合,便于維護(hù)和代碼的復(fù)用,通俗來說,MVC可以讓你的代碼結(jié)構(gòu)更加清晰明了
它的實(shí)現(xiàn)是把代碼分為模型,視圖,控制器三個(gè)部分,model層負(fù)責(zé)提供數(shù)據(jù),和數(shù)據(jù)庫(kù)有關(guān)的操作都交給模型層來處理,view層則提供交互的界面,并輸出數(shù)據(jù),二controller層負(fù)責(zé)接收請(qǐng)求,并分發(fā)給相應(yīng)的model來處理,然后給view層來顯示

GD

GD庫(kù)提供了一系列用于處理圖片的API,使用GD庫(kù)可以處理圖片或者生成圖片,在網(wǎng)站上GD庫(kù)通常用來生成縮略圖或者用來對(duì)圖片加水印或者對(duì)網(wǎng)站數(shù)據(jù)生成報(bào)表

SESSION和COOKIE

cookie 保存在客戶端 而session保存在服務(wù)端
從保存內(nèi)容的類型角度來講,cookie只保存字符串和數(shù)字,而session可以保存除資源以外所有的數(shù)據(jù)類型
從保存內(nèi)容的大小角度來講,cookie保存的內(nèi)容比較小,只有2K左右 而session從理論來說無(wú)限制
從性能上角度來說,session對(duì)服務(wù)器的壓力更大
禁用cookie的話cookie失效,而session可以不基于cookie而是用get或SID 仍然生效

狀態(tài)碼

200  -OK 服務(wù)器成功處理請(qǐng)求
301  - 重定向錯(cuò)誤
301  - 自從上一次未修改,瀏覽器讀取緩存
403  - 禁止  請(qǐng)求被服務(wù)器拒絕
404  - 未找到資源
500  - 服務(wù)器錯(cuò)誤
503 : 服務(wù)器臨時(shí)維護(hù)或過載。這個(gè)狀態(tài)時(shí)臨時(shí)性的。

AJAX

ajax是javascript/xml/css/dom等多個(gè)技術(shù)的組合
工作原理是一個(gè)頁(yè)面的指定位置可以加載另一個(gè)頁(yè)面的所有輸出的內(nèi)容這樣就實(shí)現(xiàn)了一個(gè)靜態(tài)網(wǎng)頁(yè)在不刷新整個(gè)頁(yè)面的情況下也能獲取數(shù)據(jù)庫(kù)中的返回?cái)?shù)據(jù)信息
核心技術(shù):xml/httpRequest 它是javascript中的一個(gè)對(duì)象
優(yōu)點(diǎn):減輕了服務(wù)器端負(fù)擔(dān),將一部分以前有服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)移到客戶端,利用客戶端閑置的資源進(jìn)行處理了再只局部刷新的情況下更新頁(yè)面,減少了用戶等待時(shí)間,同時(shí)也降低了網(wǎng)絡(luò)流量,增強(qiáng)了客戶體驗(yàn)度
缺點(diǎn): 不利于SEO推廣優(yōu)化,因?yàn)樗阉饕鏌o(wú)法直接訪問到ajax請(qǐng)求的內(nèi)容

大型項(xiàng)目?jī)?yōu)化的方向

代碼優(yōu)化
開啟opcode緩存,減少額外CPU和內(nèi)存開銷,加快代碼運(yùn)行速度
重模型輕控制器,減少冗余
符合PHP-FIG規(guī)范和phpDoc規(guī)范,增強(qiáng)代碼可讀性&可擴(kuò)展性有利于團(tuán)隊(duì)開發(fā)
類: 花括號(hào)獨(dú)占一行
類中方法:華括號(hào)獨(dú)占一行
類名:大駝峰
方法名:小駝峰
命名空間:后面空一行
常量名:大寫,多個(gè)單詞用下劃線分割

數(shù)據(jù)庫(kù)優(yōu)化
架構(gòu):主從復(fù)制、讀寫分離
設(shè)計(jì):存儲(chǔ)引擎、字段類型、三范式
功能:緩存、分區(qū)、索引

緩存優(yōu)化
好處:減少數(shù)據(jù)庫(kù)查詢,將數(shù)據(jù)緩存,加快查詢數(shù)據(jù)
實(shí)現(xiàn):
內(nèi)存(memcache、redis)
文件(使用TP3.2的大S或大F方法  TP5中Cache類) 

架構(gòu)優(yōu)化
負(fù)載均衡、集群、動(dòng)靜分離、讀寫分離、主從復(fù)制、CDN加速等
    負(fù)載均衡:將用戶的請(qǐng)求分配給多個(gè)服務(wù)器處理(輪著來,ip哈希)
    集群:多個(gè)服務(wù)器實(shí)現(xiàn)相同的業(yè)務(wù)
    分布式概念:多臺(tái)服務(wù)器實(shí)現(xiàn)不同的業(yè)務(wù)
    動(dòng)靜分離:將靜態(tài)資源單獨(dú)放一臺(tái)服務(wù)器
    主從復(fù)制:insert/update/delete到主服務(wù)器執(zhí)行,所有從服務(wù)器檢測(cè)主服務(wù)器有寫入數(shù)據(jù)則自動(dòng)同步
    讀寫分離:通過PHP判斷,如果是insert/update/delete交給主處理,如果是select交給從服務(wù)器
    CDN加速:將靜態(tài)資源緩存到用戶所在城市,加快訪問速度

memcache

就是一個(gè)數(shù)據(jù)庫(kù)、但是數(shù)據(jù)存在內(nèi)存中
用來做緩存服務(wù)器、將從數(shù)據(jù)庫(kù)查詢的數(shù)據(jù)緩存起來,減少數(shù)據(jù)庫(kù)查詢、加快查詢速度

memcached 內(nèi)部不會(huì)監(jiān)視記錄是否過期
檢查記錄是否過期.這種技術(shù)被稱為惰性過期
好處 : 減少監(jiān)控過期產(chǎn)生的開銷

最近最少使用算法 (LRU:Least Recently Used)
緩存空間已滿 采用LRU策略
將使用頻率最低數(shù)據(jù)進(jìn)行刪除


單個(gè)key鍵名最大長(zhǎng)度為多少?
最大長(zhǎng)度是250個(gè)字符
單個(gè)鍵最大存儲(chǔ)數(shù)據(jù)為 1M
最大存儲(chǔ)時(shí)間為30天 (3600*24*30) 內(nèi)都可以
0 為理論上永久 重啟后數(shù)據(jù)會(huì)消失 數(shù)據(jù)滿后 LRU也可以移除

事務(wù)

是作為一個(gè)單元的一組有序的數(shù)據(jù)庫(kù)操作,如果組中的所有操作都成功,則為事務(wù)成功,即使只有一個(gè)操作失敗,事務(wù)整個(gè)都不會(huì)成功,如果所有操作完成,事務(wù)則提交其修改將作用于所有其他數(shù)據(jù)庫(kù)進(jìn)程,如果一個(gè)操作失敗,則事務(wù)回滾,改事務(wù)所有操作的響應(yīng)都將取消

如何得到一個(gè)網(wǎng)頁(yè)的內(nèi)容

file_get_contents
fopen & stream_get_contents

實(shí)際開發(fā),常量應(yīng)用在哪里

連接數(shù)據(jù)庫(kù)的信息
斬?cái)嗖糠致窂?網(wǎng)站公告信息

memcached、redis 和MySQL

Redis 和 memcached :
1、Redis只使用單核,而Memcached可以使用多核。
2、Redis在存儲(chǔ)小數(shù)據(jù)時(shí)比Memcached性能更高;而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis
3、簡(jiǎn)單的key-value存儲(chǔ),Memcached的內(nèi)存利用率更高。而如果Redis采用hash結(jié)構(gòu)來做key-value存儲(chǔ),由于其組合式的壓縮,其內(nèi)存利用率會(huì)高于Memcached
4、如果對(duì)數(shù)據(jù)持久化和數(shù)據(jù)同步有所要求,那么Redis性能高于Memcached
5、Redis相比Memcached來說,擁有更多的數(shù)據(jù)結(jié)構(gòu),并支持更豐富的數(shù)據(jù)操作
6、在Redis中,復(fù)雜的操作通常和一般的GET/SET一樣高效。需要緩存能夠支持更復(fù)雜的結(jié)構(gòu)和操作,所以Redis 在這方面的性能要更高

memcached和MySQL的query cache:
1、當(dāng)修改表時(shí),MySQL的query cache會(huì)立刻被刷新(flush)。存儲(chǔ)一個(gè)memcached 數(shù)據(jù)只需要很少的時(shí)間,但是當(dāng)寫操作很頻繁時(shí),MySQL的query cache會(huì)經(jīng)常讓所有緩存數(shù)據(jù)都失效
2、在多核CPU上,MySQL的query cache會(huì)遇到擴(kuò)展問題,同時(shí)query cache會(huì)增加一個(gè)全局鎖(global lock), 由于需要刷新更多的緩存數(shù)據(jù),速度會(huì)變得更慢
3、MySQL的query cache中,是不能存儲(chǔ)任意的數(shù)據(jù)的,只能是SQL查詢結(jié)果。而利用memcached,我們可以搭建出各種高效的緩存。比如,可以執(zhí)行多個(gè)獨(dú)立的查詢,構(gòu)建出一個(gè)用戶對(duì)象(user object),然后將用戶對(duì)象緩存到memcached中。而query cache是SQL語(yǔ)句級(jí)別的,不可能做到這一點(diǎn)。在小的網(wǎng)站中,query cache會(huì)有所幫助,但隨著網(wǎng)站規(guī)模的增加,query cache的弊將大于利。
4、query cache能夠利用的內(nèi)存容量受到MySQL服務(wù)器空閑內(nèi)存空間的限制。給數(shù)據(jù)庫(kù)服務(wù)器增加更多的內(nèi)存來緩存數(shù)據(jù),固然是很好的。但是,有了memcached,只要有空閑的內(nèi)存,都可以用來增加memcached集群的規(guī)模,然后就可以緩存更多的數(shù)據(jù)。

redis相比memcached有哪些優(yōu)勢(shì)

1) memcached所有的值均是簡(jiǎn)單的字符串,Redis作為其替代者,支持更為豐富的數(shù)據(jù)類型 
(2) redis的速度比memcached快很多 
(3) redis可以持久化其數(shù)據(jù)

適用memcached的業(yè)務(wù)場(chǎng)景

1)如果網(wǎng)站包含了訪問量很大的動(dòng)態(tài)網(wǎng)頁(yè),因而數(shù)據(jù)庫(kù)的負(fù)載將會(huì)很高。由于大部分?jǐn)?shù)據(jù)庫(kù)請(qǐng)求都是讀操作,那么memcached可以顯著地減小數(shù)據(jù)庫(kù)負(fù)載。
2)如果數(shù)據(jù)庫(kù)服務(wù)器的負(fù)載比較低但CPU使用率很高,這時(shí)可以緩存計(jì)算好的結(jié)果( computed objects )和渲染后的網(wǎng)頁(yè)模板(enderred templates)。
3)利用memcached可以緩存 session數(shù)據(jù) 、臨時(shí)數(shù)據(jù)以減少對(duì)他們的數(shù)據(jù)庫(kù)寫操作。
4)緩存一些很小但是被頻繁訪問的文件。

mongdb有哪些使用的場(chǎng)景

1網(wǎng)站數(shù)據(jù):Mongo非常適合實(shí)時(shí)的插入,更新與查詢,并具備網(wǎng)站實(shí)時(shí)數(shù)據(jù)存儲(chǔ)所需的復(fù)制及高度伸縮性。
2緩存:由于性能很高,Mongo也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由Mongo搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過載。
3大尺寸,低價(jià)值的數(shù)據(jù):使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)一些數(shù)據(jù)時(shí)可能會(huì)比較昂貴,在此之前,很多時(shí)候程序員往往會(huì)選擇傳統(tǒng)的文件進(jìn)行存儲(chǔ)。
4高伸縮性的場(chǎng)景:Mongo非常適合由數(shù)十或數(shù)百臺(tái)服務(wù)器組成的數(shù)據(jù)庫(kù)。Mongo的路線圖中已經(jīng)包含對(duì)MapReduce引擎的內(nèi)置支持。
 5用于對(duì)象及JSON數(shù)據(jù)的存儲(chǔ):Mongo的BSON數(shù)據(jù)格式非常適合文檔化格式的存儲(chǔ)及查詢。

redis的應(yīng)用場(chǎng)景

緩存——熱數(shù)據(jù)
計(jì)數(shù)器
消息隊(duì)列
位操作(大數(shù)據(jù)處理)
分布式鎖與單線程機(jī)制
最新列表
排行榜
秒殺
具體: https://www.cnblogs.com/NiceCui/p/7794659.html

mysql連接池

數(shù)據(jù)庫(kù)連接池(Connection pooling)是程序啟動(dòng)時(shí)建立足夠的數(shù)據(jù)庫(kù)連接,并將這些連接組成一個(gè)連接池,由程序動(dòng)態(tài)地對(duì)池中的連接進(jìn)行申請(qǐng),使用,釋放。
個(gè)人理解:創(chuàng)建數(shù)據(jù)庫(kù)連接是一個(gè)很耗時(shí)的操作,也容易對(duì)數(shù)據(jù)庫(kù)造成安全隱患。所以,在程序初始化的時(shí)候,集中創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)連接,并把他們集中管理,供程序使用,可以保證較快的數(shù)據(jù)庫(kù)讀寫速度,還更加安全可靠。
數(shù)據(jù)庫(kù)連接池的機(jī)制:
(1)  程序初始化時(shí)創(chuàng)建連接池
(2) 使用時(shí)向連接池申請(qǐng)可用連接
(3) 使用完畢,將連接返還給連接池
(4) 程序退出時(shí),斷開所有連接,并釋放資源

Apache與ngin服務(wù)器區(qū)別

nginx相對(duì)apache的優(yōu)點(diǎn)

輕量級(jí),同樣起web 服務(wù),比apache 占用更少的內(nèi)存及資源;
抗并發(fā),nginx 處理請(qǐng)求是異步非阻塞的,而apache 則是阻塞型的,在高并發(fā)下nginx 能保持低資源低消耗高性能
高度模塊化的設(shè)計(jì),編寫模塊相對(duì)簡(jiǎn)單;
社區(qū)活躍,各種高性能模塊出品迅速;

apache相對(duì)nginx的優(yōu)點(diǎn)

rewrite ,比nginx 的rewrite 強(qiáng)大;
模塊超多,基本想到的都可以找到;
少bug ,nginx 的bug 相對(duì)較多;
超穩(wěn)定;

抽象類和接口聯(lián)系與區(qū)別

從語(yǔ)法層面而言,接口和抽象類的區(qū)別
1.抽象類可以提供成員方法的實(shí)現(xiàn)細(xì)節(jié),而接口中只能存在抽象方法(默認(rèn) public abstract)

2.抽象類中的成員變量可以是多種類型,而接口中的成員變量必須用public static final(常量)修飾

3.一個(gè)類只能繼承一個(gè)抽象類(單繼承),但可以實(shí)現(xiàn)多個(gè)接口(多繼承)。
4.抽象類中允許含有靜態(tài)代碼塊和靜態(tài)方法,而接口類不能

從設(shè)計(jì)層面而言,接口和抽象類的區(qū)別
1.抽象類是對(duì)整一個(gè)類的屬性,行為等方面進(jìn)行抽象,而接口則是對(duì)行為抽象。。

2.抽象類是一個(gè)模板式的設(shè)計(jì),當(dāng)在開發(fā)過程中出現(xiàn)需求更改的情況,只需要更改抽象類而不需要更改它的子類。接口是一種輻射性設(shè)計(jì),當(dāng)接口的內(nèi)容發(fā)生改變時(shí),需要同時(shí)對(duì)實(shí)現(xiàn)它的子類進(jìn)行相應(yīng)的修改。

3.抽象類可以類比為模板,而接口可以類比為協(xié)議

線程與進(jìn)程

進(jìn)程:進(jìn)程是指某個(gè)應(yīng)用在處理機(jī)上的一次執(zhí)行過程,是一個(gè)動(dòng)態(tài)的概念,是一個(gè)活動(dòng)的實(shí)體。 
線程:線程是進(jìn)程的一部分,一個(gè)進(jìn)程包含多個(gè)線程在運(yùn)行。
進(jìn)程和線程都是一個(gè)時(shí)間段的描述,是CPU工作時(shí)間段的描述
定義方面: 進(jìn)程是程序在某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng);線程是進(jìn)程中的一個(gè)執(zhí)行路徑
角色方面: 在支持線程機(jī)制的系統(tǒng)中,進(jìn)程是系統(tǒng)資源分配的單位,線程是系統(tǒng)調(diào)度的單位
資源共享方面:進(jìn)程之間不能有共享資源,二線程共享所在進(jìn)程的地址空間和其他資源,同時(shí)線程還有自己的棧和棧指針,程序計(jì)算器等寄存器
獨(dú)立性方面: 進(jìn)程有己自?獨(dú)立的地址空間,而線程必須依賴進(jìn)程而存在

索引覆蓋

指如果查詢的列恰好是索引的一部分,那么查詢只需要在索引文件上進(jìn)行,不需要回到磁盤在找數(shù)據(jù),這樣查詢速度非???稱為索引覆蓋

PHP新特性

語(yǔ)言/斷言 : 代碼得不到預(yù)計(jì)結(jié)果則拋出異常
批量導(dǎo)出成員
標(biāo)量類型的聲明
返回類的限定
null合并運(yùn)算符
太空船運(yùn)算符
closure::call()方法 臨時(shí)綁定到對(duì)象上
可為空的類型
新增void()函數(shù)
新增list支持鍵名
新增object類型
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容