この記事では、PHP 面接での 40 の質問と回答をまとめています。一定の参考値があるので、困っている友達が参考になれば幸いです。
#1. オブジェクト指向とは何ですか?主な特徴は何ですか?
オブジェクト指向はプログラムの設計手法であり、プログラムの再利用性を高め、プログラムの構造を明確にします。主な機能: カプセル化、継承、ポリモーフィズム。
2. SESSION と COOKIE の違いは何ですか?その理由と機能をプロトコルから説明してください?
A. http はステートレスですこのプロトコルでは、ユーザーが同じ Web サイトから来たかどうかを区別することができず、同じユーザーが異なるページをリクエストした場合でも、同じユーザーとみなされません。
B. SESSION はサーバー側に保存され、COOKIE はクライアント側に保存されます。セッションは比較的安全ですが、Cookie は特定の方法で変更される可能性があり、安全ではありません。セッションは配信のために Cookie に依存します。
Cookie を無効にすると、セッションは正常に使用できなくなります。セッションの欠点: セッションはサーバー側に保存され、各読み取りはサーバーから読み取られるため、サーバー上のリソースが消費されます。セッションはサーバー側のファイルまたはデータベースに保存されます。デフォルトではファイルに保存されます。ファイル パスは、PHP 設定ファイルの session.save_path で指定されます。セッションファイルは公開されています。
3. HTTP ステータスの 302、403、および 500 コードの意味は何ですか?
1、2、3、4、5 の原則: (つまり、1: メッセージ シリーズ、2: 成功シリーズ、3: リダイレクト シリーズ、4: リクエスト エラー シリーズ、5: サーバー-側のエラー シリーズ。)
302: 一時転送は成功しました。要求されたコンテンツは新しい場所に移動されました。
403: アクセスは禁止されています
500: 内部サーバー エラー
401: 不正アクセスを表します。
4. データ型の意味を書き留めてください (int char varchar datetime text); varchar と char の違いは何ですか?
Int Integer char 固定長文字 Varchar 可変長文字 Datetime 日時型 Text テキスト型 Varchar と char char の違いは固定長文字型であり、割り当てられただけのスペースを増やします。 Varchar は可変長の文字型で、コンテンツと同じだけのスペースを占有するため、スペースを効果的に節約できます。 varchar型は可変であるため、データ長が変わるとサーバー側で追加の操作が必要となり、char型に比べて効率が悪くなります。
5. MyISAM と InnoDB の基本的な違いは何ですか?インデックス構造はどのように実装されていますか?
A. MyISAM タイプはトランザクション、テーブル ロックをサポートしておらず、断片化が起こりやすいです。頻繁に最適化する必要があり、読み取りおよび書き込み速度が高速です。アプリケーションに適しています。頻繁なクエリを使用する;
B. InnoDB タイプはトランザクション、行ロックをサポートし、クラッシュ回復機能を備えています。読み取りおよび書き込み速度は MyISAM よりも遅いです。挿入および更新操作が多いアプリケーションに適しています。 . 多くのスペースを占有し、フルテキスト インデックスはサポートされていません。
インデックスの作成: アラート テーブル tablename インデックスの追加 インデックス名 (`フィールド名`)
6、isset() と empty() の違い
sset は変数が存在するかどうかを決定します。複数の変数を渡すことができます。変数の 1 つが存在しない場合は false が返されます。empty は変数が空かどうかを決定し、false になります。変数は 1 つだけです。空の場合は true を返します。
https://jq.qq.com/?_wv=1027&k=55dPDrC
7.PHP における値渡しと参照渡しの違いを説明してください。いつ値渡しするのか、いつ参照渡しするのか?
8. PHP の error_reporting の機能は何ですか?
PHP のエラー レベルを設定し、現在のレベルを返します。9. キャッシュ テクノロジについてのあなたの理解を教えてください。
キャッシュ テクノロジは、動的コンテンツをファイルにキャッシュし、一定期間内に動的ページにアクセスして、データベースに再度アクセスすることなく、キャッシュされたファイルを直接呼び出すことです。10. 最近、プログラミングでは MVC の 3 層構造がよく使われますが、MVC とはどの 3 層を指し、どのような利点があるのでしょうか?
MVC の 3 つの層は、それぞれビジネス モデル、ビュー、コントローラーを指します。コントローラー層はモデルを呼び出してデータを処理し、データをビュー層にマップします。メリットは、 ① コードの再利用性を実現し、コードの冗長性を回避できること、 ② M と V によりコード分離が実現され、同一プログラム内で異なる表現を使用できることです。 AJAXの利点?ajax は、JavaScript または JQuery フレームワークを通じて実装できる非同期送信テクノロジーで、部分更新を実現します。これにより、サーバーへの負荷が軽減され、ユーザー エクスペリエンスが向上します。
12. プログラム開発において、プログラムの動作効率を向上させるにはどうすればよいでしょうか?
A. SQL ステートメントを最適化します。クエリ ステートメントでは select * を使用しないようにします。どのフィールドをチェックするためにどのフィールドを使用します。サブクエリの使用を減らし、テーブル接続で置き換えることができます。ファジーな使用を減らします。クエリ;
B. データ テーブルにインデックスを作成します;
C. プログラムで頻繁に使用されるデータのキャッシュを生成します。
#13. トラフィックの多い Web サイトの場合、トラフィックの問題を解決するためにどのような方法を使用しますか?
A. キャッシュを効果的に使用します。キャッシュ ヒット率
##B、ロード バランシングを使用する#C、静的ファイルの保存と高速化に cdn を使用する
##D、データベース使用量を削減するためのアイデア E . 統計のボトルネックがどこにあるのかを確認する F. リバース プロキシ 14. include ステートメントと require ステートメントの違いは何ですか? 同じインクルードを避けるにはステートメントがファイルに複数回存在する場合、どのステートメントを使用して置き換えることができますか?違い:
失敗した場合: include は警告を生成し、require はエラー割り込みを直接生成します##include_once
@ はすべての警告を表し、無視されます
16. 簡単な説明 PHP のガベージ コレクション メカニズム。
回答: php の変数は変数コンテナ zval に保存されます。変数の型と値を保存するだけでなく、zval には is_ref フィールドと refcount フィールドもあります。 refcount は変数を指す要素の数を示し、is_ref は変数に別名があるかどうかを示します。 refcount が 0 の場合、変数コンテナはリサイクルされます。 zval の refcount が 1 減らされた後に 0 より大きい場合、それはガベージ バッファに入ります。バッファーが最大値に達すると、リサイクル アルゴリズムが zval をループして、それがガベージであるかどうかを判断し、解放します。
17. PHP のセキュリティを最大限に高めるにはどうすればよいですか? SQL インジェクションの脆弱性と XSS クロスサイト スクリプティングの脆弱性を回避するにはどうすればよいですか?
回答: 基本原則: サーバーまたはプログラムの設計の詳細を外部に公開しないでください (エラーをマスキング)、ユーザーが送信したデータを信頼しません (ユーザー送信をフィルターします)。
18. echo、print_r、print、var_dump の違い
echo: ステートメント構造;
print: 戻り値を持つ関数です。
print_r: 配列、オブジェクトを出力できます
var_dump : データ型のオブジェクト配列を出力できます
高速かつコンパイル型、キャッシュ テクノロジー、プラグイン メカニズム、強力なパフォーマンス ロジック
20. PHP でページ ジャンプを実装する方法
方法 1: PHP 関数Jump 、欠点は、ヘッダーの前に出力できないこと、ジャンプ後のプログラムは実行を継続し、exit を使用して後続のプログラムの実行を中断できることです。 header("Location:网址");//直接跳转
header("refresh:3;url=http://www.jsdaima.com");//三秒后跳转
echo"";
21. GB2312 形式の文字列を UTF-8 形式に変換するにはどうすればよいですか?
iconv('GB2312','UTF-8','js代码(http://www.jsdaima.com)是IT资源下载与IT技能学习平台。');
htmlspecialchars または htmlentities
23. CSRF 攻撃とは何ですか? XSS攻撃?それを防ぐにはどうすればよいでしょうか?
CSRF、クロスサイト リクエスト フォージェリ。攻撃者はユーザーになりすましてリクエストを送信し、情報を盗んだりシステムに損害を与えたりします。 基本原則を説明します。ユーザーは Web サイト A にアクセスしてログインし、Cookie を生成し、その後 Web サイト B にアクセスします。Web サイト A に CSRF 脆弱性がある場合、Web サイト B から Web サイト A へのリクエスト (これは、ユーザーの訪問)、Web サイト A はリクエストがユーザーからのものであると認識し、Web サイト B がユーザーの身元を偽装することに成功するため、これはクロスサイト スクリプティング攻撃と呼ばれます。
CSRF 防止:
A. API リクエスト メソッド GET、POST
B. POST リクエストにトークン検証を追加し、ランダム コードを生成して保存します。セッションでこのランダム コードをフォームに入力すると、送信時にサーバーがランダム コードが同じかどうかを確認します。
XSS、クロスサイト スクリプティング攻撃。
予防策: 入力を信頼せず、入力をフィルターしてください。
#24. プログラムにとってセキュリティは非常に重要ですが、開発時に注意すべきセキュリティの仕組みについて教えてください。
A. リモート送信を防止する; B. SQL インジェクションを防止し、特殊コードをフィルタリングする; C. 登録マシンのフラッディングを防止し、検証コードを使用する。
25. json データ形式を理解していますか?
JSON (javascript object Notation) は軽量のデータ交換形式であり、json データ形式は固定されており、複数の言語でのデータ転送に使用できます。 26. トランザクションとは何ですか?そしてその特徴は? 回答: トランザクション: 一連のデータベース操作であり、データベース アプリケーションの基本的な論理単位です。 トランザクション特性: A. 原子性: つまり、分割不可能性 すべてのトランザクションが実行されるか、何も実行されないかのいずれかです。 または、次のように理解してください: トランザクションは、論理的な作業単位として結合された SQL ステートメントのグループです。いずれかのステートメント操作が失敗すると、操作全体が失敗します。後続の操作は、操作前の状態にロールバックされるか、操作上にノードが存在します。何かが実行されるか実行されないかを確認するには、トランザクションを使用できます。グループ化されたステートメントがトランザクションとみなされるには、ACID テスト (原子性、一貫性、分離性、耐久性) に合格する必要があります。 27. ロックとは何ですか? 回答: データベースは、複数のユーザーが使用する共有リソースです。複数のユーザーが同時にデータにアクセスすると、複数のトランザクションがデータベース内の同じデータに同時にアクセスします。同時操作が制御されていない場合、誤ったデータが読み取られて保存され、データベースの一貫性が破壊される可能性があります。 ロックは、データベースの同時実行制御を実現するための非常に重要なテクノロジです。トランザクションはデータ オブジェクトを操作する前に、まずシステムにロック要求を送信します。ロック後、トランザクションはデータ オブジェクトに対して一定の制御を持ちます。トランザクションがロックを解放するまでは、他のトランザクションはデータ オブジェクトを更新できません。 基本的なロック タイプ: ロックには、行レベルのロックとテーブル レベルのロックが含まれます 28. インデックスの役割は何ですか?そして、その利点と欠点は何ですか? 回答: インデックスは、データベース検索エンジンがデータの取得を高速化するために使用できる特別なクエリ テーブルです。これは現実の本の目次に非常に似ており、本全体をクエリしなくても必要なデータを見つけることができます。インデックスを作成すると、単一の列または複数の列を指定できます。欠点は、データ入力が遅くなり、データベースのサイズが大きくなることです。 29. 3 つのパラダイムを一般的な方法で理解するにはどうすればよいでしょうか? 第 1 正規形: 1NF は属性に対するアトミック制約であり、属性がアトミックである必要があり、分解できない; 30. 主キー、外部キー、インデックスの違いは何ですか? 定義: 関数: 番号: 31. 簡単な説明プライベート、保護された、パブリックな変更アクセス権。 private: プライベート メンバーにはクラス内でのみアクセスできます。 32. ヒープとスタックの違いは何ですか? A. ヒープとは、プログラムの実行中に動的に割り当てられるメモリ領域で、プログラムの実行条件に応じて割り当てられるヒープ メモリのサイズを決定できます。 33. よく使われる魔法の方法は何ですか?例 回答: PHP では、2 つのアンダースコア (__) で始まるメソッドはマジック メソッドとして予約されると規定しているため、冗長性を目的とする場合を除き、関数名を __ で始めないことをお勧めします。 . 既存の魔法のメソッドが含まれています。 __construct() 实例化类时自动调用。 34、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用? $this 当前对象 $this在当前类中使用,使用->调用属性和方法 35、作用域操作符::如何使用?都在哪些场合下使用? 调用类常量 36、__autoload()方法的工作原理是什么? 答:使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。 当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。 这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后 就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。 使用自动载入的魔术函数可以不必要写很多个include或者require函数。 37、简述高并发网站解决方案。 A、前端优化(CND加速、建立独立图片服务器) 39、在命令行中运行php程序 php indx.php A、从命令行运行php非常简单。但有些注意事项需要各位了解下,诸如$_SESSION之类的服务器变量是无法在命令行中使用的,其他代码的运行则和web服务器中完全一样; 延伸1: 延伸2:向php脚本传递参数: A、使用$argv or $argc参数接收 B、使用getopt函数 C、提示用户输入 40、你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在? A、PHP脚本的执行效率 a、代码脚本里计时; b、xdebug统计函数执行次数和具体时间进行分析,最好使用工具winCacheGrind分析; c、在线系统用strace跟踪相关进程的具体系统调用。 B、数据库SQL的效率 a、sql的explain(mysql),启用slow query log记录慢查询; b、通常还要看数据库设计是否合理,需求是否合理等。 41、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题。 A. サーバーが現在のトラフィックをサポートできるかどうかを確認します; 42. MySQL データベースは公開システムのストレージとして使用されています。1 日あたり 50,000 アイテム以上の増加は 3 年間続くと予想されます。最適化するにはどうすればよいですか? A. 適切に設計されたデータベース構造を設計し、部分的なデータの冗長性を許可し、結合クエリを回避して効率を向上させます。 43. Mysql ストレージ エンジン、myisam と innodb の違い。 A. MyISAM タイプはトランザクション処理などの高度な処理をサポートしていませんが、InnoDB タイプはサポートしています; B. MyISAM タイプのテーブルはパフォーマンスを重視しており、その実行速度は InnoDB よりも速く、タイプの方が高速です; C. InnoDB は FULLTEXT タイプのインデックスをサポートしません; D. InnoDB はテーブル内の特定の行数を保存しません。 select count(*) from table を実行すると、InnoDB はテーブル全体をスキャンして行数を計算する必要がありますが、MyISAM は単に保存された行数を読み取るだけです; E. AUTO_INCREMENT タイプのフィールドの場合、InnoDB行数のみを含める必要があります。フィールドのインデックスですが、MyISAM テーブルでは、他のフィールドとともに結合インデックスを確立できます; F. DELETE FROM テーブルの場合、InnoDB は再作成されませんテーブルは削除されますが、行ごとに削除されます; G. LOAD TABLE FROM MASTER 操作は InnoDB では機能しません。解決策は、まず InnoDB テーブルを MyISAM テーブルに変更し、次にそれを次のように変更することです。データのインポート後の InnoDB テーブル。ただし、追加の InnoDB 機能 (外部キーなど) の場合、テーブルは適用されません。 H、MyISAM はテーブル ロックをサポートし、InnoDB は行ロックをサポートします。 MyISAM: 完成度が高く、安定していて、管理が簡単で、読みやすいです。一部の関数 (トランザクションなど) はテーブルレベルのロックをサポートしていません。 その他、主にインタビュー後の個人的な意見と形而上学: 推奨学習: 「PHP ビデオ チュートリアル
B. 一貫性または文字列化可能性。トランザクションの実行により、データベースは 1 つの正しい状態から別の正しい状態に変換されます。
C. 分離。トランザクションが正しくコミットされるまでは、トランザクションによるデータの変更を他のトランザクションに提供することはできません。
D. 耐久性。トランザクションが正しく送信されると、その結果はデータベースに永続的に保存され、トランザクションの送信後に他の失敗が発生した場合でも、トランザクションの処理結果は保存されます。
第 2 正規形: 2NF はレコードに対する一意の制約です。レコードには一意の識別子、つまりエンティティの一意性が必要です。
第 3 正規形: 3NF はフィールドの冗長性に関する制約です。つまり、フィールドは他のフィールドから派生できず、フィールドが冗長ではないことが必要です。 。
主キー -- レコードを一意に識別します。重複することはできず、空にすることもできません。
外部キー -- テーブルの外部キー別のテーブルに属しています 主キー、外部キーは重複することができ、空の値も可能です
インデックス -- このフィールドには繰り返し値はありませんが、NULL 値を持つことができます
主キー- - データの整合性を確保するために使用されます。 プロパティ
外部キー - 他のテーブルとの接続を確立するために使用されます。
インデックス - クエリのソート速度を向上させるために使用されます。
主キー - あります。主キーは 1 つだけです
外部キー -- テーブルには複数の外部キーを持つことができます
インデックス -- テーブルには複数の一意のインデックスを持つことができます
protected: 保護されたメンバーは、クラスおよび継承されたクラス内でアクセスできます。
public: 公開メンバー。完全に公開されており、アクセス制限はありません。
B. スタックはコンパイル中に割り当てられるメモリ領域であり、割り当てられたメモリ領域であるため、スタックのサイズはコード内で明確に定義する必要があります。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
self 当前类
parent 当前类的父类
self也在当前类中使用,不过需要使用::调用
parent在类中使用
调用静态方法
B、服务端优化(页面静态化、并发处理[异步|多线程]、队列处理)
C、数据库优化(数据库缓存[Memcachaed|Redis]、读写分离、分库分表、分区)
D、Web服务器优化(负载均衡、反向代理)
38、PHP遍历文件夹下所有文件<?php
function read_all($dir){
if(!is_dir($dir)) return false;
$handle = opendir($dir);
if($handle){
while(($fl = readdir($handle)) !== false){
$temp = $dir.$fl;
//$fl !='.' && $fl != '..' 排除当前目录及父级目录
if(is_dir($temp) && $fl!='.' && $fl != '..'){
echo '目录:'.$temp.'<br>';
read_all($temp);
}else{
if($fl !='.' && $fl != '..'){
echo '文件:'.$temp.'<br>';
}
}
}
}
}
read_all("./dir/");
?>
B、在命令行中执行php文件的好处之一就是可以通过脚本实现一些计划任务(crontab)的执行,而无须通过web服务器。
php -v 显示当前PHP版本
php -m 显示当前php加载的有效模块
php -i 输出无html格式的phpinfo
php --rf function
提示:命令行下执行php,是不走Apache/Nginx等这类东西的,没有什么http协议,所以get,post传参数根本不起作用,并且还会报错。有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务。这就涉及到在shell命令下如何给php传参的问题,通常有三种方式传参。echo "接收到{$argc}个参数";
print_r($argv);
$param_arr = getopt('a:b:');
print_r($param_arr);
fwrite(STDOUT,'Please enter your name:');
echo 'Your name is:'.fgets(STDIN);
B. データベース アクセスを最適化します;
C. 写真のアンチホットリンクなど、外部アクセス リンク (ホットリンク) を禁止します;
D.ファイルのダウンロード、特に大きなファイルを制御する;
E. オフロード (負荷分散) に別のホストを使用する;
F. 閲覧統計ソフトウェアを使用して、訪問数を把握し、ターゲットを絞った最適化を実行します。
B. 適切なテーブル フィールドのデータ型とストレージを選択します。エンジン、インデックスを適切に追加する;
C. mysql データベースでマスターとスレーブの読み取りと書き込みを分離する;
D. 通常のテーブルを見つけて 1 つのテーブル内のデータ量を減らし、クエリ速度を向上させる;
E . memcached 、 redis などのキャッシュ メカニズムを追加する;
F. 頻繁に変更されないページの静的ページを生成する;
G. 効率的な SQL を作成する。たとえば、SELECT * FROM TABLE は SELECT field_1, field_2, field_3 FROM TABLE に変更されます。
InnoDB: トランザクション、外部キーおよびその他の機能、およびデータ行ロックをサポートします。多くのスペースを占有し、全文インデックス作成などはサポートされていません。
以上が[吐血コンピレーション] 40 を超える PHP 面接の質問と回答 (実務経験)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。