ホームページ  >  記事  >  バックエンド開発  >  素晴らしい PHP 面接の質問の共有_PHP チュートリアル

素晴らしい PHP 面接の質問の共有_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:14:08876ブラウズ

1. nginx はどのようなネットワーク プロトコルを使用しますか?
nginx は下から上に、トランスポート層は tcp/ip を使用し、アプリケーション層はプロセスのスケジューリングを担当します


2。 . 出力結果がありません。考えられる原因と、この問題を解決するプロセスを簡単に説明します (ヒント: 文法には問題ありません)。 short_open_tag = サーバー上でオンになっていません。ini オープンショートタグ制御パラメータ: short_open_tag = On


3. 理由を簡単に説明します。この種の問題を解決するには? coercion, 0==="a"


0 === 0 それは本当でしょう
PHP は弱い型です。 。
$tmp = 0 === "a"? 1: 2;
echo $tmp; これは次のような文字列であることがわかります: $str = "1109063 milo 1";
1行を使用します。 コードは、文字列内の1109063を$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 行に 1 文字 String i am milo!
$arr = array(
'I', 'AM', 'MILO!', 'DAY', 'DAY', 'UP! '
);

$str = strto lower(" ",$arr);


7. 関数を呼び出して count の値を取得します
function get_list($cnd = array( ), &$count = false)
{
// 疑似コードは $cnd を処理し、データを割り当てます
$datas = 'i am call back'
$count && $count = rand( 1, 10000);
$datas ;

$count=1;
echo $count;セッションメカニズムを置き換えるために、それぞれについて簡単に説明します。


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 ヘッダーに指定されています。
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
テーブル: ユーザー


$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. Lib ディレクトリ内のクラス 自動読み込みとサブディレクトリとの互換性
$request->action = lcfirst(implode(array_map(
'ucfirst',
explode('-', strto lower($request->action))
)) );
----------------------------------------------- --- ----------
function __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'); }
--------------------------------------
function __autoload($class)
{
$ cls =explode("_",$class);
$file = get_file($cls);
{
die('error')
include_once( $file );
}
function 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
{ 'エラー' を返す
}
'エラー' を返す
}


定義された", "/data/wwwroot/www.xx.com/app/cntroller/");
$sb = newcontroller_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;
default:
echo "unkonwn error type :[$errno] $errstr";
break;
}
}OSet_erro_handler (dealerrorHandler);


Trigger_error ("警告"、e_user_warning);


13. 2 つのシールド PHP プログラムについて説明する通知警告メソッド


変数を初期化し、ファイルの先頭にエラー レベルを設定するか、php.ini を変更して error_reporting を設定します
set_error_handler と @ エラーを抑制します


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



14 。


シングルトンモードではどのようなデザインパターンがよく使われるのか、instanceofの役割


15.1023をバイナリで表現し、その計算過程を簡単に説明します


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 の 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番目の数を表します
式 An*2^(n-1) を使用して第 1 項、第 2 項、第 3 項、および n 項を計算します




16. 次の php プログラムの出力は何ですか? ;?php
$str = "aatbbtcc";
@list($a, $b, $c) =explode('t', $str);


aabbcc;//'t'はtで文字列を切らず、explode後の配列になります(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()
{
$umargs = func_num_args()
echo "引数の数: $numargs
n"; $numargs > = 2) {
echo "2 番目の引数: " . func_get_arg(1) . "
n";
$arg_list = func_get_args(); $i < $numargs; {
echo "引数 $i は次のとおりです: " . $arg_list[$i] . "
n";


param(1,2) ,3,4 ,5);




/**
2 * サンプルを書き終えた後、これで完成したと思っていましたが、call_user_func_array() について質問している人に会い、マニュアルを読みました
3 * 上記のテスト関数は次の例に簡略化できることがわかりました
4*/
5 関数 otest1 ($a)
6 {
7 echo( 'パラメータ' );
9
10 関数otest2 ( $a ,$b)
11 {
12 echo( '2 つのパラメータ' );
14
15 関数 otest3 ( $a,$b,$c)
16 {
17 echo( '3' ) ;
18 }
19
20 関数 otest ()
21 {
22 $num=func_num_args();
24 call_user_func_array( 'otest'.$num,$args ); 25 }
26
27 otest(1,2);






19. 関数内のグローバル変数を処理し、その値を変更するには、2 つのメソッドを使用します。 (グローバルおよび参照&)


$var=1;
function get_pra()
{
$var = 'xxx'}
echo $var; -- ';
get_pra();
---------------------------------
$test = 1;
$test1 = 2;
関数 get_yinyong()
グローバル $test1; = &$test1;
echo $test."n";
echo $test;
------------------------------
20. アプリケーションでは、ランダムなエラーが発生することがよくあります。 user テーブル 表示する 10 個のデータを取得します。この関数の実装方法を簡単に説明します。SQL 関数を使用したり、ステートメントで順序付けしたりすることはできません。
テーブル ユーザー フィールド uid、ユーザー名


この中で php を使用します。乱数を取得し、SQL文がこのIDより大きいか小さい場合は数十個に制限されます(データは10個保証されます)。十分に分散していないと、取得したデータのシャッフル関数によって配列が破壊されます。 array_rand は 10 を取り出します


21. 仮定 次の SQL ステートメントの 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); 2.phpの実行結果はなぜでしょうか? php->2.php


cookie、cookie time time()+3600




24 に問題があります。一般的に使用される PHP json エンコード関数、json をデコードするときに配列を返す方法について簡単に説明します。

25. mysql 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 にアクセスします。
$_SERVER["SERVER_NAME"] と $_SERVER["REQUEST_URI"] は net/index.php の後にありますか?


www.120.net xxx.120.net
/index.php /index.php


30. Linux でのファイルの属性は drwxr-xr-x で、その番号はその権限が 755 であることを示します。所有者 u には読み取り、書き込み、および変更の権限があります。 、それが属するグループ以外に、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; else {
throw new Exception ('Driver not found');
}
}}// MySQL ドライバーをロードします$mysql = 例:factory('MySQL');
// SQLite ドライバーをロードします
$sqlite = Example::factory('SQLite'); ','/data/wwwroot/www.want.com/core/ driver/');abstract class Example(){ private function __construct() { } public static function Factory($type) { if(include_once(DRIVER.$) type.'.php')) { return ExampleSon::singleton($ type); } else { throw new Exception("Driver is not found!") } } }class ExampleSon は Example{ // のインスタンスを保持します。 class private static $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 個の単語: private静的量、パブリック静的メソッド--------

2. よく使用されるマジック メソッドの例をいくつか示し、その機能を説明します。

マジック関数

1. __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() は
serialize の前に呼び出されます。オブジェクトが比較的大きく、シリアル化する前にいくつかのものを削除したい場合は、この関数を検討できます。

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 です
投稿テーブルの主キーは pid、トピックマークは tid です
スレッドと投稿は tid を通じて 1 対多で関連付けられます
現在、投稿のデータ量は 1 億件に達し、スレッド テーブルには 2,000 万件あります、1つのトピックに約5つの返信があります
それを設計してください テーブルを分割し、postsテーブルとthreadsテーブルをmysqlテーブルに分割します

5.mysqlメインライブラリ/クラスターライブラリがありますどうすればマスターとスレーブの分離を実現できますか。 php mysqlをクエリするときにphpプログラムでマスターとスレーブの配列ファイルを分離する利点は何ですか? いくつかのモデル関数を自分で転送し、クエリとインスタンス化のためにスレーブ設定をロードし、破壊する操作のインスタンス化のためにマスターをロードしますか?利点: 同時負荷容量が向上し、データの保守とセキュリティに有益であり、可用性が向上します。 欠点: データの同期が若干遅れます

6. いわゆるシングル サインについて簡単に説明します。 -on は、同期ログインと同期ログアウトを実現するためにユーザー センターを共有する複数のサイトにすぎません。

実際、最終的にログインするのはユーザーですが、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 にアクセスしてデータを取得するときにロックし、1 つのプロセスを mysql に移動させてデータを取得します、その他は memcache 内のデータを返します

public function get_cache($key) { if($this-> memcahe) { $var = $this->memcahe->get($this->pre.$ key); $valid = $this->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); return false; } } return $var; } return false;
public function set_cache($key, $var = null, $expire = 0) { if($this-> memcahe) { $expire = (int)$expire; $expire = ($expire ? $expire : $this->memcahe->set($this->pre.$key); , $var, 0, $expire+300); $this->memcahe->set($this ->pre.$key.'_lock', false, 0, $expire); memcahe->set($this->pre.$key.'_valid', true, 0, $expired); } 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 Single 実装 ArrayAccess{ private $name;プライベート静的 $_Instance = null;プライベート関数 __construct() { } 静的関数load() { if(null == self::$_Instance) { self::$_Instance = new Single(); self::$_Instance を返します。 } public function setName($name) { $this->name = $name; } public function getName() { $this->name を返します。 } /*** 4 つのメソッドを実装します * offsetExists()、要素が定義されているかどうかを識別するために使用されます * offsetGet()、要素の値を返すために使用されます * offsetSet()、要素の新しい値を設定するために使用されます * offsetUnset()、要素と対応する値を削除するために使用されます **/ public function offsetSet($offset, $value) { if (is_null($offset)) { $this->container[] = $value; } else { $this->container[$offset] = $value; public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$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(); //ジャックチョ $s["名前"]; //マイク
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.confindexer -c / usr/local/coreseek/etc/test.conf --all --rotate12。 この表には sphinx 量標準のインデックスを作成し、その方法を説明します。
「メインインデックス + 増量インデックス」メソッドを使用して、単一の方法でデータベース プールに追加され、毎回確認されます。


13. メインインデックスを再構築するときは、テーブルの最後のデータ ID にインデックスを付けます。これは、増量インデックス時にこの ID 以降のデータにインデックスを付けるだけでよく、メインインデックスを再構築するたびにこのテーブルを更新します。 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'], 'unknown') ) { $onlineip = $_SERVER['REMOTE_ADDR'];} ただし、HTTP_ 開始の要求ヘッダーはすべて、逆プロキシ環境下で、PHP が構築の HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR を受信できないことをどのように保護するか、ゲスト端末を構築できる情報に属します。值?



🎜15. たとえば、google、baidu などの大型ウェブサイトでは、異なるクライアント (携帯端末と PC など) を使用して同じ URL にアクセスする場合、表示される画面は異なりますが、これは原理ですか? 実際の解決策があれば、追加することもできます。




user_agent によって簡単に判断できますが、非常に予備的なものです

可能であれば、サーバーまたはモバイル端末の特性、または wap ゲートウェイの受け入れ情報などを通じて判断できます。





16.本番環境のphp.iniのmagic_quotes_runtimeの値は何に設定すればよいでしょうか? onoff17. File_get_contents は、PHP がリモート http インターフェイスを呼び出すときに使用できますが、リモート ホストにアクセスできない場合、または応答が遅すぎる場合、ローカルの PHP プロセスが長時間中断されるため、安定性に影響します。ローカルサーバー。PHP プロセスに時間がかかる場合にタイムアウトを回避するには




file_get_contents でタイムアウトを設定できます $ctx = stream_context_create(array( 'http' =>
)
)
);
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 脆弱性を防御するには、一般にリファラー、トークン、または検証コードが使用されます。tokenf メソッドは比較的信頼できます。

http://www.bkjia.com/PHPjc/326343.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326343.html技術記事 1. nginx はどのネットワーク プロトコルを使用しますか? nginx は下から上に、トランスポート層が tcp/ip を使用し、アプリケーション層が echo 'hello tusheng をスケジュールする役割を担っていると思います。 ;...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。