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

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

? 區(qū)別:

Get從服務(wù)器獲取數(shù)據(jù),Post向服務(wù)器傳送數(shù)據(jù)

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

Get傳值一般在2KB以內(nèi),Post傳值大小可以在php.ini中進(jìn)行設(shè)置

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

? 建議:

get式安全性較Post式要差些包含機(jī)密信息建議用Post數(shù)據(jù)提交式;

做數(shù)據(jù)查詢建議用Get式;做數(shù)據(jù)添加、修改或刪除建議用Post方式

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

cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。

cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙考慮到安全應(yīng)當(dāng)使用session。

session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會(huì)比較占用你服務(wù)器的性能考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。

單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。

3.?SESSION多服務(wù)器間共享

服務(wù)器實(shí)現(xiàn)的 session 復(fù)制或 session 共享,如 webSphere或 JBOSS 在搭集群時(shí)配置實(shí)現(xiàn) session 復(fù)制或 session 共享.致命缺點(diǎn):不好擴(kuò)展和移植。

利用成熟技術(shù)做session復(fù)制,如12306使用的gemfire,如常見內(nèi)存數(shù)據(jù)庫redis或memorycache,雖較普適但依賴第三方.

將 session維護(hù)在客戶端,利用 cookie,但客戶端存在風(fēng)險(xiǎn)數(shù)據(jù)不安全,且可以存放的數(shù)據(jù)量較小,所以將session 維護(hù)在客戶端還要對(duì) session 中的信息加密。

第二種方案和第三種方案的合體,可用gemfire實(shí)現(xiàn) session 復(fù)制共享,還可將session 維護(hù)在 redis中實(shí)現(xiàn) session 共享,同時(shí)可將 session 維護(hù)在客戶端的cookie 中,但前提是數(shù)據(jù)要加密。

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

可以用隱藏表單手動(dòng)帶上sessid

在使用session時(shí),服務(wù)器會(huì)發(fā)送sessionid,標(biāo)志為PHPSESSID(這個(gè)關(guān)鍵字可以在php.ini文件中配置),我們可以在超鏈接傳輸?shù)刂穮?shù)時(shí),把PHPSESSID帶上/或者帶上常量sid,sid是php中sessionid的常量,一般sid的格式為PHPSESSID=6ibdh4timhdpi14acq1ianqte6,以key=value鍵值對(duì)方式記錄,value是session文件的名稱,可以在啟動(dòng)session之前,指定sessionid

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

session_id($_GET['PHPSESSID']);

}

session_start();

5. Redis

Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。

Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。

Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

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

6.什么是存儲(chǔ)過程?用什么來調(diào)用???MySQL存儲(chǔ)過程

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

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

8. HTTP協(xié)議

基于客戶端/服務(wù)端(C/S)的架構(gòu)模型,是一個(gè)無狀態(tài)的請(qǐng)求/響應(yīng)協(xié)議,通過URL進(jìn)行數(shù)據(jù)傳輸和建立連接。

客戶端請(qǐng)求格式:請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)。

服務(wù)器響應(yīng)分別是:狀態(tài)行、消息報(bào)頭、空行和響應(yīng)正文。

HTTP請(qǐng)求方法:GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE 和 CONNECT。

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

HTTP content-type(內(nèi)容類型).

9. 微信開發(fā)

1. 微信運(yùn)行機(jī)制

公眾號(hào)與php之間用什么語言通信:Xml

如何接收公眾號(hào)數(shù)據(jù)的:

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收數(shù)據(jù)? XML數(shù)據(jù)

2. 消息類型

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

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

10. PHP7新特性

1PHP 標(biāo)量類型與返回值類型聲明

2PHP NULL 合并運(yùn)算符

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

4PHP 常量數(shù)組

5PHP 匿名類

6PHP Closure::call()

7PHP 過濾 unserialize()

8PHP IntlChar()

9PHP CSPRNG

10PHP 7 異常

11PHP 7 use 語句

12PHP 7 錯(cuò)誤處理

13PHP intdiv() 函數(shù)

14PHP 7 Session 選項(xiàng)

15PHP 7 廢棄特性

16PHP 7 移除的擴(kuò)展

17PHP 7 移除的 SAPI

11. 瀏覽器數(shù)據(jù)庫

隨著瀏覽器的處理能力不斷增強(qiáng),越來越多的網(wǎng)站開始考慮,將大量數(shù)據(jù)儲(chǔ)存在客戶端,這樣可以減少用戶等待從服務(wù)器獲取數(shù)據(jù)的時(shí)間。

一、localStorage ?— 本地存儲(chǔ) ?可以長期存儲(chǔ)數(shù)據(jù),沒有時(shí)間限制。

? ? ??可以存儲(chǔ) :數(shù)組、json數(shù)據(jù)、圖片、腳本、樣式文件

function?test(){

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

var?ls=window.localStorage;

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

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

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

}else{

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

}

}

?存在的局限性: 子域名之間不能共享存儲(chǔ)數(shù)據(jù);超出存儲(chǔ)范圍后可以使用 LRU、FIFO 技術(shù)處理;

二、sessionStorage生命周期為當(dāng)前窗口或標(biāo)簽頁,一旦窗口或標(biāo)簽頁被永久關(guān)閉了,那么所有通過sessionStorage存儲(chǔ)的數(shù)據(jù)也就被清空了。

三、IndexedDB

1、使用IndexedDB的原因

? ? ? 現(xiàn)有的瀏覽器端數(shù)據(jù)儲(chǔ)存方案,都不適合儲(chǔ)存大量數(shù)據(jù):cookie不超過4KB,且每次請(qǐng)求都會(huì)發(fā)送回服務(wù)器端;Window.name屬性缺乏安全性,

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

2、什么是IndexedDB

? ? ? ? 通俗地說,IndexedDB就是瀏覽器端數(shù)據(jù)庫,可以被網(wǎng)頁腳本程序創(chuàng)建和操作。它允許儲(chǔ)存大量數(shù)據(jù),提供查找接口,還能建立索引。

? 這些都是localStorage所不具備的。就數(shù)據(jù)庫類型而言,IndexedDB不屬于關(guān)系型數(shù)據(jù)庫(不支持SQL查詢語 ? 句),更接近NoSQL數(shù)據(jù)庫。

3、IndexedDB的特點(diǎn)。

(1) ? ? ?鍵值對(duì)儲(chǔ)存。?IndexedDB內(nèi)部采用對(duì)象倉庫(object store)存放數(shù)據(jù)。所有類型的數(shù)據(jù)都可以直接存入,包括JavaScript對(duì)象。在對(duì)象倉庫中,

? ? ? ? 數(shù)據(jù)以“鍵值對(duì)”的形式保存,每一個(gè)數(shù)據(jù)都有對(duì)應(yīng)的鍵名,鍵名是獨(dú)一無二的,不能有重復(fù),否則會(huì)拋出一個(gè)錯(cuò)誤。

(2)異步。?IndexedDB操作時(shí)不會(huì)鎖死瀏覽器,用戶依然可以進(jìn)行其他操作,這與localStorage形成對(duì)比,后者的操作是同步的。異步設(shè)計(jì)是為了防止大量數(shù)據(jù)的讀寫,拖慢網(wǎng)頁的表現(xiàn)。

(3)支持事務(wù)。?IndexedDB支持事務(wù)(transaction),這意味著一系列操作步驟之中,只要有一步失敗,整個(gè)事務(wù)就都取消,數(shù)據(jù)庫回到事務(wù)發(fā)生之前的狀態(tài),不存在只改寫一部分?jǐn)?shù)據(jù)的情況。

(4)同域限制?IndexedDB也受到同域限制,每一個(gè)數(shù)據(jù)庫對(duì)應(yīng)創(chuàng)建該數(shù)據(jù)庫的域名。來自不同域名的網(wǎng)頁,只能訪問自身域名下的數(shù)據(jù)庫,而不能訪問其他域名下的數(shù)據(jù)庫。

(5)儲(chǔ)存空間大?IndexedDB的儲(chǔ)存空間比localStorage大得多,一般來說不少于250MB。IE的儲(chǔ)存上限是250MB,Chrome和Opera是剩余空間的某個(gè)百分比,F(xiàn)irefox則沒有上限。

(6)支持二進(jìn)制儲(chǔ)存。?IndexedDB不僅可以儲(chǔ)存字符串,還可以儲(chǔ)存二進(jìn)制數(shù)據(jù)。

目前,Chrome 27+、Firefox 21+、Opera 15+和IE 10+支持這個(gè)API,但是Safari完全不支持。

IndexedDB是HTML5規(guī)范里新出現(xiàn)的瀏覽器里內(nèi)置的數(shù)據(jù)庫。對(duì)于在瀏覽器里存儲(chǔ)數(shù)據(jù),你可以使用cookies或local storage,但它們都是比較簡單的技術(shù),而IndexedDB提供了類似數(shù)據(jù)庫風(fēng)格的數(shù)據(jù)存儲(chǔ)和使用方式。存儲(chǔ)在IndexedDB里的數(shù)據(jù)是永久保存,不像cookies那樣只是臨時(shí)的。IndexedDB里提供了查詢數(shù)據(jù)的功能,在online和offline模式下都能使用。你可以用IndexedDB存儲(chǔ)大型數(shù)據(jù)。

IndexedDB里數(shù)據(jù)以對(duì)象的形式存儲(chǔ),每個(gè)對(duì)象都有一個(gè)key值索引。IndexedDB里的操作都是事務(wù)性的。一種對(duì)象存儲(chǔ)在一個(gè)objectStore里,objectStore就相當(dāng)于關(guān)系數(shù)據(jù)庫里的表。IndexedDB可以有很多objectStore,objectStore里可以有很多對(duì)象。每個(gè)對(duì)象可以用key值獲取。

IndexedDB vs LocalStorage

IndexedDB和LocalStorage都是用來在瀏覽器里存儲(chǔ)數(shù)據(jù),但它們使用不同的技術(shù),有不同的用途,你需要根據(jù)自己的情況適當(dāng)?shù)倪x擇使用哪種。LocalStorage是用key-value鍵值模式存儲(chǔ)數(shù)據(jù),但跟IndexedDB不一樣的是,它的數(shù)據(jù)并不是按對(duì)象形式存儲(chǔ)。它存儲(chǔ)的數(shù)據(jù)都是字符串形式。如果你想讓LocalStorage存儲(chǔ)對(duì)象,你需要借助JSON.stringify()能將對(duì)象變成字符串形式,再用JSON.parse()將字符串還原成對(duì)象。但如果要存儲(chǔ)大量的復(fù)雜的數(shù)據(jù),這并不是一種很好的方案。畢竟,localstorage就是專門為小數(shù)量數(shù)據(jù)設(shè)計(jì)的,它的api是同步的。

IndexedDB很適合存儲(chǔ)大量數(shù)據(jù),它的API是異步調(diào)用的。IndexedDB使用索引存儲(chǔ)數(shù)據(jù),各種數(shù)據(jù)庫操作放在事務(wù)中執(zhí)行。IndexedDB甚至還支持簡單的數(shù)據(jù)類型。IndexedDB比localstorage強(qiáng)大得多,但它的API也相對(duì)復(fù)雜。

對(duì)于簡單的數(shù)據(jù),你應(yīng)該繼續(xù)使用localstorage,但當(dāng)你希望存儲(chǔ)大量數(shù)據(jù)時(shí),IndexedDB會(huì)明顯的更適合,IndexedDB能提供你更為復(fù)雜的查詢數(shù)據(jù)的方式。

IndexedDB vs Web SQL

WebSQL也是一種在瀏覽器里存儲(chǔ)數(shù)據(jù)的技術(shù),跟IndexedDB不同的是,IndexedDB更像是一個(gè)NoSQL數(shù)據(jù)庫,而WebSQL更像是關(guān)系型數(shù)據(jù)庫,使用SQL查詢數(shù)據(jù)。W3C已經(jīng)不再支持這種技術(shù)。具體情況請(qǐng)看:http://www.w3.org/TR/webdatabase/。

因?yàn)椴辉僦С?,所以你就不要在?xiàng)目中使用這種技術(shù)了。

IndexedDB vs Cookies

Cookies(小甜點(diǎn))聽起來很好吃,但實(shí)際上并不是。每次HTTP接受和發(fā)送都會(huì)傳遞Cookies數(shù)據(jù),它會(huì)占用額外的流量。例如,如果你有一個(gè)10KB的Cookies數(shù)據(jù),發(fā)送10次請(qǐng)求,那么,總計(jì)就會(huì)有100KB的數(shù)據(jù)在網(wǎng)絡(luò)上傳輸。Cookies只能是字符串。瀏覽器里存儲(chǔ)Cookies的空間有限,很多用戶禁止瀏覽器使用Cookies。所以,Cookies只能用來存儲(chǔ)小量的非關(guān)鍵的數(shù)據(jù)。

IndexedDB的用法

想要理解IndexedDB,最好的方法是創(chuàng)建一個(gè)簡單的web應(yīng)用:把你們班的學(xué)生的學(xué)號(hào)和姓名存儲(chǔ)在IndexedDB里。IndexedDB里提供了簡單的增、刪、改、查接口。

打開一個(gè)IndexedDB數(shù)據(jù)庫

首先,你需要知道你的瀏覽器是否支持IndexedDB。請(qǐng)使用最新版的谷歌瀏覽器或火狐瀏覽器。低版本的IE是不行的。

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

if(!window.indexedDB)

{

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

}

一旦你的瀏覽器支持IndexedDB,我們就可以打開它。你不能直接打開IndexedDB數(shù)據(jù)庫。IndexedDB需要你創(chuàng)建一個(gè)請(qǐng)求來打開它。

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

第一個(gè)參數(shù)是數(shù)據(jù)庫的名稱,第二個(gè)參數(shù)是數(shù)據(jù)庫的版本號(hào)。版本號(hào)可以在升級(jí)數(shù)據(jù)庫時(shí)用來調(diào)整數(shù)據(jù)庫結(jié)構(gòu)和數(shù)據(jù)。

但你增加數(shù)據(jù)庫版本號(hào)時(shí),會(huì)觸發(fā)onupgradeneeded事件,這時(shí)可能會(huì)出現(xiàn)成功、失敗和阻止事件三種情況。

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事件在第一次打開頁面初始化數(shù)據(jù)庫時(shí)會(huì)被調(diào)用,或在當(dāng)有版本號(hào)變化時(shí)。所以,你應(yīng)該在onupgradeneeded函數(shù)里創(chuàng)建你的存儲(chǔ)數(shù)據(jù)。如果沒有版本號(hào)變化,而且頁面之前被打開過,你會(huì)獲得一個(gè)onsuccess事件。如果有錯(cuò)誤發(fā)生時(shí)則觸發(fā)onerror事件。如果你之前沒有關(guān)閉連接,則會(huì)觸發(fā)onblocked事件。

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

往ObjectStore里新增對(duì)象

為了往數(shù)據(jù)庫里新增數(shù)據(jù),我們首先需要?jiǎng)?chuàng)建一個(gè)事務(wù),并要求具有讀寫權(quán)限。在indexedDB里任何的存取對(duì)象的操作都需要放在事務(wù)里執(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里刪除對(duì)象

刪除跟新增一樣,需要?jiǎng)?chuàng)建事務(wù),然后調(diào)用刪除接口,通過key刪除對(duì)象。

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

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

通過key取出對(duì)象

往get()方法里傳入對(duì)象的key值,取出相應(yīng)的對(duì)象。

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

request.onsuccess = function(event){

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

};

更新一個(gè)對(duì)象

為了更新一個(gè)對(duì)象,首先要把它取出來,修改,然后再放回去。

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.三層結(jié)構(gòu)

????????所謂三層體系結(jié)構(gòu),是在客戶端與數(shù)據(jù)庫之間加入了一個(gè)中間件層,也叫組件層。這里所 說的三層體系,不是指物理上的三層,不是簡單地放置三臺(tái)機(jī)器就是三層體系結(jié)構(gòu),也 不僅僅有B/S應(yīng)用才是三層體系結(jié)構(gòu),三層是指邏輯上的三層,即使這三個(gè)層放置到一 臺(tái)機(jī)器上。 三層體系的應(yīng)用程序?qū)I(yè)務(wù)規(guī)則、數(shù)據(jù)訪問、合法性校驗(yàn)等工作放到了中 間層進(jìn)行處理。通常情況下,客戶端不直接與數(shù)據(jù)庫進(jìn)行交互,而是通過COM/DCOM通 訊與中間層建立連接,再經(jīng)由中間層與數(shù)據(jù)庫進(jìn)行交換。

概念

表現(xiàn)層(UI):通俗講就是展現(xiàn)給用戶的界面,即用戶在使用一個(gè)系統(tǒng)的時(shí)候他的所見所得。

業(yè)務(wù)邏輯層(BLL):針對(duì)具體問題的操作,也可以說是對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理。

數(shù)據(jù)訪問層(DAL):該層所做事務(wù)直接操作數(shù)據(jù)庫,針對(duì)數(shù)據(jù)的增添、刪除、修改、查找等。

?優(yōu)點(diǎn)

無需開發(fā)客戶端軟件,維護(hù)和升級(jí)方便。

可跨平臺(tái)操作。

具有良好的開放性和可擴(kuò)充性。

便于數(shù)據(jù)庫移植。

安全性好

資源重用性好。

缺點(diǎn)

有時(shí)會(huì)導(dǎo)致級(jí)聯(lián)的修改。這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個(gè)功能,為保證其設(shè)計(jì)符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層中都增加相應(yīng)的代碼。

相對(duì)于不分層的編程方法,使用三層或多層架構(gòu)的應(yīng)用于程序運(yùn)行效率低,代碼量大,難度增加。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 3月1日面試(知春路一小公司)由淺入深 1.應(yīng)用程序的生命周期。 有storyboard情況下: 1.main函數(shù)...
    Leo_hai閱讀 206評(píng)論 0 1
  • ??支持離線 Web 應(yīng)用開發(fā)是 HTML5 的另一個(gè)重點(diǎn)。 ??所謂離線 Web 應(yīng)用,就是在設(shè)備不能上網(wǎng)的情況...
    霜天曉閱讀 1,185評(píng)論 0 2
  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,778評(píng)論 1 49
  • 三種本地存儲(chǔ)方式 cookie 前言 網(wǎng)絡(luò)早期最大的問題之一是如何管理狀態(tài)。簡而言之,服務(wù)器無法知道兩個(gè)請(qǐng)求是否來...
    流動(dòng)碼文閱讀 5,120評(píng)論 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,771評(píng)論 1 45

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