phpよくある面接問題

4056 ワード

一.基本知識点1.1 HTTPプロトコルにおけるいくつかのステータスコードの意味:503 500 401 4040400200301 302.200:要求が成功し、要求されたデータが返されます.301:永続リダイレクト.302:一時行リダイレクト.401:現在のリクエストにはユーザー認証が必要です.403:サーバは、実行要求を拒否します.すなわち、権限がありません.404:要求に失敗し、要求されたデータはサーバ上で発見されなかった.500:サーバエラー.一般サーバ側プログラム実行エラー.503:サーバの一時的なメンテナンスまたはオーバーロード.この状態は一時的です.
1.2 Include require include_once require_onceの違い処理に失敗した方法は異なります.requireが失敗した場合、致命的なレベルのエラーが発生し、プログラムの実行を停止します.includeが失敗した場合、警告レベルエラーが1つしか発生せず、プログラムは実行を続行します.
include_once/require_onceはinclude/requireがエラーを処理する方法と同様に、含まれているファイルコードがすでに存在する場合、含まれていないことが唯一の違いです.
1.3(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.4 error_Reportingなどのデバッグ関数はerror_を使用します.Reporting()関数は、実行時にphpを設定ことができる.ini中error_Reporting命令.したがって、表示されるエラーレベルは、プログラム内でいつでも調整できます.この関数を使用するとdisplay_errorsはオープン状態でなければなりません.
1.5マルチプロセス/スレッドが同時に1つのファイルを読み書きする問題を解決するためにコードを書く.PHPはマルチスレッドをサポートせず、phpのflockロック関数を使用して実現できます.$fp = fopen("/tmp/lock.txt", "w+");if(flock($fp,LOCK_EX){//排他型ロックfwrite($fp,"Write something here");flock($fp,LOCK_UN);//ロック解除}else{echo"Couldn't lock the file!";fclose($fp);
1.6アップロードファイルのコードを書きます.upload.html Send this file:
upload.php $uploads_dir = '/uploads'; foreach ($_FILES["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["tmp_name"][$key]; $name = $_FILES["name"][$key]; move_uploaded_file($tmp_name, "$uploads_dir/$name"); } }
1.7 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 tableの場合、InnoDBはテーブルを再構築せず、1行1行削除します.g.LOAD TABLE FROM MASTERの操作はInnoDBには効かない、解決策はまずInnoDBテーブルをMyISAMテーブルに変更し、データをインポートしてからInnoDBテーブルに変更するが、使用する追加のInnoDB特性(例えば外部キー)のテーブルには適用されない.h.MyISAMはテーブルロックをサポートし、InnoDBはローロックをサポートする.
二.Webアーキテクチャ、セキュリティ、プロジェクト経験
2.1 MySQLデータベースは発表システムのストレージとして、一日に5万件以上の増分を行い、3年間運行する予定で、どのように最適化しますか?
a.良好なデータベース構造を設計し、一部のデータの冗長性を許可し、joinクエリーをできるだけ避け、効率を高める.
b.適切なテーブルフィールドデータ型とストレージエンジンを選択し、適切なインデックスを追加する.
c.mysqlライブラリの所有者は読み書きから分離します.
d.規則を探して表を分け、単表のデータ量を減らしてクエリー速度を高める.
e.memcached,apcなどのキャッシュメカニズムを追加します.
f.頻繁に変更しないページは,静的ページを生成する.
g.効率的なSQLを書く.例えばSELECT*FROM TABELからSELECT field_1, field_2, field_3 FROM TABLE.
2.2大トラフィックのウェブサイトに対して、どのような方法で各ページのアクセス量統計問題a.サーバーが現在のアクセス量をサポートできるかどうかを確認します.b.データベースアクセスの最適化.参考2.3 c.画像のチェーンを盗むなど、外部アクセスリンク(チェーンを盗む)を禁止します.d.ファイルのダウンロードを制御する.e.異なるホストを使用して分岐する.f.ブラウズ統計ソフトを用いて,アクセス量を把握し,的確に最適化する.
2.3正規表現を作成し、Webページ上のすべてのJS/VBSスクリプトを考慮します(タグとその内容を削除します):(9).
答://].*?>.*?/si
2.4 PHPで前日を印刷する時間形式は2006-5-10 22:21:21
答:echo date('Y-m-d H:i:s',strtotime('-1 day');
2.5 echo(),print(),print_r()の違い
答え:echoは言語構造で、戻り値がありません.print機能はechoと基本的に同じで、違いはprintが関数であり、戻り値がある.print_rは、配列オブジェクトを出力するための再帰印刷である
2.6文字列の反転を実現する方法
答:.strrev関数を使って、PHP内蔵のを使って自分で書くことを許さない:
strrev($str)
{
    $len=strlen($str);
    $newstr = '';
    for($i=$len;$i>=0;$i--)
    {
        $newstr .= $str{$i};
    }
    return $newstr;
}

2.7中文字列の文字列切り取りを実現する方法.
答え:mb_substr()
2.8 phpの環境変数でWebアドレスの内容を得るにはどうすればいいですか?ipアドレスはどうやって手に入れますか?
答え:$SERVSR[‘REQUEST_URI’] , $_SERVER[‘REMOTE_ADDR’]
2.9 2つの日付の差を求めて、例えば2007-2-5~2007-3-6の日付の差を求めます:(strtotime(‘2007-3-6’)-strtotime(‘2007-2-5’)/3600*24
2.10 javascriptでウィンドウがマスクされているかどうかを判断する方法
答え:open()の戻り値を取得しnullであればマスクします