ホームページ >バックエンド開発 >PHPチュートリアル >PHP 面接の質問の共有 (仕事を探している人は幸いです)

PHP 面接の質問の共有 (仕事を探している人は幸いです)

WBOY
WBOYオリジナル
2016-07-25 09:04:401166ブラウズ
  1. $tmp = 0 == "a"? 1: 2;
  2. echo $tmp;
  3. ?>
コードをコピー

int および string 型のキャストによる結果 1 ,0==="a"

0 == 0 それは本当でしょう PHP は型付けが弱いです。 。 $tmp = 0 === "a"? echo $tmp; これは 2 です

4. 文字列は次のとおりであることがわかっています: $str = "1109063 milo 1"; 1 行のコードを使用して、文字列内の 1109063 を $uid に、milo を $user に、1 を $type に割り当てます。 スペースは以下の通りです list($uid, $user, $type) =explode(" ", $str); それは次のとおりです list($uid, $user, $type) =explode("t", $str); list($uid, $user, $type) = sscanf($str, "%d %s %d"); $n = sscanf($auth, "%dt%s %s", $id, $first, $last);

5. 次のタイプの符号付き範囲と符号なし範囲をそれぞれリストします: TINYINT SMALLINT MEDIUMINT INT TINYINT-2^7 - 2^7-10 ~ 2^8-1 SMALLINT-2^15 - 2^15-1 0 ~ 2^16-1 MEDIUMINT-2^23 - 2^23-1 0 ~ 2^24-1 INT-2^31 - 2^31-1 0 ~ 2^32-1

6. 次の配列を 1 行の文字列に組み立てます。

  1. $arr = array(
  2. 'I', 'AM', 'MILO!', 'DAY', 'DAY', 'UP!'
  3. );
  4. ?>
  5. $str = strto lower(implode(" ",$arr));
コードをコピー

7. 次の関数を呼び出して関数を取得し、count の値を取得します。

  1. function get_list($cnd = array(), &$count = false)
  2. {
  3. // 疑似コードは $cnd を処理し、データを割り当てます
  4. $datas = 'i am call back' ;
  5. $count && $count = rand(1, 10000);
  6. return $datas;
  7. }
  8. ?>
  9. $count=1;
  10. $data = get_list($cnd,&$count);
  11. echo $count ;
コードをコピー

8. セッションメカニズムを置き換えるいくつかの方法。それぞれの利点と欠点を簡単に説明します。 mysql、memcache、cookie は固有のステータス識別コードを維持します

9. 以下の HTTP ステータス コードの考えられる原因とその対処方法 200、301、404、502、503 200 リクエストは成功し、リクエストで予期された応答ヘッダーまたはデータ本体がこの応答とともに返されます。 301 要求されたリソースは新しい場所に永久に移動されました。今後このリソースを参照する場合は、この応答で返されたいくつかの URI の 1 つを使用する必要があります。可能であれば、リンク編集機能を持つクライアントは、要求されたアドレスをサーバーから返されたアドレスに自動的に変更する必要があります。特に指定がない限り、この応答もキャッシュ可能です。 新しい永続 URI は、応答の Location フィールドで返される必要があります。これが HEAD リクエストでない限り、応答エンティティには新しい URI へのハイパーリンクと簡単な説明が含まれている必要があります。 これが GET または HEAD リクエストではない場合、リクエストの条件がそれに応じて変更される可能性があるため、ユーザーが確認しない限りブラウザは自動リダイレクトを禁止します。

注: HTTP/1.0 プロトコルを使用する一部のブラウザでは、送信した POST リクエストが 301 レスポンスを受け取ると、後続のリダイレクト リクエストは GET メソッドになります。

404 要求は失敗しました。要求されたリソースがサーバー上に見つかりませんでした。この状態が一時的なものなのか永続的なものなのかをユーザーに伝える情報はありません。サーバーが状況を認識している場合は、410 ステータス コードを使用して、内部構成メカニズムの問題により古いリソースが永続的に利用できず、ジャンプ アドレスがないことを通知する必要があります。 404 ステータス コードは、サーバーがリクエストが拒否された理由を明らかにしたくない場合、または他の適切な応答が利用できない場合に広く使用されます。 502 ゲートウェイまたはプロキシとして機能するサーバーが、リクエストを実行しようとしたときに、上流のサーバーから無効な応答を受け取りました。 503 一時的なサーバーのメンテナンスまたは過負荷のため、サーバーは現在リクエストを処理できません。この状態は一時的なもので、一定時間が経過すると元に戻ります。遅延が予想される場合は、応答に遅延を示す Retry-After ヘッダーを含めることができます。この Retry-After メッセージが与えられない場合、クライアントは 500 応答を処理するのと同じ方法でそれを処理すべきです (SHOULD)。 注: 503 ステータス コードの存在は、サーバーが過負荷になったときにそれを使用する必要があることを意味するものではありません。一部のサーバーは、単にクライアントからの接続を拒否したいと考えています。

200 OK すべて問題なく、GET リクエストと POST リクエストに対する応答ドキュメントが続きます。 301 Moved Permanently クライアントによって要求されたドキュメントは別の場所にあります。新しい URL は Location ヘッダーに指定されています。ブラウザは新しい URL に自動的にアクセスします。 404 Not Found 指定された場所にリソースが見つかりません。これもよくある反応です。 502 Bad Gateway サーバーがゲートウェイまたはプロキシとして機能する場合、次のサーバーにアクセスしてリクエストを完了しますが、サーバーは不正な応答を返します。 503 Service Unavailable メンテナンスまたは過負荷のため、サーバーが応答できませんでした。たとえば、データベース接続プールがいっぱいの場合、サーブレットは 503 を返すことがあります。サーバーは 503 を返すときに Retry-After ヘッダーを提供できます。

10. 次のデータベースがあります。元の mysql 拡張機能を使用して、ユーザー テーブルの最初の 10 行を接続してクエリします。 ホスト: 192.168.0.254 ポート: 3306 ユーザー: 1 人 パス:ピース データベース: db_user テーブル: ユーザー

  1. $link = mysql_connect("192.168.0.254:3306","one","piece") or die('接続できませんでした: '.mysql_error());
  2. mysql_select_db('db_user',$ link);
  3. $query = mysql_query("ユーザー制限 10 から * を選択");
  4. while($rs = mysql_fetch_array($query,MYSQL_ASSOC))
  5. {}
コードをコピー

11. autoload($class) を使用して、Lib ディレクトリ内のクラスの自動ロードを実現し、サブディレクトリと互換性を持たせる

  1. $request->action = lcfirst(implode(array_map(

  2. 'ucfirst',
  3. explode('-', strto lower($request->action))
  4. ))) ;
  5. ------------------------------------------------
  6. function __autoload($class)
  7. {
  8. $cls = strto lower(str_replace("_","/",$class));

  9. if(file_exsits(LIB.$cls. '.php'))
  10. {
  11. include_once(LIB.$cls.'.php');
  12. }
  13. else
  14. {
  15. die("{$class} クラスが見つかりません");
  16. }
  17. }
  18. 定義(" LIB",'/data/wwwroot/www.xx.com/lib/');
  19. $author = new Lib_Author();
  20. --------- --------- --------------------------------------
  21. 機能__authload($class)
  22. {
  23. $ cls =explode("_",$class);
  24. if(@is_dir($cls[1]))
  25. {
  26. if(@is_file($cls[2]))
  27. {
  28. include_once("CON_PATH".$ cls[1].'/'.$cls[2].".php");
  29. }
  30. else
  31. {
  32. dir('error');
  33. }
  34. }
  35. else if(@is_file($cls[1 ].".php"))
  36. {
  37. include_once("CON_PATH".$cls[1].".php");
  38. }
  39. else
  40. {
  41. dir('error' );
  42. }
  43. }
  44. -- --------------------------------------
  45. function __autoload($class)
  46. {
  47. $cls =explode("_",$class);
  48. $file = get_file($cls);
  49. if($file=='error')
  50. {
  51. die('error ');
  52. }
  53. include_once($file);
  54. }
  55. function get_file($dir)
  56. {
  57. if(is_array($dir))
  58. {
  59. foreach($dir as $k=>$v)
  60. {
  61. $tmpdir .= $v.'/';
  62. if(is_dir('CON_PATH'.$tmpdir))
  63. {
  64. Continue();
  65. }
  66. else if(is_file('CON_PATH'.$tmpdir.".php) "))
  67. {
  68. return 'CON_PATH'.$ tmpdir.".php";
  69. }
  70. else
  71. {
  72. return 'error';
  73. }
  74. }
  75. return 'error';
  76. }
  77. return 'error';
  78. }

  79. 定義 ("CON_PATH","/data/wwwroot/www.xx.com/app/cntroller/");

  80. $sb = newcontroller_sb();
  81. ---- ------------ --------------------
  82. function __autoload_my_classes($classname)
  83. {
  84. # ... 含めるロジックここのクラス
  85. }
  86. spl_autoload_register('__autoload_my_classes');
  87. ------------------------------------- ------------ ----------

コードをコピー

12. set_error_handle を使用してエラーをキャプチャし、出力します。レベルは次のとおりです。自分で決めた

  1. set_error_handle(callback,level)

  2. function callback(int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] ){
  3. }

  4. function dealErrorHandler($errno,$errstr,$errfile,$errline)

  5. {
  6. switch($errno){
  7. case E_USER_ERROR:
  8. echo "エラー [$errno] $errstr 致命的なエラーファイル $errfile の $errline 行目";
  9. break;
  10. case E_USER_WARNING:
  11. echo "私の警告 [$errno] $errstr":
  12. break;
  13. case E_USER_NOTICE:
  14. echo "私の通知 [$errno] $errstr";
  15. break;
  16. default:
  17. echo "unkonwn error type:[$errno] $errstr";
  18. break;
  19. }
  20. }
  21. set_erro_handler(dealErrorHandler);

  22. trigger_error("notice", E_USER_NOTICE);

  23. trigger_error("warning", E_USER_WARNING);
  24. trigger_error("error", E_USER_ERROR);

コードをコピー

13. PHP プログラムの通知警告をシールドする 2 つの方法を簡単に説明します。方法 変数を初期化し、ファイルの先頭にエラー レベルを設定するか、php.ini を変更して error_reporting を設定します。 set_error_handler と @suppress エラー

1. プログラムを追加します: error_reporting (E_ALL & ~E_NOTICE); 2. または、php.ini を変更します: error_reporting = E_ALL 次のように変更します: error_reporting = E_ALL & ~E_NOTICE 3.error_reporting(0);またはphp.inidisplay_errors=Offを変更します。 1 2 3 4 次のページ 最後のページ



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