PHPジュニアクラシック面接の質問まとめ(前編)
17. isset、empty、is_nullの違いで変数が定義されているか空かが決まります
变量存在返回ture,否则返回false
变量定义不赋值返回false
unset一个变量,返回false
变量赋值为null,返回false
empty: 変数の値が空かどうかを判断しますfalse に変換できるものはすべて空です。空の場合は true を返し、そうでない場合は false を返します。
"",0,"0",NULL,FALSE都认为为空,返回true
没有任何属性的对象都认为是空
is_null: 受信値 (値、変数、
式
) が null かどうかを確認します 定义了,但是赋值为Null
定义了,但是没有赋值
unset一个变量
18、フロントエンド デバッグ ツール
Firefox の firebug Chrome の開発ツール-
エメット-
JSON 形式検証ツール 19.
mysql
のインデックス、主キー、一意のインデックス、結合インデックスの違いと、それらがデータベースのパフォーマンス (読み取りと書き込みの両方から) に与える影響について簡単に説明します。側面) (新浪技術部) インデックスは特別な種類のファイルです (InnoDB データ テーブルのインデックスはテーブル スペースのコンポーネントです)。これらには、データ テーブル内のすべてのレコードへの参照ポインターが含まれています。
通常のインデックス (キーワード KEY または INDEX で定義されたインデックス) の唯一のタスクは、データへのアクセスを高速化することです。
通常のインデックスでは、インデックス付きデータ列に重複した値を含めることができます。特定のデータ列に互いに異なる値のみが含まれると判断できる場合は、このデータ列のインデックスを作成するときに、キーワード UNIQUE を使用して一意のインデックスとして定義する必要があります。言い換えれば、一意のインデックスによりデータ レコードの一意性が保証されます。
主キーは特別な一意のインデックスです。主キー インデックスはテーブル内に 1 つだけ定義でき、レコードを一意に識別するために使用され、キーワード PRIMARY KEY を使用して作成されます。
インデックスは、結合インデックスである INDEX (columnA、columnB) インデックスなど、複数のデータ列をカバーできます。
インデックスを使用するとデータクエリの速度が大幅に向上しますが、テーブルの挿入、削除、更新の速度は遅くなります。これらの書き込み操作を実行するときにインデックスファイルを操作する必要があるためです。
20. データベースのトランザクションとは何ですか?
トランザクションとは、順序付けられたデータベース操作の集合です。グループ内のすべての操作が成功した場合、トランザクションは成功したとみなされます。1 つの操作だけが失敗した場合でも、トランザクションは成功とは言えません。すべての操作が完了すると、トランザクションはコミットされ、その変更は他のすべてのデータベース プロセスに適用されます。操作が失敗した場合、トランザクションはロールバックされ、トランザクション内のすべての操作の効果はキャンセルされます。 ACID の 4 つの主な特徴は、原子性、分離性、一貫性、耐久性です。
21. XSS 攻撃について理解していますか?それを防ぐにはどうすればよいでしょうか?
XSS はクロスサイト スクリプティング攻撃であり、最初にクロスサイト スクリプティングの脆弱性を利用して攻撃者が作成したスクリプトを特権モードで実行し、次に安全でない Activex コントロールを使用して悪意のある動作を実行します。
htmlspecialchars() 関数を使用して、送信されたコンテンツをフィルターし、文字列内の特殊記号を具体化します。
22. SQL インジェクションの脆弱性の原因は何ですか?それを防ぐにはどうすればよいでしょうか?
SQL インジェクションの原因: プログラム開発プロセス中に、SQL ステートメントの標準的な記述と
特殊文字
のフィルタリングに注意を払わなかったために、クライアントがグローバル変数 POST および GET を介して一部の SQL ステートメントを送信できるようになりました。通常の実行の場合。 SQL インジェクションを防ぐ方法:
構成ファイルで magic_quotes_gpc と magic_quotes_runtime 設定をオンにする SQL ステートメントを作成するときに - addslashes
を使用して SQL ステートメントを変換する
double を省略しないようにする書くときの引用SQL ステートメントとアポストロフィ。 SQL ステートメント内のいくつかのキーワードをフィルターで除外します: update、insert、delete、select、*。 データベースのテーブルとフィールドの命名スキルを向上させ、プログラムの特性に従って、推測されにくいようにいくつかの重要なフィールドに名前を付けます。 Php設定ファイルでregister_globalsをoffに設定し、グローバル変数の登録をオフにします エラーメッセージ- を制御し、ブラウザにエラーメッセージを出力しないようにし、エラーメッセージをログファイルに書き込みます。
23. PHP Web サイトの主な攻撃方法は何ですか?
コマンドインジェクション
-
evalインジェクション
-
スクリプト挿入
-
クロスサイトスクリプティング(XSS)
- SQLインジェクション攻撃(SQLインジェクション)
- クロスサイトリクエスト
偽造 (CSRF) )-
セッションハイジャック(セッションハイジャック)
-
セッション固定攻撃(セッション固定)
- HTTPレスポンス分割
-
ファイルアップロード攻撃
-
ディレクトリトラバーサル
-
リモートインクルージョン
-
動的変数 評価-
URL攻撃
-
スプーフィングフォーム
送信-
HTTPリクエストスプーフィング攻撃(スプーフィングHTTPリクエスト)
24. フレームワークにおける単一入口と複数入口とは何ですか? 単一入口の長所と短所は何ですか?
Duokou は、さまざまなファイルにアクセスすることでユーザーのリクエストを完了します。単一エントリのみの Web プログラムは、すべてのリクエストをスクリプト ファイルに送信します。
単一エントリにより、アクセス許可の制御が容易になり、http リクエストのセキュリティ チェックが容易になります。
短所: URL はあまり美しくなく、特に検索エンジンにとってはフレンドリーではありません。
25.
a) インデックス作成の目的は何ですか?
- データテーブル内の特定の情報に素早くアクセスし、取得速度を向上させます
- 一意のインデックスを作成して、データベーステーブル内のデータの各行の一意性を確保します。
- テーブル間の接続を高速化します
- データの取得にグループ化句と並べ替え句を使用すると、クエリでのグループ化と並べ替えの時間を大幅に短縮できます
b)、データベース システムに対するインデックスの影響マイナスの影響は何ですか?
マイナスの影響: インデックスの作成と維持には時間がかかり、データ量が増えるとその時間も長くなります。インデックスは、テーブルがデータ領域を占有するだけでなく、各インデックスも物理領域を占有する必要があります。物理スペース ; テーブルが追加、削除、変更されると、インデックスを動的に維持する必要があるため、データのメンテナンス速度が低下します。
c) データテーブルのインデックス付けの原則は何ですか?
- 最も頻繁に使用されるフィールドにインデックスを作成して、
クエリ範囲を狭めます。
- 並べ替える必要がある頻繁に使用されるフィールドにインデックスを作成します
d)、どのような状況でインデックスを作成することが不適切ですか?
- クエリにほとんど関与しない列や、重複する値が多く含まれる列にインデックスを作成するのは適切ではありません。
- 一部の特殊な
データ型では、テキストフィールド(テキスト)などのインデックスの作成には適していません。
26.
MySQL データベースの MyISAM と InnoDB の違いを簡単に説明します
他のデータベースと区別する最も重要な機能は、プラグイン テーブル ストレージ エンジンです。ストレージ エンジンはデータベースではなくテーブルに基づいていることに注意してください。
InnoDB と MyISAM の違い:
InnoDB ストレージ エンジン: 主に OLTP (オンライン トランザクション処理、オンライン トランザクション処理) アプリケーション向けで、ACID トランザクションを完全にサポートする最初のストレージ エンジンです (トランザクションをサポートするのは BDB が最初です)ストレージ エンジン、開発は停止されました)。
機能:
行ロック設計、外部キーのサポート。 Oracleスタイルの一貫した非ロック読み取りをサポート(つまり、デフォルトでは読み取り操作はロックを生成しません)。データは論理テーブルスペース内にあり、InnoDB 自体によって管理されます。 MySQL 4.1 バージョン以降、各 InnoDB ストレージ エンジン テーブルは独立した ibd ファイルに保存できるようになりました。InnoDB は MVCC (マルチバージョン同時実行制御: 読み取りは書き込みをブロックせず、書き込みは読み取りをブロックしない) を使用して高いパフォーマンスを実現します。同時実行性、SQL 標準の 4 つの分離レベル (デフォルトは REPEATABLE レベル) を実装します。 InnoDB は、挿入バッファー (挿入バッファー)、二重書き込み (二重書き込み)、自動適応ハッシュ インデックス、先読みなども提供します。 InnoDB はクラスター化アプローチを使用してデータをテーブルに保存し、各オブジェクトは主キーの順序で保存されます (テーブルの作成時に明示的に主キーが指定されていない場合、 InnoDB は行ごとに 6 バイトの ROWID を生成し、それを主キーとして使用します); InnoDB テーブルには 3 つの隠しフィールドがあります: 上記の 6 バイトの DB_ROW_ID に加えて、6 バイトの DB_TX_ID もあります。 (トランザクション ID) および 7 バイトの DB_ROLL_PTR (対応するロールバック セグメントのアドレスを指します)。これは、innodb モニターを通じて確認できます。 特徴:
-
トランザクションはサポートしませんが、テーブルとフルテキストインデックスをサポートします。動作速度は高速です。
-
MyISAM ストレージ エンジン テーブルは MYD と MYI で構成され、MYD はデータ ファイルの保存に使用され、MYI はインデックス ファイルの保存に使用されます。 MySQL データベースはインデックス ファイルのみをキャッシュし、データ ファイルのキャッシュはオペレーティング システム自体に委ねられます。
MySQL 5.0 バージョン以降、MyISAM はデフォルトで 256T の単一テーブル データをサポートします。
27. MySQLの外部結合、内部結合、自己結合の違いを説明します
まず、クロス結合とは:クロス結合とは、デカルト積とも呼ばれ、テーブルを直接結合することを指します。任意の条件を使用すると、テーブル内のすべてのレコードが他のテーブルのすべてのレコードと一致します。
内部結合は、条件を満たすレコードが特定の条件に従って除外されるクロス結合であり、条件を満たさないレコードは結果セットに表示されません。一致する行のみを接続します。
外部結合 結果セットには、結合条件を満たす行が含まれるだけでなく、左テーブル、右テーブル、または両方のテーブルのすべてのデータ行も含まれます。これら 3 つのケースは、順に左外部結合および右外部結合と呼ばれます。結合、および完全外部結合。
左外部結合、左結合とも呼ばれます。左側のテーブルがメインテーブルです。左側のテーブルのすべてのレコードが結果セットに表示されます。右側のテーブルに一致しないレコードについては、右側の対応するフィールドが表示されます。まだ表示する必要がある値は NULL で埋められます。右外部結合 (右結合とも呼ばれます) は、右側のテーブルがメイン テーブルであり、右側のテーブル内のすべてのレコードが結果セットに表示されます。左結合と右結合は交換可能であり、MySQL は現在完全外部結合をサポートしていません。
28. 3 つ以上の MySQL データベース ストレージ エンジンの名前を書き留めます (ヒント: 大文字と小文字は区別しません)
MyISAM、InnoDB、BDB (BerkeleyDB)、Merge、Memory (Heap)、Example、Federated、
Archive、CSV、ブラックホール、MaxDB、および十数のエンジン
29.
オブジェクト指向はプログラムの
設計パターンであり、プログラムの再利用性を向上させ、プログラムの構造をより明確にするのに役立ちます。 主な機能は、カプセル化、継承、ポリモーフィズムです。 5 つの基本原則
: 単一責任の原則、置換の原則、インターフェイスの分離の原則。 30.
静的ルーティング
ルーティングとは何ですか? 動的ルーティングとは何ですか?そしてその特徴は何ですか? 参考回答:
静的ルーティングとは、設計・構築されたルーティングテーブルによって指定される経路です。システム管理者。ゲートウェイの数が限られており、ネットワーク トポロジが頻繁に変更されないネットワークに適しています。欠点は、ネットワーク状況の変化に動的に適応できないことです。ネットワーク管理者はルーティング テーブルを変更する必要があります。
動的ルーティングは、ルーティング プロトコルによって動的に構築されます。ルーティング プロトコルは、独自のルーティング情報を交換することで、ルーティング テーブルの内容をリアルタイムに更新します。動的ルーティングは、ネットワークのトポロジーを自動的に学習し、ルーティング テーブルを更新します。欠点は、ブロードキャスト更新情報のルーティングが大量のネットワーク帯域幅を占有することです。
31. Memcache キャッシュを使用したことがありますか?その動作原理を簡単に説明できますか?
Memcahce は、ハッシュ テーブルを使用してすべてのデータをメモリに保存します。各データはキーと値で構成され、特定の値にアクセスする場合は、最初に値を見つけてから結果を返します。
Memcahce は LRU アルゴリズムを使用して、期限切れのデータを徐々に消去します。
32. 人気のある Ajax フレームワークを挙げてください。 Ajaxの実装原理とは何なのか、またAjaxにおいてjsonはどのような役割を果たしているのかを説明してください。
人気のある Ajax フレームワークには、
jQuery
、Prototype、Dojo、MooTools などがあります。 Ajax の動作原理は、あるページの指定された場所に別のページのすべての出力コンテンツをロードできるということです。これにより、静的ページはデータベースから返されたデータ情報も取得できます。したがって、Ajax テクノロジを使用すると、ページ全体を更新せずに静的 Web ページがサーバーと通信できるようになり、ユーザーの待ち時間が短縮され、それによってネットワーク トラフィックが削減され、顧客エクスペリエンスの使いやすさが向上します。
Ajaxを使用する場合、データ送信、つまりサーバーからクライアントにデータを返す際に、サーバーとクライアントは異なるスクリプト言語を使用してデータを処理するため、共通のデータ形式である
XML
とjsonが必要になります。最も一般的に使用される 2 つは、json のほうが XML よりも単純です。 33. Myql のトランザクション ロールバック メカニズムの概要
トランザクションは、ユーザーによって定義された一連の操作であり、トランザクションの分割不可能な単位です。データベース上で完了した更新操作は元に戻されます。
データベース内の2つの異なるテーブルを同時に変更したい場合、それらがトランザクションでない場合、最初のテーブルを変更すると、2番目のテーブルの変更処理中に例外が発生して変更できない場合があります。今回は 2 番目のテーブルのみが未変更の状態にあり、最初のテーブルは変更されています。そして、トランザクションとして設定すると、1番目のテーブルが変更され、2番目のテーブルが異常に変更されて変更できなくなった場合、1番目のテーブルと2番目のテーブルが未変更の状態に戻ります。これをトランザクションのロールバックと呼びます。
以上が最新の古典的な PHP 面接の質問のまとめ (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。