面試題整理

、一個數據庫的狀態是否正常能夠從哪些指標看出來,至少列出2個

答QPS以及IOPS
    正在運行的mysql進行監控,其中一個方式就是查看mysql運行狀態。
    (1)QPS(每秒Query量)
    QPS = Questions(or Queries) / seconds
    mysql > show  global  status like 'Question%';

、apache和nginx的特性區別在哪?

apache是一個請求對應一個線程的模式,無論那個請求是否須要讀寫都會分配一個線程,而nginx則是異步非阻塞模型,只有當請求須要讀寫的時候纔會拿出來處理。

、問頁面請求超時取決於nginx的配置仍是PHP-CGI的配置?

nginx

、PHP中的PEAR是什麼?

PEAR也就是爲PHP擴展與應用庫(PHP Extension and Application Repository),它是一個PHP擴展及應用的一個代碼倉庫

、fastcgi與cgi的區別

fastcgi和cgi都是協議,fastcgi是管理cgi的

、PHP中常見錯誤類型?

一、Notice:這些都是一些很是正常的信息,而非重大錯誤,甚至有一些都不會展現給用戶。
    二、Warning:這類是稍微嚴重一些的錯誤,錯誤會展現給用戶,但不影響程序的輸出。
    三、Fatal errors:這些是很是嚴重的錯誤,好比要訪問一個不存在的PHP類。

、http 狀態碼?

200 - 服務器成功返回網頁
    301 - 永久移動,請求的網頁已被永久移動到新位置
    304 - 緩存網頁未修改,直接返回內容
    401 - 未受權
    403 -(已禁止) 服務器拒絕請求
    404 - 請求的網頁不存在,網頁不存在。
    500 - 服務器遇到錯誤,沒法完成請求。
    503 - 服務器暫時不可用,目前沒法使用服務器(因爲超載或進行停機維護)。一般,這只是一種暫時的狀態。 HTTP 狀態代碼的完整列表

、php中定義常量時,const和define的區別?

define ('Newconstant', 30);
    答:使用const使得代碼簡單易讀,const自己就是一個語言結構,而define是一個函數。另外const在編譯時要比define快不少。
    一、const用於類成員變量的定義,一經定義,不可修改。Define不能夠用於類成員變量的定義,可用於全局常量。
    二、Const可在類中使用,define不能
    三、Const不能再條件語句中定義常量
    四、const採用普通的常量名稱,define能夠採用表達式做爲名稱
    五、const只能接受靜態的標量,而define能夠採用任何表達式
    六、const定義的常量時大小寫敏感,而define能夠經過第三個參數(爲true表示大小寫不敏感)來指定大小寫是否敏感。

、PHP支持多繼承嗎?

5.4版本之後可使用Traits方法實現
    5.4版本不能夠。PHP類只能繼承一個父類,並用關鍵字「extended」標識。

、用最簡單的語言告訴我PHP是什麼?

PHP全稱:Hypertext Preprocessor,是一種用來開發動態網站的服務器腳本語言。

、什麼是MVC?

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

  Model:數據信息存取層。
  View:view層負責將應用的數據以特定的方式展示在界面上。
  Controller:一般控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據php

、cookie、session的聯繫和區別,多臺web服務器如何共享session?

cookie在客戶端保存狀態,session在服務器端保存狀態。可是因爲在服務器端保存狀態的時候,在客戶端也須要一個標識,因此session也可能要藉助cookie來實現保存標識位的做用。
    cookie包括名字,值,域,路徑,過時時間。路徑和域構成cookie的做用範圍。cookie若是不設置過時時間,則這個cookie在瀏覽器進程 存在時有效,關閉時銷燬。

若是設置了過時時間,則cookie存儲在本地硬盤上,在各瀏覽器進程間能夠共享。html

session存儲在服務器端,服務器用一種散列表類型的結構存儲信息。當一個鏈接創建的時候,服務器首先搜索有沒有存儲的session id,若是沒有,則創建一個新的session,將session id返回給客戶端,

客戶端能夠選擇使用cookie來存儲session id。也能夠用其餘的方法,好比服務器端將session id附在URL上。mysql

區別:
    (1).cookie在本地,session在服務器端。
    (2).cookie不安全,容易被欺騙,session相對安全。
    (3).session在服務器端,訪問多了會影響服務器性能。
    (4).cookie有大小限制,爲3K
    多服務器共享session能夠嘗試將session存儲在memcache中。

、瀏覽器下載最大併發數

http1.0   通常在2-6個
    http1.0   通常在4-6個

、 簡述POST 和GET傳輸的最大容量分別是多少?

POST根據PHP.ini文件配置(默認的是8M)
    GET大小限制在2kb

、http協議中的post和get有何區別?

GET用於獲取信息,不該該用於修改信息,POST可用於更新修改信息。
    GET可傳輸數據大小和URL有關,而POST沒有限定大小,大小和服務器配置有關。
    GET放在URL中,所以不安全,而pOST傳輸數據對於用戶來講是不可見的,因此相對安全。
    在ajax: post不被緩存,get被緩存因此通常在請求結尾加Math.random();
    SERVER端接受:由於在submit提交的時候是按不一樣方式進行編碼的,因此服務端在接受的時候會按照不一樣的方式進行接受!
    編碼方式:若是傳遞數據是非-ASCII,那麼GET通常是不適應的,因此在傳遞的時候會作編碼處理!

、字符串和數字比較,如題輸出應該是?

$s = 'abc';
    if ($s == 0) {
        echo 'is zero';
    } else {
        echo 'is not zero';
    }
    答案:is zero 由於PHP是弱類型,類型是能夠根據賦值改變

、echo count("abc"); 輸出什麼?

echo count(null);       答案:0
    echo count(false);      答案:1
    echo count(true);       答案:1
    echo count("abc");      答案:1
    echo count(123);        答案:1

、寫個函數用來對二維數組排序。

  array_multisort()nginx

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

$reg = '#[a-z0-9-_.]+@[\w]{2,}\.[\w]+#is';
$rst = preg_match($reg, '34234wujunzhiai@163.com');
if($rst){
    echo '正確';
}else {
    echo '錯誤';
}

、用php寫出顯示客戶端Ip與服務器Ip的代碼

  答案:客戶端 getenv('REMOTE_ADDR');
  服務器端 getenv('SERVER_ADDR'); // gethostbyname('www.baidu.com');web

、用最少的代碼寫一個求3值最大值的函數.

function get_max($a,$b,$c)
    {
            return ( $a > $b ? $a : $b ) > $c ? ( $a > $b ? $a : $b ) : $c;
    }
    echo get_max(1,2,3);

七、寫出 訪問 http://www.sina.com.cn 所需的報文頭ajax

md5_file()

、本頁地址,當前腳本的名稱

echo $_SERVER[PHP_SELF];

、連接到當前頁面的上一頁面的 URL 地址:

  echo $_SERVER[HTTP_REFERER];redis

、echo(),print(),print_ r()的區別

echo            是php語句, print和print_ r是函數,語句沒有返回值,函數能夠有返回值(即使沒有用)
    print()         只能打印出簡單類型變量的值(如int, string)
    print_r()       能夠打印出複雜類型變量的值(如數組,對象)

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

一、pHp緩存
    二、生成html靜態頁面
    三、使用主輔數據庫,把數據庫的讀寫分開
    四、使用負載均衡器和多臺服務器

、類的屬性能夠序列化後保存到 session 中,從而之後能夠恢復整個類,這要用到的函數是。

  serialize() 序列化算法

unserialize()   反序列化

、語句include和require的區別是什麼?爲避免屢次包含同一文件,可用(?)語句代替它們?

一、pHp程序執行到require()時,只會讀取一次檔案,故常放在程序開頭,檔案引入後pHp會將網頁檔從新編譯,讓引入檔成爲原先網頁的一部分。
    二、pHp程序執行到include()時,每次皆會讀取檔案,故經常使用於流程控制的區段,如條件判斷或循環中。
    三、require() :若是文件不存在,會報出一個fatal error.腳本中止執行
    四、include() : 若是文件不存在,會給出一個 warning,但腳本會繼續執行
    五、推薦使用require_once()和include_once(),能夠檢測文件是否有重複包含。

、如何修改SESSION的生存時間.

方法一:
    將php.ini 中session.gc_maxlifetime 設置爲 9999(默認爲 1440)重啓 apache 便可

    方法二:
    $savepath = "./session_save_dir/";
    $lifeTime = 24 * 3600;
    session_save_path($savepath);
    session_set_cookie_params($lifeTime);
    session_start();

    方法三:
    setcookie() 或session_set_cookie_params($lifeTime) 在pHp中,heredoc是一種特殊的字符串,它的結束標誌必須?
    heredoc的語法是用"<<<"加上本身定義成對的標籤,在標籤範圍內的文字視爲一個字符串
    <?php
    $str = <<<EOD
    I saw a dog yesterday.
    EOD;
    >
    須要注意的是:
    一、"<<<"後面的EOD是本身定義的標籤名稱,必需要成對,並且後面要加上分號表示結束。
    二、結束的標籤前面最好不要有空格,以避免發生錯誤

、在pHp中error_reporting這個函數有什麼做用?

error_reporting() 用於設置php的偵聽錯誤的級別.[用來配置錯誤信息回報的等級].

、error_reporting(2047)什麼做用?

  答案:至關於 error_reporting('E_ALL'); 輸出全部的錯誤sql

、檢測一個變量是否有設置的函數是?是否爲空的函數是?

isset($a)
    empty($a)

、$arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值

echo $arr[0];

、$a = 'abcdef'; 請取出$a的值並打印出第一個字母

答:echo $a{0} 或 echo substr($a,0,1)

、請寫出php5權限控制修飾符

public(公共)
    private(私用)
    protected(繼承)

、請寫出php5的構造函數和析構函數

__construct()   構造函數
    __destruct()    析構函數

四、php中web上傳文件的原理是什麼,如何限制上傳文件的大小?數據庫

pHp上傳文件默認大小爲2M,設置上傳大小的配置項是upload_max_filesize,post_max_size設置一次pOST中pHp能接收的最大數據量,應該比upload_max_filesize大。

五、php防止sql注入式攻擊,用什麼函數轉換字符串?

addslashes();

六、你經常使用的php字符串函數?

substr(),strtolower(),ucwords(),ucfirst(),strtoupper(),implode(),explode(),str_replace(),strpos(),strrev()

八、HTTp的通信協議是?

TCP

九、php中的文件讀寫操做,讀取文件test.txt中前300字節的內容?

$handle=fopen("test.txt","r");
    $contents=fread($handle,300);
    fclose($handle);

十一、寫一個函數,儘量高效的,從一個標準 url 裏取出文件的擴展名

例如: http://www.sina.com.cn/abc/de/fg.php?id=1 須要取出 php 或 .php
    答案1:
    function getExt($url){
            $arr = parse_url($url);
            $file = basename($arr['path']);
            $ext = explode(".",$file);
            return $ext[1];
    }

十二、php5中魔術方法函數有哪幾個,請舉例說明各自的用法

__construct() :實例化對象時被調用;
    __destuct():當刪除一個對象或者對象操做終止是被執行;
    __call():調用對象不存在方法時被調用;
    __get():調用對象不存在的屬性時被調用;
    __set():設置對象不存在的屬性時被調用;
    __toString():打印一個對象時被調用,好比echo $obj,print($obj);
    __clone():克隆對象時被調用,好比$t = new Test();$tt = clone $t;
    __sleep():serialize以前被調用,若對象比較大,想作一些刪除在序列化,能夠考慮使用該方法;
    __wakeup():unserialize以前被調用,作些對象的初始化;
    __isset():檢測對象是否存在屬性的時候被調用,如 isset($c->name);
    __unset():unset一個對象屬性時被調用,如:unset($c->name);
    __set_state():調用var_export時被調用,用__set_state的返回值做爲 var_export的返回值
    __autoload():實例化一個對象時,若是對應的類不存在,在該方法被調用

    魔術常量:
    __LINE__:返回當前行號;
    __FILE__:返回文件的完整路徑和文件名,若是用在包含文件裏面,則返回包含文件名,自 php4.0.2開始,
    __FILE__老是包含一個絕對路徑,而在此前的版本有時候會包含一個相對路徑
    __FUNCTION__:返回函數名稱(自 php4.3.0新加的)。自php5起本常量返回該函數被定義時的名稱,區分大小寫,在php4中該值老是小寫;
    __CLASS__:返回類的名稱,自 php4.3.0新加的,自php5起本常量返回該類被定義時的名稱,區分大小寫,在php4中該值老是小寫的;
    __METHOD__:返回類的方法名。 php5新加的

1三、簡單說明pHp的垃圾收集機制是怎樣的?

對變量有個引用計數,計數到0時變量被銷燬

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

代碼:
    function writeData($path, $mode, $data){ 
            $fp          = fopen($path, $mode); 
            $retries     = 0;
            $max_retries = 100; 
            do {
                    if ($retries > 0) {
                            usleep(rand(1, 10000));
                    }
                    $retries += 1;
            }while (!flock($fp, LOCK_EX) and $retries <= $max_retries); 

            if ($retries == $max_retries) {
            return false;
            }

            fwrite($fp, "$data\\n");
            flock($fp, LOCK_UN);
            fclose($fp); 
            return true; 
    }

1五、你用什麼方法檢查php腳本的執行效率(一般是腳本執行時間)和數據庫SQL的效率(一般是數據庫Query時間),並定位和分析腳本執行和數據庫查詢的瓶頸所在

php腳本的執行效率
    1, 代碼腳本里計時
    2, xdebug統計函數執行次數和具體時間進行分析,最好使用工具winCacheGrind分析
    3, 在線系統用strace跟蹤相關進程的具體系統調用

    數據庫SQL的效率
    sql的explain(mysql),啓用slow query log記錄慢查詢
    一般還要看數據庫設計是否合理,需求是否合理等

、microtime和mktime兩個函數的區別。

echo microtime();   返回當前時間戳
echo mktime();              取得指定的時間戳

1六、求兩個日期的差數,例如2007-2-5 ~ 2007-3-6 的日期差數
  $begin = strtotime('2007-2-5');
  $end = strtotime('2007-3-6');
  echo ($end-$begin)/(24*3600);

1七、用php打印出前一天的時間格式是YYYY-MM-DD HH:II:SS

echo date('Y-m-d H:i:s', time()-24*3600);
    echo date('Y-m-d H:i:s', strtotime('-1 day'));  前一天
echo date('Y-m-d H:i:s', strtotime('-1 second'));
echo date('Y-m-d H:i:s', strtotime('-1 minute'));
echo date('Y-m-d H:i:s', strtotime('-1 hour'));
echo date('Y-m-d H:i:s', strtotime('-1 day'));
echo date('Y-m-d H:i:s', strtotime('-1 week'));
echo date('Y-m-d H:i:s', strtotime('-1 month'));
echo date('Y-m-d H:i:s', strtotime('-1 year'));
  1. 請寫一個函數,實現如下功能:
      字符串「open_door」 轉換成 「OpenDoor」、」make_by_id」 轉換成 」MakeById」。

  function str_change($str) {

  $str = str_replace ('_', ' ', $str);
      $str = ucwords($str);
      $str = str_replace (' ', '', $str);
      return $str;
    }

四、請簡述操做系統的線程與進程的區別。列舉LINUX下面你使用過的軟件?
五、熟悉memcache/redis、MVC/REST架構、模板引擎、中間件的原理與應用者優先;
六、熟悉TCP/IP、HTTP協議者優先;

===============算法=====================
一、請使用僞語言結合數據結構冒泡排序法對如下一組數據進行排序 10 2 36 14 10 25 23 85 99 45。

$a = array(10,2,36,14,10,25,23,85,99,45);
$count = count($a);
for($j=1; $j<$count; $j++){
    for($i=0; $i<$count-$j; $i++){
        if($a[$i] > $a[$i+1]) {
            $t = $a[$i] ;
            $a[$i] = $a[$i+1] ;
            $a[$i+1] = $t ;
        }
    }
}
print_r($a);

============Mysql==========================

、mysql_fetch_row 和mysql_fetch_array之間有什麼區別?

mysql_fetch_row()               從結果集中取得一行做爲枚舉數組
    mysql_fetch_array()             從結果集中取得一行做爲關聯數組,或數字數組,或兩者兼有

、MYSQL取得當前時間的函數是?,格式化日期的函數是

now() DATE_FORMAT(date , format)
    select now();
    select curdate();
    select curtime();

一、請簡述數據庫設計的範式及應用。
  通常第3範式就足以,用於表結構的優化,這樣作既能夠避免應用程序過於複雜同時也避免了SQL語句過於龐大所形成系統效率低下

1NF:原子性 字段不可再分,不然就不是關係數據庫; 
    2NF:惟一性 一個表只說明一個事物; 
    3NF:每列都與主鍵有直接關係,不存在傳遞依賴;

  ANSWER:
  第一範式:若關係模式R的每個屬性是不可再分解的,再屬於第一範式。
  第二範式:若R屬於第一範式,且全部的非碼屬性都徹底函數依賴於碼屬性,則爲第二範式。
  第三範式:若R屬於第二範式,且全部的非碼屬性沒有一個是傳遞函數依賴於候選碼,則屬於第三範式

一、建立新聞發佈系統,表名爲message有以下字段 (3分)

id 文章id
    title 文章標題
    content 文章內容
    category_id 文章分類id
    hits 點擊量
    答:
    CREATE TABLE `message`(
            `id` int(10) NOT NULL AUTO_INCREMENT,
            `title` VARCHAR(200) default NULL,
            `content` text,
            `category_id` int(10) NOT NULL,
            `hits` int(20),
            PRIMARY KEY(`id`)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績

name              score
    張三   語文   59 
    張三   數學   80
    張三   英語   33
    李四   語文   50
    李四   數學   50
    李四   英語   58
    王五   語文   88
    王五   數學   90
    答:select name,sum(score<60) as gk,avg(score) as pj from student group by name having gk>=2;

============Javascript==========================

、JS表單彈出對話框函數是?得到輸入焦點函數是?

彈出對話框: alert(),prompt(),confirm()
    得到輸入焦點 focus()
相關文章
相關標籤/搜索