暖かくなり、「金は3つ、銀は4つ」という言葉があるように、就職や転職をしている人は皆、良い企業を見つけたいと考えています。良い企業に入るには、あなたのスキルが最も重要ですが、あなたのアプリケーションスキルも無視することはできません。PHP の中国語 Web サイトには、PHP の面接の質問がまとめられています。 (2017 採用シーズン: PHP の給与と福利厚生はどうですか?)
PHP 面接の基本的な質問
二重引用符は変数を解釈しますが、一重引用符は解釈しません。変数を解釈します
一重引用符の中に変数がある場合は、変数の説明を挿入します
二重引用符内の変数名の後には、数字、文字以外の特殊文字を続ける必要があります。 、またはアンダースコア、または {} を変数の説明に使用します。囲まないと、変数名の後の部分が全体として扱われ、構文エラーが発生します。
二重引用符はエスケープ文字として解釈され、単一引用符は解釈されません。エスケープ文字は使用できますが、' と \
を解釈すると一重引用符が作成されることがあります。文字には一重引用符を使用するようにしてください。二重引用符よりも効率的です (二重引用符は、変数が存在するかどうかを確認するために最初に調べる必要があるため)。シングルクォートの判定は必要ありません)
$_GET ----->送信メソッドの取得
$_POST -- --->post送信メソッド
$_REQUEST ---- ->getメソッドとpostメソッドの両方で値を受け取ることができます
$GLOBALS ----->すべての変数
$_FILES -----> ファイルをアップロードするには、
$_SERVER ----->システム環境変数
サーバーと対話するためのさまざまなメソッドは、POST、GET、PUT、DELETE です。必須の URL の完全な名前はリソース記述子です。URL はネットワーク上のリソースを記述し、ポストします。 get、put、delegate はこのリソースを追加、削除、変更するための操作です。動作を確認してください。3.1 フォームでの get と post 送信メソッドの違い
。
目標目的:
Web 開発者が他のページと対話する動的に生成された Web ページをすばやく作成できるようにする, PHP はプログラムを HTML ドキュメントに埋め込んで実行するため、HTML 編集を完全に生成する CGI よりもはるかに効率的ですHTML:Hypertext Markup Language
創設者:Rasmus Lerdorf、1968 年生まれ、ウォータールー大学、カナダ
Ledov は、最初に個人の Web ページを維持するためにメンテナンス プログラムを prel 言語で書き、その後 C で書き直して、最終的に php/fi
Timeline:
1995.06.08 PHP/FI が公開されました
1995 php2.0、MySQLのサポートを追加
1997 php3.0
2000 php4.0
2008 php5.0
php6による。 0 は Unicode エンコーディングを完全には解決しませんなので、基本的にはコンセプト製品に過ぎません
共通IDE (統合開発環境):統合開発環境。
Coda (mac)
PHPStrom
Adobe Dreamweaver
NetBeans
コードを強調表示する一般的なテキストエディタ:
NodePad++phpは、C、Java、Prel、およびPHP独自の構文を独自に混合しています
オープンソースコード
静的ページ生成
* echo、print是php语句,var_dump和print_r是函数 * echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用 * print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回false* print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有意义,因为都是打印"\n",因此var_dump()函数更适合调试 * var_dump() 判断一个变量的类型和长度,并输出变量的数值
301 - リソース (Web ページなど) は別の URL に永続的にエスケープされました
404 - リクエストされたリソース (Web ページなど) は存在しません
HTTP ステータス コード カテゴリ:
1** - 情報、サーバーが受信したリクエストでは、リクエスターは操作の実行を続行する必要があります
マジック クオートは、PHP スクリプトに入力されるデータを自動的にエスケープするプロセスです。エンコード時にエスケープするのではなく、実行時に必要に応じてエスケープするのが最善です
9 、クライアントの IP (int が必要) とサーバーの IP のコードを取得する方法$_SERVER["REMOTE_ADDR)。 "]; または getenv('REMOTE_ADDR')
ip2long 変換
gethostbyname('www.baidu.com')
トランザクション処理
テーブルをロックし、トランザクション処理を最適化します$_SERVER["REMOTE_ADDR"];或者getenv('REMOTE_ADDR')
ip2long进行转换
服务器端:gethostbyname('www.baidu.com')
建立索引
优化查询语句
Smarty:Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。
确认服务器硬件是否能够支持当前的流量
数据库读写分离,优化数据表
程序功能规则,禁止外部的盗链
控制大文件的下载
使用不同主机分流主要流量
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
require_once表示了只包含一次,避免了重复包含
由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图
变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量
php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,成为了其别名或者指向)了原始变量。改动的新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)
对象默认是传引用
对于较大是的数据,传引用比较好,这样可以节省内存的开销
isset 判断变量是否定义或者是否为空
变量存在返回ture,否则返回false 变量定义不赋值返回false unset一个变量,返回false 变量赋值为null,返回false
empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。
"",0,"0",NULL,FALSE都认为为空,返回true 没有任何属性的对象都认为是空
is_null:检测传入的值(值、变量、表达式)是否为null
定义了,但是赋值为Null 定义了,但是没有赋值 unset一个变量
Firefox的firebug
Chrome的开发工具
Emmet
JSON格式校验工具
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。
XSS はクロスサイト スクリプティング攻撃であり、最初にクロスサイト スクリプティングの脆弱性を利用して攻撃者が作成したスクリプトを特権モードで実行し、次に安全でない Activex コントロールを使用して悪意のある動作を実行します。
htmlspecialchars() 関数を使用して、送信されたコンテンツをフィルターし、文字列内の特殊記号を具体化します。
SQL インジェクションの原因: プログラム開発プロセス中に、SQL ステートメントの標準的な記述と特殊文字のフィルタリングに注意を払わなかったために、クライアントは通常のグローバル変数 POST および GET を介して一部の SQL ステートメントを送信できました。実行。
構成ファイルで magic_quotes_gpc および magic_quotes_runtime 設定をオンにする
SQL ステートメントを実行するときに、addslashes を使用して SQL ステートメントを変換する
二重引用符と一重引用符を省略しないようにしてくださいSQL ステートメントの作成。
SQL ステートメント内のいくつかのキーワードをフィルターで除外します: update、insert、delete、select、*。
データベースのテーブルとフィールドの命名スキルを向上させ、プログラムの特性に従って、推測されにくいようにいくつかの重要なフィールドに名前を付けます。
Php設定ファイルでregister_globalsをoffに設定し、グローバル変数の登録をオフにします
エラーメッセージを制御し、ブラウザにエラーメッセージを出力せず、エラーメッセージをログファイルに書き込みます。
コマンドインジェクション
evalインジェクション
スクリプト挿入
クロスサイトスクリプティング(XSS)
SQLインジェクション攻撃(SQLインジェクション)
クロスサイトリクエスト
偽造 (CSRF) )
セッションハイジャック(セッションハイジャック)
セッション固定攻撃(セッション固定)
HTTPレスポンス分割
ファイルアップロード攻撃
ディレクトリトラバーサル
リモートインクルージョン
動的変数
評価
URL攻撃
スプーフィングされたフォーム
送信
HTTPリクエストスプーフィング攻撃(スプーフィングされたHTTPリクエスト)
Duokou は、さまざまなファイルにアクセスすることでユーザーのリクエストを完了します。単一エントリのみの Web プログラムは、すべてのリクエストをスクリプト ファイルに送信します。
単一エントリにより、アクセス許可の制御が容易になり、http リクエストのセキュリティ チェックが容易になります。
短所: URL はあまり美しくなく、特に検索エンジンにとってはフレンドリーではありません。
データテーブル内の特定の情報に素早くアクセスし、取得速度を向上させます
一意のインデックスを作成して、データベーステーブル内のデータの各行の一意性を確保します。
テーブル間の接続を高速化します
データの取得にグループ化句と並べ替え句を使用すると、クエリでのグループ化と並べ替えの時間を大幅に短縮できます
マイナスの影響:
インデックスの作成と維持には時間がかかり、データ量が増えるとその時間も長くなります。インデックスは、テーブルがデータ領域を占有するだけでなく、各インデックスも物理領域を占有する必要があります。物理スペース ; テーブルが追加、削除、変更されると、インデックスを動的に維持する必要があるため、データのメンテナンス速度が低下します。
最も頻繁に使用されるフィールドにインデックスを作成して、クエリの範囲を絞り込みます。
並べ替える必要がある頻繁に使用されるフィールドにインデックスを作成します
クエリにほとんど関与しない列や、重複する値が多く含まれる列にインデックスを作成するのは適切ではありません。
テキストフィールド(テキスト)などの一部の特殊なデータ型では、インデックスの作成に適していません。
他のデータベースと区別する最も重要な機能は、プラグイン テーブル ストレージ エンジンです。ストレージ エンジンはデータベースではなくテーブルに基づいていることに注意してください。
InnoDB と MyISAM の違い:
InnoDB ストレージ エンジン:主に OLTP (オンライン トランザクション処理、オンライン トランザクション処理) アプリケーション向けで、ACID トランザクションを完全にサポートする最初のストレージ エンジンです (トランザクションをサポートするのは BDB が最初です)ストレージ エンジン、開発は停止されました)。
特徴:
行ロック設計、外部キーをサポート
Oracle スタイルと同様の一貫した非ロック読み取りをサポートします (つまり、読み取り操作はデフォルトでロックを生成しません)。
InnoDB はデータを論理テーブル スペースに配置し、InnoDB 自体によって管理されます。 MySQL 4.1 バージョン以降、各 InnoDB ストレージ エンジン テーブルは独立した ibd ファイルに保存できるようになりました。InnoDB は MVCC (マルチバージョン同時実行制御: 読み取りは書き込みをブロックせず、書き込みは読み取りをブロックしない) を使用して高いパフォーマンスを実現します。同時実行性、SQL 標準の 4 つの分離レベル (デフォルトは REPEATABLE レベル) を実装します。
InnoDB は、挿入バッファー (挿入バッファー)、二重書き込み (二重書き込み)、自動適応ハッシュ インデックス、先読みなども提供します。
InnoDB はクラスター化アプローチを使用してデータをテーブルに保存し、各オブジェクトは主キーの順序で保存されます (テーブルの作成時に明示的に主キーが指定されていない場合、 InnoDB は行ごとに 6 バイトの ROWID を生成し、それを主キーとして使用します);
InnoDB テーブルには 3 つの隠しフィールドがあります: 上記の 6 バイトの DB_ROW_ID に加えて、6 バイトの DB_TX_ID もあります。 (トランザクション ID) および 7 バイトの DB_ROLL_PTR (対応するロールバック セグメントのアドレスを指します)。これは、innodb モニターを通じて確認できます。
トランザクションはサポートしませんが、テーブルとフルテキストインデックスをサポートします。動作速度は高速です。MyISAM ストレージ エンジン テーブルは MYD と MYI で構成され、MYD はデータ ファイルの保存に使用され、MYI はインデックス ファイルの保存に使用されます。 MySQL データベースはインデックス ファイルのみをキャッシュし、データ ファイルのキャッシュはオペレーティング システム自体に委ねられます。MySQL 5.0 バージョン以降、MyISAM はデフォルトで 256T の単一テーブル データをサポートします。 、内部結合と自己結合の違い
まず、クロス結合とは何ですか:外部結合
MyISAM、InnoDB、BDB (BerkeleyDB)、Merge、Memory (Heap)、Example、Federated、Archive、CSV、ブラックホール、MaxDB、および十数のエンジン
29. オブジェクト指向とは何ですか?主な特徴は何ですか?主な原則は何ですか?オブジェクト指向はプログラムの設計パターンであり、プログラムの再利用性を向上させ、プログラムの構造をより明確にします。 主な機能は、カプセル化、継承、ポリモーフィズムです。5 つの基本原則: 単一責任の原則、オープンとクローズの原則、インターフェイスの分離の原則。30. 静的ルーティングとは何ですか? 動的ルーティングとは何ですか?
参考回答:
動的ルーティングは、ルーティングプロトコルによって動的に構築されます。ルーティングプロトコルは、自身が持つルーティング情報を交換することで、ルーティングテーブルの内容をリアルタイムに更新します。動的ルーティングは、ネットワークのトポロジーを自動的に学習し、ルーティング テーブルを更新します。欠点は、ブロードキャスト更新情報のルーティングが大量のネットワーク帯域幅を占有することです。
Memcahce は、ハッシュ テーブルを使用してすべてのデータをメモリに保存します。各データはキーと値で構成され、特定の値にアクセスする場合は、最初に値を見つけてから結果を返します。
Memcahce は LRU アルゴリズムを使用して、期限切れのデータを徐々に消去します。
人気の Ajax フレームワークには、jQuery、Prototype、Dojo、MooTools などがあります。
Ajax の動作原理は、あるページの指定された場所に別のページのすべての出力コンテンツをロードできるということです。これにより、静的ページはデータベースから返されたデータ情報も取得できます。したがって、Ajax テクノロジを使用すると、ページ全体を更新せずに静的 Web ページがサーバーと通信できるようになり、ユーザーの待ち時間が短縮され、それによってネットワーク トラフィックが削減され、顧客エクスペリエンスの使いやすさが向上します。
Ajax を使用する場合、データ送信、つまりサーバーからクライアントにデータを返す必要があり、サーバーとクライアントは異なるスクリプト言語を使用してデータを処理します。これには、共通のデータ形式が必要です。よく使われるのは 2 つあり、json は XML よりも単純です。
トランザクションは、ユーザーによって定義された一連の操作であり、トランザクションの分割不可能な単位です。データベース上で完了した更新操作は元に戻されます。
データベース内の2つの異なるテーブルを同時に変更したい場合、トランザクションでない場合、最初のテーブルを変更すると、2番目のテーブルの変更処理中に例外が発生して変更できない場合があります。現時点では、2 番目のテーブルのみが変更可能ですが、各テーブルはまだ変更されていない状態です。1 番目のテーブルは変更されています。そして、トランザクションとして設定すると、1番目のテーブルが変更され、2番目のテーブルが異常に変更されて変更できなくなった場合、1番目のテーブルと2番目のテーブルが未変更の状態に戻ります。これをトランザクションのロールバックと呼びます。
上記の 33 の質問は、面接での簡単な質問から難しい質問までをリストしたもので、転職を考えている学生にとって、面接でこれらの質問に取り組むことで成功率が大幅に向上する可能性があります。お仕事をお探しの皆様、納得のいくお仕事が見つかりますように!