Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 組み込みプログラマーになりたいことは0x10の基本的な質問を知っておくべきです

組み込みプログラマーになりたいことは0x10の基本的な質問を知っておくべきです

  

C言語テストは組み込みシステムプログラマーを募集するのに必要かつ効果的な方法です。その過程で、これらのテストが面接担当者とインタビュイーに役立つ情報をたくさん提供できることに気づきましたまた、インタビューを開くことへのプレッシャーは議論されていません。とてもおもしろい。インタビュイーの観点からは、発行者または監督者について多くのことを学ぶことができます。このテストは、技術的なスキルではなくANSI規格の詳細についての彼の知識を示すために、被験者によって設計されていますか?このばかげた質問?あなたが文字のASCII値に答えたい場合。これらの問題はあなたのシステムコールとメモリ割り当て戦略に焦点を合わせていますか?これは、作成者が組み込みシステムではなくマイクロコンピュータに時間を費やす可能性があることを示しています。上記の質問のいずれかに対する回答が「はい」である場合、仕事をするべきかどうかを真剣に検討しなければならないことがわかります。面接担当者の観点からは、テストによって候補者の質がさまざまな方法で明らかになります。基本的に、候補者のC言語のレベルを理解することができます。とにかく、この人が彼が勝った質問にどう答えるかを見るのは面白いです。候補者は直感的に賢い選択をしているのか、それとも単なる罪なのか。候補者が問題に固執している場合、それは言い訳ですか、それともそれが学習の機会としてそれを見て、問題についての本当の好奇心を示していますか?私はこの情報が彼らのテストの点数と同じくらい役に立つことがわかりました。これらの考えを念頭に置いて、私は本当に組み込みシステムを対象としたいくつかの試験問題を思いつくことにしましたこれらの頭痛の問題が仕事を探している人たちに役立つことを願っています。これらの問題は実際には何年もかけて私が直面しています。これらの質問のいくつかは難しいですが、それらはすべてあなたにいくつかのインスピレーションを与えるべきです。このテストはさまざまなレベルの受験者に適しており、初級レベルの受験者のほとんどは成績が悪く、経験豊富なプログラマは成績が良いはずです。あなたが特定の質問に対するあなた自身の好みを決めることができるようにするために、それぞれの質問にはスコアが割り当てられていません。プリプロセッサ

1.プリプロセッサ指令#defineを使用して、1年に何秒で表示するかを指定します(うるう年の問題は無視されます)。

#define SECONDS_PER_YEAR(60 * 60 * 24 * 365)ULここでいくつかのことを見たいと思います:1; #define文法の基本的な知識(例えば、セミコロン、括弧の使用などで終わらせることはできません)

2;プリプロセッサはあなたのために定数式の値を計算するので、実際の値を計算するのではなく、年間に何秒を計算するかを直接書くことはより明確で費用はかかりません。 3;この式は16ビットマシンの整数をオーバーフローすることに注意してください - したがって、長整数Lを使用して、定数が長整数であることをコンパイラに伝えます。 4;式にUL(符号なし長整数を示す)を使用している場合は、良い出発点があります。覚えておいて、最初の印象は重要です。 2. 2つの引数を取り、小さい方を返す「標準の」マクロMINを作成します。

#define MIN(A、B)((A)< =(B)?(A):(B))

このテストは次の目的のためのものです。 1; #defineアプリケーションの基本をマクロで識別します。インライン演算子が標準Cの一部になるまではマクロが埋め込みコードを簡単に生成する唯一の方法であるため、これは重要です。埋め込みシステムでは、必要なパフォーマンスを達成するために埋め込みコードがしばしば必要です。方法2;三重条件演算子に関する知識。この演算子がCに存在する理由は、if-then-elseよりも最適化されたコードをコンパイラが生成できるようにするためです。 3;マクロ内で括弧でパラメータを慎重に囲む方法を知っています4;また、私はこの質問を使用して、マクロの副作用についての議論を始めます、例えば:あなたが次のコードを書くとどうなりますか?

least = MIN(* p ++、b);

3.プリプロセッサ識別子#errorの目的は何ですか?答えがわからない場合は、参考文献1を参照してください。この質問は、通常の仲間とオタクを区別するのに役立ちます。そのような質問に対する答えを見つけるためにC言語の教科書の付録を読むことができるのはオタクだけです。もちろん、あなたがオタクを探していない場合は、候補者は彼が答えを知らないことを願うべきです。無限ループ

4.無限ループは組み込みシステムでよく使用されますが、Cで無限ループをどのように記述しますか。この問題はいくつかの解決策を使用します。私の推奨する解決策は以下のとおりです。

while(1){}


プログラマーの中には、次のものを好む人がいます。

for(;;){この文法は何が起こっているのかを正確に表現していないので、この実装は私を困惑させます。候補者がこれを解決策として提供する場合は、その基本原則を探る機会としてこれを使用します。もし彼らの基本的な答えが「私はこれをするように教えられたが、その理由について決して考えたことがない」であるならば。 "これは私に悪い印象を与えます。 3番目の選択肢は、goto

Loopを使用することです。... goto Loop;

候補者は上記の解決策を示します。つまり、彼はアセンブリ言語プログラマです(これはいいことか、彼は新しい分野を入力したいBASIC /FORTRANプログラマーです。

データ宣言

5.変数aを使って、次の定義を与えます。a)整数(整数)b)整数へのポインタ(ポインタ)整数へ)c)整数を指すポインタへのポインタ(整数へのポインタへのポインタ)rd)10個の整数の配列(10個の整数の配列) e)整数を指す10個のポインタの配列。 (10個の整数へのポインタの配列)f)10個の整数の配列へのポインタ(10個の整数の配列へのポインタ)g)整数引数を持ち、aを返す関数へのポインタ引数として整数を取り、整数を返す関数へのポインタh)整数引数を持ち、整数を返す関数への10個のポインタの配列(整数の引数を取り、整数を返す関数への10個のポインタの配列)

答えは、次のとおりです。a)int a; //整数b)int * a; //整数cへのポインタInt ** a; //整数へのポインタへのポインタd)int a [10]; //10個の整数の配列e)int * a [10]; //整数への10個のポインタの配列f Int(* a)[10]; //10個の整数の配列へのポインタg)int(* a)(int); //整数引数を取り、整数hを返す関数aへのポインタInt(* a [10])(int); //整数引数をとる関数への10個のポインタの配列整数を巻き込んで返す本をめくることで答えることができる種類の質問がいくつかあると人々はしばしば主張しています。この記事を書いたとき、文法の正当性を判断するために本を調べました。しかし、私がインタビューを受けたとき、私はこの質問(または同様の質問)を尋ねられることを期待していました。インタビューの間に、私はこの質問に対する答えを知っていると確信しています。候補者がすべての答え(または少なくともほとんどの答え)を知らない場合、面接の準備はできませんが、面接担当者が面接の準備をしていない場合、なぜ彼は準備できますか。zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved