ホームページ  >  記事  >  バックエンド開発  >  高度な PHP 面接の質問とその回答_PHP チュートリアル

高度な PHP 面接の質問とその回答_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:09:561074ブラウズ

インターネットで上級 PHP の面接の質問をいくつか見ました。 。

何もすることがなかったので、いくつかの答えを考え出しました。 。 。包括的ではないかもしれないので、後で保存しておきます。

1.基礎知識のポイント
1.1 HTTP プロトコルのいくつかのステータス コードの意味: 503 500 401 403 404 200 301 302。 。 。
200: リクエストは成功し、リクエストされたデータが返されます。
301: 永続的なリダイレクト。
302: 一時的なリダイレクト。
401: 現在のリクエストにはユーザー認証が必要です。
403: サーバーはリクエストの実行を拒否しました。つまり、権限がありません。
404: リクエストは失敗しました。リクエストされたデータがサーバー上に見つかりませんでした。
500: サーバーエラー。一般的なサーバー側プログラム実行エラー。
503: サーバーは一時的にメンテナンス中か過負荷状態です。この状態は一時的なものです。

1.2 Include require include_once require_once の違い
失敗は別の方法で処理されます:
require に失敗すると、致命的レベルのエラーが生成され、プログラムの実行が停止します。
インクルードが失敗した場合、警告レベルのエラーのみが生成され、プログラムは実行を継続します。

include_once/require_once と include/require は同じ方法でエラーを処理します。
唯一の違いは、インクルードされるファイル コードがすでに存在する場合、そのコードはインクルードされなくなることです。

1.3 mysql4.0 から 4.1、PHP 4.x から 5.1 への大幅な改善など、PHP/Mysql のいくつかのバージョンの進化の歴史。


1.4 ヒアドックの概要
文字列を定義する方法。
構造:
<<<。プロンプトの後で、識別子 (別の行) を定義します。
それから新しい行。次は文字列そのものです
最後に、以前に定義した識別子を終了マーク (別の行) として使用します
注:
識別子の命名も、他のタグと同様に PHP ルールに準拠する必要があります:
文字、数字、アンダースコアのみを含めることができ、文字とアンダースコアで始める必要があります


1.5 PHP マジック メソッドをいくつか作成します;
__construct() は、クラスがインスタンス化されるときに自動的に呼び出されます。
__destruct() は、クラス オブジェクトが使用されるときに自動的に呼び出されます。
__set() は、未定義のプロパティに値を割り当てるときに呼び出されます。
未定義のプロパティを呼び出す場合は、__get() が呼び出されます。
__isset() は、 isset() または empty() 関数を使用するときに呼び出されます。
unset() を使用すると __unset() が呼び出されます。
__sleep() は、serialize を使用してシリアル化するときに呼び出されます。
__wakeup() は、unserialize を使用してデシリアライズするときに呼び出されます。
__call() は、存在しないメソッドを呼び出すときに呼び出されます。
__callStatic() は、存在しない静的メソッドを呼び出します。
__toString() は、オブジェクトを文字列に変換するときに呼び出されます。エコーなど。
__invoke() は、オブジェクトをメソッドとして呼び出そうとするときに呼び出されます。
__set_state() は、var_export() 関数を使用するときに呼び出されます。配列パラメータを受け入れます。
__clone() は、clone を使用してオブジェクトをコピーするときに呼び出されます。

1.6 phpのコンパイル時にパラメータを設定するものもあります
–prefix=/usr/local/php PHP インストールディレクトリ
–with-config-file-path=/usr/local/php/etc は php.ini の場所を指定します
–with-mysql=/usr/local/mysql mysql インストール ディレクトリ、mysql のサポート
–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli ファイル ディレクトリ、最適化されたサポート
–enable-safe-mode セーフモードをオンにする
–enable-ftp FTP サポートをオンにします
–enable-zip zip のサポートをオンにします
–with-bz2 bz2 ファイルのサポートをオンにします
–with-jpeg-dir は jpeg 画像のサポートをオンにします
–with-png-dir は PNG 画像のサポートをオンにします
–with-freetype-dir は、freetype フォント ライブラリのサポートをオンにします
–without-iconv は、iconv 関数をオフにし、文字セット間で変換します
–with-libxml-dir は libxml2 ライブラリのサポートをオンにします
–with-xmlrpc は xml-rpc の C 言語を開きます
–with-zlib-dir は zlib ライブラリのサポートをオンにします
–with-gd は gd ライブラリのサポートをオンにします

./configure ヘルプを使用して詳細を表示できます

1.7 phpにパラメータを渡す3つの方法。

/*
* 方法 1 $argc $argv を使用する
* コマンドラインから実行 /usr/local/php/bin/php ./getopt.php -f 123 -g 456
*/
// if ($argc > 1){
// print_r($argv);
// }


/**
* 運用結果
*
sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php -f 123 -g 456
配列
(
[0] => [1] = & gt; [2] = & gt; [3] => [4] = & gt; 456] )
​​*/




/*

* 方法2 getopt関数を使う()

* コマンドラインから実行 /usr/local/php/bin/php ./getopt.php -f 123 -g 456

*/



// $options = "f:g:";
// $opts = getopt( $options );
// print_r($opts);


/**
* 運用結果
*

sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php -f 123 -g 456

配列
(
[F] = & gt; [G] = > )
​​*/






/*

* 方法 3: ユーザーに入力を求め、入力パラメータを取得します。 C言語に少し似ています

* コマンドラインから /usr/local/php/bin/php ./getopt.php を実行します

*/

fwrite(STDOUT, "名前を入力してください: ");

$name = トリム(fgets(STDIN));

fwrite(STDOUT, "こんにちは、$name!");
/**
     * 行行結果
     *
     sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php
     名前を入力してください: フランシス
     こんにちは、フランシス!
    */




1.8 (mysql) データ型の意味を書き留めてください (int char varchar datetime text) varchar と char の違いは何ですか;
int: 数値型
char: 固定長文字列型
varchar: 可変長文字列型
datetime: 期間時間型

text : テキストタイプ


varchar と char の違いは何ですか:
a. char の長さは固定されており、保存するデータの量に関係なく、常に固定長になります。
Varchar は可変長ですが、位置を格納するために使用される全長に 1 文字を追加する必要があります。

b. char は固定長であるため、処理速度は varchar よりもはるかに高速ですが、ストレージ領域を無駄にします。 したがって、ストレージは大きくないが速度が必要な場合は char 型を使用し、逆に varchar 型を使用してインスタンス化することができます。

1.9 error_reporting などのデバッグ関数の使用
error_reporting() 関数は、実行時に php.ini に error_reporting ディレクティブを設定できます。
したがって、表示されるエラー レベルはプログラム内でいつでも調整できます。

この関数を使用する場合は、display_errors をオンにする必要があります。


1.10 バージョン管理ソフトウェアを使用したことがありますか? 使用した場合、使用したバージョン管理ソフトウェアの名前は何ですか?




1.11 posix と perl の標準正規表現の違い;


1.12 セーフモードをオンにした後、どのエリアが制限されますか?

セーフモードを有効にすると、多くの PHP 機能、特にシステム関連のファイルを開く、コマンドの実行、その他の機能が制限されます。 ファイルに対して動作するすべての関数は、スクリプトと同じ UID を持つファイルに対してのみ動作します。

1.13 複数のプロセス/スレッドが同時にファイルを読み書きする問題を解決するコードを作成します。

PHP はマルチスレッドをサポートしていません。これを実現するには、PHP のフロック ロック機能を使用できます。

$fp = fopen("/tmp/lock.txt", "w+");

if (flock($fp, LOCK_EX)) { // 排他ロックを実行します

fwrite($fp, "ここに何かを書いてください");
flock($fp, LOCK_UN); // ロックを解除します
} その他 {

echo "ファイルをロックできませんでした!";

}
fclose($fp);


1.14 ファイルをアップロードするコードを記述します。
アップロード.html


このファイルを送信します:

upload.php
$uploads_dir = '/uploads';
foreach ($_FILES["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["tmp_name"][$key];
$name = $_FILES["名前"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}


1.15 Mysql ストレージ エンジン、myisam と innodb の違い。
a. MyISAM タイプはトランザクション処理などの高度な処理をサポートしませんが、InnoDB タイプはサポートします。 b. MyISAM タイプのテーブルはパフォーマンスを重視しており、その実行時間は InnoDB タイプよりも高速です。 c. InnoDB は FULLTEXT タイプのインデックスをサポートしません。
d. InnoDB はテーブル内の特定の行数を保存しません。つまり、
select count(*) from table を実行するとき、InnoDB はテーブル全体をスキャンして行数を計算する必要があります。
ただし、MyISAM は単に保存された行数を読み取るだけで済みます。
e. タイプ AUTO_INCREMENT のフィールドの場合、InnoDB にはこのフィールドのみのインデックスが含まれている必要がありますが、MyISAM テーブルでは他のフィールドとの結合インデックスを確立できます。
f. DELETE FROM テーブルの場合、InnoDB はテーブルを再作成せず、行ごとに削除します。
g. LOAD TABLE FROM MASTER 操作は InnoDB では機能しません。解決策は、まず InnoDB テーブルを MyISAM テーブルに変更し、次にデータをインポートして、それを InnoDB テーブルに変更することです。 ただし、追加の InnoDB 機能 (外部キーなど) を使用するテーブルには適用されません。
h. MyISAM はテーブル ロックをサポートし、InnoDB は行ロックをサポートします。



2. Web アーキテクチャ、セキュリティ、プロジェクト経験

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



2.2 mod_rewrite を使用する場合、サーバー上に物理ファイル /archivers/567.html が存在しない場合、index.php?id=567 にリダイレクトされます。まず mod_rewrite を有効にしてください。 まず、mod_rewrite モジュールを開きます。

次に、http.conf は次のコード セグメントを見つけます:
<ディレクトリ />
オプションフォローSymLinks

許可オーバーライドなし


「AllowOverride None」を「AllowOverride All」に変更し、httpd サービスを再起動します。

次に、プロジェクトのルートディレクトリに .htaccess ファイルを作成し、ルールを記入します。

2.3 MySQL データベースは 1 日あたり 50,000 アイテム以上の増加があり、それを最適化するにはどうすればよいですか?

a. 適切に設計されたデータベース構造を設計し、部分的なデータの冗長性を許可し、結合クエリを回避して効率を向上させます。
b. 適切なテーブル フィールドのデータ タイプとストレージ エンジンを選択し、インデックスを適切に追加します。

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

d. 通常のテーブルを見つけて 1 つのテーブル内のデータ量を減らし、クエリ速度を向上させます。
e. memcached、apc などのキャッシュ メカニズムを追加します。
f. 頻繁に変更されないページの場合は、静的ページが生成されます。
g. 効率的な SQL を作成します。たとえば、SELECT * FROM TABEL は SELECT field_1, field_2, field_3 FROM TABLE に変更されます。


2.4 ソートアルゴリズム (原理) を記述し、それを最適化する方法を述べます。

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

2.6 トラフィックの多い Web サイトの場合、ページ訪問の統計の問題を解決するためにどのような方法を使用しますか
a. サーバーが現在のトラフィック量をサポートできるかどうかを確認します。

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

c. 画像のホットリンクなど、リンクへの外部アクセス (ホットリンク) を禁止します。
d. ファイルのダウンロードを制御します。
e. 異なるホストを使用してトラフィックを分散します。
f. 閲覧統計ソフトウェアを使用して訪問数を把握し、対象を絞った最適化を実行します。


2.7 テンプレート エンジンを使用したことがありますか? 使用した場合、使用したテンプレート エンジンの名前は何ですか?
賢い

2.8 セッションの原理を紹介してください。大規模な Web サイトでセッションに関して注意すべき点は何ですか?

2.9 PHP パフォーマンスと MySQL データベース パフォーマンスをテストするためのツール、およびボトルネックを見つける方法。

2.10 Web ページ内のすべてのリンクを提案します。

2.11 一般的な SSO (シングル サインオン) ソリューション (discuz のパスポートを統合する dedecms など) の原理を紹介します。

2.12 あなたが作成した PHP フレームワークの特徴は何ですか。主にどのような問題を解決しますか。また、他のフレームワークとの違いは何ですか。

2.13 大規模なフォーラム/ニュース記事システム/SNS Web サイト間のパフォーマンス最適化の違いは何ですか?


2.14 フォト アルバム アプリケーション: ブラウザーで複数のファイルを同時に選択してアップロードできる必要があり、写真をトリミングする必要があり、圧縮パッケージをサーバー側で解凍する必要があります。 1 つのファイルを最大 50M までアップロードできます。アップロードプロセス中に進行状況バーが表示されます。画像ごとに 4 つのサイズのサムネイルを生成できます。フラッシュ再生するにはビデオ ファイルを flv に変換する必要があります。対象となるさまざまなタイプのオープンソース ソフトウェアとその簡単な使用法について説明します。
猿のグループが円形に並び、1、2、...、n の番号が付けられます。次に、1 番目から数え始め、m 番目まで数え、円の外に追い出し、後ろから数え始め、m 番目まで数え、追い出します...このようにして最後まで続けます。猿は一匹だけ残っており、その猿は王様と呼ばれています。このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。プログラムを使用してこのプロセスをシミュレートします。


3. unix/linux の基本的な使い方
3.1 Linux で現在のシステム負荷情報を表示するいくつかの方法。


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


3.3 SSH のセキュリティ強化方法のパスワード モードと RSA キー モードの設定。


3.4 rpm/apt/yum/ports パッケージのインストール、クエリ、および削除のための基本的なコマンド。


3.5 Makefile の基本形式、gcc コンパイル、接続コマンド、-O0 と -O3 の違い。


3.6 gdb、strace、valgrind の基本的な使用法


4. フロントエンド、HTML、JS
CSSボックスモデル。
JavaScript でプロトタイプを作成します。
JavaScript におけるこのオブジェクトのスコープ。
IE と Firefox のイベント バブリングの違い。
奇妙なモード、標準モード、標準に近いモードとは何ですか。
DTD の定義
IE/Firefox でよく使われるハック
Firefox、IE 上のフロントエンド js/css デバッグ ツール。


www.bkjia.com本当http://www.bkjia.com/PHPjc/477584.html技術記事インターネットで上級 PHP の面接の質問をいくつか見ました。 。 何もすることがなかったので、いくつかの答えを考え出しました。 。 。包括的ではないかもしれないので、後で保存しておきます。 1. 基礎知識 1.1 HTTPプロトコルでは…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。