PHPのインタビューの質問(E)

エラー例外処理に変換することができますどのような機能1、PHP?

 set_error_handler()は、エラーが発生したときに自動的にコールバック処理を指定することによって、コールバック関数を指定することができます。コールバック関数に新しい例外をスローします。

2、修復XSSの脆弱性は何?

 すべてのエントリをフィルタします。ブラウザへの入力を表示するように許可されていないホワイトリストコンテンツフィルタリングパラメータは、ユーザ入力JSタグで出力をディセーブル。

3、PHPのSAPIは、共通の作業魔法のですか?

 PHP-FPM

4、InnoDBのいくつかのロック機構はありますか?

       1)共有/排他ロック

        2)意図的ロック

        3)レコードのロック

        4)ロックギャップ

        5)挿入ロックの意図

        6)プロキーロック

        7)増加セルフロック

5、毎週金曜日午前1時00分 - 2時5分ごとに一度書き込む方法のcrontabコマンドを実行するには?

/ 5 1-2 * * 5 /bin/bash/home/test/test.sh

6.データベース事業とは何ですか?

トランザクションのようであるデータベース操作の順序集合の単位すべての操作のグループが成功した場合、トランザクションが存在し、1つの操作のみで障害が発生しているトランザクションが成功しない場合でも、成功したとみなされます。すべての操作が完了すると、トランザクションがコミットされ、それが他のすべてのデータベース・プロセスの役割を修正します。操作が失敗した場合、トランザクションはロールバックされ、しっかりしています操作の影響がキャンセルされています。

7、永続化機構(Redisのがハングアップした後、再起動データを復元できるようにする方法)Redisの?

呼ばれる永続的な方法Redisのスナップショットを、別の方法があるにちょうどアペンドファイルRedisのスナップショットを作成することにより、ある時点で、メモリ内部に格納されたデータのコピーを取得することができます。Redisのスナップショットを作成した後、スナップショットをバックアップすることができ、スナップショットは、同じデータをサーバーのコピーを作成するために他のサーバーにコピーすることができ(Redisの主構造体から、主に性能Redisのを改善するために使用される)、またスナップショットサーバを再起動するために適所に残されてもよいですときに使用します。

問題の8、キャッシュとキャッシュ貫通雪崩ソリューション?

キャッシュ雪崩:

     アドバンス:クラスタ全体のRedisの高可用性を確保しようとすると、マシンのダウンタイムはできるだけ早く作ることがわかりました。適切な選択メモリ制圧戦略を

     問題:ローカルキャッシュ+ hystrix制限にehcache&ダウングレード、MySQLの回避が出崩壊します

     その後:使用Redisの永続化メカニズムは、できるだけ早くデータキャッシュ回復を保存しました

キャッシュの浸透:

     効果的に問題を解決することができますキャッシュを貫通する多くの方法がありますが、最も一般的なの使用であるブルームフィルタは、データの特定の不存在下で十分に大きなビットマップにすべての可能なデータのハッシュは、ビットマップになりますこれ基盤となるストレージ・システム上のクエリの圧力を回避傍受オフ、。そこよりシンプルで、粗な方法は、(我々の使用はこれです)クエリが空(データが存在しないか、またはシステム障害)データを返した場合、我々は、もあり、まだ空のキャッシュ結果を参照してください、それはさん有効期限は非常に短くない5分以上になります

9.なぜ、シングルスレッドさRedisのはとても速くていますか?

メモリに格納されている1)データ         

2)多重化I / Oを持ちます         

3)単一のねじ

10、一連の手順は、安全のために不可欠である、に注意を払う必要があり、開発のどのセキュリティメカニズムについて話してください?

1)抗遠隔提出       

2)抗SQLインジェクション、濾過特殊コード

3)確認コードを使用して、灌漑RIを防ぎます。

11は、大規模なトラフィックの多いサイトのために、あなたは交通問題を解決する方法の種類を取りますか?


1)、キャッシュの有効利用は、キャッシュヒット率増加
ロードバランシング使用、2)
CDNストレージを使用して、3)静的ファイル加速
4)、データベースの使用低減の考え
5)、ビューのボトルネック統計ここで
6)、リバースプロキシ

図12に示すように、一般的に使用される機能PHPアレイ処理?(参照キー「パラメータ」と「戻り値」関数)

array()配列を作成

count()配列内の要素の数を返します

array_push()アレイの端部(スタック)に挿入された1つの以上の要素が

array_column()カラムの単一の入力配列の値を返します

array_combine()二つの配列を組み合わせることにより、新しい配列を作成します

array_reverse()逆の順序で配列を返します

array_unique()配列内の重複する値を削除します

in_array()その指定された値をチェックアレイ

13、PHPの文字列処理関数の共通?(参照キー「パラメータ」と「戻り値」関数)

trim()移除字符串两侧的空白字符和其他字符

substr_replace()把字符串的一部分替换为另一个字符串

substr_count()计算子串在字符串中出现的次数

substr()返回字符串的一部分

strtolower()把字符串转换为小写字母

strtoupper()把字符串转换为大写字母

strtr()转换字符串中特定的字符

strrchr()查找字符串在另一个字符串中最后一次出现

strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感)

strrev()文字列を逆に

strlen()文字列の長さを返します。

str_replace()また、文字列の一部の文字(大文字と小文字を区別)

print()1つのまたは複数の文字列の出力

explode()文字列配列を破ります

is_string()変数が文字列であるかどうかを検出

strip_tags()HTMLタグの文字列から削除

mb_substr()機能は、中国語と英語を切断するために使用されます

14、PHPは、時間の一般的に使用される機能を処理しますか?(参照キー「パラメータ」と「戻り値」関数)

date_default_timezone_get()デフォルトのタイムゾーンを返します。

date_default_timezone_set()デフォルトのタイムゾーンを設定します。

date()現地時間/日付をフォーマットします。

getdate()戻り値日付/時刻の情報。

gettimeofday()現在時刻情報を返します。

microtime()これは、ミリ秒数現在の時刻を返します。

mktime()日付のUnixタイムスタンプを返します。

strtotime()Unixタイムスタンプに解決のいずれかの英語のテキスト記述の日付または時刻。

time()現在の時間のUnixタイムスタンプを返します。

15、一般的に使用される機能PHPファイル操作?(参照キー「パラメータ」と「戻り値」関数)

①  はfopen()ファイルまたはURLをオープンします

はunlink()ファイルを削除します

文字列にファイル全体を読み込むためのfile_get_contents()

fwriteのは()ファイルを書き込みます

⑤  コピーファイルへのコピー()

⑥  fcloseをオープンへのファイルポインタをクローズします

⑦  名前の変更()関数は、ファイルまたはディレクトリの名前を変更など、

16、一般的に使用される機能のディレクトリ(フォルダ)のPHP操作?(参照キー「パラメータ」と「戻り値」関数)

のopendir()オープンディレクトリ

②  RMDIR()は空のディレクトリを削除します

③  のreaddir()は、ディレクトリ/ファイル名のオープンAサブディレクトリを取得します。

ディレクトリを作成するには、mkdir()

⑤  名前の変更()関数は、ファイルまたはディレクトリの名前を変更します

⑥  closedirの()閉じディレクトリ

17、どのようにSQLを最適化するには?

A:(1)適切なストレージエンジンの選択
MySQLでの、例えば、二つのストレージのMyISAMとInnoDBのエンジンなど、各エンジンの両方の利点と欠点があります。
クエリの多数を必要とするいくつかのアプリケーションに適しますが、書き込みが多数のためのMyISAMは非常に良いではありません。あなたが唯一のフィールドを更新する必要がある場合であっても、テーブル全体が読み取り動作が完了するまでのプロセスを読み取ることができない場合でも、ロックアップ、および別のプロセスされます。さらに、のためのMyISAM  SELECT COUNT(*) な超高速の計算が非常にあります。
InnoDBの傾向は、いくつかの小さなアプリケーションのために、それはMyISAMテーブルよりも遅くなり、非常に複雑なストレージエンジンになります。しかし、それはそうするとき、書き込み、より多くの、より良いでしょう、「行ロック」をサポートしています。トランザクション:そして彼はまたのような、より高度なアプリケーションをサポートしています。


データタイプ(2)最適化されたフィールド
原則として、より小さいカラム高速。あなただけ(たとえば辞書テーブルとして、構成テーブル)テーブルベールの数の列を持っている場合、我々はINTキーを使用してショットを呼び出す理由はない、そして、使用MEDIUMINT、SMALLINT TINYINT以下は、より経済的になります。あなたはより良いDATEよりDATETIMEを使用して、記録時間がない場合。もちろん、あなたも拡張のための十分な十分な余地を残しておく必要があります。


インデックスを追加するには、検索フィールド用(3)
インデックスは、必ずしも主キーまたは一意のフィールドではありません。あなたのテーブルならば、あなたは常に頻繁に検索を行うために使用されるフィールドを持っている必要がありますが、フィールドを検索したい場合を除き、それは、それをインデックス優れている大きなテキストフィールドです、それはフルテキストインデックスを作成する必要があります。


選択*を使用して(4)を避けるには、データベースからのより多くのデータを読み、その後、クエリが遅くなります。そして、データベースサーバーとWebサーバーに2台の別々のサーバがある場合、それはネットワークの負荷が増加します。でもあなたは、データテーブルを照会するだけでなく、*ワイルドカードを使用しないように試してみたいすべてのフィールド場合は、内蔵のフィールド定義をトラブルシューティングすることは、より利便性を与える可能性が提供します。


代わりENUM VARCHAR使用の(5)
列挙型は非常に高速でコンパクトです。実際には、その保存はTINYINTですが、文字列として番組にその外観。その結果、オプションのリストの一部を行うには、このフィールドを使用することは非常に完璧になります。例えば、限定され、固定の性別、民族性、および状態の部署のようなこれらのフィールドの値は、あなたはVARCHARの代わりにENUMを使用する必要があります。


できるだけ(6)NOT NULLを使用
しますが、NULL値を使用するために非常に特別な理由がない限り、あなたは常にあなたのフィールドがNOT NULLを保持しておく必要があります。NULLは、実際に余分なスペースを必要とし、あなたが比較すると、あなたのプログラムはより複雑になります。もちろん、これはあなたがNULLを使用できないことを意味するものではありません、現実は非常に複雑で、まだいくつかのケースでは、あなたはNULL値を使用する必要があります。


(7)が固定長テーブルが速くなり
、テーブルのすべてのフィールドが「固定長」である場合、テーブル全体が「静的」または「固定長」であると考えられます。VARCHAR、TEXT、BLOB:例えば、次の表には、フィールドのタイプではありません。限り、あなたはこれらのフィールドのいずれかが含まれて、その後、テーブルには、「固定長の静的テーブル」ではありませんので、MySQLのエンジンはに対処するための別の方法を使用します。
固定長データのオフセット次を計算することは容易であるため、MySQLの検索は、より速くなりますので、固定長テーブルには、パフォーマンスを向上させる、それが自然に素早く読み込まれます。フィールドは固定長でない場合は、次のものを見つけるたびので、プログラムは、主キーを見つける必要があります。
そして、固定長テーブルもキャッシュされ、再建される可能性が高いです。しかし、唯一の副作用は、固定長フィールドは、いくつかのスペースを無駄にするということですので、固定長フィールドあなたが使用するかどうかではない、彼は多くのスペースを割り当てることがありません。

18、どのようにPHPのセキュリティを最大化するには?SQLインジェクションやXSSの脆弱性のクロスサイトスクリプティングの脆弱性を回避する方法?

基本的な原理は:私はすべてのユーザーが送信したデータ(フィルタ、ユーザーが提出)とは考えていない外部のサーバやプログラミングの詳細(マスクエラー)を表示しません。

一般のマジックメソッドで使用される19は、ありますか。イラスト


A:メソッドの先頭に2つのアンダースコア(__)でPHPの規定は魔法の方法としてあり、魔法の既存のメソッドをオーバーロードしない限り、あなたがより良いではない__関数名は、で始まることをお勧めします。
クラスをインスタンス化するときに__construct()が自動的に呼び出されます。

__destruct()クラスオブジェクトは自動的に最終用途と呼ばれます。

割り当ての特性の不定時間__set()コール。

未定義のプロパティに__get()の呼び出しと呼ばれます。

__isset()ISSET()または空()関数が呼び出されるを使用して。

__unsetでunset()()を呼び出します時間を使って。

__sleep()を呼び出す際にシリアル化シリアル化を使用しました。

__wakeup()呼び出されたときにアンシリアライズ、デシリアライゼーションを使用。

呼び出されたときには存在しません__call()メソッドの呼び出し。

静的メソッド__callStatic()の呼び出しが存在しない呼び出しです。

時間の文字列にオブジェクトを変換するために)(__toStringが呼び出されます。このようなエコーとして。

メソッドが呼び出されたときにオブジェクトを置くしようとしたときに__invoke()を呼び出します。

__set_state()が呼び出さでvar_export()関数を使用して。配列パラメータを受け入れます。

お電話の際__clone()クローンを使用する場合には、オブジェクトをコピーします。
 

20、これらの三つの言葉は何の代表的なもので、この自己、親を$?どのような状況で使用されますか?


この現在のオブジェクト$
セルフ現在のクラスの
現在のクラスの親の親を

>呼び出しプロパティとメソッド- 、現在のクラスでこれを$使用し
、自己が現在のクラスでも使用されていますが、使用する必要があります::コール・
クラスに使用する親

21、簡単に並行性の高いWebソリューション


A、フロントエンドの最適化(CND速度の独立した画像サーバの確立まで)

B、サーバーの最適化(静的ページ、並行処理[非同期|マルチスレッド]、キュー処理)

C、最適化されたデータベース(データベースキャッシュ[Memcachaed |のRedis]、別個読み出し及び書き込み、サブライブラリーサブテーブル、パーティション)

D、Webサーバの最適化(ロード・バランシング、リバースプロキシ)

22.どのような方法(通常はスクリプトの実行時間)を使用してPHPスクリプトの効率とSQLデータベースの効率(通常、データベースクエリ時間)をチェックすると、データベースクエリのスクリプト実行のボトルネックを特定し、分析することと?

PHPスクリプトの効率
、コードスクリプトタイミング。

B、Xdebugの実行回数解析と統計関数、特定の時間、好ましくはwinCacheGrind分析ツール。

C、straceのとオンラインシステムコールは、特定のシステム関連のプロセスを追跡します。

SQLデータベースの効率
、SQLのは(MySQLの)説明、スロークエリログレコード遅いクエリを可能にします。

B、通常、データベースの設計に依存して合理的である、需要が合理的です。
 

23、MySQLデータベースは、どのように最適化するには、3年間の保管、以上5万一日ずつ、期待運用・保守のためのシステムを公開しますか?


部分的なデータの冗長性を可能にする、適切に設計されたデータベース構造、クエリに参加を避けるために、効率を向上させます。

B、フィールドデータとストレージエンジンの適切なタイプを選択し、インデックスを追加することが適切。

C、リーダから単離されたMySQLのマスタライブラリ。

D、サブテーブル、法律を見つけるための検索まで、単一のテーブル速度でデータ量を削減します。

Eは、そのようなmemcachedを、Redisのなどとして、キャッシュする仕組みを追加します。

Fは、静的なページを生成し、多くの場合、ページが変更されません。

Gは、効率的なSQLを書きます。例えば、TABEL SELECT * FROM SELECT FIELD_1、field_2、テーブルからfield_3を変更しました。

24、違いMySQLのストレージエンジン、MyISAMテーブルとInnoDBの?


A、MyISAMテーブルは、支持体のInnoDBタイプながら、高度な処理トランザクション処理の種類をサポートしていません。


Bは、MyISAMテーブル型の性能は高速のInnoDB型より実行され、強調されています。

Cは、InnoDBのFULLTEXTインデックスタイプはサポートされていません。

D、特定の行の数は、テーブルから、InnoDBは再び行数計算するには、テーブル全体をスキャンするSELECT COUNT(*)の実装であるのInnoDBテーブル、保存されない、しかし、あなたが保存した後のラインの良い番号は、単に読みのMyISAMすることができます。

Eは、フィールドのAUTO_INCREMENTタイプのために、InnoDBは、フィールドのインデックスのみが含まれている必要がありますが、MyISAMテーブルでは、あなたが一緒に共同インデックスと他のフィールドを設定することができます。

F、DELETE FROMテーブル、InnoDBはテーブルを再確立しますが、行ごとに削除されません。

G、LOAD表MASTER InnoDBの操作は作業をしないで、溶液はInnoDBテーブルのMyISAMテーブルに最初置かれ、その後、InnoDBテーブルにデータをインポートするが、追加のInnoDB特性(例えば、外部キー)のために使用テーブルNA;

H、MyISAMテーブルは、テーブルのロックをサポートし、InnoDBが行ロックをサポートします。

MyISAMテーブル:読み速く、簡単に管理するために、安定した、成熟します。一部の機能は、(業務)、テーブルレベルのロックをサポートしていません。
InnoDBは:サポート取引、外部キーおよびその他の機能、データラインロック。大きなスペースを占め、フルテキストインデックスをサポートしていません。

 

公開された72元の記事 ウォン称賛7 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_39399966/article/details/104393992