ホームページ > バックエンド開発 > PHPチュートリアル > 面接の質問を通じて PHP の質問と回答を学びます

面接の質問を通じて PHP の質問と回答を学びます

WBOY
リリース: 2016-06-13 12:02:51
オリジナル
950 人が閲覧しました

面接の質問を通じて PHP の質問と回答を学習します

1、http ステータス コードとその説明。

答え: PHP はヘッダー情報を設定することで http ステータス コードを返します。たとえば、404 を返します: header("HTTP/1.1 404 Not Find");

??? HTTP ステータス コードは、Web サーバーの HTTP 応答ステータスを示すために使用される 3 桁のコードです。すべてのステータス コードの最初の桁は、応答の 5 つのステータスのうちの 1 つを表します。

1xx メッセージ 、このタイプのステータス コードは、リクエストが受け入れられました。処理を続行する必要があります。このタイプの応答は一時的な応答であり、ステータス行といくつかのオプションの応答ヘッダー情報のみが含まれ、空白行で終わります。

100クライアント はリクエストの送信を続行する必要があります。この一時応答は、リクエストの一部がサーバーによって受信され、まだ拒否されていないことを クライアント に通知するために使用されます。 クライアント はリクエストの残りを送信し続ける必要があります (SHOULD)。リクエストがすでに完了している場合はこのレスポンスを無視する必要があります。サーバーは、リクエストの完了時に、 クライアント に最終応答を送信しなければなりません (MUST)。

101サーバーは クライアント のリクエストを理解し、アップグレードを渡します。メッセージ ヘッダーは、このリクエストを完了するために別のプロトコルを使用するようにクライアントに通知します。この応答の最後の空行を送信した後、サーバーは Upgrade ヘッダーで定義されたプロトコルに切り替えます。

102WebDAV (RFC 2518) によって拡張されたステータス コードで、処理が続行されることを示します。

2xx 成功。このタイプのステータス コードは、リクエストがサーバーによって正常に受信、理解、受け入れられたことを意味します。

200リクエストは成功し、リクエストで予期された応答ヘッダーまたはデータ本体がこの応答で返されます。

201リクエストが実装され、リクエストされたニーズに基づいて新しいリソースが作成され、その URI が変更されました。 Location ヘッダー情報を付けて返されます。

202リクエストはサーバーによって受け入れられましたが、まだ処理されていません。

203サーバーはリクエストを正常に処理しましたが、返されたエンティティ ヘッダーのメタ情報は、元のサーバーで有効であると決定されたセットではなく、ローカルまたはサードパーティのサードパーティのコピー。

204サーバーはリクエストを正常に処理しましたが、エンティティ コンテンツを返す必要はなく、更新されたメタ情報を返す必要があります。

205サーバーはリクエストを正常に処理しましたが、何も返しませんでした。ただし、204 応答とは異なり、このステータス コードを返す応答では、リクエスターがドキュメント ビューをリセットする必要があります。

206サーバーは GET リクエストの一部を正常に処理しました。 FlashGet または Thunder HTTP ダウンロード ツール に似ていますこれらのタイプの応答は、再開可能なダウンロード を実装したり、大きなドキュメントを複数のダウンロード セグメントに分割して同時にダウンロードしたりするために使用されます。

207WebDAV (RFC 2518) によって拡張されたステータス コード。後続のメッセージ本文が XML メッセージであることを示し、メッセージの数に応じて異なる場合があります。以前のサブリクエスト。一連の独立した応答コードが含まれます。

3xx リダイレクト。このタイプのステータス コードは、 クライアント がリクエストを完了するためにさらなるアクションを実行する必要があることを示します。通常、これらのステータス コードはリダイレクトに使用され、後続のリクエスト アドレス (リダイレクト先) は、この応答の Location フィールドで指定されます。

300要求されたリソースには一連のオプションの応答があり、それぞれに固有のアドレスと ブラウザ ドライバーが含まれます。交渉情報。ユーザーまたはブラウザは、リダイレクト用の優先アドレスを選択できます。

301要求されたリソースは新しい場所に永久に移動されました。このリソースへの今後の参照では、この応答によって返された複数の を使用する必要があります URI の 1 つ。

302要求されたリソースは、別の URI からの要求に一時的に応答します。このようなリダイレクトは一時的なものであるため、クライアントは、今後も元のアドレスにリクエストを送信し続ける必要があります。この応答は、Cache-Control または Expires で指定されている場合にのみキャッシュ可能です。

303現在のリクエストに対応する応答は、別の URI および クライアント は、そのリソースにアクセスするには GET を使用する必要があります。

304 クライアント が条件付き GET を送信した場合、リクエストが許可され、ドキュメントの内容が (最後のアクセス以来、またはリクエストの条件に従って) 変更されていない場合、サーバーはこのステータス コードを返す必要があります。 304応答にはメッセージ本文を含めることが禁止されているため、常にメッセージ ヘッダーの後の最初の空行で終了します。

305要求されたリソースには、指定されたプロキシを通じてアクセスする必要があります。 Location フィールドは、指定されたプロキシが配置されている URI 情報を提供します。受信者は、これを通じて別のリクエストを繰り返し送信する必要があります。エージェントのみが対応するリソースにアクセスできます。オリジンサーバーのみが 305 レスポンスを確立できます。

307要求されたリソースは、別の URI からの要求に一時的に応答します。

4xx リクエスト エラー。このタイプのステータス コードは、クライアント でエラーが発生した可能性があることを表します。サーバーの処理を妨げます。応答が HEAD リクエストでない限り、サーバーは現在のエラー状態とそれが一時的か永続的かを説明するエンティティを返す必要があります(SHOULD)。これらのステータス コードは、あらゆるリクエスト メソッドに適用されます。 ブラウザは、そのようなエラー応答に含まれるエンティティコンテンツをユーザーに表示すべきです(SHOULD)。

400①セマンティクスが正しくないため、現在のリクエストをサーバーが理解できません。 ②リクエストパラメータが間違っています。

401現在のリクエストにはユーザー認証が必要です。

402このステータス コードは、将来のニーズに備えて予約されています。

403サーバーはリクエストを理解しましたが、実行を拒否しました。

404要求されたリソースがサーバー上に見つかりませんでした。

405リクエスト行で指定されたリクエスト メソッドを使用して、対応するリソースをリクエストすることはできません。

406要求されたリソースのコンテンツ特性が要求ヘッダーの条件を満たすことができないため、応答エンティティを生成できません。

407 は、クライアント を除き、401 応答に似ています。 プロキシサーバー上で認証を実行する必要があります。

408リクエストのタイムアウト。

409要求されたリソースの現在の状態と競合するため、要求を完了できません。

410要求されたリソースはサーバー上で利用できなくなり、既知の転送アドレスがありません。

411サーバーは、 Content-Length ヘッダーが定義されていない要求の受け入れを拒否しました。

5xx サーバー エラー ステータス コードは、サーバーがリクエストの処理中にエラーまたは異常な状態に陥ったことを表します。また、サーバーがリクエストを完了できないことを認識している可能性もあります。現在のソフトウェアおよびハードウェア リソースの処理。これが HEAD リクエストでない限り、サーバーは現在のエラーステータスとその状態が一時的か永続的かを説明する説明メッセージエンティティを含めるべきです(SHOULD)。ブラウザは、ユーザーへの現在の応答に含まれるエンティティを表示する必要があります (SHOULD)。

500サーバーで、リクエストの処理を完了できない予期しない状況が発生しました。

501サーバーは、現在のリクエストで必要な機能をサポートしていません。

502 ゲートウェイ またはプロキシとして動作しているサーバーが、上流のサーバーから無効なリクエストを受信しました。リクエストへの応答を実行します。

503サーバーの一時的なメンテナンスまたは過負荷のため、サーバーは現在リクエストを処理できません。

504ゲートウェイまたはプロキシとして機能するサーバーがリクエストを実行しようとすると、上流のサーバー (URI識別されたサーバー (HTTPFTPLDAP) または セカンダリ サーバー (例: DNS) が応答を受信します。

505

サーバーは、リクエストで使用されている HTTP バージョンをサポートしていないか、サポートを拒否しています。

506

透過的コンテンツ ネゴシエーション プロトコル (RFC 2295) によって拡張され、 server : 要求されたネゴシエーション引数リソースは、透過的なコンテンツ ネゴシエーションでそれ自体を使用するように構成されているため、ネゴシエーション プロセスでは適切な焦点ではありません。

507

サーバーはリクエストを完了するために必要なコンテンツを保存できません。この状態は一時的なものと考えられます。 WebDAV (RFC 4918)

509

サーバーは帯域幅制限に達しました。これは正式なステータス コードではありませんが、依然として広く使用されています。

510

リソースを取得するために必要な戦略が満たされていません。

2、Cookie および セッション の違いは、cookieセッション 正常に使用できますか? セッション デメリットは何ですか? 回答: COOKIE はクライアント側に保存され、ユーザーがさまざまな方法で変更できるため、1 つの Cookie に許可される最大値は 3k です。

SESSION はサーバー側に保存されます。これは比較的安全で、サイズ制限はありません。 Cookie を無効にすると、セッションは正常に使用できなくなるため、URL を書き換えて実装する必要があります。

セッションの欠点: サーバー側に保存され、各読み取りはサーバーから読み取られるため、サーバー上のリソースが消費されます。

Session はサーバー側のファイルまたはデータベースに保存されます。ファイルパスは session.save_path で指定されます。 php設定ファイル。

セッションファイルは公開されています。

3. sql注射? 答え: ① ユーザーが送信したコンテンツ (更新、挿入、選択、削除、* およびデータベース操作のその他のキーワードなど) をフィルターします。

??? ②. 関数 addslashes() を使用して、送信されたコンテンツをエスケープします。

③. Php 設定ファイルで magic_quotes_gpc=on をオンにすると、ユーザーがクエリした SQL ステートメントが自動的に変換され、SQL インジェクションを防ぐのに重要な役割を果たします。

④. PHP 設定ファイルで register_globals を off に設定し、グローバル変数の登録をオフにします。

⑤ php 設定ファイルでセーフモードをオンにします。

⑥。 SQL ステートメントを記述するときは一重引用符を使用します。

⑦. データベースのテーブルとフィールドの命名スキルを向上させ、プログラムの特性に従っていくつかの重要なフィールドに推測されにくい名前を付けます。

⑧. エラー メッセージを制御し、エラー メッセージの出力をオフにし、エラー メッセージをログ ファイルに書き込み、エラー メッセージを Web サイトに公開しません。

4.

データベースインデックスの種類は何ですか?インデックスを使用する必要があるのはどのような場合ですか? 答え: ① 主キーインデックス。主キー自体の一意性に基づいて各レコードを一意に識別するために使用されます。したがって、キーは、このレコードによって表されるエンティティによって一意に所有される値、またはデータベースによって生成される一意の値 (自己増加する整数値など) である必要があります。このようにして、以前に存在していたレコードが後で削除されるかどうかに関係なく、各レコードは一意の主キー インデックスを持つことになります。

② 主キーインデックスと同様に、一意のインデックスは重複した値の再構築を防ぎます。ただし、各テーブルは主キー インデックスを 1 つだけ持つことができますが、複数の一意のインデックスを持つことができるという点が異なります。

???? ③総合インデックス。多くの場合、主キーではない、あるいは一意でないフィールドの検索を最適化したいことがあります。 (1) テーブル内の列が多数の選択クエリの焦点となる場合は、単一列の通常のインデックスを使用する必要があります。また、一般的には、INDEX(lastname(5)) のように、指定された列の最初の N 文字で一意性を確保できます。 (2) 指定した列がフェッチクエリでまとめて使用されることが多い場合は、複数列のインデックスを使用することをお勧めします。 Mysql の複数列のインデックス付けアプローチは、左端のプレフィックスと呼ばれる戦略に基づいています。

???? ④全文インデックス。 CHAR、VARCHAR、または TEXT 型に格納されたテキストを効率的に検索する方法を提供します。 Mysql はデフォルトで 4 文字未満のキーワードを無視します。ブール全文検索では、検索クエリをよりきめ細かく制御できるため、結果にどの単語を表示するか、表示しないかを表示して識別できます。

インデックス作成のベスト プラクティス

where 句と order by 句で必要な列にのみインデックスを追加します。インデックスが冗長であると、ハード ディスク領域が不必要に消費され、テーブル情報を変更する際のパフォーマンスが低下します。インデックスを含むテーブルでは、レコードが変更されるたびにインデックスを更新する必要があるため、パフォーマンスが低下します。

INDEX(firstname,lastname) などのインデックスを作成する場合は、mysql がインデックス プレフィックスを検索できるため、INDEX(firstname) を再度作成しないでください。ただし、インデックスが作成されるのはプレフィックスのみであり、この複数列インデックスは姓の検索には使用できないことに注意してください。

NULL 値が格納されないように、インデックスを作成する列には NOT NULL 属性を使用します。

インデックスを使用しないクエリの場合は、オプション --log-long-format を使用してログを記録します。その後、ログ ファイルを検査し、それに応じてクエリを調整できます。

EXPLAIN ステートメントは、テーブルがどのように結合され、どのような順序で結合されるかを示し、MySQL がクエリを実行する方法を決定するのに役立ちます。

5. 値渡しと非参照値渡しの違い、参照渡しを使用する必要がある場合、および非参照渡し値を使用するとき

答え: 値で渡す: 関数内の値への変更は関数の外では無視されます。

値渡し: 関数内の値への変更は、関数の外部にも反映されます。

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

関数内で元の変数の値を変更する必要がある場合は、参照を使用して値を渡します。元の変数の値を変更したくない場合は、を使用します。値渡し。

6. 魔法の方法をいくつか書いて、その効果を説明してください。

答え: __call() このメソッドは、未定義のメソッドを呼び出すときに呼び出されます。ここでの未定義のメソッドには、アクセス許可を持たないメソッドが含まれます。メソッドが存在しない場合は、親クラスに移動してメソッドを見つけ、このクラスの __call() メソッドを呼び出します。このクラスの場合 __call() メソッドがクラスに存在しない場合は、親クラスの __call() メソッドに移動します。

???? __set()未定義のメンバー変数に値を代入するときに自動的に呼び出されるメソッド

???? __get()未定義のメンバー変数の値を取得するときに自動的に呼び出されるメソッド

??? 🎜> 構築メソッド、クラスのインスタンス化時に自動的に呼び出されるメソッド

???__destroy()破壊メソッド、破棄 オブジェクトが

???の場合に自動的に呼び出されるメソッド __unset()未定義の変数に対して unset() が呼び出された場合に自動的に呼び出されるメソッド

???? __isset()未定義の変数に対して isset() メソッドが呼び出されたときに自動的に呼び出されるメソッド

??? ? __clone() PHP 5 のオブジェクト割り当てでは、オブジェクトをコピーする場合、clone メソッドを使用する必要があります。このメソッドを呼び出すと、オブジェクトは自動的に __clone マジック メソッドを呼び出します。オブジェクトが次の場合、コピーには特定の初期化操作が必要ですが、これは __clone メソッドで実装できます。

???? __tostring() メソッドは、echo を使用してオブジェクトを出力する場合など、オブジェクトを文字列に変換するときに自動的に呼び出されます。

???? __autoload()まだロードされていないクラスをインスタンス化する場合、このメソッドはクラス ファイルをロードするために自動的に呼び出されます

???? __sleep()serialize() クラス内にマジック名 __sleep を持つ関数があるかどうかを確認します。その場合、関数はシリアル化の前に実行されます。これはオブジェクトをクリアし、シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返す必要があります。 __sleep を使用する目的は、オブジェクトが持つデータベース接続を閉じたり、保留中のデータを送信したり、同様のクリーンアップ タスクを実行したりすることです。さらに、この機能は、完全に保存する必要のない非常に大きなオブジェクトがある場合に便利です。

???? __wakeup()unserialize() マジック名 __wakeup の関数が存在するかどうかを確認します。この関数は、オブジェクトが持つ可能性のあるリソースが存在する場合、それを再構築できます。 __wakeup を使用する目的は、シリアル化中に失われた可能性のあるデータベース接続を再確立し、他の再初期化タスクを処理することです。

???? __set_state()この静的メソッドは、var_export() が呼び出されたときに呼び出されます。

???? __invoke (PHP 5.3.0 以降で有効) 関数を呼び出してオブジェクトを呼び出そうとすると、__invoke メソッドが自動的に実行されます。と呼ばれる。

???? __callStatic (PHP 5.3.0 以降で有効) __call() マジック メソッドと同様に機能します。__callStatic() はハンドル静的メソッド用です呼び出します。

7、はいMvcってご存知ですか?

答え: MVC は、入力、処理、出力を強制的に分離する設計パターンです。MVC アプリケーションは、モデル、ビュー、コントローラーの 3 つのコア コンポーネントに分割されます。 。彼らはそれぞれ独自のタスクを処理します。

???? ビューは、ユーザーが表示して操作するインターフェイスです。アプリケーションのインターフェイスをどのように扱うかは、ますます困難になってきています。 MVC の大きな利点の 1 つは、アプリケーションのさまざまなビューを処理できることです。データがオンラインで保存されているか、従業員のリストで保存されているかに関係なく、ビューでは実際の処理は発生せず、データを出力してユーザーが操作できるようにする手段としてのみ機能します。

???? モデルは企業データとビジネス ルールを表します。 MVC の 3 つのコンポーネントの中で、モデルには最も多くの処理タスクがあります。

???? コントローラーはユーザー入力を受け入れ、モデルとビューを呼び出してユーザーのニーズを満たします。そのため、Web ページ内のハイパーリンクがクリックされて HTML フォームが送信された場合、コントローラー自体は何も出力したり、処理を実行したりしません。リクエストを受信し、リクエストを処理するためにどのモデル コンポーネントを呼び出すかを決定し、モデル処理によって返されたデータを表示するためにどのビューを使用するかを決定するだけです。

???? MVC を使用する利点: 結合度が低い、再利用性が高い、ライフサイクル コストが低い、開発と展開が迅速である、保守性、拡張性があり、ソフトウェア エンジニアリング管理に役立つ。

???? MVC の欠点: 明確な定義がなく、完全に理解するのは簡単ではありません。 MVC は小規模プロジェクトには適していません。

8. フレームワークにおける単一入口と複数入口とは何ですか、また単一入口のメリットとデメリット

回答: 複数のエントリは、さまざまなファイルにアクセスしてユーザー要求を完了するために使用されます。

???? 単一エントリのみの Web プログラムで、すべてのリクエストはスクリプト ファイルに送信されます。

???? 入り口が 1 つあると、アクセス許可の制御が容易になり、http リクエストのセキュリティ チェックが容易になります。

???? 欠点: URL はあまり美しくなく、特に検索エンジンには優しくありません。答え:trim() は両側のスペースを削除します

??? ltrim() は左側のスペースを削除します ? ???rtrim

() は右側のスペースを削除します

???

は他の文字も削除できます。 rim($str, "#")//両側の "#" 文字を削除します

???str_pad

文字列充填関数

???? strto lower--

文字列の小文字変換

???大文字変換

???? ucfirst--

最初の文字を大文字にする

???

各単語の最初の文字を大文字にします

?

???nl2br--改行出力を実現するには、文字列の n を
タグに置き換えます。

???? htmlspecialchars--HTML タグの形式変更文字列

???

は、認識できない漢字を含むすべての HTML コードを変換します。

?

??? strrev-- 文字列を反転して

???? strlen-- 文字列の長さを検索します

???number_format--

フォーマット番号

???? md5-- 一方向暗号化 (不可逆的 (復号化できない))。

????

???? strcmp-- 全体の比較は同じですか

???? strncmp--指定された長さの比較

??? >大文字と小文字を区別しない比較

??? strnatcmp --

自然な順序で比較

??? ? 類似テキスト --

あいまい比較

?

?? *explode--

文字列分割関数

???? *implode--

文字列結合関数

??? *substr--

文字列

??? *strstr--

文字列

???? strchr --

は、上記の strstr のエイリアスです。

???? 🎜>後ろから文字列検索を行います。

???? *strpos--

文字が以前に出現した位置を検索します (過去から開始します。3 番目のパラメーターは開始位置です)検索の)

???? strrpos--

文字が出現する位置を検索します (後ろから開始します)

???

は文字列 str_replace (置換された文字列、元の文字列、[数量] の文字列置換

) に置き換えられます。 10.

セッションの実装メカニズムを説明してください。 pHp が指定されていない場合 セッション を実装するには、pHp を使用して単純な を設計してください。セッションが達成されました。

答え: セッションは http ステートレス問題に対するより良い解決策です。これは、各 Web サイト訪問者にセッション ID と呼ばれる一意の識別属性を割り当て、この SID を任意の数の番号に関連付けることによって機能します。 http ステートレス動作では、①Cookie の 2 つの方法で実装されます。ユーザーが Web サイトにアクセスすると、サーバーはユーザーの関連情報を Cookie に保存し、ブラウザーはその Cookie を保存します。ユーザーが再度ページをリクエストすると、サーバーはこの情報を取得します。この原則を使用して、SID を Cookie に保存し、必要に応じて SID を取得し、SID を通じてセッションに保存されている関連データを取得します。さらに、Cookie はセッション終了後もクライアントに保存されるため、後続のセッションで読み取ることができます。これは、長期間アクティビティがない場合でも情報を永続化できることを意味します。ただし、Cookie を受け入れるかどうかは最終的にクライアントによって制御され、ユーザーはブラウザの Cookie サポートを無効にすることができるため、これらの可能性に備えておく必要があります。 ②URL書き換え。 SID の伝達に使用される 2 番目の方法は、ユーザーがこれらのローカル接続をクリックするたびに、要求された各ページのローカル URL の SID をインクリメントすることで、SID が自動的に伝達されます。このように、ユーザーが Cookie を無効にしても、Web サイトのセッション処理機能の通常の使用には影響がありません。ただし、このアプローチには欠点もあります。第 1 に、URL の書き換えではセッション間の永続性が保証されません。第 2 に、セッションがタイムアウトしない限り、ユーザーが別のユーザーに URL を送信することを防ぐ方法はありません。受信者のワークステーションに残ります。

11. フォーラムでの無制限分類の実装原則を簡単に説明します。

回答: フォーラム分類のデータベース設計では、主キー ID、親 ID、件名などが存在します。ノードがルートノードの場合、parentIDは0であり、その他の対応するIDは親ノードのIDとなる。プログラム取得のプロセスでは、ツリー クラスを使用する必要があります。このツリー クラスでは、メンバー変数に $data (キーは ID、値はノードのすべてのデータ) が含まれます。キーはparentIDです。 、値は ID、$parent - キーは ID、値は $layerID、キーは ID、値はノードの深さです。データベースからデータを取得するときは、select * from category order byid,parentId desc; という SQL ステートメントを作成し、結果セットをループするプロセスでそれらをツリー クラスに入れます。対応するツリー構造は、このツリー クラスを通じて読み取ることができます。

12. セーフモード 開いた後に制限される場所.

A:safe_mode ディレクティブを有効にすると、共有環境で PHP を使用するときに危険な可能性のある言語機能が制限されます。 safe_mode を on に設定すると有効になり、インテリジェント スクリプトの UID (ユーザー ID) が、制限メカニズムの基礎としてスクリプトがアクセスしようとしているファイルの UID と比較されます。 UID が同じ場合、スクリプトは実行されます。そうでない場合、スクリプトは失敗します。具体的には、セーフ モードが有効になっている場合、制限は次のとおりです:

???すべての入出力関数 (fopen、file など) の使用、require など)これらの関数を呼び出すスクリプトと同じ所有者を持つファイルに制限されます。

???? ユーザーが新しいファイルを作成しようとすると、そのユーザーが所有するディレクトリ内にのみファイルを作成するように制限されます。

???? スクリプトが見つかった場合にのみ、関数 Popen()、system()、または exec() を使用してスクリプトを実行しようとした場合safe_mode_exec_dir 設定で指定されたディレクトリにあるファイルを実行できます。

???? HTTP 検証は、検証スクリプトの所有者の UID が検証レルムに含まれるため、さらに強化されます。さらに、セーフ モードが有効な場合、mysql_connect() を呼び出すファイルの所有者のユーザー名は同じになりません。

13.

Mysql ストレージ エンジンとその違い。

答え: MyISAM テーブルはトランザクションを処理できないため、トランザクション ストレージ エンジンに必要な追加のオーバーヘッドが発生することはありません。MyIASM エンジンは特に次の状況に適しています。 ① 高密度テーブルを選択します。 MyISAM ストレージ エンジンは、トラフィックの多い環境でも大量のデータを非常に迅速にフィルタリングします。 ② 高密度のテーブルを挿入します。 MyISAM の同時挿入機能により、データの選択と挿入を同時に行うことができます。 MyISAM エンジンは、静的、動的、圧縮の 3 つのストレージ形式をサポートしており、MySQL はテーブル構造の特定の状況に基づいて最適な形式のタイプを自動的に適用します。すべてのテーブル列サイズが静的である場合 (つまり、xblog、xTEXT、または varchar データ型が適用できない場合)、MySQL は自動的に静的 MySQL 形式を使用します。テーブルのカラムが (カラムが 1 つしかない場合でも) 動的として定義されている場合 (xBLOG、xTEXT、または varchar を使用)、MySQL は自動的に動的フォーマットを使用します。場合によっては、アプリケーションのライフサイクル全体にわたって読み取り専用のテーブルが作成されることがあります。この場合、myisampack ツールを使用して myisam 圧縮テーブルに変換し、スペースを削減できます。

???? InnoDB テーブル リソースは、他の mysql 設定パラメータと同様に制御できます。InnoDB では行レベルのロックも導入されています。そして外部キー制約。これは次の状況に適しています: 更新集中型のテーブル。特に複数の同時更新リクエストの処理に適しています。InnoDB ストレージ エンジン ルームは、日常的な機密データに必要な機能であるトランザクションをサポートする唯一の標準 MySQL ストレージ エンジンです。自動ディザスタ リカバリおよびその他のエンジン これとは異なり、InnoDB テーブルはディザスタから自動的に回復できますが、MyISAM テーブルもディザスタ後に修復できますが、プロセスははるかに長くなります。

???? メモリストレージ エンジンのトリガー ポイントは、最速の応答時間を実現するために使用される論理ストレージ メディアです。そのため、高いパフォーマンスが提供されますが、mysql デーモンがクラッシュすると、すべてのメモリ データが失われます。メモリの欠点: テーブルは固定長形式で格納されるため、varchar、blog、または text データ型はサポートされません。また、4.1 より前の mysql は列の自動追加をサポートしていません。メモリは、無視してもよい場合、対象データが比較的小さい場合、頻繁にアクセスされる場合に適しています。一時的に、ターゲット データは一時的に必要とされるだけであり、そのライフ サイクル中にすぐに使用できる必要がありますが、メモリ テーブルに保存されているデータが突然失われたとしても、アプリケーション サーバーに重大な悪影響を与えることはありません。データの整合性への長期的な影響はありません。

???? マージ、フェデレーション、アーカイブ、csv

14、xdebug、apc、eAccelerator、Xcache、Zend optの使用体験を紹介します。

答え: デバッガー (つまり、デバッグ ツール) を使用して、PHP プログラムの実行ステータスを追跡、デバッグ、分析できます。 ???? eAccelerator は、最適化された無料の オープンソース

php

アクセラレーターです動的コンテンツ キャッシュにより、php スクリプト のキャッシュ パフォーマンスが向上し、コンパイルされた状態の PHP スクリプトのサーバー オーバーヘッドがほぼ完全に排除されます。また、 スクリプト を最適化して、実行効率を高めます。 PHP プログラム コードの実行効率を 1 ~ 10 倍向上させます。

???? を共有メモリにコピーしてコンパイル プロセスの繰り返しを回避し、バッファ内のコンパイル済みコードを直接使用して速度を向上させることができ、通常はページの生成速度が 2 ~ 5 倍向上し、サーバーの負荷が軽減されます。 .

???? Zend Optimizer (

以降、ZO と呼びます) は、コード最適化メソッドを使用して php アプリケーションの実行速度を向上させます。 。実装の原則は、 コンパイラー (Run-TimeCompiler) を実行して生成されたコードを、最終的に実行される前に最適化することです。

15. 書いたことPHPフレームワークの特徴、主にどのような問題を解決するのか、他のフレームワークとの違い。

答え:

16. 大規模フォーラム/ニュース記事システム/SNS ウェブサイトのパフォーマンス最適化の違いは何ですか?

答え:

17. フォトアルバムアプリケーション : は複数必要ですブラウザでファイルを選択して同時にアップロードしたり、必要に応じて画像をトリミングしたり、圧縮されたパッケージをサーバー側で解凍したりできます。 1 つのファイルを最大 50M までアップロードできます。アップロードプロセス中に進行状況バーが表示されます。画像ごとに 4 つのサイズのサムネイルを生成できます。ビデオ ファイルは、flv に変換する必要があります。 フラッシュ再生します。対象となるさまざまなタイプのオープンソース ソフトウェアとその簡単な使用法について説明します。

答え: jquery Uploadify、ffmpeg、mplayer

18、最もよく知っている SERVER 端末モデルをいくつか描画します (形式は重要ではありません。実際に作成してみてください)図面は明確であり、アイデアを説明します) はい)

答え:

19. PHP のガベージ コレクション メカニズムとは何ですか?

答え: スクリプト言語として、PHP はページの終了時に変数によって占有されていたメモリを解放します。 PHP スレッドが終了すると、現在占有されているすべてのメモリ領域が破棄され、現在のプログラム内のすべてのオブジェクトが同時に破棄されます。通常、GC プロセスはセッションごとに実行を開始します。gc の目的は、セッション ファイルが期限切れになった後、セッション ファイルを自動的に破棄して削除することです。PHP では、このオブジェクトを指す変数が存在しない場合、オブジェクトはガベージになります。 PHP はこれをメモリ内で破棄します。これは、メモリのオーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。 これらの関数の実行は、リサイクルの役割も果たすことができます。 __destruct /unset/mysql_close /fclose PHP には、セッション session.gc_maxlifetime の明確な gc 処理時間設定があります。ガベージがある場合、それは、プログラム全体が、フレームワーク 同一ファイルによる非シングルウェアモード などしたがって、それが出てきたら、必要に応じて _once 参照を使用し、クラスを宣言するときはシングルトン モードを使用します。簡略化されたロジックなどもあります。また、PHP にメモリを管理させ、ガベージ管理を独自に実行させたい場合も同様です。ふふ。デストラクタについては、PHP ではまだできないようです。ANDI 氏の本の中ではっきりと書かれています。それは任意であり、否定することはできません。一般に、メモリ管理はデスクトップ プログラムでより考慮されます。

20 PHP スクリプト実行効率 (通常はスクリプト実行時間) とデータベース SQL 効率 (通常データベース 時刻)、 をクエリし、スクリプトの実行と場所を特定して分析します。データベースクエリのボトルネック?

答え: 1.PHP実行時間:

$begin= microtime(true);//プログラムの実行が開始された時刻を取得します

// ここに何らかのコード 実行されるコード

$stop=microtime(true);//プログラム実行終了時刻を取得

list($m0, $s0)=explode("",$begin);

list($m1,$s1)=explode("",$stop);

$runtime=($s1 $m1-$s0-$m0)*1000;

echo'
現在スクリプト実行時間: '.$etime-$stime.'マイクロ秒';

?

2. SQL 実行時間 ( は実際には上記の と同じです):

$begin=microtime();

mysql_query($sql);

$stop= microtime();

list($m0,$s0)=explode("",$begin);

list($m1 ,$s1)=explode("",$stop);

$runtime=round(($s1 $m1-$s0-$m0)*1000 ,4);

echo'
現在のスクリプト実行時間: '.$runtime.'ms';

22sql ステートメントは次のとおりです。セキュリティにはどのような考慮事項がありますか?

答え: は主にインジェクションを防止し、 ' " / 意味は基本的に半分以上成功です データを送信するときは、html フィルタリングに注意し、--、などのコメントに注意してください。 #、および一部の mysql関数sleep、load_file などに注意してください。 >

23、簡単な説明mysql、インデックス、主キー、一意のインデックス、結合インデックス は (読み取りと書き込みの両方の側面から) データベースのパフォーマンスにどのような影響を与えますか? 🎜> 回答: 主キーデータベース レコードの一意性を識別するためです。重複レコードは許可されず、キー値も空にすることはできません。 では 1 つだけが許可されます。

主キーを使用すると、主キーが自動的に作成されます。また、主キー以外のインデックスを作成することもできます。

インデックスは、クエリの速度を向上させることができます。これは、完全なテーブル スキャンを必要とせずに、目的の結果を迅速にクエリできます。主キー インデックスの

主キーは複数のフィールドで構成されて複合主キーを形成することもでき、主キーは唯一のインデックスである必要があります。 🎜>一意のインデックスは、インデックス値が一意であり、テーブルに複数の一意のインデックス

24

データベース ストレージが

mysql

を使用しているとします。ユーザー数は

1000

10,000、記事の総数は 10 10 億回、毎日少なくとも 10 回の更新があります、毎日のアクセス数は 5000 百万、データベースに対する読み取りおよび書き込み操作の割合は を超えています10

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