ホームページ  >  記事  >  バックエンド開発  >  PHP の高度な面接の質問の共有

PHP の高度な面接の質問の共有

小云云
小云云オリジナル
2018-05-15 11:25:501926ブラウズ

最近いくつかの企業と面接をしており、自分自身に学び向上を促すためにいくつかの重要な質問を記録しました。内容がたくさんあるので、少しずつ改善し、段階的に学習していきます。私も友達に少しでも助けてあげたいと思っています。 1.

MySQL 関連知識

1. MySQL の最適化方法 MYSQL 最適化の一般的な方法
2. データベースとテーブルを分割する方法 3. MySQL+ ホットスタンバイとロードバランシングでデュアルマシンを実行する方法
4.データ テーブルの種類は、MyISAM、
InnoDB、H
EAP、BOB、ARCHIVE、CSV などです。
MyISAM: 完成度が高く、安定しており、管理が容易で、読み取りが高速です。一部の関数 (トランザクションなど) はテーブルレベルのロックをサポートしていません。

InnoDB: トランザクション、外部キー、データ行ロックなどの機能をサポートします。多くのスペースを占有し、全文インデックス作成などはサポートされていません。 myisam エンジンと Innodb エンジンの主な機能
MySQL のストレージ エンジン MyISAM と InnoDB の違いは何ですか?
5. SQL インジェクションメソッドを防ぐ mysql_escape_string
(
strip_tags
(
$arr["$val"]));

/**
* 函数名称:post_check() 
* 函数作用:对提交的编辑内容进行处理 
* 参  数:$post: 要提交的内容 
* 返 回 值:$post: 返回过滤后的内容 
*/
function post_check($post){
if(!get_magic_quotes_gpc()){// 判断magic_quotes_gpc是否为打开 
$post =addslashes($post);// 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 
}
$post =str_replace("_","\_",$post);// 把 '_'过滤掉
$post =str_replace("%","\%",$post);// 把 '%'过滤掉
$post = nl2br($post);// 回车转换 
$post =htmlspecialchars($post);// html标记转换 
return $post;
}
6.mysql大きなテーブルを複数のテーブルに分割した後、テーブル間のクエリ効率の問題を解決する方法

7. インデックスの適用
    インデックスを考慮するタイミング
  1. インデックスを考慮するタイミング
  2. ステートメントがインデックスを使用するかどうかを判断する方法インデックス
頻繁に使用するかどうか シナリオのインデックスを作成するには:

using using using ‐ ‐ ‐ ‐ MYIsAM を使用したテーブルを使用、CHAR、VARCHAR、TEXT 型の列の作成日。


8. 大規模なテーブル (数千万) に対して mysql を最適化するにはどうすればよいですか? 9. mysql の遅いクエリの問題
実際、データを読みたくない場合は、遅いクエリのログを使用して分析するのが比較的簡単な方法です。ログを取得するには、mysqldumpslow、mysqlsla、myprofi、mysql-explain-slow-log、mysqllogfilter などのツール

を使用して完了できます。自分で分析するのは豊富な経験が必要であり、時間の無駄だと感じます。

10. ユーザーログイン状態でのセッション、Cookie、データベース、memcache の保存のメリットとデメリットについて http://www.dewen.org/q/11504/

session%2Cookie またはデータベースの保存のメリットとデメリットについてユーザーログインステータスのmemcache

11. トランザクションアプリケーションの極限状況処理

12. SQL 言語は 4 つのカテゴリに分類されます。列挙してください
DDL--CREATE、DROP、ALTER
DML-- INSERT、UPDATE、て

s 's 's 's 's ‐ ‐ ‐ ‐ ‐D 取り消し、コミット、ロールバック

2. PHP の基本

  • セッションのクロスドメイン共有

  • MySQL データベースに接続する PHP のいくつかの方法と違い
    mysql: プロセス指向
    mysqli: オブジェクト指向
    pdo: 高い移植性
    以下を参照してください。 php 基本シリーズ: MySQL データベースに接続するために PHP で使用される 3 つの API

    3. PHP の上級

    • 長い接続と短い接続の使用

    • ソケットの使用


    • オブジェクト指向
      3 つの主要な機能: カプセル化、継承、ポリモーフィズム (メソッドの書き換え)。
      抽象クラス: 抽象。少なくとも 1 つのメソッドは抽象メソッドでインスタンス化できず、サブクラスのパブリック インターフェイスを定義します。
      インターフェイス: PHP の単一継承の問題を解決するインターフェイス。すべてのメソッドはパブリック アクセス権を持つ抽象メソッドであり、変数は宣言できません。
      クラスを継承し、複数のインターフェースを同時に実装する
      クラス A は B を拡張し、インターフェース 1、インターフェース 2...、インターフェース n(){
      インタープリタ言語のパフォーマンス分析。コンパイル言語と例を示します。

    • 4. 通常の
    • email、html、js などのマッチング

      5. 開発の基礎
      プロセスとスレッドの定義、違いと接続。运 プロセスのステータス: 実行 RUN、準備完了、待機 待機

      6、noSQL データベース

      Memcached、Redis、Mongodb、接続
      • 3 つのシナリオはまったく異なります。 1.memcached: 単一のキーと値のペアのメモリ キャッシュ、オブジェクト キャッシュのための代替不可能な分散キャッシュ、2.redis: アルゴリズムとデータ構造のコレクション、高速なデータ構造操作が最大の特徴であり、データの永続性をサポートします。 rdb と nosql の間の bson 構造で、より緩やかで柔軟性がありますが、トランザクションはサポートされず、重要でないデータのストレージにのみ使用されます。 D Mongodb または Redis を参照してください。Memcached を置き換えることはできますか?


        7. 一般的に使用される Linux コマンド

        ソフトリンク
      • 8. 起動前のアーキテクチャ関連のプレッシャーテスト


      、単一でサポートされる同時実行数サーバー、PV数。サーバーリソースの合理的な分散


      CPU: Apache
      mysql は高負荷環境にあり、ディスク IO の読み取りと書き込みが多すぎるため、間違いなく多くのリソースを消費し、CPU が高くなりすぎます。
      ' ' s 's ' s' s

      ' ' 一緒に一緒に
        MongoDB+Redis または MySQL+Memcached を組み合わせると、Nosql を使用する方が簡単です

      現在人気の Web サイト アーキテクチャ
        LAMP、LNMP、LLMP
      • は、インターネット上にまだ LNAMP フレームワークを持っています。 nginx と Apache の利点は、Apache が PHP のロードに使用されることと、nginx の書き換えモジュールが使用されることです。ただし、Apache ポートは外部に公開されていません。リソースを削減するためにロードせずに。



      • その他:

      データマイニングの経験、hadoop/lucene/mahout に精通している
      何もすることがなかったので、いくつかの答えを考え出しました。 。 。包括的ではないかもしれないので、後で保存しておきます。

      1. 基本的な知識のポイント1.1 HTTP プロトコルのいくつかのステータス コードの意味: 503 500 401 403 404 200 301 302。 。 。

      200: リクエストは成功し、リクエストされたデータが返されます。

      301 : 永続的なリダイレクト。
      302: 一時的なリダイレクト。
      401 : 現在のリクエストにはユーザー認証が必要です。
      403: サーバーはリクエストの実行を拒否しました。つまり、アクセス許可がありません。
      404: リクエストは失敗しました。リクエストされたデータがサーバー上に見つかりませんでした。
      500 : サーバーエラー。一般的なサーバー側プログラム実行エラー。
      503: サーバーは一時的にメンテナンス中か過負荷状態です。この状態は一時的なものです。

      1.2 require include_once と require_once の違いは、
      失敗の処理が異なります:

      require は失敗したときに致命的レベルのエラーを生成し、プログラムの実行を停止します。

      Include は失敗した場合にのみ警告レベルのエラーを生成し、プログラムは実行を継続します。

      include_once/require_once と include/require は同じ方法でエラーを処理します。
      唯一の違いは、インクルードされたファイル コードが既に存在する場合はインクルードされなくなることです。

      1.3 mysql4.0 から 4.1 へ、PHP 4.x から 5.1 への大幅な改善など、PHP/Mysql のいくつかのバージョンの進化の歴史。

      1.4 HEREDOC は、

      文字列を定義する方法を導入します。

      構造:

      に続けて新しい行を入力します。次は文字列そのものです。
      最後に、以前に定義した識別子を終了マーク (別の行) として使用します
      注:
      識別子の名前付けも、他のタグと同様に PHP の規則に従う必要があります:
      含めることができるのは文字、数字のみですおよびアンダースコア。文字とアンダースコアで始まる必要があります。

      1.5 いくつかの php マジック (スペル) メソッドを作成します。
      __construct() は、クラスをインスタンス化するときに自動的に呼び出されます。

      __destruct() は、クラスオブジェクトが使用されるときに自動的に呼び出されます。

      __set() は、未定義のプロパティに値を割り当てるときに呼び出されます。
      __get() は、未定義のプロパティが呼び出されたときに呼び出されます。 isset() または empty() 関数を使用すると、
      __isset() が呼び出されます。 unset()を使用すると
      __unset()が呼び出されます。
      __sleep() は、serialize を使用してシリアル化するときに呼び出されます。
      __wakeup() は、unserialize を使用してデシリアライズするときに呼び出されます。
      __call() は、存在しないメソッドを呼び出すときに呼び出されます。
      __callStatic() は存在しない静的メソッドを呼び出します。
      __toString() は、オブジェクトを文字列に変換するときに呼び出されます。エコーなど。
      __invoke() オブジェクトをメソッドとして呼び出そうとするときに呼び出されます。
      __set_state() は、var_export() 関数を使用するときに呼び出されます。配列パラメータを受け入れます。
      __clone() clone を使用してオブジェクトをコピーするときに呼び出されます。

      1.6 php のコンパイル時にパラメータを設定するものもあります
      –prefix=/usr/local/php php インストールディレクトリ
      –with-config-file-path=/usr/local/php/etc php.ini の場所を指定します
      –with-mysql =/usr/local/mysql mysql インストール ディレクトリ、mysql のサポート
      –with-mysqli=/usr/local/mysql/bin/mysql_config mysqli ファイル ディレクトリ、最適化サポート
      –enable-safe-mode セーフ モードをオンにする
      –enable -ftp FTP サポートをオンにする
      –enable-zip zip サポートをオンにする
      –with-bz2 bz2 ファイルのサポートをオンにする
      –with-jpeg-dir jpeg 画像のサポートをオンにする
      –with-png-dir png 画像のサポートをオンにする
      –with-freetype-dir は、freetype フォント ライブラリのサポートを開きます
      –without-iconv は、iconv 関数を閉じ、文字セット間の変換を行います
      –with-libxml-dir は、libxml2 ライブラリのサポートを開きます
      –with-xmlrpc は、C 言語を開きますxml-rpc
      –with-zlib-dir は zlib ライブラリのサポートをオンにします
      –with-gd は gd ライブラリのサポートをオンにします

      詳細については、./configure help を使用して表示できます

      1.7 3 つの方法phpメソッドにパラメータを渡します。

      方法 1 $argc $argv を使用します

      方法 2 getopt function() を使用します

      方法 3 ユーザーに入力を求め、入力パラメーターを取得します。 C言語に少し似ています

      1.8(mysql) データ型の意味を書いてください(int char varchar datetime text) varcharとcharの違いは何ですか;
      int:数値型
      char:固定長文字列型
      ; varchar: 可変長の文字列型
      datetime: 期間時間型
      text: テキスト型

      varchar と char:
      a の違いは何ですか? char の長さは固定されており、格納するデータの量に関係なく、固定長。
      Varchar は可変長ですが、全体の長さに 1 文字を追加する必要があります。これは位置を格納するために使用されます。

      b. char は固定長なので、処理速度の点では varchar よりもはるかに高速ですが、ストレージ領域を無駄にします
      そのため、ストレージは大きくありませんが、速度要件がある場合は char 型を使用できます。それ以外の場合は、varchar 型を使用して をインスタンス化できます。

      1.9 error_reporting などのデバッグ関数は、
      error_reporting() 関数を使用して、実行時に php.ini の error_reporting ディレクティブを設定します。
      そのため、プログラム内でいつでも表示されるエラーレベルを調整できます。
      この関数を使用する場合、display_errorsをオンにする必要があります。

      1.10 バージョン管理ソフトウェアを使用したことがありますか? 使用している場合、使用しているバージョン管理ソフトウェアの名前は何ですか?

      1.11 posix と Perl の標準正規表現の違い

      1.12 セーフモードにした後の制限は何ですか?
      safe_mode を開始すると、多くの PHP 関数、特にシステム関連のファイルを開く、コマンドの実行、その他の関数に制限が課されます。
      ファイルを操作するすべての関数は、スクリプトと同じ UID を持つファイルのみを操作します。マルチプロセス/ファイルの読み取りと書き込みを同時に行うスレッドの問題を解決します。

      PHP はマルチスレッドをサポートしていません。これを実現するには、PHP のフロック ロック機能を使用できます。

      $fp = fopen("/tmp/lock.txt", "w+");
      if (flock($fp, LOCK_EX)) { // 排他ロックを実行します
      fwrite($fp, "Write something heren" );
      flock($fp, LOCK_UN); // ロックを解除します
      } else {
      echo "ファイルをロックできませんでした!";
      }
      fclose($fp);

      1.14 写一段上传文件的代码。
      upload.html

      <form enctype="multipart/form-data" method="POST" action="upload.php">
      Send this file: <input name="name" type="file" />
      <input type="submit" value="Send File" />
      </form>
      upload.php
      $uploads_dir = &#39;/uploads&#39;;
      foreach ($_FILES["error"] as $key => $error) {
      if ($error == UPLOAD_ERR_OK) {
      $tmp_name = $_FILES["tmp_name"][$key];
      $name = $_FILES["name"][$key];
      move_uploaded_file($tmp_name, "$uploads_dir/$name");
      }
      }

      1.15 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 table时,InnoDB不会重新建立表,而是一行一行的删除。
      g. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,
      但是对于使用的额外的InnoDB特性(例如外键)的表不适用.
      h. MyISAM支持表锁,InnoDB支持行锁。

      二. web 架构,安全,项目经验
      2.1 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。

      2.2 使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
      首先,打开mod_rewrite模块。

      其次,http.conf找到以下代码段:

      <Directory />
      Options FollowSymLinks
      AllowOverride None
      </Directory>

      将其中的:AllowOverride None 改为 AllowOverride All ,重启httpd服务即可。

      然后,在项目根目录下简历 .htaccess 文件,填写规则。

      2.3 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
      a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
      b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
      c. mysql库主从读写分离。
      d. 找规律分表,减少单表中的数据量提高查询速度。
      e。添加缓存机制,比如memcached,apc等。
      f. 不经常改动的页面,生成静态页面。
      g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

      2.4 写出一种排序算法(原理),并说出优化它的方法。

      2.5 请简单阐述您最得意的开发之作

      2.6 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
      a. 确认服务器是否能支撑当前访问量。
      b. 优化数据库访问。参考2.3
      c. 禁止外部访问链接(盗链), 比如图片盗链。
      d. 控制文件下载。
      e. 使用不同主机分流。
      f. 使用浏览统计软件,了解访问量,有针对性的进行优化。

      2.7 您是否用过模板引擎? 如果有您用的模板引擎的名字是?
      Smarty

      2.8 请介绍Session的原理,大型网站中Session方面应注意什么?

      2.9 测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。

      2.10 Web ページ内のすべてのリンクを定期的に提案します。

      2.11 一般的な SSO (シングル サインオン) ソリューション (discuz のパスポートを統合する dedecms など) の原則を紹介します。

      2.12 あなたが作成した PHP フレームワークの特徴、主にどのような問題を解決するのか、他のフレームワークとの違いは何ですか。

      2.13 大規模なフォーラム/ニュース記事システム/SNS Web サイト間のパフォーマンスの最適化の違いは何ですか?

      2.14 フォト アルバム アプリケーション: ブラウザーで複数のファイルを同時に選択してアップロードする必要があり、写真はサーバーでトリミングして圧縮する必要があります。サイド減圧。 1 つのファイルを最大 50M までアップロードできます。アップロードプロセス中に進行状況バーが表示されます。各画像は 4 つのサイズのサムネイルを生成でき、フラッシュ再生するにはビデオ ファイルを flv に変換する必要があります。対象となるさまざまなタイプのオープンソース ソフトウェアとその簡単な使用法について説明します。
      猿のグループが円形に並び、1、2、...、n に従って番号が付けられます。次に、1 番目から数え始め、m 番目まで数え、円の外に追い出し、後ろから数え始め、m 番目まで数え、追い出します...このようにして最後まで続けます。猿は一匹だけ残っており、その猿は王様と呼ばれています。このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。プログラムを使用してこのプロセスをシミュレートします。

      3. unix/linux の基本的な使い方
      3.1 Linux で現在のシステム負荷情報を表示するいくつかの方法。

      3.2 vim の基本的なショートカット キー。

      3.3 sshセキュリティ強化方法; パスワードモードとrsaキーモードの設定。

      3.4 rpm/apt/yum/ports パッケージのインストール、クエリ、削除のための基本的なコマンド。

      3.5 Makefile の基本形式、gcc のコンパイルと接続コマンド、-O0 と -O3 の違い。

      3.6 gdb、strace、valgrindの基本的な使い方

      4. フロントエンド、HTML、JS
      cssボックスモデル。
      JavaScriptでプロトタイプを作成します。
      JavaScript におけるこのオブジェクトのスコープ。
      IEとFirefoxのイベントバブリングの違い。
      奇妙なモード、標準モード、標準に近いモードとは何ですか。
      DTD の定義
      IE/firefox で一般的に使用されるハック。
      IE のフロントエンド js/css デバッグ ツールである firefox。

      5. ThinkPHP 3.0 アーキテクチャ 3 (コア + 動作 + ドライバー) の動作を理解するにはどうすればよいですか?
      コア + 動作 + ドライバー
      TP の公式略語は: CBD です
      この問題については、TP マニュアルで詳しく説明されています。 。
      コア: フレームワークの核となるコードであり、TP 自体は MVC の考えに基づいて開発されたフレームワークです。
      動作: 動作は、ThinkPHP の新しいバージョンのアーキテクチャにおいて決定的な役割を果たします。システム コアの上には多くのタグ拡張ビットがあり、各タグ位置は独自の独立した動作を順番に実行できます。これが動作拡張機能の誕生方法であり、多くのシステム機能も組み込みの動作拡張機能によって完成され、すべての動作拡張機能は置き換え可能であり、基礎となるフレームワークのアセンブリの基礎を形成します。
      ドライバー: データベース ドライバー、キャッシュ ドライバー、タグ ライブラリ ドライバー、テンプレート エンジン ドライバー、および外部クラス拡張機能。
      一番良いのは、ドキュメントをダウンロードして読むことです。基本的に、TP のすべての関数には非常に詳細な説明と例が含まれています。

      フレームワーク。実際、これは特定のアプリケーションの半完成品であり、独自のシステムを完成させるために選択して使用するコンポーネントのセットです。簡単に言えば、他人が設定した舞台を利用してパフォーマンスをすることです。さらに、フレームワークは一般的に成熟しており、継続的にアップグレードされるソフトウェアです。
      なぜフレームを使用するのですか?

      今日、ソフトウェア システムの開発、特にサーバーサイド ソフトウェアの開発は非常に複雑になっており、設計するにはあまりにも多くの知識、コンテンツ、問題が必要になるからです。他の人の成熟したフレームワークを使用することは、ある面では他の人に基本的な作業を手伝ってもらうのと同じであり、システムのビジネス ロジック設計を完了することに集中する必要があります。さらに、このフレームワークは一般的に成熟していて堅牢であり、トランザクション処理、セキュリティ、データ フロー制御、その他の問題など、システムの多くの詳細な問題を処理できます。また、フレームワークは一般的に多くの人が使用するため、構造が非常に優れているため、スケーラビリティも非常に優れており、常にアップグレードされ、他の人のコードのアップグレードの恩恵を直接享受できます。

      フレームワークは通常、低レベルのアプリケーション プラットフォーム (Java の J2EE など) と高レベルのビジネス ロジックの間の中間層です。

      ThinkPHP は、エンタープライズレベルのアプリケーション開発とアジャイルな WEB アプリケーション開発を簡素化するために生まれたオープンソースの PHP フレームワークです。

      元々は FCS として知られていましたが、2007 年の元旦に正式に ThinkPHP に名前変更され、 Apache2 オープンソース契約。初期のイデオロギー アーキテクチャは Struts に由来し、その後、継続的な改良を経て、オブジェクト指向開発構造と MVC モデルを使用し、Struts の Action および Dao のアイデアと JSP の TagLib ( タグ ライブラリ) を統合して、多くの優れた外国のフレームワークとモデルからも学びました。 )、RoR の ORM マッピングと、CURD といくつかの一般的な操作、シングル エントリ モードなどをカプセル化する ActiveRecord モードは、テンプレート エンジン、キャッシュ メカニズム、認証メカニズム、スケーラビリティにおいて独自のパフォーマンスを備えています

      ThinkPHP を使用すると、より便利で迅速な開発が可能になりますもちろん、エンタープライズレベルのアプリケーションだけでなく、あらゆる PHP アプリケーション開発でも、ThinkPHP のシンプルさ、互換性、速度の恩恵を受けることができます。シンプルさ、スピード、実用性が ThinkPHP の開発の理念です。この目的のために、ThinkPHP はより優れたテクノロジーを吸収し統合し、その新鮮さと活力を確保し、WEB アプリケーション開発のベストプラクティスを提供していきます。

      全体的な開発ソリューションとして、ThinkPHP には、基礎となるアーキテクチャ、互換性処理、基本クラス ライブラリ、データベース アクセス層、テンプレート エンジン、キャッシュ メカニズム、プラグイン メカニズム、ロールが含まれているため、アプリケーション開発のほとんどのニーズを解決できます。 、フォーム処理、およびその他の一般的に使用されるコンポーネントが含まれており、クロスバージョン、クロスプラットフォーム、クロスデータベースの移植により便利です。また、各コンポーネントは注意深く設計され、完成されているため、アプリケーション開発プロセスはビジネス ロジックのみに重点を置く必要があります。

      関連する推奨事項:

      php 面接の質問 3 - PHP 言語の基礎 (基本部分) php 上級面接の質問 php ジュニアの面接の質問 php mysql の面接の質問

      2017 年の PHP 面接の一般的な質問と回答テクニック

      PHP の知識を反映する 8 つの PHP 面接の質問

      以上がPHP の高度な面接の質問の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

      声明:
      この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。