616 Stimmen

Welches ist schneller: while(1) oder while(2)?

Dies war eine Interviewfrage eines leitenden Managers.

Was ist schneller?

while(1) {
    // Einige Code
}

oder

while(2) {
    // Einige Code
}

Ich sagte, dass beide die gleiche Ausführungsgeschwindigkeit haben, da der Ausdruck innerhalb des while-Statements schließlich zu true oder false ausgewertet werden sollte. In diesem Fall evaluieren beide zu true und es gibt keine zusätzlichen bedingten Anweisungen innerhalb der while-Bedingung. Daher werden beide mit der gleichen Ausführungsgeschwindigkeit ausgeführt, und ich bevorzuge while (1).

Aber der Interviewer sagte zuversichtlich: "Überprüfe deine Grundlagen. while(1) ist schneller als while(2)." (Er testete nicht meine Zuversicht)

Ist das wahr?

Siehe auch: Ist "for(;;)" schneller als "while (TRUE)"? Wenn nicht, warum verwenden Menschen es?

11voto

UncleKing Punkte 703

Eine andere Herangehensweise an eine solche Frage wäre zu sehen, ob Sie den Mut haben, Ihrem Manager zu sagen, dass er/sie falsch liegt! Und wie sanft können Sie es kommunizieren.

Mein erster Instinkt wäre gewesen, Assembly-Ausgabe zu generieren, um dem Manager zu zeigen, dass sich ein anständiger Compiler darum kümmern sollte, und wenn er es nicht tut, werden Sie den nächsten Patch dafür einreichen :)

9voto

Bart Verkoeijen Punkte 14455

Wenn so viele Menschen sich mit diesem Problem beschäftigen, zeigt dies genau, warum dies sehr gut ein Test sein könnte, um zu sehen, wie schnell Sie Dinge mikrooptimieren möchten.

Meine Antwort wäre; es ist nicht so wichtig, ich konzentriere mich lieber auf das Geschäftsproblem, das wir lösen. Schließlich werde ich dafür bezahlt.

Darüber hinaus würde ich mich für while(1) {} entscheiden, weil es häufiger vorkommt und andere Teammitglieder nicht Zeit damit verbringen müssen, herauszufinden, warum sich jemand für eine Zahl größer als 1 entscheiden würde.

Jetzt gehen Sie und schreiben etwas Code. ;-)

7voto

Tom Tanner Punkte 9075

Wenn Sie sich so sehr um die Optimierung sorgen, sollten Sie

for (;;)

verwenden, denn das hat keine Tests. (Zyniker-Modus)

6voto

pacoverflow Punkte 3440

Es scheint mir, dass dies eine dieser verhaltensorientierten Interviewfragen ist, die als technische Frage getarnt sind. Einige Unternehmen machen das - sie werden eine technische Frage stellen, die für jeden kompetenten Programmierer relativ einfach zu beantworten sein sollte, aber wenn der Bewerber die richtige Antwort gibt, wird ihm gesagt, dass er falsch liegt.

Das Unternehmen möchte sehen, wie Sie in dieser Situation reagieren werden. Sitzen Sie still da und drängen nicht darauf, dass Ihre Antwort korrekt ist, entweder wegen Selbstzweifel oder aus Angst, den Interviewer zu verärgern? Oder sind Sie bereit, eine Person in Autorität herauszufordern, von der Sie wissen, dass sie falsch liegt? Sie möchten sehen, ob Sie bereit sind, für Ihre Überzeugungen einzutreten, und ob Sie dies auf eine taktvolle und respektvolle Weise tun können.

5voto

Rok Kralj Punkte 43551

Vielleicht hat der Interviewer diese dumme Frage absichtlich gestellt und wollte, dass du 3 Punkte machst:

  1. Grundlegende Logik. Beide Schleifen sind unendlich, es ist schwer über die Leistung zu sprechen.
  2. Wissen über Optimierungsebenen. Er wollte von dir hören, ob du den Compiler irgendwelche Optimierungen für dich machen lässt, er würde die Bedingung optimieren, besonders wenn der Block nicht leer war.
  3. Wissen über Mikroprozessor-Architektur. Die meisten Architekturen haben eine spezielle CPU-Instruktion für Vergleiche mit 0 (obwohl nicht unbedingt schneller).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X