面試知識點3

  1. PHP打印出前一天的時間格式是2010-7-3 12:28:21?

echo date(‘Y-m-d H:i:s, strtotime(‘-1 days’)); javascript

 

  1. 下面哪一個方式不能取出$q = ‘obodol’;的第一個字母()

A:$a{0}  B:left{$a,1}   C:substr($a,0-strlen($a),1);    D:$a[0]php

 

  1. 實現中文字符串截取無亂碼的方法?

1) mbstring擴展庫的mb_substr截取html

2) 自定義函數前端

 

  1. PHPerror_reporting函數有什麼做用?PHP的錯誤類型都有哪些?

1) error_reporting() 設置 PHP 的報錯級別並返回當前級別。java

2) 1 E_ERROR 致命的運行錯誤。錯誤沒法恢復,暫停執行腳本。mysql

3) 2 E_WARNING 運行時警告(非致命性錯誤)。非致命的運行錯誤,腳本執行不會中止。linux

4) 4 E_PARSE 編譯時解析錯誤。解析錯誤只由分析器產生。web

5) 8 E_NOTICE 運行時提醒(這些常常是你代碼中的bug引發的,也多是有意的行爲形成的。)ajax

6) 8191 E_ALL 全部的錯誤和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0)正則表達式

 

  1. PHP如何實現頁面跳轉

1) 方法一:php函數跳轉,缺點,header頭以前不能有輸出,跳轉後的程序繼續執行,可用exit中斷執行後面的程序。

2) header("Location:網址");//直接跳轉

3) header("refresh:3;url=http://www.baidu.com");//三秒後跳轉

 

  1. sessioncookie的區別?

1) session:儲存用戶訪問的全局惟一變量,存儲在服務器上的php指定的目錄中的(session_dir)的位置進行的存放

2) cookie:用來存儲連續訪問一個頁面時所使用,是存儲在客戶端,對於Cookie來講是存儲在用戶WINTemp目錄中的。

3) 二者均可經過時間來設置時間長短。

 

  1. 如何獲取經過setcookie設置的cookie中鍵名帶點(.)的值?

1) 點換爲下劃線獲取。

2) 如:setcookie('user.name', 'zhangsan');

3)  setcookie('user.age', '18');

4) 則須要經過$_COOKIE[‘user_name’]$_COOKIE[‘user_age’]獲取,經過var_dump($_COOKIE)可確認。

 

  1. 如何合併數組?

1) 操做符+,在前一個數的基礎上插入後一個數組,若是有相同的拋棄。

2) array_merge 是在前一個參數基礎上插入後一個參數,若是有相同用的key 用後一個覆蓋。

 

  1. 合併數組array_merge([1,2,3], [3,4,5])的結果是什麼?

[1,2,3,3,4,5]

 

  1. 下列哪一個選項沒有將john添加到users數組中()
    1. $user=array[「john」]
    2. array_unshift[$users,」john」]
    3. array_push[$users,」john」]
    4. $users  || = john

 

  1. "$array[anykey]" "$array[anykey]" 有什麼區別?

索引數組和關聯數組的區別

 

  1. 數組arsort的做用?

1) 對數組進行逆向排序並保持索引關係。

2) 相似的函數還有:

  1. sort — 對數組排序
  2. asort — 對數組進行排序並保持索引關係
  3. rsort — 對數組逆向排序
  4. arsort — 對數組進行逆向排序並保持索引關係
  5. usort — 使用用戶自定義的比較函數對數組中的值進行排序
  6. uasort — 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯
  7. uksort — 使用用戶自定義的比較函數對數組中的鍵名進行排序
  8. 下面功能PHP沒法實現的是()
    1. 服務器腳本運行
    2. 命令行腳本運行
    3. 客戶端圖形界面(GUI) 程序
    4. 瀏覽器執行DOM操做

 

  1. 下面哪一個方法不能讀取網址」http://www.qq.com 「的內容()
    1. file_get_contents()   
    2. read_exif_data()
    3. socket_read()       
    4. curl_exec()

 

  1. 抓取遠程圖片到本地,你會用什麼函數?

file_get_contents或者curl

 

  1. PHP的位運算符不包括()

A.&    B.|  C. ~   D.!

 

  1. 要檢查PHP常量是否認義,可使用函數()

A. defined()       B. ifdefin()        C. ifdefined()        D. 無

 

  1. 如下說法不正確的是( )

A. php有四種標量類型:布爾類型(boolean),整型(integer),浮點型(float),字符串(string)

B.浮點型(float)與雙精度型(double)是同一種類型

C.複合類型包括:數組(array),對象(object),資源(resource)

D.僞類型:混合型(mixed),數字型(number),回調(callback)

 

  1. 表單中的 GET POST 提交方法有什麼區別?

1) GET請求的數據會附在URL以後,POST把提交的數據則放置在是HTTP包的包體中。

2) GET方式提交的數據最多隻能是1024字節, POST是沒有大小限制的,HTTP協議規範也沒有進行大小限制。

3) POST的安全性要比GET的安全性高。經過GET提交數據,用戶名和密碼將明文出如今URL上,由於(1)登陸頁面有可能被瀏覽器緩存,(2)其餘人查看瀏覽器的歷史紀錄,那麼別人就能夠拿到你的帳號和密碼了,除此以外,使用GET提交數據還可能會形成Cross-site request forgery攻擊。

 

  1. GD庫是作什麼用的?

1) GD庫提供了一系列用來處理圖片的功能,使用GD庫能夠處理圖片,或者生成圖片。

2) 在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。

 

  1. PHP魔術方法都有哪些?

1) __construct(),類的構造函數

2) __destruct(),類的析構函數

3) __call(),在對象中調用一個不可訪問方法時調用

4) __callStatic(),用靜態方式中調用一個不可訪問方法時調用

5) __get(),得到一個類的成員變量時調用

6) __set(),設置一個類的成員變量時調用

7) __isset(),當對不可訪問屬性調用isset()empty()時調用

8) __unset(),當對不可訪問屬性調用unset()時被調用。

9) __sleep(),執行serialize()時,先會調用這個函數

10) __wakeup(),執行unserialize()時,先會調用這個函數

11) __toString(),類被當成字符串時的迴應方法

12) __invoke(),調用函數的方式調用一個對象時的迴應方法

13) __set_state(),調用var_export()導出類時,此靜態方法會被調用。

14) __clone(),當對象複製完成時調用

15) __autoload(),嘗試加載未定義的類

16) __debugInfo(),打印所需調試信息

 

  1. 怎麼認識PHP的異常處理?

1) 可使用檢測(try)、拋出(throw)和捕獲(catch)異常。即便用try檢測有沒有拋出(throw)異常,如有異常拋出(throw),使用catch捕獲異常。

2) 一個 try 至少要有一個與之對應的 catch。定義多個 catch 能夠捕獲不一樣的對象。PHP 會按這些 catch 被定義的順序執行,直到完成最後一個爲止。而在這些 catch 內,又能夠拋出新的異常。

 

  1. 解釋下PHP的垃圾回收機制?

1) php 5.3以前使用的垃圾回收機制是單純的「引用計數」,也就是每一個內存對象都分配一個計數器,當內存對象被變量引用時,計數器 1;當變量引用撤掉後,計數器-1;當計數器=0時,代表內存對象沒有被使用,該內存對象則進行銷燬,垃圾回收完成。

2) 「引用計數」存在問題,就是當兩個或多個對象互相引用造成環狀後,內存對象的計數器則不會消減爲0;這時候,這一組內存對象已經沒用了,可是不能回收,從而致使內存泄露;

3) php5.3開始,使用了新的垃圾回收機制,在引用計數基礎上,實現了一種複雜的算法,來檢測內存對象中引用環的存在,以免內存泄露。

 

  1. 打開php.ini中的safe_mode,會影響哪些函數?至少說出6個。(新浪)

1) safe_modePHP安全模式,它提供一個基本安全的共享環境,在一個有多個用戶帳戶存在的php開發的web服務器上。當安全模式打開的時候,一些函數將被徹底的禁止,而另外一些函數的功能將會受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。

2) 注意,在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性徹底去除了。

 

  1. url中用get傳值的時候,若中文出現亂碼,應該用哪一個函數對中文進行編碼?

Urlencode

 

  1. 如下代碼執行後$matches[1 ]」的值是什麼()

<?php

$a=「<H>some</H><b>html</b>「;

Preg_match(「/<\w?>(\w*?)<\/\w?>/」, $a, $matches);

?>

A.some   B.html  C.<H>some</H><b>html</b>   D.</H><b>

  1. 一下哪一個正則表達式可以抓取」//x」風格的註釋而且不會誤抓取如」http//x」()

A@(?<!:)//.*?$@    B: /(^:)\/\/.*?$/     C: /\/\/.*$/         D: @(?<=:)//.*?@

 

  1. 寫一個匹配IP的正則表達式:

^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

 

  1. 寫一個匹配郵箱的正則表達式:

^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$

 

  1. 請寫一個函數驗證電子郵件的格式是否正確(要求使用正則)

preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);

 

  1. 什麼是MVC

MVCModel(模型), View(視圖)和Controller(控制器)組成,PHP MVC能夠更高效地管理好3個不一樣層的PHP代碼。

Model:數據信息存取層。

Viewview層負責將應用的數據以特定的方式展示在界面上。

Controller:一般控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。

 

  1. 你怎麼理解命名空間?

PHP 命名空間(namespace)是在PHP 5.3中加入的.

PHP 命名空間能夠解決如下兩類問題:

a) 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。

b) 爲很長的標識符名稱(一般是爲了緩解第一類問題而定義的)建立一個別名(或簡短)的名稱,提升源代碼的可讀性。

 

  1. PHP如何實現緩存?

1) 數據緩存——廣泛的一種緩存技術

  1. 很是直觀的字面意思,就是把數據先存放好,減小對數據庫的訪問。第一次訪問時,把要用到的數據保存到一個文件裏,而後用戶再次訪問頁面時,就先檢測要查詢的數據是否在緩存文件裏,若存在,則直接取出,不需再次訪問數據庫。
  2. 通常這些數據以數組的形式保存。

2) 頁面緩存

  1. 和數據緩存差很少,每次訪問頁面時,就檢測相應的頁面緩存是否存在,若不存在,則查詢數據庫獲得相應的數據,同時生成緩存頁面,這樣,在下次訪問就能夠直接取出緩存頁面,沒必要再次查詢數據庫。

3) 內存緩存

  1. 不做過多分析,通常熟藉助第三方軟件進行優化,好比MemcachedRedis
  2. 以上方法可以解決頻繁訪問數據庫的問題,可是缺少時效性,在數據庫改變後,他們默認的數據仍是修改以前的。因此就要在規定時間內清除緩存,以更新數 據。好比在每次更新緩存後設定一個時間戳t1,當前的時間戳t2,規定緩存時間爲T,那麼,在t1t2相差在T以內時,就不更新緩存,不然,超過了T, 就從新查詢數據庫,清除以前的緩存,又獲得一個新的時間戳,依次循環下去。

 

  1. 如下哪一項不屬於PHPOPCode()

AEaccelerafor

BHCache

CAPC

DZend Framework

 

  1. 寫出如下狀態碼含義:

1) 301 臨時重定向

2) 302 重定向

3) 404 頁面未找到

4) 500 服務器內部錯誤

 

  1. 請解釋php.ini中如下配置的含義:

1) register_globals=Off

  1. register_globals=Off

接收數據的程序應該用根據表單form傳值的方法來決定。GET:用$_GET['name']$HTTP_GET_VARS['name']來接收值;POST:當formPOST提交數據$_POST['name']$HTTP_POST_VARS['name']來接收值;

  1. register_globals=On

接收數據的程序能夠直接使用$user_name$user_pass的這種相似訪問變量的方式獲得值。

2) magic_quotes_gpc=On

  1. 對於PHP magic_quotes_gpc=on的狀況, 咱們能夠不對輸入和輸出數據庫的字符串數據做addslashes()stripslashes()的操做,數據也會正常顯示。

若是此時你對輸入的數據做了addslashes()處理,那麼在輸出的時候就必須使用stripslashes()去掉多餘的反斜槓。

  1. 對於PHP magic_quotes_gpc=off 的狀況

必須使用addslashes()對輸入數據進行處理,但並不須要使用stripslashes()格式化輸出,由於addslashes()並未將反斜槓一塊兒寫入數據庫,只是幫助mysql完成了sql語句的執行。

3) allw_url_include=Off

  1. 不容許include遠程文件,不然會引發安全問題。

4) sssion.auto_start=0

  1. 不自動開啓session,須要用session_start()開啓。

 

  1. 對於大流量的網站,您採用什麼樣的方法來解決訪問量問題?

答:確認服務器硬件是否足夠支持當前的流量,數據庫讀寫分離,優化數據表,

程序功能規則,禁止外部的盜鏈,控制大文件的下載,使用不一樣主機分流主要流量。

 

  1. 你瞭解RESTFUL嗎?

REST 指的是一組架構約束條件和原則。知足這些約束條件和原則的應用程序或設計就是 RESTful

Web 應用程序最重要的 REST 原則是,客戶端和服務器之間的交互在請求之間是無狀態的。從客戶端到服務器的每一個請求都必須包含理解請求所必需的信息。若是服務器在請求之間的任什麼時候間點重啓,客戶端不會獲得通知。此外,無狀態請求能夠由任何可用服務器回答,這十分適合雲計算之類的環境。客戶端能夠緩存數據以改進性能。

在服務器端,應用程序狀態和功能能夠分爲各類資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、數據庫記錄、算法等等。每一個資源都使用 URI (Universal Resource Identifier) 獲得一個惟一的地址。全部資源都共享統一的接口,以便在客戶端和服務器之間傳輸狀態。使用的是標準的 HTTP 方法,好比 GETPUTPOST DELETEHypermedia 是應用程序狀態的引擎,資源表示經過超連接互聯。

 

  1. 作過APP接口沒?怎麼作的?

用框架寫接口,普通POSTGET接口,有時候用RESTFUL接口。寫控制器從模型調用數據,返回XML或者JSON數據就好了。

APP接口主要解決兩個問題,一個SESSION問題,一個是TOKEN問題。客戶端第一次請求,服務端生成SESSION_ID,返回給客戶端。之和的請求中,客戶端把SESSION_ID傳給服務端,服務端用SESSION_ID函數能夠確保屢次請求用的同一個SESSIONTOKEN須要加密和服務端驗證。

 

  1. smarty沒有?用過什麼模板引擎?

Smarty是很老的技術了。經常使用的框架如ThinkPHPYii都自帶模板引擎。最經常使用的方法是3個:assign賦值,display顯示頁面,fetch獲取頁面內容而非顯示。

 

  1. 設計模式有哪些?

單例模式,簡單工廠模式,策略模式,觀察者模式,註冊()模式,迭代模式 IOCMixin

 

  1. 請寫一段PHP代碼,確保多個進程同時寫入同一個文件成功

核心思路:加鎖

 

<?php

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

    if (flock($fp,LOCK_EX)) {

        //得到寫鎖,寫數據

        fwrite($fp, "write something");

 

        // 解除鎖定

        flock($fp, LOCK_UN);

    } else {

        echo "file is locking...";

    }

    fclose($fp);

?>

 

  1. 寫一個函數,可以遍歷一個文件夾下的全部文件和子文件夾。

<?php

    function my_scandir($dir){

        $files = array();

        if(is_dir($dir)){

            if ($handle = opendir($dir)) {

                while (($flie = readdir($handle))!== false) {

                    if ($flie!="." && $file!="..") {

                        if (is_dir($dir."/".$file)) {

                            $files[$file] = my_scandir($dir."/".$file);

                        } else {

                            $files[] = $dir."/".$file;

                        }

                    }

                }

                closedir($handle);

                return $files;

            }

        }

    }

?>

 

  1. 寫出一個正則表達式,過慮網頁上的全部JS/VBS腳本(即把script標記及其內容都去掉):

過濾JavaScript腳本參考:

 

<?php

    header("content-type:text/html;charset=utf-8");

 

    $script = "如下內容不顯示:<script type='text/javascript'>alert('cc');</script>";

    $pattern = '/<script[^>]*?>.*?</script>/si';

 

    echo preg_replace($pattern, "腳本內容", $script);//如下內容不顯示:腳本內容

?>

 

 

  1. 請寫出並說明如何在命令行下運行PHP腳本(寫出兩種方式)同時向PHP腳本傳遞參數?

首先進入php安裝目錄

php -f d:/wamp/www/1.php 其中-f參數指定要執行的php文件

php -r phpinfo(); 其中-r表示直接執行php代碼,無需寫開始結束標記

 

  1. PHP中,如何得到一個數組的鍵值?

使用key()能夠得到數組中當前元素的鍵名,使用current()則能夠返回當前元素的值。

使用array_keys()則能夠獲得數組中全部的鍵名。

使用foreach結構foreach($arr as key=>value)能夠經過keyvalue分別獲取鍵名和值。

 

  1. 若是個人網站用的utf-8編碼,爲防止亂碼出現,都須要注意哪些地方?

從如下幾個方面考慮:

 

數據庫中庫和表都用utf8編碼

php鏈接mysql,指定數據庫編碼爲utf8 mysql_query(set names utf8);

php文件指定頭部編碼爲utf-8header(content-type:text/html;charset=utf-8);

網站下全部文件的編碼爲utf8

html文件指定編碼爲utf-8<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>

 

 

  1. 寫出五種以上你使用過的PHP的擴展的名稱(提示:經常使用的PHP擴展)

mb_sringiconvcurlGDXMLsocketMySQLPDO

 

  1. 請描述以下URL重寫規則的用意。

<IfModulemod_rewrite.c>

RewriteEngineon

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

RewriteBase/

RewriteRule./index.php[L]

</IfModule>

若是REQUEST_FILENAME文件存在,就直接訪問文件,不進行下面的rewrite規則,

若是REQUEST_FILENAME目錄存在,就直接訪問目錄,不進行下面的rewrite規則,

RewriteRule./index.php[L]的意思是把全部的請求都給index.php處理。

 

  1. Warning:Cannot modify header information-headers already sent by(output started at D:\src\init.php:7)in D:\src\init.php on line10一般什麼狀況下php會報該警告信息?

通常是在headerset_cookie以及session_start函數前面有輸出(包括空格)的狀況下,會報該警告信息

 

  1. 什麼是ORM

對象關係映射(英語:Object Relation Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序技術,用於實現面向對象編程語言裏不一樣類型系統的數據之間的轉換。從效果上說,它實際上是建立了一個可在編程語言裏使用的--「虛擬對象數據庫」。

 

  1. 什麼是RBAC

基於角色的訪問控制(Role-Based Access Control)做爲傳統訪問控制(自主訪問,強制訪問)的有前景的代替受到普遍的關注。在RBAC中,權限與角色相關聯,用戶經過成爲適當角色的成員而獲得這些角色的權限。這就極大地簡化了權限的管理。在一個組織中,角色是爲了完成各類工做而創造,用戶則依據它的責任和資格來被指派相應的角色,用戶能夠很容易地從一個角色被指派到另外一個角色。角色可依新的需求和系統的合併而賦予新的權限,而權限也可根據須要而從某角色中回收。角色與角色的關係能夠創建起來以囊括更普遍的客觀狀況。

 

  1. 如何防止SQL注入?

轉義引號。

addslashes() 是強行加\

PDO的預處理與參數綁定。

 

  1. 如何避免跨站攻擊

要完成一次CSRF攻擊,受害者必須依次完成兩個步驟:

1.登陸受信任網站A,並在本地生成Cookie

2.在不登出A的狀況下,訪問危險網站B

 

服務端進行CSRF防護

  1. Cookie Hashing(全部表單都包含同一個僞隨機值)。由於攻擊者不能得到第三方的Cookie(理論上),因此表單中的數據也就構造失敗了
  2. 驗證碼。每次的用戶提交都須要用戶在表單中填寫一個圖片上的隨機字符串。
  3. One-Time Tokens(不一樣的表單包含一個不一樣的僞隨機值)

 

  1. 都作過什麼項目,的那幾個模塊?擔任什麼職責?

 

 

  1. 如何認識PHP框架的路由機制?

主要是經過僞靜態來實現單一入口,mvc框架都是這樣。將全部請求經過apache僞靜態解析轉給某個指定文件,而後經過php$_SERVER[]這個全局變量來去的請求的路徑字符串,對其進行解析再分配給指定的類去處理,基本就是這樣。

最簡單的方法是創建一個.htaccess文件。文件內容貼給你

<IfModule !mod_rewrite.c>

    ErrorDocument 500 'mod_rewrite must be enabled'

</IfModule>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php

 

將這個文件放在根目錄下便可。文件做用很明顯:將全部的請求路徑轉給index.php,而後在index.php裏作請求字符串的判斷便可打到路由解析功能。

 

57. PHP有幾種運行方式?

1CGI

CGI即通用網關接口(common gatewag interface),它是一段程序,通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執行程序鏈接起來,它把HTML接收的指令傳遞給服務器的執 行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平臺性能極佳,幾乎能夠在任何操做系統上實現。

2FastCGI

fast-cgi cgi的升級版本,FastCGI像是一個常駐(long-live)型的CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進程管理器進行管理。

3APACHE2HANDLER

PHP做爲Apache模塊,Apache服務器在系統啓動後,預先生成多個進程副本駐留在內存中,一旦有請求出 現,就當即使用這些空餘的子進程進行處理,這樣就不存在生成子進程形成的延遲了。這些服務器副本在處理完一次HTTP請求以後並不當即退出,而是停留在計算機中等待下次請求。對於客戶瀏覽器的請求反應更快,性能較高。

4CLI

cliphp的命令行運行模式,你們常常會使用它,可是可能並無注意到(例如:咱們在linux下常用 「php -m」查找PHP安裝了那些擴展就是PHP命令行運行模式;

 

 

 

 

 

MySQL數據庫問題:

 

 

  1. 第二範式和第一範式的區別是什麼?

1. 第一範式

確保數據表中每列(字段)的原子性。

 

2. 第二範式(依賴性)

在第一範式的基礎上更進一步,目標是確保表中的每列都和主鍵相關。

 

3. 第三範式(惟一性)

 

知足第三範式(3NF)必須先知足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。

 

  1. 數據庫事務的四個特徵及含義?

數據庫事務是指做爲單個邏輯工做單元執行的一系列操做,這些操做要麼全作要麼全不作,是一個不可分割的工做單位。

 

數據庫事務的四大特性(簡稱ACID)是:

(1) 原子性(Atomicity)

 

事務的原子性指的是,事務中包含的程序做爲數據庫的邏輯工做單位,它所作的對數據修改操做要麼所有執行,要麼徹底不執行。這種特性稱爲原子性。

 

例如銀行取款事務分爲2個步驟(1)存摺減款(2)提取現金。不可能存摺減款,卻沒有提取現金。2個步驟必須同時完成或者都不完成。

(2)一致性(Consistency)   

 

事務的一致性指的是在一個事務執行以前和執行以後數據庫都必須處於一致性狀態。這種特性稱爲事務的一致性。假如數據庫的狀態知足全部的完整性約束,就說該數據庫是一致的。

 

例如完整性約束a+b=10,一個事務改變了a,那麼b也應隨之改變。

(3)分離性(亦稱獨立性Isolation)

 

分離性指併發的事務是相互隔離的。即一個事務內部的操做及正在操做的數據必須封鎖起來,不被其它企圖進行修改的事務看到。假如併發交叉執行的事務沒有任何控制,操縱相同的共享對象的多個併發事務的執行可能引發異常狀況。

(4)持久性(Durability)

 

持久性意味着當系統或介質發生故障時,確保已提交事務的更新不能丟失。即一旦一個事務提交,DBMS保證它對數據庫中數據的改變應該是永久性的,即對已提交事務的更新能恢復。持久性經過數據庫備份和恢復來保證。

 

  1. 如何設計或配置Mysql,才能達到高效使用的目的。

a) 數據庫設計方面,設計結構良好的數據庫,容許部分數據冗餘。 選取最適用的字段屬性,儘量把字段設置爲NOT NULL,這樣在查詢的時候,數據庫不用去比較NULL值。

b) 系統架構設計方面,表散列,把海量數據散列到幾個不一樣的表裏面,集羣,數據庫查詢和寫入分開。 寫高效sql語句,以提升效率。使用鏈接(join)來代替子查詢使用聯合(union)來代替手動建立的臨時表所得皆必須,只從數據庫取必須的數據。必 要的時候用不一樣的存儲引擎,好比Innodb能夠減小死鎖,HEAP能夠提升一個數量級的查詢速度。

 

  1. 請說出mysql經常使用存儲引擎?memory存儲引擎的特色?:

a) MyISAMInnoDBMERGEMEMORY(HEAP)BDB(BerkeleyDB)EXAMPLEFEDERATEDARCHIVECSVBLACKHOLE

b) MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在全部MySQL配置裏被支持,它是默認的存儲引擎,除非你配置MySQL默認使用另一個引擎。

c) InnoDBBDB存儲引擎提供事務安全表。BDB被包含在爲支持它的操做系統發佈的MySQL-Max二進制分發版裏。InnoDB也默認被包括在所 有MySQL 5.1二進制分發版裏,你能夠按照喜愛經過配置MySQL來容許或禁止任一引擎。

d) MEMORY存儲引擎提供「內存中」表。MERGE存儲引擎容許集合將被處理一樣的MyISAM表做爲一個單獨的表。就像MyISAM同樣,MEMORYMERGE存儲引擎處理非事務表,這兩個引擎也都被默認包含在MySQL中。

e) NDB Cluster是被MySQL Cluster用來實現分割到多臺計算機上的表的存儲引擎。它在MySQL-Max 5.1二進制分發版裏提供。這個存儲引擎當前只被Linux, Solaris, Mac OS X 支持。在將來的MySQL分發版中,咱們想要添加其它平臺對這個引擎的支持,包括Windows

f) 比較經常使用的是MyISAMInnoDB

 

  1. MySQL LEFT JOIN聯查問題,再也不舉例。

 

  1. 如何MySQL性能優化?

a) 經過Show命令,慢查詢日誌,profiling分析查詢肯定瓶頸。

b) 使用 EXPLAIN 關鍵字可讓你知道MySQL是如何處理你的SQL語句的。這能夠幫你分析你的查詢語句或是表結構的性能瓶頸。

c) 當只要一行數據時使用 LIMIT 1

d) 爲搜索字段建索引

e) Join表的時候使用至關類型的例,並將其索引

f) 儘量的使用 NOT NULL

g) 水平分表

h) 垂直分表

i) 選擇正確的存儲引擎

j) 避免長鏈接

 

 

 

 

 

 

 

 

 

算法問題

  1. 使用PHP描述冒泡排序和快速排序算法,對象能夠是一個數組

//冒泡排序(數組排序)

 

function bubble_sort($array){

    $count = count($array);

    if ($count <= 0) return false;

    for($i=0; $i<$count; $i++){

        for($j=$i; $j<$count-1; $j++){

            if ($array[$i] > $array[$j]){

                $tmp = $array[$i];

                $array[$i] = $array[$j];

                $array[$j] = $tmp;

            }

        }

    }

    return $array;

}

//快速排序(數組排序)

 

function quick_sort($array) {

    if (count($array) <= 1) return $array;

    $key = $array[0];

    $left_arr = array();

    $right_arr = array();

    for ($i=1; $i<count($array); $i++){

        if ($array[$i] <= $key)

            $left_arr[] = $array[$i];

        else

            $right_arr[] = $array[$i];

    }

    $left_arr = quick_sort($left_arr);

    $right_arr = quick_sort($right_arr);

    return array_merge($left_arr, array($key), $right_arr);

}

  1. 使用PHP描述順序查找和二分查找(也叫作折半查找)算法,順序查找必須考慮效率,對象能夠是一個有序數組

//二分查找(數組裏查找某個元素)

 

function bin_sch($array, $low, $high, $k){

    if ($low <= $high){

    $mid = intval(($low+$high)/2);

    if ($array[$mid] == $k){

    return $mid;

    }elseif ($k < $array[$mid]){

    return bin_sch($array, $low, $mid-1, $k);

    }else{

    return bin_sch($array, $mid+1, $high, $k);

    }

    }

    return -1;

}

//順序查找(數組裏查找某個元素)

 

function seq_sch($array, $n, $k){

    $array[$n] = $k;

    for($i=0; $i<$n; $i++){

        if($array[$i]==$k){

            break;

        }

    }

    if ($i<$n){

        return $i;

    }else{

        return -1;

    }

}

  1. 寫一個二維數組排序算法函數,可以具備通用性,能夠調用php內置函數

//二維數組排序, $arr是數據,$keys是排序的健值,$order是排序規則,1是升序,0是降序

 

function array_sort($arr, $keys, $order=0) {

    if (!is_array($arr)) {

        return false;

    }

    $keysvalue = array();

    foreach($arr as $key => $val) {

        $keysvalue[$key] = $val[$keys];

    }

    if($order == 0){

        asort($keysvalue);

    }else {

        arsort($keysvalue);

    }

    reset($keysvalue);

    foreach($keysvalue as $key => $vals) {

        $keysort[$key] = $key;

    }

    $new_array = array();

    foreach($keysort as $key => $val) {

        $new_array[$key] = $arr[$val];

    }

    return $new_array;

}

 

 

 

 

 

 

 

 

PHP周邊問題

  1. 說出你經常使用的版本控制器?

SVN , GIT

具體命令不在一一列舉,需熟記。

 

  1. Linux經常使用的命令,知道哪些?

a) ls, pwd, cd, cat, vi, service, chmod, chown, tar, su等。

 

  1. Linux的定時任務如何執行?

使用crontab執行。

Linux中你應該先輸入crontab -e,而後就會有個vi編輯界面,再輸入0 3 * * 1 /clearigame2內容到裏面 :wq 保存退出。

crontab文件中如何輸入須要執行的命令和時間。該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。

每一個域之間使用空格或者製表符分隔。格式以下:

minute hour day-of-month month-of-year day-of-week commands

合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(表明要執行的腳本)

除了數字還有幾個個特殊的符號就是"*""/""-"","*表明全部的取值範圍內的數字,"/"表明每的意思,"/5"表示每5個單位,"-"表明從某個數字到某個數字,","分開幾個離散的數字。

天天早上6

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,由於cron把任何輸出都emailroot的信箱了。

每兩個小時

0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

 

  1. Linux如何安裝ApachePHPMySQLNginx?

a) 用的CentOSYum安裝。生產環境有專門的運維工程師負責。

 

  1. Linux下如何殺掉一個進程?

a) Kill

b) Pkill

 

  1. 在兩臺Linux服務器之間複製數據,你經常使用什麼命令?

a) Scp

b) ftp

  1. Linux下用什麼方法能夠查看當前系統的負載信息(CPU,內存,IO?

a) Top

b) W

c) Uptime

 

 

 

 

 

前端問題

  1. 都用過哪些JavaScript框架?

a) jQuery和擴展。

 

  1. JavaScriptthis指向問題?

javascript 中的 this 有 五種狀況:

1.全局範圍:

會指向 全局對象( 瀏覽器下指window

2.全局函數調用:

仍是指向全局對象。

3.對象函數調用:

調用某個對象的函數, 它指向 當前對象。

4.使用 new 實例化對象時:

它指向 新建立的 對象。

5.調用某些方法時:

如: Function.prototype 上的 call 或者 apply 方法 以及 with

它指向 傳入的對象。

 

  1. 說出Array對象的5個方法:

concat, join, pop, push, shift, unshift, sort

 

  1. 談談你對prototype的理解?

a) 每一個函數都有一個prototype屬性,這個屬性是指向一個對象的引用,這個對象稱爲原型對象,原型對象包含函數實例共享的方法和屬性,也就是說將函數用做構造函數調用(使用new操做符調用)的時候,新建立的對象會從原型對象上繼承屬性和方法。

b) prototype 屬性使您有能力向對象添加屬性和方法。

 

  1. 如何處理ajax的跨域問題?

a) Window.domain;

b) JSONP

相關文章
相關標籤/搜索