對象過濾某個屬性 循環 php_37道PHP面試題(附答案)

1、什么事面向對象?主要特征是什么?

面向對象是程序的一種設計方式,它利于提高程序的重用性,使程序結構更加清晰。主要特征:封裝、繼承、多態。

2、SESSION 與 COOKIE的區別是什么,請從協議,產生的原因與作用說明?

A、http無狀態協議,不能區分用戶是否是從同一個網站上來的,同一個用戶請求不同的頁面不能看做是同一個用戶。B、SESSION存儲在服務器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段可以修改,不安全。Session依賴于cookie進行傳遞。禁用cookie后,session不能正常使用。Session的缺點:保存在服務器端,每次讀取都從服務器進行讀取,對服務器有資源消耗。Session保存在服務器端的文件或數據庫中,默認保存在文件中,文件路徑由php配置文件的session.save_path指定。Session文件是公有的。

3、HTTP 狀態中302、403、 500代碼含義?

一二三四五原則:(即一:消息系列;二:成功系列;三:重定向系列;四:請求錯誤系列;五:服務器端錯誤系列。)302:臨時轉移成功,請求的內容已轉移到新位置403:禁止訪問 500:服務器內部錯誤 401:代表未授權。

4、請寫出數據類型(int char varchar datetime text)的意思;請問 varchar 和 char有什么區別?

Int 整數char 定長字符 Varchar 變長字符 Datetime 日期時間型Text 文本型 Varchar與char的區別 char是固定長度的字符類型,分配多少空間,就占用多長空間。Varchar是可變長度的字符類型,內容有多大就占用多大的空間,能有效節省空間。由于varchar類型是可變的,所以在數據長度改變的時,服務器要進行額外的操作,所以效率比char類型低。

5、MyISAM和 InnoDB 的基本區別?索引結構如何實現?

A、MyISAM類型不支持事務,表鎖,易產生碎片,要經常優化,讀寫速度較快,適合用于頻繁查詢的應用;B、InnoDB類型支持事務,行鎖,有崩潰恢復能力,讀寫速度比MyISAM慢,適合于插入和更新操作比較多的應用,空間占用大,不支持全文索引等。創建索引:alert table tablename add index 索引名 (`字段名`)

6、isset() 和 empty() 區別

isset判斷變量是否存在,可以傳入多個變量,若其中一個變量不存在則返回假;empty判斷變量是否為空為假,只可傳一個變量,如果為空為假則返回真。

7、請說明 PHP 中傳值與傳引用的區別。什么時候傳值什么時候傳引用?

按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改優缺點:按值傳遞時,php必須復制值。特別是對于大型的字符串和對象來說,這將會是一個代價很大的操作。按引用傳遞則不需要復制值,對于性能提高很有好處。

8、在PHP中error_reporting這個函數有什么作用?

設置PHP的報錯級別并返回當前級別。

9、說說你對緩存技術的了解?

緩存技術是將動態內容緩存到文件中,在一定時間內訪問動態頁面直接調用緩存文件,而不必重新訪問數據庫。

10、現在編程中經常采取MVC三層結構,請問MVC分別指哪三層,有什么優點?

MVC三層分別指:業務模型、視圖、控制器,由控制器層調用模型處理數據,然后將數據映射到視圖層進行顯示,優點是:①可以實現代碼的重用性,避免產生代碼冗余;②M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式

11、AJAX的優勢是什么?

ajax是異步傳輸技術,可以通過javascript實現,也可以通過JQuery框架實現,實現局部刷新,減輕了服務器的壓力,也提高了用戶體驗。

12、在程序的開發中,如何提高程序的運行效率?

A、優化SQL語句,查詢語句中盡量不使用select *,用哪個字段查哪個字段;少用子查詢可用表連接代替;少用模糊查詢;B、數據表中創建索引;C、對程序中經常用到的數據生成緩存。

13、對于大流量的網站,您采用什么樣的方法來解決訪問量問題?A、有效使用緩存,增加緩存命中率B、使用負載均衡C、對靜態文件使用cdn進行存儲和加速D、想法減少數據庫的使用E、查看出現統計的瓶頸在哪里F、反向代理

14、語句include和require的區別是什么?為避免多次包含同一文件,可用什么語句代替它們?

區別:在失敗的時候:include產生一個warning,而require產生直接產生錯誤中斷require在運行前載入include在運行時載入代替:require_onceinclude_once

15、foo()和@foo()之間有什么區別?

@代表所有warning忽略

16、簡述php的垃圾收集機制。

答案:php中的變量存儲在變量容器zval中,zval中除了存儲變量類型和值外,還有is_ref和refcount字段。refcount表示指向變量的元素個數,is_ref表示變量是否有別名。如果refcount為0時,就回收該變量容器。如果一個zval的refcount減1之后大于0,它就會進入垃圾緩沖區。當緩沖區達到最大值后,回收算法會循環遍歷zval,判斷其是否為垃圾,并進行釋放處理。

17、如何實現PHP的安全最大化?怎樣避免SQL注入漏洞和XSS跨站腳本攻擊漏洞?

答:基本原則:不對外界展示服務器或程序設計細節(屏蔽錯誤),不相信任何用戶提交的數據(過濾用戶提交)。

18、echo、print_r、print、var_dump區別

echo:語句結構;print:是函數,有返回值print_r:能打印數組,對象var_dump:能打印對象數組,并且帶數據類型

19、寫出smarty模板的特點

速度快,編譯型,緩存技術,插件機制,強大的表現邏輯

20、PHP如何實現頁面跳轉?

方法一:php函數跳轉,缺點,header頭之前不能有輸出,跳轉后的程序繼續執行,可用exit中斷執行后面的程序。header("Location:網址");//直接跳轉header("refresh:3;url=http://www.jsdaima.com");//三秒后跳轉方法二:利用metaecho"";

21、如何把一個GB2312格式的字符串裝換成UTF-8格式?

iconv('GB2312','UTF-8','js代碼(http://www.jsdaima.com)是IT資源下載與IT技能學習平臺。');?>

22、如果需要原樣輸出用戶輸入的內容,在數據入庫前,要用哪個函數處理?

htmlspecialchars或者htmlentities

23、什么是 CSRF 攻擊 ?XSS 攻擊?如何防范?

CSRF,跨站請求偽造,攻擊方偽裝用戶身份發送請求從而竊取信息或者破壞系統。講述基本原理:用戶訪問A網站登陸并生成了cookie,再訪問B網站,如果A網站存在CSRF漏洞,此時B網站給A網站的請求(此時相當于是用戶訪問),A網站會認為是用戶發的請求,從而B網站就成功偽裝了你的身份,因此叫跨站腳本攻擊。

CSRF防范:A、合理規范api請求方式,GET,POSTB、對POST請求加token令牌驗證,生成一個隨機碼并存入session,表單中帶上這個隨機碼,提交的時候服務端進行驗證隨機碼是否相同。

XSS,跨站腳本攻擊。

防范:不相信任何輸入,過濾輸入。

24、安全對一套程序來說至關重要,請說說在開發中應該注意哪些安全機制?

A、防遠程提交;B、防SQL注入,對特殊代碼進行過濾;C、防止注冊機灌水,使用驗證碼。

25、對json數據格式的理解?

JSON(javascript object Notation)是一種輕量級的數據交換格式,json數據格式固定,可以被多種語言用作數據的傳遞。

26、什么是事務?及其特性?

答:事務:是一系列的數據庫操作,是數據庫應用的基本邏輯單位。

事務特性:A、原子性:即不可分割性,事務要么全部被執行,要么就全部不被執行。B、一致性或可串性。事務的執行使得數據庫從一種正確狀態轉換成另一種正確狀態C、隔離性。在事務正確提交之前,不允許把該事務對數據的任何改變提供給任何其他事務,D、持久性。事務正確提交后,其結果將永久保存在數據庫中,即使在事務提交后有了其他故障,事務的處理結果也會得到保存。

或者這樣理解:事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那么整個操作就被失敗,以后操作就會回滾到操作前狀態,或者是上有個節點。為了確保要么執行,要么不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。

27、什么是鎖?

答:數據庫是一個多用戶使用的共享資源。當多個用戶并發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的情況。若對并發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。

加鎖是實現數據庫并發控制的一個非常重要的技術。當事務在對某個數據對象進行操作前,先向系統發出請求,對其加鎖。加鎖后事務就對該數據對象有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此數據對象進行更新操作。

基本鎖類型:鎖包括行級鎖和表級鎖

28、索引的作用?和它的優點缺點是什么?

答:索引就一種特殊的查詢表,數據庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小。

29、如何通俗地理解三個范式?

第一范式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;第二范式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;第三范式:3NF是對字段冗余性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗余。

30、主鍵、外鍵和索引的區別?定義:主鍵--唯一標識一條記錄,不能有重復的,不允許為空外鍵--表的外鍵是另一表的主鍵, 外鍵可以有重復的, 可以是空值索引--該字段沒有重復值,但可以有一個空值

作用:主鍵--用來保證數據完整性外鍵--用來和其他表建立聯系用的索引--是提高查詢排序的速度

個數:主鍵--主鍵只能有一個外鍵--一個表可以有多個外鍵索引--一個表可以有多個唯一索引

31、簡述 private、 protected、 public修飾符的訪問權限。

private : 私有成員, 在類的內部才可以訪問。 protected : 保護成員,該類內部和繼承類中可以訪問。public : 公共成員,完全公開,沒有訪問限制。

32、堆和棧的區別?

A、堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小;B、棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義。

33、常用的魔術方法有哪些?舉例說明

答: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復制一個對象時候調用。

34、$this和self、parent這三個關鍵詞分別代表什么?在哪些場合下使用?

$this 當前對象self 當前類parent 當前類的父類

$this在當前類中使用,使用->調用屬性和方法self也在當前類中使用,不過需要使用::調用parent在類中使用

35、作用域操作符::如何使用?都在哪些場合下使用?

調用類常量調用靜態方法

36、__autoload()方法的工作原理是什么?

答:使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。

當程序執行到實例化某個類的時候,如果在實例化前沒有引入這個類文件,那么就自動執行__autoload()函數。

這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件后

就執行include或者require來載入該類,然后程序繼續執行,如果這個路徑下不存在該文件時就提示錯誤。

使用自動載入的魔術函數可以不必要寫很多個include或者require函數。

37、簡述高并發網站解決方案。

A、前端優化(CND加速、建立獨立圖片服務器)B、服務端優化(頁面靜態化、并發處理[異步|多線程]、隊列處理)C、數據庫優化(數據庫緩存[Memcachaed|Redis]、讀寫分離、分庫分表、分區)D、Web服務器優化(負載均衡、反向代理)

a19e0d1691090e9a188b6fd6ca308135.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542398.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

項響琴C語言書籍在線瀏覽,電子琴 c語言程序

實用#include unsigned char code table[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsigned char temp;unsigned char key;unsigned char i,j;unsigned char STH0;unsigned char STL0;unsigned int code tab[]{64021,64103,64260,…

Java File類boolean createNewFile()方法(帶示例)

文件類布爾型createNewFile() (File Class boolean createNewFile()) This method is available in package java.io.File.createNewFile(). 軟件包java.io.File.createNewFile()中提供了此方法。 This method is used to create a new file by using createNewFile() method a…

oracle ? SQL執行過程

1.sql執行過程1>解析(判斷對象是否存在,是否有權限查詢,語義解析,檢查緩存中是否有相同的SQL等等)2>優化(CBO確定優化模式,確定訪問路徑,聯接順序,過程中通過很多綜…

vue-video-player修改src就會報錯_4、修改入口點代碼

在riscv上電時,會進行CPU自檢,然后跳轉到bootloader處執行。bootloader設置好kernel的運行環境后,從硬盤加載kernel到內存,最后再跳轉到kernel入口地址。我們采用的bootloader為OpenSBI,被加載到0x80000000地址&#x…

數碼管超聲波c語言黑51,51單片機開發板-超聲波測距-數碼管顯示

《51單片機開發板-超聲波測距-數碼管顯示》由會員分享,可在線閱讀,更多相關《51單片機開發板-超聲波測距-數碼管顯示(16頁珍藏版)》請在人人文庫網上搜索。1、計算機技術系項目工作報告課程名稱單片機開發板設計與制作實訓班級學號姓名項目名稱超聲波測距…

java 方法 示例_Java ArrayDeque帶有示例的removeFirstOccurrence()方法

java 方法 示例ArrayDeque類removeFirstOccurrence()方法 (ArrayDeque Class removeFirstOccurrence() method) removeFirstOccurrence() method is available in java.lang package. removeFirstOccurrence()方法在java.lang包中可用。 removeFirstOccurrence() method is use…

社交應用動態九宮格圖片的規則

這里主要以微信和QQ空間為作為研究對象,得到的結論如下。 QQ空間里的動態 iOS設備,以iPhone6為分界 iPhone6及以上分辨率的設備: 當寬且高同時 > 512px時,判斷 寬/高的比例值:大于 2時,以高度為基準&…

c語言實現鏈表結構6,用c語言實現的鏈表結構--數據結構實驗

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include"stdio.h"//使用new指針來將臨時變量重新初始化#include"stdio.h"typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;void InitList(LinkList &L)//…

splunk中 如何隱藏input_翻糖制作中,如何避免裂縫,如何隱藏裂縫,如何防粘?...

翻糖蛋糕 因精致的樣子和栩栩如生的各種造型深得人們的喜愛,它不僅滿足了人們對蛋糕口味及裝飾日益多樣化的需求,同時也在動手制作的過程中,享受到美食與生活的無窮樂趣。不過裂縫,不平整,干燥對翻糖作品來說無疑是噩夢…

Java DataInputStream readUnsignedByte()方法(帶示例)

DataInputStream類readUnsignedByte()方法 (DataInputStream Class readUnsignedByte() method) readUnsignedByte() method is available in java.io package. readUnsignedByte()方法在java.io包中可用。 readUnsignedByte() method is used to read 1 byte (i.e. 8 bit) of …

wpf中groupbox有什么用_展示設計中的標攤是什么 用的什么材料

經常聽從事展示設計的工作人員說起標攤,那什么是標攤呢?顧名思義,標攤就是通用標準的國際展會攤位的縮寫。但是不少人看到干巴巴的詞語還是不能理解。那么這篇文章從用途、材料等方面來詳細介紹標攤究竟是什么。 標攤的主要材質是什么一般來說…

Java BigInteger類| nextProbablePrime()方法與示例

BigInteger類nextProbablePrime()方法 (BigInteger Class nextProbablePrime() method) nextProbablePrime() method is available in java.math package. nextProbablePrime()方法在java.math包中可用。 nextProbablePrime() method is used to get the next probable prime n…

SQL 行轉列的兩種做法

if object_id(tb)is not null drop table tbGocreate table tb(姓名 varchar(10),課程 varchar(10),分數 int)insert into tb values(張三,語文,74)insert into tb values(張三,數學,83)insert into tb values(張三,物理,93)insert into tb values(李四,語文,74)insert into tb…

android一個工程的xml怎么引用另外一個工程的xml,如何在Android中使用XML引用庫中另一個包的字符串?...

Androiddocumentation告訴我,我可以使用“包名”訪問另一個包中的字符串,無論這意味著什么:[:]/所以在我的清單中,我想訪問一個字符串,我已將其放在一個單獨的庫項目中,在com.globalmentor.android包中 – 畢竟我的R類就是這樣:android:label"com.g…

kotlin 類和對象_Kotlin程序| 類和對象的示例(帶有學生數據)

kotlin 類和對象In the below program, we are creating a student class to input and print the student data like name, age. It is a simple example of creating class in Kotlin. 在下面的程序中,我們將創建一個學生班級,以輸入和打印學生數據&am…

python 復數數組_python的數組運算及推導式的運用

運行方式:縮進 TAb(四格)或者space(1格)注釋:#可以在程序后注釋文字 或者 ... ,""" ... """ 可以多行注釋 中間全為注釋數值輸出 print(...)圖形輸出 import matplotlib as pltplt.show()列表 list[] #字符串…

ActiveX: 如何用.inf和.ocx文件生成cab文件

ActiveX: 如何用.inf和.ocx文件生成cab文件 轉載于:https://www.cnblogs.com/time-is-life/p/5977962.html

Android工具里沒有Android,android – AppCompat工具欄沒有顯示

在主題中聲明.NoActionBar之后,以及將工具欄放在布局中,我的工具欄不會顯示.我最終得到的正是你在宣布沒有動作欄時所期望的 – 沒有動作欄.這是布局:activity_home.xml:layout"layout/app_bar_home"android:layout_width"match_parent&q…

操作系統中的處理機調度調度_操作系統中的多處理器調度

操作系統中的處理機調度調度多處理器操作系統 (Multiprocessor Operating system) A multiprocessor system consists of several processors which share memory. In the multiprocessor, there is more than one processor in the system. The reason we use multiprocessor …

轉:Delphi2010新發現-類的構造和析構函數功能

Delphi2010發布了. 雖然憑著對Delphi的熱愛第一時間就安裝了,但是現在可能是年紀大了,對新事物缺乏興趣了.一直都沒有仔細研究. 今天有點時間試了一下新功能. 本來C#和Delphi.NET是支持類的構造函數/析構函數的(注意不是實例的構造和析構).也就是在模塊初始化/卸載的時候會調用…