この記事は、PHP 面接でよくある質問 (回答付き) をまとめたもので、困っている人には參考になると思います。
# 初めて PHP のポジションに面接したときのことを覚えています。私は學校を卒業(yè)したばかりで、市場がどのようなものなのか知りませんでした。 、そしてそれは経験ゼロでした(ここに文章を挿入してください、経験ゼロ、あなたが完全または半完成のプロジェクトの開発に一度も攜わったことがない場合、會社はあなたを望んで採用しているので、通常、會社はあなたを必要としません。會社の事業(yè)と業(yè)績の向上を達成するために。その時、試用期間は800元だと言ったばかりです、もちろん、それは何年も前のことです。価格もかなり安いので、會社からのお願いでした! ! !理由はとても簡単で、誰もが知っています!
[関連する推奨事項: php 面接の質問 (要約)]
企業(yè)內でプロジェクトを行う場合、成長はプロセスであり、自分自身の學習スキルを向上させることが鍵となります既存の。入社前に1~2回の面接と筆記試験がありますが、これはどの業(yè)界でも同様で、口頭表現(xiàn)力(話せること)に加えて、強みや能力も求められます。面接の質問が具體化するものでもあります。面接の質問にはさまざまな種類がありますが、それらはすべて PHP の基本から切り離すことができません。社會に出たばかりの人の中には、試験問題が理解できない人もいるかもしれません。その時に私が実際に使った方法を紹介します!すべての問題タイプを暗記するだけです。この方法は非常に時代遅れで非現(xiàn)実的です。でも、よくある質問の種類はすべて出てきたので、とても役に立ちました~~私は幸運かもしれません!
誰もが獨自の方法で學ぶことができます。前にもそうやってここに來たことがある!これからも、私たちは學び続けてスキルを向上させ、學び続けなければなりません。一度罠にはまると抜け出すのは難しい!
以下では、面接でよくある質問をいくつか紹介します。お役に立てば幸いです。 !
1. バブルソート、面接前に必ず覚えておいてください。
function maopao($arr) { $len = count($arr); $n = count($arr) - 1; for ($i = 0; $i < $len; $i++) { for ($j = 0; $j < $n; $j++) { if ($arr[$j] > $arr[$j + 1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $tmp; } } } return $arr; }
2. 簡単に説明します。面接前に必ず覚えておいてください。
function quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++){ if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr); }
3. PHP で値渡しと參照渡しの違いを説明してください。値渡しと參照渡しの場合は次のとおりです。
値渡し: 関數(shù) スコープ內の値への変更は関數(shù)の外では無視されます
參照渡し: 関數(shù)スコープ內の値への変更は関數(shù)の外にも反映されます
長所と短所: 參照による 値が渡されると、php はその値をコピーする必要があります。特に大きな文字列やオブジェクトの場合、これはコストのかかる操作になる可能性があります。參照渡しでは値をコピーする必要がないため、パフォーマンスの向上に役立ちます。 (利點と欠點をテストします)
4. MySQL データベースのフィールド タイプ varchar と char の主な違いは何ですか? ##Varchar は変數(shù) Long であり、記憶域を節(jié)約します。char は固定長です。 varchar は非固定長のため、まず長さを検索してからデータを抽出する必要があり、char 型よりも検索効率が高くなります。効率は低くなります。
5. MySQL データベースの一般的なストレージ エンジンとその違いは?
MyISAM: トランザクションとテーブル ロックをサポートせず、斷片化が起こりやすく、頻繁に最適化する必要があり、読み取りおよび書き込み速度が速く、全文インデックス作成をサポートしています。 InnoDB: トランザクション、行ロック、クラッシュ回復機能をサポートします。読み書き速度は MyISAM より遅く、全文インデックス作成は 5.6 以降でサポートされます。
ストレージ エンジンはデータベースではなくテーブルに基づいています (この質問は可能であればさらに詳しく教えてください)6. トラフィックが多い Web サイトでは、トラフィックの問題を解決するためにどのような方法が使用されますか?
まず、サーバー ハードウェアが現(xiàn)在のトラフィックをサポートするのに十分であるかどうかを確認します。
次に、データベース アクセスを最適化します。
3 番目に、外部ホットリンクを禁止します。
4 番目に、大きなファイルのダウンロードを制御します。
5 番目、メインのトラフィックを迂回するために別のホストを使用します
6 番目、トラフィック分析および統(tǒng)計ソフトウェアを使用します
7 番目、靜的ページとキャッシュを使用してみます
7. オブジェクト指向とは何ですか?主な特徴は何ですか?
オブジェクト指向はプログラムの設計手法であり、プログラムの再利用性を高め、プログラムの構造を明確にします。主な機能: カプセル化、継承、ポリモーフィズム。
8. セッションとクッキーの違いは何ですか?これが重要なポイントです。
SESSION はサーバー側に保存され、COOKIE はクライアント側に保存されます。セッションは比較的安全です。Cookie は特定の方法で変更される可能性があり、安全ではありません。セッションは配信のために Cookie に依存します。 Cookie を無効にした後も、セッションを保存するファイルではセッション ID が生成され、そのセッション ID が get パラメータを通じてセッションを共有するページに渡されます。 read を使用してセッションからデータを取得します。
セッションと cookie に関する詳細なチュートリアルを探すことをお勧めします
9 キャッシュ テクノロジについて理解していますか? redis はテスト ポイントです。
1 キャッシュ テクノロジは、動的コンテンツをファイルにキャッシュし、一定期間內に動的ページにアクセスして、キャッシュされたファイルを再度呼び出す必要がありません。データベース。
2. キャッシュには memcache を使用します。
10. フォーム
#get での get 送信メソッドと post 送信メソッドの違いは明確であり、データは URL から確認できます。データ量が少なく、セキュリティが低い。
post は暗黙的で、送信されるデータ量が多く、セキュリティが高い。
11。データベースを最適化する方法
最も適切なフィールド屬性を選択し、定義されたフィールドの幅をできる限り減らし、フィールドを NOTNULL
に設定してみてください。サブクエリの代わりに接続 (JOIN) を使用します
ユニオン (UNION) を適用して手動で作成した一時テーブルを置き換えます
#トランザクション処理#テーブルをロックし、トランザクション処理を最適化します
# #外部キーを使用し、ロック テーブルを最適化するインデックスを使用するクエリ ステートメントを最適化する12. include ステートメントと require ステートメントの違いは何ですか? include ステートメントと require ステートメントの違いは何ですか?
require は無條件の包含です。つまり、require がプロセスに追加された場合、ファイルが存在しない場合、またはファイルが存在できない場合、條件が true であるかどうかに関係なく、require が最初に実行されます。開くとエラーが表示され、プログラムの実行が終了します。
include には戻り値がありますが、require はありません (おそらく、インクルードされたファイルが存在しない場合)。エラーが表示されますが、プログラムは続行されます13。redis、memcacahe、mongoDB の違いは何ですか?これらはすべて非常に高いパフォーマンスを備えた非リレーショナル データベースですが、mongoDB、memcache、redis は 2 つの異なるタイプです。後者の 2 つは主にデータのキャッシュに使用され、前者は主にデータベースに近いドキュメント型の非リレーショナル データベースです。
データの保存場所の観點から見ると、memcache データはメモリに保存されますが、redis はメモリまたはディスクに保存して、memcache の電源がオフになると、データはすべて保存されます。失われた場合、redis はスナップショットと AOF を使用してデータをディスクに保存し、物理メモリが使い果たされたときに、データをディスクからメモリに読み取ることができます。 保存されるデータの種類に関しては、memcache と redis は両方のキーと値のペアを保存しますが、redis 値には文字列 (string)、ハッシュ (hash)、リスト (List)、 set (セット) zset (順序セット)、memcache は主に文字列を格納します。 14. PHP の基本的な変數(shù)の型4 つのスカラー型: boolean (ブール型)、integer (整數(shù)型)、float (Floating)ポイント型 (double とも呼ばれます)、文字列 (文字列)
2 つの複合型: 配列 (配列)、オブジェクト (オブジェクト)最後に、リソース (リソース)、NULL という 2 つの特別な型があります。 (NULL) 15. 靜的化はどのように行われますか?擬似靜的を実裝するにはどうすればよいですか?1. 靜的化とは、ページの靜的化を指します。つまり、実際の靜的ファイルを生成します。つまり、データはデータベースにクエリせずにファイルから直接取得できます。 主な実裝方法は 2 つあります。
1 つは、データベースに情報を追加するときに生成される靜的ファイルで、テンプレート置換テクノロジとも呼ばれます。
2、偽靜態(tài)不是真正意義上的靜態(tài)化,之所以使用偽靜態(tài),主要是為了SEO推廣,搜索引擎對動態(tài)的文件獲取難度大,不利于網(wǎng)站的推廣。實習原理是基于Apache或Nginx的rewrite機智
主要有兩種方式:
一種是直接在配置虛擬機的位置配置偽靜態(tài),這個每次修改完成后需要重啟web服務器。
另一種采用分布式的,可以在網(wǎng)站的根目錄上創(chuàng)建.htaccess的文件,在里面配置相應的重寫規(guī)則來實現(xiàn)偽靜態(tài),這種每次重寫時不需要重啟web服務器,且結構上比較清晰。
16、Mysql的讀寫分離?(進階的會遇到)
讀寫分離的實現(xiàn)原理就是在執(zhí)行SQL語句的時候,判斷到底是讀操作還是寫操作,把讀的操作轉向到讀服務器上(從服務器,一般是多臺),寫的操作轉到寫的服務器上(主服務器,一般是一臺,視數(shù)據(jù)量來看)。當然為了保證多臺數(shù)據(jù)庫數(shù)據(jù)的一致性,需要主從復制。
17、如何處理負載,高并發(fā)?
1、HTML靜態(tài)化
效率最高、消耗最小的就是純靜態(tài)化的html頁面,所以我們盡可能使我們的 網(wǎng)站上的頁面采用靜態(tài)頁面來實現(xiàn),這個最簡單的方法其實也是最有效的方法。
2、圖片服務器分離
把圖片單獨存儲,盡量減少圖片等大流量的開銷,可以放在一些相關的平臺上,如七牛等
3、數(shù)據(jù)庫集群和庫表散列及緩存
數(shù)據(jù)庫的并發(fā)連接為100,一臺數(shù)據(jù)庫遠遠不夠,可以從讀寫分離、主從復制,數(shù)據(jù)庫集群方面來著手。另外盡量減少數(shù)據(jù)庫的訪問,可以使用緩存數(shù)據(jù)庫如memcache、redis。
4、鏡像:
盡量減少下載,可以把不同的請求分發(fā)到多個鏡像端。
5、負載均衡:
Apache的最大并發(fā)連接為1500,只能增加服務器,可以從硬件上著手,如F5服務器。當然硬件的成本比較高,我們往往從軟件方面著手。
18、說一下單引號雙引號?(基礎考點)
單引號內部的變量不會執(zhí)行, 雙引號會執(zhí)行
單引號解析速度比雙引號快。
單引號只能解析部分特殊字符,雙引號可以解析所有特殊字符。
19、PHP7的新特性?重點
標量類型聲明:PHP 7 中的函數(shù)的形參類型聲明可以是標量了。在 PHP 5 中只能是類名、接口、array 或者 callable (PHP 5.4,即可以是函數(shù),包括匿名函數(shù)),現(xiàn)在也可以使用 string、int、float和 bool 了。
返回值類型聲明:增加了對返回類型聲明的支持。 類似于參數(shù)類型聲明,返回類型聲明指明了函數(shù)返回值的類型??捎玫念愋团c參數(shù)聲明中可用的類型相同。
NULL 合并運算符:由于日常使用中存在大量同時使用三元表達式和 isset()的情況,NULL 合并運算符使得變量存在且值不為NULL, 它就會返回自身的值,否則返回它的第二個操作數(shù)。
use 加強:從同一 namespace 導入的類、函數(shù)和常量現(xiàn)在可以通過單個 use 語句 一次性導入了
匿名類:現(xiàn)在支持通過new class 來實例化一個匿名類
20、PHP 數(shù)組排序
sort() - 以升序對數(shù)組排序
rsort() - 以降序對數(shù)組排序
asort() - 根據(jù)值,以升序對關聯(lián)數(shù)組進行排序
ksort() - 根據(jù)鍵,以升序對關聯(lián)數(shù)組進行排序
arsort() - 根據(jù)值,以降序對關聯(lián)數(shù)組進行排序
krsort() - 根據(jù)鍵,以降序對關聯(lián)數(shù)組進行排序
21、建立索引
(普通索引)-> 創(chuàng)建:CREATE INDEX <索引名> ON tablename (索引字段) 修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段) 創(chuàng)表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段)) (唯一索引)-> 創(chuàng)建:CREATE UNIQUE <索引名> ON tablename (索引字段) 修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段) 創(chuàng)表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段)) (主鍵)-> 它是唯一索引,一般在創(chuàng)建表是建立,格式為: CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
22、PHP支持多繼承嗎?
不支持。PHP中只允許單繼承,父類可以被一個子類用關鍵字“extends”繼承。
23、使用過Memcache緩存嗎,如果使用過,能夠簡單的描述一下它的工作原理嗎?
Memcahce是把所有的數(shù)據(jù)保存在內存當中,采用hash表的方式,每條數(shù)據(jù)又key和value組成,每個key是獨一無二的,當要訪問某個值的時候先按照找到值,然后返回結果。
Memcahce采用LRU算法來逐漸把過期數(shù)據(jù)清除掉。
24、優(yōu)化MYSQL數(shù)據(jù)庫的方法
(1)選擇最有效率的表名順序 (2)WHERE子句中的連接順序 (3)SELECT子句中避免使用‘*’ (4)用Where子句替換HAVING子句 (5)通過內部函數(shù)提高SQL效率 (6)避免在索引列上使用計算。 (7)提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉。 (1).選取最適用的字段屬性,應該盡量把字段設置為NOT NULL (2).使用連接(JOIN)來代替子查詢(Sub-Queries) (3).使用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表 (4).盡量少使用 LIKE 關鍵字和通配符 (5).使用事務和外鍵
25、MySQL主從備份的原理?
mysql支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。
26、error_reporting() 的作用?
設置 PHP 的報錯級別并返回當前級別。
27、如何修改session的生存時間
在php.ini 中設置 session.gc_maxlifetime = 1440 //默認時間
代碼實現(xiàn)
$lifeTime = 24 * 3600; // 保存一天 session_set_cookie_params($lifeTime); session_start();
28、常見的 PHP 安全性攻擊
SQL注入:用戶利用在表單字段輸入SQL語句的方式來影響正常的SQL執(zhí)行。
防止:
使用mysql_real_escape_string()過濾數(shù)據(jù)
手動檢查每一數(shù)據(jù)是否為正確的數(shù)據(jù)類型
使用預處理語句并綁定變量
參數(shù)化SQL:是指在設計與數(shù)據(jù)庫鏈接并訪問數(shù)據(jù)時,在需要填入數(shù)值或數(shù)據(jù)的地方,使用參數(shù) (Parameter) 來給值,用@或?來表示參數(shù)。
XSS攻擊 :跨站點腳本攻擊,由用戶輸入一些數(shù)據(jù)到你的網(wǎng)站,其中包括客戶端腳本(通常JavaScript)。如果你沒有過濾就輸出數(shù)據(jù)到另一個web頁面,這個腳本將被執(zhí)行。
防止:為了防止XSS攻擊,使用PHP的htmlentities()函數(shù)過濾再輸出到瀏覽器。
CSRF: クロスサイト リクエスト フォージェリとは、Web サイトの信頼できるユーザーのように見えるページによって作成されたリクエストを指しますが、偽のリクエストです。
Prevention: 一般言い換えれば、ユーザーがあなたのフォームから來たものであり、送信するすべてのフォームと一致することを確認してください。覚えておく必要がある 2 つの點があります。
ユーザー セッションごとに ID を更新したり、ユーザーに SSL を使用したりするなど、ユーザー セッションに適切なセキュリティ対策を講じます。
別のワンタイム トークンを生成してフォームに埋め込み、セッション (セッション変數(shù)) に保存して、送信時に確認します。たとえば、laravelの_token
コードインジェクション: コードインジェクションは、無効なデータを処理することによってコンピュータの脆弱性を悪用することによって引き起こされます。問題は、通常はファイルのインクルードを介して、誤って任意のコードを実行したときに発生します。コードの書き方が不十分だと、リモート ファイルが組み込まれて実行される可能性があります。多くの PHP 関數(shù)と同様に、require には URL またはファイル名を含めることができます。
コードインジェクションの防止
ユーザー入力のフィルタリング
php.iniでallow_url_fopenとallow_url_includeを無効に設定します。これにより、require/include/fopen
# のリモート ファイルが無効になります。さまざまな種類の質問がありますが、學習の過程でゆっくりと學習スキルを向上させていただければ幸いです。勉強。 ! !
ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









