面試總結(持續(xù)更新中.....)

1. GET和POST的區(qū)別

? 區(qū)別:

Get從服務器獲取數據蜕乡,Post向服務器傳送數據

Get傳值在url中可見,Post在url中不可見

Get傳值一般在2KB以內针余,Post傳值大小可以在php.ini中進行設置

Get安全性非常低,Post安全性較高,執(zhí)行效率卻比Post高

? 建議:

get式安全性較Post式要差些包含機密信息建議用Post數據提交式速和;

做數據查詢建議用Get式;做數據添加剥汤、修改或刪除建議用Post方式

2. SESSION和COOKIE的區(qū)別

cookie數據存放在客戶的瀏覽器上颠放,session數據放在服務器上。

cookie不是很安全吭敢,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session碰凶。

session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面欲低,應當使用COOKIE辕宏。

單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie砾莱。

3.?SESSION多服務器間共享

服務器實現的 session 復制或 session 共享瑞筐,如 webSphere或 JBOSS 在搭集群時配置實現 session 復制或 session 共享.致命缺點:不好擴展和移植。

利用成熟技術做session復制腊瑟,如12306使用的gemfire聚假,如常見內存數據庫redis或memorycache,雖較普適但依賴第三方.

將 session維護在客戶端闰非,利用 cookie膘格,但客戶端存在風險數據不安全,且可以存放的數據量較小财松,所以將session 維護在客戶端還要對 session 中的信息加密瘪贱。

第二種方案和第三種方案的合體,可用gemfire實現 session 復制共享游岳,還可將session 維護在 redis中實現 session 共享政敢,同時可將 session 維護在客戶端的cookie 中,但前提是數據要加密胚迫。

4. 瀏覽器禁用cookie后php如何保持session會話

可以用隱藏表單手動帶上sessid

在使用session時喷户,服務器會發(fā)送sessionid,標志為PHPSESSID(這個關鍵字可以在php.ini文件中配置)访锻,我們可以在超鏈接傳輸地址參數時褪尝,把PHPSESSID帶上/或者帶上常量sid,sid是php中sessionid的常量期犬,一般sid的格式為PHPSESSID=6ibdh4timhdpi14acq1ianqte6河哑,以key=value鍵值對方式記錄,value是session文件的名稱龟虎,可以在啟動session之前璃谨,指定sessionid

if (isset($_GET['PHPSESSID'])){

session_id($_GET['PHPSESSID']);

}

session_start();

5. Redis

Redis支持數據的持久化,可以將內存中的數據保存在磁盤中鲤妥,重啟的時候可以再次加載進行使用佳吞。

Redis不僅僅支持簡單的key-value類型的數據,同時還提供list棉安,set底扳,zset,hash等數據結構的存儲贡耽。

Redis支持數據的備份衷模,即master-slave模式的數據備份鹊汛。

Redis 優(yōu)勢:性能極高 豐富的數據類型 原子性 豐富的特性。

6.什么是存儲過程阱冶?用什么來調用刁憋???MySQL存儲過程

7. 數據庫優(yōu)化

(1)選擇正確的存儲引擎(2)優(yōu)化字段的數據類型(3)為搜索字段添加索引(4)只返回需要的字段,避免使用Select *(5)使用 ENUM 而不是 VARCHAR(6)盡可能的使用 NOT NULL(7)固定表的長度(8)數據分頁處理(9)減少交互次數(10)使用存儲過程(11)防止SQL注入(11)提高SQL可讀性(12)Like模糊查詢?

8. HTTP協(xié)議

基于客戶端/服務端(C/S)的架構模型熙揍,是一個無狀態(tài)的請求/響應協(xié)議职祷,通過URL進行數據傳輸和建立連接。

客戶端請求格式:請求行(request line)届囚、請求頭部(header)有梆、空行和請求數據。

服務器響應分別是:狀態(tài)行意系、消息報頭泥耀、空行和響應正文。

HTTP請求方法:GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE 和 CONNECT蛔添。

HTTP狀態(tài)碼:1**(信息), 2**(成功), 3**(重定向), 4**(客戶端錯誤), 5**(服務器錯誤)

HTTP content-type(內容類型).

9. 微信開發(fā)

1. 微信運行機制

公眾號與php之間用什么語言通信:Xml

如何接收公眾號數據的:

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收數據? XML數據

2. 消息類型

? ?微信目前提供了7種基本消息類型痰催,分別為:

(1)文本消息(text);(2)圖片消息(image)迎瞧;(3)語音(voice)(4)視頻(video)(5)地理位置(location)夸溶;(6)鏈接消息(link);(7)事件推送(event)類型凶硅。掌握不同的消息類型發(fā)送時的數據傳遞格式

10. PHP7新特性

1PHP 標量類型與返回值類型聲明

2PHP NULL 合并運算符

3PHP 太空船運算符(組合比較符)

4PHP 常量數組

5PHP 匿名類

6PHP Closure::call()

7PHP 過濾 unserialize()

8PHP IntlChar()

9PHP CSPRNG

10PHP 7 異常

11PHP 7 use 語句

12PHP 7 錯誤處理

13PHP intdiv() 函數

14PHP 7 Session 選項

15PHP 7 廢棄特性

16PHP 7 移除的擴展

17PHP 7 移除的 SAPI

11. 瀏覽器數據庫

隨著瀏覽器的處理能力不斷增強缝裁,越來越多的網站開始考慮,將大量數據儲存在客戶端足绅,這樣可以減少用戶等待從服務器獲取數據的時間捷绑。

一、localStorage ?— 本地存儲 ?可以長期存儲數據氢妈,沒有時間限制粹污。

? ? ??可以存儲 :數組、json數據首量、圖片壮吩、腳本、樣式文件

function?test(){

if(window.localStorage){//判斷瀏覽器是否支持?localStorage

var?ls=window.localStorage;

ls.setItem("name","張三");//設置值

var?name=?ls.getItem("name");//取值

ls.removeItem("name");//刪除數據

}else{

alert('瀏覽器不支持?localStorage');

}

}

?存在的局限性: 子域名之間不能共享存儲數據加缘;超出存儲范圍后可以使用 LRU粥航、FIFO 技術處理;

二生百、sessionStorage生命周期為當前窗口或標簽頁,一旦窗口或標簽頁被永久關閉了柄延,那么所有通過sessionStorage存儲的數據也就被清空了蚀浆。

三缀程、IndexedDB

1、使用IndexedDB的原因

? ? ? 現有的瀏覽器端數據儲存方案市俊,都不適合儲存大量數據:cookie不超過4KB杨凑,且每次請求都會發(fā)送回服務器端;Window.name屬性缺乏安全性摆昧,

?且沒有統(tǒng)一的標準撩满;localStorage在2.5MB到10MB之間(各家瀏覽器不同)。所以绅你,需要一種新的 ? 解 ?決方案伺帘,這就是IndexedDB誕生的背景。

2忌锯、什么是IndexedDB

? ? ? ? 通俗地說伪嫁,IndexedDB就是瀏覽器端數據庫,可以被網頁腳本程序創(chuàng)建和操作偶垮。它允許儲存大量數據张咳,提供查找接口,還能建立索引似舵。

? 這些都是localStorage所不具備的脚猾。就數據庫類型而言,IndexedDB不屬于關系型數據庫(不支持SQL查詢語 ? 句)砚哗,更接近NoSQL數據庫龙助。

3、IndexedDB的特點频祝。

(1) ? ? ?鍵值對儲存泌参。?IndexedDB內部采用對象倉庫(object store)存放數據。所有類型的數據都可以直接存入常空,包括JavaScript對象沽一。在對象倉庫中,

? ? ? ? 數據以“鍵值對”的形式保存漓糙,每一個數據都有對應的鍵名铣缠,鍵名是獨一無二的,不能有重復昆禽,否則會拋出一個錯誤蝗蛙。

(2)異步。?IndexedDB操作時不會鎖死瀏覽器醉鳖,用戶依然可以進行其他操作捡硅,這與localStorage形成對比,后者的操作是同步的盗棵。異步設計是為了防止大量數據的讀寫壮韭,拖慢網頁的表現北发。

(3)支持事務。?IndexedDB支持事務(transaction)喷屋,這意味著一系列操作步驟之中琳拨,只要有一步失敗,整個事務就都取消屯曹,數據庫回到事務發(fā)生之前的狀態(tài)狱庇,不存在只改寫一部分數據的情況。

(4)同域限制?IndexedDB也受到同域限制恶耽,每一個數據庫對應創(chuàng)建該數據庫的域名密任。來自不同域名的網頁,只能訪問自身域名下的數據庫驳棱,而不能訪問其他域名下的數據庫批什。

(5)儲存空間大?IndexedDB的儲存空間比localStorage大得多,一般來說不少于250MB社搅。IE的儲存上限是250MB驻债,Chrome和Opera是剩余空間的某個百分比,Firefox則沒有上限形葬。

(6)支持二進制儲存合呐。?IndexedDB不僅可以儲存字符串,還可以儲存二進制數據笙以。

目前淌实,Chrome 27+、Firefox 21+猖腕、Opera 15+和IE 10+支持這個API拆祈,但是Safari完全不支持。

IndexedDB是HTML5規(guī)范里新出現的瀏覽器里內置的數據庫倘感。對于在瀏覽器里存儲數據放坏,你可以使用cookies或local storage,但它們都是比較簡單的技術老玛,而IndexedDB提供了類似數據庫風格的數據存儲和使用方式淤年。存儲在IndexedDB里的數據是永久保存,不像cookies那樣只是臨時的蜡豹。IndexedDB里提供了查詢數據的功能麸粮,在online和offline模式下都能使用。你可以用IndexedDB存儲大型數據镜廉。

IndexedDB里數據以對象的形式存儲弄诲,每個對象都有一個key值索引。IndexedDB里的操作都是事務性的娇唯。一種對象存儲在一個objectStore里齐遵,objectStore就相當于關系數據庫里的表凤巨。IndexedDB可以有很多objectStore,objectStore里可以有很多對象洛搀。每個對象可以用key值獲取。

IndexedDB vs LocalStorage

IndexedDB和LocalStorage都是用來在瀏覽器里存儲數據佑淀,但它們使用不同的技術留美,有不同的用途,你需要根據自己的情況適當的選擇使用哪種伸刃。LocalStorage是用key-value鍵值模式存儲數據谎砾,但跟IndexedDB不一樣的是,它的數據并不是按對象形式存儲捧颅。它存儲的數據都是字符串形式景图。如果你想讓LocalStorage存儲對象,你需要借助JSON.stringify()能將對象變成字符串形式碉哑,再用JSON.parse()將字符串還原成對象挚币。但如果要存儲大量的復雜的數據,這并不是一種很好的方案扣典。畢竟妆毕,localstorage就是專門為小數量數據設計的,它的api是同步的贮尖。

IndexedDB很適合存儲大量數據笛粘,它的API是異步調用的。IndexedDB使用索引存儲數據湿硝,各種數據庫操作放在事務中執(zhí)行薪前。IndexedDB甚至還支持簡單的數據類型。IndexedDB比localstorage強大得多关斜,但它的API也相對復雜示括。

對于簡單的數據,你應該繼續(xù)使用localstorage蚤吹,但當你希望存儲大量數據時例诀,IndexedDB會明顯的更適合,IndexedDB能提供你更為復雜的查詢數據的方式裁着。

IndexedDB vs Web SQL

WebSQL也是一種在瀏覽器里存儲數據的技術繁涂,跟IndexedDB不同的是,IndexedDB更像是一個NoSQL數據庫二驰,而WebSQL更像是關系型數據庫扔罪,使用SQL查詢數據。W3C已經不再支持這種技術桶雀。具體情況請看:http://www.w3.org/TR/webdatabase/矿酵。

因為不再支持唬复,所以你就不要在項目中使用這種技術了。

IndexedDB vs Cookies

Cookies(小甜點)聽起來很好吃全肮,但實際上并不是敞咧。每次HTTP接受和發(fā)送都會傳遞Cookies數據,它會占用額外的流量辜腺。例如休建,如果你有一個10KB的Cookies數據,發(fā)送10次請求评疗,那么测砂,總計就會有100KB的數據在網絡上傳輸。Cookies只能是字符串百匆。瀏覽器里存儲Cookies的空間有限砌些,很多用戶禁止瀏覽器使用Cookies。所以加匈,Cookies只能用來存儲小量的非關鍵的數據存璃。

IndexedDB的用法

想要理解IndexedDB,最好的方法是創(chuàng)建一個簡單的web應用:把你們班的學生的學號和姓名存儲在IndexedDB里矩动。IndexedDB里提供了簡單的增有巧、刪、改悲没、查接口篮迎。

打開一個IndexedDB數據庫

首先,你需要知道你的瀏覽器是否支持IndexedDB示姿。請使用最新版的谷歌瀏覽器或火狐瀏覽器甜橱。低版本的IE是不行的。

window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;

if(!window.indexedDB)

{

? ? console.log("你的瀏覽器不支持IndexedDB");

}

一旦你的瀏覽器支持IndexedDB栈戳,我們就可以打開它岂傲。你不能直接打開IndexedDB數據庫。IndexedDB需要你創(chuàng)建一個請求來打開它子檀。

var request = window.indexedDB.open("testDB", 2);

第一個參數是數據庫的名稱镊掖,第二個參數是數據庫的版本號。版本號可以在升級數據庫時用來調整數據庫結構和數據褂痰。

但你增加數據庫版本號時亩进,會觸發(fā)onupgradeneeded事件,這時可能會出現成功缩歪、失敗和阻止事件三種情況归薛。

var db;

request.onerror = function(event){

? ? console.log("打開DB失敗", event);

}

request.onupgradeneeded? = function(event){

? ? console.log("Upgrading");

? ? db = event.target.result;

? ? var objectStore = db.createObjectStore("students", { keyPath : "rollNo" });

};

request.onsuccess? = function(event){

? ? console.log("成功打開DB");

? ? db = event.target.result;

}

onupgradeneeded事件在第一次打開頁面初始化數據庫時會被調用,或在當有版本號變化時。所以主籍,你應該在onupgradeneeded函數里創(chuàng)建你的存儲數據习贫。如果沒有版本號變化,而且頁面之前被打開過千元,你會獲得一個onsuccess事件苫昌。如果有錯誤發(fā)生時則觸發(fā)onerror事件。如果你之前沒有關閉連接幸海,則會觸發(fā)onblocked事件蜡歹。

在上面的代碼片段里,我們創(chuàng)建了一個Object Store涕烧,叫做“students”,用“rollNo”做數據鍵名汗洒。

往ObjectStore里新增對象

為了往數據庫里新增數據议纯,我們首先需要創(chuàng)建一個事務,并要求具有讀寫權限溢谤。在indexedDB里任何的存取對象的操作都需要放在事務里執(zhí)行瞻凤。

var transaction = db.transaction(["students"],"readwrite");

transaction.oncomplete = function(event) {

? ? console.log("Success");

};

transaction.onerror = function(event) {

? ? console.log("Error");

};?

var objectStore = transaction.objectStore("students");

objectStore.add({rollNo: rollNo, name: name});

從ObjectStore里刪除對象

刪除跟新增一樣,需要創(chuàng)建事務世杀,然后調用刪除接口阀参,通過key刪除對象。

db.transaction(["students"],"readwrite").objectStore("students").delete(rollNo);

我把語句合并到了一起瞻坝,變得更簡單蛛壳,但效果是一樣的。

通過key取出對象

往get()方法里傳入對象的key值所刀,取出相應的對象衙荐。

var request = db.transaction(["students"],"readwrite").objectStore("students").get(rollNo);

request.onsuccess = function(event){

? ? console.log("Name : "+request.result.name);? ?

};

更新一個對象

為了更新一個對象,首先要把它取出來浮创,修改忧吟,然后再放回去。

var transaction = db.transaction(["students"],"readwrite");

var objectStore = transaction.objectStore("students");

var request = objectStore.get(rollNo);

request.onsuccess = function(event){

? ? console.log("Updating : "+request.result.name + " to " + name);

? ? request.result.name = name;

? ? objectStore.put(request.result);

};

12.簡單理解php的socket編程

13.三層結構

????????所謂三層體系結構斩披,是在客戶端與數據庫之間加入了一個中間件層溜族,也叫組件層。這里所 說的三層體系垦沉,不是指物理上的三層煌抒,不是簡單地放置三臺機器就是三層體系結構,也 不僅僅有B/S應用才是三層體系結構乡话,三層是指邏輯上的三層摧玫,即使這三個層放置到一 臺機器上。 三層體系的應用程序將業(yè)務規(guī)則、數據訪問诬像、合法性校驗等工作放到了中 間層進行處理屋群。通常情況下,客戶端不直接與數據庫進行交互坏挠,而是通過COM/DCOM通 訊與中間層建立連接芍躏,再經由中間層與數據庫進行交換。

概念

表現層(UI):通俗講就是展現給用戶的界面降狠,即用戶在使用一個系統(tǒng)的時候他的所見所得对竣。

業(yè)務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作榜配,對數據業(yè)務邏輯處理否纬。

數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添蛋褥、刪除临燃、修改、查找等烙心。

?優(yōu)點

無需開發(fā)客戶端軟件膜廊,維護和升級方便。

可跨平臺操作淫茵。

具有良好的開放性和可擴充性爪瓜。

便于數據庫移植。

安全性好

資源重用性好匙瘪。

缺點

有時會導致級聯(lián)的修改铆铆。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能丹喻,為保證其設計符合分層式結構算灸,可能需要在相應的業(yè)務邏輯層和數據訪問層中都增加相應的代碼。

相對于不分層的編程方法驻啤,使用三層或多層架構的應用于程序運行效率低菲驴,代碼量大,難度增加骑冗。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赊瞬,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子贼涩,更是在濱河造成了極大的恐慌巧涧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遥倦,死亡現場離奇詭異谤绳,居然都是意外死亡占锯,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門缩筛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來消略,“玉大人,你說我怎么就攤上這事瞎抛∫昭荩” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵桐臊,是天一觀的道長胎撤。 經常有香客問我,道長断凶,這世上最難降的妖魔是什么伤提? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮认烁,結果婚禮上飘弧,老公的妹妹穿的比我還像新娘。我一直安慰自己砚著,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布痴昧。 她就那樣靜靜地躺著稽穆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赶撰。 梳的紋絲不亂的頭發(fā)上舌镶,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音豪娜,去河邊找鬼餐胀。 笑死,一個胖子當著我的面吹牛瘤载,可吹牛的內容都是我干的否灾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼鸣奔,長吁一口氣:“原來是場噩夢啊……” “哼墨技!你這毒婦竟也來了?” 一聲冷哼從身側響起挎狸,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤扣汪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锨匆,有當地人在樹林里發(fā)現了一具尸體崭别,經...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了茅主。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舞痰。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖暗膜,靈堂內的尸體忽然破棺而出匀奏,到底是詐尸還是另有隱情,我是刑警寧澤学搜,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布娃善,位于F島的核電站,受9級特大地震影響瑞佩,放射性物質發(fā)生泄漏聚磺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一炬丸、第九天 我趴在偏房一處隱蔽的房頂上張望瘫寝。 院中可真熱鬧,春花似錦稠炬、人聲如沸焕阿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暮屡。三九已至,卻和暖如春毅桃,著一層夾襖步出監(jiān)牢的瞬間褒纲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工钥飞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莺掠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓读宙,卻偏偏與公主長得像彻秆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子结闸,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容

  • 3月1日面試(知春路一小公司)由淺入深 1.應用程序的生命周期掖棉。 有storyboard情況下: 1.main函數...
    Leo_hai閱讀 149評論 0 1
  • ??支持離線 Web 應用開發(fā)是 HTML5 的另一個重點幔亥。 ??所謂離線 Web 應用,就是在設備不能上網的情況...
    霜天曉閱讀 1,026評論 0 2
  • 會話(Session)跟蹤是Web程序中常用的技術察纯,用來跟蹤用戶的整個會話帕棉。常用的會話跟蹤技術是Cookie與Se...
    chinariver閱讀 5,601評論 1 49
  • 三種本地存儲方式 cookie 前言 網絡早期最大的問題之一是如何管理狀態(tài)针肥。簡而言之,服務器無法知道兩個請求是否來...
    流動碼文閱讀 4,967評論 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5香伴? 答:HTML5是最新的HTML標準慰枕。 注意:講述HT...
    kismetajun閱讀 27,449評論 1 45