画面のCとC++開発者のスキル

公開されました。 最終更新日
CとC++:ソフトウェアエンジニアのインタビューの質問

C や C++ の開発者は、他の言語の開発者ほど話題になりません。JavaScript の開発者ほどユビキタスではありません。Python の開発者ほど、データサイエンスのようなホットな話題には縁がありません。Kotlin の開発者ほど新進気鋭の技術を使っているわけでもありません。しかし、これまでの技術とは異なり、C と C++ は、組み込み技術やゲームのような分野だけでなく、多くの重要なシステムの主力であり続けています。その結果、CとC++の開発者に対する需要は依然として多くあります。そこで問題となるのは、C および C++ 開発者のスキルをどのようにスクリーニングするかということです。

C と C++ はどちらも長い間存在しているので、両者について学ぶことはたくさんあります。これらの技術スタックのために構築されている異なるバージョン、技術、およびリソースがあります。あなたは、Javaのような言語のために使用するものは、単にそれをカットしませんので、特定のCとC++のインタビューの質問を使用する必要があります。あなたは単にC++ではCの外では見られない概念があります。その上で、あなたは誰かがCやC++のスキルを持っているかどうかを確認するための適切な技術的な画面が必要です。この記事では、C や C++ の開発者のスクリーニングと雇用について知っておくべきことをすべて紹介します。

このガイドでは、あなたが見つけることができます。

C++開発者のスキルリスト1.Cとは何か、C++とは何か?

まず最初に理解しておかなければならないのは、CとC++は同じものではないということです。ご想像の通り、CはC++よりも少し前から存在しています。1972年に導入されたCは、その10年の終わりには事実上の標準となりました。C++の最初のバージョンが登場したのは1984年です。しかし、再び、それが定着するまでには10年しかかかりませんでした。90年代初頭までには、C++は多くの人気を得ていました。

1.1 CとC++の違いは?

一つには、Cは手続き型言語です。一方、C++は複数のパラダイム言語です。手続き型プログラミングとオブジェクト指向プログラミングに優れています。さらに、新しい機能により、関数型プログラミングの実用的な選択肢となっています。実世界では、ほとんどの場合、C++プログラムでは、ある程度の範囲で利用可能なすべてのプログラミング・パラダイムを使用します。実際、多くの場合3つのパラダイムが混ざっている

プログラミングパラダイムだけが両者の違いではありません。C はマシンレベルにかなり近く、"ポータブルアセンブラ "と呼ばれることもあります。一方、C++はJavaやC#、Dのようなより高レベルの言語に近くなっています (ただし、Cの低レベルの関数のいくつかは保持しています)。

1.2 CとC++のどこが似ているのか?

これらの違いを超えて、いくつかの類似点があるのは確かです。これらの言語で使用されている構文は、しばしば "Cファミリー構文 "と呼ばれています。C は非常に人気があるので、C の文法と構文が Java、C#、C++、D、Objective-C、JavaScript などの多くのプログラミング言語の基礎になっていることがわかります。

CやC++は何に使われているのか?2.CやC++は何に使われているのか?

2.1 Cは何に使うの?

CとC++はマシンレベルに非常に近いため、エンジニアリング時間よりも処理速度や手動でのチューニングが重要なアプリケーションに主に使用されています。これらには、低レベルプログラミング(BIOS)、組み込みプログラミング(デバイス)、システムプログラミング(OS)、性能重視のプログラミング(ゲームエンジン、GPU/科学計算、暗号など)が含まれていました。

C と C++ が提供する真の利点は、プログラマーがプログラムに何が起こるかを、マシンレベルに最も近い最低レベルで表現できるようになったことです。一方では、これによりCとC++は信じられないほどの性能を発揮します。これの欠点は、高レベル言語のメモリ管理機能がないため、コードを正しく書くための誤差が大幅に少なくなることです。実際には、JavaやPythonのような高レベルのプログラミング言語よりも、CやC++の方が作業コードを書くのに時間がかかることを意味します。

C はマシンレベルに非常に近いため、基本的にプログラミングの世界の共通言語です。他のほとんどのプログラミング言語はCを使って構築されており、ほとんどのソフトウェアはその関数をCで公開しています。

基本的なレベルでは、C言語はかなり簡単に学ぶことができます。構文や文法は基本を学ぶにはとても簡単ですが、マスターするのは難しいです。他の言語とは異なり、開発者が通常避けたいと思うような多忙な作業の負担を軽減するツールがCにはありません。

2.2 C++は何に使われているの?

C++は、C言語のプログラミングスタイルを維持しつつ、C言語の低レベルな問題を解決するために部分的に開発されました。残念ながら、これは C++ の学習曲線が信じられないほど急峻で、より専門家に優しい言語であることを意味しています。これは、外国のコードベースを使用することをさらに困難にする可能性があります。ありがたいことに、C++の新しいバージョンでは、外国のコードベースの安全で簡単なサブセットを使用することができます。それでも、安全ではない構造を使わないようにして、ルールを強制するのはコーディングチーム次第です。

C++ はかつては C の延長線上にありましたが、実際には 1998 年以降はそうではありません。今では非常に独自の言語となっています。ほとんどの C 言語のコードはそのままで C++ でコンパイルできますが、どちらも他の言語の厳密なサブセットではありません。それでも、新しい標準がリリースされるにつれて、両者の間のギャップは拡大し続けています。

2.3 CとC++の違いは?

C++ では、ほとんどの C の構成要素やコードを C++ コードとしてコンパイルできるだけでなく、テンプレート、RAII (Resource Acquisition Is Initialization)、クラス、ラムダ式、より大きくて強力な標準ライブラリ、より強力な型システムなど、より多くのプログラミングツールを使用できるようになります。

同時に、C には C++ に欠けているツールがいくつかあります。それは、指定されたイニシャライザと可変長配列(VLA)です。一般的な経験則としては、C++環境が存在する場合、C環境が存在することを100パーセント確信することができます。その逆は必ずしも正しいとは限りません。

IT採用担当者が知っておくべきCとC++の知識とは?3.IT採用担当者が知っておくべきCとC++の知識とは?

Cはしばらく変わっていません。過去2回のリビジョン、C11とC18はどちらもかなりマイナーで、大きな変化はありませんでした。今後のC21も画期的なものではなさそうです。

一方、C++ は、過去 10 年間ほとんど何もしていなかったのに、進歩し始めています。C++ 11 以降、3 年ごとにリビジョンがリリースされ、C++ 20 は予定通りに到着すると予測されています。

ほぼすべての利用可能なライブラリは、たとえそれが別の言語で書かれていたとしても、C の API やバインディングを公開しています。これらのライブラリはすべてC++で利用できます。また、Boost、Qt、POCOのようなC++のみのライブラリもあります。

3.1 CやC++の開発者はどのようなツールや技術に精通している必要がありますか?

おそらく、C の開発者にとって最も重要なことは、ポインタ演算と未定義動作の構成要素を理解していることです。さらに、C の開発者は、Address/Memory/UndefinedBehavior Sanitizer、Valgrind、デバッガ(GDB など)、静的コード解析ツールなどのデバッグツールを使いこなせるようにしておく必要があります。

C++開発者は、BoostやQtのライブラリだけでなく、Cツールの全てを理解し、それらを使いこなせるだけの知識を持っている必要があります。

その先にあるのは、開発者の経験を見ると、商用プロジェクトやオープンソースプロジェクトが、彼らの能力を最もよく表しているということです。

CとC++のスキルを検証審査段階でのC・C++開発者スキルの検証方法

技術的な面接は、あなたにとっても候補者にとっても費用と時間がかかります。応募者全員に面接をするのではありません。その代わりに、面接の段階に進んだ候補者だけがその仕事に必要な技術力を持っているように、候補者をスクリーニングすることが重要です。

お勧めの読み物です。 完全なC++開発者の給与データ

4.履歴書を使ったC開発者やC++開発者の審査

履歴書は、候補者が何ができるかの手がかりを見つけるための最初の場所です。技術的な知識を持たない採用担当者にとって、履歴書は非常に技術的な情報が含まれていることが多いため、最初の一歩を踏み出すのが難しい場合があります。そこで、CおよびC++開発者のレジュメで探すべき項目をリストアップしました。

CおよびC++用語集4.1 技術系採用担当者のためのCとC++の用語集

Cライブラリ C標準ライブラリ

  • C 標準ドキュメントに記載されているライブラリで、各コンパイラに同梱されています。

その他、あまり一般的ではありませんが、それでも人気のある図書館です。

GTK

  • グラフィカルユーザーインターフェースを作成するためのライブラリ

カイロ

  • 2次元グラフィックスライブラリ

アルサ

  • Advanced Linux Sound Architecture とのインタフェース用ライブラリ

ブラス

  • 基本的な線形代数サブプログラム。効率的なベクトル演算や行列演算を行うためのライブラリです。

GMP

  • GNU Multi Precision.任意精度の数値に対する算術演算を提供するライブラリ

キューエルエル

  • マルチプロトコルファイル転送ライブラリ。HTTP 通信に最も一般的に使用されます。

オープンSSL

  • 暗号サポートに使われている商用グレードのワイルドな人気ライブラリ
C++ ライブラリ C++標準ライブラリ

  • C++ 標準ドキュメントに記述されているライブラリで、各コンパイラに同梱されています。

ブースト

  • C++で最も人気のあるライブラリの一つで、C++プログラムで自由に使える数十個の切断されたライブラリのセット

キューティー

  • C++ 用の GUI フレームワーク

エスティーエル

  • 物議を醸している頭字語で、通常は C++ 標準ライブラリを意味しますが、以下のように理解されています。 標準テンプレートライブラリまるでテンプレートではない部分が、それの一部ではないかのように

その他、あまり一般的ではありませんが、それでも人気のある図書館です。

固有

  • 線形代数用C++テンプレートライブラリ(行列,ベクトル,数値ソルバ,関連アルゴリズム

ジーエスエル

  • ガイドライン C++コアガイドラインでBjarne Stroustrup、Herb Sutter、およびCo.によって推奨されているライブラリの実装をサポートします。

ロキ

  • 文様

愚行

  • 標準ライブラリを拡張する C++11 コンポーネントのセット。効率性と実用性を考慮して設計されています。Facebook によって開発されました。

アブセイル

  • 標準ライブラリを拡張したC++ライブラリ集。Google が作成しました。

ポコ

  • HTTP、ネットワーキング、暗号化、zip ファイルのサポートをサポートするライブラリのセット

WxWidgets

  • システムに依存しないGUIアプリケーションを作成できるライブラリ

オープンCV

  • リアルタイムアプリケーションに焦点を当てて計算効率を高めるために設計されたコンピュータビジョンライブラリ

オープンエムピー

  • ライブラリというよりはコンパイラの仕様書のようなもので、C++をどのように拡張してシンプルでよく設計された並列処理を可能にするかを示しています。

インテルティービービー

  • タスク並列化のためのテンプレート・ライブラリ。インテルが設計
コンパイラ C/C++のソースから実行ファイル(アプリケーション)を作成するためのツールで、最もポピュラーなものです。

  • GCC - GNU コンパイラコレクション
  • MinGW GCC - GCCのWindows版
  • Clang - LLVMプロジェクトによるコンパイラ
  • MSVC (MSVS または Visual Studio とも呼ばれていますが、やや間違っています。) - Microsoft のコンパイラ
  • ICC - インテルのコンパイラ
デバッガ 実行中のプログラムのバグを見つけるためのツール

  • ヴァルグラインド
  • ジーディービー
  • エルエルディービービー
  • ウィンディービージー
コード計装 これは、パフォーマンスではなくバグを見つけることを目的としたアプリケーション版を生成するためのコンパイラの拡張です。

  • アドレス/メモリ/UndefinedBehavior Sanitizer
静的分析 バグの観点からのソースコードの分析。この方法でいくつかのクラスのバグを見つけることができる市販のソフトウェアが存在します。

  • シーピーピーチェック
  • クラング
  • Klocwork静的コード解析
  • PCリント
  • カバリティ
  • PVS-スタジオ

4.2 相互に使用される最も一般的なCとC++の技術名

  • C++ 標準ライブラリと STL は入れ替えて使用されることがありますが、正しくは使用されません。

4.3 CとC++の異なるバージョン

Cのバージョン

Cのバージョンには、リリースされた年が表示されています(例:C89は1989年のCです)。中間のバージョンはありませんが (例: C06)、C89以前のバージョンを指す場合もあります。

最も人気のあるリビジョンは以下の通りです。

  • C89
  • C95
  • C99
  • C11
  • C18
  • C21(未発表)。
  • エヌシーシーシー

C++のバージョン

C++のバージョンは、Cのバージョンと同じように、公開された年が表示されています。

最も人気のあるリビジョンは以下の通りです。

  • C++84 - 実際のリビジョンではありませんが、標準以前の C++ の定義に使用されることもあります。
  • C++98
  • C++03
  • C++11
  • C++14
  • C++17
  • C++20(未発表

また、開発中のバージョンがつけられていた名前を見ることができるかもしれません。

  • C++0x
  • C++1y(C++14の進行中の名前
  • C++1z (C++17 の進行中の名前)
  • C++2a(C++20の進行中の名前?

4.4 CとC++の技術のそれぞれのバージョンの近さ

  • C11/C18 - ほぼ同じ
  • C++98/C++03 - ほぼ同じ
  • C++11/C++14 - マイナーチェンジ
  • C++14/C++17 - 小規模な変更(しかし、C++11/C++17 の違いを重要にするには十分)。

4.5 全く違うバージョンは?

  • C++03/C++11 - C++史上最大の変化
  • C++11/C++17 - リビジョンの段階的な変更
  • C89/C99 - 型の安全性とレガシーな問題コードのサポートという点での大きな変更点

4.6 候補者のコーディングスキルを評価するために、CおよびC++の証明書はどの程度重要ですか?

尊敬されるC/C++の資格はありません。結果として、履歴書に記載されている資格は、候補者のスキルレベルについて何も教えてくれないので、無視するのがベストです。

4.7 C または C++ 開発者の履歴書に記載されているその他の注意点

候補者かどうかに注目してください。

  • 使用した言語のバージョンを指定します
  • 典型的なC++プロジェクトでの作業経験
  • 大規模プロジェクトに参加し、独自の厳しい要件に対応しています。

さらに、以下のようなことが挙げられている場合、技術面接では、公開されている履歴書をもとに候補者を評価することができます。

  • 会議での発言
  • 会議への参加
  • 専門誌への記事執筆
  • 技術ブログの書き方
  • OSSへの貢献
  • 回答サイトへの貢献(Stack Overflowなど

CとC++の電話インタビューの質問 - C++開発者のスキルリスト5.電話/ビデオ技術面接で質問するCとC++の面接の質問

履歴書だけに頼るのは難しいかもしれません。結局のところ、候補者が実際にスキルを持っているのか、それとも単にスキルを持っていると言っているだけなのかを確認するために、候補者が主張していることに挑戦することが重要です。電話インタビューはコーディングテストの代わりにはなりませんが、候補者が何を考えているのか、どのように問題を解決しようとしているのかを理解するのに役立ちます。

5.1 候補者の経験に関する質問

Q1: (C/C++)これまでのプロジェクトの制約条件は何でしたか?

Q1を聞くべき理由 候補者は、与えられた業界での経験を共有できるようにしておく必要があります。例えば、組み込みプログラミングではダイナミックメモリを使うことが難しく、ゲームでは1フレームをレンダリングするまでに全ての計算が終わるようにすることが非常に重要になります。

Q2: (C/C++)どのシステムでプログラミングをしていましたか?

Q2を聞くべき理由 ある意味では、Embedded/DesktopとLinux/Windows/OSXのプログラミングは大きく異なります。

Q3: (C/C++) 何か特定の標準に準拠したコーディングをしていましたか?

Q3を聞くべき理由 MISRAなどの経験があるかどうかは、候補者が教えてくれるかもしれません。

5.2 受験者の知識や意見に関する質問

Q1: (C++) C++とCの主な違いは何ですか?

Q2を聞くべき理由 この問題では、C++をC言語の小さな追加言語として扱っているのか、それとも使用パターンの異なる別の言語として扱っているのか、言語の理解度を示すことができます。

Q2: (C) ポインタ演算とは?

Q2を聞くべき理由 この問題では、受験者はCの記憶の基本的な扱い方を理解していることがわかります。

Q3: (C++)ポインタ演算とは?

Q3を聞くべき理由 この問題は、受験者がC言語がメモリを扱う基本的な方法を理解していることを表現する機会となります。注意:C++の場合、この問題はコードベースに安全でないパターンや時代遅れのパターンを使用していることを暗示しています。

Q4: (C++, 初級) クラスとオブジェクトの違いは何ですか?

Q4を聞くべき理由。 C++の基礎を理解しているかどうかを判断する。

Q5: (C++) ラムダ式とは?

Q5を聞くべき理由 C++03以降のC++の進歩(C++11でラムダ式が導入された)を知っていて、それを理解しているかどうかを判断する。

Q6: (C/C++) ロックとは何か、どのような問題を解決するのか、また、ロックの潜在的な問題は何か?

Q6を聞くべき理由 候補者のロック、レース条件、デッドロック、ライブロックへの理解度を示します。

Q7: (C/C++, エキスパート)とは 揮発性そしてそれがロックと同期についての質問とどのように関係しているのか?

Q7を聞くべき理由。 候補者は、そのことを 揮発性 は、ハードウェアへのアクセスにのみ使用し、同期化には使用しないこと。

Q8: (C++) 動的配列はどのように作成しますか?

Q8を聞くべき理由。 のように、候補者が良いアプローチをするかどうかがわかります。 標準ベクトルまたは、時代遅れで安全ではない 新しい.

Q9: (C++) RAIIとは何ですか?他の言語にもあるの?

問九を聞くべき理由 これは、候補者がこの C++ の基本的なイディオムを知っているかどうか、またその意味を理解しているかどうかを示します。以下のような他の言語の類似のオプション機能を記述した場合はボーナスポイントを与えます。 with() パイソンや 使って C#において。

Q10: (C++) デストラクタから投げることはできますか?

Q10を聞くべき理由 候補者はここで詳しく説明してくれます。要点は、デストラクタが暗黙的に 投げない.

Q11: (C++) コンストラクタを継承できるか?

Q11を聞くべき理由 候補者は、C++11 から可能になったこと、C++14 での動作方法のわずかな変更、およびその影響について回答することができます。

Q12: (C++) 仮想コンストラクタを持つことはできますか?

問12を聞くべき理由 短答はノーですが、工場や試作パターンに言及することで、候補者は素早い思考力を発揮することができます。

Q13: (C++) インターフェースとは何ですか?

問13を聞くべき理由 C++にはインターフェースがないので、これはちょっとした問題です。C++には抽象クラスがありますが、受験者はそれについて話すことになっています。

Q14: (C++, 専門家) 純粋な仮想関数の実装を持つことはできますか?

Q14を聞くべき理由 答えはそうですが、使い勝手は限られています。

Q15: (C++, 専門家) 仮想テンプレート関数を持つことができるのか、その理由は?

Q15を聞くべき理由 コンパイルタイムとランタイムの区別や、実装の詳細についての理解を示すことができます。 ぶどうひょう.

Q16: (C++, エキスパート) どのように実装しますか? std::is_same?

Q16を聞くべき理由 候補者は、この些細な例を実装することで、メタプログラミングの知識を発揮できるようになります。

Q17: (C/C++) C言語で一番好きな変更点(または変更点の数)は何ですか?エヌエヌ/C++エヌエヌ?

Q17を聞くべき理由 候補者が言語の変化に追いついているかどうか、また言語のバージョンによって微妙に異なるコーディングイディオムを認識しているかどうかを示します。

Q18: C++)C++98とC++11の違いは?

Q18を聞くべき理由 C++11は、C++言語、そのパラダイム、パターンの大きな変化でした。候補者は、この大きな変化についての知識を示すことができるようになります。

Q19: (C/C++) メモリ破損のバグをどのように検出して修正しますか?

Q19を聞くべき理由 そのような努力に役立つ思考プロセスや知識、ツールを表示すること。

Q20: (C/C++)カスタムアロケータの使用経験はありますか?

Q20を聞くべき理由。 候補者は、カスタムアロケータの経験を共有することができます。

Q21: (C/C++) あなたの履歴書に framework/library X がありますが、それを使った経験を記述してください。それを使って良かったですか?他の選択肢はありますか?

Q21を聞くべき理由 これはオープンな質問であり、採用担当者は候補者が分野を広く見ているかどうか、選択肢を知っているかどうか、一つの解決策を選択した場合と他の解決策を選択した場合のトレードオフを理解しているかどうかを知ることができます。

Q22: (C/C++) お勧めのビルドシステムとその理由は?競合他社と比較してどうですか?

Q22を聞くべき理由 ビルドシステムに関する候補者の知識を示します。

5.3 行動に関する質問 候補者が過去にどのように行動してきたかを聞くべきです。

Q1: あなたのプログラミングの最大の成功例は何ですか?なぜそれが起きたのか?どのようにしてそれを繰り返すことができますか?

Q1を聞くべき理由 この質問では、候補者がサクセスストーリーを提示することができ、問題を解決することに興味があるのか、それとも褒めてもらうことに興味があるのかを採用担当者に示すことができます。

Q2: あなたの最大のプログラミングの失敗は何でしたか?なぜそのようなことが起きたのでしょうか?どうすれば今後同じことを繰り返さないで済むのでしょうか?

Q2を聞くべき理由 この質問をすることで、候補者は潜在的に問題のある話を提示することができ、採用担当者は候補者がそれをオープンにしているかどうかを知ることができます。また、問題解決に関心があるのか、それとも責任転嫁に関心があるのかを示すことにもなります。

Q3: (上級者向け) 後輩の開発者を指導したいと思いますか?その理由は何ですか?他の人を指導した経験はありますか?

Q3を聞くべき理由 これにより、採用担当者は候補者の興味や知識を共有するために必要なソフトスキルを測ることができます。

CおよびC++開発者の技術審査6.オンラインコーディングテストによるCまたはC++の開発者スキルの技術審査

CとC++の開発者について絶対に明確にしておく必要があることは、彼らが完璧なコーディングスキルを持っていることが不可欠であるということです。C言語では誤差が許されず、C++ではそれ以上のことは許されません。確かに、履歴書のスクリーンや電話のスクリーンは、候補者の中から何人かを除外するのに役立ちます。しかし、候補者を技術的な面接に招待しても、その候補者がずっとコーディングスキルを持っていなかったことに気づくのは避けたいものです。

6.1 CとC++のどちらのオンラインプログラミングテストを選ぶべきか?

正しいものを探すとき CまたはC++オンラインプログラミングテスト を確認する必要があります。

  • 実際に行われている作業を反映しています。
  • 候補者の時間をあまり取らないように、1時間から2時間を上限としています。
  • 自動的に送信され、どこにでも持ち運びが可能です。
  • 彼らは、ソリューションが動作するかどうかをチェックするだけでなく、コードの品質やエッジケースでの動作をチェックしています。
  • 可能な限り自然なプログラミング環境に近づけ、候補者が通常仕事で利用するようなリソースにアクセスできるようにしています。
  • 候補者には、通常使用するすべてのライブラリ、フレームワーク、その他のツールを使用させます。
  • 候補者の能力に見合った適切なレベルのものであること

7.DevSkiller すぐに使えるオンラインの C および C++ 開発者コーディング評価テスト

DevSkiller のコーディングテストは、当社の RealLifeTesting を使用しています。tmand 候補者が実際に働くコーディング環境を反映した方法論を採用しています。曖昧なアルゴリズムを使用するのではなく、DevSkiller テストでは、受験者はアプリケーションや機能を構築する必要があります。これらのテストは完全に自動的に採点され、世界中どこからでも受験することができます。同時に、受験者はライブラリ、フレームワーク、StackOverflow、Google など、通常使用するであろうすべてのリソースにアクセスすることができます。

企業は DevSkiller を利用して、世界中のどこからでも自社のコードベースを使って受験者をテストしています。また、DevSkiller では、ここで紹介したような C や C++ のコーディング・テストも数多く用意されています。

C++
ミドル
テストされたスキル
持続時間
55 分以内
評価
自動
テストの概要

選択問題

知識評価 C++

プログラミングタスク - レベル。中程度

C++|実行長エンコーディング - 実装 ランレングス符号化 ASCIIテキスト文字列に対応しています。

シェアポスト

技術者の採用についてはこちら

ラーニングハブに登録すると、有益な情報をメールで受け取ることができます。

シームレスにコーディングスキルを検証&開発

DevSkillerの製品をご覧ください。

セキュリティ認証とコンプライアンス。お客様のデータの安全性を確認します。

DevSkillerのロゴ タレントブーストのロゴ タレントスコアのロゴ