5 Stimmen

Sind diese Interviewfragen zu schwierig für Anfänger?

Ich habe heute mit zwei Leuten ein Vorstellungsgespräch geführt und sie "getestet", um zu sehen, wie es um ihre Fähigkeiten bestellt ist. Beide sind Berufsanfänger, einer von ihnen ist sogar noch auf dem College. Keiner der beiden Bewerber sah etwas Falsches an dem folgenden Code.

Ich schon, sonst hätte ich diese Beispiele nicht ausgewählt. Glauben Sie, dass diese Fragen für Programmieranfänger zu hart sind?

Ich denke, ich sollte auch bemerken, dass keiner von ihnen viel Erfahrung mit C# hatte... aber ich glaube nicht, dass die Probleme mit diesen sprachabhängig sind.

//For the following functions, evaluate the code for quality and discuss.  E.g.
//E.g. could it be done more efficiently? could it cause bugs?        
public void Question1()
{
    int active = 0;

    CheckBox chkactive = (CheckBox)item.FindControl("chkactive");
    if (chkactive.Checked == true)
    {
        active = 1;
    }

    dmxdevice.Active = Convert.ToBoolean(active);
}

public void Question2(bool IsPostBack)
{
    if (!IsPostBack)
    {
        BindlistviewNotification();
    }

    if (lsvnotificationList.Items.Count == 0)
    {
        BindlistviewNotification();
    }
}

//Question 3
protected void lsvnotificationList_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
   ListViewDataItem item = lsvnotificationList.Items[e.ItemIndex];
   string Email = ((TextBox)item.FindControl("txtEmailAddress")).Text;
   int id = Convert.ToInt32(((HiddenField)item.FindControl("hfID")).Value);

   ESLinq.ESLinqDataContext db = new ESLinq.ESLinqDataContext();
   var compare = from N in db.NotificationLists
                 where N.ID == id 
                 select N;
   if (compare.Count() > 0)
   {
       lblmessage.Text = "Record Already Exists";
   }
   else
   {
       ESLinq.NotificationList Notice = db.NotificationLists.Where(N => N.ID == id).Single();
       Notice.EmailAddress = Email;
       db.SubmitChanges();
   }
   lsvnotificationList.EditIndex = -1;
   BindlistviewNotification();
}

35voto

itsmatt Punkte 30839

Normalerweise werfe ich jemandem, der sich um eine Stelle bewirbt, keinen Code vor und sage: "Was ist los?", vor allem, weil ich nicht davon überzeugt bin, dass ich damit wirklich den besten Kandidaten finde. Vorstellungsgespräche sind manchmal stressig und ein bisschen überwältigend, und Programmierer sind nicht immer in Höchstform.

Was die Fragen angeht, so glaube ich ehrlich gesagt, dass ich mich mit Frage 3 schwer tun würde, wenn ich C# nicht kennen würde. Frage 2 ist auch ein bisschen komisch. Ja, ich verstehe, worauf Sie hinauswollen, aber was, wenn die Idee war, dass BindlistviewNotification() zweimal aufgerufen werden sollte? Es ist nicht klar und man könnte argumentieren, dass es nicht genug Informationen gibt. Frage 1 ist einfach genug, um zu bereinigen, aber ich bin nicht überzeugt, selbst es beweist nichts für einen Entry-Level-Entwickler ohne einen Hintergrund in C #.

Ich denke, ich würde mir lieber von jemandem erklären lassen, wie er ein Problem angehen würde (in Pseudocode oder einer anderen Sprache, die er gut beherrscht), und es auf dieser Grundlage beurteilen. Das ist allerdings nur eine persönliche Meinung.

11voto

Tony BenBrahim Punkte 6668

Ich glaube, Sie testen das Falsche. Sie suchen offensichtlich nach einem C#-Programmierer und nicht nach einem talentierten Programmierer (nicht, dass Sie nicht auch ein talentierter C#-Programmierer sein könnten). Die Jungs könnten z. B. großartige C++-Programmierer sein. C# kann man lernen, Intelligenz nicht. Ich ziehe es vor, bei einem Vorstellungsgespräch nach Code zu fragen, anstatt Code in einer bestimmten Sprache zu präsentieren (Beispiel: Implementieren Sie eine ArrayList und eine LinkedList in einer beliebigen Sprache).
Als ich Anfang des Jahres nach drei Programmierern suchte, die hauptsächlich in C#, Java, PL/SQL, Javascript und Delphi arbeiten sollten, habe ich nach C/C++-Programmierern gesucht und wurde nicht enttäuscht. Java kann jeder lernen, aber nicht jeder hat ein Gespür für gute Architekturen, Datenstrukturen und ein Verständnis für neue komplexe Probleme. C++ ist schwer, daher wirkt es wie ein guter Filter. Wenn ich nach Fehlern in diesem Java-Code gefragt hätte, hätte ich sie verloren.
BTW, ich bin ein Team leiten, wurde die Programmierung für 20 Jahre mit Dutzenden von großen Projekten auf Zeit und Budget entwickelt, und ich hatte keine Ahnung, was falsch war mit Frage 2 oder 3, mit nur eine flüchtige Vertrautheit mit C #, und schon gar nicht mit Linq, Nicht, dass ich es nicht lernen konnte.... Ich habe es nach ein paar Minuten herausgefunden, aber ich würde nicht erwarten, dass ein frischgebackener Absolvent es versteht. Der ganze LINQ-Code in Frage 3 ist eine Ablenkung, die die wirklichen Probleme verdeckt.

11voto

Ed S. Punkte 118985

Ich bin ein junger Programmierer, also kann ich es ausprobieren:

  1. "aktiv" ist unnötig:

    CheckBox chkactive = (CheckBox)item.FindControl("chkactive");
    dmxdevice.Active = chkactive.Checked
  2. Sie sollten sicheres Casting verwenden, um ein CheckBox-Objekt zu erzeugen. Natürlich sollten Sie in der Lage sein, das Kontrollkästchen über seinen Variablennamen zu finden..:

    CheckBox chkactive = item.FindControl("chkactive") as CheckBox;
  3. Die zweite Funktion könnte prägnanter sein:

    public void Question2(bool IsPostBack)
    {
        if (!IsPostBack || lsvnotificationList.Items.Count == 0)
        {
            BindlistviewNotification();
        }
    }

Ich habe nur Zeit für diese beiden, die Arbeit ruft!

EDIT: Mir ist gerade aufgefallen, dass ich Ihre Frage nicht beantwortet habe. Ich glaube nicht, dass das überhaupt kompliziert ist. Ich bin beileibe kein Experte und kann die Ineffizienzen hier leicht erkennen. Ich glaube jedoch, dass dies generell der falsche Ansatz ist. Diese sprachspezifischen Tests sind meiner Meinung nach nicht sehr nützlich. Versuchen Sie, ein Gefühl dafür zu bekommen, wie sie ein Problem angehen und lösen würden. Jeder, der diesen Test besteht, wird in der Lage sein, eine Sprache leicht zu erlernen und aus seinen Fehlern zu lernen.

8voto

Orion Edwards Punkte 117361

Glauben Sie, dass diese Fragen für Programmieranfänger zu hart sind?

Ja, IMO sind sie zu hart.

Keiner der beiden Antragsteller sah in dem folgenden Code einen Fehler.

  1. Es gibt zwar viele "mögliche Probleme", wie z. B. die Nichtüberprüfung von Nullzeigern, Casting usw., aber es scheint keine "tatsächlichen Probleme" zu geben. (z.B.: bei einer vernünftigen Eingabe sieht das Programm so aus, als würde es tatsächlich laufen).
    Ich würde vermuten, dass sich ein Programmieranfänger daran stören wird.

  2. Da linq ziemlich neu ist und noch nicht weit verbreitet ist, wird es in Zukunft Weg über den Kopf Ihrer Neulinge hinweg.

  3. Was ist ein ESLinqDataContext ? Wenn die Leute keine Ahnung haben, was Ihr Objekt ist oder wie es sich verhält, wie sollen sie dann wissen, ob es richtig verwendet wird oder nicht?

  4. die Qualität des Codes zu bewerten und zu diskutieren

Man lernt nur dann, Dinge wie Ausnahmen bei ungültigen Würfen zu erkennen (ganz zu schweigen von der Fähigkeit, die "Codequalität" zu beurteilen und zu kommentieren), wenn man angemessene Erfahrungen mit ähnlichem Code wie dem vorliegenden hat.

Vielleicht verstehe ich das falsch, aber ich denke, dass für eine "Einstiegsposition" per definitionem keine Erfahrung erforderlich ist, so dass es nicht fair erscheint, sie nach Kriterien zu bewerten, die Erfahrung erfordern.

6voto

Kyle Cronin Punkte 74993

Ich bin kein C#-Programmierer, also weiß ich nicht, was BindlistviewNotification tut, aber die Änderung

public void Question2(bool IsPostBack)
{
    if (!IsPostBack)
    {
        foo();
    }

    if (lsvnotificationList.Items.Count == 0)
    {
        foo();
    }
}

zu

public void Question2(bool IsPostBack)
{
    if (!IsPostBack || lsvnotificationList.Items.Count == 0)
    {
        foo();
    }
}

ändert die Funktion ! Wenn IsPostBack falsch ist, wird foo ausgeführt. Wenn lsvnotificationList.Items.Count == 0 dann wird foo ausgeführt wieder . Der überarbeitete Code wird nur foo ausführen einmal .

Man könnte argumentieren, dass BindlistviewNotification mehrere Male ohne Seiteneffekte ausgeführt werden kann oder dass IsPostBack niemals falsch und lsvnotificationList.Items.Count gleich 0 sein kann, aber das sind sprach- und implementierungsabhängige Probleme, die mit dem vorliegenden Codeschnipsel nicht gelöst werden können.

Wenn es sich um einen Fehler handelt, der bei der Befragung erkannt werden soll, ist dies auch nicht sprachunabhängig. Es gibt nichts, was mir sagen würde, dass dies ein Fehler sein soll.

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