Baiduの面接、特に最初の面接、全体的な面接は難しくありません。最初の 2 ラウンドの技術面接では手書きのコードが必要で、主に言語の基礎、デザイン パターン、アルゴリズムの基礎、データベースが含まれます。一番大切なのは基礎、基礎、基礎です。幅広いトピックが取り上げられていますが、それらはすべてプログラマが知っておくべき、知っておくべき内容です。回答は参考用です。 (記事はインターネットから引用しました)
次の 10 個の質問をまとめました:
1. PHP の整数オーバーフロー問題とは何ですか?
2. デザイン パターンについての理解。および MVC
4. HTTP プロトコル 1.0 と 1.1 の違い、HTTP プロトコルについて簡単に説明します
5. Apache の書き換えメカニズムと PHP フレームワークの URI ルーティング メカニズムについて簡単に説明します
6. 、複合インデックスの使用原則
7. MySQL テーブルの種類と MyISAM と InnoDB の違い
8. awk、sed、sort の基本的な使用方法 (例で検討)
10. Memcached と redis の使用と理解
======================================= ===========
【1】PHP の整数オーバーフロー問題とは何ですか?
PHP の整数の語長は、32 ビット オペレーティング システムの場合、最大の整数に関係します。 type は 20 億を超えており、実際には 2 から 31 です。最小累乗は -2 の 31 乗です。PHP は符号なし整数をサポートしません。 数値が整数の範囲を超える場合、自動的に浮動小数点として解釈されます。実行された演算の結果が整数の範囲を超える場合は、浮動小数点数も返されます。 (JavaやCにおける整数オーバーフローはどうなるのか)
[2] OOPを理解する方法
オブジェクト指向プログラミングであるOOPには、継承、カプセル化、ポリモーフィズムという3つの側面があり、その最も基本的なものは抽象化です。
継承、つまり拡張性は、既存の親クラスの機能をサブクラスを通じて拡張します。
カプセル化では、外部がオブジェクトの内部データに自由にアクセスできないことが必要です。つまり、クラス内の特定の実装がカプセル化されているため、その動作と内容を知っている限り、ユーザーは特定の内部実装を知る必要はありません。それの使い方。
ポリモーフィズムはクラスの抽象化およびインターフェイスであり、同じクラスが複数の種類のオブジェクトを処理できる機能です。
実際には、私たちが目にするものはすべてオブジェクトと見なすことができ、その後クラスへのさらなる抽象化を通じて、クラスは多くの同様のオブジェクトに進化することができます。簡単な例を挙げると、私たちが目にする家を ROOM クラスに抽象化します。これには、基本的なドア、窓、テーブルなどのオブジェクトと、人の出入りなどの機能が含まれます。 現在、ROOM クラスを Classroom として継承しています。これには、ドア、大きな窓、テーブルと椅子があり、教師とクラスメートが授業に参加できるのは白と黒の教壇だけです。ここで、この Classroom クラスを Classroom_621 オブジェクトとしてインスタンス化します。これには、2 つのドア、4 つの大きな窓、30 セットのテーブルと椅子が含まれており、一部の学生は毛沢東の授業を受けています。
【3】デザインパターンとMVCの理解
Model-View-Controller、モデル、ビュー、コントローラー MVCについて考えるとき、JAVAを思い浮かべるでしょう。なぜなら、JAVAは完全なオブジェクト指向言語だからです。 smalltalk では、ビューをデータ モデルから分離することが中心となり、異なるプログラムで異なる表示を行うことができます。
モデル、つまりプログラマーによって作成された関数、アルゴリズム、データ モデル。これをシステム ビジネス ロジック層と呼びます。
ビュー、つまりフロントエンドのグラフィカルインターフェイス。ユーザーに表示されます。
コントローラー。主にリクエストの処理、ビューの転送、ロードを担当します。
デザイン パターンは、端的に言えば、コード設計経験の概要と分類です。デザイン パターンは、建設業界で最初に使用され、主にオブジェクトで使用される 23 のデザイン パターンが含まれています。指向性のあるプログラム。いくつかの設計原則に従います: オープンとクローズの原則、単一責任の原則、リスコフ置換原則、依存性注入、インターフェース分離、ディミット原則、継承よりも合成を優先するなど。これには、創造モデル、構造モデル、動作モデルの 3 つのカテゴリが含まれます。
【4】HTTPプロトコル1.0と1.1の違いと、HTTPプロトコルについて簡単に説明します
HTTP、Hypertext Transfer Protocol。ブラウザとサーバー間の通信ルールを定義します。 HTTP プロトコルは、TCP/IP の TCP プロトコルに基づいており、その機能には、C/S モード、シンプルなリクエスト (GET/POST/HEAD)、およびあらゆるものを送信できることが含まれます。データのタイプ (HTML、XML、JSON、カスタムなど)、接続なし (接続ごとに 1 つのリクエストのみが処理され、リクエストが発行されてから 200 ステータスを受信するまで接続は切断されます)、ステートレス。
HTTPプロトコルの調査には、主に応答メッセージの形式、要求メッセージの形式、ステータスコードなどの知識ポイントが含まれます。
一般に、HTTP プロトコルには、開始行、ヘッダー、本文の 3 つの部分が含まれます。
[応答メッセージ形式]
HTTP/1.1 200 0K
Connectlon:close
Date: Thu, 13 Oct 2005 03:17:33 GMT
Server: Apache/2.0.54 (Unix)
Last— Nodified:Mon,22 Jun 1998 09;23;24 GMT
Content—Length:682l
Content—Type:text/html
この応答メッセージは 3 つの部分に分かれています: 1 つの初期ステータス行 (ステータス行) 、ヘッダー、および要求されたオブジェクト自体を含む 1 つの付属物。ステータス行には、プロトコル バージョン フィールド、ステータス コード フィールド、および理由フレーズ フィールドの 3 つのフィールドがあります。
[リクエストメッセージフォーマット]
GET /somedir/page.html HTTP/1.1
ホスト:www.chinaitlab.com
接続:close
User-agent:Mozilla/4.0
Accept- language:zh-cn
(余分なキャリッジリターンとラインフィード文字)
リクエストメッセージの最初の行はリクエストラインと呼ばれ、後続の行はヘッダーと呼ばれますライン。リクエストラインには、メソッドフィールド、URL フィールド、HTTP バージョンフィールドの 3 つのフィールドがあります。
[ステータスコード] http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.htmlを参照
1xxメッセージ
2xx成功
3xxリダイレクト
4xxリクエストエラー
5xxサーバーエラー
[共通ステータスコード]
200 OK。リクエストは成功し、リクエストで予期された応答ヘッダーまたはデータ本体がこの応答とともに返されます。
300 の複数の選択肢。リソースをリクエストするには、フランス語、英語などのテキストをリクエストするなど、複数のオプションがあります。
301 は完全に移動されました。要求された Web ページが新しい場所に完全に移動されたことを示します
302 が見つかりました。一時的にジャンプしたときにページが戻る状態を示します。
304 変更されていません。クライアントのキャッシュされたリソースは最新であるため、クライアントはキャッシュを使用する必要があります。
400 不正なリクエストです。要求の形式が正しくありません。
403 禁止。リクエストはサーバーによって拒否されました。
404 見つかりません。これは、サーバーが要求された Web ページを見つけることができないことを意味します。サーバー上に存在しない Web ページは、HTTP ステータス コードを返すことがよくあります。
500 内部サーバーエラー。
503 サービスは利用できません。現在サーバーはリクエストを処理できませんが、サービスはやがて復元されます。
504 ゲートウェイのタイムアウト。ステータス 408 と似ていますが、別のサーバーからの応答を待っている間にタイムアウトになったゲートウェイまたはプロキシからの応答が返されます。
505 HTTP バージョンはサポートされていません。 HTTP プロトコルのバージョンはサポートされていません。
[5] Apache の書き換えメカニズムと PHP フレームワークの URI ルーティング メカニズムについて簡単に説明しましょう
1) URL 書き換えとは、実際にはユーザーがブラウザーを通じてリクエストした URL をバックグラウンドに送信することであり、Apache が書き換えますこのリクエストは、事前に設定された書き換えルールに従って、実際のリソース パスを指します。しかし、問題は、実際のパスを再構成して、そのパスにアクセスできるようにするという、ずさんなトリックです。そうする。
1.SEO。検索エンジンの要求を満たすために、動的 URL を静的にしてください。
2. アクセス制御。たとえば、ルールを書き換えた後、クライアントがバックグラウンド プログラムの種類を判断することは困難です。
3. URL リダイレクト。 Web サイトがドメイン名を変更するか、エイリアス URL を追加する場合、ルールを通じてアクセスする URL を簡単に指定できます。
mod_rewrite は正規表現を使用して、受信リクエストの URL を動的に変更します。 URL をファイル システム パスにマッピングしたり、ある URL を別の URL にマッピングしたりできます。 URL を操作するために無制限のルールが使用され、各ルールには無制限の追加条件を含めることができます。サーバー変数、環境変数、HTTP ヘッダー、タイムスタンプなど、さまざまな方法で検出できます。
mod_rewrite は、path-info 部分を含む URL パス全体を操作します。書き換えルールは http.conf または .htaccess で設定できます。書き換えルールによって生成されるパスには、リクエスト文字列、内部サブルーチン処理、外部リクエストのリダイレクト、または内部プロキシの侵入が含まれる場合があります。
2) PHP フレームワークの URI ルーティング メカニズムは Apache の書き換えに似ており、通常はワイルドカードと通常のルールが含まれます。ユーザーが独自のルーティング ルールを設定して URI ハンドラーをリダイレクト (再マップ) できるようにします。
【6】MySQL のインデックス作成メカニズムと複合インデックス使用の原則
(書籍 MySQL ではインデックスの使用法がより詳しく説明されています)
一般的に、インデックス作成メカニズムは、一部の書籍を含む書籍の目次を使用して紹介されます。特別なクイック検索付録があり、これはデータベースのインデックスによく似ています。
MySQL のインデックスには、主キー インデックス、一意のインデックス、通常のインデックス、およびフルテキスト インデックスの 4 つのカテゴリが含まれています。
table_name のインデックスを表示します。 - テーブル内のインデックスを表示します。
'Handler_read%' のようなステータスを表示します。 - インデックスの使用状況を表示します。
複合インデックスは、通常、table_a の a b c 3 つの列のように、左端の接頭辞の原則に従います。複合インデックス
createindex ind_table_a on table_a(a,b,c);
その後、新しく作成された複合インデックスは、a、または a、b、または a、b、c が条件インデックスで使用される場合にのみ使用されます。 。
【7】MySQL テーブル タイプと MyISAM と InnoDB の違い
MySQL の一般的なテーブル タイプ (つまり、ストレージ エンジン)
サポートされているテーブル タイプの構成を表示するエンジンを表示します。一般的なものには、MyISAM/Innodb/Memory/Merge/NDB があります
その中で、MyISAM と Innodb は最もよく使用される 2 つのテーブル タイプであり、それぞれに独自の利点があります。ニーズに応じて、適切なテーブル タイプを選択できます。
[MyISAM]
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] クイック ソート アルゴリズムについて簡単に説明します
基本的な考え方: ソート対象の列を分割する2 つの部分(一方の部分が他方の部分より小さい)に分割し、順序を達成するために 2 つの部分を素早く並べ替え続けます。
アルゴリズムの実装: low と high の 2 つのポインターがあり、初期値は low=1、high=n で、ベース値がキー (通常は最初の値が選択されます)、最初に高い位置から前方に検索します。キーより小さい A レコードを見つけるにはキーと交換し、次に下位位置を逆方向に検索してキーより大きい最初のレコードを見つけ、ベース値と交換します。 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 test| awk -F' '{print $2}' |sort | memcached, redis
Memcached と redis の使用と理解は、どちらもキーと値のメモリ ストレージ システムであり、ハッシュ テーブルを通じて取得結果を保存し、強力なキャッシュ メカニズムを実現します。新浪の微博や淘宝網などのトラフィックの多いサイトでは、これらを使用する必要があります。
以下は百科事典からの抜粋です。具体的な実践方法や使い方については、後ほど詳しくご紹介します。
Memcache は、メモリ内に統合された巨大なハッシュ テーブルを維持することで、画像、ビデオ、ファイル、データベースの検索結果などのデータをさまざまな形式で保存するために使用できる、高性能の分散メモリ オブジェクト キャッシング システムです。簡単に言うと、データがメモリに呼び出されてからメモリから読み取られるため、読み取り速度が大幅に向上します。
redis は、キーと値のストレージ システムです。 Memcached と同様に、string (文字列)、list (リンク リスト)、set (セット)、zset (順序付きセット) など、比較的多くの保存された値の型をサポートします。
余談:面接プロセス全体は非常に感じが良く、面接官は非常にカジュアルだったと感じました。他の人が言うほど傲慢ではありません。百度の面接は自由形式であり、面接プロセス全体を通して近くにいる人々が問題や計画について話し合っています。