ホームページ >バックエンド開発 >PHPチュートリアル >PHP 面接の主要な質問の概要の共有 (2)

PHP 面接の主要な質問の概要の共有 (2)

小云云
小云云オリジナル
2018-03-22 13:41:293846ブラウズ

先ほど、PHP 面接の主要な質問 (1) について説明しました。この記事では、主に PHP 面接の主要な質問 (2) について説明します。

1. 理論的な知識

1.1. PHP は大文字と小文字を区別しますか?

PHP は、システム関数、ユーザー定義関数、クラス名などについて大文字と小文字を区別しません。

PHP の変数と定数は、大文字と小文字を区別します。

ファイル名については、サーバーのオペレーティング システムです。

1.2、$_POST、$HTTP_RAW_POST_DATA、php://input? の違いは依存しますが、Linux は区別しますが、Win は区別しません。

$_POST:

はフォームPOSTデータを取得するためのもので、メディアタイプは「application/x-www-form-urlencoded」です。

各キーと値のペアは「&」文字で区切られ、キーと値は「=」で区切られ、その他の特殊文字は urlencode メソッドを使用してエンコードされることを意味します。

$HTTP_RAW_POST_DATA:

は元のPOSTデータを取得できますが、php.iniで有効にする必要があり、enctype="multipart/form-data" によって渡されるデータをサポートしません

php : //input:

は元の POST データを取得でき、$HTTP_RAW_POST_DATA よりもメモリ消費量が少なく、「multipart/form-data」をサポートしていません。

は file_get_contents() 関数を使用してそのデータを取得できます。内容

1.3. 静的に定義されていないメソッドは「オブジェクト名::メソッド名」の形式で呼び出すことができますか?

は厳密なエラーを生成しますが、コードの実行は続行されます。 「PHP の非静的メソッドの静的呼び出し」を参照してください。この記事では、「呼び出しスコープ」という概念についても説明します。
静的呼び出しは、次のものがあるという意味ではありません:: 静的呼び出しを意味しますが、呼び出しスコープに依存します。 $this ポインタが指すオブジェクトは、このメソッドが呼び出されるときの呼び出しスコープになります。

詳しくは、この記事をお読みください: http://www.cnblogs.com/whoamme/p/3728052.html

1.4 最も誇りに思っている開発作業について簡単に説明してください

1.5。トラフィックの多い Web サイトでは、ページ訪問の統計の問題を解決するためにどのような方法を使用しますか?

a. サーバーが現在の訪問数をサポートできるかどうかを確認します。

b. データベースアクセスを最適化します。 (参照 3.5)

c. 画像のホットリンクなど、リンクへの外部アクセス (ホットリンク) を禁止します。

d. ファイルのダウンロードを制御します。

e. トラフィックを分散するために別のホストを使用します。

f. 閲覧統計ソフトウェアを使用して、訪問数を把握し、ターゲットを絞った最適化を実行します。

1.6.セッションの原理を紹介してください

HTTPはステートレスなので、リクエストが完了すると、クライアントとサーバーは何の関係もなくなり、お互いを知りません。

ただし、一部のニーズ (ログイン状態の維持など) により、サーバーとクライアントは接続を維持する必要があり、セッション ID がこの接続の媒体になります。

ユーザーが初めてサイトにアクセスすると、PHP は session_start() 関数を使用してユーザーのセッション ID を作成します。これは、このユーザーに固有の ID です

。ユーザーの一意の ID。一部のセッション ID は応答ヘッダーの Cookie に保存され、クライアントに送信されます。

このようにして、クライアントはサイトから与えられたセッション ID を取得します。

ユーザーが 2 回目にサイトにアクセスすると、ブラウザはローカルに保存されている Cookie (前回取得したセッション ID を含む) をリクエストとともにサーバーに送信します。

その後、サーバーはそれを受け取ります。リクエストの場合、セッション ID があるかどうかがチェックされ、存在する場合はその中の情報が読み取られ、初回と同様に新しいセッション ファイルが作成されます。

1.7、セッション共有の問題の解決策

a. クライアントの Cookie は、セッション情報がクライアントに書き込まれ、ブラウザを通じて再度サーバーに送信されます。

b. サーバー間のセッション同期にはマスター/スレーブサーバーアーキテクチャが使用され、ユーザーがマスターサーバーにログインすると、セッション情報がスクリプトまたはデーモンプロセスを通じて各スレーブサーバーに転送されます

c。アプリケーション システムがセッション情報を必要とする場合、現在、ほとんどのアプリケーション システムは Memcache を使用してセッションを保存します。

d. このソリューションを使用するときに現在使用されているデータベースは通常 mysql です。

「セッション共有実装ソリューション調査」

1.8、PHPのパフォーマンスをテストするためのツール、およびボトルネックを見つける方法を参照してください。

XHProf (Windows のインストール方法はこちらを参照) は、階層化された PHP パフォーマンス分析ツールです。リクエストの数と、ブロック時間、CPU 時間、メモリ使用量などのさまざまなメトリクスを機能レベルでレポートします。

シンプルな HTML ユーザー インターフェイスを備えており、ブラウザベースのパフォーマンス分析ユーザー インターフェイスは見やすく、コール図も描画できます。パラメータ値を表示します。

1.9. SSO (シングル サインオン) の共通原則を紹介します。

SSO は、統合された認証および認可メカニズムです。1 つのアプリケーションでセキュリティ検証に合格した後は、他のアプリケーションで保護されたリソースにアクセスするときに検証のために再度ログインする必要はありません。

は、ユーザーが一度ログインするだけで、相互に信頼されているすべてのアプリケーション システムにアクセスすることができ、繰り返しログインする必要がないという問題を解決します。

統一認証システムは SSO の前提条件の 1 つです。認証システムの主な機能は、ユーザーのログイン情報をユーザー情報データベースと比較してユーザーのログインを認証することです

認証が成功した後、認証システムは統一認証マーク (チケット) を生成し、それを認証システムに返す必要があります。ユーザー。さらに、認証システムはチケットを検証して、その有効性を判断する必要もあります。

「シングルサインオンSSO」

1.10を参照してください。学習したPHPフレームワークの特徴、主にどのような問題を解決するか、他のフレームワークとの違いについて説明します。

1.11. Cookie を無効にするセッション使用プラン

a. URL を介して値を渡し、URL にセッション ID を追加します (欠点: 純粋に静的なページはサイト全体に存在できません。ページのセッション ID が表示されると次のページに進むことができなくなります)

b. フォームを非表示にして、フォームの非表示のテキスト ボックスにセッション ID を入力し、フォームと一緒に送信します (欠点: < などの直接ジャンプ) ;a> タグは適用されません 非フォームの状況)

c. php.ini ファイルを直接設定し、php.ini ファイルの session.use_trans_sid= 0 を 1 に設定します (Win ではサポートされていないようです)

d. ファイルを使用し、セッション ID をデータベースまたは他のフォームに保存し、クロスページ プロセス中に手動で呼び出します

1.12. PHP キャッシュ テクノロジとは何ですか?

1. フルページの静的キャッシュ。つまり、ユーザーがアクセスすると、ページの部分的なキャッシュを経由せずに、すべてのページが直接アクセスされます。頻繁に変更されないページの部分は静的にキャッシュされますが、頻繁に変更されるブロックはキャッシュされず、最終的に組み立てられて表示されます

3. データ キャッシュ、ID を通じてリクエストされたデータは php ファイルにキャッシュされます。 ID とファイルは対応しており、次回この ID を通じてリクエストを行うときに、php ファイルを直接読み取ります

4. クエリ キャッシュ。これはデータ キャッシュと同様で、クエリ ステートメントに従ってキャッシュします。 5. インメモリキャッシュ、redis、memcache

「PHPの9つの主要なキャッシュ技術まとめ」を参照

1.13. JSON形式のデータの特徴とは

a。データ交換フォーマット。これは ECMAScript のサブセットに基づいています。

b. JSON は完全に言語に依存しないテキスト形式を採用していますが、C 言語ファミリー (C、C++、C#、Java、JavaScript、Perl、Python など) と同様の規則も使用します

cこれらの特性により、JSON は理想的なデータ交換言語になります。人間にとっては読み書きが容易で、機械にとっては解析と生成(ネットワーク伝送速度)が容易です。

d. さまざまな言語では、オブジェクト、レコード、構造、ハッシュ テーブル、キー付きリストなどとして理解されます。値はほとんどの言語で配列として理解されます

「JSON の概要」を参照してください

1.14, isset(), empty () と is_null の違い

isset( ): null および unknown の場合のみ false を返します

empty(): ""、0、"0"、NULL、FALSE、array()、unknown 、すべて true を返します

is_null(): 決定のみnullかどうか、未定義の警告

1.15、MVCの長所と短所

利点:

注意の分散、疎結合、論理的な複雑さ 使用、標準定義

aのみに集中できます。構造全体の 1 つのレイヤーで、複数の開発者間の分業が容易になります

b. 元のレイヤーを新しい実装に簡単に置き換えることができます

c. レイヤー間の依存関係を軽減します

d. 各層でのロジックの再利用と標準化に役立ちます

e 単体テストのサポートがさらに優れています

欠点: 明確なアーキテクチャが提供されます。コードが複雑になるため、小規模なプロジェクトでは実際に開発効率が低下する可能性があります

b. たとえば、データベースへのビジネス アクセスは完全に中間層を経由する必要があります。 c. コントロール層とプレゼンテーション層が近すぎるため、実際の分離や再利用ができない場合があります

d。分類 階層構造、対応する制御層とモデル層に対応するコードを追加する必要がある場合があります

MVC の理解:

MVC は開発プロジェクトの概念です。データ部分(モデルモデル)、ビジネスロジック部分(コントローラーコントローラー)、データの外部表現(ビュービュー)、

の3つの部分に分かれています。

クライアントは、実行中にデータが必要な場合、プロジェクトのコントローラーをリクエストし、コントローラーはモデルからデータを取得し、取得したデータをビューを通じて表示します。

1.16. PHP における一重引用符と二重引用符の違いは何ですか?どちらが速いですか?

一重引用符の方が高速です

一重引用符内のデータは解析されないため(変数および特殊エスケープ文字)、より高速です

二重引用符は、最初にステートメントに変数があるかどうかを検索する必要があります, たとえば、二重引用符内のデータが解析され、変数 ($var) の値が文字列に置き換えられ、特殊なエスケープ文字も特定の単一の単語に解析されます。 "<<<"、

、その機能は、改行形式などを含めて、内部の内容をそのまま出力することです。特殊文字はエスケープする必要はありません。置換

1.17、GBK、GBK2312、BIG5、GB18030の簡単な説明

GB2312は、中国語、日本語、韓国語のすべてを含むGB2312よりも豊富な中国語文字をサポートします。文字

GBK と比較して、一般的には、簡体字中国語は GBK を使用し、繁体字中国語は BIG5 を使用します。インターフェイスと抽象クラスの違いは何ですか?

抽象クラス:

抽象クラスはインスタンス化できず、他のクラスの親クラスとしてのみ使用できるクラスです。抽象クラスはキーワードabstract

抽象クラスと通常のクラスを通じて宣言されます。両者の違いは、抽象クラスに少なくとも 1 つの抽象メソッドが含まれていることです

このメソッドは本質的にサブクラスによってオーバーライドされます

。形式は次のとおりです: 抽象関数 abstractMethod()

サブクラスは抽象クラスを継承し、extends を使用します

インターフェイス:

インターフェイスは、インターフェイス キーワード、およびインターフェイス内のメンバー定数とメソッドを通じて宣言されますpublic である場合、メソッドは public キーワードを記述する必要はありません

インターフェース内のメソッドにはメソッド本体もありません

インターフェース内のメソッドはサブクラスによって実装されるようにも生まれます

インターフェースは多重継承を実装できます。

サブクラスはインターフェースを実装します実装

1.20を使用して、PHPにおける値渡しと参照渡しの違い

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

参照渡し: 関数のスコープ内 値への変更は関数の外側にも反映されます

1.21、PHP5 コンストラクターおよびデストラクター

__construct: この関数はコンストラクターとして扱われますオブジェクト インスタンスを作成するときに使用されます。

__destruct: オブジェクトが破棄される前に、PHP はこの関数を呼び出します。これは、デストラクター

1.22 と呼ばれます。

PHP はマネージド言語です。PHP プログラミングでは、プログラマはメモリ リソースの割り当てと解放を手動で処理する必要がありません。これは、PHP 自体がガベージ コレクション メカニズム (ガベージ コレクション) を実装していることを意味します。リサイクル アルゴリズムは参照カウント方式であり、各 PHP 変数は「zval」と呼ばれる変数コンテナに格納されます。

zval 変数コンテナには、変数の型と値に加えて、2 バイトの追加情報も含まれています。 1 つ目は「is_ref」で、この変数が参照セットに属しているかどうかを識別するために使用されるブール値です。

2 番目の追加バイトは「refcount」で、この zval 変数コンテナーを指す変数 (シンボルとも呼ばれる) の数を表すために使用されます。

ある変数を別の変数に代入すると、参照カウント (refcount) が増加します

変数コンテナに関連付けられた変数がそのスコープを離れるとき (例: 関数の実行が終了するとき)、または関数の呼び出しが行われるとき変数 unset() 関数を呼び出すと、refcount が 1 減ります

refcount が 0 になると変数コンテナが破棄されます

1.23 知っているデザインパターンをいくつか教えてください。

シングルトン パターン: クラスにインスタンスが 1 つだけあることを保証し、それにアクセスするためのグローバル アクセス ポイント (フレームワーク内のデータベース接続など) を提供します

シンプル ファクトリ パターン: オブジェクトを作成するための特定のメソッドがあります。ファクトリクラスは new を直接使用せずにオブジェクトを作成します。たとえば、MySQL、MSSQL などのデータベースを初期化するときに使用されます

戦略モード: 一連のアルゴリズムの場合、各アルゴリズムは共通のインターフェイスを持つ独立したクラスにカプセル化されます。たとえば、個人のホームページにアクセスするときなどです。 、ブラウザーの Different に応じて、異なる表示と操作を提供します

登録モード: ZF フレームワークの Zend_Registry::set など、プログラム内の一連のグローバル オブジェクト (オブジェクト) の秩序あるストレージと管理を提供します

アダプター モード: mysql、mysqli、pdo などのデータ操作など、さまざまなインターフェイスを統合 API インターフェイスに適応させます。アダプター モードを使用してインターフェイスを統合できます

オブザーバー モード: オブジェクト自体が監視可能になります。メソッドを追加することで。監視可能なオブジェクトが変化すると、登録されたオブザーバーにメッセージが送信されます。たとえば、メッセージプッシュ

デコレーターモードを実装するには、元のクラスコードと継承を変更せずにクラスの機能を動的に拡張します。たとえば、フレームワークの各コントローラーファイルは前後のメソッド

イテレーターを提供します。モード: 集合オブジェクト内の各要素に順次アクセスするためのメソッドを提供します。PHP では、Iterator クラスが継承されます。プロトタイプ パターン: 現在のオブジェクトのクローンを作成するために使用されるプロトタイプ インターフェイスを実装します。このモードは、オブジェクトを直接作成するコストが比較的高い場合に使用されます。たとえば、高価なデータベース操作の後にオブジェクトを作成する必要があります。

2. PHP コーディング

2.1. mysqli_real_connect() と mysqli_connect() の違いは何ですか?

a. mysqli_real_connect() には、mysqli_init() によって作成された有効なオブジェクトが必要です

b. mysqli_real_connect() は、接続のさまざまなオプションを設定するために

c. flag パラメータがあります

2.2. ディレクトリとサブディレクトリ内のファイルを走査します

ここではscandir()またはglob()関数を使用できます、オンラインコードの「4つの方法」を紹介する記事です。で 。

2.3. 任意の URL を指定して、その URL に含まれる拡張子を抽出します。たとえば、「http://www.pwstrick.com/test.php?somevar」は、pathinfo()、explode()、basename()、strpos()、および The 5 つのメソッドを使用して .php または php

を返します。 substr()、

の組み合わせでは、正規表現(以前の記事「JavaScriptとPHPの正規表現」を参照してください)とparse_url()を使用します。コードをオンラインで表示します。

2.4. PHP で SQL インジェクションを防ぐ方法は?

プリペアドステートメントとパラメータ化されたクエリを使用します。準備されたステートメントとパラメータはそれぞれ解析のためにデータベース サーバーに送信され、パラメータは通常の文字として扱われます。

この方法により、攻撃者は悪意のある SQL を挿入できなくなります。 このメソッドを実装するには、PDO と MySQLI の 2 つのオプションがあります。オンラインでコードを参照してください。 「PHP で SQL インジェクションを防ぐ方法」

2.5 の include、require、include_once と require_once の違いを参照してください

a include と require は両方とも指定されたファイルを導入します。 _once は、一度だけ導入される、つまり、以前に導入されたものは再度導入されないことを意味します。

b. 読み込み失敗は別の方法で処理されます:

include は、存在しないファイルを導入するときに警告を生成し、スクリプトは実行を継続してインクルードされます。簡単に言えば、彼女を連れて行きましょう!

require は致命的なエラーを引き起こし、このファイルに応じてスクリプトの実行が停止します。簡単に言えば、「彼女が欲しい!」

c. include は条件付き包含関数ですが、require は無条件包含関数です。

d. include() の実行時に参照する必要があるファイルは毎回読み込んで評価する必要があり、require() の実行時に参照する必要があるファイルは 1 回だけ処理されます (実際には、実行中に参照する必要があるファイルは、require() ステートメントを置き換えます)

e。 include には戻り値がありますが、require には戻り値がありません。 「PHP における include require include_once require_once の違い」を参照してください

2.6. PHP マジックメソッドをいくつか記述します

PHP は、__ (アンダースコア 2 つ) で始まるすべてのクラスメソッドをマジックメソッドとして保持します。したがって、クラスメソッドを定義するときは、プレフィックスとして __ を使用しないことをお勧めします。PHP マニュアルを確認してください。

2.7. シェルコマンドを使用してパラメータを PHP に渡す 3 つの方法

Use $argc $argv; use getopt function (); 「PHP 受信パラメータ」

2.8 を参照してください。$a = "/a/b/c/d/e.php"; など、2 つのファイルの相対パスを計算する関数を作成します。 a /b/12/34/c.php";

$b に対する $a の計算された相対パスは "../../12/34/c.php" である必要があります

まず2 つの文字列を「/」で配列に分割し、array_diff_assoc を使用して、まず $a 配列と $b 配列の違いを確認します。次に、$b と $a の差分セットを実行します。コードをオンラインで表示します。

2.9. PHP を使用して、クライアント IP とサーバー IP を表示するコードと Web ページのアドレスを記述します

クライアント IP: $_SERVER["REMOTE_ADDR"]

サーバー IP: $_SERVER[" SERVER_ADDR "]

Web ページのアドレス: $_SERVER["REQUEST_URI"]

現在のスクリプトの実行パス: $_SERVER["SCRIPT_FILENAME"] または __FILE__

現在のスクリプトの名前: $ _SERVER[" PHP_SELF"] または $_SERVER["SERIPT_NAME"]

前のページの URL アドレスへのリンク: $_SERVER["HTTP_REFERER"]

2.10, error_reporting (2047) 何をするか

error_reporting、設定 どのような種類の PHP エラーが報告されるべきか、ここではすべてのエラーを表示することを指します E_ALL

2.11、echo、print()、print_r()、printf()、sprintf()、var_dump()違いは

echo : これは関数ではなくステートメントであり、戻り値がなく、複数の変数値を出力でき、かっこは必要ありません。配列とオブジェクトは出力できません。単純な型 (int、string など) のみを出力できます

print: これは関数ではなくステートメントであり、戻り値は 1 であり、括弧は必要ありません。配列とオブジェクトは出力できません。出力できるのは単純な型 (int、string など) のみです。

print_r: string、int、float、array、object などの複合型を出力できる関数です。配列を出力するとき、配列は構造体

で表され、 print_r($str,true) を介して印刷されます

print_r を出力しないようにし、print_r の処理後に値を返します

printf: これは関数であり、テキストをフォーマットしてから出力します (C 言語を参照)

sprintf:これは printf に似た関数ですが、印刷は行いませんが、書式設定されたテキストを返します。それ以外の場合は printf と同じです。

var_dump: 関数。変数の内容、型、または文字列の内容、型、長さを出力します。デバッグによく使用されます。

2.12, $a = 1; $b=$a++; $b と $x=2 を求めます

2.13、phpで配列をシリアル化および逆シリアル化する関数、utf-8をgbkに変換する関数

serialize、unserialize、iconv("utf-8","gbk",$strs)

2.14。 strlen() と mb_strlen の関数は何ですか?

strlen() は中国語文字列のプレースホルダーを正しく処理できません。gb2312 の場合、結果は中国語の文字数の 2 倍になり、utf8 の場合、結果は中国語の文字数の 3 倍になります。 () は非常に優れています この問題を解決するには、2 番目のパラメータで文字エンコーディング

2.15 を設定します。PHP を使用して複数レベルのディレクトリを作成します

mkdir($path, 0777, true);

2.16、mysql_num_rows () と mysql_affected_rows() の関数と違い

違いは、前者は選択操作に対してのみ有効であるのに対し、後者は選択操作に対してのみ有効であることです。更新、挿入、削除によって影響を受ける行の数

2.17. 考えられるすべての文字列検索アルゴリズムを列挙し、コメント付きで簡単に説明してください

逐次検索、バイナリ検索、ブロック検索、ハッシュ テーブルsearch

2.18. 以下によると、コードは結果を書き込みます

$a = 2;$b = &$a;unset($a);echo$b;


unset ですが指定された変数を解放するために使用されます。これは単なるブレークです。変数名と変数の内容の間のバインディングを開いても、変数の内容が破棄されるわけではありません。したがって、出力結果は「2」になります。

$a = 2;$b = 3;$c = &$a;$c = 2;if(($a=5)>0 || ($b=$a)>0 ) {

$a++;$b++;



}
echo$a.'-'.$b.'-'.$c;


ここの記号「||」に注目してください。 =5 ここで条件が満たされているため、$b=$a を実行する必要はありません。その場合、$b は 3 のままです。

$a++ と $b++ の後、両方の変数は 1 ずつ増えて 6 と 4 になります。また、$c はすでに $a を参照しているため、値も 6 になります。最終的な出力結果は「6-4-6」になります。 「PHPリファレンス(&)の使い方の詳細説明」を参照してください

2.19. マルチスレッドによるファイルの同時読み取りと書き込みの問題を解決する関数を作成します

まず、fopenを使用してファイルを開きます次に flock でロックし、次に fwrite を使用してコンテンツを書き込み、次に flock でロックを解放し、最後に fclose でドキュメントを閉じます。コードをオンラインで表示します。

2.20. セッションの有効期限を設定するメソッド、対応する関数

a. setcookie() は session_id のライフサイクルを直接設定します。

b. session_set_cookie_params() と session_regenerate_id(true) を使用します。これが true の場合、session_id の値を変更し、現在のセッション配列をクリアします。

オンラインでコードを表示します。

2.21、ファイルコンテンツを取得するPHPメソッド、対応する関数

a. file_get_contentsはファイルのコンテンツを取得し(getとpostで取得可能)、ファイル全体が文字列に読み込まれます

b. fopen を使用して URL を開き、get メソッドでコンテンツを取得します (fgets() 関数を使用します)。

c. fsockopen 関数を使用して URL を開きます (get およびpost メソッド)、ヘッダーと本文を含む完全なデータを get メソッドで取得します

d。curl ライブラリを使用してコンテンツを取得する前に、php.ini をチェックして、curl が正しいかどうかを確認する必要があります。拡張機能がオンになりました

2.22. 一般的な PHP 配列関数とは何ですか?

a. 配列操作の基本関数 (array_values、array_keys、array_flip、array_search、array_reverse、in_array、array_key_exists、array_count_values)

b. 配列のセグメント化と充填 (array_slice、array_splice、array_chunk)

c配列とスタック、キュー (array_push、array_pop、array_shift、array_unshift)

d. 配列のソート (sort、asort、ksort)

e. 配列の計算 (array_sum、array_merge、array_diff、array_intersect)

f. その他の配列関数 (array_unique、shuffle)

2.23. ユーザーがテキスト ファイルとバイナリ ファイルをアップロードできるようにする、ファイルをアップロードするコードを作成します。 PHP の認証機能とファイル操作機能を使用すると、誰にアップロードを許可するか、アップロード後のファイルの処理方法を完全に制御できます。

$_FILES を介して HTTP 経由でサーバーにアップロードされたファイルを受信します。アップロードされたコンテンツは $_FILES['xx']['tmp_name'] に保存され、アップロードされたファイルは move_uploaded_file を通じて新しい場所に移動されます。

いくつかのパッケージ化されたアップロード クラスを調べていたときに、文字列内の指定された文字の最後の出現を検索する関数 strrchr を見つけました。この関数を使用してサフィックスを取得します。

2.24. Web ページ上のすべての JS/VBS スクリプトをフィルターする (つまり、タグとその内容を削除する)

/<[^>].*?> を作成します。 *?/し。既製の正規表現の手順については、正規表現オンライン ツールを確認してください。

2.25. PHP を使用して、2006-5-10 22:21:21

echo date('Y-m-d H:i:s', strtotime(') の形式で前日の時刻を出力します。 -1 日')) ;その他の日付/時刻関数を表示します。

2.26. foo() と @foo() の違いは何ですか?

foo() はこの関数を実行し、解釈エラー、構文エラー、実行エラーはページに表示されます

@foo() はこの関数の実行時に上記のエラーメッセージを非表示にします

2.27. sort()、asort()、ksort()、arsort()、rsort() の違いは何ですか?

sort: 関数が終了すると、配列のセルが再配置されます。最低値から最高値に並べ替えます

rsort: 配列を逆順に並べ替えます

asort: 配列を並べ替えてインデックスの関係を維持します

arsort: 配列を逆に並べ替えてインデックスの関係を維持します

ksort: 配列をキー名でソートし、キー名とデータの関連付けを保持します

2.28 変数変数とは何ですか?次のプログラムの入力値は何ですか?

Variable変数は、通常の変数の値をこのVariable変数の変数名として取得するものです。出力値は「ok」です。

$str = 'cd';

$$str = 'ホットドッグ';

$$str = 'ok';echo$cd;

2.29, echo count("abc ") 何が出力されますか?

count() 関数は、配列内のセルの数、またはオブジェクト内の属性の数をカウントします。通常は array() です

オブジェクトの場合、SPL がインストールされている場合は、実装することで count() を呼び出すことができますカウンタブルインターフェイス。このインターフェイスには、count() 関数の戻り値を返すメソッド count() が 1 つだけあります。

パラメーターが配列型または可算インターフェイスを実装するオブジェクトでない場合は、1 が返されます。パラメーターが NULL の場合、結果は 0 になります。

2.30. GDライブラリの機能は何ですか?

GD ライブラリは、画像を処理するための一連の API を提供し、画像を処理したり、画像を生成したりできます。

Web サイトでは、通常、GD ライブラリは、サムネイルの生成、画像への透かしの追加、または Web サイト データに関するレポートの生成に使用されます。

3. データベース

3.1. 監視を通じて、クエリリクエストの 90% がデータの同じ部分に向けられていることが判明したとします。データの一部はデータベース全体の容量の 1% しか占有しません。

a. この 1% のデータは、クエリ作業の 90% をサポートしており、クエリ効率を向上させるためにデータ バッファーにあります。

b. サブライブラリ: パフォーマンスが急速に改善されない場合は、データの 1% に対して nosql キャッシュを実行することを検討できます。

c. 分割テーブル: データベースにクラスター ソリューションがない場合に、一定の水平拡張機能を得ることができ、同時に、複数の物理デバイス間で負荷を分散することもできます。ボトルネック。

d. 条件が許せば、このアプリケーションは、memcached や redis を通じて結果セットの 1% をキャッシュするなど、キャッシュ ソリューションを通じて解決することもできます。

「ChinaUnix Q&A Discussion」および「Dewen Discussion」を参照してください

3.2. MySQL はデータベースとテーブルをどのように分割しますか?

「MySQL サブデータベースとテーブル サブ環境でのグローバル ID 生成スキーム」、「初めてのデータベース サブテーブルのレッスンと経験」、「MySQL サブデータベースとテーブルに関するヒント」を参照してください

3.3、MySQL データベース ストレージ エンジンとは何ですか?

MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV など

3.4. MyISAM と InnoDB の違い

a は、ディスク上の 3 つのファイルに保存されます。 InnoDB のすべてのテーブルは同じデータ ファイル (通常は 2GB) に保存されます

b. ストレージ スペース: MyISAM は圧縮でき、ストレージ スペースが小さくなります。 InnoDB はより多くのメモリとストレージを必要とし、データとインデックスをキャッシュするためにメイン メモリ内に独自の専用バッファ プールを確立します。

c. トランザクション サポート: MyISAM はトランザクション サポートを提供しません。 InnoDB は、トランザクション サポート、外部キー、その他の高度なデータベース機能を提供します。

d. AUTO_INCREMENT: MyISAM は他のフィールドとの結合インデックスを作成できます。 InnoDB には、このフィールドのみを含むインデックスが含まれている必要があります。

e. テーブル ロックの違い: MyISAM はテーブル レベルのロックのみをサポートします。 InnoDB はトランザクションと行レベルのロックをサポートします。

f. フルテキスト インデックス: MyISAM は FULLTEXT タイプのフルテキスト インデックスをサポートします。 InnoDB はそれをサポートしていません。

g. テーブルの主キー: MyISAM では、インデックスと主キーなしでテーブルを存在させることができます。インデックスは行が保存されるアドレスです。 InnoDB が主キーまたは空でない一意のインデックスを設定しない場合、6 バイトの主キー (ユーザーには表示されません) が自動的に生成され、データは主インデックスの一部となり、追加のインデックスによって値が保存されます。プライマリインデックスの。

h. テーブル内の特定の行数: MyISAM はテーブル内の合計行数を保存します。 InnoDB はテーブル内の行の総数を保存しません。ただし、wehre 条件を追加した後、myisam と innodb は同じ方法でそれを処理します。

i. 外部キー: MyISAM はサポートしていません。 InnoDB は

j をサポートします。 CURD 操作: MyISAM 大量の SELECT を実行する場合は、MyISAM の方が適しています。データで頻繁に INSERT または UPDATE が実行される場合は、パフォーマンス上の理由から InnoDB テーブルを使用する必要があります。

「MySQL ストレージ エンジンの MyISAM と InnoDB」を参照してください

3.5 MySQL データ型とは何ですか?

「SQL データ型」を参照してください

3.6. MySQL データベースは、1 日あたり 50,000 アイテム以上の増加が 3 年間続くと予想されます。

a. 効率を向上させるために、適切に設計されたデータベース構造を設計し、部分的なデータの冗長性を許可し、結合クエリを避けるようにしてください。

b. 適切なテーブル フィールドのデータ型とストレージ エンジンを選択し、インデックスを適切に追加します。

c. mysql ライブラリの読み取りと書き込みはマスターとスレーブで分離されています。

d. 通常のテーブルを見つけて、単一テーブル内のデータ量を減らしてクエリ速度を向上させます。

e。 memcached、apc などのキャッシュ メカニズムを追加します。

f. 頻繁に変更されないページには静的ページを生成します。

g. 効率的な SQL の作成

3.7. SQL ステートメントではどのようなセキュリティを考慮する必要がありますか?

主にインジェクションを防ぐため、' " / などの特殊文字をエスケープする、データ送信時の HTML フィルタリングに注意する、--、# などのコメントに注意する、サブクエリと一部の mysql 関数 sleep、load_file などに注意する

3.8. MYSQL が現在時刻を取得するために使用する関数は何ですか?

3.9 のボトルネック。データベース

Memcached+MySQL

アクセス数の増加に伴い、MySQL アーキテクチャを使用するほとんどの Web サイトでデータベースのパフォーマンスの問題が発生し始め、プログラマはデータベースへの負担を軽減するためにキャッシュ テクノロジを広範囲に使用し始めています。データベース構造とインデックスを最適化します。Memcached は、独立した分散キャッシュ サーバーとして、複数の Web サーバーに共有の高性能キャッシュ サービスを提供します。Memcached サーバー上では、ハッシュ アルゴリズムに基づいて複数の Memcached キャッシュ サービスが開発されます。

MySQL のマスターとスレーブの読み取りと書き込みの分離

Memcached は、データベースの読み取り集中を緩和するだけです。 1 つのデータベースで読み取りと書き込みを行うと、データベースに負荷がかかり、読み取りと書き込みの分離を実現するマスター/スレーブ レプリケーション テクノロジが使用され始め、読み取りと書き込みのパフォーマンスと読み取りデータベースのスケーラビリティが向上します

web2.0 が高速で開発を続けると、MySQL メイン データベースの書き込み圧力がボトルネックになり始め、データ量が急増し続けます。MyISAM はテーブル ロックを使用するため、同時実行性が高いと深刻なロックの問題が発生します。 、そして多数の同時実行性の高い MySQL アプリケーションが MyISAM の代わりに InnoDB エンジンを使用し始めました。同時に、書き込みプレッシャーやデータ増大による拡張の問題を軽減するために、サブテーブルやサブデータベースを使用することが一般的になりました。

MySQL のスケーラビリティのボトルネック

大規模なデータ量と高同時実行環境での MySQL アプリケーション開発は、ますます複雑になり、技術的に困難になってきています。サブテーブルとサブデータベースのルールを習得するには経験が必要です。サブデータベースとテーブルを含むサブデータベースは、特定の段階で拡張の問題に直面します。要件にも変更があり、新しいサブライブラリ メソッドが必要になる場合があります。また、MySQL データベースには大きなテキスト フィールドが格納されることが多く、その結果、データベース テーブルが非常に大きくなり、データベースの回復が非常に遅くなり、データベースを迅速に復元することが困難になります。ビッグ データの下では、IO プレッシャーが高く、テーブル構造の変更が困難です。これは、現在 MySQL を使用している開発者がまさに直面している問題です。

3.10. リレーショナルデータベースとは何ですか?

リレーショナルデータベースとは、リレーショナルモデルをサポートするデータベースです。簡単に言えば、リレーショナルモデルとは2次元のテーブルモデルを指します。

リレーショナル データベースは、ユーザーが理解しやすいように行と列の形式でデータを保存します。この一連の行と列をテーブルと呼び、テーブルの集合がデータベースを構成します。

4. Linux の基本

4.1. Linux で現在のシステム負荷情報を表示するいくつかの方法

「Linux でのシステム リソースと負荷の表示、およびパフォーマンスの監視」を参照してください

vim の基本的なショートカット キー

「史上最も完全な Vim ショートカット キー ビットマップ - 初心者から上級者まで」を参照してください

4.3 以下の 10 個のシェル コマンド、top、ps、mv、find、 df、cat、chmod、chgrp、grep、wc

top システムプロセスによって占有されているリソースを確認します。 ps は、詳細なプロセス情報を表示します。

mv は、ファイルまたはディレクトリの名前を変更したり、あるディレクトリから別のディレクトリにファイルを移動したりすることです。

find ファイルまたはディレクトリを検索します。

df ファイルシステムのディスク容量の使用状況を確認します。

cat は、ファイルの内容を表示し、新しいファイルを作成し、ファイルの内容を結合します。

chmodは、ファイルまたはディレクトリのアクセス権限を変更します。

chgrp ファイルまたはディレクトリが属するグループを変更します。

grep は強力なテキスト検索ツールです。

wc は、指定されたファイルの行数やバイト数などのデータ情報をカウントします

4.4. コアファイルとは何ですか?何に使用されますか?

core は、UNIX システムのカーネルです。プログラムのメモリが限界を超えると、オペレーティング システムはプロセスを終了し、さらなる分析のために現在のメモリ状態をコア ファイルにダンプします。

プログラマーはコアファイルを通じて問題を見つけることができます。プログラムがハングしたときの詳細なステータスの説明を記録します。

5. ネットワークの基本

5.1. 次のサービスの目的とデフォルトのポートを書き留めます。ftp、ssh、http、telnet、https

ftp ファイル転送プロトコルは一般的なファイル コピー方法です。デフォルト データ接続ポートの場合は 20、制御接続ポートの場合は 21 です。

Ssh はサーバーに接続して操作を実行します。デフォルトのポート番号は 22 です。

HTTP ハイパーテキスト転送プロトコルは、HTML ページを発行および受信するためのメソッドを提供します。ポート番号は 80 です

Telnet プロトコルは、TCP/IP プロトコル ファミリのメンバーであり、インターネット リモート ログイン サービスの標準プロトコルであり、デフォルトのポートは 23 です

HTTPS は、簡単に言えば、セキュリティを目的とした HTTP チャネルです。 HTTP セキュア バージョンであり、デフォルトのポートは 443

5.2 です。考えられるすべての HTTP 戻りステータス値を書き出し、目的を説明します (例: 404 を返す場合は、ページが見つからないことを意味します)。

200 OK リクエストは成功しました (その後、応答ドキュメントは GET リクエストと POST リクエストですか)

301 Moved Permanently リクエストされたページは新しい URL に移動されました

302 Found リクエストされたページは変更されました新しい URL に一時的に移動しました

304 変更されていません。サーバーは、バッファされた元のドキュメントが引き続き使用できることをクライアントに伝えます

401 未承認 要求されたページにはユーザー名とパスワードが必要です

403 アクセスが禁止されていますリクエストされたページへのアクセスは禁止されています

500 Internal Server Error のため、リクエストは完了しませんでした。サーバーで予期しない状況が発生しました

502 Bad Gateway、リクエストは完了しませんでした。サーバーは上流サーバーから無効な応答を受け取りました

503 Service Unavailable リクエストは完了しませんでした。サーバーが一時的に過負荷またはクラッシュしています

ステータス コードの詳細については、「HTTP ステータス メッセージ」を参照してください

5.3 POST と GET の違いは何ですか?

a. GETはサーバーからデータを取得すること、POSTはサーバーにデータを送信することです

b. GETはURLパラメータ送信を通じてHTTPプロトコルを送信して受信すること、POSTは送信されたエンティティデータですフォーム経由

c. GET によって送信されるデータの量は小さく、2KB を超えることはできません。 POST によって送信されるデータの量は多く、通常はデフォルトでは制限がありません。ただし、理論上、IIS4 の最大サイズは 80KB、IIS5 では 100KB です

d GET のセキュリティは非常に低く、POST のセキュリティは高くなります

5.4 を満たしてください。要件:

1) これは投稿リクエストです

2) ターゲット: http://www.example.com:8080/test

3) POST 変数: username: test pwd: test2 intro : Hello world !

4) には次の COOKIE 情報が含まれています: cur_query: you&me

POST http://www.example.com:8080/test HTTP/1.1

Cookie:cur_query=you&me

username =test&pwd:=test2&intro=Hello world!


その他の属性については、「HTTPヘッダーの詳細な説明」を参照してください

6. サーバーの基本

6.1の利点と欠点の比較。 Apache と Nginx

a. Apache に対する nginx の利点:

軽量で、Apache よりも使用するメモリとリソースが少ない。高度にモジュール化された設計で、モジュールの作成は比較的簡単です

反同時実行性、nginx はリクエストを非同期かつノンブロッキングで処理し、複数の接続 (10,000 レベル) が 1 つのプロセスに対応できますが、Apache はブロックされており、同期マルチプロセス モデルです1 つの接続が 1 つのプロセスに対応します。nginx は、低リソース消費と高いパフォーマンスを維持できます。

b . Apache と nginx の比較 利点:

apache の書き換えは nginx の書き換えよりも強力です。基本的に考えられるすべてのモジュールが見つかります。nginx は比較的バグが少ないです。

c。 Nginx のおかげで、最新の epoll (Linux 2.6 カーネル) および kqueue (freebsd) ネットワーク I/O モデルが使用されますが、Apache は従来の選択モデルを使用します。

現在、Linux 上の Squid と Memcached は、大量の同時アクセスに耐えることができ、どちらも epoll ネットワーク I/O モデルを使用しています。

多数の接続の読み取りと書き込みを処理するには、Apache が採用する選択ネットワーク I/O モデルは非常に非効率です。

「ApacheとNginxのメリットとデメリットの比較」を参照

6.2. cgiとfastcgiの違い

CGI: 以前はWebでよく使われていました。サーバーは通常、静的なリクエストのみを処理します。Web サーバーは、リクエストの内容に基づいて、外部 C プログラム (または Perl スクリプトなど) を実行する新しいプロセスをフォークします。このプロセスは、処理されたデータを Web サーバーに返します。最後に Web サーバーがコンテンツをユーザーに送信すると、フォークされたばかりのプロセスも終了します。 ユーザーが次回動的スクリプトの変更を要求すると、Web サーバーは再び新しいプロセスをフォークし、サイクルが継続します。

Web 組み込みモジュール: その後、より高度な方法が登場し、Web サーバーに Perl インタープリターまたは php インタープリターを組み込むことができます。 つまり、これらのインタープリタはモジュール化されており、Web サーバーは起動時にこれらのインタープリタを起動します。 新しい動的リクエストが受信されると、Web サーバーはこれらの Perl または php スクリプトを独自に解析するため、プロセスを再フォークする必要がなくなり、効率が向上します。

fastcgi: Web サーバーはリクエストを受信すると、プロセスを再フォークしません (このプロセスは Web サーバーの起動時に開始され、終了しないため)。Web サーバーはコンテンツをこのプロセスに直接渡します。 (プロセス間通信ですが、fastcgi は別の方法である tcp 通信を使用します) このプロセスは、リクエストを受信した後に処理し、結果を Web サーバーに返し、最後に終了せずに次のリクエストの到着を待ちます。

「fastcgiとcgiの違いは何ですか」


6.3、MemcachedとRedisの違いを参照してください

a Redisでは、すべてのデータが常にメモリに保存されるわけではありません。 Memcached との比較は、最大の違いの 1 つです。

b. Redis は多くの点でデータベースの特徴を持っており、つまりデータベース システムですが、Memcached は単なる K/V キャッシュです。

c. 100k を超えるデータでは、Memcached のパフォーマンスが Redis よりも高くなります。

d. メモリ使用効率について言えば、単純なキーと値のストレージを使用する場合、Memcached は圧縮を組み合わせているため、キーと値のストレージにハッシュ構造を使用することでメモリ使用率が高くなります。メモリ使用率は Memcached よりも高くなります。もちろん、これはアプリケーションのシナリオとデータの特性によって異なります。

e. データの永続性とデータの同期に関する要件がある場合は、Memcached にはこれら 2 つの機能がないため、Redis を選択することをお勧めします。システムのアップグレードまたは再起動後にキャッシュされたデータが失われないことを願うだけでも、Redis を選択するのが賢明です。

f. 書き込みパフォーマンスの点では Redis と Memcache に大きな違いはありませんが、読み取りパフォーマンス、特にバッチ読み取りパフォーマンスの点では Memcache の方が優れています。

「Redis と Memcached の違い」を参照してください

6.4. PHP の長所と短所は何ですか?

利点:

a. シンプルな構文ですぐに始めることができ、Zend Studio、EclipsePHP Studio などの便利な開発ツールが多数あります。

b.無料で、LAMP (Linux Apache MYSQL、PHP) を素早く構築でき、MYSQL、Oracle、PostgreSQL などの多くの主流データベース システムをサポートしています

c. WebService、XML、AJAX などの現在の主流テクノロジーをサポートします。

d. PHP はすでに非常に成熟したオブジェクト指向システムを備えており、オブジェクト指向開発 (PHP5) をサポートできます。はい、優れた既存のフレームワーク、オープンソース フォーラム、ブログなどが数多くあります。継続的な更新とメンテナンス、コミュニティ サポート、および多くのテクノロジ愛好家の共同の努力により、PHP は広く使用され、多くの有名な Web サイトが作成されました。開発言語としても PHP を使用しています

欠点:

a マルチスレッドのサポートはあまり良くなく、いくつかの単純なシミュレートされたスレッドしか実行できません

b 構文が異なります。 C++ を以前に実行したことがあれば、Java は非常に馴染みのあるものになります。たとえば、変数が定義されていない場合は、

c を使用することもできます。おそらく、経験豊富な PHP プログラマーにとって最も面倒な部分は解釈です。 PHPの動作メカニズムについて説明します。この操作メカニズムにより、各 PHP ページが解釈および実行された後に、関連するすべてのリソースをリサイクルできます。言い換えれば、PHP には言語レベルでオブジェクトをメモリに常駐させる方法がありません。 PHP では、グローバル変数であってもクラスの静的メンバーであっても、すべての変数はページ レベルであり、ページの実行後にクリアされます。 JSP を例に挙げます。JSP では、Java Bean のスコープには、ページ、アプリケーション、セッション、リクエストの 4 つの有効な値があり、それぞれページ、プログラム、セッション、リクエストの 4 つの有効期間に対応します。しかし、PHP では、Page の存続期間は 1 つだけです。

関連する推奨事項:

PHP 面接の主要な質問の共有 (1)

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。