Baidu PHP 電話面接に関する 10 の質問
[この記事の出典] http://www.16nn.com/?p=309
要約すると、百度の面接、特に一次面接で最も重要なことは基礎、基本、基礎です。幅広いトピックが取り上げられていますが、それらはすべてプログラマが知っておくべき、知っておくべき内容です。戻って再度情報を探し、次の質問をしました。回答は参考用です。
1. PHP の整数オーバーフロー問題とは何ですか
2. OOP を理解する方法
3. デザインパターンと MVC についての理解
4. HTTP プロトコル 1.0 と 1.1 の違い、および HTTP プロトコルについて簡単に説明します
5. Apache の書き換えメカニズムと PHP フレームワークの URI ルーティング メカニズムについて簡単に説明します
6. MySQL のインデックス作成メカニズムと複合インデックスを使用するための原則
7. MySQL テーブルの種類と MyISAM と InnoDB の違い
8. クイックソートアルゴリズムを簡単に説明します
9. awk、sed、sort の基本的な使用法 (例で検討)
10. Memcached と redis の使用と理解
================================================
【1】PHPの整数オーバーフロー問題とは
PHP の整数のワード長はプラットフォームに関連しており、最大の整数は 20 億を超えますが、実際には 2 の 31 乗になります。符号なし整数をサポートします。 数値が整数の範囲を超える場合、自動的に浮動小数点として解釈されます。実行された演算の結果が整数の範囲を超える場合は、浮動小数点数も返されます。 (Java と C の整数オーバーフローについてはどうですか?)
【2】OOPを理解する方法
OOP (オブジェクト指向プログラミング) には、継承、カプセル化、ポリモーフィズムという 3 つの側面が含まれています。最も基本的なのは抽象化です。
継承、つまり拡張性は、既存の親クラスの機能をサブクラスを通じて拡張します。
カプセル化では、外部がオブジェクトの内部データに自由にアクセスできないことが必要です。つまり、クラス内の特定の実装はカプセル化されており、その動作と方法を知っている限り、ユーザーは特定の内部実装を知る必要はありません。それを使ってください。
ポリモーフィズムはクラスの抽象化およびインターフェイスであり、同じクラスが複数の種類のオブジェクトを処理できる機能です。
実際には、私たちが目にするものはすべてオブジェクトと見なすことができ、クラスへのさらなる抽象化を通じて、クラスは多くの同様のオブジェクトに進化することができます。簡単な例を挙げると、私たちが目にする家を ROOM クラスに抽象化します。これには、基本的なドア、窓、テーブルなどのオブジェクトと、人の出入りなどの機能が含まれます。 現在、ROOM クラスを Classroom として継承しています。これには、ドア、大きな窓、テーブルと椅子があり、教師とクラスメートが授業に参加できるのは白と黒の教壇のみです。ここで、この Classroom クラスを Classroom_621 オブジェクトとしてインスタンス化します。これには、2 つのドア、4 つの大きな窓、30 セットのテーブルと椅子が含まれており、一部の学生は毛沢東の授業を受けています。
【3】デザインパターンとMVCについての理解
モデル-ビュー-コントローラー、モデル、ビュー、コントローラー。MVC について考えるときは、JAVA を思い浮かべるでしょう。JAVA は、Smalltalk で最初に登場した、ビューとデータを分離することだからです。モデルが異なるため、異なるプログラムで異なる表示を行うことができます。
モデル、つまりプログラマーによって作成された機能、アルゴリズム、データ モデル。これをシステム ビジネス ロジック層と呼びます。
ビュー、つまりフロントエンドのグラフィカル インターフェイス。ユーザーに表示されます。
コントローラーは主にリクエストの処理と転送を担当します。
デザイン パターンは、実際には、コード設計経験の要約と分類です。デザイン パターンは、主にオブジェクト指向プログラミングで使用される 23 のデザイン パターンを含む、初期の GoF で説明されています。いくつかの設計原則に従います: オープンとクローズの原則、単一責任の原則、リスコフ置換原則、依存性注入、インターフェース分離、ディミット原則、継承よりも合成を優先するなど。これには、創造モデル、構造モデル、動作モデルの 3 つのカテゴリが含まれます。
【4】HTTPプロトコル1.0と1.1の違いと、HTTPプロトコルについて簡単に説明します
HTTP、ハイパーテキスト転送プロトコル。ブラウザとサーバー間の通信ルールを定義します。 HTTP プロトコルは、TCP/IP の TCP プロトコルに基づいており、その機能には、C/S モード、シンプルなリクエスト (GET/POST/HEAD)、およびあらゆるものを送信できることが含まれます。データのタイプ (HTML、XML、JSON、カスタムなど)、接続なし (接続ごとに 1 つのリクエストのみが処理され、リクエストが発行されてから 200 ステータスを受信するまで接続は切断されます)、ステートレス。
HTTP プロトコルには主に、応答メッセージの形式、要求メッセージの形式、およびステータス コードのナレッジ ポイントが含まれます。
【応答メッセージのフォーマット】
HTTP/1.1 200 0K
コネクロン:閉じる
日付: 2005 年 10 月 13 日木曜日 03:17:33 GMT
サーバー: Apache/2.0.54 (Unix)
最終更新日:1998 年 6 月 22 日月曜日 09;23;24 GMT
内容―長さ:682リットル
コンテンツ—タイプ:text/html
応答メッセージは、初期ステータス行、6 つのヘッダー行、および要求されたオブジェクト自体を含む依存関係の 3 つの部分に分かれています。ステータス行には、プロトコル バージョン フィールド、ステータス コード フィールド、および理由フレーズ フィールドの 3 つのフィールドがあります。
【リクエストメッセージフォーマット】
GET /somedir/page.html HTTP/1.1
ホスト:www.chinaitlab.com
接続:閉じる
ユーザーエージェント:Mozilla/4.0
受け入れ言語:zh-cn
(余分な復帰と改行文字)
リクエストメッセージの最初の行はリクエストラインと呼ばれ、それ以降の行はヘッダーラインと呼ばれます。リクエストラインには、メソッドフィールド、URL フィールド、HTTP バージョンフィールドの 3 つのフィールドがあります。
[ステータスコード] http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html
を参照してください。
1xx メッセージ
2xx 成功
3xx リダイレクト
4xx リクエスト エラー
5xx サーバー エラー
200 OK。リクエストは成功し、リクエストで予期された応答ヘッダーまたはデータ本体がこの応答とともに返されます。
301 永久に移動されました。要求された Web ページが新しい場所に完全に移動されたことを示します
302 件見つかりました。一時的にジャンプしたときにページが戻る状態を示します。
303 未変更。クライアントのキャッシュされたリソースは最新であるため、クライアントはキャッシュを使用する必要があります。
403 禁止。リクエストはサーバーによって拒否されました。
404 見つかりません。これは、サーバーが要求された Web ページを見つけることができないことを意味します。サーバー上に存在しない Web ページは、HTTP ステータス コードを返すことがよくあります。
500 内部サーバー エラー。
503 サービスは利用できません。現在サーバーはリクエストを処理できませんが、サービスはやがて復元されます。
504 ゲートウェイ タイムアウト。ステータス 408 と似ていますが、別のサーバーからの応答を待っている間にタイムアウトになったゲートウェイまたはプロキシからの応答が返されます。
【5】Apacheの書き換え機構とPHPフレームワークのURIルーティング機構について簡単に説明します
1) URL 書き換えとは、実際には、ユーザーがブラウザーを通じてリクエストした URL がバックエンドに送信され、Apache が事前に設定された書き換えルールに従ってリクエストを実際のリソース パスにポイントすることを意味します。実際のパスを再形成してユーザーに提供するというトリックですが、問題は、それを行うことに何の意味があるのかということです。
1. SEO の側面。検索エンジンの要求を満たすために、動的 URL を静的にしてください。
2. アクセス制御。たとえば、ルールを書き換えた後、クライアントがバックグラウンド プログラムの種類を判断することは困難です。
3. URL リダイレクト。 Web サイトがドメイン名を変更するか、エイリアス URL を追加する場合、ルールを通じてアクセスする URL を簡単に指定できます。
http://httpd.apache.org/docs/current/mod/mod_rewrite.html
mod_rewrite は正規表現を使用して、受信リクエストの URL を動的に変更します。 URL をファイル システム パスにマッピングしたり、ある URL を別の URL にマッピングしたりできます。 URL を操作するために無制限のルールが使用され、各ルールには無制限の追加条件を含めることができます。サーバー変数、環境変数、HTTP ヘッダー、タイムスタンプなど、さまざまな方法で検出できます。
mod_rewrite は、path-info 部分を含む URL パス全体を操作します。書き換えルールは http.conf または .htaccess で設定できます。書き換えルールによって生成されるパスには、リクエスト文字列、内部サブルーチン処理、外部リクエストのリダイレクト、または内部プロキシの侵入が含まれる場合があります。
2) PHP フレームワークの URI ルーティング メカニズムは Apache の書き換えに似ており、通常はワイルドカードと通常のルールが含まれます。ユーザーが独自のルーティング ルールを設定して URI ハンドラーをリダイレクト (再マップ) できるようにします。
【6】MySQLのインデックスの仕組み、複合インデックスの使用原理
(書籍「入門 MySQL in a Simple Way」では、インデックスの使用法について詳しく説明しています)
一般に、書籍の目次は、インデックス作成メカニズムを導入するために使用されます。実際、一部の書籍には、データベースのインデックスによく似た特別なクイック検索付録が付いています。
MySQL のインデックスには、主キー インデックス、一意のインデックス、通常のインデックス、およびフルテキスト インデックスの 4 つのカテゴリが含まれます。 table_name のインデックスを表示 -- テーブル内のインデックスを表示します
「Handler_read%」のようなステータスを表示 -- インデックスの使用状況を表示
複合インデックスは通常、最も左のプレフィックスの原則に従います。たとえば、table_a の 3 つの列 a b c を使用して複合インデックスを構築します
table_a(a,b,c) にインデックス ind_table_a を作成します;
その後、新しく作成された複合インデックスは、条件で a、または a、b、または a、b、c が使用される場合にのみ使用されます。
【7】MySQLテーブルの種類とMyISAMとInnoDBの違い
一般的な MySQL テーブル タイプ (つまり、ストレージ エンジン) には、次のエンジンが含まれます: MyISAM/Innodb/Memory/Merge/NDB
その中で、MyISAM と Innodb は最もよく使用される 2 つのテーブル タイプであり、それぞれに独自の利点があります。ニーズに応じて適切なテーブル タイプを選択できます。
[マイサム]
1) 各データベース ストレージには 3 つのファイルが含まれています: .frm (テーブル定義)、MYD (データ ファイル)、MYI (インデックス ファイル)
2) データ ファイルまたはインデックス ファイルは複数のディスクを指すことができます
3) Linux のデフォルト エンジン、Win のデフォルトは InnoDB
4) 非トランザクション型の場合、トランザクション型の追加のオーバーヘッドを回避します
5) 選択と挿入が集中的に行われるテーブルに適しています
6) MyISAM のデフォルトのロック スケジュール メカニズムは書き込み優先度であり、LOW_PRIORITY_UPDATES
を通じて設定できます。
7) MyISAM タイプのデータ ファイルはさまざまなオペレーティング システムでコピーできます。これは非常に重要であり、展開がより便利になります。
[Innodb]
1) トランザクションアプリケーションの場合
2) 更新と削除の集中的な操作に適しています。 select count(*) from table を実行する場合、InnoDB はテーブル全体をスキャンして行数を計算する必要がありますが、MyISAM は単に保存された行数を読み取るだけで済みます。 count(*) ステートメントに where 条件が含まれている場合、2 つのテーブルの操作は同じであることに注意してください。 DELETE FROM テーブルの場合、InnoDB はテーブルを再作成せず、行ごとに削除します。
3) 行レベルのロックと外部キー制約を導入します
4) InnoDB は FULLTEXT 型インデックスをサポートしていません
【8】クイックソートアルゴリズムの簡単な紹介
基本的な考え方: 1 回の並べ替えパスで並べ替えるシーケンスを 2 つの部分に分割し、一方の部分には他方の部分よりも小さいレコードが含まれます。その後、順序を達成するために 2 つの部分を別々にすばやく並べ替え続けます。
アルゴリズムの実装: low と high の 2 つのポインターがあり、初期値は low=1、high=n であり、参照値はキー (通常は最初の値が選択されます) であり、最初に高い位置から前方に検索して見つけます。最初のレコード key より小さいレコードを key と交換し、次に下位から逆方向に検索して key より大きい最初のレコードを見つけてベース値と交換し、low=high になるまで繰り返します。
最初のソート結果では、キー前のレコード値がキー後のレコード値より小さくなります。
11 25 9 3 16 2 //キーとして 11 を選択
2 25 9 3 16 11
2 11 9 3 16 25
2 3 9 11 16 25
【9】awk、sed、sortの基本的な使い方(例で解説)
【例】:以下のようなファイルテストがあります。各URLの出現回数をカウントし、シェルを使用して実装してください。
a
www.baidu.com
20:00
b
www.qq.com
19:30
c
www.baidu.com
14:00
d
www.baidu.com
23:00
e
www.qq.com
20:30
f
www.360.com
20:30
cat テスト| awk -F' '{print $2}' |sort -n |uniq -c
【10】Memcachedとredisの使い方と理解
Memcached と redis はどちらもキーと値のメモリ ストレージ システムであり、ハッシュ テーブルを通じて検索結果を保存し、強力なキャッシュ メカニズムを実現します。新浪の微博や淘宝網などのトラフィックの多いサイトでは、これらを使用する必要があります。
以下は百科事典からの抜粋です。具体的な実践方法や使い方については、後ほど詳しくご紹介します。
Memcache は、メモリ内に統合された巨大なハッシュ テーブルを保持することで、画像、ビデオ、ファイル、データベースの検索結果などのさまざまな形式のデータを格納する、高性能の分散メモリ オブジェクト キャッシング システムです。簡単に言うと、データがメモリに呼び出されてからメモリから読み取られるため、読み取り速度が大幅に向上します。
Redis はキーと値のストレージ システムです。 Memcached と同様に、string (文字列)、list (リンク リスト)、set (セット)、zset (順序付きセット) など、比較的多くの保存された値の型をサポートします。