ホームページ >バックエンド開発 >PHPチュートリアル >プログラマーインタビュー: 電話インタビューのトップ 42 の質問と回答 (パート 1)

プログラマーインタビュー: 電話インタビューのトップ 42 の質問と回答 (パート 1)

WBOY
WBOYオリジナル
2016-08-08 09:27:261117ブラウズ

今年は 2015 年 ここ数年、プログラマーのポジションの候補者を選考する方法は対面 (電話面接) が最も一般的でした。これにより、雇用主と雇用主の両方がお互いを知ることが容易になり、候補者は将来の雇用主の所在地に行く必要がなく、面接官も追加の手配をする必要がありません。これは、プログラマーの面接の質問を取り上げた記事の第 2 部です。最初のセクションがコーディングに関する質問に焦点を当てすぎているというフィードバックを受け取り、多くのプログラマーが電気に関する質問についても同様のリストを作成するよう求めていました。面接に合格して次のラウンドに進むには、職務要件に関連するすべての質問に十分に答える必要があります。 JavaC++ の開発者へのほとんどの面接では、対応するプログラミング言語だけでなく、SQL XML などの他のテクノロジーでも問題に遭遇します。 UNIX、汎用プログラミング、オブジェクト指向プログラミング、データ構造とアルゴリズム、ネットワーキング、コーディング、その他の仕事の側面。プログラマーの就職面接は状況によって異なるため、面接官が期待する方法で自分自身を表現するには特別なスキルが必要です。

覚えておくべき重要なことは、面接の質問に答えるときは、できるだけ早く重要な点を挙げ、常に重要な答えをすることです。面接官の質問は幅広いトピックをカバーする傾向があるため、「OK、わかりました」のような空虚な言葉よりも批判的な回答を好みます。対面面接では、問題についてより詳しく説明する機会があります。ちなみに、これは厳格なルールではなく、面接官があなたの答えにどのように反応するかに基づいて、彼がどのような反応を期待しているかを知ることができます。彼が質問を迫り、あなたがもっと言うことを期待しているなら、あなたはもっと言うべきです。しかし、彼がすぐに次の質問に移った場合は、明確かつ簡潔に答える必要があります。この記事では、エレクトロニクス向けにアレンジされた、一般的な興味深いプログラミングの問題をいくつか紹介します。そのほとんどは、バークレイズシティ野村インフォシスTCSなどの銀行を含むテクノロジー企業のエレクトロニクス側からのものです。 のような企業CTSTech MahindraHCLがサービスを提供しています。前に述べたように、面接の質問はランダムに選択されましたが、面接官が面接中にテストしたい内容であるため、そのほとんどは基本的な知識に基づいていました。これらの質問のほとんどは若手開発者 (経験年数 2 から 5) を対象としていますが、上級プログラマーやベテラン プログラマーも自分の面接の質問として使用できます。あなたが面接官であれば、これらの質問を使用して、開発職の候補者を迅速に選別できます。ここでは短い回答を、長い回答へのリンクとともに提供します。

以下は、ほぼ42プログラマーの面接の質問のリストです。これらの質問はプログラミングの基礎に基づいているため、プログラマー、開発者、ソフトウェア エンジニア、テストおよび運用エンジニアのテストに使用できます。ただし、これらはプログラマーや開発者に最適です。ちなみに、あなたが Java 開発者で、Javaの電子面接の質問を探している場合は、そのリストをチェックしてください。このリストはより一般的であり、PythonRubyPerl、およびC#の開発者を含むすべてのプログラマに適用されます。

1. ハッシュテーブル、バイナリツリー、リンクリストから要素を取得するのにどれくらい時間がかかりますか?何百万ものレコードがある場合はどうなるでしょうか?

ハッシュテーブルにはO(1)時間が必要、バイナリツリーにはO(logN)(Nはツリー内のノード数)、リンクリストにはが必要O(N) (Nはリンクリスト内のノードの数です)。データ構造が適切に機能している場合 (たとえば、ハッシュ テーブルに衝突がないか比較的少なく、バイナリ ツリーのバランスが取れている)、数百万のレコードが効率に影響を与えることはありません。これが適切に機能しないと、レコード数が増加するにつれて効率が低下します。

2. overriding(オーバーライド)とoverloading(オーバーロード)の違いは何ですか? (詳細な回答)

オーバーライドは実行時に決定され、オーバーロードはコンパイル時に決定されます。そして、上書きとオーバーロードのメカニズムは異なります。たとえば、Javaでは、オーバーロードされたメソッドのシグネチャは元のメソッドのシグネチャとは異なる必要がありますが、オーバーライドするシグネチャは同じである必要があります。

3. プロセスのフォークとスレッドの生成の違いは何ですか?

プロセスをforkすると、新しいプロセスは、異なるメモリ空間で親プロセスと同じコードを実行します。ただし、既存のプロセスでスレッドを生成すると、新しいコード実行パスが生成されますが、同じメモリ空間を共有します。

4. クリティカルセクションとは何ですか? (回答)

クリティカル セクションは非常に重要なコードであり、マルチスレッドでは同時に 1 つのスレッドでのみ実行できます。クリティカルセクションはセマフォまたはミューテックスで保護できます。 Javaでは、synchronizedキーワードまたはReentrantLockを使用して重要なセクションを保護できます。

5. 値型と参照型の違いは何ですか? (答え)

値型は、Javaオリジナルのintlongなど、常に不変である(immutable)である、より最適化された型です。 ダブルフロート。参照型は、変更可能または不変のオブジェクトを指します。値型は値を指し、参照型はオブジェクトを指すとも言えます。

6. プロセス内のヒープとスタックとは何ですか? (詳細な回答)

同じプロセス内に、2 つの異なるメモリ領域があります。 Javaの場合、スタックはオブジェクトを指すプリミティブ値と参照型を格納するために使用されますが、オブジェクト自体は常にヒープ内に作成されます。ヒープとスタックの重要な違いは、ヒープ メモリはすべてのスレッドで共有されますが、各スレッドには独自のスタックがあることです。

7. バージョン管理とは何ですか? (回答)

バージョン管理は、SVNCVSGitPerforceなど、コードを保存し、コードベースのバージョンを管理するために使用されるソフトウェアです。 クリアケース。コードの比較、コードのレビュー、以前の安定したリリースからの構築を効率的に行うことができます。すべてのプロの開発者は、何らかのバージョン管理ツールを使用しています。そうしないと、特に 20 の開発者が同じコード ベースで作業している場合、コードを効果的に管理できません。バージョン管理ツールは、コードベースの一貫性を維持し、コードの競合を処理する上で非常に重要な役割を果たします。

8. 強く型付けされたプログラミング言語とは何ですか? (回答)

厳密に型指定された言語では、コンパイラーによって型の正確さが保証されます。たとえば、String 型に数値を格納することはできず、その逆も同様です。 Javaは厳密に型指定された言語であるため、さまざまなデータ型 (intfloatStringcharなど)。互換性のある値のみを対応する型に保存できます。対照的に、弱い型指定言語はコンパイル時に型チェックを必要とせず、コンテキストに基づいて値を処理します。 PythonPerl は、弱い型指定のプログラミング言語の 2 つの一般的な例であり、数値の文字列を数値型で格納できます。

9.

valid(有効な)XMLと正しい形式(整形式)Xの違いについて教えてください。 整形式のXML

にはルート要素があり、すべてのタグが正しく閉じられ、属性が正しく定義され、その値が適切に引用符で囲まれています。一方、有効な XML は、XSD ファイルまたはスキーマ (スキーマ) に対して検証できます。したがって、XML は整形式であっても無効である可能性があります (スキーマで許可されていないタグが含まれているため)。

10. DOM

SAXパーサーの違いは何ですか? (詳細な回答)DOMパーサーはメモリ常駐し、

XMLファイル全体をメモリにロードし、構文分析用のDOMツリーを作成します。 SAXパーサーはイベントベースのパーサーであるため、受信したイベント (開始タグ、終了タグ、属性の開始、属性の終了など) に基づいて XML ドキュメントを解析します。彼らの分析方法によると、DOMパーサーは多くのメモリ空間を占有し、プロセスがメモリ不足になる可能性があるため、大きなXMLファイルには適していません。大きなファイルはSAXを使用して分析する必要があります。小さいファイルの場合、DOMSAX よりもはるかに高速になる傾向があります。

11. スレッドとプロセスの関係は何ですか?

(詳細な回答)

プロセスは複数のスレッドを持つことができますが、スレッドは常に唯一のプロセスに属します。 2 つのプロセスは、プロセス間通信のために共有メモリを介して意図的に通信しない限り、メモリ空間を共有できません。ただし、同じプロセスの 2 つのスレッドは常に同じメモリを共有します。

12. immutable(不変)クラスとはどういう意味ですか? (詳細な回答)

クラスの作成後に状態を変更できない場合、クラスは不変です。たとえば、JavaString。 「Java」などの String を作成すると、その内容を変更することはできなくなります。この文字列を変更すると (大文字への変換、別の String との連結など)、新しいオブジェクトが作成されます。不変オブジェクトは、同期を気にせずにプロセス間で共有できるため、並列プログラミングに役立ちます。実際、Function-as-Programming モデル全体は不変オブジェクトに基づいて構築されています。

13. なぜモック(モック)オブジェクトを作成したいのですか? (答え)

モック オブジェクトは、ソフトウェアの独立した単位をテストするときに役立ちます。実際、スタブ (スタブ) とモックは、自動化された単体テストを作成するための強力なツールです。為替レートを表示するプログラムを作成しているが、接続できる URL がないとします。コードをテストしたい場合は、モック オブジェクトを使用できます。 Javaの世界には、MockitoPowerMockなど、強力なモックオブジェクトを生成できるフレームワークがたくさんあります。

14. SQLインジェクションとは何ですか?

SQL

インジェクションは、侵入者がシステムからデータを盗むことを可能にするセキュリティ上の脆弱性です。ユーザーから入力を受け取り、検証せずに SQL クエリを作成するシステムは、潜在的に SQL インジェクション攻撃に対して脆弱です。このようなシステムでは、侵入者はデータの代わりに SQL コードを入力して追加データを取得する可能性があります。この脆弱性を悪用して機密情報 (ユーザー ID、パスワード、個人情報など) が収集された例が多数あります。 Javaでは、Preparedステートメントを使用して、SQLインジェクションを回避できます。

15.

SQL

において、inner join(inner join)とleft join(left join)の違いは何ですか? (回答)SQL

には、内部結合と外部結合という 2 つの主なタイプの接続があります。外部結合には、右外部結合と左外部結合があります。内部結合と左結合の主な違いは、内部結合では両方のテーブルに一致するレコードのみが選択されるのに対し、左結合では両方のテーブルに一致するレコードが選択され、さらに左テーブル内のすべてのレコードが選択されることです。たとえば、すべての部門とその従業員数を検索するには、

SQL クエリを作成します。「all」を含むクエリに注意してください。このクエリを内部結合で処理すると、誰も働いていない空の部門を見逃してしまいます。

16. MVC

V

は何の略で、何を意味しますか? (答え)MVC

パターンにおいて、

Vはビュー(View)です。ビューとは、Web ページなど、ユーザーに表示されるものです。これは非常に重要な Web アプリケーション開発設計パターンであり、関心の分離の原則に基づいており、その目的は、他のモジュールに影響を与えることなく、異なるモジュールを独立して変更できることです。 Javaの世界には、Struts 2Spring MVCなど、MVCパターンを提供するオープンソースフレームワークが数多くあります。ちなみに、Mはmodel(Model)の略で、Cはcontroller(Controller)の略です。モデルは、ユーザー、従業員、注文などの実際のビジネス オブジェクトであり、コントローラーがリクエストを適切な処理ユニットに分散するために使用します。

17.

クラスとオブジェクトの違いは何ですか?

(詳細な回答)

クラスは、オブジェクトを作成するために使用される設計図です。クラスにはコードと動作が含まれ、オブジェクトには状態と動作が含まれます。オブジェクトを作成するには、オブジェクトの構造を表すクラスを作成する必要があります。クラスはメモリ内のオブジェクトをマップするためにも使用され、Java

では、

JVMがこの仕事を行います。

18. 疎結合(疎結合)とは何ですか?

疎結合は、ソフトウェアの一部を変更しても他の部分に影響を与えないようにする、追求する価値のあるソフトウェア機能です。たとえば、疎結合ソフトウェアでは、UIのレイアウトへの変更がバックエンドのクラス構造に影響を与えるべきではありません。

19。 (詳細な回答)関連付けとは、2 つのオブジェクトが相互に関連していることを意味します。組み合わせとは、ある物体が複数の物体で構成されることを意味しますが、それらは共存する必要があります。たとえば、人間の体はさまざまな器官で構成されており、それらは体内で独立して機能しなければなりません。集合体は関連付けの一種でもあり、オブジェクトの集合を表します。たとえば、都市は住民の集合体です。 20. インターフェースと抽象クラスの違いは何ですか?

(詳細な回答)

これは、すべてのプログラマーの面接の中で最も典型的な質問です。インターフェイスは、具体的なものを何も含まない、最も純粋な抽象化の形式です。抽象クラスは、抽象的なものと具体的なものの組み合わせです。この違いは言語によって異なる場合があります。たとえば、

Java

では複数のインターフェースを拡張

(extend)できますが、継承できる抽象クラスは1つだけです。より詳細な説明は、詳細な回答に記載されています。

21. 単体テストとは何ですか? (答え)

単体テストは、(アプリケーション全体ではなく) 独立したユニットの機能をテストする方法です。さまざまな言語で単体テストを行うためのツールが多数あります。たとえば、

Java

では、

JUnitまたはTestNG

を使用して単体テストを作成できます。単体テストは、多くの場合、ビルド時または継続的な環境 (

Jenkins など) で自動的に実行されます。 無料で入手LAMPBand of Brothersオリジナル

PHPチュートリアルCD / 詳細PHP 》 Essential バージョン、詳細については公式ウェブサイトのカスタマーサービスにお問い合わせください: http://www.lampbrother.netPHPCMS二次開発http://yun.itxdl.cn /online/phpcms/index .php?u=5WeChat開発

http://yun.itxdl.cn/online/weixin/index.php?u=5モバイル インターネット サーバーサイド開発

http://yun.itxdl.cn/online/server/index.php?u=5Javascript

コース

http:// yun.itxdl.cn/online /js/index.php?u=5

CTO

トレーニングキャンプhttp://yun.itxdl.cn/online/cto/index.php? u=5

以上、プログラマーインタビュー: 電話面接の質問と回答トップ 42 (前編) を内容も含めて紹介しましたので、PHP チュートリアルに興味のある友人の参考になれば幸いです。

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