首頁 >後端開發 >php教程 >面試題解答

面試題解答

不言
不言原創
2018-04-21 11:48:302076瀏覽

這篇文章介紹的內容是關於面試題解答,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下


#

1. ajax優勢
    ajax是非同步傳輸技術,可以透過javascript實現,也可以透過JQuery框架實現,實現局部刷新,減輕了伺服器的壓力,也提高了使用者體驗

2. 現在程式設計中常採取MVC三層結構,請問MVC分別指哪三層,有什麼優點?

        MVC三層分別指:商業模式、檢視、控制器,
        則由控制器層呼叫模式處理資料,接著將資料表機模式處理資料,接著將資料表模式處理
        對應到視圖層顯示,
        優點:
       餘;        2. 
M和V的實作程式碼分離,使同一個程式可以使用不同的表現形式
#3. #echo(), print(),print_r()的差異
        答:echo是PHP語句, print與print_r是函數,語句沒有回傳值,函數可以有回傳值 


#        print()只能列印簡單型別變數的值(如int,string) 
        print_r()可列印出複雜類型變數的值(如數組物件)
        echo 輸出一個或多個字串

4. 
什麼是事務,特性u


#        答:事務:是一系列的資料庫操作,是資料庫應用的基本邏輯單位。
        
#        從有中使用:
      事務要麼全部被執行,要麼就全部不被執行。
        (2)一致性。事務的執行使得資料庫從一種正確狀態轉換成另一種正確狀態
        (3)隔離。在事務正確提交之前,不允許把該事務對資料的任何變更提供給任何其他事務,
        (4) 持久性。事務正確提交後,其結果將永久保存在資料庫中,即使在事務提交後有了其他故障,
#        事務的處理結果也會被保存。
        
#        或以這樣理解:
      工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,
        以後作業就會回滾到操作前狀態,或是上有節點。為了確保要么執行,要么不執行,就可以使用事務。要將有
        組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。
5. 什麼是鎖定?
        答:當事務在對某資料物件操作前,先向系統發出請求,並加以鎖定。加鎖後事務就對該資料物件
        有了一定的控制,且在該事務釋放鎖定之前,其他的事務無法對此資料物件更新作業。
#        
#       ‧作用?和它的優點缺點是什麼?
        答:索引是一種特殊的查詢表,資料庫的搜尋引擎可以利用它來加速資料的檢索。
        索引可以是唯一的,而建立索引允許指定單一欄位或是多個欄位。
        缺點是它減緩了資料輸入的速度,同時也增加了資料庫的尺寸大小。

6. MyISAM類型InnoDB類型引擎差異:
    MyISAM類型不支援事務,表鎖,易產生碎片,要經常優化,讀寫速度較快,而InnoDB類型支援事務,行鎖,有崩潰復原能力。讀寫速度比MyISAM慢。
7. PHP函數預設修飾詞
#    static public
8. 物件導向的特質有哪些面向?

                答:主要有封裝,繼承,多態。如果是4個方面則加上:抽象。
        下方的解釋為瞭解:        
   良的模組性的基礎,
        封裝的目標是實現軟體元件的高內聚體,低耦合,防止程式相互依賴所帶來的變動效果.
#        
#        















#####1 ###                 #########        繼承:     來進行,把這個已經存在# ########        的類別所定義的內容作為自己的內容,並且可以加入若干新的內容,或修改原來的方法使之更適##########        合特殊的需要,######       這就是繼承。繼承是子類別自動共享父類別資料和方法的機制,這是類別之間的一#########        種關係,並提升了軟體的可重複使用性和可擴充性。 #########        ##########        多態性:        ### 發出的方法呼叫在程式設計時#########        並不確定,而是在程式運作期間才確定,即一個引用變數倒底會指向哪個類別的實例對象,該引號##### ####        則以變數所發出的方法呼叫到底是哪個類別所實現的方法,並且必須在程式運作期間才能決定。 #########        ##########        抽象化:        #######        抽象化是找出一些事物的相似性和共性之處,然後將這些事物歸為一個類,這個類只考慮這些事
##        物的相似性和共性之處,並且會忽略那些與目前主題和目標無關的方面,將注意力集中在與目前
        目標相關的面向。例如,看到一隻螞蟻和大象,你能夠想像出它們的相同之處,那就是抽象。
9. __autoload()方法的工作原理是什麼?

        答:使用這個魔術函數的基本條件是類別檔案的檔案名稱要和類別的名字保持一致。
        當程式執行到實例化某個類別的時候,如果在實例化前沒有引入這個類別文件,那麼就自動執行__autoload()函數。
        這個函數會依照實例化的類別的名稱來找出這個類別檔案的路徑,當判斷這個類別檔案路徑下確實存在這個類別檔案後
      執行include或require來載入該類,然後程式繼續執行,如果這個路徑下不存在該檔案時就提示錯誤。
        使用自動載入的魔術函數可以不必要寫很多include或require函數。

10. tp3中behavor行為是什麼?在動作之前執行的行為

        Behavior:行為,在系統核心之上,設定了許多標籤擴充位,而每個標籤位置可以依序執行各自的獨立行為;透過內建的行為擴展完成系統功能,所有行為擴展都是可替換和增加的。

11. 如何開啟偵錯模式?調試模式有什麼好處?

        答:開啟除錯模式簡單,只需要在入口檔案中增加一行常數定義碼:

        //開啟偵錯模式 ##        define('APP_DEBUG', true);
    
       定義程式碼即可切換到部署模式。
        開啟偵錯模式後,系統會先載入系統預設的除錯設定檔,接著載入專案的偵錯設定文件,除錯模式的優點是:
        1.
開啟日誌記錄,任何錯誤訊息和除錯資訊都會詳細記錄,以便於除錯;        2. 
關閉範本快取,且範本修改可即時生效;        3. ##記錄SQL日誌,方便分析SQL;
        4. 關閉欄位中修改不受快取影響;
        5. 
        5. (即使是Windows平台),幫助你提前發現Linux部署問題;        6. 
可以方便用於開發過程的不同階段,包括開發、測試和演示等任何需要的情況,不同的應用模式可以配置獨立的專案設定檔。

12. TP中的URL模式有哪幾種?預設是哪種?
        答:ThinkPHP支援四種URL模式,可透過設定URL_MODEL參數來定義,包括一般模式、PATHINFO、REWRITE及相容模式。
        
#        預設模式為:PATHINFO模式,設定URL_MODEL 為1
13. Smarty中編譯和快取有何不同







##S13。 #        smarty的編譯過程是將模板拿過來,將裡面的標籤替換成對應php程式碼,其實就是php和html混合的過程
        smarty的快取需要手動開啟,##        smarty的快取需要手動開啟,##        smarty的快取需要手動開啟,##     編譯好的檔案執行後,同時產生一份靜態的html頁面,        再次造訪的時候,你造訪的就是是html檔案了,所以就效率來說,要高一些

13. Smarty快取機制是什麼?
        如果開啟了快取,smarty同時產生一份靜態的html頁面,如果在設定的時間沒有過期,
        再次造訪的時候,
       你訪問的就是是html檔案了,減少了讀取資料庫,所以就效率來說,要高一些。
14. 
在程式的發展中,如何提升程式的運作效率?         

#            1. ##   . 
少用子查詢可用資料表連線取代;##            3. 少用模糊查詢;
     ##            5. 對程式中常用到的資料產生快取;
15. 
JSon資料格式的瞭解:








1 JSON(JavaScript Object Notation)        是一種輕量級的資料交換格式,

        json 格式固定,#        json 被多種語言用作資料的傳遞

        
        PHP中處理json格式的函數為# , bool $assoc ] ), 
##        接受一個JSON格式的字串並且把它轉換為PHP變量,
######      串。 #########        assoc當參數為TRUE時,將傳回array而非object;############       # Json_encode:將PHP變數轉換為json格式#    # ##########16. ###會話控制的原則:#########    ########        http為無狀態的協定,此協定無法來維護兩個事務之間的聯繫。當一個使用者在請求一個頁面後在請求另一個頁面時,http將無法告訴我們這兩個請求是來自同一個變數。會話控制思想就是能夠在網站中追蹤一個變量,我們可以追蹤變量,就可以做到對用戶的支持,並根據授權和用戶身份顯示不同內容,不同頁面。 ##################17. ###php上傳檔案move_upload_file與is_uploaded_file都是做什麼的? ##########    move_upload_file將上傳的檔案移到新位置
    is_uploaded_file判斷檔案是否為透過HTTP POST 上傳的

18. ##18. 資料庫Mysql 的儲存引擎,myisam和innodb的差別。

        第一種:
         MyISAM 是且非交易的儲存引擎;適合用於頻繁詢問的應用;表鎖,且不會出現死鎖;適合MyISAM 適合MyISAM 適合用於頻繁查詢的應用;表鎖,不會出現死鎖;適合MyISAM 適合MyISAM 適合用於頻繁查詢的應用;表鎖,不會出現死鎖;適合MyISAM 適合MyISAM小數據,小並發
        innodb是支援事務的儲存引擎;合於插入和更新作業比較多的應用;設計合理的話是行鎖(最大差異就在鎖的層級);適合大數據,大並發。
        第二種:
        MyISAM類型不支援事務,表鎖,易產生碎片,且要經常最佳化,讀取與寫入速度較快,而InnoDB類型支援事務,行鎖,有崩潰恢復能力。讀寫速度比MyISAM慢。
19. char與varchar區別

        答:char為固定長度的字元類型,已分配多少空間,就佔多長空間。
        Varchar是長度變化的字元類型,內容有多大就佔多大的空間,能有效節省空間。
        由於varchar類型是變化的,所以當資料長度改變的時,伺服器要進行額外的操作,所以效率比char類型低。  
20. 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.

21. #物件導向的理解  ##  



H水平##        物件導向OO = 物件導向的分析OOA 物件導向的設計OOD 物件導向的程式設計OOP;
        通俗的解釋是「萬物皆看向物件可以獨立的物件(單元),
        它們可以自己完成自己的功能,而不是像C分成一個個函數。
         現在純淨的OO語言主要是Java和C#,PHP、C 也支援OO,C是流程導向的。
        第二種:        以物件為程式的設計方式,它有利於提升程序的重複使用性,使程式結構更為明確。主要特徵:封裝、繼承、多型。     

22. ###簡述 private、 protected、 public修飾符的存取權。 ###  ######        #######        答:private : 私有成員, 只有在類別的內部才能存取。  
        protected : 保護成員,在該類別內部和繼承類別中可以存取。
        public : 公共成員,完全公開,沒有存取限制。
23. 抽象類別和介面的概念以及差異?

        答案:
##        抽象類別:
     能作為其他類別的父類別使用。使用abstract關鍵字聲明。
        介面:
        它是一種特殊的抽象類別,也是特殊的類,使用interface宣告。
        (1)抽象類別的運算透過繼承關鍵字extends來實現,而介面的使用則是透過implements關鍵字來實現。
        (2)抽象類別中有資料成員,可實現資料的封裝,但介面沒有資料成員。
        (3)在抽象類別中可以有建構方法,但是介面沒有建構方法。
        (4)抽象類別的方法可以透過private、protected、public關鍵字修飾(抽象方法不能是private),而介面中的方法只能使用public關鍵字修飾。
        (5)一個類別只能繼承於一個抽象類別,而一個類別可以同時實作多個介面。
        (6)在抽象類別中可以有成員方法的實作程式碼,而介面中無法有成員方法的實作程式碼。
        區別第二種:
        1、有抽象方法的類別稱為抽象類,在抽象類別中不一定只有抽象方法,抽象方法必須使用abstract定義。
        
#        2、且介面中全部為抽象方法,方法不使用abstract定義。
23. 何時使用建構函數,何時使用析構函數

        建構函數(方法)為物件建立完成後第一個被物件自動呼叫的方法。
        它存在於每個宣告的類別中,是特殊的成員方法。
        作用則是執行一些初始化的任務。 Php中使用__construct()宣告建構方法,且只能宣告一個。

        析構函數(方法)功能與建構方法正好相反,是物件被銷毀之前最後一個被物件自動呼叫的方法。
        作用是用於實現在銷毀一個物件之前執行一些特定的操作,諸如關閉檔案和釋放記憶體等。
24. 什麼是Smarty,優點,缺點

         要使用PHP程序同工分離,
        使的程式設計師改變程式的邏輯內容時不會影響到美工的頁面設計,美工重新修改頁時
##不會影響到程式的程序邏輯,這在多人合作的專案中顯的尤為重要。 (也易於程式的多樣式開發)
####        
        Smarty優點
##         -較硬式1#        
        
        2. 編譯型:以smarty編寫的程式為執行時要編譯為非範本技術的PHP檔案 .
        3 快取技術:它可以將使用者最終看到的HTML檔案快取成一個靜態的HTML頁
        ## 插件技術:smarty可以自訂插件。
        
        不適合使用smarty的地方
     例如像股票顯示,它需要經常更新資料         2. 
小型專案。小型專案因為專案簡單而美工與程式設計師兼於一人的專案
25. 常見的HTTP狀態碼:

# 200 - 請求成功
        301 - 資源(網頁等)永久轉義到其他URL
#       302 -
               401 - 代表未授權。

        403 - 禁止使用。
        404 - 請求的資源(網頁等)不存在
        500 -伺服器內部錯誤 

#27. php值傳值,傳引用有什麼差別,什麼時候使用?
    
        變數預設總是使用值賦值,也就是說,當將一個表達式的值賦予一個變數時,
        整個表達式的值被賦值到目標變量,這表示:當另一個變數的賦予另一個變異數

        量時,改變其中一個變數的值,將不會影響另一個一個變數        
#        php也提供了另一個方式給變數賦值:引用賦值。這意味著新的變數簡單的
        __引用__(換言之,成為了其別名或指向)了原始變數。改變的新的變數將影
        響到原始變數,反之亦然。使用引用賦值,簡單地將一個&符號加到要賦值的
        變數前(源變數)
        是傳引用對較大是的數據,傳引用比較好,這樣可以節省記憶體的開銷

#        第二種:






###########################        以值傳遞:函數範圍內對值的任何改變在函數外部都會被忽略

        按引用傳遞:函數範圍內對值的任何改變在函數外部也能反映出這些修改

        優缺點:以值傳送時,php必須複製數值。特別是對於大型的字串和物件來說,
        這將會是代價很大的操作。按引用傳遞則不需要複製值,對於效能提升很有好處。

28. 雙引號,單引號差異

        1. 雙引號解釋變數,單引號不解釋變項
        2. 在雙引號插入單引號,單引號若有變項的話,變項解釋
#       要有一個非數字、字母、底線的特殊字符,
        或將變數括起來,否則將變數名稱後面的部分當做一個整體,引起語法錯誤
        . 雙引號解釋轉義字符,單引號不解釋轉義字符,但是解釋'\和\\
        5. 能使單引號字符盡量使用單引號,單引號的效率比雙引號高(
        因為雙引號要先遍歷一遍,判斷裡面有沒有變量,然後再操作,而單引號則不需要判斷)

29. 使用者行為日誌快取放在哪裡? MongoDB

1. 常用的超全域變數 

        $_GET ----->get傳送方式
        $_POST ----->post傳送方式
        $_REQUEST ----->可以接收到get和post兩種方式的值
    
        $GLOBALS ----->所有的變數都放在裡面
        $_FILE -        
##        $_SERVER ----->系統環境變數
    
       時間會用到
        $_COOKIE ----->會話控制的時候會使用到
-
##        $_ENV ------        $ ->環境變數

2. 
版本控制工具SVN與Git差異
        1. 
#git是分散式的,svn是集中式的     .         2. 
        2. 
               .         4. 
git方便分支間的切換         .         2. #3.  
isset() 和empty() 區別         Isset判斷變數是否存在,可傳入多個變數,若其中一個變數不存在則返回假,empty判斷變數是否為空為假,且只可傳一個變數,若為空為假則傳回為真。
4. explode與implode 分割字串   連接陣列
5. file_get_contents經歷了哪些過程  將檔案的內容讀入到一個字串中
6. Linux下make與make install有什麼差別?編譯 安裝
7. 物件導向中,介面可以繼承介面嗎?可以,但介面無法繼承類別
8. Memcache與Redis區別  

        1. 資料類型
# 支援set list等類型
        memcache支援簡單資料類型,需要客戶端自行處理複雜物件##         支援資料落地持久化儲存
        memcache不支援資料持久性儲存
##        3. ( 式儲存式資料表##M     3. 
模式
        memcache可以使用一致性hash做分散式
        4. value 長度小於250字符,單一item儲存小於1M,且不適合虛擬機器使用
        5. 資料一致性不同
        redis使用的不同
        redis使用的是單線程模型,保固了數據按順序提交。
        memcache需要使用cas來確保資料一致性。 CAS(Check and Set)是一個確保並發一致性的機制,屬於「樂觀鎖」範疇;原理很簡單:拿版本號,操作,對比版本號,如果一致就操作,不一致就放棄任何操作
        6. cpu使用
        redis單一執行緒模型只能使用一個cpu,並可開啟多個redis行程
1序列化?函數是?         格式化字串並轉換為陣列或物件
        serialize() 序列化
1. ##TP,Lavarel,Yii,Lavarels.
[TP YII CI框架比較- CSDN部落格](http://blog.csdn.net/pangchengyong0724/article/details/49246847)
#2. CI的構子原理?用的是什麼版本(3.1.7穩定版)
        在程式執行前,框架會載入Hooks,主要是判斷config是否開啟hooks,
    如果開啟,則載入config/hoos.php設定檔、鉤子設定資訊;
    接著框架透過呼叫hooks->call方法呼叫hoosk,hook類別透過call_hook解析設定,透過hook類別中run_hook呼叫函數;
4. 解釋php是什麼?
    是英文超級文字預處理語言PHP: Hypertext Preprocessor的縮寫。
    PHP 是一種HTML 內嵌式的語言,是一種在伺服器端執行的嵌入HTML文件的腳本語言,
##    語言的樣式有類似C語言,被廣泛的運用。

5. include與require差異  
#     include如果引入的文件不存在,試圖繼續往下執行,報一個warning
    而require如果引入的文件不存在,報fatal error,不再繼續執行.
6. mysql_fetch_assoc與mysql_fetch_array區別  

        //mysql_fetch_array
##        //mysql_fetch_array從結果集中取得一行作為關聯式,或數字數組,或##None  #        //mysql_fetch_assoc — 從結果集中取得一行是為關聯陣列 

        這兩個函數,而傳回的都是一個陣列,差異就是第一個函數傳回的陣列是第一個函數的陣列是只包含值,我們只能$row[0],$row[1],這樣以數組下標來讀取數據,
        而MySQL_fetch_array()返回的數組既包含第一種,也包含鍵值對的形式,我們可以這樣讀取數據,(假如資料庫的欄位是username,passwd):$row['username']$row['passwd'] 
7. session能儲存到資料庫嗎?
        
#        能

8. #序列化是哪一個函數?是什麼格式?用來轉換什麼的?

        serialize() 序列化陣列變成key-value結構的用花括號包起來的字串

        //unerial
        //unerial#       變成陣列
11. 
回上一頁  go(-1)12. 

js能操作cookie嗎?能,設定cookie:setcookie;取得cookie: getcookie

13. 

jQ中封裝dollar$函數  在jQ中代表jquery#相關推薦:


#php的面試總結

############

以上是面試題解答的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:php面試的總結下一篇:php面試的總結