PHP 面接の質問 39 項目を要約して整理する (要約の共有)

WBOY
リリース: 2023-04-10 22:34:02
転載
8686 人が閲覧しました

この記事では、PHP に関する関連知識を提供します。主に PHP の面接の質問を紹介し、一般的な 39 の質問をまとめています。PHP の面接の質問にはさまざまな種類があります。 , しかし、それらはすべて基本的かつ一般的な PHP 面接の質問と切り離せないものです。

PHP 面接の質問 39 項目を要約して整理する (要約の共有)

推奨学習: 「

PHP チュートリアル

PHP Common面接の質問

1. 完全な HTTP リクエスト プロセスを詳しく説明します

この質問の核心はドメイン名の解決とサーバー (nginx) がこれら 2 つの部分を解析する 基本的に、これら 2 つの部分について詳しく説明できます。

ステップ 1. URL を解析する

ブラウザは現在の URL データを解析して、URL が正当なリンクであるかどうかを判断します。正当なリンクであれば、通常通り次のステップに進みます。合法的なリンクではない場合、Baidu、360、Google 検索などの検索機能が実行されます。

ステップ 2、ドメイン名を解決する

サーバーは IP の形式で存在します。ドメイン名を IP に解決する必要があります。IP を解決するには 3 つの小さな手順があります:

1)、ブラウザ自体のキャッシュからドメイン名データを解析します

2)、ローカル キャッシュからドメイン名データを解析します。コンピュータのキャッシュ HOST ファイル内のドメイン名を解決します

3)、DNS サーバーを通じてドメイン名を解決します

ステップ 3、情報を取得します

このステップでは、次の情報を取得します。 URL 情報、主に IP およびポート情報。

ステップ 4. パケット化して 3 方向ハンドシェイクを実行する

ブラウザは要求情報をパッケージ化し、TCP の 3 方向ハンドシェイクを通じてデータをサーバーに送信します。

ステップ 5. サーバーはデータを解析、処理し、返します

サーバーは、渡されたデータをさまざまなレベルと方法で取得し、データを分析および処理し、最終的に応答 MIME タイプ データを返します。正常なステータス コードは 200、異常なエラー コードは 404、500、501 などです。

ステップ 6. ブラウザがデータを取得、レンダリング、表示します

ブラウザは、サーバーからのデータ。リソースの読み込み、ページのレンダリング、その他の操作によってユーザーにページを表示します。

2. SESSION と COOKIE の違いは何ですか? プロトコルの理由と機能を説明してください?

1)、http ステートレス プロトコルでは、ユーザーを区別できません。同じ Web サイトから来ているため、異なるページをリクエストしている同じユーザーは同じユーザーとは見なされません。

2)、SESSIONはサーバー側に保存され、COOKIEはクライアント側に保存されます。セッションは比較的安全ですが、Cookie は特定の方法で変更される可能性があり、安全ではありません。セッションは配信のために Cookie に依存します。

Cookie を無効にすると、セッションは正常に使用できなくなります。セッションの欠点: セッションはサーバー側に保存され、各読み取りはサーバーから読み取られるため、サーバー上のリソースが消費されます。セッションはサーバー側のファイルまたはデータベースに保存されます。デフォルトではファイルに保存されます。ファイル パスは、PHP 設定ファイルの session.save_path で指定されます。セッションファイルは公開されています。

3. HTTP ステータスの 302、403、および 500 コードの意味は何ですか? #1、2、3、4、5 の原則: 1. メッセージ シリーズ 2、成功シリーズ 3. リダイレクト シリーズ 4. リクエスト エラー シリーズ 5. サーバー側エラー シリーズ

302: 一時転送が成功しました。要求されたコンテンツは新しい場所に移動されました。 403: アクセスが禁止されています。 500: サーバー内部エラー 401 は、不正を表します。

4. 圧縮パッケージを作成し、Linux でパッケージを解凍するコマンド

Tar.gz:

Packaging: tar czf file.tar .gz file.txt

抽出: tar xzf file.tar.gz

Bz2:

パッケージ: bzip2 [-k] ファイル

抽出: bunzip2 [ -k] ファイル

Gzip (ファイルのみ、オリジナル ファイルではありません)

パッケージ: gzip file1.txt

解凍: Gunzip file1.txt.gz

Zip: -r ディレクトリを圧縮します

: zip file1.zip file1.txt

解凍: unzip file1.zip

5. データ型の意味を書いてください (int char varchar datetime text); varchar と char の違いは何ですか?

Int Integer char 固定長文字 Varchar 可変長文字 Datetime 日時型 Text テキスト型 Varchar と char char の違いは、固定長の文字型です。たくさんのスペース。 Varchar は可変長の文字型で、コンテンツと同じだけのスペースを占有するため、スペースを効果的に節約できます。 varchar型は可変であるため、データ長が変わるとサーバー側で追加の操作が必要となり、char型に比べて効率が悪くなります。

6. MyISAM と InnoDB の基本的な違いは何ですか?インデックス構造はどのように実装されていますか?

MyISAM タイプはトランザクションとテーブル ロックをサポートしておらず、断片化が起こりやすいです。頻繁に最適化する必要があり、読み取りと書き込みの速度が速いのに対し、InnoDB タイプはトランザクション、行ロック、クラッシュ回復機能も備えています。読み取りおよび書き込み速度は MyISAM よりも遅くなります。

インデックスの作成: アラート テーブル テーブル名 インデックス (`フィールド名`) を追加

7. Cookie を使用せずにクライアントに Cookie を送信します。

理解: session_start() がオンの場合、定数 SID が生成されます。COOKIE がオンの場合、この定数は空です。COOKIE がオフの場合、PHPSESSID の値がこの定数に格納されます。 URL の後に SID パラメータを追加して SESSIONID の値を渡すことで、クライアント ページは SESSIONID の値を使用できます。クライアントが COOKIE を開き、サーバーが SESSION を開くとき。ブラウザが最初のリクエストを行うとき、サーバーは SESSIONID を保存するためにブラウザに COOKIE を送信します。ブラウザが 2 番目のリクエストを行うとき、既存の

8.isset() および empty( )違い

Isset は、変数が存在するかどうかを決定します。複数の変数を渡すことができます。変数の 1 つが存在しない場合は、false を返します。empty は、変数が空か false かを決定します。変数は 1 つだけですIf 空または false の場合は true を返します。

9. Redis を永続化する方法は何通りありますか?

回答: 主に 2 つの方法があります:

1) スナップショットの永続性

は Redis 構成ファイルで自動的に有効になっています。形式は次のとおりです: save N M

は、N 秒以内に、redis が少なくとも M 回変更された場合、redis はディスクにスナップショットを取得することを意味します。

もちろん、save または bgsave (非同期) コマンドを手動で実行してスナップショットを作成することもできます。

2) ファイルのみの追加 AOF 永続化

モードは合計 3 つあります。例:

appendfsync Everysec のデフォルトでは、1 秒に 1 回ディスクへの書き込みを強制します

appendfsync always 書き込み操作が実行されるたびにディスクへの書き込みを強制します

appendfsync no は OS とパフォーマンスに完全に依存します。最良ですが、永続性は保証できません。

3 番目のモードが最良です。 Redis もデフォルトで 3 番目のモードを採用します。

10.mysql ストレージ エンジン

回答: 一般的に使用されるものは 2 つあり、1 つは innodb で、もう 1 つは myisam です。この 2 つの主な違いは次のとおりです

1) myisam はトランザクション処理をサポートしませんが、innoDB はトランザクション処理をサポートします

2) myisam は外部キーをサポートしませんが、innoDB は外部キーをサポートします

3) myisam はフルテキストをサポートしますMySQL バージョン 5.6

4) データの保存形式が異なります。mysiam テーブルは、構造、インデックス、データの 3 つのファイルに保存されます。InnoDB ストレージには、ファイルとインデックスとしての構造、そしてデータはファイルとして保存されます

5) myisam はデータのクエリと追加では innoDB よりも優れたパフォーマンスを発揮し、一括削除では innoDB のパフォーマンスが優れています。

6) myisam はテーブル ロックをサポートしますが、innoDB は行ロックをサポートします

11. SQL インジェクションとは何ですか? SQL インジェクションを防ぐ方法は何ですか?

回答: SQL インジェクション攻撃とは、ユーザーまたはハッカーが特別な入力をパラメーターとして Web アプリケーションに渡すことを指します。これらの入力のほとんどは、SQL 構文の組み合わせです。SQL ステートメントを実行すると、操作が実行されます。主な理由は、プログラマがユーザーが入力したデータを慎重にフィルタリングしなかったため、不正なデータがシステムに侵入する原因となったことです。したがって、主に次の 2 つの側面から、開発プロセス中に SQL インジェクションを防ぐ必要があります。

1) プレースホルダー方式では、SQL ステートメントを前処理してから SQL ステートメントを実行します

2) アッドスラッシュを使用します。または mysql_real_escape_string を使用して、ユーザーが入力した値をエスケープし、一部の特殊文字をエスケープします。

12. 前処理は使用されていますか?

回答: 以前使用したことがあります PDO クラスには前処理を実装できる prepare メソッドがあります PDOStament クラスの exclude メソッドは前処理を実行できます 前処理パラメータは 2 種類あります1 つは :String プレースホルダー、もう 1 つは ? プレースホルダーで、:string プレースホルダーは前処理を実行してパラメーターを渡すときに連想配列で渡しますが、? プレースホルダーはインデックス配列で渡します。この 2 つを混合することはできませんが、通常は文字列プレースホルダーを使用することをお勧めします。

13. フレームワークを使用する場合、独自の処理を使用する必要がありますか?

回答: 一般に、成熟したオープンソース フレームワークはデータ セキュリティを考慮していますが、場合によっては、一部のネイティブ SQL ステートメントが使用される可能性がある場合は、SQL ステートメントを自分で前処理することを検討する必要があります。もちろん、フレームワーク内のフィルタリング メソッドを使用したくない場合もありますが、たとえば、テキスト エディタを使用する場合は、独自のフィルタリング メソッドを使用できます。

14.mysqlを最適化するにはどうすればよいですか?

回答: MySQL の最適化は主に次の側面から実現されます:

1) 設計の観点: ストレージ エンジンの選択、フィールド タイプの選択、パラダイム

2)機能的な観点: インデックス作成、クエリ キャッシュ、デフラグ、パーティショニング、サブテーブルなどの MySQL 独自の機能を利用できます。

3) SQL ステートメントの最適化: クエリ ステートメントを簡素化し、クエリ フィールドをできるだけ少なくする クエリ フィールドを減らし、ページング ステートメント、グループ化ステートメントなどを最適化します。

4) 高負荷アーキテクチャシステムの導入:データベースサーバを分離し、高負荷時はマスタスレーブレプリケーションや読み書き分離機構を利用した設計が可能です

5)データベース サーバーをハードウェアからアップグレードします。

15. PHP における値渡しと参照渡しの違いを説明してください。いつ値渡しするのか、いつ参照渡しするのか?

値渡し: 関数スコープ内の値への変更は関数の外では無視されます。

参照渡し: 関数スコープ内の値への変更も無視されます。関数外では無視される これらの変更を反映

長所と短所: 値で渡す場合、PHP は値をコピーする必要があります。特に大きな文字列やオブジェクトの場合、これはコストのかかる操作になる可能性があります。参照渡しでは値をコピーする必要がないため、パフォーマンスの向上に役立ちます。

16. PHP の error_reporting の機能は何ですか?

PHP のエラー報告レベルを設定し、現在のレベルを返します。

17. PHP を使用してクイック ソート アルゴリズムを記述します。オブジェクトは配列にできますか?

原則: クイック ソートでは、分割統治戦略を使用して分割します。ソートされるデータ シーケンス 2 つのサブシーケンス。具体的な手順は次のとおりです。

(1) シーケンスから要素を選択し、この要素を「ベースライン」と呼びます。

(2) 配列を 1 回スキャンし、「ベース」より小さいすべての要素をベースの前に配置し、「ベース」より大きいすべての要素をベースの後ろに配置します。

(3) 基準値より小さい要素の部分配列と基準値より大きい要素の部分配列がソートされるまで、再帰によって各サブシーケンスをより小さなシーケンスに分割します。

//快速排序(数组排序)
function QuickSort($arr){
 $num = count($arr);
 $l=$r=0;
 for($i=1;$i<$num;$i++){
  if($arr[$i] < $arr[0]){
   $left[] = $arr[$i];
   $l++;
  }else{
   $right[] = $arr[$i];
   $r++;
  }
 }
 if($l > 1){
  $left = QuickSort($left);
 }
 $new_arr = $left;
 $new_arr[] = $arr[0];
 if($r > 1){
  $right = QuickSort($right);
 }
 for($i=0;$i<$r;$i++){
  $new_arr[] = $right[$i];
 }
 return $new_arr;
}
ログイン後にコピー

18. 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;
 }
}
ログイン後にコピー
にすることができます。

19. 汎用的な 2 次元配列ソート アルゴリズム関数を作成します。PHP 組み込み関数 (array_multisort()) を呼び出すことができます。

//二维数组排序, $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;
}
ログイン後にコピー

20ユーザーが文字列 String $string を入力するには、$string には 0 より大きい数字と英語のカンマのみを含めることが必要です。正規表現を使用して確認してください。$string が要件を満たしていない場合は、次のようなエラー メッセージが表示されます。

class regx { 
 public static function check($str) { 
 if(preg_match("/^([1-9,])+$/",$str)) { 
  return true; 
 } 
 return false; 
 } 
} 
$str="12345,6"; 
if(regx::check($str)) { 
echo "suc"; 
} else { 
echo "fail"; 
}
ログイン後にコピー

21. シングルトン モード、mysqli データベースにリンクされたシングルトン オブジェクトを作成します

class Db { 
 private static $instance; 
 public $handle; 
 Private function __construct($host,$username,$password,$dbname) { 
  $this->handle=NULL; 
  $this->getcon($host,$username,$password,$dbname); 
 } 
 public static function getBb() { 
  self::$instance=new Db(); 
  return self::$instance; 
 } 
 private function getcon($host,$username,$password,$dbname) { 
  if($this->handle!=NULL){ 
   return true; 
  } 
  $this->handle=mysqli_connect($host,$username,$password,$dbname); 
 } 
}
ログイン後にコピー

22. PHP セッション拡張機能はどこにありますかデフォルトでセッション データを保存しますか? D

A) SQLite データベース

B) MySQL データベース

C) 共有メモリ

D)ファイル システム

#E) セッション サーバー

23. PHP の strto lower() および strtoupper() 関数により、サーバーをインストールするときに中国語の文字が文字化けする可能性があります。中国語以外のシステムです。Unicode テキストと互換性のある文字を実装するには、2 つの代替関数を作成してください。文字列の大文字と小文字の変換

答え: 理由: 中国語はマルチバイトで構成されており、英語は 1 つだけです。英語システムの文字は 1 バイトしかないため、システムは中国語の各バイトを変換します。すべて strto lower() によって処理されており、変更された中国語の文字は結合されると文字化けします (新しく生成されたエンコーディング マップに対応する文字)中国語ではない可能性があります)

手動の解決策: str_split(string string , intstring, intsplit_length = 1) を使用します。中国語を 3 バイトに分割できるように、バイトごとに分割します。認識されたバイトが英文字の場合は変換されます。

<?php  
function mystrtoupper($a){  
    $b = str_split($a, 1);  
    $r = &#39;&#39;;  
    foreach($b as $v){  
        $v = ord($v);  
        if($v >= 97 && $v<= 122){  
            $v -= 32;  
        }  
        $r .= chr($v);  
    }  
    return $r;  
}  
 
 
$a = &#39;a中你继续F@#$%^&*(BMDJFDoalsdkfjasl&#39;;  
echo &#39;origin string:&#39;.$a."\n";  
echo &#39;result string:&#39;;  
$r = mystrtoupper($a);  
var_dump($r);
ログイン後にコピー

24. PHP の is_writeable() 関数にはバグがあり、ディレクトリ/ファイルが書き込み可能かどうかを正確に判断できません。ディレクトリ/ファイルが完全に書き込み可能かどうかを判断する関数を作成してください

回答: バグは 2 つの側面で存在します:
1) 終了時、ファイルに読み取り専用属性しかない場合、is_writeable() 関数は false を返します。true が返された場合、ファイルは無効です。必ず書き込み可能です。
ディレクトリの場合は、ディレクトリに新しいファイルを作成し、ファイルを開いて確認します。
ファイルの場合は、ファイルを開く (fopen) ことで、ファイルが書き込み可能かどうかをテストできます。

2) Unix では、php 設定ファイルでセーフモードがオンになっている場合 (safe_mode=on)、is_writeable() も使用できません。
構成ファイルを読んで、safe_mode がオンになっているかどうかを確認します。

/**
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers when you really can&#39;t write to
* the file, based on the read-only attribute. is_writable() is also unreliable
* on Unix servers if safe_mode is on.
*
* @access   private
* @return   void
*/
if ( ! function_exists(&#39;is_really_writable&#39;))
{
    function is_really_writable($file)
    {
    // If we&#39;re on a Unix server with safe_mode off we call is_writable
    if (DIRECTORY_SEPARATOR == &#39;/&#39; AND @ini_get("safe_mode") == FALSE)
    {
        return is_writable($file);
    }
 
    // For windows servers and safe_mode "on" installations we&#39;ll actually
    // write a file then read it. Bah...
    if (is_dir($file))
    {
        $file = rtrim($file, &#39;/&#39;).&#39;/&#39;.md5(mt_rand(1,100).mt_rand(1,100));
 
        if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
        {
            return FALSE;
        }
 
        fclose($fp);
        @chmod($file, DIR_WRITE_MODE);
        @unlink($file);
        return TRUE;
    } elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
        return FALSE;
    }
 
    fclose($fp);
    return TRUE;
    }
}
ログイン後にコピー

25.PHP处理上传文件信息数组中的文件类型$_FILES[‘type’]由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠

答:用getimagesize来判断上传图片的类型比$_FILES函数的type更可靠
同一个文件,使用不同的浏览器php返回的type类型是不一样的,由浏览器提供type类型的话,
就有可能被黑客利用向服务器提交一个伪装撑图片后缀的可执行文件。
可以通过getimagesize()函数来判断上传的文件类型,如果是头像文件 会返回这样的一个数组

Array
(
    [0] => 331
    [1] => 234
    [2] => 3
    [3] => width="331" height="234"
    [bits] => 8
    [mime] => image/png
);
ログイン後にコピー

26.如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?

答:基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交) 

1)屏蔽错误,将display_errors 设置为off 
2)过滤用户提交参数,这里需要注意的是不能仅仅通过浏览器端的验证,还需要经过服务器端的过滤

这里是需要注意最多的地方,因为所有用户提交的数据入口都在这里,这是过滤数据的第一步。
      1 考虑是否过滤select,insert,update,delete,drop,create等直接操作数据的命令语句
      2 使用addslashes 将所有特殊字符过滤
      3 打开magic_quotes_gpc,开启该参数数后自动将sql语句转换,将 ' 转换成  \'
ログイン後にコピー

3)可以考虑设置统一入口,只允许用户通过指定的入口访问,不能访问未经许可的文件等内容 
4)可以考虑对安全性要求高的文件进行来源验证,比如要想执行b.php必须先执行a.php,可以在b.php中判断来自a.php的referer,避免用户直接执行b.php

27.请写出让PHP能够在命令行下以脚本方式执行时安装PHP所必须指定的configure参数,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

答:由于 –enable-cli 和 –enable-cgi 同时默认有效,因此,不必再配置行中加上 –enable-cli 来使得 CLI 在 make install 过程中被拷贝到 {PREFIX}/bin/php

php -f “index.php” 
php -r “print_r(get_defined_constants());”
ログイン後にコピー

28.PHP的垃圾收集机制是怎样的?

说明: 
1)如果,你熟悉PHP源码,那么请从源码入手,回答些问题,会获得额外加分 
2)如果,你不熟悉PHP源码,那么尽你所能,多写点东西,包括利用自己的编程直觉得到的信息,都可以。 
3)对,则有分,错误不扣,不写无分。

答:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

29.get和post的区别?

1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
ログイン後にコピー

30.如何修改会话的生存时间?

一:在php.ini中设置session.gc_maxlifetime = 1440 //默认时间
二:代码实现      $ lifeTime = 24 * 3600; //保存一天
    session_set_cookie_params($ lifeTime); 
    在session_start();
ログイン後にコピー

31.微信支付回调失败该如何处理?

他问的是已经支付成功后,但是回调失败了。

自己可以创建定时任务在每天的凌晨执行,去微信那边对账,然后更新数据库订单状态。

32.调用区块链接口的安全措施,有那些实现方法?

来自PHP技术交流群 群友分享

  1. 使用MD5实现对接口加签,目的是为了防止篡改数据。
  2. 基于网关实现黑明单与白名单拦截
  3. 可以使用rsa非对称加密 公钥和私钥互换
  4. 如果是开放接口的话,可以采用oath2.0协议
  5. 使用Https协议加密传输,但是传输速度慢
  6. 对一些特殊字符实现过滤 防止xss、sql注入的攻击
  7. 定期使用第三方安全扫描插件
  8. 接口采用dto、do实现参数转化 ,达到敏感信息脱敏效果
  9. 使用token+图形验证码方法实现防止模拟请求
  10. 使用对ip访问实现接口的限流,对短时间内同一个请求(ip)一直访问接口 进行限制。

33.服务器受到dos攻击,这个问题如何应付?

看看你的服务的访问日志,在防火墙中加过滤,或者在web服务器中加过滤吧。方法有以下几种。

  • 对于特定的IP访问的情况,限制IP访问
  • 限制同一IP在单位时间内的访问次数
  • 上级服务器,提高吞吐能力

是消耗服务器资源为主还是纯流量攻击?消耗资源的可以通过配置防火墙过滤规则防御中小规模的攻击。如果是纯流量攻击,考虑你用的是linode真心无解。即便你封了IP封了端口也没用,人家不管你接不接受他的请求,他都会塞满你的带宽。linode必然认为你是被流量攻击或者消耗过多资源然后给你挂起。

34.简述Linux下安装Mysql的过程?

Groupadd mysql 添加一个用户组mysql
Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
Cd /lamp/mysql 进入mysql目录
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make
Make all
ログイン後にコピー

35.对于大流量的网站,您采用什么样的方法来解决访问量问题?

优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:

  • 确定当前服务器设备是否满足流量需求。
  • 使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
  • 禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
  • 控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
  • 使用不同的主机分流主要流量,使服务器均衡负载。
  • 使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。

36.对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

1)索引的目的是什么?

  • 快速访问数据表中的特定信息,提高检索速度
  • 创建唯一性索引,保证数据库表中每一行数据的唯一性
  • 加速表和表之间的连接
  • 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

2) 索引对数据库系统的负面影响是什么?

负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

3) 为数据表建立索引的原则有哪些?

  • 在最频繁使用的、用以缩小查询范围的字段上建立索引
  • 在平频繁使用的、需要排序的字段上建立索引

4) 什么情况下不宜建立索引?

  • 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
  • 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的知道等。

37.PHP字符串中单引号与双引号的区别?

单引号不能解释变量,而双引号可以解释变量。

单引号不能转义字符,在双引号中可以转义字符。

38.求两个日期的差数,例如2021-2-5 ~ 2021-3-6 的日期差数

方法一:
<?php
class Dtime{
 function get_days($date1, $date2){
  $time1 = strtotime($date1);
  $time2 = strtotime($date2);
  return ($time2-$time1)/86400;
 }
}
$Dtime = new Dtime;
echo $Dtime->get_days(’2021-2-5′, ’2021-3-6′);
?>
方法二:
<?php
$temp = explode(‘-’, ’2021-2-5′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’2021-3-6′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法三:echo abs(strtotime(“2021-2-5″)-strtotime(“2021-3-1″))/60/60/24 计算时间差
ログイン後にコピー

39.有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)

<?php
function BubbleSort(&$arr){
 $cnt=count($arr);
 $flag=1;
 for($i=0;$i<$cnt;$i++){
 if($flag==0){
  return;
 }
 $flag=0;
 for($j=0;$j<$cnt-$i-1;$j++){
  if($arr[$j]>$arr[$j+1]){
   $tmp=$arr[$j];
   $arr[$j]=$arr[$j+1];
   $arr[$j+1]=$tmp;
   $flag=1;
  }
 }
 }
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
ログイン後にコピー

推荐学习:《PHP视频教程

以上がPHP 面接の質問 39 項目を要約して整理する (要約の共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート