PHP面試題2021和2022面試、跳槽必備!


一、php面試前言

每個Phper在應聘的時候,都會有php面試與筆試。除了口語表達能力之外,還有一點就是實力,這也是你的php面試題所要體現的!那么提前掌握最新的PHP面試題,必然能使你在求職過程中事半功倍!

以下這些php面試題,希望能幫你進入你自己喜歡的公司,拿到自己最理想的收入!!!

二、PHP面試題整理大全如下

可以關注博主的微信公眾號  “PHP大神”  回復  “面試題”  即可獲取更多PHP面試題

1、get與post 的區別?

GET在瀏覽器回退時是無害的,而POST會再次提交請求。

GET產生的URL地址可以被Bookmark,而POST不可以。

GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。

GET請求只能進行url編碼,而POST支持多種編碼方式。

GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。

GET請求在URL中傳送的參數是有長度限制的,而POST沒有。

對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。

GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息。

GET參數通過URL傳遞,POST放在Request body中。

GET產生一個TCP數據包,POST產生兩個TCP數據包

2、PHP 的垃圾回收機制

PHP 可以自動進行內存管理,清除不需要的對象。

PHP 使用了引用計數 (reference counting) GC 機制。

每個對象都內含一個引用計數器 refcount,每個 reference 連接到對象,計數器加 1。當 reference 離開生存空間或被設為 NULL,計數器減 1。當某個對象的引用計數器為零時,PHP 知道你將不再需要使用這個對象,釋放其所占的內存空間。

 

3、什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之間是什么關系?

CGI,通用網關接口,用於WEB服務器和應用程序間的交互,定義輸入輸出規范,用戶的請求通過WEB服務器轉發給FastCGI進程,FastCGI進程再調用應用程序進行處理,如php解析器,應用程序的處理結果如html返回給FastCGI,FastCGI返回給Nginx 進行輸出。假設這里WEB服務器是Nginx,應用程序是 PHP,而 php-fpm 是管理 FastCGI 的,這也就是 php-fpm,FastCGI,和 Nginx 之間的關系。

FastCGI 用來提高 cgi 程序性能,啟動一個master,再啟動多個 worker,不需要每次解析 php.ini. 而 php-fpm 實現了 FastCGI 協議,是 FastCGI 的進程管理器,支持平滑重啟,可以啟動的時候預先生成多個進程。

4、什么是 Redis 穿透和雪崩

緩存穿透就是訪問redis中一個不存在的key的時候,會直接穿過緩存,去數據庫中進行查詢.

如果是黑客,進行惡意攻擊的時候,每次都請求超過2000個/秒的時候,這個時候mysql基本上就掛了.

解決辦法是:每次從數據庫中查詢到一個不存在的key的時候,就寫一個空值到緩存庫中,有惡意攻擊的時候,直接從緩存中取到這個空值.

緩存雪崩就是每秒有5000個請求過來時候,redis緩存庫崩了,然后這些請求瞬間落在了mysql數據庫上,直接導致數據庫死機.

解決方案就是:

事前:提高緩存庫的高可用, 使用主從結構加哨兵 cluster集群,

事中:使用ehcache+hystrix限流組件(當請求量非常巨大的時候,就調用自己開發好的一個降級餓組件,返回一些默認值,如友情提示,或者空白值)

事后:做持久化,盡快恢復緩存集群,一旦恢復,自動從磁盤上讀取數據,恢復內存中的數據.

5、約瑟夫環問題,猴子選大王

一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號。用程序模擬該過程。

 

 6、冒泡排序

思路分析:在要排序的一組數中,對當前還未排好的序列,從前往后對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。

代碼實現:

 

7、redis 消息隊列先進先出需要注意什么?

通常使用一個list來實現隊列操作,這樣有一個小限制,所以的任務統一都是先進先出,如果想優先處理某個任務就不太好處理了,這就需要讓隊列有優先級的概念,我們就可以優先處理高級別的任務,實現方式有以下幾種方式:

A)單一列表實現:隊列正常的操作是 左進右出(lpush,rpop)為了先處理高優先級任務,在遇到高級別任務時,可以直接插隊,直接放入隊列頭部(rpush),這樣,從隊列頭部(右側)獲取任務時,取到的就是高優先級的任務(rpop)

B)使用兩個隊列,一個普通隊列,一個高級隊列,針對任務的級別放入不同的隊列,獲取任務時也很簡單,redis的BRPOP命令可以按順序從多個隊列中取值,BRPOP會按照給出的 key 順序查看,並在找到的第一個非空 list 的尾部彈出一個元素,redis> BRPOP list1 list2 0

list1 做為高優先級任務隊列

list2 做為普通任務隊列

這樣就實現了先處理高優先級任務,當沒有高優先級任務時,就去獲取普通任務

方式1最簡單,但實際應用比較局限,方式3可以實現復雜優先級,但實現比較復雜,不利於維護

方式2是推薦用法,實際應用最為合適

8、Redis 如何防止高並發?

其實redis是不會存在並發問題的,因為他是單進程的,再多的命令都是一個接一個地執行的。我們使用的時候,可能會出現並發問題,比如獲得和設定這一對。Redis的為什么 有高並發問題?Redis的的出身決定

Redis是一種單線程機制的nosql數據庫,基於key-value,數據可持久化落盤。由於單線程所以redis本身並沒有鎖的概念,多個客戶端連接並不存在競爭關系,但是利用jedis等客戶端對redis進行並發訪問時會出現問題。發生連接超時、數據轉換錯誤、阻塞、客戶端關閉連接等問題,這些問題均是由於客戶端連接混亂造成。

同時,單線程的天性決定,高並發對同一個鍵的操作會排隊處理,如果並發量很大,可能造成后來的請求超時。

在遠程訪問redis的時候,因為網絡等原因造成高並發訪問延遲返回的問題。

解決辦法

在客戶端將連接進行池化,同時對客戶端讀寫Redis操作采用內部鎖synchronized。

服務器角度,利用setnx變向實現鎖機制。

9、說說對 SQL 語句優化有哪些方法?

(1)Where子句中:where表之間的連接必須寫在其他Where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾.HAVING最后。

(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

(3) 避免在索引列上使用計算

(4)避免在索引列上使用IS NULL和IS NOT NULL

(5)對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。

(6)應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描

(7)應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描

 

10、我應該在什么時候使用 require 和 include 呢?

require() 函數與 include() 函數相同,只是它處理錯誤的方式不同。如果出現錯誤,include() 函數會生成警告,但腳本會繼續執行。require() 函數會產生致命錯誤,腳本會停止。

我的建議是 99.9% 的時間里只使用 require_once。

使用 require 或 include 代替意味着您的代碼在其他地方不可重用,即您引入的腳本實際上是在執行代碼,而不是提供類或某些類功能庫。

11、PHP 中的 stdClass 是什么?

stdClass 只是將其他類型強制轉換為對象時使用的通用” 空’’類。stdClass 不是 PHP 中對象的基類。這可以很容易地證明:

 

 對於匿名對象,動態屬性等很有用。

考慮 StdClass 的一種簡單使用場景是替代關聯數組。請參見下面的示例,該示例顯示 json_decode() 如何允許獲取 StdClass 實例或關聯數組。

同樣但未在本示例中顯示的SoapClient::__soapCall返回一個StdClass實例。

 

12、PHP 中的 die () 和 exit () 函數有什么不同?

沒有區別,它們是一樣的。 選擇die()而不是exit()的唯一好處可能是你節省了額外鍵入一個字母的時間。

13、isset () 和 array_key_exists () 之間有什么區別?

array_key_exists 它會告訴你數組中是否存在鍵,並在 $a 不存在時報錯。

如果 key 或變量存在且不是 null,isset 才會返回 true。當 $a 不存在時,isset 不會報錯。

考慮:

 

14、var_dump () 和 print_r () 有什么不同?

var_dump函數用於顯示變量 / 表達式的結構化信息,包括變量類型和變量值。數組遞歸瀏覽,縮進值以顯示結構。它還顯示哪些數組值和對象屬性是引用。

print_r()函數以我們可讀的方式顯示有關變量的信息。數組值將以鍵和元素的格式顯示。類似的符號用於對象。

考慮:

 

 var_dump($obj)將在屏幕的輸出下方顯示:

 

 print_r($obj)將在屏幕的輸出下方顯示:

 

15、如何在 PHP 中啟用錯誤報告?

檢查 php.ini 中的 “display_errors” 是否等於 “on”,或者在腳本中聲明 “ini_set('display_error',1)”。

然后,在你的代碼中包含 “ERROR_REPORTING(E_ALL)”,以便在腳本執行期間顯示所有類型的錯誤消息。

16、我們如何在 PHP 中處理異常?

當程序執行出現異常報錯時,后面的代碼將不會再執行,這時 PHP 將會嘗試匹配第一個 catch 塊進行異常的處理,如果沒有捕捉到異常程序將會報致命錯誤並顯示”Uncaught Exception”。

可以在 PHP 中拋出和捕獲異常。

為了處理異常,代碼可以被包圍在”try” 塊中.

每個 try 必須至少有一個對應的catch塊 。多個不同的 catch 塊可用於捕獲不同類的異常。

在 catch 塊中也可以拋出異常(或重新拋出之前的異常)。

思考:

 

17、PHP 和 Javascript 是如何交互的?

PHP 和 Javascript 無法直接進行交互,因為 PHP 是一種服務器端語言,而 Javascript 是一種瀏覽器語言。但是,我們可以交換變量,因為 PHP 可以生成將由瀏覽器執行的 Javascript 代碼,並且可以通過 URL 將特定的變量傳遞回 PHP。

18、PHP 處理圖片需要添加什么擴展?

需要 GD 庫來執行處理圖片功能。

19、獲取圖片屬性(size, width, 和 height)的函數是什么?

獲取圖片大小 size:getimagesize ();獲取圖片寬度 width:imagesx ();獲取圖片高度 height:imagesy ()。

20、如何使用 PHP 腳本顯示文本?

可以使用以下兩種方法:

<!--?php echo "Method 1"; print "Method 2"; ?-->

21、如何將數據導出到 Excel 文件中?

最常見和常用的方法是將數據轉換為 Excel 支持的格式。例如,可以編寫 .csv 文件,例如選擇逗號作為字段之間的分隔符,然后使用 Excel 打開文件。

22、如何在 PHP 中處理 MySQL 的結果集?

可以使用 mysqli_fetch_array, mysqli_fetch_assoc, mysqli_fetch_object or mysqli_fetch_row 函數處理。

可以關注博主的微信公眾號  “PHP大神”  回復  “面試題”  即可獲取更多PHP面試題

 

23、如何檢查給定變量的值為字母和數字字符?

可以使用專用函數 ctype_alnum 來檢查它是否為字母數字字符。

24、哪種加密擴展可以生成和驗證數字簽名?

PHP-OpenSSL 擴展提供了幾種加密操作,包括數字簽名的生成和驗證。

25、如何在 PHP 中強制轉換類型?

輸出類型的名稱必須在要強制轉換的變量前的括號中指定,如下所示:

(int), (integer) - 強制轉換為整型

(bool), (boolean) - 強制轉換為布爾值

(float), (double), (real) - 強制轉換為浮點型

(string) - 強制轉換為字符串

(array) - 強制轉換為數組

(object) - 強制轉換為對象

26、PHP 中如何使用三元條件運算符?

它由三個表達式組成:一個條件和兩個操作數,它們描述在指定條件為 true 或 false 時應執行的指令,如下所示:

Expression_1?Expression_2 : Expression_3;

27、如何完成微信的接口配置? 以及配置失敗的原因?

填寫的URL需要正確響應微信發送的Token驗證

失敗原因未刪除里面的html文件

28、如何獲取微信發送的內容?

$postStr = file_get_contents("php://input");

29、網頁授權用戶消息流程步驟

引導用戶進入授權頁面同意授權,獲取code

通過code換取網頁授權access_token(與基礎支持中的access_token不同)

如果需要,開發者可以刷新網頁授權access_token,避免過期

通過網頁授權access_token和openid獲取用戶基本信息(支持UnionID機制)

30、描述小程序的框架

框架名稱:MINA (MINA IS NOT APP) 是在微信中開發小程序的框架。

框架結構 :MINA 框架由兩部分組成。視圖層 (View) 和邏輯層 (App Service)。

框架特征:響應式的數據綁定 (MINA 用響應式數據綁定的方式,在視圖層和邏輯層之間進行通信。從某種程度上,可以看成是 MVVM 模式。)

結構:MINA 程序包含一個描述整體程序的 app 和多個描述各自頁面的 page。

一個 MINA 程序主體部分由三個文件組成,必須放在根目錄下。

Paste_Image.png

一個 MINA 頁面由四個文件組成。

31、假如 Redis 里面有 1 億個 key,其中有 10w 個 key 是以某個固定的已知的前綴開頭的,如果將它們全部找出來?

使用 keys 指令可以掃出指定模式的 key 列表。

對方接着追問:如果這個 redis 正在給線上的業務提供服務,那使用 keys 指令會有什么問題?

這個時候你要回答 redis 關鍵的一個特性:redis 的單線程的。keys 指令會導致線程阻塞一段時間,線上服務會停頓,直到指令執行完畢,服務才能恢復。這個時候可以使用 scan 指令,scan 指令可以無阻塞的提取出指定模式的 key 列表,但是會有一定的重復概率,在客戶端做一次去重就可以了,但是整體所花費的時間會比直接用 keys 指令長。

32、使用過 Redis 做異步隊列么,你是怎么用的?

一般使用 list 結構作為隊列,rpush 生產消息,lpop 消費消息。當 lpop 沒有消息的時候,要適當 sleep 一會再重試。

如果對方追問可不可以不用 sleep 呢?list 還有個指令叫 blpop,在沒有消息的時候,它會阻塞住直到消息到來。

如果對方追問能不能生產一次消費多次呢?使用 pub/sub 主題訂閱者模式,可以實現 1:N 的消息隊列。

如果對方追問 pub/sub 有什么缺點?在消費者下線的情況下,生產的消息會丟失,得使用專業的消息隊列如 rabbitmq 等。

如果對方追問 redis 如何實現延時隊列?我估計現在你很想把面試官一棒打死如果你手上有一根棒球棍的話,怎么問的這么詳細。但是你很克制,然后神態自若的回答道:使用 sortedset,拿時間戳作為 score,消息內容作為 key 調用 zadd 來生產消息,消費者用 zrangebyscore 指令獲取 N 秒之前的數據輪詢進行處理。

33、如果有大量的 key 需要設置同一時間過期,一般需要注意什么?

如果大量的 key 過期時間設置的過於集中,到過期的那個時間點,redis 可能會出現短暫的卡頓現象。一般需要在時間上加一個隨機值,使得過期時間分散一些。

34、Yii2 的自動加載原理

檢查類名是否已緩存在$classMap或$_coreClasses數組中,如果是則直接require相應的文件路徑,$_coreClasses是框架自有類的映射表;否則去第2步;

檢測YiiBase::$enableIncludePath是否為false,如果是則去第3步,否則直接include($className . '.php')

遍歷$includePaths數組,將目錄名拼接上類名,檢查是否為合法的php文件,如果是則include,然后跳出循環

結束。

35、進程和線程的關系

進程就像地主,有土地(系統資源),線程就像佃戶(線程,執行種地流程)。每個地主(進程)只要有一個干活的佃戶(線程)。

進程-資源分配的最小單位,相對健壯,崩潰一般不影響其他進程,但是切換進程時耗費資源,效率差些。

線程-程序執行的最小單位,沒有獨立的地址空間,一個線程死掉可能整個進程就死掉,但是節省資源,切換效率高。

36、php 編程常見的進程和線程

在web應用中,我們每次訪問php,就建立一個PHP進程,當然也會建立至少一個PHP線程。

PHP使用pcntl來進行多進程編程

PHP中使用pthreads來進行多線程編程

nginx的每個進程只有一個線程,每個線程可以處理多個客戶端的訪問

php-fpm使用多進程模型,每個進程只有一個線程,每個線程只能處理一個客戶端訪問。

apache可能使用多進程模型,也可能使用多線程模型,取決於使用哪種SAPI.

進程是cpu資源分配的最小單位,線程是cpu調度的最小單位

37、如何設計支付接口

接口規則

傳輸方式 為保證交易安全性,采用HTTPS傳輸

提交方式 采用POST方法提交

數據格式 提交和返回數據都為XML格式,根節點名為xml

字符編碼 統一采用UTF-8字符編碼

簽名算法 MD5,后續會兼容SHA1、SHA256、HMAC等。

簽名要求 請求和接收數據均需要校驗簽名,詳細方法請參考安全規范-簽名算法

證書要求 調用申請退款、撤銷訂單接口需要商戶證書

判斷邏輯 先判斷協議字段返回,再判斷業務返回,最后判斷交易狀態

參數規定

交易金額

交易金額默認為人民幣交易,接口中參數支付金額單位為【分】,參數值不能帶小數。對賬單中的交易金額單位為【元】。

外幣交易的支付金額精確到幣種的最小單位,參數值不能帶小數點。

交易類型

JSAPI--JSAPI支付(或小程序支付)、NATIVE--Native支付、APP--app支付,MWEB--H5支付,不同trade_type決定了調起支付的方式,請根據支付產品正確上傳

MICROPAY--付款碼支付,付款碼支付有單獨的支付接口,所以接口不需要上傳,該字段在對賬單中會出現

貨幣類型

貨幣類型的取值列表:

CNY:人民幣

時間

標准北京時間,時區為東八區;如果商戶的系統時間為非標准北京時間。參數值必須根據商戶系統所在時區先換算成標准北京時間, 例如商戶所在地為0時區的倫敦,當地時間為2014年11月11日0時0分0秒,換算成北京時間為2014年11月11日8時0分0秒。

時間戳

標准北京時間,時區為東八區,自1970年1月1日 0點0分0秒以來的秒數。注意:部分系統取到的值為毫秒級,需要轉換成秒(10位數字)。

商戶訂單號

商戶支付的訂單號由商戶自定義生成,僅支持使用字母、數字、中划線-、下划線_、豎線|、星號*這些英文半角字符的組合,請勿使用漢字或全角等特殊字符。微信支付要求商戶訂單號保持唯一性(建議根據當前系統時間加隨機序列來生成訂單號)。重新發起一筆支付要使用原訂單號,避免重復支付;已支付過或已調用關單、撤銷(請見后文的API列表)的訂單號不能重新發起支付。

body字段格式

使用場景 支付模式 商品字段規則 樣例 備注

PC網站 掃碼支付 瀏覽器打開的網站主頁title名 -商品概述 騰訊充值中心-QQ會員充值

微信瀏覽器 公眾號支付 商家名稱-銷售商品類目 騰訊-游戲 線上電商,商家名稱必須為實際銷售商品的商家

門店掃碼 公眾號支付 店名-銷售商品類目 小張南山店-超市 線下門店支付

門店掃碼 掃碼支付 店名-銷售商品類目 小張南山店-超市 線下門店支付

門店刷卡 刷卡支付 店名-銷售商品類目 小張南山店-超市 線下門店支付

第三方手機瀏覽器 H5支付 瀏覽器打開的移動網頁的主頁title名-商品概述 騰訊充值中心-QQ會員充值

第三方APP APP支付 應用市場上的APP名字-商品概述 天天愛消除-游戲充值

銀行類型

安全規范

簽名算法

(簽名校驗工具)

簽名生成的通用步驟如下:

第一步,設所有發送或者接收到的數據為集合M,將集合M內非空參數值的參數按照參數名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特別注意以下重要規則:

◆ 參數名ASCII碼從小到大排序(字典序);

◆ 如果參數的值為空不參與簽名;

◆ 參數名區分大小寫;

◆ 驗證調用返回或微信主動通知簽名時,傳送的sign參數不參與簽名,將生成的簽名與該sign值作校驗。

◆ 微信接口可能增加字段,驗證簽名時必須支持增加的擴展字段

第二步,在stringA最后拼接上key得到stringSignTemp字符串,並對stringSignTemp進行MD5運算,再將得到的字符串所有字符轉換為大寫,得到sign值signValue。

◆ key設置路徑:微信商戶平台(微信支付 - 中國領先的第三方支付平台 | 微信支付提供安全快捷的支付方式)-->賬戶設置-->API安全-->密鑰設置

第一步:對參數按照key=value的格式,並按照參數名ASCII字典序排序如下:

第二步:拼接API密鑰:

生成隨機數算法

微信支付API接口協議中包含字段nonce_str,主要保證簽名不可預測。我們推薦生成隨機數算法如下:調用隨機數函數生成,將得到的值轉換為字符串。

API證書

獲取API證書(什么是api證書?如何升級?)

微信支付接口中,涉及資金回滾的接口會使用到API證書,包括退款、撤銷接口。商家在申請微信支付成功后,收到的相應郵件后,可以按照指引下載API證書,也可以按照以下路徑下載:微信商戶平台(微信支付 - 中國領先的第三方支付平台 | 微信支付提供安全快捷的支付方式)-->賬戶中心-->賬戶設置-->API安全 。證書文件說明如下:

證書附件 描述 使用場景 備注

pkcs12格式

(apiclient_cert.p12、 包含了私鑰信息的證書文件,為p12(pfx)格式,由微信支付簽發給您用來標識和界定您的身份 撤銷、退款申請API中調用 windows上可以直接雙擊導入系統,導入過程中會提示輸入證書密碼,證書密碼默認為您的商戶ID(如:10010000)

以下兩個證書在PHP環境中使用:

證書附件 描述 使用場景 備注

證書pem格式

(apiclient_cert.pem) 從apiclient_cert.p12中導出證書部分的文件,為pem格式,請妥善保管不要泄漏和被他人復制 PHP等不能直接使用p12文件,而需要使用pem,為了方便您使用,已為您直接提供 您也可以使用openssl命令來自己導出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem

證書密鑰pem格式

(apiclient_key.pem) 從apiclient_key.pem中導出密鑰部分的文件,為pem格式,請妥善保管不要泄漏和被他人復制 PHP等不能直接使用p12文件,而需要使用pem,為了方便您使用,已為您直接提供 您也可以使用openssl命令來自己導出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem

使用API證書

◆ apiclient_cert.p12是商戶證書文件,除PHP外的開發均使用此證書文件。

◆ 商戶如果使用.NET環境開發,請確認Framework版本大於2.0,必須在操作系統上雙擊安裝證書apiclient_cert.p12后才能被正常調用。

◆ API證書調用或安裝需要使用到密碼,該密碼的值為微信商戶號(mch_id)

API證書安全

證書文件不能放在web服務器虛擬目錄,應放在有訪問權限控制的目錄中,防止被他人下載;

建議將證書文件名改為復雜且不容易猜測的文件名;

商戶服務器要做好病毒和木馬防護工作,不被非法侵入者竊取證書文件。

商戶回調API安全

在普通的網絡環境下,HTTP請求存在DNS劫持、運營商插入廣告、數據被竊取,正常數據被修改等安全風險。商戶回調接口使用HTTPS協議可以保證數據傳輸的安全性。所以微信支付建議商戶提供給微信支付的各種回調采用HTTPS協議。

38、可以關注博主的微信公眾號  “PHP大神”  回復  “面試題”  即可獲取更多PHP面試題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM