所以我今天只采访了两个人,并给他们"测试",看看他们的技能是什么样的.两人都是入门级申请人,其中一人实际上还在上大学.申请人都没有看到以下代码有任何问题.
我这么做,显然或者我不会选择那些例子. 你觉得这些问题对于新手程序员来说太苛刻吗?
我想我也应该注意到他们都没有多少经验与C#...但我不认为这些问题与语言有关.
//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(); }
itsmatt.. 35
我通常不会在某个职位的面试中抛出代码并说"出了什么问题?",主要是因为我不相信它真的让我觉得是最好的候选人.面试有时会有压力,有点压倒性,编码员并不总是在他们的A级比赛中.
关于这些问题,说实话,我认为如果我不知道C#,我就会遇到问题3的问题.问题#2也有点时髦.是的,我得到你想要的东西,但是如果想法是BindlistviewNotification()应该被调用两次呢?目前尚不清楚,有人可能认为没有足够的信息.问题1很容易清理,但我不相信它甚至证明了没有C#背景的入门级开发人员的任何东西.
我想我宁愿通过他们如何解决问题(用伪代码或他们熟悉的任何语言)来讨论我并从中评估它们.但是,只是个人意见.
我通常不会在某个职位的面试中抛出代码并说"出了什么问题?",主要是因为我不相信它真的让我觉得是最好的候选人.面试有时会有压力,有点压倒性,编码员并不总是在他们的A级比赛中.
关于这些问题,说实话,我认为如果我不知道C#,我就会遇到问题3的问题.问题#2也有点时髦.是的,我得到你想要的东西,但是如果想法是BindlistviewNotification()应该被调用两次呢?目前尚不清楚,有人可能认为没有足够的信息.问题1很容易清理,但我不相信它甚至证明了没有C#背景的入门级开发人员的任何东西.
我想我宁愿通过他们如何解决问题(用伪代码或他们熟悉的任何语言)来讨论我并从中评估它们.但是,只是个人意见.
我是一名初级程序员,所以我可以尝试一下:
"活跃"是不必要的:
CheckBox chkactive = (CheckBox)item.FindControl("chkactive"); dmxdevice.Active = chkactive.Checked
您应该使用安全转换来强制转换为CheckBox对象.当然,你应该能够通过变量名找到复选框:
CheckBox chkactive = item.FindControl("chkactive") as CheckBox;
第二个功能可能更简洁:
public void Question2(bool IsPostBack) { if (!IsPostBack || lsvnotificationList.Items.Count == 0) { BindlistviewNotification(); } }
只有时间为这两个人,工作是呼唤!
编辑:我刚刚意识到我没有回答你的问题.我认为这根本不复杂.我无论如何都不是专家,我可以很容易地看到这里效率低下的问题.但我认为这一般是错误的做法.在我看来,这些语言特定的测试并不是很有用.试着了解他们如何攻击和解决问题.任何能够通过测试的人都能轻松掌握一门语言,并从错误中吸取教训.
我认为你正在测试错误的东西.你显然正在寻找一个C#程序员,而不是一个才华横溢的程序员(不是说你不能成为一个才华横溢的C#程序员).例如,这些人可能是伟大的C++程序员.C#可以学习,智能不可以.我更喜欢在面试中询问代码,而不是用特定语言呈现代码(例如:用任何语言实现ArrayList和LinkedList).
当我今年早些时候在寻找3位程序员时,主要在C#,Java,PL/SQL,Javascript和Delphi中工作,我寻找C/C++程序员,并没有失望.任何人都可以学习Java,并不是每个人都有良好的架构感,数据结构和对新的复杂问题的把握.C++很难,所以它可以作为一个很好的过滤器.如果我在这个Java代码中找到了查找错误,我就会丢失它们.
顺便说一句,我是团队负责人,已经编程了20年,有几十个按时和按预算开发的大型项目,我不知道第2或第3个问题出了什么问题,只是熟悉C#,当然不是Linq,不是我无法学习它......我在几分钟后想出来了,但不会指望最近的毕业生能够掌握它,问题3中的所有LINQ代码都是分散注意力,隐藏真正的问题.
你觉得这些问题对于新手程序员来说太苛刻吗?
是的,IMO他们太苛刻了.
申请人都没有看到以下代码有任何问题.
虽然有很多"可能的问题",比如没有检查空指针,转换等,但似乎没有任何"实际问题".(例如:给出合理的输入,程序看起来会实际运行).
我猜想新手程序员会挂断电话.
由于LINQ是相当新的,并广泛使用还没有,它会去的方式在你的新手之首.
什么是ESLinqDataContext
?如果人们不知道你的对象是什么或它的行为如何,那么他们如何知道它是否被正确使用?
评估代码的质量和讨论
你只是从学习类似于你面前的代码的合理经验中学到了很多东西,比如无效的强制转换异常(更不用说能够判断和评论'代码质量')了.
也许我误解了,但对我来说,根据定义,"入门级"的位置并没有对先前经验的期望,因此根据需要经验的标准对它们进行评级似乎不公平.
我不是C#程序员,所以我不知道BindlistviewNotification做了什么,但改变了
public void Question2(bool IsPostBack) { if (!IsPostBack) { foo(); } if (lsvnotificationList.Items.Count == 0) { foo(); } }
至
public void Question2(bool IsPostBack) { if (!IsPostBack || lsvnotificationList.Items.Count == 0) { foo(); } }
改变功能!如果IsPostBack为false,则执行foo.如果lsvnotificationList.Items.Count == 0则再次执行foo .修改后的代码只会执行一次 foo .
您可以争辩说BindlistviewNotification可以多次执行而没有副作用,或者IsPostBack永远不会是false并且lsvnotificationList.Items.Count同时等于0,但这些是依赖于语言和依赖于实现的问题,无法使用给定的代码解决片段.
此外,如果这是一个"应该"在面试中被捕获的错误,那么这根本不是语言不可知的.没有什么可以告诉我这应该是一个错误.
作为一个新手,我希望雇主更关心我的思维过程,而不是答案是否"正确".我可以想出这些问题的一些答案,但它们可能不对.:)
所以说,我认为你可以解决这些问题,但你应该对"正确"的答案更加自由.
只要这些条件明确,我认为得到一张没有任何想法的空白表是一件坏事.这意味着他们要么真正认为代码是完美的(我们知道这几乎不是真的),要么太羞怯以分享他们的想法(这也是一件坏事).
我不认为1和2太难了,#3需要对数据绑定和LINQ如何在.NET中工作有一个很好的理解,所以对入门级人员来说可能有些困难.我认为这些对于具有一定.NET经验的初级开发人员来说是相当不错的问题.
对于它的价值,我的笔记:
问题1:
使用整数作为布尔值
对findControl没有空检查
冗长的冗长
我的修订版:
public void Question1() { CheckBox chkactive = item.FindControl("chkactive") as CheckBox; if (chkActive != null) dmxdevice.Active = chkActive.Checked; else dmxdevice.Active = false; }问题2:
冗长的冗长
如果不是回发,则数据绑定将发生两次,并且没有要绑定的项目.
我的修订版:
public void Question2(bool IsPostBack) { if (!IsPostBack || lsnotificationList.Items.Count == 0) { BindlistviewNotification(); } }问题3:
用获取e.Item.DataItem替换索引的循环;
将nullchecks添加到findControl调用.
切换到TryParse并添加默认的id值.
添加了更好的错误处理
记录一些主要的架构问题,为什么要从前端查询数据库?那些LINQ查询也可以进行优化.
为什么不检查列表项集合中的重复项,为什么不在以后通过单个提交批处理所有更新?