PHP 面接の質問 (2)

WBOY
WBOYオリジナル
2016-06-23 14:32:40915ブラウズ

1. POSIX スタイルと互換性のある Perl スタイルの正規表現の主な機能を説明するための例えをあげてください
ereg preg_match
ereg_replace preg_replace


2. php.ini でセーフモードをオンにした後の PHP システム機能への影響を説明してください
セーフモードは、基本的に安全な共有環境を提供します。複数のユーザーが共有する phpweb サーバー上で、safe_mode モードが有効になっている場合、次の機能が影響を受けます。まず、ファイル システムにアクセスしようとする機能は、実行中のサーバーのユーザー ID によって制限されます。ファイルを操作するには、ファイルへの読み取りまたは書き込みアクセス権が必要です。
そのため、safe_mode をオンにすると、次の機能が制限されます:
ckdir、move_uploaded_file、chgrp、parse_ini_file、chown、rmdir、copy、rename、fopen、require、highlight_file、show_source、include、symlink、link、touch、mkdir , unlink
上記はすべてファイル システムのオペレーティングに関連する機能です。また、一部の PHP 拡張機能はプログラムに直接読み込むことができず、必要に応じて php.ini でのみ読み込むことができます。オペレーティング システム プログラムを実行する場合は、safe_mode_exec_dir にプログラムのパスを指定する必要があります。指定しない場合、実行は失敗します。また、exec、shell_exec、pasathru、system、popen等の機能が制限されます


3. PHP5 のマジックメソッド関数とは何ですか?その使用例を教えてください
__sleep
__wakeup
__toString
__set_state
__construct,
__destruct
__call,
__get,
__set,
__isset,
__unset
__sleep,
__ウェイクアップ、
__toString 、
__set_state、
__clone
__autoload


4. コマンドラインから PHP スクリプトを実行する方法 (2 つの方法を書き留めてください) と、同時に PHP スクリプトにパラメータを渡す方法を書き留めて説明してください。
$PHP_HOME/bin/php -r 'echo $argv[1];' hello
$PHP_HOME/bin/php hello.php hello

ウィンドウの下で、php のインストールディレクトリが c:program filesphp5 であると仮定すると、コマンドを使用します。ウィンドウにパスが入力され、「php hello.php」と入力して Enter を押すと、現在のパスにある hello.php ファイルが実行されます。
別のパスにある php ファイルを指定したい場合は、php パスを使用できます。この形式の /hello.php を CLI モードと呼びます。通常、ブラウザで見るのが CGI モードになります。cli モードの php ファイルは、ファイル名の後に直接パラメータを追加します。 php では、パラメータは 2 つの変数を通じてファイル内で取得されます。1 つは $argv で、もう 1 つは渡されたパラメータの配列です。デフォルトでは、最初の変数は、渡されたパラメータの名前です。 php ファイル; 後者は $argv 内の配列の数です。
Linuxでは、一般的なプログラムのインストールは/usr/bin/phpの下にインストールされます。情報があれば、それを使用することができます。前の手順が当てはまる場合は、php ファイルを直接実行できます。man php に情報がない場合は、現在の php 実行ファイルが環境パスにないことを意味します。 php パスを含める、またはウィンドウの php パスと同様に入力して、php php ファイルを実行することもできます。他は窓の下のものと同様です。


5. PHP のガベージ コレクション メカニズムとは何ですか? PHP では、このオブジェクトを指す変数がない場合、このオブジェクトはガベージになります。 PHP はこれをメモリ内で破棄します。これは、メモリのオーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。
PHP スレッドが終了すると、現在占有されているすべてのメモリ空間が破棄され、現在のプログラム内のすべてのオブジェクトも同時に破棄されます。 GC プロセスは通常、セッションごとに実行を開始します。 gc の目的は、セッション ファイルの有効期限が切れた後に、セッション ファイルを自動的に破棄して削除することです。
これらの関数の実行は、リサイクルの役割も果たします

6.オブジェクトを配列のようにループできるようにするには、プロパティをプライベートにする必要があります。

(Iterator モードの PHP5 実装、Iterator インターフェイスを実装するクラスを作成する)

PHP5 はインターフェイスのサポートを開始し、Iterator インターフェイスが組み込まれているため、クラスを定義して Iterator インターフェイスを実装すると、クラス オブジェクトは次のようになります。 ZEND_ITER_OBJECT 、それ以外の場合は ZEND_ITER_PLAIN_OBJECT です。
ZEND_ITER_PLAIN_OBJECT クラスの場合、 foreach は HASH_OF を通じてオブジェクトのデフォルトの属性配列を取得し、その配列に対して foreach を実行します。
ZEND_ITER_OBJECT クラス オブジェクトの場合、実装された関数に関連する Iterator インターフェイスを呼び出します。オブジェクトごとに foreach を実行するため、この記述されたテスト質問に対して次の答えを与えることができます:
[php]
クラス サンプルは Iterator を実装します
{
private $_items = array(1,2,3,4,5,6) ,7);


パブリック関数 __construct() {
;//void
}
パブリック関数 rewind() { リセット($this->_items) }
パブリック関数 current() { return current($this->_items); ; }
パブリック関数 key() { return key($this->_items); }
public function next() { return next($this->_items) }
public function valid() { return ( $ this->current() !== false ); }
}
$sa = new sample();
foreach($sa as $key => $val){
print $key . .$val;
}[/php]
上記のコードは私の PHP 5.3 で正常に動作します。

7.複数のプロセスが同じファイルを同時に正常に書き込むことができるようにするための PHP コードを作成してください
function writeData($path, $mode, $data){
$fp = fopen($path, $mode); $retries = 0;
$max_retries = 100;
do {
if ($retries > 0) {
usleep(rand(1, 10000));
}
$retries += 1;
}while (!flock ($fp, LOCK_EX ) および $retries

if ($retries == $max_retries) {

return false;
}

fwrite($fp, "$datan") ;

flock($ fp, LOCK_UN);
fclose($fp);
true を返す }

8. PHP を使用して双方向キューを実装します


9. 正規表現を使用して、マークアップ言語 (html または xml) コードセグメント内の指定されたタグの指定された属性値を抽出します (大文字と小文字の区別、属性名と等号の間のスペースなど、属性値の不規則性を考慮する必要があります) 。)。ここでは、テスト タグの attr 属性値を抽出する必要があることを前提としています。



10.次の機能を実装するには、ソケット関連の関数 (curl ではなく) を使用してください。ポスト リクエストを作成し、指定された http サーバーの指定されたポートの指定されたリクエスト パス (http://www.example.com など) に送信します。 8080/テスト)。リクエストには次の変数が含まれます:

ユーザー名 (ユーザー名): Gentle Yida

パスワード (パスワード): &123=321&321=123&

紹介 (イントロ): Hello world!
そして、http サーバーは簡単なユーザー アクションを実行するために次の Cookie を必要とします。 :


cur_query: you&me

last_tm: ... (最後のリクエストの UNIX タイムスタンプ、現在のリクエスト時間の 10 分前に設定)

cur_tm: ... (現在のリクエストの UNIX タイムスタンプ)

タイムアウトを設定リクエスト送信後、httpサーバーの応答内容が出力されます。


function encode($data, $sep = '&'){

while (list($k,$v) = each($data)) {

$encoded .= ($encoded ? "$sep " : "");
$encoded .= rawurlencode($k)."=".rawurlencode($v);
}
Return $encoded;
}


function post($url, $post, $ cookie){

$url = parse_url($url);

$post = encode($data, '&');

$cookie = encode($cookieArray, ';');
$fp = fsockopen($url[ 'host'], $url['port'] ? $url['port'] : 80, $errno, $errstr, 10);
if (!$fp) return "$url[host] へのソケットのオープンに失敗しました]";
fputs($fp, sprintf("POST %s%s%s HTTP/1.0n", $url['path'], $url['query'] ? "?" : "", $url ['クエリ']));
fputs($fp, "ホスト: $url[host]n");
fputs($fp, "Content-type: application/x-www-form-urlencodedn");
fputs($fp, "Content-length: " . strlen($encoded) . "n");
fputs($fp, "Cookie: $cookienn");
fputs($fp, "Connection: closenn");
fputs($fp, "$post n");
while (!feof($fp)) {
echo fgets($fp, 128);
}


fclose($fp);

}


$url = 'http://www.example.com:8080/test';

$encoded = username=Gentle Yida&pwd=

$post = array(

'username'=> 'Gentle Yida',
' pwd => ' => time() - 600,
'cur_tm '=> time()
);


Post($url, $post, $cookie);





11. PHP スクリプトの実行効率 (通常はスクリプト実行時間) とデータベース SQL 効率 (通常はデータベース クエリ時間) をチェックし、スクリプト実行とデータベース クエリのボトルネックを特定して分析するには、どのような方法を使用しますか?

1.スクリプトの実行時間、xdebug の有効化、WinCacheGrind 分析の使用。

2.データベース クエリの場合、mysql は EXPLAIN を使用してクエリを分析し、スロー クエリ ログを有効にしてスロー クエリを記録します。

3. xdebug は、関数の実行数と分析にかかる特定の時間をカウントします。

4. オンライン システムは strace を使用して、関連プロセスの特定のシステム コールを追跡します。


PHP LAMP エンジニア テスト用紙
質問 1
< とは何ですか?エコーカウント("123") ?>出力しますか?
A) 3
B) False
C) Null
D) 1
E) 0


質問 2
小数点以下 2 桁の 42 の表現を出力するスニペットは次のどれですか?
A) printf ("%.2dn", 42);
B) printf("%1.2fn", 42);
C) printf("%1.2un", 42);


質問 3
与えられた
$text = 'Content-Type: text/xml';
'text/xml' を出力するのは次のうちどれですか?
A) print substr($text, strchr($text, ':'));
B) print substr($ text, strchr($text, ':') + 1);
C) print substr($text, strpos($text, ':') + 1);
D) print substr($text, strpos($text , ':') + 2);
E) print substr($text, 0, strchr($text, ':')
質問 4
$a の値は何ですか?
$a = in_array('01', array('1')) == var_dump('01' == 1);
?>
A) True
B) False
質問 5
次の PHP コードは?
functiontimesTwo($int) {
$int = $int * 2;
}
$int = 2;
$result =timesTwo($int);
?>;
答え: NULL
質問 6
以下のコードは、____________ のため ____________ です。
class Foo {
?>
function bar() {
print "bar";
}
}
? >
A) は機能します。クラス定義は複数の PHP ブロックに分割できます。
B) は機能しません。クラス定義は単一の PHP ブロック内になければなりません。
C) は機能せず、クラス定義は単一の PHP ブロック内になければなりません。ファイルですが、複数の PHP ブロックに含めることができます。
D) は機能します。クラス定義は複数のファイルと複数の PHP ブロックに分割できます。
質問 7
オンにすると、____________ は、HTML フォームや Cookie からのさまざまな変数を使用してスクリプトを _________ します。 .
A) show_errors、enable
B) show_errors、show
C) register_globals、enhanced
D) register_globals、inject
質問 8
次の PHP コードの出力は何になります:
echo count(strlen) ("http://php.net"));
?>
答え: 1
質問 9
2 つの文字列を比較するための最良の汎用方法は何ですか?
A) strpos 関数の使用
B) == 演算子
C) strcasecmp() の使用
D) strcmp() の使用
質問 10
「print()」と「echo()」の違いは何ですか?
答え: print は関数、echo は言語です構築します


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP ノート次の記事:PHP ノート