php設計模式六大原則,php常用設計模式和算法,常用算法、問答、設計模式

 2023-12-06 阅读 20 评论 0

摘要:1.Cookie 禁用了,Session 還能用嗎?對應的服務器 Session,Session ID 是通過 Cookie 來傳遞的,禁用 Cookie 相當于失去了 Session ID,就得不到 Sessionphp設計模式六大原則?php.ini 文件中的”session.use_trans_sid = 1“,或

1.Cookie 禁用了,Session 還能用嗎?

對應的服務器 Session,Session ID 是通過 Cookie 來傳遞的,禁用 Cookie 相當于失去了 Session ID,就得不到 Session

php設計模式六大原則?php.ini 文件中的”session.use_trans_sid = 1“,或者編譯時打開打開了”--enable-trans-sid 選項”

a.$sn=session_id();

session_id ($_GET-->url 傳過來的參數)

php抽獎概率算法,b.fopen w+ 寫入 session_id ()

fread 取出 sesson_id

2.GET、POST 傳輸最大容量是多少?

php快速排序算法、GET 發送 http 協議通過 url 方式傳遞,受瀏覽器或者服務器的設置限制

POST 實體數據,表單傳送,通過 php.conf 的 post_max_size 可以設置傳輸大小

3. 抓取遠程圖片到本地,會用什么函數?

php運行原理?file_get_contents()

file_put_contents()

復制代碼

4.CGI 是什么?什么是 FastCGI?php-fpm、FastCGI、Nginx 之間是什么關系?

server 收到一個 php 的請求時,會啟動一個程序去處理當前的請求,而這個程序就是 CGI

通用網關接口 (返回標準 html 數據的服務)

FastCGI 是一個協議,是應用程序和 WEB 服務器連接的橋梁。Nginx 并不能直接與 PHP-FPM 通信,而是將請求通過 FastCGI 交給 PHP-FPM 處理。

php-fpm 是 fastcgi 進程的管理器,用來管理 fastcgi 進程的。

5. 函數內部 static 和 global 關鍵字的作用?

stattic (靜態局部變量) 作用于函數內,不能用在函數外

global (靜態全局變量) 可以作用任何地方

6.memcache 和 Redis 的區別及優缺點?

memcache 把數據存到內存中,讀取速度快。

Redis 支持的數據類型更多,數據也可以存到硬盤,斷電不會掛掉,數據持久化,memcache 一旦斷電數據就沒了。

都可以一主多從。

7.Include require include_once require_once 的區別?

處理失敗方式不同:

require 失敗時會產生一個致命級別錯誤,并停止程序運行。

include 失敗時只產生一個警告級別錯誤,程序繼續運行。

include_once/require_once 和 include/require 處理錯誤方式一樣,

唯一區別在于當所包含的文件代碼已經存在時候,不在包含。

8.php 魔幻(術)方法及預定義變量;

construct () 實例化類時自動調用。

destruct () 類對象使用結束時自動調用。

set () 在給未定義的屬性賦值的時候調用。

get () 調用未定義的屬性時候調用。

isset () 使用 isset () 或 empty () 函數時候會調用。

unset () 使用 unset () 時候會調用。

sleep () 使用 serialize 序列化時候調用。

wakeup () 使用 unserialize 反序列化的時候調用。

call () 調用一個不存在的方法的時候調用。

callStatic () 調用一個不存在的靜態方法是調用。

toString () 把對象轉換成字符串的時候會調用。比如 echo。

invoke () 當嘗試把對象當方法調用時調用。

set_state () 當使用 var_export () 函數時候調用。接受一個數組參數。

clone () 當使用 clone 復制一個對象時候調用。

復制代碼

預定義變量(超級全局變量)

$GLOBALS

$_SERVER

$_GET

$_POST

$_COOKIE

$_SESSION

$_REQUEST

$_ENV

復制代碼

魔術變量

LINE

FILE

DIR

CLASS

FUNCTION

METHOD

NAMESPACE

復制代碼

9. 一些編譯 php 時的 configure 參數

–prefix=/usr/local/php php 安裝目錄

–with-config-file-path=/usr/local/php/etc 指定 php.ini 位置

–with-mysql=/usr/local/mysql mysql 安裝目錄,對 mysql 的支持

–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli 文件目錄,優化支持

–enable-safe-mode 打開安全模式

–enable-ftp 打開 ftp 的支持

–enable-zip 打開對 zip 的支持

–with-bz2 打開對 bz2 文件的支持

–with-jpeg-dir 打開對 jpeg 圖片的支持

–with-png-dir 打開對 png 圖片的支持

–with-freetype-dir 打開對 freetype 字體庫的支持

–without-iconv 關閉 iconv 函數,種字符集間的轉換

–with-libxml-dir 打開 libxml2 庫的支持

–with-xmlrpc 打開 xml-rpc 的 c 語言

–with-zlib-dir 打開 zlib 庫的支持

–with-gd 打開 gd 庫的支持

復制代碼

更多可以使用 ./configure help 查看

10. 寫代碼來解決多進程 / 線程同時讀寫一個文件的問題。

PHP 是不支持多線程的,可以使用 php 的 flock 加鎖函數實現。

$fp = fopen("/tmp/lock.txt", "w+");

if (flock ($fp, LOCK_EX)) { // 進行排它型鎖定

fwrite($fp, "Write something here\n");

flock ($fp, LOCK_UN); // 釋放鎖定

} else {

echo "Couldn't lock the file !";

}

fclose($fp);

復制代碼

11.Mysql 的存儲引擎,myisam 和 innodb 的區別。

a. MyISAM 類型不支持事務處理等高級處理,而 InnoDB 類型支持.

b. MyISAM 類型的表強調的是性能,其執行數度比 InnoDB 類型更快.

c. InnoDB 不支持 FULLTEXT 類型的索引.

d. InnoDB 中不保存表的具體行數,也就是說,

執行 select count (*) from table 時,InnoDB 要掃描一遍整個表來計算有多少行,

但是 MyISAM 只要簡單的讀出保存好的行數即可.

e. 對于 AUTO_INCREMENT 類型的字段,InnoDB 中必須包含只有該字段的索引,但是在 MyISAM 表中,可以和其他字段一起建立聯合索引。

f. DELETE FROM table 時,InnoDB 不會重新建立表,而是一行一行的刪除。

g. LOAD TABLE FROM MASTER 操作對 InnoDB 是不起作用的,解決方法是首先把 InnoDB 表改成 MyISAM 表,導入數據后再改成 InnoDB 表,

但是對于使用的額外的 InnoDB 特性 (例如外鍵) 的表不適用.

h. MyISAM 支持表鎖,InnoDB 支持行鎖。

復制代碼

12.MySQL 數據庫作發布系統的存儲,一天五萬條以上的增量,預計運維三年,怎么優化?

a. 設計良好的數據庫結構,允許部分數據冗余,盡量避免 join 查詢,提高效率。

b. 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。

c. mysql 庫主從讀寫分離。

d. 找規律分表,減少單表中的數據量提高查詢速度。

e。添加緩存機制,比如 memcached,apc 等。

f. 不經常改動的頁面,生成靜態頁面。

g. 書寫高效率的 SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1, field_2, field_3 FROM TABLE.

13. 對于大流量的網站,您采用什么樣的方法來解決各頁面訪問量統計問題

a. 確認服務器是否能支撐當前訪問量。

b. 優化數據庫訪問。

c. 禁止外部訪問鏈接(盜鏈), 比如圖片盜鏈。

d. 控制文件下載。

e. 使用不同主機分流。

f. 使用瀏覽統計軟件,了解訪問量,有針對性的進行優化。

14. 是否用過模板引擎?如果有您用的模板引擎的名字是?

Smarty復制代碼

15.PHP 中 this 和 self 的區別

this:對象

self:類

復制代碼

16. 如何防止 SQL 注入,XSS 攻擊和 CSRF 攻擊

SQL 注入:mysqli_real_escape_string () 轉義關鍵字符;

XSS 攻擊:alert 把一些 cookie 信息打印出來;過濾掉 <> 等關鍵字符串

CSRF 攻擊:跨站攻擊。防止:token,驗證碼

PHP 設計模式

工廠模式:

建立一個工廠(一個函數或一個類方法)來制造新的對象。

工廠模式 是一種類,它具有為您創建對象的某些方法。您可以使用工廠類創建對象,而不直接使用 new。這樣,如果您想要更改所創建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。

單例模式:

某些應用程序資源是獨占的,因為有且只有一個此類型的資源。例如,通過數據庫句柄到數據庫的連接是獨占的。您希望在應用程序中共享數據庫句柄,因為在保持連接打開或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。

單元素模式可以滿足此要求。

PHP 中的單例模式(singleton pattern):指的是在 PHP 的應用程序的范圍內只對指定的類創建一個實例。

在 PHP 中使用單例模式的類通常擁有一個私有構造函數和一個私有克隆函數,以防 止用戶通過創建對象或者克隆對其進行實例化。還有一個靜態私有成員變量 $instance 與靜態方法 getInstance。getInstance 負責對其本身實例化,然后將這個對象存儲在 $instance 靜態成員變量中,以確保只有一個實例被創建。

觀察者模式

命令鏈模式

策略模式

單例模式:

class SingleInstance

{

? ?? ???private function _construct(){

? ?? ???}

? ?? ? private static $instance;

? ?? ? private function _clone(){

? ?? ? }

? ?? ? public static function getInstance(){

self::$instance instanceof SingleInstance){

? ?? ?? ?? ?? ?self::$instance=new SingleInstance();

? ?? ?? ???}

? ?? ?? ???return self ::$instance;

? ?? ???}

}

復制代碼

短連接:例如普通的 web 請求,在三次握手之后建立連接,發送數據包并得到服務器返回的結果之后,通過客戶端和服務端的四次握手進行關閉斷開。

長連接:區別于短連接,由于三次握手鏈接及四次握手斷開,在請求頻繁的情況下,鏈接請求和斷開請求的開銷較大,影響效率。采用長連接方式,執行三次握手鏈接后,不斷開鏈接,保持客戶端和服務端通信,直到服務器超時自動斷開鏈接,或者客戶端主動斷開鏈接。

適用場景:

短連接:適用于網頁瀏覽等數據刷新頻度較低的場景。

長連接:適用于客戶端和服務端通信頻繁的場景,例如聊天室,實時游戲等。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/188450.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息