ホームページ  >  記事  >  2019年春採用PHP面接の質問(回答付き)

2019年春採用PHP面接の質問(回答付き)

幸せな気
幸せな気転載
2019-05-23 13:58:3812579ブラウズ

このインタビューは、新たな旅を始めて世界を理解することだけでなく、自分自身の欠点を発見するプロセスであり、将来の発展(学習)の方向性を決定する機会でもあることを願っています。 (添付: 面接知識ポイントのマインドマップ)

関連おすすめ: 「2019 PHP 面接質問まとめ (集)

PHP

#php は世界で最高の言語です。反論は受け付けません!

1. 基本

1. セッションと cookie の違い
セッションはサーバーに保存され、ユーザーを追跡するために使用されるデータ構造です。 ステータスに応じて、このデータはクラスター、データベース、およびファイルに保存できます。

Cookie は、クライアントがユーザー情報を保存するためのメカニズムです。一部のユーザー情報を記録するために使用され、セッションの実装にも使用されます。 方法。

2, PHP7 を使用して新機能について学習しましたか?

PHP7 は、パフォーマンス、新しい演算子、統一された変数構文などにおいて飛躍的な向上を達成しました。

3 , Magic変数

# __dir__ の意味について質問されました。これは、応答ファイルが配置されているディレクトリです。

4、マジック メソッド

これはよく聞かれる質問です。覚えています。よく使われるものですが、突然 __invoke()
__construct(), __destruct(), __call(), __callStatic() について聞かれて戸惑いました。 、__get()、__set()、__isset()、__unset()、__sleep()、__wakeup()、 __toString()、__invoke()、__set_state()、__clone()、__debugInfo()

2. データ構造とアルゴリズム

1、スタック データ構造

コードを使用してポップ データ構造を実装できる限り、

2、バブル ソート

コードを使用してバブル ソートを実装できる限り、

3.完全なバイナリ ツリーと完全なバイナリ ツリーの違い

下の 2 つのレベルのノード次数のみ 2 未満にすることができ、最下位レベルのノードはレベルの左端に集中します。 特定の位置にある二分木は完全な二分木です
そして、深さが h で 2^h-1 個のノードを持つ二分木は次のようになります。 完全なバイナリ ツリー

3. アーキテクチャ関連

1. Laravel と ThinkPHP の違いは何ですか? laravel について何を不満に思いますか?

ルーティングから始めました。ミドルウェアからコントローラー、データアクセス、ビューなどのさまざまなレベルが紹介されています
不満を言いたい場合は、laravel は一部のプロジェクトと比較して少し「重い」かもしれません

2、 Composer を使用して独自のパッケージをリリースしたことがありますか? ( Composer に基づいた PHP モジュラー開発)

私は「いいえ」と答えました。ちょうどそれについて学びました
インタビュアーは、フレームワークは独自のものだと言いました。 Discuz をベースにした二次開発フレームワーク。その優れた基盤に基づいて、コンポーザーの依存関係管理も blabla

3 に導入されています。プロジェクト記述テンプレートとビューと組み合わせた MVC

の理解について話しましょう、コントローラー間の関係と基本構成

4. 保護

1. XSS クロスサイト スクリプティング攻撃
2. DDOS トラフィック攻撃
3 、CSRF クロスサイト リクエスト フォージェリ攻撃
4、SQL インジェクション

フロントエンド フォームでのユーザー入力を制御または制限する
バックエンド パラメーターや渡されるデータがある場合のフィルターなど

5. プロジェクト

1、プロジェクトの同時実行性の問題を解決する方法

私の解決策は、まずフロントエンドで有効なリクエストを制御することです。たとえば、通常のリクエストは 1 分あたり 1 つだけです。 また、バックエンドは無効なリクエストをフィルタリングし、その操作をキューに入れて実装します

インタビュアーは「キューはブロックされていますか?」と尋ねました。実際に 2 人のユーザーが同時に購入した場合、2 人のユーザーは待機することになります。 完了しました。まだ同じスレッドを使用して完了しています。他の方法で達成することを検討しましたか?

私は「いいえ」と言いましたが、彼は「はい」と言いました ロック メカニズムを使用して、2 番目のページは最初のページが完了するまで順番に待機します。

2、WeChat 支払い固有の実装プロセス

1. H5 ページは支払いリクエストを開始し、次のことをリクエストします。支払い注文を生成します

2. 統合注文 API を呼び出して、前払い注文を生成します## 3. JSAPI ページによって呼び出される支払いパラメータを生成し、署名します。
4. WeChat ブラウザは自動的に支払いを有効にします。 JSAPIインターフェース支払い
5. 支払い確認
6. 非同期通信 加盟店に決済結果を通知すると、加盟店は通知を受け取り、確認メッセージを返信します。
7. 決済結果を返信し、表示します。 ユーザーに支払い情報を表示します

3、ログインと登録機能を実装するだけです

各フレームワークは異なる側面を考慮しているため、独自の理解に従って対応するコードを記述するだけです

4、方法モールを設計するために、


まず B2C モールに限定し、次にデータ テーブルから始めて、その後は単純に フロントエンドとバックエンドの実装ロジックの紹介

MYSQL

Mysql の最適化は基本的に最優先事項であり、特にテスト技術です
1. 基本

1、InnoDB と MyISAM

の違いは何ですか? InnoDB トランザクション処理、行レベルのロック、外部キーのサポート、および複数の行フォーマットのサポート
MyISAM はテーブル レベルのロック、フルテキスト インデックス、およびヒープ テーブルのみをサポートします

2、特徴は何ですかトランザクション

原子性、一貫性、分離、耐久性
3、トランザクション分離レベル

非コミット読み取り、コミット読み取り、反復可能読み取り、シリアル化可能

4、テーブルがありますO_Id、OrderDate、OrderPrice、Customer のフィールドで、注文の合計を見つけたいと考えています。 金額が 2000

    SELECT Customer,SUM(OrderPrice) FROM 

Orders

    GROUP BY Customer

    HAVING SUM(OrderPrice)<2000

5 未満の顧客は、student テーブルのデータをクエリします。60 を超える顧客は合格します。それ以外の場合は不合格です。

スコアを選択、カテゴリ=ケース
スコアのとき >=60 THEN '合格'
ELSE '不合格 '
END
成績リストから

6、すべてのコースを完了していない学生の学生番号と名前をクエリします

    SELECT a.SNO ,a.SNAME  

    FROM student a  

    WHERE a.`SNO` NOT IN  

        ( SELECT b.`SNO` FROM SC b  

        GROUP BY b.`SNO` HAVING COUNT(*) =  

            ( SELECT COUNT(*)  FROM course)

        );

2最適化

1, "select * from students where name='red'","select * from Student where name='blue'", optimize ステートメント

    select name from student where 

name=&#39;red&#39;
    union
    select 

name from student where name=&#39;blue&#39;

or 条件を使用すると、myisam テーブルはインデックスを使用できますが、innodb は使用できません。
innodb は OR を UNION に置き換えます (インデックス列に適用可能)

2、一般的にデータベースを最適化するにはどうすればよいですか

クエリ キャッシュ、EXPLAIN、(ジョイント) インデックス、固定を使用します長さ 静的テーブル

#サーバー

##1.保護

サーバーを保護する方法

限られたポートのみを開き、ログイン IP を制限し、ログイン アカウントを制限する

これは本にまとめられる質問でもあり、答えることができます。プロジェクトによると

2. プロトコル

##Get と Post の違いは何ですか## Get のパラメータは URL に含まれます。 GET リクエストはブラウザによってアクティブにキャッシュされ、URL エンコードされます。 パラメーターには ASCII 文字の文字制限があります。

Post はリクエスト本文を通じてパラメーターを渡します。 複数のエンコード方法があります

3. NginX

nginx を設定する際の php スクリプトリクエストの処理方法デフォルト設定では、FastCGI に転送されます。処理

4. Redis

1. Redis をキャッシュに使用するデータは何ですか? プロジェクトによると、使用するデータ

2. Redis で永続性を実現する方法と構成する更新頻度

aof 永続性を構成し、デフォルトで 1 秒ごとに aof ファイルを更新します

3. Redis はマルチスレッドですか? 公式のクラスター計画は実際には実装されておらず、実装には数週間かかる場合があります。 完全

#5. コード管理

#git を使用したことがありますか? 2 人が間違ったコードを送信した場合の解決方法

私は git を使用してコードを送信しましたが、このような場合は、最初にリモート コードをローカル コードに git pull することができます。 次に、競合するコードまたは Git タグの内容を正しく変更して、コードを再送信します。

#Others

#1. 仕事を辞めた理由

会社のことや自分自身のことについて少し触れながら、気の利いた答えをしましたお金は減り、仕事は増えましたが、はるかに遠いです。離れて

2. 理想的なチーム テクノロジーに情熱を持ち、問題を積極的に解決し、協力して働くことができます

3.キャリア プランニング

フロントエンドの詳細、バックエンドの詳細、データの最適化分析と収集、サーバーの浸透管理

4. 尋ねたい質問

通常、彼らは会社がどのようなプロジェクトを持っているか、技術的な構造、収益性があるかどうかなどを尋ねます。

企業が違えば、技術スタックや懸念事項も異なり、ブロッキングの問題に対する具体的な解決策について尋ねられることもあります。 、プロジェクトの効率にもっと注意を払う人もいますし、サーバーの構築、独自のフレームワークを構築しているかどうか、および人気のあるフレームワークの理解にも注意を払う人もいます。 のプロセスで、希望する開発の方向性が見つかるかもしれません。

#追記

5 日間で 9 社から 7 件の内定を獲得しました。かなり良い感じです。面接では、ほとんどの企業が履歴書の項目に基づいて詳細な質問をします。 同時に、テクノロジーの幅広さ(経験したプロジェクトやスキルの数)とテクノロジーの深さ(データ最適化、フレームワークの理解と制作、サービス)もわかります。 サーバーの攻撃と防御の侵入)、プロジェクトの発展に合わせて、皆さんが引き続き練習し、テクノロジーを学習できることを願っています。 \(•ㅂ•)/♥お互い励まし合いましょう ~

添付: 面接の知識ポイントのマインド マップ

2019年春採用PHP面接の質問(回答付き)

声明:
この記事は超全栈で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。