就職活動や採用活動では、面接や筆記試験が必要になることがよくあります。PHP プログラマーであれば、多かれ少なかれ似たような経験があるでしょう。以下は私が集めて整理した PHP 面接の質問です。同僚の参考になれば幸いです。適切なPHP開発の仕事を見つけてください。 (全3セクション)
以下は面接の質問です(1)
1. PHP を使用して、前日の時刻を 2009-02-10 22:21:21 (2 点) の形式で出力します。
echo date('Y-m-d H:i:s', strtotime('-1 day'));または
$昨日 = time() - (24 * 60 * 60);
echo 'today:'.date('Y-m-d H:i:s')."n";
echo '昨日:'.date('Y-m-d H:i:s', $yesterday)."n";
2. echo()、print()、print_r()の違い(3点)
echo は PHP ステートメント、print と print_r は関数、ステートメントには戻り値がなく、関数は戻り値を持つことができます (役に立たない場合でも)
print は単純な型の変数 (int、string など) の値のみを出力できます
print_r は、複合型変数 (配列、オブジェクトなど) の値を出力できます
echo -- 1 つ以上の文字列を出力します
3. HTMLとPHPを使い分けできるテンプレート(1点)
smarty、Heyesテンプレートクラスなど
5. バージョン管理にはどのようなツールが使用されますか? (1点)
CVSとSVN、SVNは次世代のCVSとして知られており強力な機能を持っていますが、CVSは高い市場シェアを持つ古いブランドであり、問題はどのツールを使用するかです。次のように答える必要がある場合があります: サービス端末として Apache 上の CVS サーバー、WinCVS がクライアントとして使用され、Apache/DAV 上の Subversion がサーバーとして使用され、TortoiseSVN がクライアントとして使用され、または Subclipse がクライアントとして使用されます。
6. 文字列の反転を実現するには? (3点)
strrev()
または
$str = "abcdefg";
関数 strrevv($str)
{
$len=strlen($str);
$newsstr = '';
for($i=$len;$i>=0;$i--)
{
$newsstr .= $str{$i};
}
$newsstr を返す
}
$showstr = strrevv($str);
echo $showstr."
";
------------------------------------------------- ---------------
7. MYSQL データベースを最適化する方法。 (4 ポイント、さらに書くとさらに獲得)
(1). 最も適切なフィールド属性を選択し、そのフィールドを NOT NULL に設定してみて、今後クエリを実行するときにデータベースが NULL 値を比較する必要がないようにします。
(2) サブクエリの代わりに JOIN を使用します
(3). UNION を使用して手動で作成した一時テーブルを置き換えます
(4). LIKE キーワードとワイルドカードはできるだけ使用しないようにします
(5).トランザクションと外部キーを使用する
または
(1). データベース設計に関しては、これは DBA とアーキテクトの責任です。必要に応じて、データベースを非正規化します (英語は denormalize です。中国語の翻訳はわかりません)。一部のデータは冗長になりますので、クエリ効率を向上させるために JOIN 操作を避けてください
(2). システム アーキテクチャ設計の観点から、テーブル ハッシュは、大量のデータを複数の異なるテーブルにハッシュするために使用されます。高速テーブルには最新のデータのみが保持され、低速テーブルには履歴アーカイブが含まれます。メインサーバー 読み取りおよび書き込み、サーバーからの読み取り専用、または N 個のサーバー、各マシンは互いのマスターになります
(3). (1)と(2)はPHPプログラマーの要件を超えていますが、インデックスが少なくても問題ありません。
(4). 効率的な SQL ステートメントを作成し、デカルト積を生成する完全結合、多数の Group By および order by、制限なしなど、非効率な SQL ステートメントがないかどうかを確認します。必要に応じて、データベース ロジックを追加します。クエリ結果は DBMS 側のストアド プロシージャにカプセル化され、各 SQL ステートメントが説明されます(5). 取得するデータはすべて必須です。たとえば、記事のコメント数をクエリするには、article_id = を選択しないでください。 * ... wherearticle_id first. = then msql_num_rows. たとえば、記事を変更する場合、ユーザーがタイトルのみを変更した場合は、更新します... set title = wherearticle_id = コンテンツを設定しません。 = (大きな文字)
(6). たとえば、InnoDB はデッドロックを削減でき、クエリ速度を大幅に向上させることができます。
8. PHP の意味 (1 ポイントを獲得)
ハイパーテキストプリプロセッサ
9. 現在時刻を取得するMYSQLの関数と日付をフォーマットする関数は何ですか?(2点)
now()、DATE_FORMAT(日付,形式)
10. 中国語の文字列を文字化けせずにインターセプトする方法。 (3点)
mb_substr()
------------------------------------------------- ---------------
11. バージョン管理ソフトウェアを使用したことがありますか? (1 点)
TortoiseSVN-1.2.6 SVN-1.2.3
12. テンプレート エンジンを使用したことがありますか? (1 点)
賢い
13. 最も誇りに思う開発作業を簡単に説明してください (4 点)
これは自分で考えてください。あなたはもう新人ではありません。誰もが異なる考えを持っており、あなたの考えはあなた自身の知識によって変わります...
14. トラフィックが多い Web サイトの場合、トラフィックの問題を解決するためにどのような方法を使用しますか?(4 つのポイント)
まず、サーバーのハードウェアが現在のトラフィックをサポートするのに十分であるかどうかを確認します
2 番目に、データベース アクセスを最適化します。
第三に、外部ホットリンクは禁止されています。
4 番目に、大きなファイルのダウンロードを制御します。
5 番目に、別のホストを使用してメイントラフィックを迂回します
6番目は、トラフィック分析および統計ソフトウェアを使用します。
------------------------------------------------- ----------------
15. PHPを使用して、クライアントIPとサーバーIPを表示するコードを記述します(1点)
//クライアント I を表示
関数 get_client_ip() {#
if(getenv('HTTP_CLIENT_IP')) {
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} 他 {
$client_ip = $HTTP_SERVER_VAR['REMOTE_ADDR'];
}
$client_ip を返す;
}
//サーバーIP
関数 get_server_ip(){
if (isset($_SERVER))
{
if($_SERVER['SERVER_ADDR']) $huoqu_ip=$_SERVER['SERVER_ADDR'];
else $huoqu_ip=$_SERVER['LOCAL_ADDR'];
}
その他
{
$huoqu_ip=getenv('SERVER_ADDR');
}
$huoqu_ip を返す;
}
16. include ステートメントと require ステートメントの違いは何ですか? 同じファイルを複数回インクルードすることを避けるために、(?) ステートメントを使用して置き換えることができます (2 点)。
require() と include() は、失敗の処理方法を除いて、あらゆる面でまったく同じです。 include() は警告を生成し、require() は致命的なエラーを引き起こします。言い換えれば、ファイルが見つからないときにページの処理を停止したい場合は、require() を使用します。 include() の場合はそうではなく、スクリプトは引き続き実行されます。
require() はとにかくファイルをインクルードしますが、include() はオプションで .www.
をインクルードできます。
代わりにを使用してください
_once を含むrequire_once
17. SESSION の生存時間を変更する方法 (1 ポイント)
$savePath = "./session_save_dir/";
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
18. PHPma ホームページのような Web ページアドレスがあります: http://www.phpma.com のコンテンツ ($1 ポイント) を入手するにはどうすればよいですか?
file_get_contents($url)
19. HTTP 1.0 では、ステータス コード 401 の意味は (?)、プロンプト「ファイルが見つかりません」が返された場合、ヘッダー関数を使用できます。そのステートメントは (?) です。
無許可Header("http/1.0 403 禁止");
古典的な面接の質問 (PHP 基本タイプ II) 回答付き 出典: サイト編集者 著者: phpma 時間: 2009-02-13 タグ: PHP 古典的な面接の質問 (PHP 基本タイプ II) 回答付き クリック数: 44 多くの場合、就職活動と採用活動は不可欠です。 PHP プログラマーとして、面接や筆記試験では、多かれ少なかれ似たような経験をすることになります。以下は、私が収集して整理した PHP 面接の質問であり、同僚にとって適切な PHP 開発を見つけるのに役立つことを願っています。仕事! (全3セクション)
以下は面接の質問 (1) です。次の記事: 古典的な面接の質問 (PHP Basic Type III) と回答:
12. PHP では、ヒアドキュメントは特殊な文字列であり、その終了マークは次でなければなりません (1 ポイント)
ほとんどの言語では、二重引用符は文字列であり、一重引用符は文字です。しかし、PHP では、文字列の表現が 3 つあります。つまり:
一重引用符
二重引用符
区切り文字 (ヒアドキュメント構文)
ほら、一重引用符は実際に文字列を表すために使用できます。では、一重引用符を表現したい場合はどうすればよいでしょうか?ほとんどの言語と同様に、エスケープ記号を使用します。つまり、バックスラッシュ "" です。では、一重引用符と二重引用符の使用の違いは何でしょうか。私が言いたいのは、大きな違いはないということです。唯一の違いは、二重引用符を使用するとより多くのエスケープ文字を適用できることです。
区切ってみましょう。構文は「<<<」です。使用方法は、その後に識別子を指定し、次に識別子の後に文字列を指定し、文字列の後に識別子を指定して終了します。例:
$str = <<
ご注意ください
EOD;
エコー $str;
?> ここで指定される識別子は EOD であり、中央の識別子は文字列であることに注意してください。
<<
13. asp、php、jsp の長所と短所について話す (1 点)--(詳細は検索してください)
14. mvc についての理解について話します (1 点)
MVC (Model/View/Controller) パターンには 3 種類のオブジェクトが含まれます。モデルはアプリケーションオブジェクト、ビューは画面上のその表現です、
Controller は、ユーザー インターフェイスがユーザー入力にどのように応答するかを定義します。
Model-View-Controller (MVC) は、1980 年代に Smalltalk-80 で登場し、現在広く使用されているソフトウェア設計パターンです。
1) モデル
モデルはアプリケーションの主要部分です。モデルはビジネス データまたはビジネス ロジックを表します。
2)見る
View はアプリケーションのユーザー インターフェイスに関連する部分であり、ユーザーが表示して操作するインターフェイスです。
3)コントローラー
コントローラーの仕事は、ユーザー インターフェイスのデータ表示を制御し、ユーザーの入力に基づいてモデル オブジェクトの状態を更新することです。
------------------------------------------------- ------------------
15. 次の表を使用して、最も投稿数の多い 10 人の名前の SQL を作成します: メンバー (ID、ユーザー名、投稿、パス、電子メール) (2 点)
メンバー.ユーザー名を選択
メンバーより
投稿 DESC で注文
制限10
16. PHP における値渡しと参照渡しの違いを説明してください。いつ値渡しするのか、いつ参照渡しするのか? (2点)
値渡し: 関数スコープ内の値への変更は関数の外では無視されます
参照渡し: 関数のスコープ内での値の変更は、関数の外側でもこれらの変更を反映します PHPma
長所と短所: 値で渡す場合、php は値をコピーする必要があります。特に大きな文字列やオブジェクトの場合、これはコストのかかる操作になる可能性があります。
参照渡しでは値をコピーする必要がないため、パフォーマンスの向上に非常に役立ちます。
17. PHP の error_reporting の機能は何ですか? (1点)
エラーメッセージレポートのレベルを設定するために使用されます
18. メールの形式が正しいかどうかを検証する関数を書いてください(2点)
//メールアドレスが有効な場合はtrueを返し、それ以外の場合はfalseを返します
関数 validateEmail($email)
{
if(エレギ('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+ )*$',$email) ){
true を返す;
}その他{
false を返す;
}
}
19. 取得したパラメータを含む、現在の実行スクリプトのパスを取得する方法を簡単に説明します。 (2点)
echo $_SERVER['SCRIPT_FILENAME']."?".$_SERVER['QUERY_STRING'];
20.SESSIONの生存時間を変更する方法(1点)
setcookie()
または
session_set_cookie_params($lifeTime)
------------------------------------------------- ------------------
21. JSフォームでダイアログボックスを表示する関数とは何ですか?(2点)
アラート()、プロンプト()、確認()
フォーカス()
22. JSのリダイレクト機能とは何ですか?(2点)
window.location.href
23. foo() と @foo() の違いは何ですか? (1点)
PHP はエラー制御演算子 @ をサポートしています。 PHP 式の前に配置すると、式によって生成されるエラー メッセージは無視されます。
注: @ 演算子は式に対してのみ有効です。初心者向けの簡単なルールは、値をどこかから取得できる場合は、その値の前に @ 演算子を付けることです。たとえば、変数、関数、include() 呼び出し、定数などの前に置くことができます。関数またはクラスの定義の前に配置したり、if や foreach などの条件構造で使用したりすることはできません。
24. メソッドと属性なしで「myclass」という名前のクラスを宣言するにはどうすればよいですか? (1点)
クラスマイクラス{};
25. 「myclass」という名前のオブジェクトをインスタンス化するには? (1点)
$newmyclass = 新しい myclass();
26. クラスの属性にアクセスして設定するにはどうすればよいですか? (2点)
パス->
$newmyclass = 新しい myclass();
$temp=$newmyclass->testvalue;
$newmyclass->testvalue="a";
27. mysql_fetch_row() と mysql_fetch_array の違いは何ですか? (1点)
mysql_fetch_row -- 結果セットから列挙配列として行を取得します
mysql_fetch_array -- 結果セットから行を連想配列、数値配列、またはその両方としてフェッチします
------------------------------------------------- ------------------
28. GD ライブラリは何に使用されますか? (1点)
GD ライブラリは、画像を処理するための一連の API を提供します。GD ライブラリを使用して画像を処理したり、画像を生成したりできます。
Web サイトでは、通常、GD ライブラリはサムネイルの生成や画像への透かしの追加、または Web サイト データに関するレポートの生成に使用されます。
29. PHP に HTML コードを入力するいくつかの方法を指摘します。 (1点)
print("
");
エコー "
";
30. 次の関数のうち、ファイルを開いて読み書きできるものはどれですか? (1点)(c)
(a) fget() (b) file_open() (c) fopen() (d) open_file()
31. 次のオプションのうち、ユーザー配列に john を追加しないものはどれですか? (1点) (b)(c)(d)
(a) $users[] = ‘ジョン’;
(b) array_add($users,’john’);//このオプションについてはわかりませんが、テスト時にこの関数が見つかりませんでした
(c) array_push($users,‘john’);
(d) $users ||= ‘ジョン’;
32. 次のプログラムが入力されますか?(1 点)
$num = 10;
乗算関数(){
$num = $num * 10;
}
乗算();
$num をエコー;
?>
いいえ、ローカル変数です
33. PHP を使用して、「Zhang San」という名前のすべてのコンテンツを検索し、出力する簡単なクエリを作成します (2 ポイント)
テーブル名 ユーザー
名前 電話番号 内容 日付
張三 13333663366 2006-10-11大学卒業
Zhang San 13612312331 学士号 2006-10-15
Zhang Si 021-55665566 2006-10-15工業高校卒業
上記の質問に従ってコードを完成させてください:
$mysql_db=mysql_connect("ローカル","ルート","パス");
@mysql_select_db("DB",$mysql_db);
$result=mysql_query("select * from User where Name='Zhang San'");
while($row=mysql_fetch_array($result))
{
echo $row['名前'].$row['電話番号'].$row['内容'].$row['日付'];
エコー "
";
}
34. 次のクラスの使い方とその意味を説明します。
クラステスト{
関数 Get_test($num){
$num=md5(md5($num)."En");
$num を返します;
}
}
二重MD5暗号化
$testObject = 新しいテスト();
$encryption = $testObject->Get_test("xiaotian_ls");
古典的な面接の質問 (PHP 基本タイプ III) PHP 出典: このサイトの編集者 著者: phpma 時間: 2009-02-13 タグ: 古典的な面接の質問 (PHP 基本タイプ III) PHP クリック数: 31 就職活動や採用活動では、面接と筆記が必要になることがよくあります。 PHP プログラマーとして、私も多かれ少なかれ同じような経験をするでしょう... 以下は私が収集して整理した PHP 面接の質問であり、同僚にとって適切な PHP 開発の仕事を見つけるのに役立つことを願っています。 (全3セクション)
以下は、典型的な面接の質問 (PHP Basic Type III) と PHP による回答です。
35. SQL ステートメントの形式を記述する: 挿入、更新、削除 (4 ポイント)
テーブル名 ユーザー
名前 電話番号 内容 日付
張三 13333663366 2006-10-11大学卒業
Zhang San 13612312331 学士号 2006-10-15
Zhang Si 021-55665566 2006-10-15工業高校卒業
(a) 新しいレコードがあります (Xiao Wang 13254748547 高校卒業 2007-05-06) SQL ステートメントを使用してテーブルに追加してください。
INSERT INTO User('Name','Tel','Content','Date') VALUES('Xiao Wang','13254748547','高校卒業','2007-05-06')
(b) SQL ステートメントを使用して Zhang San の時間を現在のシステム時間に更新してください
UPDATE ユーザー SET Date=DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE Name='Zhang San'
(c) Zhang Si という名前のすべての記録を削除するよう書き込んでください
ユーザー WHERE Name='张思' から削除
36. データ型の意味を書いてください(int char varchar datetime text) varchar と char の違いは何ですか (2 点)。
char 固定長文字。欠落している長さを埋めるにはスペースを使用します。varchar にはこのタイプがないようです。37. MySQ 自動インクリメント タイプ (通常はテーブル ID フィールド) を (?) フィールド (1 ポイント) に設定する必要があります
38. 以下のプログラムの出力結果を書いてください(1点)
$b=201;
$c=40;
$a=$b>$c?4:5;
$aをエコー;
?>
答え: 4
39. 変数が設定されているかどうかを検出する関数はありますか? (2 点)
isset();empty();
------------------------------------------------- ----------------------------
40. クエリ結果セットの総数を取得する関数とは何ですか(1 点)
mysql_fetch_array();
41. $arr = array('james', 'tom', 'symfony'); 最初の要素 (1 ポイント) の値を出力してください。
エコー $arr['0'];
42. 質問41の配列値を「,」記号で区切って文字列出力(1点)に結合してください。
$arr_im = implode(",",$arr);print_r($arr_im);
43. $a = 'abcdef'; $a の値を取り出し、最初の文字 (1 点) を出力してください。
$a = 'abcdef';
$aをエコー;
$a_exp = substr($a,0,1);
エコー "
";
エコー $a_exp;
44. PHPはSQLサーバー/oracleなどのデータベースに接続できますか? (1点)
もちろん
45. PHP5のパーミッション制御修飾子(3点)を記述してください
PHP5 では、アクセス修飾子が導入されています。アクセス修飾子は、プロパティとメソッドの宣言の前に配置され、それらの可視性を制御します。 PHP5 では、次の 3 つの異なるアクセス変更がサポートされています:
1. デフォルトは public です。つまり、プロパティとメソッドのアクセス変更を指定しない場合、デフォルトは public になります。これらのパブリック項目には、クラスの内部と外部からアクセスできます。
2. プライベートアクセス変更とは、変更された項目がクラス内でのみアクセスできることを意味します。 __get() と __set() を使用しない場合は、各属性にプライベートな変更を追加するのが最善です。クラス内でのみ使用される一部の関数など、メソッドにプライベートな変更を追加することもできます。プライベートで変更されたアイテムは継承できません (詳細については、この章で後述します)。
3. protected (保護) で変更された項目は、クラスとそのサブクラスでアクセスできます。詳細については、この章で後ほど説明します。今のところ、protected はパブリックとプライベートの間の変更とみなすことができます。
46. php5のコンストラクタとデストラクタを書いてください(2点)
クラス内で __construct という名前の関数を宣言すると、この関数はコンストラクターとして扱われ、オブジェクト インスタンスの作成時に実行されます。他の関数と同様に、コンストラクターにはパラメーターまたはデフォルト値。クラスを定義してオブジェクトを作成し、そのすべてのプロパティをステートメントに含めることができます。
オブジェクトが破棄される前に PHP が呼び出す __destruct という関数を定義することもできます。これはデストラクターと呼ばれます。
------------------------------------------------- --------------------------------
47. PHPMYADMIN を使用して以下を完了してください -- (テストされていません)
(1) ニュースリリースシステムを作成します。テーブル名はmessageで、以下のフィールド(3点)があります
ID記事ID
タイトル記事タイトル
コンテンツ記事の内容
category_id 記事カテゴリID
クリック数
(2) 上記と同じニュースリリースシステム:コメントテーブルはユーザーの返信内容を記録し、フィールドは以下の通り(4点)
comment_id 返信 ID
id 記事 ID、メッセージ テーブルの ID に関連付けられています
comment_content 返信コンテンツ
次に、データベースにクエリを実行して、次の形式で記事タイトルのリストを取得し、返信の数で並べ替える必要があります。返信の数が最も多いものを先頭にします
記事ID 記事タイトル クリック数 返信数
SQL ステートメントを使用して上記のクエリを完了します。記事に返信がない場合、返信数は 0 と表示されます。
select message.id,message.title, message.hits sum(select count(0) from comment where message.id=comment.id) as comsums from message comment order by comsums;
(3) 上記コンテンツ管理システムにおいて、カテゴリテーブルは分類情報を格納しており、フィールドは以下の通り(3点)
category_id int(4) not null auto_increment;
categroy_name varchar(40) が null ではありません;
ユーザーが記事を入力するとき、ドロップダウン メニューを選択して記事カテゴリを選択します
このドロップダウン メニューの実装方法を記述します
//以下で使用されるadodb
$cnn =& NewADOConnection('mysql');
$cnn -> 接続($db_hostspec, $db_username, $db_password, $db_database);
$cnn -> SetFetchMode(ADODB_FETCH_ASSOC);
if (!$cnn) message("データベース $db_database に接続できません");
$sql = "SELECT * FROM `カテゴリー` WHERE 1;
$rst =& $cnn -> 実行($sql);
if (!$rst) die($cnn -> ErrorMsg());
$arr_categroy = $rst ->
$row): ?>