PHP中常見的面試題2(附答案)

来源:http://www.cnblogs.com/AngryBigCat/archive/2017/08/03/7277560.html
-Advertisement-
Play Games

恢復內容開始 1.下麵程式輸出是什麼? 結果: 5 2. 寫一個函數Check_ip,使用正則表達式檢測一個IPV4的IP是否正確,正確返回1,錯誤返回0,例如 Check_ip(‘127.0.0.1’)。 3. 請指出以下代碼的錯誤之處(圈出來並加以改正): 4. 有一數組 $a=array(4, ...


---恢復內容開始---

1.下麵程式輸出是什麼?

$int_a = 5;
function factorial() {
  for($int_i=$int_a; $int_i>0; $int_i--) {
    $int_a = $int_a * $int_i;
   }
}
factorial();
echo $int_a;

結果:  5

 

2. 寫一個函數Check_ip,使用正則表達式檢測一個IPV4的IP是否正確,正確返回1,錯誤返回0,例如 Check_ip(‘127.0.0.1’)。

  function check_ip($mact){
        $a='/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
        $v=preg_match($a,$mact);
        if ($v!=0) {
            return  1;
        } else {
            return  0;
        }
  }

 

 

3. 請指出以下代碼的錯誤之處(圈出來並加以改正):

<?
      function baz($y $a) {
          $x = new Array();
          $x[sales] = 60;
          $x[profit] = 20;
          foreach($x as $key = $value) {
              echo $key + “ ” + $value + “<br>”;
         }
    }
<?php
   //參考答案
   function baz($y,$a){
      $x=array();
      $x[‘sales’]=60;
      $x[‘profit’]=20;
      foreach($x as $key=>$value){
         echo $key.””.$value.”<br>”;
      }
   }
?>

 

4.  有一數組 $a=array(4,3,8,9,2); 寫一個排序函數對數組進行排序操作,要求使用快速排序法.快速排序的基本思想是:在待排序記錄序列中,任取其中的一個記錄(這裡取了第一個)並以該記錄的關鍵字作為基準,經過一趟排序後,所有關鍵字比它小的記錄都交換到它的左邊,比它大的記錄都交換到它的右邊.然後再分別對劃分到它左,右兩部分記錄序列重覆上述過程,直至每一部分最終劃分為一個記錄時為止即完成了排序工作.

//參考答案
function kuaiSort($arr)
{
    //遞歸的出口
    if (count($arr) <= 1) return $arr;
    //取出第一個元素
    $flag = $arr[0];
    //聲明兩個數組
    $left = [];
    $right = [];
    //註意這裡的索引是從1開始的
    for ($i = 1; $i < count($arr); $i++) {
        if ($arr[$i] > $flag) {
            $right[] = $arr[$i];
        } else {
            $left[] = $arr[$i];
        }
    }
    $left = kuaiSort($left);
    $right = kuaiSort($right);
    return array_merge($left, [$flag], $right);
}

 

5. 有一表 menu(id, pid, name),請用遞歸法列印樹形菜單,將所有的menu列出來.

/*
參考sql
   create table menu (
      id int auto_increment primary key,
      pid int,
      name varchar(255)
   )engine MyISAM default charset=utf8;
   insert into menu values (1,0,'服裝'),(2,0,'數位'),(3,1,'外套'),(4,3,'男裝'),(5,2,'手機'),(6,3,'女裝');
 */

//函數實現
function getMenu($pid) {
      $pdo= new PDO('mysql:host=localhost;dbname=lamp;charset=utf8','root','');
      //獲取pid為 $pid的菜單
      $stmt = $pdo->query("select * from menu where pid = $pid");
      $menus = $stmt->fetchAll(PDO::FETCH_ASSOC);
      //判斷
      if(empty($menus)) {
         return;
      }
      $res = [];
      foreach ($menus as $key => $value) {
         $value['submenu'] = getMenu($value['id']);
         $res[] = $value;
      }
     return $res;
}
$res = getMenu(0);

 

6. 在開發項目中,需要上傳超過8M的文件,請說明在php.ini需要修改的配置項。

  post_max_size=2M(預設)

  Upload_max_filesize=8M(預設)

 

 

7. 寫出session的運行機制,session與cookie的區別。多台WEB伺服器如何共用session。

  (1)session的運行機制:

    用戶A訪問站點Y,如果站點Y指定了session_start();(以下假設session_start()總是存在)那麼會產生一個session_id,這個session_id一般會以COOKIE的形式保存到用戶A(我們可以通過在php.ini里設置session.use_only_cookies為1,強制SESSIONID必須以COOKIE專遞。)。這時候SESSION ID表現為$_COOKIE[‘PHPSESSID’];(PHPSESSID可用session_name()函數來下修改),用戶A接著訪問,這個session id($_COOKID[‘PHPSESSID’])就會在A每次訪問Y的時候傳送到站點Y。在站點Y上,會有這麼一個目錄,是用來保存SESSION的實際數據的。站點Y接收到session id,然後通過session id,來獲得與SESSION數據的關聯,並返回SESSION數據

  (2)session與cookie的區別:

    1. 存儲位置

    Cookie在客戶端存儲,消耗客戶端資源, session在伺服器存儲,消耗伺服器資源.

    2. 安全性

    Session相對安全, cookie相對不安全, 因為用戶可以看到傳遞的信息

    3. 大小限制

    單個cookie的最大長度為4k, session沒有大小限制

    4. 過期機制

    Cookie的過期是實時, 過期時間一到cookie就會失效, 但session的過期是概率性觸發, 也就是說即時session過期並不是立即就失效.

  (3)多台伺服器如何共用SESSION:

    session專門存儲到一臺獨立的伺服器上,存資料庫,memcache,redis都可以, 多台伺服器都來這台伺服器上操作session即可.
 

8. SQL中LEFT JOIN 的含義是什麼? 如果tbl_user記錄了學生的姓名(name)和學號(ID),tbl_score記錄了學生(有的學生考試以後被開除了,沒有記錄)的學號(ID)和考試成績(score)以及考試科目(subject),要想列印出各個學生姓名及對應的各科總成績,請寫出SQL語句.

學號 id
姓名 name

 

 

 

學號 id
成績 score
科目 subject

 

 

 

 

id

name

1

a

2

b

 

 

 

 

Id

Score

subject

1

10

語文

1

20

數學

2

30

語文

2

40

數學

 

 

 

 

 

 

 

答:left join 的含義:LEFT JOIN是以左

  表為基準進行外聯查詢。

SQL:  select tbl_user.name sum(tbl_score.score) from tbl_user   left join tbl.score on tbl_user.id=tbl_score.id;

 

9. 讀代碼

<?php
    $data = array(‘a’, ‘b’, ‘c’);
    foreach($data as $key=>$val) {
        $val = &$data[$key];
        //輸出數組
        var_dump($data);
    }
?>

問題1:程式執行時,每一次迴圈結束後變數$data的值是什麼?請解釋

答:第一次迴圈時,把下表為0的成員,引用賦值給變數$val,$val與$data[0]內容相同,

要是其中一個改變,另一個也改變,此時,$data原樣輸出,只是$data[0]變成了引用

輸出結果 a b c

第二次迴圈時,$key的值為1,把$data[1]引用複製給$val.

由於$val與$data[0]也是引用關係,所以這時,$val,$data[0],$data[1]三者值同為’B’

$val不再與$data[0]有關係了,只與$data[1]是引用關係

// b  b  c

第三次迴圈時,$key的值為2,把$data[2]引用複製給$val,

由於$data[1]與$val是引用關係,所以都將改變$data[1]、$val、$data[2]三者值一樣

//b c c

問題2:程式執行完後,變數$data的值是什麼?請解釋。(10分)

答:結果為B c c


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Entity Framework是以ADO.NET為基礎,面向數據的“實體框架”。以下簡稱EF。 它利用了抽象化數據結構的方式,將每個資料庫對象都轉換成應用程式對象 (entity),數據欄位都轉換為屬性 (property),關係則轉換為結合屬性 (association),讓資料庫的 E/R 模 ...
  • 測試代碼: ...
  • 下載地址為:http://npoi.codeplex.com/releases/view/616131 可以操作excel表,行,單元格內家及樣式等。 使用示例: using (FileStream fs = File.OpenRead(@"E:\a.xls")) //打開myxls.xls文件 { ...
  • https://netftp.codeplex.com/ 測試 https://github.com/hgupta9/FluentFTP ...
  • wcf操作cookie看似很簡單,如果不對Wcf研究一把還是很難的,基本上無從下手。 這裡上一圖 上面的結果,豈止是坑爹,簡直就是坑爹!!! 廢話不多說,直接上代碼: cookie讀取 cookie寫入 原理就是wcf 的 restful 是用[webget]或[webinvoke]針對operat ...
  • Socket Socket是什麼? 下麵來看一下網路的傳輸過程: 上面圖片顯示了網路傳輸的基本過程,傳輸是通過底層實現的,有很多底層,我們寫傳輸過程的時候,要知道所有的過程那就太複雜了,socket為我們封裝了底層的傳輸流程,讓我們直接可以在socket上直接實現數據交換。 socket本質:對底層 ...
  • 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 目錄(?)[+] 目錄(?)[+] 參考資料: http://263229365.iteye.com/blog/1040329 https://www.java.net/node/650758 ...
  • 1. echo count(“abcd”);輸出多少? 答案:4 2. 運行以下代碼後$a $b $c 分別是? 答案:false、0、0 4. 請用php的heredoc語法格式輸出:hello world! 5. $string = "abcdefg",那麼$string{4}的值是? 答案:e ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...