「PHP面試題」跳槽面試必背-自己最近5年的整理(一)


  大廠最全面試題:分享一波騰訊PHP面試題2021最新大廠PHP面試題(附答案)php面試題之PHP核心技術PHP 2021經典面試題集100 個常見的 PHP 面試題和答案分享面試10家公司,收獲9個offer,2021年PHP 面試問題1. 實現刪除一個數組里面的重復值?

  使用鍵值反轉

  最全PHP進階架構資料,為打造自己可以在工作中休息時間學習哦!!

  array_flip(); 

  $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");

  $result=array_flip($a1);

  print_r($result);

  ?>

  function unique3(array){

  var n=[array[0]];//結果數組

  //從第二項開始遍歷

  for(var i=1; i<array.length; i++){

  //如果當前數組的第i項在當前數組中第一次出現的位置不是i;

  //那么表示第i項是重復的,忽略掉。否則存入結果數組。

  if(array.indexOf(array[i])==i){

  n.push(array[i]);

  }

  }

  return n;}2. 什么是 redis?

  開源 先進的 key-value 存儲

  遠程字典服務器 內存級數據庫 數據結構服務器

  一個基於內存的網絡存儲系統

  3is 數據類型有哪幾種?

  值(value)可以是:字符串 (String),

  哈希 (hash),

  列表 (list),

  集合 (sets)

  有序集合 (sorted sets)

  4is 持久化是如何操作的?

  為了保證效率數據都緩存在內存中,可以周期性寫入磁盤或者把修改操作寫入文件(持久化)。

  RDB 持久化,將 redis 在內存中的的狀態保存到硬盤中,相當於備份數據庫狀態。

  AOF 持久化(Append-Only-File),AOF 持久化是通過保存 Redis 服務器鎖執行的寫狀態來記錄數據庫的。相當於備份數據庫接收到的命令,所有被寫入 AOF 的命令都是以 redis 的協議格式來保存的。

  社區福利安排PHP進階架構資料,免費獲取5is 適應的一些場景

  1、取最新 N 個數據的操作

  2、排行榜應用,取 TOP N 操作

  3、需要精准設定過期時間的應用

  4、計數器應用

  5、Uniq 操作,獲取某段時間所有數據排重值

  6、實時系統,反垃圾系統

  7、Pub/Sub 構建實時消息系統

  8、構建隊列系統

  9、緩存

  6is 的三個特點?

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

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

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

  7.ECS 與虛擬主機的區別介紹

  一個是服務器

  一個相當於是服務器里的文件夾

  雲主機是在集群服務器上划分出來的獨立的內存.硬盤.帶寬等資源搭建而成的 一個虛擬服務器.有獨立的IP和帶寬,可以根據需求安裝各版本操作系統以及 配置各種網站運行環境,有遠程桌面連接東西.是完全獨立的.

  而虛擬主機是在服務器硬盤上划分出來的一部分存儲空間,它共享的是服務器 的IP和帶寬.沒有獨立的資源和獨立的操作系統.沒有遠程桌面功能,通常虛擬主機所支持的網站程序也是默認分配好的.沒有辦法由用戶自己配置環境.功能相對單一.

  8. 重啟 redis

  service redis-server restart

  9. 有序集合是怎么排序的?

  ? 它給集合中的每一個元素設置分數,按照其分數進行排序,也不允許有重復值

  10. 談談你對 memcache 的理解

  免費並且開源,高性能的,分布式的內存對象緩存系統

  數據形態以key->value結構

  用於從數據庫調用、API調用或頁面呈現的結果中獲得少量任意數據(字符串、對象)。

  11. 談談你對 redis 的理解

  - 開源 先進的key-value存儲

  - 遠程字典服務器 內存級數據庫 數據結構服務器

  - 一個基於內存的網絡存儲系統

  五種數據類型 字符串(String), 哈希(hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)

  三個特點: Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。

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

  Redis支持數據的備份,即master-slave模式的數據備份

  應用場景:

  1、取最新 N 個數據的操作

  2、排行榜應用,取 TOP N 操作

  3、需要精准設定過期時間的應用

  4、計數器應用

  5、Uniq 操作,獲取某段時間所有數據排重值

  6、實時系統,反垃圾系統

  7、Pub/Sub 構建實時消息系統

  8、構建隊列系統

  9、緩存

  12. memcached 與 redis 的區別

  兩者對比:

  redis提供數據持久化功能,memcached無持久化;redis的數據結構比memcached要豐富,能完成場景以外的事情;memcached的單個key限制在250B,value限制在1MB;redis的K、V都為512MB;當然這些值可以在源碼中修改;memcached數據回收基於LRU算法,Redis提供了多種回收策略(包含LRU),但是redis的回收策的過期邏輯不可依賴,沒法根據是否存在一個key判斷是否過期。但是可根據ttl返回值判斷是否過期;memcached使用多線程,而redis使用單線程,基於IO多路復用實現高速訪問。所以可以理解為在極端情況下memcached的吞吐大於redis。

  結論:

  普通KV場景:memcached、redis都可以。

  從功能模塊單一這個角度考慮的話,推薦memcached,只做cache一件事。

  在KV長度偏大、數據結構復雜(比如取某個value的一段數據)、需要持久化的情況下,用redis更適合:但是在使用redis的時候單個請求的阻塞會導致后續請求的積壓,需要注意

  13. 緩存的原理

  ? 有緩存則讀緩存,沒緩存則讀數據庫然后做緩存

  14. memcache 和 memcached 的區別

  memcached是php連接memcached服務器的php擴展它的名字就叫memcached

  以前有個叫memcache也是php連接memcached服務器的擴展,它的名字叫memcache

  php的memcache和memcached擴展都是作為客戶端去連接memcached服務器

  但memcached作為客戶端比memcache性能更好功能更強大,而且memcache已經停止更新了,因此現在使用擴展的 話就用memcached

  15. 存放 session 的三種方法

  1、如果你能修改到服務器配置文件,那就打開打開php.ini

  修改下面兩項:

  session.save_handler=memcache

  session.save_path="tcp://127.0.0.1:11211"

  2、修改網站根目錄下的.htaccess文件

  php_value session.save_handler "memcache"

  php_value session.save_path "tcp://127.0.0.1:11211"

  3、最常用的方法 在程序代碼中修改(推薦)

  ini_set("session.save_handler", "memcache");

  ini_set("session.save_path", "tcp://127.0.0.1:11211");

  16. mysql 優化的一般步驟?

  1. sql及索引

  索引優化

  開啟慢查詢日志 分析sql語句 分析是否加上索引 分析是否用上索引

  2. 數據庫表結構

  3.系統配置

  4. 優化計算機硬件

  17. 對 mysql 事物的理解?

  是多個步驟為一個過程的事務(整體)

  1. 事務使用 INNODB 數據庫引擎

  如果你不是INNODB ,開啟事務,刪除那就真的刪除了.

  2. 要么成批的sql全部執行,要么不執行

  3. 事務用來管理 insert update delete 的語句

  事務條件:

  原子性 一組事務,要么成功,要么撤回.

  穩定性 有非法數據(外鍵約束),事務撤回

  隔離性 事務獨立運行. 一個事務,處理后的結果影響到了其他事務,則事務撤回!

  可靠性 軟件或者硬件崩潰,Innodb 表驅動,會利用日志文件,重構修改. 可靠 性 高速度 不可兼得

  關鍵字:

  Commit 提交 當一個事務完成后,發出commit 命令使所有的參與表 完成更改.

  Rollback 回滾 如果發送故障,發出rollback命令 使事務返回到 所有表以前的狀態.

  語句:

  set autocommit=0;

  sql操作

  savepoint p1;

  sql操作

  savepoint p2;

  sql操作

  ROLLBACK to p2;

  commit;

  18. mysql 觸發器是什么?

  ? 監視某種事件,並觸發某種操作 (商品的添加,訂單的刪除 等等 連貫操作時候使用)

  ###觸發四要素

  1. 監視地點 table

  2. 觸發時間 (after/ before)

  3. 監視事件 (insert/update/delete)

  4. 觸發事件 (insert/update/delete)

  1、創建一個名為tg1的觸發器,當向t1表中插入數據前,就向a表中插入一條數據

  delimiter // mysql中可以轉換結束符

  mysql>create trigger tg1 before insert on t1 for each row #固定寫法

  ->begin

  -> insert into a values (4);

  ->end//

  19. 什么是組合索引,及使用情況?

  將兩個字段共同添加一條索引

  例子:當前組合索引是這樣一個順序 ind_status_email(status,email)

  單獨查詢status時,可以用到這個索引,單獨查詢email時,卻用不到

  再問: id name password 建立組合索引 怎么建立?為什么?

  name,password

  因為先到先得, name查詢是多!!! 很少會通過password來查

  先到先得 如何設置我索引?

  根據字段的辨識度來做

  20. 為什么 like 在 % 第一個字符用不到索引?

  like % 校 會查處當前所有的姓,再去查名中有沒有校 所以 會進行全表掃描,浪費性能

  21. 測試分析 sql 語句

  普通查詢分析:

   desc select * from users 或 explain select * from users 效果一樣

  關鍵字段: table:輸出結果集的表名

  key:表示實際使用的索引

  keys_possible (可能用到的索引)

  rows:掃描行的數量

  22. 為什么不分開加索引?而非要加組合索引?

  1. 索引不是越多越好. 浪費資源 索引暫用資源,影響插入性能


免責聲明!

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



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