php面接問題(五)のテンセント編(解答付)

6409 ワード

ネット上で探した比較的に良いテンセントのphpの面接問題、大部分の答えはすでに整理して、特にphpの教程の中で貼ってみんなの参考に供します!
1.POSIXスタイルとPerlスタイルに対応する2つの正規表現の主な関数を類比して説明してください
ereg
preg_match
ereg_replace
preg_replace
2.phpについて説明してください.ini中safe_modeオープン後のPHPシステム関数への影響
オンにすると、主にシステム操作、ファイル、権限設定などの方法に影響し、通常のプロジェクトでは基本的にこれらの方法は使用されません.主に私はやはりwebshellに対応して、人にwebshellを植え込まれたことによるいくつかの安全問題を減らすために使うと思います.
3.PHP 5のマジックメソッド関数は何個ありますか.それぞれの使い方を例に挙げてください.
__sleep
__wakeup
__toString
__set_state
__construct,
__destruct
__call,
__get,
__set,
__isset,
__unset
__sleep,
__wakeup,
__toString,
__set_state,
__clone
__autoload
4.コマンドラインの下でPHPスクリプトを実行し、同時にPHPスクリプトにパラメータを渡す方法を説明してください.
1. Php filename.php $agr1 $agr2
2. php –r “”
5.PHPのゴミ収集メカニズムはどのようなものか
PHPは,スクリプト言語としてページ終了時に変数を解放するためのメモリである.PHPスレッドが終了すると、現在使用されているすべてのメモリ領域が破棄され、現在のプログラム内のすべてのオブジェクトが同時に破棄されます.GCプロセスは、通常、1つのSESSIONごとに実行する.gcの目的はsessionファイルが期限切れになった後にこれらのファイルを自動的に破棄して削除することである.PHPでは、このオブジェクトを指す変数が何もない場合、このオブジェクトはゴミになります.PHPはメモリに破棄されます.これはPHPのGCゴミ処理メカニズムで、メモリオーバーフローを防止します.これらの関数を実行しても、回収の役割を果たすことができます.destruct /unset/mysql_close/fclose phpはセッションに対して明確なgc処理時間設定セッションがある.gc_maxlifetimeゴミがあるとすれば,全体のプログラムがフレームワークで使用され,同じファイルなどを複数回呼び出すことによる非単品モードなどである.だから出るときに必要なのはonceリファレンスは、クラスを宣言するときに単品モードを使用します.論理の簡略化などもあります.PHP自身にメモリを管理させ、ゴミ管理を行うことを妄想する.ほほほ.PHPはまだできないようで、構造関数について、ANDIは彼の本によく書いています.あってもなくても、あってもなくてもいい.メモリ管理のものは一般的にデスクトッププログラムでもっと考えられます.
6.オブジェクトを配列のようにforeachループすることができ、属性がプライベートであることが要求される.
(IteratorモードのPHP 5実装、Iteratorインタフェースを記述)
class sample implements Iterator
{
    private $_items = array(1,2,3,4,5,6,7);
 
    public function __construct() {
                  ;//void
    }
    public function rewind() { reset($this->_items); }
    public function current() { return current($this->_items); }
    public function 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;
}
?>
 
7.PHPコードを書いて、複数のプロセスが同時に同じファイルに書き込まれたことを確認してください.
function write_file($filename, $content)
{
    $lock = $filename . '.lck';
    $write_length = 0;
    while(true) {
        if( file_exists($lock) ) {
            usleep(100);
        } else {
            touch($lock);
            $write_length = file_put_contents($filename, $content, FILE_APPEND);
            break;
        }
    }
    if( file_exists($lock) ) {
        unlink($lock);
    }
    return $write_length;
}

8.PHPで双方向キューを実現
class DEQueue {
    //  
    protected $_storage = array();
    
    //  
    public function unshift($element)
    {
        return array_unshift($this->_storage, $element);
    }
    
    //  
    public function push($element)
    {
        return array_push($this->_storage, $element);
    }
    
    //  
    public function pop()
    {
        return array_pop($this->_storage);
    }
    
    //  
    public function shift()
    {
        return array_shift($this->_storage);
    }
    
    //  
    public function length()
    {
        return count($this->_storage);
    }
}

9.正規表現を使用して、識別言語(htmlまたはxml)コードセグメントで指定されたラベルの指定属性値を抽出します(大文字と小文字に敏感ではなく、属性名値と等号の間にスペースがあるなど、属性値が不規則であることを考慮する必要があります).ここでtestラベルのattr属性値を抽出する必要があると仮定し、そのラベルを含む列を独自に構築してください.


10.socket関連関数(curl以外)を使用して、httpサーバの指定されたポートに指定された要求パス(例えばhttp://www.phpddt.com:8080/test ).要求には次の変数が含まれます.
ユーザー名(username):優しい一刀
パスワード(pwd):&123=321&321=123&
プロフィール(intro):Hello world!
httpサーバは、以下のクッキーを使用して、簡単なユーザ動作追跡を行う必要があります.
cur_query : you&me
last_tm : ...(前回要求されたunixタイムスタンプは、現在の要求時間の10分前とします)
cur_tm : ...(現在要求されているunixタイムスタンプ)
タイムアウトを10秒に設定し、リクエストを発行した後、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 "Failed to open socket to $url[host]";
fputs($fp, sprintf("POST %s%s%s HTTP/1.0/n", $url['path'], $url['query'] ? "?" : "", $url['query']));
fputs($fp, "Host: $url[host]/n");
fputs($fp, "Content-type: application/x-www-form-urlencoded/n");
fputs($fp, "Content-length: " . strlen($encoded) . "/n");
fputs($fp, "Cookie: $cookie/n/n");
fputs($fp, "Connection: close/n/n");
fputs($fp, "$post /n");
   while (!feof($fp)) {       echofgets($fp,128);   }   fclose($fp);
}
$url = ‘http://www.phpddt.com:8080/test ’;
$encoded=username=優しい一刀&pwd=
$post = array(
‘username’=>‘優しい一刀’,
‘ pwd => ‘&123=321&321=123&’,
‘ intro => ‘Hello world!’
);
$cookie = array(
‘ cur_query’ => ‘ you&me,
‘ last_tm’ =>time() -600,
‘cur_tm ‘=> time()
);
Post($url, $post, $cookie);
11.PHPスクリプトの実行効率(通常はスクリプト実行時間)とデータベースSQLの効率(通常はデータベースQuery時間)をどのようにチェックし、スクリプト実行とデータベースクエリーのボトルネックを特定し、分析しますか?
1.PHP    :

$begin=microtime(true); //           
// some code here       
$stop=microtime(true); //           
list($m0,$s0)=explode(" ",$begin);
list($m1,$s1)=explode(" ",$stop);
$runtime=($s1+$m1-$s0-$m0)*1000;
echo '<br />        :'.$etime-$stime.'  '; 

2.SQL    (       ):

$begin=microtime();
mysql_query($sql);
$stop=microtime();
list($m0,$s0)=explode(" ",$begin);
list($m1,$s1)=explode(" ",$stop);
$runtime=round(($s1+$m1-$s0-$m0)*1000,4);
echo '<br />        :'.$runtime.'ms';