面試題

session與cookie的區(qū)別和聯(lián)系
1.存放位置:Session保存在服務器,Cookie保存在客戶端。
2.存放的形式:Session是以對象的形式保存在服務器,Cookie以字符串的形式保存在客戶端。
3.用途:Cookies適合做保存用戶的個人設置,愛好等,Session適合做客戶的身份驗證
4.路徑:Session不能區(qū)分路徑,同一個用戶在訪問一個網(wǎng)站期間,所有的Session在任何一個地方都可以訪問到。而Cookie中如果設置了路徑參數(shù),那么同一個網(wǎng)站中不同路徑下的Cookie互相是訪問不到的。
5.安全性:Cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙,考慮到安全應當使用session
6.大小以及數(shù)量限制:每個域名所煲含的cookie 數(shù):IE7/8,FireFox:50個, Opera30個; Cookie總大?。篎irefox和Safari允許cookie多達4097個字節(jié),Opera允許cookie多達4096個字 節(jié),InternetExplorer允許cookie多達4095個字節(jié);一般認為Session沒有大小和數(shù)量限制。
聯(lián)系
Session需要借助Cookie才能正常工作。如果客戶端完全禁止Cookie,Session將失效!因為Session是由應用服務器維持的一個 服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的SessionID,用該SessionID 為標識符來存取服務器端的Session存儲空間。而SessionID這一數(shù)據(jù)則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID 提交到服務器端,來存取Session數(shù)據(jù)。這一過程,是不用開發(fā)人員干預的。所以一旦客戶端禁用Cookie,那么Session也會失效。

  1. 如何修改SESSION的生存時間
  2. 設置瀏覽器保存的sessionid失效時間 setcookie(session_name(), session_id(), time() + $lifeTime, "/");
  3. 可以使用SESSION 自帶的 session_set_cookie_params(86400); 來設置 Session 的生存期
  4. 通過修改php.ini中的session.gc_maxlifetime參數(shù)的值就可以改變session的生存時間
  5. PHP頁面重定向的方法有哪些
  6. header('Location: http://www.baidu.com/') ;
  7. echo '<meta http-equiv="Refresh" content="0;url=http://www.baidu.com/" >';
    3 echo '<script>window.location.href= www.baidu.com</script>';
  8. PDO、adoDB、PHPLib數(shù)據(jù)庫抽象層比較
    PHP數(shù)據(jù)庫抽象層就是指,封裝了數(shù)據(jù)庫底層操作的介于PHP邏輯程序代碼和數(shù)據(jù)庫之間的中間件。
    PDO以PHP 5.1為基礎進行設計,它使用C語言做底層開發(fā),設計沿承PHP的特點,以簡潔易用為準,從嚴格意義上講,PDO應該歸為PHP 5的SPL庫之一,而不應該歸于數(shù)據(jù)抽象層,因為其本身和MySQL和MySQLi擴展庫的功能類似。PDO是不適合用在打算或者有可能會變更數(shù)據(jù)庫的系 統(tǒng)中的。
    ADODB不管后端數(shù)據(jù)庫如何,存取數(shù)據(jù)庫的方式都是一致的;
    轉移數(shù)據(jù)庫平臺時,程序代碼也不必做太大的更動,事實上只需要改動數(shù)據(jù)庫配置文 件。提供了大量的拼裝方法,目的就是針對不同的數(shù)據(jù)庫在抽象層的底層對這些語句進行針對性的翻譯,以適應不同的數(shù)據(jù)庫方言!但是這個抽象層似乎體積過于龐 大了,全部文件大概有500K左右,如果你做一個很小的網(wǎng)站的話,用這個似乎大材小用了
    PHPLib可能是伴隨PHP一同成長最老的數(shù)據(jù)庫抽象層(但和ADODB相比,它只算是一個MySQL抽象類庫),這個抽象類使用方法相當簡單,體積小,是小型網(wǎng)站開發(fā)不錯的選擇。
    PDO提供預處理語句查詢、錯誤異常處理、靈活取得查詢結果(返回數(shù)組、字符串、對象、回調函數(shù))、字符過濾防止SQL攻擊、事務處理、存儲過程。
    ADODB支持 緩存查詢、移動記錄集、(HTML、分頁、選擇菜單生成)、事務處理、輸出到文件。 參考 http://apps.hi.baidu.com/share/detail/463678
  9. 長連接、短連接的區(qū)別和使用
    長連接:client方與server方先建立連接,連接建立后不斷開,然后再進行報文發(fā)送和接收。這種方式下由于通訊連接一直存在。此種方式常用于P2P通信。
    短連接:Client方與server每進行一次報文收發(fā)交易時才進行通訊連接,交易完畢后立即斷開連接。此方式常用于一點對多點通訊。C/S通信。
    長連接與短連接的使用時機:
    長連接:
    短連接多用于操作頻繁,點對點的通訊,而且連接數(shù)不能太多的情況。每個TCP連 接的建立都需要三次握手,每個TCP連接的斷開要四次握手。如果每次操作都要建立連接然后再操作的話處理速度會降低,所以每次操作下次操作時直接發(fā)送數(shù)據(jù) 就可以了,不用再建立TCP連接。例如:數(shù)據(jù)庫的連接用長連接,如果用短連接頻繁的通信會造成socket錯誤,頻繁的socket創(chuàng)建也是對資源的浪 費。
    短連接:
    web網(wǎng)站的http服務一般都用短連接。因為長連接對于服務器來說要耗費一定 的資源。像web網(wǎng)站這么頻繁的成千上萬甚至上億客戶端的連接用短連接更省一些資源。試想如果都用長連接,而且同時用成千上萬的用戶,每個用戶都占有一個 連接的話,可想而知服務器的壓力有多大。所以并發(fā)量大,但是每個用戶又不需頻繁操作的情況下需要短連接。
    參考http://www.cnblogs.com/Roberts/archive/2010/12/05/1986550.html
  10. HTTP協(xié)議詳解、應用
    http(超文本傳輸協(xié)議)是一個基于請求與響應模式的、無狀態(tài)的、短連接、靈活、應用層的協(xié)議,?;赥CP 的連接方式。
    參考 http://blog.csdn.net/gueter/article/details/1524447 (http協(xié)議詳解)
    (HTTP響應狀態(tài)碼)
    HTTP響應狀態(tài)碼
    狀態(tài)代碼有三位數(shù)字組成,第一個數(shù)字定義了響應的類別,且有五種可能取值:
    1xx:指示信息--表示請求已接收,繼續(xù)處理
    2xx:成功--表示請求已被成功接收、理解、接受
    3xx:重定向--要完成請求必須進行更進一步的操作
    4xx:客戶端錯誤--請求有語法錯誤或請求無法實現(xiàn)
    5xx:服務器端錯誤--服務器未能實現(xiàn)合法的請求
    常見狀態(tài)代碼、狀態(tài)描述、說明:
    200 OK //客戶端請求成功
    400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
    401 Unauthorized //請求未經(jīng)授權,這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用 403 Forbidden //服務器收到請求,但是拒絕提供服務
    404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
    503 Server Unavailable //服務器超時 //可能恢復正常
    304 Not Modifed //自從上次請求后,請求的網(wǎng)頁未修改過。
    //服務器返回此響應時,不會返回網(wǎng)頁內容。
  11. 異構系統(tǒng)通訊中的通訊加密方案
    參考 http://blog.csdn.net/linvo/article/details/5741942
  12. socket連接步驟
    Socket(套接字)概念
    套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元。它是網(wǎng)絡通信過程中端點的抽象表示,煲含進行網(wǎng)絡通信必須的五種信息:連接使用的協(xié)議,本地主機的IP地址,本地進程的協(xié)議端口,遠地主機的IP地址,遠地進程的協(xié)議端口。
    Socket連接過程
    建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket ,另一個運行于服務器端,稱為ServerSocket
    套接字之間的連接過程可以分為三個步驟:服務器監(jiān)聽,客戶端請求,連接確認。
    服務器監(jiān)聽:是服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀態(tài)。
    客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。
    連接確認:是指當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應客戶端
    套接字的請求,建立一個新的線程,把服務器端套接字的描述發(fā)給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。
  13. TCP協(xié)議,三次握手、四次揮手
    TCP協(xié)議(Transmission Control Protocol)是主機對主機層的傳輸控制協(xié)議,提供可靠的連接服務,采用三次握手確認建立一個連接,四次揮手斷開連接。
    位碼即tcp標志位,有6種標示:
    SYN(synchronous建立聯(lián)機) 同步
    ACK(acknowledgement 確認)
    PSH(push傳送)
    FIN(finish結束)
    RST(reset重置)
    URG(urgent緊急)
  14. php中常用作用相似,性能差異很大的函數(shù)區(qū)分及舉例
    參考 http://apps.hi.baidu.com/share/detail/43169774
  15. posix及perl兼容正則比較,及函數(shù)性能分析
    POSIX正則和 PCRE正則最顯著的需要知道的不同點:
  16. PCRE函數(shù)需要模式以分隔符閉合.
  17. POSIX兼容正則沒有修正符。不像POSIX, PCRE擴展沒有專門用于大小寫不敏感匹配的函數(shù). 取而
    代之的是, 支持使用/i 模式修飾符完成同樣的工作. 其他模式修飾符同樣可用于改變匹配策略.
  18. POSIX函數(shù)從最左面開始尋找最長的匹配, 但是PCRE在第一個合法匹配后停止. 如果字符串 不匹
    配這沒有什么區(qū)別, 但是如果匹配, 兩者在結果和速度上都會有差別. 為了說明這個不同, 考慮下面的例子(來自Jeffrey Friedl的《精通正則表達式》一書). 使用模式 one(self)?(selfsufficient)?在字符串oneselfsufficient 上匹配, PCRE會匹配到oneself, 但是使用POSIX, 結果將是整個字符串 oneselfsufficient. 兩個子串都匹配原始字符串, 但是POSIX將 最長的最為結果.
    PCRE可用的修飾符: (i,s,m)
  19. 實現(xiàn)PERL正則表達式,抓取html文件a標簽的所有href超鏈接
    正則:/<a\s+.*?href='"['" >]/is
<html><link type="text/css" href="../style/base.css" />
<a href="test.htm? Page=1" id="logo">aa</a>as
<a class="quit" href="www.hao123.com" on);">退出</a></div>
<a
class='aa' href='www.baidu.com' >百度</a></html>
HTML;
$matches = array();
preg_match_all ( "/<a\s+.*?href=[\'\"](.*?)[\'\" >]/is", $html, $matches ); print_r($matches[1]); //輸出所有超鏈接
?>
  1. 如何優(yōu)化前端性能
  1. 頁面內容的優(yōu)化
    a) 降低請求數(shù)
    合并css、js文件,集成CSS圖片
    b) 減少交互通信量
    壓縮技術:壓縮css、js文件,優(yōu)化圖像,減少cookie體積;
    合理利用緩存:使用外部js/css文件,緩存ajax;
    減少不必要的通信量:剔除無用腳本和樣式、推遲加載內容、使用GET請求
    c) 合理利用“并行” 盡量避免重定向
    慎用Iframe 樣式表置于頂部 腳本放到樣式后面加載
    d) 節(jié)約系統(tǒng)消耗
    避免CSS表達式、濾鏡
    2)服務器的優(yōu)化
  1. yahoo的34條前端優(yōu)化法則
    減少HTTP請求、利用CDN技術、 設置頭文件過期或者靜態(tài)緩存、Gzip壓縮、把CSS放頂部、 把JS放底部、避免CSS 表達式、將JS和CSS外鏈、減少DNS查找、減小JS和CSS的體積、 避免重定向、刪除重復腳本、 配置ETags、緩存Ajax、盡早的釋放緩沖、
    用GET方式進行AJAX請求、延遲加載組件、 預加載組件、減少DOM元素數(shù)量、跨域分離組件、
    減少iframe數(shù)量、不要出現(xiàn)404頁面、減小Cookie、 對組件使用無Cookie的域名、減少DOM的訪問次數(shù)、開發(fā)靈活的事件處理句柄、使用< link >而非@import、避免過濾器的使用、優(yōu)化圖片、優(yōu)化CSS Sprites、 不要在HTML中縮放圖片、縮小favicon. ico的大小并緩存它、保證組件在25K以下、將組件打煲進一個多部分的文檔中

  2. 數(shù)據(jù)庫緩存的基本理論,參考memcached
    什么是Memcached?
    memcached是高性能的分布式內存緩存服務器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)Web應用的速度、提高可擴展性。
    雖然memcached 使用了同樣的“Key=>Value”方式組織數(shù)據(jù),但是它和共享內存、APC等本地緩存有非常大的區(qū)別。Memcached是分布式的,也就是說 它不是本地的。它基于網(wǎng)絡連接(當然它也可以使用localhost)方式完成服務,本身它是一個獨立于應用的程序或守護進程(Daemon方式)
    PHP與Memcached
    Memcached使用libevent庫實現(xiàn)網(wǎng)絡連接服務,理論上可以處理無限多的連接,但是它和
    基于反向代理的Web緩存;
    基于反向代理的Web緩存

  3. PHP安全模式
    php安全模式:safe_mode=on|off
    啟用safe_mode指令將對在共享環(huán)境中使用PHP時可能有危險的語言特性有所限制。可以將safe_mode是指為布爾值on來啟用,或者設置為off和腳本嘗試訪問的文件的UID,以此作為限制機制的基礎。如果UID相同,則知性腳本;否則,腳本失敗。
    當啟用安全模式時,一些限制將生效
    1、 所有輸入輸出函數(shù)(例如fopen()、file()和require())的適用會受到限制,只能用于與調用這些函數(shù)的
    腳本有相同擁有者的文件
    2、 如果試圖通過函數(shù)popen()、system()或exec()等執(zhí)行腳本,只有當腳本位于safe_mode_exec_dir
    配置指令指定的目錄才可能
    3、 3、HTTP驗證得到進一步加強,因為驗證腳本用于者的UID劃入驗證領域范圍內。此外,當啟用安
    全模式時,不會設置PHP_AUTH。
    4、 4、如果適用MySQL數(shù)據(jù)庫服務器,鏈接MySQL服務器所用的用戶名必須與調用mysql_connect()
    的文件擁有者用戶名相同。
    以下是一些和安全模式相關的配置選項
    safe_mode_gid=on|off
    safe_mode_include_dir=string
    safe_mode_env_vars=string
    safe_mode_exec_dir=string
    safe_mode_protected_env_vars=string

  4. 常見的web攻擊方式
    常見攻擊
    XSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入的惡意html代碼會被執(zhí)行,從而達到惡意用戶的特殊 目的。XSS屬于被動式的攻擊,因為其被動且不好利用,所以許多人常呼略其危害性。但是隨著前端技術的不斷進步富客戶端的應用越來越多,這方面的問題越來 越受關注。舉個簡單例子 : 假如你現(xiàn)在是sns站點上一個用戶,發(fā)布信息的功能存在漏洞可以執(zhí)行js 你在 此刻輸入一個 惡意腳本,那么當前所有看到你新信息的人的瀏覽器都會執(zhí)行這個腳本彈出提示框 (很爽吧 彈出廣告 :)),如果你做一些更為激進行為呢 后果難以想象。
    CSRF(Cross Site Request Forgery),跨站點偽造請求。顧名思義就是 通過偽造連接請求在用戶不知情的情況下,讓用戶以自己的身份來完成攻擊者需要達到的一些目的。csrf 的攻擊不同于xss csrf 需要被攻擊者的主動行為觸發(fā)。這樣聽來似乎是有“被釣魚”的嫌疑。
    多窗口瀏覽器這這方面似乎是有助紂為虐的嫌疑,因為打開的新窗口是具有當前所有 會話的,如果是單瀏覽器窗口類似ie6 就不會存在這樣的問題,因為每個窗口都是一個獨立的進程。舉個簡單例子 : 你正在玩白社會, 看到有人發(fā)了一個連接,你點擊過去,然后這個連接里面?zhèn)卧炝艘粋€送禮物的表單,這僅僅是一個簡單的例子,問題可見一般。
    cookie劫持。通過獲取頁面的權限,在頁面中寫一個簡單的到惡意站點的請 求,并攜帶用戶的cookie 獲取cookie后通過cookie 就可以直以被盜用戶的身份登錄站點。這就是cookie 劫持。舉個簡單例子: 某人寫了一篇很有意思的日志,然后分享給大家,很多人都點擊查看并且分享了該日志,一切似乎都很正常,然而寫日志的人卻另有用心,在日志中偷偷隱藏了一個 對站外的請求,那么所有看過這片日志的人都會在不知情的情況下把自己的cookie 發(fā)送給了 某人,那么他可以通過任意一個人的cookie 來登錄這個人的賬戶。
    SQL注入攻擊
    在 SQL 注入攻擊 中,用戶通過操縱表單或 GET 查詢字符串,將信息添加到數(shù)據(jù)庫查詢中。
    DNS攻擊
    拒絕服務攻擊
    拒絕服務攻擊即攻擊者想辦法讓目標機器停止提供服務,是黑客常用的攻擊手段之。
    攻擊者進行拒絕服務攻擊,實際上讓服務器實現(xiàn)兩種效果:一是迫使服務器的緩沖區(qū)滿,不接收新的請求;二是使用IP欺騙,迫使服務器把合法用戶的連接復位,影響合法用戶的連接

  5. PHP做好防盜鏈的基本思想 防盜鏈
    什么是盜鏈?
    盜鏈是指服務提供商自己不提供服務的內容,通過技術手段繞過其它有利益的最終用戶界面(如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務提供商的服務內容,騙取最終用戶的瀏覽和點擊率。受益者不提供資源或提供很少的資源,而真正的服務提供商卻得不到任何的收益。
    網(wǎng)站盜鏈會大量消耗被盜鏈網(wǎng)站的帶寬,而真正的點擊率也許會很小,嚴重損害了被盜鏈網(wǎng)站的利益。 如何做防盜鏈?
    不定期更名文件或者目錄
    限制引用頁
    原理是,服務器獲取用戶提交信息的網(wǎng)站地址,然后和真正的服務端的地址相比較, 如果一致則表明是站內提交,或者為自己信任的站點提交,否則視為盜鏈。實現(xiàn)時可以使用HTTP_REFERER1 和htaccess 文件(需要啟用mod_Rewrite),結合正則表達式去匹配用戶的每一個訪問請求。
    文件偽裝
    文件偽裝是目前用得最多的一種反盜鏈技術,一般會結合服務器端動態(tài)腳本 (PHP/JSP/ASP)。實際上用戶請求的文件地址,只是一個經(jīng)過偽裝的腳本文件,這個腳本文件會對用戶的請求作認證,一般會檢查 Session,Cookie 或HTTP_REFERER 作為判斷是否為盜鏈的依據(jù)。而真實的文件實際隱藏在用戶不能夠訪問的地方,只有用戶通過驗證以后才會返回給用戶
    加密認證
    這種反盜鏈方式,先從客戶端獲取用戶信息,然后根據(jù)這個信息和用戶請求的文件名 字一起加密成字符串(Session ID)作為身份驗證。只有當認證成功以后,服務端才會把用戶需要的文件傳送給客戶。一般我們會把加密的Session ID 作為URL 參數(shù)的一部分傳遞給服務器,由于這個Session ID 和用戶的信息掛鉤,所以別人就算是盜取了鏈接,該Session ID 也無法通過身份認證,從而達到反盜鏈的目的。這種方式對于分布式盜鏈非常有效。
    隨機附加碼
    每次,在頁面里生成一個附加碼,并存在數(shù)據(jù)庫里,和對應的圖片相關,訪問圖片時和此附加碼對比,相同則輸出圖片,否則輸出404圖片
    加入水印

  6. HTTP請求頭信息和響應頭信息
    請求頭信息
    POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1
    Host: 172.30.4.102
    User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0
    Accept: /
    Accept-Language: zh-cn,zh;q=0.5
    Accept-Encoding: gzip, deflate
    Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
    Connection: keep-alive
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Referer: http://172.30.4.102/scp1.1.0/index.php/prs/new_rnaseqtask/index_continue/13/364 Content-Length: 1819
    Cookie:
    ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache
    Cache-Control: no-cache
    響應頭信息
    HTTP/1.1 200 OK
    Date: Fri, 02 Sep 2011 09:27:07 GMT
    Server: Apache/2.2.3 (Red Hat)
    X-Powered-By: PHP/5.1.6
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Vary: Accept-Encoding
    Content-Encoding: gzip
    Content-Length: 31
    Connection: close
    Content-Type: text/html; charset=UTF-8

  7. MySQL
    MySQL數(shù)據(jù)庫性能優(yōu)化
    使用mysqlreport;
    正確使用索引:explain分析查詢語句,組合索引,索引副作用(占空間、update)
    開啟慢查詢日志、使用慢查詢分析工具mysqlsla;
    索引緩存、索引代價(插入更新索引);
    表鎖,行鎖,行鎖副作用(update多時候變慢),在select和update混合的情況下,行鎖巧妙解決了讀寫互斥的問題;
    開啟使用查詢緩存;
    修改臨時表內存空間;
    開啟線程池;
    MySQL Query語句優(yōu)化的基本思路和原則

  8. 優(yōu)化需要優(yōu)化的Query;

  9. 定位優(yōu)化對象的性能瓶頸;

  10. 明確優(yōu)化目標;

  11. 從Explaing入手;

  12. 多使用Profile;

  13. 永遠用小結果集推動大的結果集;

  14. 盡可能在索引中完成排序;

  15. 只取自己需要的Columns;

  16. 僅僅使用最有效的過濾條件;

  17. 盡可能避免復雜的Join和子查詢。
    MySQL 中MyISAM引擎和InnoDB引擎的區(qū)別以及它們的性能
    1:Innodb支持事物,Myisam不支持
    2:鎖定機制不一樣,Myisam支持表鎖定,而Innodb支持行鎖
    3:Myisam不支持外鍵,Innodb能支持
    4:Myisam能在特定環(huán)境下支持全文索引,而Innodb不支持
    5:Myisam支持數(shù)據(jù)壓縮,Innodb不支持
    6:在數(shù)據(jù)存儲上,Myisam占用的空間少,Innodb相對多些
    7:Myisam在批量插入和查詢方面速度上有優(yōu)勢,而Innodb由于支持行鎖,所以在數(shù)據(jù)修改方面更勝一籌
    MySQL存儲引擎
    MyISAM:不支持事務、表鎖和全文索引, 操作速度快
    InnoDB:行鎖設計、支持外鍵、支持安全事務
    HEAP:數(shù)據(jù)存放在內存中,臨時表
    NDB Cluster:MySQL的簇式數(shù)據(jù)庫引擎
    CSV: 存儲引擎把數(shù)據(jù)以逗號分隔的格式存儲在文本文件中。
    FEDERATED:存儲引擎表并不存放數(shù)據(jù),它只是指向一臺遠程MySQL數(shù)據(jù)庫服務器上的表 Archive: 只支持INSERT和SELECT操作, 壓縮后存儲, 非常適合存儲歸檔數(shù)據(jù)
    Merge:允許將一系列等同的MyISAM表以邏輯方式組合在一起,并作為1個對象引用它們 表類型,區(qū)分表類型
    優(yōu)化表設計的常用思路
    負載均衡的數(shù)據(jù)庫設計
    數(shù)據(jù)類型及詳細定義,區(qū)分

  18. 變量如何定義?如何檢查變量是否定義?如何刪除一個變量?怎樣檢測變量是否設置?
    $定義 isset()// 檢測變量是否設置
    defined()// 檢測常量是否設置
    unset()//銷毀指定的變量
    empty()// 檢測變量是否為空

  19. 什么是可變變量?
    一個變量的變名可以動態(tài)的設置和使用。
    a = 'hello' , $$a = 'world',{$a}=hello world

  20. 字符串怎么轉成整數(shù),有幾種方法?怎么實現(xiàn)?
    強制類型轉換: (整型)字符串變量名;
    直接轉換:settype(字符串變量,整型);
    intval(字符串變量);

  21. 標量數(shù)據(jù)和數(shù)組的最大區(qū)別是什么?
    一個標量只能存放一個數(shù)據(jù),而數(shù)組可以存放多個數(shù)據(jù)。

  22. 常量如何定義? 如何檢測一個常量是否被定義?常量的值只能是哪些數(shù)據(jù)類型?
    define()//定義常量 , defined()//檢查常量是否定義
    常量的值只能是標量類型的數(shù)據(jù)。

  23. 如果定義了兩個相同的常量,前者和后者哪個起作用?
    前者起作用,因為常量一旦定義就不能被重新定義或者取消定義。

  24. 常量和變量有哪些區(qū)別?
    1)常量前沒有$符號;
    2)常量只能通過define()定義,而不能通過賦值語句定義;
    3)常量可以在任何地方定義和訪問,而變量有全局和局部之分;
    4)常量一旦定義就不能被重新定義或者取消定義,而變量而通過賦值方式重新定義;
    5)常量的值只能是標量數(shù)據(jù),而變量的數(shù)據(jù)庫類型有8種原始數(shù)據(jù)類型。

  25. PHP中常用的幾個預定義的全局數(shù)組變量是哪些?
    有9大預定義的內置數(shù)組變量:
    _POST,_GET, _REQUEST,_SESSION, _COOKIE,_FILES,_SERVER,_ENV, $GLOBALS

  26. 在實際開發(fā)中,常量最常用于哪些地方?
    1)連接數(shù)據(jù)庫的信息定義成常量,如數(shù)據(jù)庫服務器的用戶名、密碼、數(shù)據(jù)庫名、主機名;
    2)將站點的部分路徑定義成常量,如web絕對路徑,smarty的安裝路徑,model、view或者controller的文件夾路徑;
    3)網(wǎng)站的公共信息,如網(wǎng)站名稱,網(wǎng)站關鍵詞等信息

  27. func()和@func()之間有什么區(qū)別?
    第二個函數(shù)調用失敗不會報錯,第一個會報錯

  28. 字符串運算符“.”與算術運算符“+”有什么區(qū)別?
    當“a”“b”之間使用.時認為是連字符。如果兩者間是+的時候php會認為是一次運算。
    1)如果+號兩邊的字符串是數(shù)字組成的,那么會將字符串自動轉為整型;
    2)如果+號兩邊是純粹的字母,那么會輸出0;
    3)如果+號兩邊的字符串是以數(shù)字開頭的,那么會截取字符串開頭的數(shù)字,然后進行運算。

  29. foeach數(shù)組的時候指針是如何指向的?list()/each()/while()循環(huán)數(shù)組的時候指針如何指向的呢?
    當foreach開始執(zhí)行的時候,數(shù)組內部的指針會自動指向第一個單元。因為foreach所操作的是指定數(shù)組的拷貝,而不是該數(shù)組本身。而each()一個數(shù)組后,數(shù)組指針將停留在數(shù)組中的下一個單元或者碰到數(shù)組結尾時停留在最后一個單元。如果要再次使用each()遍歷數(shù)組,必須要使用reset().
    reset()將數(shù)組的內部指針倒回到第一個單元并返回第一個數(shù)組單元的值。
    數(shù)組與字符串之間的轉換

  30. 字符串定義的時候單引號和雙引號有什么區(qū)別?
    單引號加載速度比雙引號加載速度快
    B. 去除字符串首尾空格的函數(shù): trim ltrim rtrim(別名:chop) 使用第二個參數(shù),還可以去除指定的字符。
    C. 轉義字符串函數(shù):addslashes()
    D. 獲取字符串長度的函數(shù):strlen()
    E. 截取字符串長度的的函數(shù):substr()
    F. 檢索字符串函數(shù): strstr() , strpos()
    G. 替換字符串函數(shù):str_replace
    41.頁面字符出現(xiàn)亂碼,怎么解決?
    1.首先考慮當前文件是不是設置了字符集。查看是不是meta標簽中寫了charset,如果是php頁面還可以看看是不是
    在header()函數(shù)中指定了charset;
    例如:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    header(“content-type:text/html;charset=utf-8”);
    2.如果設置了字符集(也就是charset),那么判斷當前文件保存的編碼格式是否跟頁面設置的字符集保持一致,
    兩者必須保持統(tǒng)一;
    3.如果涉及到從數(shù)據(jù)庫提取數(shù)據(jù),那么判斷數(shù)據(jù)庫查詢時的字符集是否跟當前頁面設置的字符集一致,兩者必須統(tǒng)一,
    例如:mysql_query(“set names utf8”)。

  31. 在url中用get傳值的時候,若中文出現(xiàn)亂碼,應該用哪個函數(shù)對中文進行編碼?
    用戶在網(wǎng)站表單提交數(shù)據(jù)的時候,為了防止腳本攻擊(比如用戶輸入<script>alert(111);</script>),php端接收數(shù)據(jù)的時候,應該如何處理?
    使用urlencode()對中文進行編碼,使用urldecode()來解碼。
    使用htmlspecialchars($_POST[‘title’])來過濾表單傳參就可以避免腳本攻擊。

  32. 說說mysql_fetch_row() 和mysql_fetch_assoc()和mysql_fetch_array之間有什么區(qū)別?
    第一個是返回結果集中的一行作為索引數(shù)組,第二個是返回關聯(lián)數(shù)組,而第三個既可以返回索引數(shù)組也可以返回關聯(lián)數(shù)組,取決于它的第二個參數(shù) MYSQL_BOTH MYSQL_NUM MYSQL_ASSOC 默認為MYSQL_BOTH
    sql =”select * from table1”;result = mysql_query(sql); mysql_fetch_array(result, MYSQL_NUM);

  33. 請說出目前學過的返回是資源的函數(shù)?
    答: fopen(打開文件)
    imagecreatefromjpeg(png gif) — 從 JPEG 文件新建一圖像
    imagecreatetruecolor — 新建一個真彩色圖像
    imagecopymerge — 拷貝并合并圖像的一部分
    imagecopyresized — 拷貝部分圖像并調整大小
    mysql_connect — 打開一個到 MySQL 服務器的連接
    mysql_query();只有這執(zhí)行select的時候成功,才返回資源,失敗返回FALSE

  34. 文件上傳需要注意哪些細節(jié)?怎么把文件保存到指定目錄?怎么避免上傳文件重名問題?
    1.首現(xiàn)要在php.ini中開啟文件上傳;
    2.在php.ini中有一個允許上傳的最大值,默認是2MB。必要的時候可以更改;
    3.上傳表單一定要記住在form標簽中寫上enctype="multipart/form-data";

    1. 提交方式 method 必須是 post;
    2. 設定 type="file" 的表單控件;
      6.要注意上傳文件的大小MAX_FILE_SIZE、文件類型是否符合要求,上傳后存放的路徑是否存在。
      可以通過上傳的文件名獲取到文件后綴,然后使用時間戳+文件后綴的方式為文件重新命名,這樣就避免了重名??梢宰约涸O置上傳文件的保存目錄,與文件名拼湊形成一個文件路徑,使用move_uploaded_file(),就可以完成將文件保存到指定目錄。
  35. header()函數(shù)主要的功能有哪些?使用過程中注意什么?
    答:
    header()發(fā)送http頭信息
    -header("content-type:text/html; charset=utf-8");-------------------//當前頁面輸出內容是html,編碼為utf-8格式
    -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    -header("content-type:image/png gif jpeg");----------------------------------//當前頁面輸出內容的格式是圖片
    -header("refresh:5;url=http://www.1004javag.com/five/string.php");--//頁面5秒后要跳轉到新網(wǎng)址
    -header("location:http://1004javag.com/five/string.php");-----------//頁面重定向

  36. 文件下載的時候如果使用header()函數(shù)?
    答:header("content-type: application/octet-stream;charset=UTF-8"); //在這里加utf-8和在上面定義有什么區(qū)別?、??
    header("accept-ranges: bytes");
    header("accept-length: ".filesize(filedir.filename));
    header("content-disposition: attachment; filename=".filedir.filename);

  37. 什么是ajax?ajax的原理是什么?ajax的核心技術是什么?ajax的優(yōu)缺點是什么?
    ajax是asynchronous javascript and xml的縮寫,是javascript、xml、css、DOM等多個技術的組合。 '$'是jQuery的別名.
    頁面中用戶的請求通過ajax引擎異步地與服務器進行通信,服務器將請求的結果返回給這個ajax引擎,
    最后由這個ajax引擎來決定將返回的數(shù)據(jù)顯示到頁面中的指定位置。Ajax最終實現(xiàn)了在一個頁面的指定位置可以加載另一個頁面所有的輸出內容。
    這樣就實現(xiàn)了一個靜態(tài)頁面也能獲取到數(shù)據(jù)庫中的返回數(shù)據(jù)信息了。所以ajax技術實現(xiàn)了一個靜態(tài)網(wǎng)頁在不刷新整個頁面的情況下與服務器通信,
    減少了用戶等待時間,同時也從而降低了網(wǎng)絡流量,增強了客戶體驗的友好程度。
    Ajax的優(yōu)點是:

    1. 減輕了服務器端負擔,將一部分以前由服務器負擔的工作轉移到客戶端執(zhí)行,利用客戶端閑置的資源進行處理;
    2. 在只局部刷新的情況下更新頁面,增加了頁面反應速度,使用戶體驗更友好。
      Ajax的缺點是不利于seo推廣優(yōu)化,因為搜索引擎無法直接訪問到ajax請求的內容。
      ajax的核心技術是XMLHttpRequest,它是javascript中的一個對象。
  38. PHP提供了2套正則表達式函數(shù)庫,分別是哪兩套?【
    (1) PCRE Perl兼容正則表達式 preg_ 為前綴
    (2) POSIX 便攜式的操作系統(tǒng)接口 ereg_ 為前綴
    111、 如何防止SQL注入?
    要對提交的信息進行過濾,對單引號進行轉義。
    首先可以在php.ini中設置,讓所有的單引號在提交后都進行轉義?;蛘呤褂胊ddslashes().
    112FCKEditor自動過濾的解決辦法?
    如果您需要編輯模板頁,默認的FCK設置是會去掉<HTML></HTML><BODY></BODY>標簽,而且會給你加上<P></P>標簽的,如果需要保留的話,只要更改下設置可以了。
    在fckconfig.js里面有:FCKConfig.FullPage = false ;
    改為:FCKConfig.FullPage = true;
    如果想去掉自動添加<P>的代碼就可以在這里設置
    默認是
    FCKConfig.EnterMode = 'p' ; // p | div | br
    FCKConfig.ShiftEnterMode = 'br' ; // p | div | br
    改成
    FCKConfig.EnterMode = 'br' ; // p | div | br
    FCKConfig.ShiftEnterMode = 'p' ; // p | div | br

  39. 使用GD2庫創(chuàng)建圖像的步驟?
    1). 創(chuàng)建一個畫布:imagecreate();
    2). 設置畫布背景顏色,使用RGB設置顏色:imagecolorallocate();
    3). 設置文字顏色:imagecolorallocate();
    4). 在畫布上書寫文字:imagestring();
    5). 以 JPEG 格式將圖像輸出到瀏覽器或文件:【根據(jù)圖片格式不同,函數(shù)還可以是imagepng()、imagegif()等】 imagejpeg();
    6). 清除圖像資源:imagedestroy();

  40. GD2庫生成縮略圖的步驟是什么?
    1). 讀取希望生成縮略圖的源圖像,創(chuàng)建圖像對象:【根據(jù)圖片格式不同,函數(shù)也相應不同】
    src_image = imagecreatefromjpeg(); 2). 獲取原圖像的寬度和高度srcW,srcH,根據(jù)縮放比例計算出新圖像的寬度和高度dstW、dstH: 3). 創(chuàng)建一個真色彩的圖像對象,寬度和高度設置成剛才計算出的寬度和高度:dst_image = imagecreatetruecolor(dstW,dstH);
    4). 拷貝圖像并調整大小: imagecopyresized();
    5). 將圖像輸出:【根據(jù)圖片格式不同,函數(shù)也相應不同】 imagejpeg();
    6). 清除圖像資源(將源圖像資源和目標圖像資源都清除) imagedestroy();

  41. GD2庫給圖片增加水印如何做?

  42. 添加簡單的文本水印:
    利用imagestring()函數(shù)就可以在圖片上寫文本水印。

  43. 增加一個圖形水印:
    1). 讀取希望增加水印的源圖片,創(chuàng)建圖像對象:【根據(jù)圖片格式不同,函數(shù)也相應不同】
    image = imagecreatefromjpeg(); 2). 創(chuàng)建一個水印圖片的圖像對象:watermark = imagecreatefrompng();
    3). 拷貝并合并圖像:
    imagecopymerge();
    4). 將圖像輸出:【根據(jù)圖片格式不同,函數(shù)也相應不同】
    imagejpeg();
    5). 清除圖像資源(將源圖像資源和水印圖像資源都清除)
    輸出控制函數(shù):ob(output buffer) ob_flush
    加密函數(shù) md5
    數(shù)學類函數(shù):abs絕對值,rand隨機數(shù),ceil取整,floor,mt_rand生成更好的隨機數(shù)
    轉換函數(shù):explode 使用一個字符串分割另一個字符串,implode
    時間函數(shù):date(),strtotime (將字符串轉換為時間戳)
    處理地址欄: url_encode url_decode
    10.亂碼問題
    ASCII(American Standard Code for Information Interchange)81年產(chǎn)生
    ANSI 美國國家標準學會( American National Standards Institute)
    utf-8(-8代表一次傳輸8個字符)可變字節(jié)編碼(中文3個字節(jié))(utf:Unicode轉換格式(UCS Transformation Format)
    utf-16(-16代表一次傳輸16個字符)
    GBK. 國家標準擴展碼(Guo-Biao Kuozhan)90年產(chǎn)生(雙字節(jié)編碼)
    GB2312 因為國際排行2312位(81年產(chǎn)生)
    BIG5
    unicode (國際編碼)可變字節(jié)編碼
    Latin_1
    utf-8+ bom
    ISO:國際標準化組織(International Standardization Organization)
    選擇器:
    1.基本選擇器:
    ①、('#result')=jQuery('#result')=document.getElementById('result') <div id='result'> <div class='result'> ②、class選擇器('.result')
    ③、元素選擇器('div') 2.子代選擇器:('#myform < input')
    3.后代選擇器:('#myform input') 4.組合選擇器:('#myform < span < input')
    urlencode(str)替換所有非字母數(shù)字的字符,變?yōu)?后面跟兩位16進制數(shù),空格變?yōu)?號
    urldecode(str)對已%##編碼的URL進行解析還原
    parse_url(str)解析完整的url轉變?yōu)闉閿?shù)組
    parse_str(str,out)解析請求字符串轉變?yōu)閿?shù)組
    htmlspecialchars()轉換html代碼為實體代碼
    printf/sprintf %b %d %c %x %s %f %X
    – b 整數(shù)轉成二進位。
    – c 整數(shù)轉成對應的 ASCII 字符。
    – d 整數(shù)轉成十進位。
    – f 單倍精確度數(shù)字轉成浮點數(shù)。
    – o 整數(shù)轉成八進位。
    – s 轉成字符串。
    – x 整數(shù)轉成小寫十六進位。
    – X 整數(shù)轉成大寫十六進位。
    1.數(shù)組和棧的操作
    array_push(目標數(shù)組,字符串)將字符串壓入數(shù)組的最后
    array_pop(目標數(shù)組)將數(shù)組最后的元素彈出并返回
    2.數(shù)組和隊列的操作
    array_unshift(目標數(shù)組,字符串)將字符串放到數(shù)組的開始位置
    array_shift(目標數(shù)組)刪除數(shù)組的第一個元素并返回
    date(format,[timestamp])//格式化時間信息,并返回
    time()//返回當前時間戳信息
    mktime(hour,minute,second,month,day,year)
    mktime(小時,分鐘,秒,月,天,年)//取得一個日期的 Unix 時間戳
    max()//取得最大值
    -echo max(1, 3, 5, 6, 7); // 7
    -echo max(array(2, 4, 5)); // 5
    -echo max(0, '1hello'); // 1hello
    -echo max('hello', 0); // hello
    -echo max(-1, 'hello'); // hello
    -echo max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)
    -echo max('string', array(2, 5, 7), 42); // array(2, 5, 7)數(shù)組和非數(shù)組比較數(shù)組總認為最大
    mt_rand(65,94)//獲得隨機數(shù)
    round()//四舍五入取整
    flush()//輸出準備區(qū)內容
    urlencode('張三')//返回字符串中,除了-_.之外的所有非字母數(shù)字部分為%后接兩位
    16進制數(shù),空格轉化為+
    urldecode()//對已經(jīng)編碼的部分反編碼
    chr(mt_rand(65,94))隨機獲得字母
    ord(chr(mt_rand(65,94)))將字母轉化為數(shù)字
    第七單元【php連接mysql】
    *mysql_connect(主機,用戶名,密碼) 打開一個到 MySQL 服務器的連接
    *mysql_select_db(數(shù)據(jù)庫,連接數(shù)據(jù)庫資源) 選擇 MySQL 數(shù)據(jù)庫
    *mysql_query("set names utf8");設定字符集
    *mysql_close() 關閉 MySQL 鏈接
    *mysql_query(語句) 發(fā)送并執(zhí)行一條sql語句
    mysql_fetch_row(結果資源)從結果集中取得一行結果(索引數(shù)組)
    mysql_fetch_assoc(結果資源)從結果集中取得一行結果(關聯(lián)數(shù)組)
    *mysql_fetch_array(結果資源)從結果集中取得一行結果(索引/關聯(lián)數(shù)組)
    mysql_fetch_object(結果資源)從結果集中取得一行結果(對象數(shù)組)

mysql_errno()返回錯誤號碼
*mysql_error()返回錯誤信息
*mysql_num_rows(結果資源)用于計算查詢結果中所得行的數(shù)目
*mysql_affected_rows()獲得受影響的結果數(shù)目
*mysql_insert_id()傳回最后一次使用 INSERT 指令產(chǎn)生的自動增長 ID 值

mysql_result(結果集,索引行,字段)指定獲取結果
mysql_free_result(結果資源)釋放結果集
mysql_num_fields(結果資源)用于計算查詢結果中所得列的數(shù)目
mysql_fetch_field(結果資源)從結果集中取得列的結果,以對象形式返回
mysql_pconnect()永久連接數(shù)據(jù)庫
2、mysql_fetch_row() 和mysql_fetch_array之間有什么區(qū)別? (1分)
答:mysql_fetch_row是從結果集取出1行數(shù)組,作為枚舉 mysql_fetch_array是從結果集取出一行數(shù)組作為關聯(lián)數(shù)組,或數(shù)字數(shù)組,兩者兼得
26.一個函數(shù)的參數(shù)不能是對變量的引用,除非在php.ini中把(15)設為on.答:allow_call_time_pass_reference
27..在PHP中,heredoc是一種特殊的字符串,它的結束標志必須(18)。
答:結束標識符所在的行不能包含任何其它字符除";"
28.用PHP打印出前一天的時間格式是2006-5-10 22:21:21
答:echo date('Y-m-d H:i:s', strtotime('-1 day'));
29請對POSIX風格和兼容Perl風格兩種正則表達式的主要函數(shù)進行類比說明
ereg preg_match
ereg_replace preg_replace
30請說明在php.ini中safe_mode開啟之后對于PHP系統(tǒng)函數(shù)的影響
答案:system,passthru,exec,shell_exec,popen,phpinfo
等等大部分的文件操作函數(shù)。
62、實現(xiàn)中文字串截取無亂碼的方法。(3分)**************** Mb_substr 答:function GBsubstr(string,start, length) { if(strlen(string)>length){str=null; len=start+length; for(i=start;i<len;i++){ if(ord(substr(string,i,1))>0xa0){ str.=substr(string,i,2);i++; }else{ str.=substr(string,i,1); } } returnstr.'...'; }else{ return string; } } 71、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須?(1分) 答:heredoc的語法是用"<<<"加上自己定義成對的標簽,在標簽范圍內的文字視為一個字符串 例子:str = <<<SHOW my name is Jiang Qihui! SHOW;
79、JS表單彈出對話框函數(shù)是?獲得輸入焦點函數(shù)是? (2分) 答:彈出對話框: alert(),prompt(),confirm() 獲得輸入焦點 focus() 80、JS的轉向函數(shù)是?怎么引入一個外部JS文件?(2分) 答:window.location.href,<script type="text/javascript" src="js/js_function.js"></script>
寫一個函數(shù)驗證電子郵件的格式是否正確。** if(isset(_POST['action']) &&_POST['action']==’submitted’){ email=_POST['email']; if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[0-9a-zA-Z-]+){1,3}/”,email)){ echo“電子郵件檢測失敗”; }else{ echo“電子郵件檢測成功”; } }
104.如果你想要自動加載類,下面哪種函數(shù)聲明是正確的C

A) function autoload($class_name)

B) function __autoload(class_name,file)

C) function __autoload($class_name)

D) function _autoload($class_name)

E) function autoload(class_name,file)
112.<?php echo -10%3; ?> 答案:-1。 考查:優(yōu)先級。 因為-的優(yōu)先級比%求余的優(yōu)先級低, 也就是-(10%3)。 113. print (int)pow(2,32); 答案:0 114.//file1.php <?php a = '123'; ?> //file2.php <?php echo include('file1.php'); ?> 答案:1. 考查:返回值。 因include()也是一個函數(shù),有返回值。 在成功時返回1,失敗時返回錯誤信息。 如果被包含的文件有return,則inculde() 成功時返回該文件的返回值。 115. <?phpcount = 5; function get_count() { static count = 0; returncount++; } ++count; get_count(); echo get_count(); ?> 答案:1. 考查:static和++。 因staticcount,所以只在第一次 調用get_count的時候對count賦值 為0,第二次再進來這個函數(shù),則不會 第二次賦值。其次就是returncount++ 和return ++count了,前者先返回, 后者先++再返回。 116.<?phparr= array(0 =>1,'aa' =>2,3,4); foreach(arr askey => val){ print(key == 'aa' ? 5 : val); } ?> 答案:5534. 考查:類型轉換。 因遍歷數(shù)組第一次的時候,key和aa的比 較實際就是0和aa的比較,一個是int一個 是string,這個時候會轉換類型,將字符 串轉換為數(shù)字再與數(shù)字比較。所以0=='aa' 就是0==0,所以為true,也就是輸出5。 雖然PHP是若類型語言,但是人家也有類 型的好嗎。 117. <?php echo count (false); a = count ("567") + count(null) + count(false); echoa; ?> 答案:2. 考查:count的用法。 因count()的官方解釋“If the parameter is not an array or not an object with implemented Countable interface, 1 will be returned.”. 意思是說,如果不是數(shù)組或者對象的其他 類型,返回1.那么這個值應該就是1+0+1 了(boolen人家也是一個類型,雖然是 討厭的false)。NULL的意思是沒有值, 難道在計數(shù)函數(shù)中還能有1? 118. <?php arr = array(1,2,3); foreach(arr as &val) {val += val % 2 ?val++ : val--; }val = 0; print(join('',$arr)); ?> 答案:330。
考查:++和&。
因foreach結束后的數(shù)組應該是array(3,3,7);最后給第三個元素賦值為0,所以就是330了。其中注意的是&,如果有&則是對原變量操作,如果沒有,則是先生成一個新變量,然后給這個變量復制,最后操作的是這個新變量。

  1. <?php echo intval((0.1+0.7)10); ?> 答案:7。 考查:浮點數(shù)的概念。 因0.1+0.7=0.8 0.810=8 所以轉換 成整數(shù)后還是8?錯!因為0.1+0.7=0.8是 浮點數(shù),0.8*10在數(shù)學計算中是正整數(shù)8, 可是在計算機中它仍然是浮點數(shù)8,什么叫 浮點數(shù)8?每一個看起來像整數(shù)的浮點數(shù), 其實都不是整數(shù),比如這個8,它其實只是 7.9999循環(huán),無限接近于8,轉換成整數(shù)會 舍棄小數(shù)部分,就是7嘍。 120. <?php ini_set('display_errors',0); arr = array(1=>1,3=>3);i = 2; a = 'test' . isset(arr[i]) ?arr[i] :i; 請問a的值是什么? A、test B、NULL C、2 D、test2 ?> 答案:B。 考查:優(yōu)先級。 因“."的優(yōu)先級高于三元運算符"?:"。所以程 序其實報錯了。會說arr的索引2不存在。 121. <?php a = 3;b = 5; if(a = 5 ||b = 7) { a++;b++; } echo a . " " .b; ?> A、6 8 B、6 6 C、2 6 D、1 6 E、4 6 答案:D。 考查:優(yōu)先級,基礎概念,++。 因“="的優(yōu)先級低于“||”,所以先邏輯判斷再賦值。 也就是(a = (5 ||b = 7))。所以,最后 其實給a賦值了,a等于1. 122. <?phpx = 2; echo x == 2 ? '我' :x == 1 ? '你' : '它'; ?> 輸出的結果是() A、我 B、你 C、它 D、syntax error 答案:B。 考查:優(yōu)先級。
    167.雙引號和單引號的區(qū)別
    答:雙引號解釋變量,單引號不解釋變量
    雙引號里插入單引號,其中單引號里如果有變量的話,變量解釋
    雙引號的變量名后面必須要有一個非數(shù)字、字母、下劃線的特殊字符,或者用{}講變量括起來,否則會將變量名后面的部分當做一個整體,引起語法錯誤 雙引號解釋轉義字符,單引號不解釋轉義字符,但是解釋'\和\
    能使單引號字符盡量使用單引號,單引號的效率比雙引號要高(因為雙引號要先遍歷一遍,判斷里面有沒有變量,然后再進行操作,而單引號則不需要判斷)
    PHP中處理json格式的函數(shù)為json_decode( string json [, boolassoc ] ) ,接受一個 JSON格式的字符串并且把它轉換為PHP變量,參數(shù)json待解碼的json string格式的字符串。assoc當該參數(shù)為TRUE時,將返回array而非object;
    Json_encode:將PHP變量轉換成json格式
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、PHP語言的一大優(yōu)勢是跨平臺,什么是跨平臺?一、PHP基礎: PHP的運行環(huán)境最優(yōu)搭配為Apache+MySQ...
    __書山有路__閱讀 1,612評論 0 15
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,629評論 1 32
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 28,797評論 1 45
  • [本圖出自臉萌] “罷黜百家,獨尊儒術”是漢朝儒學大家董仲舒提出提出的“思想要大一統(tǒng)”被漢武帝接受后施行的政策,從...
    wiki昊閱讀 690評論 0 0
  • 2017年會計行業(yè)動蕩不安,會計從業(yè)資格證暫??荚?,中級會計取消必須持有從業(yè)證限制,會計法正在擬定修改中,可真是幾...
    下雨天_西夕閱讀 416評論 0 0

友情鏈接更多精彩內容