PHP 面試題 一

一、用PHP打印出前一天的時間格式是2017-5-10 22:21:21(2分)php

月,日沒有前導零:2017-5-1 22:21:21
echo
date("Y-n-j H:i:s", strtotime("-1 day"));
月,日前面有前導零: 2017-05-01 22:21:21
echo date("Y-m-d H:i:s", strtotime("-1 day"));
二、echo(),print(),print_r()的區別(3分)
echo 和 print 是語言結構,沒有返回值,只能打印出string,不能打印出結構
print_r 是函數,有返回值

3.將一個字符串(1234567890)轉換成(1,234,567,890)每三個一組用逗號隔開html

方法1: echo number_format('1234567890'),"<br />";  // 內部函數

方法2: $str = '1234567890';
function test($str='',$count=3){
    if(empty($str) || $count <= 0){
        return false;
    }
    $str1 = strrev($str); //反轉字符串
    $arr = str_split($str1,$count); //將字符串分割成數組
    $new_str = join(',',$arr); //鏈接字符串
    return strrev($new_str); //再次反轉字符串並返回
}
echo test($str);

4. 如下數組$_a 和 $_b的值?mysql

$a = ['a' => 123, 'b' => 456];
$b = ['b' => 780, 'c' => 110];
$_a = array_merge($a,$b);
$_b = $a + $b;
print_r($_a);
echo '<br/>';
print_r($_b);nginx

Array ( [a] => 123 [b] => 780 [c] => 110 )  // $_a
Array ( [a] => 123 [b] => 456 [c] => 110 )  // $_b

五、如何實現字符串翻轉?(3分)redis

英文:  strrev($a);
中文或其餘文字:
中文:GB2312, 代碼是使用GB2312編碼
function reverse($str){ $ret = ""; len=mbstrwidth(str,"GB2312"); for (i=0;i< len;i++) { arr[]=mbsubstr(str, $i, 1, "GB2312"); } return implode("", array_reverse($arr)); } print_r(reverse("你好"));
六、優化MYSQL數據庫的方法。(4分,多寫多得)
1.選取適用的字段屬性,儘量減小定義的字段長度,儘可能把字段設置 NOT NULL
2.使用鏈接JOIN來代替子查詢
3.使用聯合UNION來代替手動建立的臨時表
4.事務處理:,保證數據完整性
5.鎖定表,優化事務處理
6.使用外鍵,優化鎖定表
7.創建索引,增長查詢效率
8.優化查詢語句,提升索引命中率

 七、PHP的意思(送1分)sql

超級文本預處理語言 Hypertext PreProcessor

 八、MYSQL取得當前時間的函數是?,格式化日期的函數是(2分)數據庫

CURRENT_TIMESTAMP()
DATE_FORMAT()
select DATE_FORMAT("2017-11-11 10:10:10", "%Y-%m-%d");

 九、實現中文字串截取無亂碼的方法。(3分)apache

mb_substr($str, 1, 1, "GB2312");

10. 請舉例說明在你的開發過程當中用什麼方法來加快頁面的加載速度編程

1.要用到服務器資源時纔打開,及時關閉服務器資源
2.數據庫添加索引
3.頁面可生成靜態,圖片等大文件單獨服務器。
4.使用代碼優化工具

11.如何理解面向對象OOP?設計模式

OOP(object oriented programming),即面向對象編程,其中兩個最重要的概念就是 類和對象。
    世間萬物都具備自身的屬性和方法,經過這些屬性和方法能夠區分出不一樣的物質。
    屬性和方法的集合就造成了類,類是面向對象編程的核心和基礎,
    經過類就將零散的用於實現某個功能的代碼有效地管理起來了。
    
    類只是具有了某些功能和屬性的抽象模型,而實際應用中須要一個一個實體,也就是須要對類進行實例化,
    類在實例化以後就是對象。
    OOP具備三大特色:
    1. 封裝性:
       也稱爲信息隱藏,就是將一個類的使用和實現分開,只保留部分接口和方法與外部聯繫,或者說只公開了一些供開發人員使用的方法。
       因而開發人員只須要關注這個類如何使用,而不用去關心其具體的實現過程,這樣就能實現MVC分工合做,也能有效避免程序間相互依賴,
       實現代碼模塊間鬆藕合。

    2. 繼承性:
       就是子類自動繼承其父級類中的屬性和方法,並能夠添加新的屬性和方法或者對部分屬性和方法進行重寫。繼承增長了代碼的可重用性。
       php只支持單繼承,也就是說一個子類只能有一個父類。

    3. 多態性:
       子類繼承了來自父級類中的屬性和方法,並對其中部分方法進行重寫。
       因而多個子類中雖然都具備同一個方法,可是這些子類實例化的對象調用這些相同的方法後卻能夠得到徹底不一樣的結果,這種技術就是多態性。
       多態性加強了軟件的靈活性。

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

1.確認服務器硬件是否足夠支持當前的流量,
2.禁止外部的盜鏈,控制大文件的下載
3.採用 jQuery 延遲加載
4.生成靜態 HTML 頁面,設置 memcache 緩存
5.劃分區域設置不一樣的主機應答
6.使用流量分析統計軟件,瞭解訪問量,有針對性的進行優化
7.優化數據庫的訪問,採用讀寫分離(主從架構,分庫分表)
8.分佈式服務器設置,負載均衡
1四、用PHP寫出顯示客戶端IP與服務器IP的代碼1分)
客戶端IP : $_SERVER["REMOTE_ADDR"] 服務器端IP: $_SERVER["SERVER_ADDR"]

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

在失敗的時候: include產生一個警告,而require致使一個致命錯誤 require在運行前載入 include在運行時載入 require_once
include_once

1七、有一個網頁地址, 好比PHP研究室主頁: http://www.phpv.net/index.html,如何獲得它的內容?($1分)

echo file_get_contents("https://www.baidu.com");
curl 

1八、在HTTP 1.0中,狀態碼401的含義是(?);若是返回「找不到文件」的提示,則可用 header 函數,其語句爲(?);(2分)

未受權
header("HTTP/1.0 404 Not Found");
fast CGI中:
header("Status: 404 Not Found");

 1九、在PHP中,heredoc是一種特殊的字符串,它的結束標誌必須?(1分)

成對出現
$a = <<<EOD
good test
EOD;

 20、談談asp,php,jsp的優缺點(1分)

asp是須要依賴IIS,是微軟開發的語言
php和jsp能夠依賴apache或者 nginx等其餘服務器

 2一、談談對mvc的認識(1分)

MVC 是一種設計模式中
M 是 model 模型,業務邏輯層(數據信息存取層)
V 是視圖 view 主要負責用戶交互層(負責將應用的數據以特定的方式展示在界面上)
C 是控制器 一般控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據
Mvc 優勢:
    低耦合性
    高重用性和可以使用行
    較低的生命週期成本
    快速的部署
    可維護性
2二、寫出發貼數最多的十我的名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)
select top 10 id,username from members order by posts desc

 23. 請說明php中傳值與傳引用的區別。何時傳值何時傳引用?(2分)

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

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

優缺點:按值傳遞時,php必須複製值。特別是對於大型的字符串和對象來講,這將會是一個代價很大的操做。

按引用傳遞則不須要複製值,對於性能提升頗有好處。

 24. 在PHP中error_reporting這個函數有什麼做用? (1分)

設定error的展現級別

 25. 請寫一個函數驗證電子郵件的格式是否正確 (2分

$str = "jianfeng@126.com";
function test($test){
    $regex="/^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,10}$/" ; // 正則
    $res = preg_match($regex, $test);
    if ($res) {
        echo '驗證成功';
    } else {
        echo '驗證失敗';
    }
} 
"/^1[34578][0-9]{9}$/" //手機號碼

26. 簡述如何獲得當前執行腳本路徑,包括所獲得參數。(2分)

$argc --獲取參數數量
$argv --獲取參數列表
27.如何修改SESSION 和 COOKIE的生存時間. (1分)
$lifeTime = 24 * 3600;  
session_set_cookie_params($lifeTime);  // 修改session
session_start(); 

setcookie(); // 修改cookie
2八、JS表單彈出對話框函數是?得到輸入焦點函數是? (2分)
alert()  confirm()  promopt()
focus()

 2九、JS的轉向函數是?怎麼引入一個外部JS文件?(2分)

window.location.href="#"
<script src="#">
</script>

 30、foo()和@foo()之間有什麼區別?(1分)

@控制錯誤輸出
3三、你如何訪問和設置一個類的屬性? (2分)
<?php class A { public $name = "A"; } $a = new A(); $n = $a->name; print_r($n);

3四、mysql_fetch_row() 和mysql_fetch_array之間有什麼區別? (1分)

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

mysql_fetch_array() 是 mysql_fetch_row() 的擴展版本。除了將數據以數字索引方式儲存在數組中以外,還能夠將數據做爲關聯索引儲存,用字段名做爲鍵名。 
3五、GD庫是作什麼用的? (1分)
動態的開放的圖片處理庫

 3六、指出一些在PHP輸入一段HTML代碼的辦法。(1分)

echo "{html}"
echo <<<EOD
{html}
EOD;
3九、下面的程序會輸入是否?(1分) 
$num = 10;
function multiply(){
  $num = $num * 10;
  }
multiply();
echo $num;
 // 報錯,$num變量未定義
40、使用php寫一段簡單查詢,查出全部姓名爲「張三」的內容並打印出來 (2分)
  表名 UserName Tel Content Date
     張三 13333663366 大專畢業 2006-10-11
     張三 13612312331 本科畢業 2006-10-15
     張四 021-55665566 中專畢業 2006-10-15
  請根據上面的題目完成代碼:
  $mysql_db=mysql_connect("local","root","pass");
  @mysql_select_db("DB",$mysql_db);
    $sql = sprintf("select * from %s where UserName = '%s'", "表名", "張三");
    values=mysqlquery(sql);
    while(item=mysqlfetchqueryarray(values)){
        echo sprintf("用戶名:%s, 電話 %s, 學歷: %s, 畢業日期:%s",item[′UserName′],item['Tel'], item[′Content′],item['Date']);
    }   
4一、如何使用下面的類,並解釋下面什麼意思?(3)
  class test{
  function Get_test($num){
   num=md5(md5(num)."En");
  return $num;
  }
  }
$test = new test();
ret=test->Get_test(11);
print_r($ret);exit;
將num進行MD5編碼以後生成的32位字符串a1和"En"聯繫起來以後再進行一次MD5編碼

 ---------------------------------------------------------------------------

  4二、寫出 SQL語句的格式 : 插入 ,更新 ,刪除; 表名User  
     Name Tel            Content Date
     張三 13333663366 大專畢業 2006-10-11
     張三 13612312331 本科畢業 2006-10-15
     張四 021-55665566 中專畢業 2006-10-15
  (a) 有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用SQL語句新增至表中
$sql = "insert into User(Name,Tel,Content,Date) values('小王', ’13254748547’, ’高中畢業’, ’2007-05-06’)」;
  (b) 請用sql語句把張三的時間更新成爲當前系統時間
$sql = "update User set Date='" . time() . "' Where Name='張三'";
  (c) 請寫出刪除名爲張四的所有記錄
$sql = "delete from User where Name='張四'";
4三、請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什麼區別(2分)
int 整型    char 存儲定長    varchar 存儲變長   datetime 時間   text 存儲變長的
varchar是變長 存儲空間有優點
char(20)是定長  查詢效率有優點
4四、MySQ自增類型(一般爲表ID字段)必需將其設爲(?)字段(1分)
auto_increment
  -----------------------------------------------------------------------------
4七、取得查詢結果集總數的函數是?(1分)
mysql_num_rows() 
50、$ a=abcdef;出a的值並打印出第一個字母(1分)
$a{0}或者$a[0]
substr($a, 0, 1); 
5二、請寫出PHP5權限控制修飾符(3分)
public
private 
protected

 

5三、請寫出php5的構造函數和析構函數(2分)
public function __construct()
{
}
public function __destruct()
{
}

,關於PHP優缺點,大體的說幾點:

     1.  語法簡單的,上手很快,並且還有不少很便捷的開發工具,好比說Zend Studio ,EclipsePHP Studio 等
     2.  跨平臺,並且還都是免費的 ,能夠快速的在搭建LAMP(Linux Apache MYSQL, PHP), 支持不少主流的數據庫系統,好比MYSQL, Oracle, PostgreSQL等等
     3.  支持目前主流的技術,好比 WebService ,XML, AJAX 等等
     4.  PHP已經有很成熟的面向對象體系,能夠支持面向對象的開發 (PHP5)
     5. 有不少很好現有的框架,開源的論壇,以及博客等
          如: 框架方面的: Zend Framework , CakePHP ,ThinkPHP ,CodeIgniter ..
                 論壇:  Discuz, PHPWind ...  
                 博客: Wordpress
                 網店: ECshop , Ecmall ,ShopEx  ....
      6.  持續的更新和維護,以及社區的支撐,不少技術愛好者的共同努力,使PHP獲得很普遍的應用,不少知名的網站也在使用PHP做爲開發語言,好比Taobao, 騰訊,facebook , Sina, yahoo 等等。
   不足的地方:
       1.  對多線程支持不是很好,只能作一些簡單的模擬線程 。
       2.  語法不夠嚴謹,若是之前作C++,Java 的就會頗有感受了,好比變量尚未定義,就可能直接使用 。
       3.  最感到痛苦的地方是PHP的解釋運行機制。這種運行機制使得每一個PHP頁面被解釋執行後,全部的相關資源都會被回收。
也就是說,PHP在語言級別上沒有辦法讓某個對象常駐內存。在PHP中,全部的變量都是頁面級的,不管是全局變量,仍是類的靜態成員,
都會在頁面執行完畢後被清空。以JSP爲例,在JSP中,Java Bean的scope有四種有效值:Page、Application、Session、Request,分別對應頁面、程序、會話、請求四種生存期。但在PHP中,只有Page一種生存期。

PHP緩存技術有哪些? tp是局部仍是徹底緩存?

1. 全頁面靜態化緩存,也就是將頁面所有生成html靜態頁面,用戶訪問時直接訪問的靜態頁面,而不會去走php服務器解析的流程
2. 頁面部分緩存,將一個頁面中不常常變的部分進行靜態緩存,而常常變化的塊不緩存,最後組裝在一塊兒顯示
3. 數據緩存,經過一個id進行請求的數據,將數據緩存到一個php文件中,id和文件是對應的,下次經過這個id進行請求時 直接讀php文件
4. 查詢緩存,和數據緩存差很少,根據查詢語句進行緩存;
5. 經常使用的緩存技術有:redis和memcache
我的認爲tp應該是全局緩存 由於:tp緩存實在本地生成一個php文件來存儲數據庫中讀取出來的數據
 
3. 寫一個函數,算出兩個文件的相對路徑
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/d/12/34/c.php';
  計算出  b於a 的相對路徑應該是 ?
function getpath($a, $b){
    $a = explode('/', $a);  // 分割後轉爲數組
    $b = explode('/', $b);
    $count = count($b) - 2;
    $path = '';
    for($i = 1; $i <= $count; $i++){
           if($a[$i] == $b[$i]){
            $path .= '../';
        } else {
            $path .= $b[$i] . '/';
        }
    }
    echo $path;
}
getpath('/a/b/c/d/e.php', '/a/d/12/34/c.php');

 

memcache redis 區別
1. Memcache 和 Redis 都是用來管理數據的
2. 它們都是存放在內存裏面的
3. Redis能夠按期將數據備份到磁盤(持久化)
4. Memcache 只是以key/value數據形式存儲
5. Redis 不只僅支持k/v類型的數據,同時提供list, set, hash等數據結構的存儲

 
 
 
hh
相關文章
相關標籤/搜索