ホームページ >バックエンド開発 >PHPチュートリアル >PHP 面接の質問の共有、PHP テストの質問の共有_PHP チュートリアル

PHP 面接の質問の共有、PHP テストの質問の共有_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:44:351105ブラウズ

PHP 面接の質問の共有、PHP テストの質問の共有

1. nginx はどのネットワーク プロトコルを使用しますか?
nginx は下から上に、トランスポート層が tcp/ip を使用し、アプリケーション層が http を使用すると思います。
fastcgi プロセスのスケジュールを担当します
2. 出力結果がありません。その理由と、この問題を解決するための簡単なプロセスを示します。構文)
サーバー上で短いタグが有効になっていない可能性があります short_open_tag =オフに設定すると、php.ini は短いタグ制御パラメータをオンにします: short_open_tag = On
3. 次のプログラムの出力結果を簡単に説明し、その理由を簡単に説明します。この種の問題を解決するにはどうすればよいですか?
$tmp = 0 == "a"?
echo $tmp;
結果 1、0 ==="a"
0 == 0 は true でなければなりません
PHP は弱い型です。 。
$tmp = 0 === "a"? 1: 2;
echo $tmp; これは次のような文字列であることがわかります: $str = "1109063 milo 1";文字列内の文字 1109063 を置き換えるコードの 1 が $uid に、milo が $user に、1 が $type に割り当てられます
スペースは次のとおりです
list($uid, $user, $type) =explode( " ", $str);
t は次のとおりです
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 行の文字列に組み立てます。おはようございます!
$ arr = array(
'I', 'AM', 'MILO!', 'DAY', 'DAY', 'UP!'
?> = strto lower(implode(" ",$arr ));
7. 次の関数を呼び出して関数を取得し、count の値を取得します
function get_list($cnd = array(), &$count = false)
{
// 疑似コードは $cnd を処理し、値を割り当てます。 datas
$datas = 'i am call back';
$count && $count = rand(1, 10000); ?>
$count=1;
$data = get_list($ cnd,&$count);
echo $count; それぞれの利点と欠点を簡単に説明します。 , 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 行をクエリします。
host: 192.168.0.254
port: 3306
user: one
pass: Piece
database: db_user
table : ユーザー
$ link = mysql_connect("192.168.0.254:3306","one","piece") または die('接続できませんでした: '.mysql_error())
mysql_select_db('db_user',$link);
$query = mysql_query("select * from user limit 10");
while($rs = mysql_fetch_array($query,MYSQL_ASSOC))
{}

11. autoload($class) を使用してクラスの自動ロードを実現します。 Lib ディレクトリと互換性を持たせることができます。
$request->action = lcfirst(implode(array_map(
'ucfirst',
explode('-', strto lower($request->action))
)));
----- -------------------------------------------- ------ -----
関数 __autoload($class)
{
$cls = strto lower(str_replace("_","/",$class));


if(file_exsits(LIB. $cls.'.php '))
{
include_once(LIB.$cls.'.php');
}
else
{
die("{$class} クラスが見つかりません
}
}
定義済み("LIB", '/data/wwwroot/www.xx.com/lib/');
$author = new Lib_Author(); ------ ------------------------------------
関数 __authload($class)
{
$cls =explode ("_",$class);
if(@is_dir($cls[1]))
{
if(@is_file($cls[2]))
{
include_once("CON_PATH) ".$cls[1 ].'/'.$cls[2].".php");
}
else
{
dir('error');
}
}
else if(@is_file($ cls[1]." .php"))
{
include_once("CON_PATH".$cls[1].".php")
}
else
{
dir('error');
----- ----------------------------------
関数 __autoload($class)
{
$cls =explode(" _",$class);
$file = get_file($cls);
{
die('error');
include_once($)ファイル);
}
関数 get_file($dir)
{
if(is_array($dir))
{
foreach($dir as $k=>$v)
{
$tmpdir .= $v.' /';
if( is_dir('CON_PATH'.$tmpdir))
{
continue();
}
else if('CON_PATH'.$tmpdir.".php"))
{
return 'CON_PATH '.$tmpdir." .php";
else
{
return 'error';
return 'error'; ,"/data/wwwroot /www.xx.com/app/cntroller/");
$sb = 新しいコントローラー_sb(); ------ ----------
function __autoload_my_classes($classname)
{
# ... ここにクラスを含めるロジック
}
spl_autoload_register('__autoload_my_classes'); ------ -------------------------------------------- ------
12. set_error_handle を使用してエラーをキャプチャし、出力します。レベルは自分で決定します
set_error_handle(callback,level)
function callback(int $errno, string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] ){
}
function dealErrorHandler($errno,$errstr,$errfile,$errline)
{
switch($errno){
case E_USER_ERROR:
echo "エラー [$errno ] ファイル $errfile の $errline 行で $errstr 致命的なエラーが発生しました";
break;
case E_USER_WARNING:
echo "私の警告 [$errno] $errstr":
break;
case E_USER_NOTICE:
echo "私の通知[$errno] ] $errstr";
break; :
echo "unkonwn error type :[$errno] $errstr";
break;
}
}
set_erro_handler(dealErrorHandler);
trigger_error("notice", E_USER_NOTICE);
trigger_error( "warning", E_USER_WARNING);
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。 = E_ALL
次のように変更します: error_reporting = E_ALL & ~E_NOTICE
3.error_reporting(0); または php.inidisplay_errors=Off を変更します
14.
シングル ケース モードでよく使用されるデザイン パターン
15も使用します。 1023を2進数で表し、計算過程を簡単に説明します
10-2
1023%2=1
511%2 =1
255%2 =1
127%2 =1
63%2 =1
31%2 =1
15%2 =1
7%2 =1
3%2 =1
1%2 =1
0 = 0
-------------------------------------- ----------------------------- ------
1023
2^9=511

k=9
10 9 8 7 6 5 4 3 2 1
1 1 1 1 1 1 1 1 1 1
------------------------
1023 1
1023- 1/2=511 1
511-1/2=255 1
255-1/2= 127 1
127-1/2=63 1
63-1/2=31 1
31-1/2=15 1
15-1/2=7 1
7-1/2=3 1
3- 1/2=1 1
--------------------- ---------------------- ----
2-10
右端から始まる 2 進数の各ビットの数値を使用するだけです。 最初の数値は 2 の 0 乗で乗算され、2 番目の数値は 2 の 2 乗で乗算されます。 1 の累乗、3 番目の数値に 2 の 2 乗などを乗算して、n 番目の数値に 2 (n -1) の累乗を乗算し、その結果を加算します
例: 110011=1 *2^0+1*2^1+0*2^2+0*2^3+1*2^4+ 1*2^5=51
これは数式とみなすこともできます。これは An* 2^(n-1) An は 2 進数の右端から n 番目の数値を表します。
最初の項目、2 番目の項目、3 番目の項目は最後まで続きます。n 番目の項目は、式 An* を使用して計算できます。 2^(n-1) を加算すると
16. 次の php プログラムによって出力される内容は何ですか?
$str = "aatbbtcc"; c) =explode('t', $str);
echo $a,$b,$c;
aabbcc;//'t' は文字列を切り取りません。配列 (0=>"aatbbtcc") を作成します。 。 。 , 「t」に置き換えると「t」は切り取られます
17. どのようなエラー レベルが含まれ、return が必要ですか?
include はシステム警告を発行して実行を継続しますが、require はシステム警告を発行しますが、致命的なエラーを引き起こして終了します。
18. パラメータの数が不明な関数 (おそらく 5 または 50) があります。この関数を定義する方法
方法 1: PHP 組み込み関数を使用しない
方法 2: プロンプト func_num_args() func_get_arg( ) unc_get_args( )
function param()
{
$numargs = func_num_args();
echo "引数の数: $numargs
n";
if ($numargs >= 2) {
echo " 2 番目の引数は次のとおりです: " . func_get_arg(1) . "
n";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo " 引数 $i は次のとおりです: " . $arg_list[$i] . "
n"
param(1,2,3,4,5); #&* /
5 function otest1 ($a)
6 {
7 echo( 'パラメータ 1 つ' );
9
10 function otest2 ( $a,$b)
11 {
12 echo( '2パラメータ' );
13 }
14
15 関数 otest3 ( $a,$b,$c)
16 {
17 echo( 'Three' )
18 }
19
20 関数 otest()
21 {
関数内でグローバル変数を処理し (関数には return ステートメントがありません)、その値を変更するには、2 つのメソッド (global とreference&) を使用します。
$var = 'xxx';
echo $var.'--'
echo $var; --------------------
$test = 1;
$test1 = 2;
関数 get_yinyong()
{
グローバル $test1; "] = &$test1;
}
echo $test."n";
get_yinyong();
echo $test;
--------------------- ----------- --------
20. アプリケーションでは、ユーザー テーブルから 10 個のデータをランダムに取得して表示する状況がよくありますが、これをどのように実装するかを簡単に説明します。 SQL 関数と order by ステートメントは使用できません
テーブル ユーザー フィールド uid、ユーザー名

ユーザー テーブル内の間隔を推定します。SQL ステートメントがこの ID より大きいか小さい場合、数十個のデータを制限します (データは 10 個保証されます)。十分に分散していない場合、フェッチされたデータ シャッフル関数は配列をスクランブルし、array_rand がすぐに 10
21 を取得できると仮定します。クエリ後の uid の順序は何ですか。次のステートメントと、順序で uid に従って入力する方法
select uid from user where uid in (10, 1, 3, 8, 11, 4, 7); 印象的な結果は 1,3,4,昇順で 7、8、10、11 の種類があります。人間が直接変更した場合、途中の ID の一部が昇順にならない可能性があるため、状況は特殊で不確実です。 uid の順序で、ID に基づいてクエリ結果配列の値を取得し、それらを新しい配列に入れることができます。
22. PHP を使用して文字列内の文字を **
preg_replace('/[ a-zA-Z]*/','**',$str); 文字を指定すると、 str_replace('ooxx',' **',$str); と表示されます。実行シーケンス 1.php->2.php
Cookie に問題があります time()+3600
24 PHP でよく使用される JSON エンコード関数を簡単に説明します。 json をデコードするときに配列を返す
25. SQL ステートメントに '/ などの単語がある場合、SQL ステートメントの各特定の値をどうするか
mysql_real_escape_string
26 php でヘッダー情報を設定する方法
header ('');
27. 2.php
1.php
setcookie('test', 'cookie_test ', 3600); の出力結果を教えてください。 >
2.php
$cookie = isset($_COOKIE['test']): 'cookie'
;ここ
1
概要
a. include または include_once が関数またはメソッドで呼び出されない場合、出力結果は同じになります。
b. include または include_once が関数またはメソッドで呼び出された場合、2 回目以降の呼び出しの結果が必要な場合は、 include_once の代わりに include を使用する必要があることに注意してください。
28. call_user_func の関数を簡単に説明します
関数またはクラス内の関数を呼び出し、最初のパラメーターの値を返します。同様の関数 call_user_func_array
29. nginx が設定されていると仮定して、server_name www.120.net xxx.120.net にアクセスします。
http://www.120.net/index.php および http://xxx.120.net/ にアクセスします。 index.php、
$_SERVER["SERVER_NAME"] と $_SERVER["REQUEST_URI"] はそれぞれ何ですか?
www.120.net xxx.120.net
/index.php /index.php
30 にあるファイルです。 linux 属性は drwxr-xr-x です。番号は、権限が
であることを示します。ディレクトリの権限は 755 です。所有者 u は、読み取り、書き込み、および変更の権限を持ち、彼が属するグループは g を持ちます。所属するグループ以外に、o には読み取りおよび変更の権限があります。
31. 理論上の 1Mbps の計算方法
1*1024/8
1M=1024KB
1KB=1024B
1B=8bit
パート 2
1. シングルトン + ファクトリ設計パターン抽象クラスの簡単な実装 例{ // パラメータ化されたファクトリ メソッド public static function Factory($type) { if (include_once 'Drivers/' . $ type .'.php') {
$classname = 'Driver_' . $type;
return new $classname;
throw new Exception ('ドライバが見つかりません')
}}// MySQL Driver$mysql = Example::factory('MySQL');
// SQLite ドライバーをロードする
$sqlite = Example::factory('SQLite')
defined('DRIVER','/data/wwwroot/www) .want.com/core/driver/');抽象クラス Example(){ プライベート関数 __construct() { } パブリック静的関数 Factory($type) { if(include_once(DRIVER.$type.'.php')) { return ExampleSon::singleton($type); } else { throw new Exception("ドライバーが見つかりません! "); } } }class ExampleSon は Example{ // クラスのインスタンスを保持します private static $instance; private class instance // プライベート コンストラクター。オブジェクトの直接作成を防止します。 private function __construct() { echo ' I am construction' } // シングルトン メソッド public static function singleton() { if (!isset(self::$instance) )) { //静的プライベート クラス インスタンスが設定されていない場合は作成 $c = __CLASS__; // クラス名を取得 self::$instance = new $c } return self::$instance } // メソッドの例 public; function bark() { echo 'Woof!'; } // ユーザーによるインスタンスのクローン作成を禁止します public function __clone( ) // クローンは許可されません {trigger_error('クローンは許可されません。', E_USER_ERROR); キーワード:
1 プライベート静的メンバー変数
2 __CLASS__ は現在のクラス名を取得します
3 パブリック静的メソッドはシングルトンを取得します
4 __clone() メソッドをオーバーライドします
----10 語: プライベート静的変数、パブリック静的メソッド----- ---
2. よく使用されるマジック メソッドの例とその機能を説明します。
カスタマイズされたコンテンツをオブジェクトとして表示する場合は? __construct()
オブジェクトをインスタンス化するときに呼び出されます。
__constructとクラス名と関数名の関数が同時に存在する場合、__constructが呼び出され、もう一方は呼び出されません。
2. __destruct()
オブジェクトが削除されるか、オブジェクトの操作が終了するときに呼び出されます。
3. __call()
オブジェクトは特定のメソッドを呼び出します
メソッドが存在する場合は直接呼び出されます
存在しない場合は __call 関数が呼び出されます。
4. __get()
オブジェクトの属性を読み取る場合、
属性が存在する場合は属性値が直接返されます。
存在しない場合は __get 関数が呼び出されます。
5. __set()
オブジェクトの属性を設定する場合、
属性が存在する場合は値が直接割り当てられます。
存在しない場合は __set 関数が呼び出されます。
6. __toString()
オブジェクトを印刷するときに呼び出されます。 echo $obj; または print $obj; など。 __clone()
オブジェクトのクローンを作成するときに呼び出されます。例: $t=new Test();$t1=clone $t; __sleep()
はシリアル化の前に呼び出されます。オブジェクトが比較的大きく、シリアル化する前に少し削除したい場合は、この関数を検討できます。
9. __wakeup() は、シリアル化解除時に呼び出され、オブジェクトの初期化作業を実行します。
10. __isset()
オブジェクトの属性が存在するかどうかをチェックするときに呼び出されます。例: isset($c->name)。
11. __unset()
オブジェクトのプロパティの設定を解除するときに呼び出されます。例: unset($c->name)。
12. __set_state()
var_export が呼び出されたときに呼び出されます。 __set_state の戻り値を var_export の戻り値として使用します。
13. __autoload()
オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドが呼び出されます。
魔法定数
1. __LINE__
ファイル内の現在の行番号を返します。
2. __FILE__
ファイルのフルパスとファイル名を返します。インクルード ファイルで使用された場合は、インクルード ファイル名を返します。 PHP 4.0.2 以降、__FILE__ には常に絶対パスが含まれますが、それより前のバージョンには相対パスが含まれる場合がありました。
3. __FUNCTION__
関数名を返します (PHP 4.3.0 で新しく追加されました)。 PHP 5 以降、この定数は定義されたとおりの関数名を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。
4. __CLASS__
クラスの名前を返します (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。
5. __METHOD__
クラスのメソッド名を返します (PHP 5.0.0 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。
3. クラスの静的メソッドとインスタンス化されたクラスのメソッドの比較とメリットとデメリット
4. フォーラムがある
スレッドテーブルはトピックとタイトル情報を記録する
投稿テーブルはトピックの内容、返信内容、その他の情報を記録する
スレッドテーブルの主キーは tid
postsテーブル 主キーはpid、トピックマークはtidです
tidを介してスレッドと投稿を1対多で関連付けます
現在投稿データ量は1億件に達し、スレッドテーブルは2000万件、スレッドテーブルは約5件ありますトピックごとの返信
サブテーブルを設計し、post テーブルと thread テーブルを mysql テーブルに分割してください
5. MySQL のメイン ライブラリ/クラスター ライブラリが存在します。php をクエリするときに、php プログラムでマスターとスレーブの分離を実現するにはどうすればよいですか。 mysql のマスターとスレーブの分離とマスターとスレーブの配列の構成の利点は何ですか? いくつかのモデル関数を自分でファイル、シール、転送し、クエリ用にスレーブ構成のインスタンスをロードし、データを破壊する操作用にマスターをロードします。同時負荷容量は、データの保守とセキュリティに有益で、可用性が向上します。 欠点: データ同期に多少の遅延が発生します
6 UCenter のシングル サインオン メカニズムについて簡単に説明します
いわゆるシングル サインオンは何もありません。同期ログインと同期ログアウトを実現するには、複数のサイトでユーザー センターを共有するだけではありません。
実際、最終的にログインするのはユーザーですが、ajax (JavaScript は src を使用して非同期クロスドメイン呼び出しを行う) を使用しているため、ユーザーはそれに気づきません。
そして、p3p ヘッダー、異なるドメイン名、シングル サインオン (ucenter が使用する Cookie) を使用して実装されます。
欠点は、Ajax クライアント リクエストを使用することです。アプリケーションが 10 個を超えると、ログイン速度が遅くなります。
7. Linux 関連のパッケージがあります http://www.120.net/test-1.0.0.tar.gz
a. それを /usr/local/src にダウンロードします
b. ソース コードをコンパイルしてインストールします。 /usr/local/test ディレクトリにコピーします
c. /usr/local/mysql ディレクトリにある mysql パッケージに依存します
ダウンロード、コンパイル、インストールのプロセスを書き込みます
wget - c http://www.120. net/test-1.0.0.tar .gz/usr/local/srctar zxvf /usr/local/src/test-1.0.0.tar.gzcd /usr/local/src/test-1.0.0./configure - -prefix=/usr/local/test --exec--prefix=/usr/local/mysqlmake testmake install
8. PHP の memcache 拡張機能を使用して、データを取得する関数を作成します (キャッシュが期限切れになり、タイムアウトしてロックされます)
a. データがタイムアウトしたら、mysql に移動してデータを取得します。取得後、memcache を更新します。b. mysql にアクセスしてデータを取得し、他のプロセスがデータを返します。メムキャッシュ
public function get_cache($key) { if($this->memcahe) { $var = $this->gt;memcahe->get($this->pre.$key); ;memcahe->get($this->pre.$key.'_valid'); if($var && !$valid) { $lock = $this->memcahe->get($this-> ;pre.$key.'_lock'); if(!$lock) { $this->memcahe->set($this->pre.$key.'_lock', true, 0, 60); false を返す; } } $var を返す; }
パブリック関数 set_cache($key, $var = null, $expire = 0) { if($this->memcahe) { $expire = (int)$ $expire = ($expire ? $expire : $this->memcahe->set($this->pre.$key, $var, 0, $expire+300) ); $this->memcahe->set($this->pre.$key.'_lock', false, 0, $expire); $this->memcahe->set($this-> ;pre.$key.'_valid', true, 0, $expire); return true; } return false;
9. キューとスタックの原理を簡単に説明します
両方とも 1 次元の配列として扱うことができます。キューは前進します 先出し、デキューは列の先頭でのみ可能、インラインは列の最後でのみ可能、スタックは後入れ先出し、プッシュとポップはスタックの先頭からです
とはスタックの動作原理は?
スタックは一種の抽象データ構造であり、その動作メカニズムは後入れ先出しです。新しい項目をスタックにプッシュすると、すでにスタック上にある項目はすべてスタックの奥深くにプッシュされます。同様に、スタックから項目を削除すると、スタック内の他のすべての項目がスタックの一番上に移動します。スタックの最上位の項目のみをスタックから削除でき、項目はスタックにプッシュされたのと同じ順序でスタックから残ります。自動販売機の積み込みと受け取りのプロセスを思い出して理解するとよいでしょう。
10. arrayaccess は次のように定義されており、配列の実装に使用します
ArrayAccess {
/* Methods */
abstract public boolean offsetExists ( string $offset )
abstract publicmixed offsetGet ( string $offset )
abstract public void offsetSet ( string $offset , string $value )
abstract public void offsetUnset ( string $offset )
}
class 単一の実装 ArrayAccess{ private $name; private function __construct() { } static function load() { if(null = = self::$_Instance) { self::$_Instance = new Single(); } return self::$_Instance; } public function setName($name) { $this->name = $name; } public function getName () { return $this->name; } /*** 4 つのメソッドを実装します * offsetExists()、要素が定義されているかどうかを識別するために使用されます * offsetGet()、要素の値を返すために使用されます * offsetSet()、要素の新しい値を設定するために使用されます * offsetUnset()、 used 要素と対応する値を削除します **/ public function offsetSet($offset, $value) { if (is_null($offset)) { $this->container [] = $値; } else { $this->container[$offset] = $value; } } public function offsetGet($offset) { return isset($this->container[$offset]) ? ->コンテナ [$offset] : null; } public function offsetExists($offset) { return isset($this->container[$offset]) } public function offsetUnset($offset) { unset($this->) ;container[$ offset]); }}$s = Single::load();$s->setName("jack");$s["name"] = "mike";echo $s-> getName(); //jackecho $s["name"]; //mike
11. coreseek のインストール ディレクトリは /usr/local/coreseek であるとします。設定ファイルは /usr/local/coreseek/etc/test です。 conf
インデックス名は post です
a. インデックスを作成します
b. サービスを開始します
c. インデックスを再構築します (再構築プロセス中に検索サービスがまだ利用可能であることを確認します)
indexer -c /usr/local/coreseek/ etc/test.conf --allsearchd -c /usr/local/ coreseek/etc/test.conf Indexer -c /usr/local/coreseek/etc/test.conf --all --rotate12 があるとします。テーブルを作成し、そのテーブルに対してスフィンクスの増分準リアルタイム インデックス作成を実行します。 ソリューションについて説明します。
「メイン インデックス + 増分インデックス」メソッドを使用して、データベースにカウント テーブルを追加して、テーブルの最後のデータ ID を記録する簡単な実装があります。メイン インデックスが再構築されるたびにインデックス付きテーブルが作成されるため、増分インデックスが作成される場合は、この ID の後のデータにインデックスを付けるだけで済み、メイン インデックスが再構築されるたびにこのテーブルを更新する必要があります。
13. PHP コード:
$i = 97;$a = ($i++) + (++$i) + $i ;$b = (--$i) + ($i--) + $i + 6;
echo "$i, $a, $b";出力結果は何ですか
97, 295, 299
97
97+99+99
98+98+97+6
14. 次のコードを使用してクライアント IP を取得します: if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP');} elseif( getenv ('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR');} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR') , 'unknown')) { $onlineip = getenv('REMOTE_ADDR');} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], '不明 ')) { $onlineip = $_SERVER['REMOTE_ADDR'];} ただし、HTTP_ で始まるリクエスト ヘッダーは、クライアントによって偽造される可能性のある情報です。リバース プロキシ環境では、PHP が偽造された HTTP_CLIENT_IP を受信しないようにする方法があります。 、HTTP_X_FORWARDED_FOR 値?
15. たとえば、Google や Baidu などの大規模な Web サイトでは、異なるクライアント (携帯電話と PC など) を使用して同じ URL にアクセスすると、表示されるページが異なります。 実用的な解決策を提供できればボーナスポイント。
それは user_agent によって簡単に判断できますが、非常に予備的なものです
可能であれば、サーバーまたはモバイル端末の特性、または WAP ゲートウェイの受け入れ情報などを使用してください。環境php.iniを設定しますか? onoff17. File_get_contents は、PHP がリモート http インターフェイスを呼び出すときに使用できますが、リモート ホストにアクセスできない場合、または応答が遅すぎる場合、ローカル PHP プロセスが長時間中断されるため、安定性に影響します。ローカルサーバー。PHP プロセスが長時間かかる場合、タイムアウトを回避するにはどうすればよいですか?
file_get_contents でタイムアウトを設定できますか? )
);
file_get_contents("http://www.want.com/", 0, $ctx);
curl を使用してリモート http インターフェイスを取得することもできます。curl_setopt($s) も設定する必要があります。 ,CURLOPT_TIMEOUT,$timeout);
18. 上記の質問と同じですが、DNS クエリが遅すぎるとタイムアウトが発生します。 19. mysql 文字セット set names * コマンドによって設定されるシステム変数はどれですか? (ACE) A. Character_set_client B. Character_set_system C. Character_set_results D. Character_set_server E. Character_set_connection F. Character_set_database20. 大文字と小文字を区別しない照合規則はどれですか? (A) A. utf8_general_ci B. utf8_general_cs C. utf8_general_bin21. XSS 攻撃を防ぐ方法
strip_tags を最初にフィルタリングすることも、特殊なタグを処理して ASCII コードに置き換える独自のフィルタ関数を作成することもできます。 Web アプリケーション側で CSRF 脆弱性を防御するには、一般にリファラー、トークン、または検証コードが使用されます



http://www.bkjia.com/PHPjc/1048753.html

www.bkjia.com

http://www.bkjia.com/PHPjc/1048753.html技術記事 PHP 面接の質問の共有、PHP テストの質問の共有 1. nginx はどのネットワーク プロトコルを使用しますか? nginx は下から順に tcp/ip を使用し、アプリケーション レイヤーは http を使用すると思います。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。