関連する推奨事項: 「2019 PHP 面接の質問の概要 (コレクション)」
1. 基本的な PHP パート
1. PHP 言語の大きな利点の 1 つはクロスプラットフォームです。
PHP の最適な実行環境は、Apache MySQL PHP です。この実行環境は、さまざまなオペレーティング システム (Windows、Linux など) 上で構成でき、オペレーティング システムによって制限されないため、このように呼ばれます。クロスプラットフォーム
2. WEB開発におけるデータ入稿の方法は何通りありますか?違いは何ですか? Baidu はどの方法を使用しますか?
2 つのメソッドの取得と投稿
相違点:
(1) URL 可視性:取得メソッドの URL パラメータは表示されますが、投稿は表示されません
( 2) キャッシュ可能性: get メソッドはキャッシュできますが、post メソッドはキャッシュできません。
(3) 送信データサイズ: 一般的な get の送信データサイズは 2k ~ 4k を超えません (ブラウザによって制限は異なりますが、大きな差はありません); post のサイズリクエスト送信データはphp.iniに従って設定されます。ファイル設定は無限に大きくすることもできます。
(4) データ送信: get メソッドは URL アドレスバー結合によるパラメータの送信に使用され、post メソッドはボディによるデータの送信に使用されます。
提案:
1. get タイプは Post タイプよりも安全性が低く、機密情報が含まれています。Post データ送信タイプを使用することをお勧めします。
2データ クエリには Get を使用することをお勧めします。データの追加、変更、削除には Post メソッドを使用することをお勧めします。
Baidu で使用されている get メソッドは、URL から確認できるため
3. PHP エンジン、システムなどのフレームワークとテンプレートをマスターする
##フレームワーク: CI、Yii、Laravel など、多くのフレームワークがあります。##テンプレート エンジン: 教科書にも載っているものも含め、たくさんあります。私たちが学んだのはスマート
システムです。Kangsheng の製品 (uchome、supesite、discuzX、 etc)、Empire system、DEDE (Dream Weaver)、ecshop など 私たちが学んだのは DEDECMS、Ecshop
4. どのような Web フロントエンド技術を習得したか教えてください。
DIV CSS Web ページ レイアウト、JavaScript、jQuery フレームワーク、Photoshop 画像処理に精通している
5. AJAX の利点は何ですか?
ajax は、JavaScript または JQuery フレームワークを通じて実装できる非同期送信テクノロジーで、部分更新を実現します。これにより、サーバーへの負荷が軽減され、ユーザー エクスペリエンスが向上します。
6. プログラムにとってセキュリティは非常に重要ですが、開発時に注意すべきセキュリティの仕組みについて教えてください。
(1) 認証コードを使用して、登録マシンのフラッディングを防ぎます。
(2) 前処理、パラメータのバインド、パラメータのフィルタリング、およびエスケープを使用して、SQL インジェクションを防止します。
(3) トークンを使用してリモート送信を防止し、トークンを使用してログイン ステータスを確認します。
7. プログラムの開発において、プログラムの動作効率を向上させるにはどうすればよいでしょうか?
(1) SQL ステートメントを最適化し、クエリ ステートメントで select * を使用しないようにし、どのフィールドをチェックするためにどのフィールドを使用するか、サブクエリの使用を減らし、テーブル接続で置き換えることができ、ファジー クエリの使用を減らします。
(2) データテーブルにインデックスを作成します。
(3) プログラムで頻繁に使用されるデータのキャッシュを生成します (redis を使用してデータをキャッシュする、ob を使用して動的ページを静的化するなど)。
(4) mysqlをマスタースレーブレプリケーションにして読み書きを分離します。 (mysqの実行効率とクエリ速度の向上)
(5) 負荷分散にはnginxを使用します。 (ポリモーフィックサーバーへのアクセス圧力を均等に分散します)
8. PHP は他のデータベースでも使用できますか?
PHP は MYSQL データベースと組み合わせるのに最適です。もちろん、PHP は PostgreSql、SqlServer、Oracle、SqlLite などの他のデータベースと併用することもできます。
9. 現在、プログラミングでは MVC の 3 層構造がよく採用されていますが、MVC の 3 層とは何ですか? どのようなメリットがあるのでしょうか?
MVC の 3 つの層は、ビジネス モデル、ビュー、コントローラーを指します。コントローラー層はモデルを呼び出してデータを処理し、データを表示のためにビュー層にマップします。
利点は、①コードの再利用性を実現し、コードの冗長性を回避できること、②MとVによりコード分離が実現され、同じプログラムで異なる表現を使用できることです
10, jsonデータの理解フォーマット?
JSON (JavaScript Object Notation) は軽量のデータ交換形式であり、json データ形式は固定されており、複数の言語でのデータ転送に使用できます。
PHP で json 形式を処理する関数は json_decode( string $json [, bool $assoc ] ) で、JSON 形式の文字列を受け取り、それを PHP 変数に変換します。パラメータ json は、json 文字列形式です。デコードされる文字列。 assoc このパラメータが TRUE の場合、オブジェクトの代わりに配列が返されます;
Json_encode: PHP 変数を json 形式に変換します。
11. Print、echo、print_r の違いは何ですか?
(1) echo と print は両方とも出力できます。違いは、echo は関数ではないので戻り値がありませんが、print は戻り値のある関数であるため、相対的に言えば、以下の方が高速です。通常、Print_r は変数に関する情報を出力するために使用され、通常はデバッグに使用されます。
(2) print は文字列を出力します
(3) print_r は配列オブジェクトなどの複合型を出力します
12. SESSION の違いは何ですかそしてクッキー?
(1) 保存場所: セッションはサーバーに保存され、cookie はブラウザに保存されます
(2) セキュリティ: セッションのセキュリティは cookie よりも高いです
(3) ) session 「セッションサービス」については、使用時にサービスを有効にする必要があります。Cookie を有効にする必要はありません。
を直接使用できます。13. PHP で配列を処理するためによく使用される関数は何ですか? (関数の「パラメータ」と「戻り値」に注目してください)
(1) array() は配列を作成します
(2) in_array() は要素がarray
(3) count() は配列内の要素の数を返します
(4) array_merge() は複数の配列を 1 つの配列にマージします
(5) array_diff( ) 2 つを比較、または 2 つ以上の配列の差分
(6)array_intersect() 2 つ以上の配列の共通部分を取得します
(7)array_keys() 配列のキー リストを取得します
(8)array_values() 配列の値リストを取得
(9)array_unique() 配列内の重複する値を削除
(10)array_push( ) 配列の末尾に 1 つ以上の要素を挿入します (プッシュ)
(11) array_pop() はポップして配列の最後のユニットを返します 配列 (プッシュ)
(12) array_walk() はユーザー定義関数を使用して、
14 の各要素に対してコールバック処理が実行されます。PHP が文字列を処理するための一般的な関数は何ですか? (関数の「パラメータ」と「戻り値」に注目してください)
(1) trim() は文字列の両側にある空白文字とその他の文字を削除します;
(2) strlen( ) 文字列の長さの取得
(3) mb_strlen() 文字列の長さの取得(文字コードを指定可能、中国語文字列の長さを計算)
( 4) substr() は「Is a string」の文字列部分を返します;
(8) str_shuffle () は文字列をランダムにシャッフルします
(9) sprintf() はフォーマットされた文字列に基づいて生成された文字列を返します文字列 (通常、ポイントを取得するために使用されます。テーブルの後のデータ テーブル名)
(10) strstr() は、文字列の最初の出現を検索します。
(11) ラッシュを追加します。バックスラッシュを使用して文字列を引用します。
15, PHP の処理時間に関する一般的な関数は何ですか? (関数の「パラメータ」と「戻り値」に注目してください)
(1) date() は現地の時刻/日付をフォーマットします。
(2) getdate() 日時情報を取得します。
(3)date_default_timezone_set() はデフォルトのタイムゾーンを設定します。
(4) date_default_timezone_get() はデフォルトのタイムゾーンを返します。
(5)mktime() は日付の Unix タイムスタンプを返します。
(6) strtotime() 任意の文字列の日付と時刻の説明を Unix タイムスタンプに解析します
(7) strftime() 地域の設定に従って現地の時刻/日付をフォーマットします
16. データベースを処理するために PHP で使用される一般的な関数は何ですか? (関数の「パラメータ」と「戻り値」に注目)
PHP マニュアルを参照してよく読んでください。この項目は非常に重要です。
17. PHPでファイルを操作するためによく使われる関数は何ですか? (関数の「パラメータ」と「戻り値」に注目してください)
(1) ファイル fopen() を開きます
#(2) ファイル fgets() を読み込みます; 注: file_get_contents () はファイルの読み取り (3) ファイルの書き込み fwrite(); 注: file_put_contents() はファイル (4) ファイル ハンドルのクローズ fclose() (5) ファイルの移動/名前変更 rename() (6) ファイルのコピー copy() (7) ファイルの作成 vim または touch (8) ファイルを削除 unlink()(9) ファイルが最後にアクセスされた時刻を取得 fileatime()(10) ファイルが最後に変更された時刻を取得filemtime()(11) ファイルサイズを取得 filesize()(12) ファイルタイプを取得 filetype()(13) ファイル詳細を取得 state( )(14) ディレクトリかどうかの判定 is_dir()18. PHP でディレクトリ(フォルダ)を操作するときによく使う関数は? (関数の「パラメータ」と「戻り値」に注目してください)#(1) ディレクトリを開きます opendir()
#(2) ディレクトリを読み取ります readdir()( 3) ディレクトリを削除します rmdir()(4) ディレクトリハンドルを閉じます Closedir()(5) ディレクトリを作成します mkdir()(6) ) パス内のディレクトリを返します。 Part dirname()(7) 現在の作業ディレクトリを取得します。 getcwd()(8) 指定されたパス内のファイルとディレクトリを一覧表示します。 scandir()2. データベース部分
## 一般的なリレーショナル データベース管理システム製品は何ですか?
答え: Oracle、SQL Server、MySQL、Sybase、DB2、Access など。
SQL 言語にはどのような部分が含まれますか?各セクションのアクションキーワードは何ですか?
回答: SQL 言語には、データ定義 (DDL)、データ操作 (DML)、データ制御 (DCL)、およびデータ クエリ (DQL) の 4 つの部分が含まれています。 データ定義: テーブルの作成、テーブルの変更、テーブルの削除、インデックスの作成/ドロップなど
データ操作: 選択、挿入、更新、削除、
データ コントロール:grant、revoke
データクエリ:select
整合性制約には何が含まれますか?
データの完全性 (Data Integrity) とは、データの正確さ (Accuracy) と信頼性 (Reliability) を指します。
含まれるもの:
(1) エンティティの整合性: テーブルの各行がテーブル内で一意のエンティティであることを規定します。
(2) ドメインの整合性: テーブル内の列が、値の範囲、精度、その他の規制を含む特定のデータ型の制約を満たす必要があることを意味します。
(3) 参照整合性: 2 つのテーブルの主キーと外部キーのデータが一貫していることを意味し、テーブル間のデータの整合性を確保し、データの損失や無意味なデータの発生を防ぎます。データベース全体に分散されています。
(4) ユーザー定義の整合性: さまざまなリレーショナル データベース システムでは、アプリケーション環境に基づいた特別な制約が必要になることがよくあります。ユーザー定義の整合性は、特定のリレーショナル データベースに対する制約であり、特定のアプリケーションが満たさなければならないセマンティック要件を反映しています。
トランザクションとは何ですか?そしてその特徴は?
トランザクション: 一連のデータベース操作であり、データベース アプリケーションの基本的な論理単位です。
特徴:
(1) 原子性: つまり、すべてのトランザクションが実行されるか、まったく実行されないかの不可分性です。
(2) 一貫性または文字列可能性。トランザクションの実行により、データベースはある正しい状態から別の正しい状態に変換されます。
(3) 分離。トランザクションが正しくコミットされるまでは、トランザクションによって行われたデータへの変更を他のトランザクションに提供することはできません。
(4) 耐久性。トランザクションが正しく送信されると、その結果はデータベースに永続的に保存され、トランザクションの送信後に他の失敗が発生した場合でも、トランザクションの処理結果は保存されます。
簡単な理解: トランザクション内のすべての操作は成功するか失敗します。
ロックとは何ですか?
データベースは、複数のユーザーが使用する共有リソースです。複数のユーザーが同時にデータにアクセスすると、複数のトランザクションがデータベース内の同じデータに同時にアクセスします。同時操作が制御されていない場合、誤ったデータが読み取られて保存され、データベースの一貫性が破壊される可能性があります。
ロックは、データベースの同時実行制御を実現するための非常に重要なテクノロジです。トランザクションはデータ オブジェクトを操作する前に、まずシステムにロック要求を送信します。ロック後、トランザクションはデータ オブジェクトに対して一定の制御を持ちます。トランザクションがロックを解放するまでは、他のトランザクションはデータ オブジェクトを更新できません。
基本的なロック タイプ: ロックには行レベルのロックとテーブル レベルのロックが含まれます
ビューとは何ですか?カーソルとは何ですか?
ビューは、物理テーブルと同じ機能を持つ仮想テーブルです。ビューは追加、変更、確認、操作できます。ビューは通常、1 つまたは複数のテーブルの行または列のサブセットです。ビューを変更しても、基になるテーブルには影響しません。複数テーブルのクエリと比較して、データの取得が容易になります。
カーソル: クエリ結果セットを単位として効果的に処理します。カーソルをセル内の特定の行に配置して、結果セット内の現在の行から 1 つ以上の行を取得できます。結果セットの現在の行を変更できます。カーソルは通常は使用されませんが、データを 1 つずつ処理する必要がある場合、カーソルは非常に重要です。
ストアド プロシージャとは何ですか?何と呼べばいいでしょうか?
ストアド プロシージャはプリコンパイルされた SQL ステートメントです。利点はモジュール設計が可能であることです。つまり、一度作成するだけで済み、後からプログラム内で複数回呼び出すことができます。特定の操作で SQL を複数回実行する必要がある場合は、単純な SQL ステートメントを実行するよりもストアド プロシージャを使用した方が高速です。ストアド プロシージャは、コマンド オブジェクトを使用して呼び出すことができます。
インデックスの役割は何ですか?そして、その利点と欠点は何ですか?
インデックスは、データベース検索エンジンがデータの取得を高速化するために使用できる特別なクエリ テーブルです。これは現実の本の目次に非常に似ており、本全体をクエリしなくても必要なデータを見つけることができます。インデックスを作成すると、単一の列または複数の列を指定できます。
欠点は、データ入力の速度が遅くなり、データベースのサイズも大きくなることです。
3 つのパラダイムを一般的な方法で理解するにはどうすればよいでしょうか?
第 1 正規形: 1NF は属性に対するアトミック制約であり、属性がアトミックである必要があり、分解できない;
第 2 正規形: 2NF はレコードに対する一意の制約であり、レコードが必要です一意の識別子、つまりエンティティの一意性があります。
第 3 正規形: 3NF はフィールドの冗長性に関する制約です。つまり、どのフィールドも他のフィールドから派生することはできません。フィールドは冗長ではありません。 。
基本テーブルとは何ですか?ビューとは何ですか?
基本テーブルとは独立して存在するテーブルのことで、SQLではリレーションがテーブルに相当します。
ビューは、1 つまたは複数の基本テーブルから派生したテーブルです。ビュー自体はデータベースに独立して保存されるのではなく、仮想テーブルです。
ビューの利点について説明してください。
(1) ビューによりユーザーの操作が簡素化できます
(2) ビューにより、ユーザーは同じデータを複数の角度から表示できます;
(3) ビューによりデータベースがある程度提供されます論理的独立性;
(4) ビューは機密データのセキュリティ保護を提供できます。
NULL とはどういう意味ですか?
値 NULL は UNKNOWN (不明) を表し、「」 (空の文字列) を表しません。
NULL 値を比較すると、NULL 値が生成されます。
値を NULL 値と比較して、論理的に答えが得られることを期待することはできません。
NULL 判定には IS NULL を使用します
主キー、外部キー、インデックスの違いは何ですか?
主キー、外部キー、インデックスの違い
定義:
主キー – レコードを一意に識別し、重複することはできず、空にすることはできません
外部キー – テーブルの外部キーは、別のテーブルの主キーです。外部キーには重複があり、NULL 値も可能です。
インデックス – フィールドには重複値はありませんが、 null 値を指定できます
関数:
主キー – データの整合性を確保するために使用されます
外部キー – 他のテーブルとの接続を確立するために使用されます
インデックス– クエリの並べ替え速度を向上させるために使用されます
Number:
主キー – 主キーは 1 つだけ存在できます
外部キー – テーブルには複数の外部キーを持つことができます
インデックス – テーブルには複数の一意のインデックスを持つことができます
テーブル内のフィールドが特定の範囲のみを受け入れるようにするには何を使用できますか?
の値 データベース テーブルで定義されているチェック制限は、この列に入力される値を制限するために使用されます。
SQL ステートメントを最適化する方法にはどのようなものがあるのか教えてください。 (いくつか選択してください)
(1) Where 句内: where テーブル間の接続は他の Where 条件よりも前に記述する必要があり、最大数のレコードを除外できる条件は、Where 句の最初の部分に記述する必要があります。 Where 句の終わり .HAVING last。
(2) IN を EXISTS に置き換え、NOT IN を NOT EXISTS に置き換えます。
(3) インデックス列での計算の使用を避ける
(4) インデックス列で IS NULL と IS NOT NULL の使用を避ける
(5) クエリを最適化する。テーブル全体のスキャンを回避するには、まず where と order by に関係する列にインデックスを作成することを検討してください。
(6) where 句内のフィールドで null 値の判定を行わないようにしてください。そうしないと、エンジンはインデックスの使用を断念し、テーブル全体のスキャンを実行します。
(7) 回避してください。 where 句を使用する句内のフィールドに対する式操作により、エンジンはインデックスの使用を放棄し、テーブル全体のスキャンを実行します
SQL における「相関サブクエリ」と「非相関サブクエリ」の違いは何ですか声明?
(1) 非相関サブクエリは、外部クエリから独立したサブクエリで、サブクエリは合計 1 回実行され、実行後に値が外部クエリに渡されます。
(2) 当該サブクエリの実行は外部クエリのデータに依存しており、外部クエリが行を実行する際にサブクエリが1回実行されます。
したがって、非相関サブクエリは相関サブクエリよりも効率的です。
char と varchar の違いは何ですか?
char は固定長型、varchar は可変長型です。
違い:
char(M) タイプのデータ列では、各値は M バイトを占めます。特定の長さが M より小さい場合、MySQL はその右側にスペースを使用します。補体。 (埋め込まれたスペース文字は検索操作中に削除されます)。
varchar(M) 型のデータ列では、各値はその長さを記録するのに十分なバイトと 1 バイトのみを占めます (つまり、合計の長さは L 1 バイトです)。
Mysql ストレージ エンジン、myisam と innodb の違い。
MyISAM は非トランザクション ストレージ エンジンです。クエリが頻繁に行われるアプリケーションに適しています。テーブル ロックがあり、デッドロックはありません。トランザクションはサポートされていません。小規模なデータと小規模な同時実行に適しています
Innodb はトランザクションをサポートするストレージ エンジンです。多くの挿入および更新操作を行うアプリケーションに適しています。設計が合理的であれば、行ロック (最大の違いはレベルにあります)ロックの); 大規模なデータ、大規模な同時実行に適しています。
データ テーブルのタイプとは何ですか?
MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV など。
MyISAM: 完成度が高く、安定していて、管理が簡単で、読みやすいです。一部の関数 (トランザクションなど) はテーブルレベルのロックをサポートしていません。
InnoDB: トランザクション、外部キーおよびその他の機能、およびデータ行ロックをサポートします。多くのスペースを占有し、全文インデックス作成などはサポートされていません。
MySQL データベースは公開システムのストレージとして使用されています。1 日あたり 50,000 アイテム以上の増加には、運用と保守に 3 年間かかることが予想されます。最適化するにはどうすればよいですか?
(1) 効率を向上させるために、適切に設計されたデータベース構造を設計し、部分的なデータの冗長性を許可し、結合クエリを回避するように努めてください。
(2) 適切なテーブル フィールドのデータ型とストレージ エンジンを選択し、インデックスを適切に追加します。
(3) mysql マスター/スレーブ レプリケーションの読み取り/書き込み分離を実行します。
(4) データ テーブルを複数のテーブルに分割して、1 つのテーブル内のデータ量を減らし、クエリ速度を向上させます。
(5) Redis、memcached などのキャッシュ機構を追加します。
(6) 頻繁に変更されないページの場合は、静的ページ (ob キャッシュなど) を生成します。
(7) 効率的な SQL を作成します。たとえば、SELECT * FROM TABEL は SELECT field_1, field_2, field_3 FROM TABLE に変更されます。
トラフィックの多い Web サイトの場合、ページ訪問の統計の問題を解決するためにどのような方法を使用しますか?
(1) サーバーが現在のトラフィックをサポートできるかどうかを確認します。
(2) データベースアクセスを最適化します。
(3) 画像のホットリンクなど、外部からのリンクへのアクセス(ホットリンク)を禁止します。
(4) 制御ファイルのダウンロード。
(5) 負荷分散を行い、別のホストを使用してトラフィックをオフロードします。
(6) 閲覧統計ソフトウェアを使用して訪問数を把握し、ターゲットを絞った最適化を実行します。
3. オブジェクト指向の部分
1. オブジェクト指向とは何ですか? (理解して答える)
オブジェクト指向はアイデアベースですon プロセス指向とは、オブジェクト指向がオブジェクトを通じて関数を実装し、関数をオブジェクトにカプセル化し、オブジェクトに特定の詳細を実装させることを意味します。
オブジェクト指向には、カプセル化、継承、ポリモーフィズムという 3 つの大きな特徴があります。
現在の純粋な OO 言語は主に Java と C# です。PHP と C も OO をサポートしています。C はプロセス指向です。
2. private、protected、public 修飾子のアクセス権を簡単に説明します。
private: プライベート メンバーにはクラス内でのみアクセスできます。
protected: 保護されたメンバーは、クラスおよび継承されたクラス内でアクセスできます。
public: 公開メンバー。完全に公開されており、アクセス制限はありません。
3. ヒープとスタックの違いは何ですか?
スタックはコンパイル中に割り当てられるメモリ領域であるため、スタックのサイズはコード内で明確に定義する必要があります;
ヒープはプログラムの実行中に動的に割り当てられるメモリ領域です。割り当てられるヒープ メモリのサイズは、プログラムの実行状況に基づいて決定できます。
4. XML と HTML の主な違い
文法要件が異なります:
(1) html では大文字と小文字が区別されませんが、xml では厳密に区別されます。
(2) HTML では厳密ではない場合がありますが、コンテキストで段落キーまたはリスト キーの終了位置が明確に示されている場合は、
または同様の終了タグを省略できます。 XML では厳密なツリー構造になっており、終了タグを省略してはなりません。
(3) XML では、一致する終了タグのない単一のタグを持つ要素は / 文字で終わる必要があります。このようにして、パーサーは終了タグを検索しないことを認識します。
(4) XML では、属性値は引用符で囲む必要があります。 HTML では、引用符はオプションです。
(5) HTML では、値のない属性名を使用できます。 XML では、すべての属性に対応する値が必要です。
(6) XML 文書では、空白部分はパーサーによって自動的に削除されませんが、html によって空白部分が除外されます。
異なるタグ:
(1) html には固有のタグが使用されますが、xml には固有のタグがありません。
(2) HTML タグは事前定義されており、XML タグは無料でカスタマイズ可能で拡張可能です。
異なる機能:
(1) HTML はデータの表示に使用され、xml はデータの記述とデータの保存に使用されるため、永続化メディアとして使用できます。 HTML はデータと表示を結合してページ上に表示しますが、XML はデータと表示を分離します。 XML は、データの内容に重点を置いてデータを記述するように設計されています。 HTML はデータを表示するために設計されており、データの外観に重点が置かれています。
(2) XML は HTML の代替ではありません XML と HTML は用途が異なる 2 つの言語です。 XML は HTML を置き換えることを目的としたものではなく、実際、XML は HTML を補完するものと考えることができます。 XML と HTML の目標は異なります。HTML の設計目標はデータを表示し、データの外観に重点を置くことですが、XML の設計目標はデータを記述し、データの内容に重点を置くことです。
(3) XML の最も適切な説明は次のとおりです。XML は、情報を処理および送信するための、クロスプラットフォームでソフトウェアおよびハードウェアに依存しないツールです。
(4) XML は将来的にはどこにでも普及するでしょう。 XML は、データ処理とデータ送信のための最も一般的なツールになるでしょう。
5. オブジェクト指向の特徴とは何ですか?
主にカプセル化、継承、ポリモーフィズムが含まれます。 4 つの側面の場合は、抽象化を追加します。
カプセル化:
カプセル化は、ソフトウェア コンポーネントの優れたモジュール性を確保するための基礎です。カプセル化の目標は、ソフトウェア コンポーネントの高い凝集性と低い結合性を実現し、プログラムの相互依存による問題の発生を防ぐことです。将来の変更の影響。
継承:
クラスの定義と実装は、既存のクラスに基づいて行うことができ、コンテンツは独自のコンテンツとみなされます。新しいコンテンツを追加したり、元のメソッドを変更して特別なニーズにより適したものにすることができます。これが継承です。継承は、サブクラスが親クラスのデータとメソッドを自動的に共有するメカニズムであり、ソフトウェアの再利用性と拡張性を向上させるクラス間の関係です。
ポリモーフィズム:
ポリモーフィズムとは、プログラム内で定義された参照変数が指す特定の型と、参照変数を介して発行されるメソッド呼び出しがプログラミング中に決定されるのではなく、プログラム内で決定されることを意味します。参照変数がどのクラスのインスタンス オブジェクトを指すかは、実行時に決定されます。参照変数によって発行されるメソッド呼び出しは、どのクラスに実装されたメソッドです。これは、プログラムの実行中に決定する必要があります。
抽象:
抽象化とは、いくつかの物事の類似点や共通点を見つけ出し、それらをクラスに分類することです。このクラスでは、これらの物事の類似点や共通点のみを考慮します。現在のトピックや目標に無関係な側面は無視し、現在の目標に関連する側面に焦点を当てます。たとえば、アリとゾウを見て、それらがどのように似ているかを想像できる場合、それは抽象化です。
6. 抽象クラスとインターフェイスの概念と違いは何ですか?
抽象クラス: インスタンス化できず、他のクラスの親クラスとしてのみ使用できる特別なクラスです。 abstract キーワードを使用して宣言します。
Interface: これは特別な抽象クラスであり、interface を使用して宣言された特別なクラスです。
相違点:
(1) 抽象クラスの操作は、継承キーワード extends を通じて実装されますが、インターフェイスの使用は、implements キーワードを通じて実装されます。
(2) 抽象クラスにはデータのカプセル化を実現できるデータメンバが存在しますが、インタフェースにはデータメンバがありません。
(3) 抽象クラスにはコンストラクターを含めることができますが、インターフェイスにはコンストラクターはありません。
(4) 抽象クラスのメソッドは、private、protected、および public キーワードを使用して変更できます (抽象メソッドをプライベートにすることはできません)。一方、インターフェイス内のメソッドは、public キーワードを使用してのみ変更できます。
(5) クラスは 1 つの抽象クラスからのみ継承でき、クラスは複数のインターフェイスを同時に実装できます。
(6) 抽象クラスにはメンバ メソッドの実装コードを含めることができますが、インターフェイスにはメンバ メソッドの実装コードを含めることはできません。
7. コンストラクター、デストラクター、およびその機能とは何ですか?
コンストラクター (メソッド) は、オブジェクトの作成後にオブジェクトによって自動的に呼び出される最初のメソッドです。これは宣言されたすべてのクラスに存在し、特別なメンバー メソッドです。その機能は、いくつかの初期化タスクを実行することです。 Php では、__construct() を使用してコンストラクター メソッドを宣言しますが、宣言できるのは 1 つだけです。
デストラクター (メソッド) はコンストラクターの逆で、オブジェクトが破棄される前にオブジェクトによって自動的に呼び出される最後のメソッドです。これは PHP5 で新しく追加されたコンテンツで、ファイルを閉じたりメモリを解放したりするなど、オブジェクトを破棄する前に特定の操作を実行するために使用されます。
8. 親クラスのメソッドをオーバーロードする方法、例を挙げます
オーバーロードとは、親クラスのメソッドをオーバーライドすること、つまり、サブクラスのメソッドを使用してメソッドを置き換えることを意味します親クラスから継承され、メソッドの書き換えとも呼ばれます。
親クラスのメソッドをオーバーライドする鍵は、メソッド名、パラメーター、戻り値の型を含む同じメソッドをサブクラスの親クラスに作成することです。 PHP では、メソッドの名前のみが同じである必要があります。
9. よく使われる魔法の方法は何ですか?たとえば、
php では、2 つのアンダースコア (__) で始まるメソッドはマジック メソッドとして予約されると規定されているため、既存のマジック メソッドをオーバーロードする場合を除き、関数名を __ で始めないことをお勧めします。
__construct() は、クラスをインスタンス化するときに自動的に呼び出されます。
__destruct() は、クラス オブジェクトが使用されるときに自動的に呼び出されます。
__set() は、未定義のプロパティに値を割り当てるときに呼び出されます。
#__get() は、未定義の属性が呼び出されたときに呼び出されます。 __isset() isset() または empty() 関数を使用するときに呼び出されます。 __unset() unset() を使用するときに呼び出されます。#__sleep() は、serialize を使用してシリアル化するときに呼び出されます。
__wakeup() は、unserialize を使用してデシリアライズするときに呼び出されます。
__call() は、存在しないメソッドを呼び出すときに呼び出されます。
__callStatic() は、存在しない静的メソッドを呼び出します。
__toString() は、オブジェクトを文字列に変換するときに呼び出されます。エコーなど。
__invoke() オブジェクトをメソッドとして呼び出そうとするときに呼び出されます。
__set_state() var_export() 関数の使用時に呼び出されます。配列パラメータを受け入れます。
__clone() は、clone を使用してオブジェクトをコピーするときに呼び出されます。
10. 3 つのキーワード $this、self、parent はそれぞれ何を表しますか?どのような状況で使用されますか?
$この現在のオブジェクト
自身の現在のクラス
現在のクラスの親の親クラス
$これは現在のクラスで使用されます。 -> を使用してください; プロパティとメソッドを呼び出します。
self も現在のクラスで使用されていますが、:: を使用して呼び出す必要があります。
parent はクラスで使用されます。
11. クラス内で定数を定義する方法、クラス内で定数を呼び出す方法、およびクラス外で定数を呼び出す方法。
クラス内の定数はメンバー定数でもあり、定数とは変化しない量であり、一定の値です。
定数を定義するには、キーワード const を使用します。
例: const PI = 3.1415326;
クラス内でもクラス外でも、定数にアクセスできます。変数とは異なります。定数はオブジェクトをインスタンス化する必要はありません。定数にアクセスするための形式は、クラス名と呼び出すスコープ操作記号 (二重コロン) を加えたものです。
つまり: クラス名:: クラス定数名;
12. スコープ演算子::? の使用方法どのような状況で使用されますか?
(1) クラス定数の呼び出し
(2) 静的メソッドの呼び出し (静的で変更されたクラス メソッド)
13. __autoload() メソッドの動作原理は何ですか?
このマジック関数を使用するための基本的な条件は、クラス ファイルのファイル名がクラスの名前と一致している必要があることです。
あるクラスをインスタンス化するプログラムを実行する際、インスタンス化前にクラスファイルが導入されていないと、__autoload()関数が自動的に実行されます。
この関数はインスタンス化されたクラス名を元にクラスファイルのパスを検索します。クラスファイルのパスにクラスファイルが存在すると判定された場合は、
include を実行するか、それをロードする必要があります。このクラスを入力すると、プログラムは実行を続けます。このパスにファイルが存在しない場合は、エラーが表示されます。
自動的にロードされるマジック関数を使用すると、多くの include 関数や require 関数を記述する必要がなくなります。
4. THINKPHP パート1. 一般的な PHP フレームワーク答え: thinkPHP、laravel、yii、ci など。
2. TP の単一エントリ ファイルを理解するにはどうすればよいですか?
ThinkPHP は、プロジェクトのデプロイメントとアクセスに単一の入口モードを採用しており、どの機能が完了していても、プロジェクトには統一された (ただし唯一ではありません) 入口があります。すべてのプロジェクトはエントリ ファイルから始まり、すべてのプロジェクトのエントリ ファイルは類似していると言うべきです。
エントリ ファイルには主に次のものが含まれます。
(1) フレームワーク パス、プロジェクト パス、およびプロジェクト名を定義します (オプション)
(2) デバッグ モードと実行モードを定義します。関連する定数 (オプション)
(3) フレームワーク エントリ ファイルのロード (必須)
3. ThinkPHP の MVC 階層化とは何ですか? (理解)
MVCとは、アプリケーションの論理層とプレゼンテーション層を分離する手法です。 ThinkPHP も MVC 設計パターンに基づいています。 MVC は抽象的な概念であり、特に明確な規定はありませんが、ThinkPHP における MVC の階層構造は次のように大まかに反映されています:
Model (M): モデルの定義は Model クラスによって完了します。
コントローラー (C): アプリケーション コントローラー (コア コントローラー App クラス) とアクション コントローラーは両方ともコントローラーの役割を担い、アクション コントローラーはビジネス プロセスの制御を完了し、アプリケーション コントローラーはスケジュール制御を担当します。
View (V): View クラスとテンプレート ファイルで構成されており、テンプレートは 100% 分離されており、独立してプレビューおよび作成できます。
しかし実際には、ThinkPHP は M や V に依存していないため、モデルやビューがなくても動作します。 C にも依存しません。これは、ThinkPHP には、Action の上にマスター コントローラー、つまりアプリケーション全体のスケジューリングを担当する App コントローラーがあるためです。 C が存在しない場合、ビュー V が存在する必要があります。存在しない場合、ビュー V は完全なアプリケーションではなくなります。
つまり、ThinkPHP の MVC モデルは、MVC 自体に固執するのではなく、アジャイル開発の手段を提供するだけです。
4. SQL を最適化するにはどうすればよいですか? (学生は次の説明を理解して、自分の理解に基づいて一般的な意味を述べるだけで済みます)
(1) 正しいストレージ エンジンを選択します
MyISAM は一部のニーズに適しています クエリに最適です-重いアプリケーションには適していますが、大規模な書き込み操作にはあまり適していません。フィールドを更新するだけの場合でも、テーブル全体がロックされ、読み取り操作が完了するまで他のプロセス (読み取りプロセスであっても) が動作できなくなります。さらに、MyISAM は SELECT COUNT(*) などの計算が非常に高速です。
InnoDB の傾向は非常に複雑なストレージ エンジンになり、一部の小規模なアプリケーションでは MyISAM よりも遅くなるでしょう。ただし、「行ロック」をサポートしているため、書き込み操作が多い場合はより優れています。さらに、トランザクションなどのより高度なアプリケーションもサポートします。
(2) フィールドのデータ型を最適化する
原則を覚えておいてください。列が小さいほど高速になります。テーブルに数列しかない場合 (ディクショナリ テーブル、構成テーブルなど)、主キーとして INT を使用する理由はなく、MEDIUMINT、SMALLINT、またはより小さい TINYINT を使用する方が経済的です。時間を追跡する必要がない場合は、DATETIME よりも DATE を使用する方がはるかに優れています。もちろん、拡張のための十分な余地も残しておく必要があります。
(3) 検索フィールドにインデックスを追加する
インデックスは、必ずしも主キーや唯一のフィールドを意味するわけではありません。テーブル内に常に検索に使用するフィールドがある場合は、そのフィールドにインデックスを作成することをお勧めします。検索するフィールドが大きなテキスト フィールドでない場合は、フルテキスト インデックスを作成する必要があります。
(4) Select の使用を避けてください。データベースから読み取られるデータが増えるほど、クエリが遅くなります。また、データベースサーバーとWEBサーバーが独立した2台のサーバーの場合、ネットワーク通信の負荷も大きくなります。データ テーブル内のすべてのフィールドをクエリする場合でも、ワイルドカードは使用しないでください。組み込みのフィールド除外定義をうまく活用すると、より便利になる場合があります。
(5) VARCHAR の代わりに ENUM を使用する
ENUM 型は非常に高速でコンパクトです。実際には、TINYINT を保持しますが、文字列として表示されます。このようにして、このフィールドを使用して選択リストを作成するのが非常に完璧になります。たとえば、性別、民族、部門、ステータスなどのフィールドの値が限定されており、固定されている場合は、VARCHAR ではなく ENUM を使用する必要があります。
(6) 可能な限り NOT NULL を使用する
NULL 値を使用する特別な理由がない限り、フィールドは常に NOT NULL にしてください。 NULL は実際には余分なスペースを必要とするため、比較を実行するとプログラムがより複雑になります。もちろん、これは NULL を使用できないという意味ではなく、実際は非常に複雑であり、NULL 値を使用する必要がある状況が依然として存在します。
(7) 固定長テーブルは高速になります
テーブル内のすべてのフィールドが「固定長」の場合、テーブル全体が「静的」または「固定長」とみなされます。 」。たとえば、テーブルには VARCHAR、TEXT、BLOB 型のフィールドはありません。これらのフィールドのいずれかを含めている限り、テーブルは「固定長の静的テーブル」ではなくなり、MySQL エンジンは別の方法でテーブルを処理します。
固定長テーブルを使用すると、MySQL の検索が高速になるため、パフォーマンスが向上します。これらの固定長により、次のデータのオフセットの計算が容易になるため、読み取りも自然に高速になります。また、フィールドが固定長でない場合、次のフィールドを検索するたびに、プログラムは主キーを検索する必要があります。
また、固定長テーブルはキャッシュと再構築が容易です。ただし、唯一の副作用は、固定長フィールドは使用するかどうかに関係なく非常に多くのスペースを必要とするため、固定長フィールドによってスペースが浪費されることです。
5. ThinkPHP 3.0 アーキテクチャー (コア動作ドライバー) の動作を理解するにはどうすればよいですか?
(1) コア: フレームワークの中核となるコードであり、不可欠なものであり、TP 自体も MVC の考え方に基づいて開発されたフレームワークです。
(2) 動作: 動作は、ThinkPHP の新バージョンのアーキテクチャにおいて決定的な役割を果たします。システムのコアでは、多くのタグ拡張ビットが設定されており、各タグ位置は、独自の関数を実行できます。独立した行動。このようにして動作拡張機能が誕生し、多くのシステム機能も組み込みの動作拡張機能によって完成されます。すべての動作拡張機能は置き換え可能であり、追加可能であるため、基礎となるフレームワークのアセンブリの基礎を形成します。
(3) ドライバー: データベース ドライバー、キャッシュ ドライバー、タグ ライブラリ ドライバー、テンプレート エンジン ドライバー、および外部クラス拡張機能。
6. 従来の構成とは何ですか?
いわゆる従来の構成は、フレームワーク独自の構成ファイルです。このファイルはコアフレームワークディレクトリのconvention.php内にあり、設定内容は以下の通りです。このファイルはフレームワーク付属の設定ファイルに属するため、実際の開発では主に参考例として使用しており、このファイルの設定内容を変更することはほとんどなく、設定内容に合わせてフィールドを設定することが多いです。モジュールまたは共通の構成コンテンツをカスタマイズするための定義と注釈。
7. SQL インジェクションとは何ですか? (理解)
SQL インジェクション攻撃は、ハッカーがデータベースを攻撃するために使用する一般的な手段の 1 つです。
一部のプログラマーは、コードを記述するときにユーザー入力データの合法性を判断しません。インジェクターはデータベース クエリ コードをフォームに入力して送信でき、プログラムは送信された情報を組み合わせて完全な SQL を生成します。ステートメントを実行すると、サーバーはだまされて悪意のある SQL コマンドを実行します。インジェクターは、プログラムから返された結果に基づいて機密データを取得し、サーバー全体を制御することにも成功します (これが SQL インジェクションです)。
8. ThinkPHP はどのようにして SQL インジェクションを防止しますか? (理解)
(1) より安全な方法であるクエリ条件には配列を使用するようにしてください。
(2) 最後の手段として文字列クエリ条件を使用する必要がある場合は、前処理を使用してください。メカニズム;
(3) バインディング パラメータを使用する
(4) データ フィールド タイプの検証を有効にし、数値データ タイプの変換を強制できます; (フィールド タイプの検証はバージョン 3.1 以降必須です)
(5) 自動検証および自動補完メカニズムを使用して、アプリケーションのカスタム フィルタリングを実行します。
(6) フィールド タイプ チェック、自動検証、および自動補完メカニズムを使用して、悪意のあるデータの入力を回避します。データ。
9. デバッグ モードを有効にするにはどうすればよいですか?デバッグモードの利点は何ですか?
デバッグ モードの有効化は非常に簡単です。エントリ ファイルに定数定義コードを 1 行追加するだけです:
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define(‘APP_DEBUG’, true);
デバッグ モードの利点は次のとおりです: ログ、エラー情報を有効にするデバッグ情報は詳細に記録され、デバッグを容易にします。テンプレート キャッシュをオフにすると、テンプレートの変更はすぐに有効になります。SQL ログを記録して SQL 分析を容易にします。フィールド キャッシュをオフにすると、データ テーブルのフィールドの変更はキャッシュの影響を受けません。ファイルの大文字と小文字を厳密にチェック (Windows プラットフォーム上でも) することで、Linux 導入の問題の発見に役立ちます。開発、テスト、デモンストレーション、その他の必要な状況を含む、開発プロセスのさまざまな段階で便利に使用できます。さまざまなアプリケーション モードを構成できます。独立したプロジェクト構成ファイル。
10. TP ではどのような構成モードがサポートされていますか?優先度?
従来の構成 ->アプリケーション構成 ->モード構成 ->デバッグ構成 ->状態構成 ->モジュール構成 ->拡張構成 ->動的構成
上記設定ファイルのロード順序であり、後の設定は同じ名前の以前の設定を上書きするため(有効でない場合)、優先順位は右から左になります。
11. TP の URL パターンは何ですか?デフォルトはどれですか?
ThinkPHP は、通常モード、PATHINFO、REWRITE、互換モードを含む 4 つの URL モードをサポートしており、URL_MODEL パラメーターを設定することで定義できます。
デフォルトのモードは: PATHINFO モード、URL_MODEL を 1
12 に設定します。TP のシステム変数は何ですか?システム変数を取得するにはどうすればよいですか?
(1) システム変数: SERVER、_SERVER、SERVER、_ENV、$_POST、$_GET、REQUEST、_REQUEST、REQUEST、_SESSION、および $_COOKIE 変数
(2) システム変数を取得します。
{KaTeX parse error: Expected 'EOF', got '}' at position 25: …ver.script_name}̲ // 输出_SERVER[‘SCRIPT_NAME’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 22: …session.user_id}̲ // 输出_SESSION[‘user_id’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 21: ….get.pageNumber}̲ // 输出_GET[‘pageNumber’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 18: …ink.cookie.name}̲ // 输出_COOKIE[‘name’]变量
13. ThinkPHP フレームワークの D 関数と M 関数の違いは何ですか?
M メソッドは、ユーザーが各データ テーブルのモデル クラスを定義しなくても、モデルをインスタンス化します。D メソッドは、モデル クラスを自動的に検出できます。カスタム モデル クラスが存在する場合は、カスタム モデル クラスをインスタンス化します。存在しない場合、M メソッドが自動的に呼び出され、Model 基本クラスがインスタンス化されます。同時に、インスタンス化されたモデルは繰り返しインスタンス化されません (シングル ケース モード)。
5. スマートなテンプレート エンジン
1. コンパイルとキャッシュの違いは何ですか?
smarty のコンパイル プロセスは、テンプレートを取得し、内部のタグを対応する php コードに置き換えることです。これが Smarty のコンパイルです。実際には、php と html を混合するプロセスです。
Smarty のキャッシュの必要性 手動で有効にすると、smarty のキャッシュはコンパイルされたファイルを実行し、同時に静的な HTML ページを生成します。再度アクセスすると HTML ファイルにアクセスするため、効率の点でより高くなります。 。
2. Smarty とは何ですか? Smarty の利点は何ですか?
Smarty は、PHP で書かれた PHP テンプレート エンジンです。その目的は、PHP プログラムをアーティストから分離し、プログラマーが変更できるようにすることです。プログラムの論理コンテンツはアーティストのページ デザインに影響を与えず、アーティストがページを再変更しても、プログラムのプログラム ロジックには影響しません。これは、複数人によるコラボレーション プロジェクトでは特に重要です。 (マルチスタイルプログラムの開発も容易です)
スマートな利点
(1) 高速: 他のテンプレートエンジンと比較して。
(2) コンパイル型:smarty で書かれたプログラムは、実行時に非テンプレート技術の PHP ファイルにコンパイルする必要があります
(3) キャッシュ技術: ユーザーが保存したコンテンツを変換できます。最終的に、HTML ファイルが静的 HTML ページにキャッシュされることがわかります。
(4) プラグイン テクノロジ: Smarty はプラグインをカスタマイズできます。
smartyの使用には適していません
(1) リアルタイムで更新する必要があるコンテンツ。たとえば、在庫表示のように、データを頻繁に更新する必要があります
(2)小项目。小项目因为项目简单而美工与程序员兼于一人的项目
3、在模板中使用{$smarty}保留变量
{KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.get.page}̲ //类似在php脚本中访问_GET[page] {KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.cookies.}̲ {smarty.post.} {KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.session.}̲ {smarty.server.}
在模板中访问php中的变量
5、变量调解器
2018PHP经典面试题大全汇总(更新)-PHP面试题
6、php查询mysql数据库时,查询中文结果时出现的乱码。怎么解决?
(1)文件meta(设置浏览器解析的时候)
(2)连接数据库时编码设定
(3)PHP文件中使用header函数确定编码
7、缓存机制
如果开启了缓存,smarty同时生成一份静态的html页面,如果在设定的时间没有过期,再次访问的时候,你访问的就是是html文件了,减少了读取数据库,所以就效率来说,要高一些。
8、smarty的赋值和载入模板
$Smarty->assign(name,value) $Smarty->display(‘index.html’)
9、marty模板技术的用途是什么?
为了php与html分开,美工和程序员各司其职,互不干扰。
10、smarty配置主要有哪几项?
(1)引入smarty.class.php;
(2) 实例化smarty对象;
(3)重新修改默认的模板路径;
(4)重新修改默认的编译后文件的路径;
(5)重新修改默认的配置文件的路径;
(6)重新修改默认的cache的路径。
(7) 可以设置是否开启cache。
(8)可以设置左侧和右侧定界符。
11、smarty在使用过程中需要注意哪些细节?
Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,
也就是说smarty技术将用户UI与php代码分离开。
这样程序员和美工各司其职,互不干扰。
12、smarty运用过程中要注意以下几个问题:
(1)正确配置smarty。主要要实例化smarty对象,配置smarty模板文件的路径;
(2)php页面中使用assign赋值 和display显示页面;
(3)smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。
六、二次开发系统(DEDE、ecshop)
1、对二次开发的理解
二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。
2、MVC
Model(模型)数据处理。
View(视图) 模板显示。
Controller(控制器) 控制流程。
MVC的概念是什么?各层主要做什么工作?
MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。
M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。
使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。
在网站开发中,
模型层一般负责对数据库表信息进行增删改查,
视图层负责显示页面内容,
控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法,
执行完毕后由控制器层决定将结果assign到哪个view层。
3、二次开发程序安装后访问时候出现一些警告以及错误
根据错误,来修改服务器配置参数以及百度
4、功能,模板的更换,功能的添加修改
其实也就是面向对象的应用 用,以及模板的更换类似smarty的使用
5、用过哪些二次开发的东西?
Dedecms phpcms ecshop,基本这些的东西如果基础好了 学习起来都是没问题的。
6、像php做一次开发好,还是二次开发好?
一般中小企业都用cms系统二次开发,都是为了效率。当然如果想一次开发也行,会用框架而且时间充足的话就可以了,大企业都是团队来开发的,杜绝版权问题。
7、二次开发过程中很多类与类之间进行之间的方法访问,是通过什么方式传递的?
不是类继承而是对象组合,把实例化好的对象通过global传递进去
8、dedecms如果更换目录,后台某项就进不去了如何解决?
后台核心设置中修改成现在的 项目目录名称
9、dedecms中自定义模型的理解?
在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。
当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点。
相当于我们自动添加了表结构,适应现在当前需求的变化
10、dede中概念,设计和使用模板,必须要理解下面几个概念
(1)板块(封面)模板:
指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。
(2)列表模板:
指网站某个栏目的所有文章列表的模板,一般用 “list_识别ID.htm” 命名。
(3) 档案模板:
表示文档查看页的模板,如文章模板,一般用 “article_识别ID.htm” 命名。
(4) 其它模板:
一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。
11、dede中几种标签的使用?
列表 内容 等标签 只能在其本范围内使用,列表标签只能在列表中使用,内容标签只能在内容标签中使用。
全局标签能在所有页面中使用
12、熟悉常用类库
(例如:dedesql.class.php);熟悉系统函数库(common.func.php);熟悉自定义函数库(extend.func.php);熟悉前台入口文件(common.inc.php)
七、微信公众平台开发
1、微信运行机制
公众号与php之间用什么语言通信:Xml
Weixin.php中是如何接收公众号数据的:
$postStr = $GLOBALS[“HTTP_RAW_POST_DATA”];//接收数据 XML数据
2、消息类型
微信目前提供了7种基本消息类型,分别为:
(1)文本消息(text);
(2)图片消息(image);
(3)语音(voice)
(4)视频(video)
(5)地理位置(location);
(6)链接消息(link);
(7)事件推送(event)
类型。掌握不同的消息类型发送时的数据传递格式
3、将整个文件读入一个字符串的函数是
File_get_contents
4、常用函数
把xml数据解析成对象的函数是
simplexml_load_string( )
将字符串转换为数组的函数是___ explode_________,将数组转化为字符串的函数是____implode________.
编码 URL 字符串的字符串是____urlencode________.
5、Sprintf函数的作用
这个都是可以查手册的。
6、微信公众号出现无法提供服务的原因?
(1)网络原因 ,数据接口原因
(2)代码错误,怎么推测原因
修改的哪里检查一下,如果代码没错
可以输出数据 看一下。用php操作文件
$myfile = fopen(“newfile.txt”, “w”); txt="aaaaaaaaaa";fwrite( txt ="aaaaaaaaaa";fwrite(txt="aaaaaaaaaa";fwrite(myfile, txt);fclose( txt);fclose(txt);fclose(myfile);
7、自定义菜单的事件推送
单击
单击跳转链接
扫码推事件
扫码推且弹出
弹出系统拍照发图的事件
弹出微信相册发图器的事件
弹出地理位置选择器的事件
8、token的作用
安全机制验证,用于微信服务器与PHP服务器之间的安全验证
9、Appid与secrect的作用
请求api接口(例如菜单的操作)时需要传appid与secrect两个值,用来获取应用的授权码
laravle面试题
PHP7 和 PHP5 的区别,具体多了哪些新特性?
性能提升了两倍
结合比较运算符 (96b4fef55684b9312718d5de63fb7121)
标量类型声明
返回类型声明
try…catch 增加多条件判断,更多 Error 错误可以进行异常处理
匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义
…… 了解更多查看文章底部链接 PHP7 新特性
为什么 PHP7 比 PHP5 性能提升了?
变量存储字节减小,减少内存占用,提升变量操作速度
改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
laravel 模块
服务提供者是什么?
服务提供者是所有 Laravel 应用程序引导启动的中心, Laravel 的核心服务器、注册服务容器绑定、事件监听、中间件、路由注册以及我们的应用程序都是由服务提供者引导启动的。
IoC 容器是什么?
IoC(Inversion of Control)译为 「控制反转」,也被叫做「依赖注入」(DI)。什么是「控制反转」?对象 A 功能依赖于对象 B,但是控制权由对象 A 来控制,控制权被颠倒,所以叫做「控制反转」,而「依赖注入」是实现 IoC 的方法,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。
簡単に言えば、その機能は、依存関係注入を使用して複雑なアプリケーションを連携するオブジェクトに分解し、それによって問題解決の複雑さを軽減し、アプリケーション コードの低結合と高度な拡張を実現することです。
Laravel のサービス コンテナは、クラスの依存関係を管理し、依存関係の注入を実行するために使用されるツールです。
ファサードとは何ですか?
Facades (通常は外観モードとして翻訳されるデザイン パターン) は、IoC コンテナに登録されているクラスにアクセスするための「静的」(静的) インターフェイスを提供します。手動で挿入または構成する必要がある長いクラス名を覚える必要がなく、シンプルで覚えやすい構文を提供します。さらに、PHP の動的メソッドを独自に使用しているため、テストが非常に簡単になります。
契約とは何ですか?
Contract (コントラクト) は、フレームワークによって提供されるコアサービスを定義するための laravel のインターフェイスです。コントラクトとファサードに本質的な違いはなく、その機能はインターフェイスの結合を減らし、よりシンプルにすることです。
依存性注入の原理?
これについては説明しませんが、これは IoC コンテナを理解するための前提条件です。
Composer とは何ですか?また、どのように機能しますか?
Composer は、PHP の依存関係管理ツールです。動作原理は、開発された拡張機能パッケージを packageist.org コンポーザー リポジトリからアプリケーションにダウンロードし、依存関係とバージョン管理を宣言することです。
キャッシュ
Redis と Memecached の違いは何ですか?
Redis は、文字列、ハッシュ、リスト、セット、ソート セットなど、より豊富なデータ ストレージ タイプをサポートしています。 Memcached は単純なキーと値の構造のみをサポートします。
Memcached キー/値ストレージは、キー/値ストレージにハッシュ構造を使用する Redis よりもメモリ使用率が高くなります。
Redis は、一連のコマンドのアトミック性を保証するトランザクション関数を提供します
Redis はデータの永続性をサポートし、ディスク上のメモリにデータを保持できます
Redis は単一のコアのみを使用します。一方、Memcached は複数のコアを使用できるため、各コアに少量のデータを保存する場合、平均して Redis の方が Memcached よりも高いパフォーマンスを発揮します。
Redis はどのようにして永続性を実現しますか?
RDB 永続化は、メモリ内の Redis の状態をハードディスクに保存します。これは、データベースの状態をバックアップするのと同じです。
AOF 永続性 (Append-Only-File)、AOF 永続性は、Redis サーバー ロック実行の書き込みステータスを保存することによってデータベースを記録します。バックアップ データベースによって受信されるコマンドと同様に、AOF に書き込まれるすべてのコマンドは Redis プロトコル形式で保存されます。
データベース
インデックスとは何ですか?またその機能は何ですか?一般的なインデックスの種類は何ですか? MySQLのインデックス作成の原則?
インデックスは、データ テーブル内のすべてのレコードへの参照ポインターを含む特別なファイルであり、本の目次に相当します。その機能は、データ検索効率を高速化することです。一般的なインデックスの種類には、主キー、一意のインデックス、複合インデックス、フルテキスト インデックスなどがあります。
インデックス作成の原則
左端の接頭辞の原則
差別化の高い列をインデックスとして選択する
インデックスを可能な限り拡張し、インデックスを作成しないでください。新しいインデックス
高い同時実行性にどう対処するか?
キャッシュを使用する
データベースを最適化し、データベースの使用効率を向上させる
負荷分散
PHP の設計パターンについては詳しく説明しません。しかし、SOLID の設計原則は、すべての PHPer がそれをマスターする必要があるということです。
以上がPHP 面接の質問の完全なコレクション (収集する価値があります)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。