日期:2014-05-20  浏览次数:20773 次

各位用.NET为主的朋友,你们的C,C++,数据结构,算法基础,水平怎样呢?面试时遇到过这方面的笔试?如何应对呢?
本帖最后由 u011321421 于 2013-12-06 21:53:43 编辑
前天去应聘一个.NET开发的职位,


职责要求是
对内部系统进行二次开发,ASP.NET平台的
专业要求是:
熟悉.NET,c#,HTML,JS,CSS等Web开发。

本来面一开始与HR在面谈时,感觉还不错。

后来,她叫人拿了一份笔试题目让我做。

=======================================================
题型为:填空,选择,简答,书写代码。

【范围】:
计算机网络基础知识()
数据结构,算法(二叉树,递归)
c++(要求写出String的构造函数,析构函数,赋值函数),简单指针问题等
数据库

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
但几乎没有一道题目是.NET相关的,
唯一能有点相关的的就是提到一下数据库(但也没说是MSSQL,是系范式,事务)。

所以,笔试之后,估计复试没戏了~~~~~~~

那些知识不难,只是平时极少用到,也就没去关注,有不熟悉的,有忘记解法的


大家平时去面试,有试过这样(招.NET,却考XXX)的情况么?

还是算那些都是程序员的一些基本要求,必须要会。

面对这种类型的笔试,大家有信心能过?

------解决方案--------------------
因为培训班很少培训C++,所以先来一轮淘汰下青鸟黑马蓝翔。
------解决方案--------------------
引用:
Quote: 引用:

因为培训班很少培训C++,所以先来一轮淘汰下青鸟黑马蓝翔。


难道真是这个初衷?~~


也伤了大专生~~我们的课程也没有c++..数据结构。。。
后来只上过一些算法设计选修课而已。

而在平时的项目使用中,很少用到,也就没怎么去关注。。。

这些基础知识很少直接用到,但是对于合格的程序员它们本身应该是手到擒来的。
------解决方案--------------------
所谓“忘记”,说明你学的时候就没有搞懂过,只是强记了一些皮毛。
你说数据结构学了怎么能忘记呢?
------解决方案--------------------
有前途,真正招人才的公司肯定会对你的学习能力,研究能力,发展能力有一定的期待。
没前途,找点临时工的公司反正无所谓,他们看中的是你能不能在短期内能糊出个程序。
------解决方案--------------------
其实大专也好培训班也好,这个不是重点,重点是你本人的基础扎实不扎实。

如果单纯讲学过什么课程,那我可能比你差远了,至少你还学过计算机专业的课程,我可没有在大学里学过这些课,我又不是计算机系的。我上大学那会儿也学过编程课,但我们那会儿学的是FORTRAN 77,一门非常古老的编程语言,估计你都没有听说过,而且现在FORTRAN 77也早就被淘汰了。你们大学里好歹学过SQL Server、Oracle、MySQL吧,我们那会儿连Access都没学过,我们学的是Foxbase和Foxpro。你们现在上大学的时候好歹还听说过Linux吧,我们那会儿,大学里用的是VAX小型机,上面跑的是VMS操作系统,当年我也是兴趣盎然地钻研过那个操作系统,还拿FORTRAN 77在上面编写过向终端发送电子邮件的程序,但是VMS这种操作系统出了校门我再也没有用过了。除了VMS,整个大学期间我们用的操作系统基本上是DOS,到我毕业的那一年,学校的机器才升级到Windows NT 4.0。然后一个偶然的机会我见到了SQL Server 6.5,估计你们谁也没见过这么老的版本的SQL Server吧,那会儿的SQL Server基本上还没有脱掉Sybase的影子,跟现在的SQL Server简直大相径庭。


至于C、C++、T-SQL、PL/SQL、C#、HTML4/5、javascript、CSS、socket、pthread、linux、SOA、REST、TCP/IP、RTOS...

这些东西全都是出了校门以后才知道的,一点一点地买书自学。
工作了十几年,也自学了十几年,十几年来买的书,摞起来,能摆满整整一面墙,蔚为壮观。

虽然咱不是计算机专业出身的,但既然干了程序员这个职业,就没理由给自己找借口,一个专业的程序员都要会哪些东西,我就必须也会这些东西。否则,怎好意思自称程序员?

越是基础的东西,反而越没有什么理由说“我忘记了”。知道就是知道,不知道就是不知道。
相反,越是浮于表面的东西,就算真的忘记了也没啥不好意思,比如说一个API怎么用,忘记了没关系,查MSDN就对了。

甚至有些应用层面的技术,现学又有什么关系?当年在去微软做.Net开发之前,我只有C++的基础,面试的时候答题我也全是拿C++答的,我也很好奇为啥得到offer以后居然指派我去做一个.Net项目。但是我的经理对我很有信心,给了我一本《C#高级编程》,让我花一周的时间学会它。在那一周里面我还有很多别的东西要学,比如尽快熟悉公司内的环境,包括那些从来没有见过的工具,版本控制、bug提交与问题跟踪、代码审核流程。。。全英文的环境,当年从来没有在外企待过的我,只能硬着头皮赶鸭子上架。

事实证明我们经理是完全正确的,那东西真的可以在一周之内学会,前提是你的基础知识比较扎实。实际上在第四天的时候我已经开始正式提交代码了,而且提交的代码也通过了微软那些大牛们的代码审查(code review),像一股新鲜的血液,流进了微软庞大的代码库,成为了微软的伟大产品的一部分了。

在接下来的几个月内,每天都提交代码,每天都被别人review,有一次花了一个星期时间提交了上千行代码,然后收到了70多个code review的comments,每一条comments都言之有理,我都细心地读它们,然后对代码的问题一一纠正。再到后来,在收到的comments中,批评越来越少,赞许越来越多;再到后来,我也开始在review别人的代码的时候,给别人提意见,然后也收到了别人在邮件里热情洋溢的回复,感谢我指出代码中的错误。

我就是这样走上了.Net开发的道路。自我感觉有点跌跌撞撞,但也乐在其中。总之这不是一个多么难的东西,但想要深钻也需要花费无穷无尽的精力。对于.Net开发,到此我可以自豪地讲,我已经“上道”了。

越是应用层面的知识,越可以现查、现问、现学。
而越是基础层面的知识,你越无法临时抱佛脚,如果基础不牢靠,你可能根本都不知道自己要往哪个方面去努力才能解决当下的问题。这时候你就能真正体会到,基础知识的重要性。

我记得我解决过一些很有趣的问题。

有一次我业余时间做一个自动避障小车,那是我自学单片机后做的第一个作品。后来发现,每次小车在受到撞击后,总是自动向后跑,但我程序里面并没有设置这个逻辑。当时手头也没有示波器、逻辑分析仪这样的东西,只有一个万用表,那时候我还经常用一个土办法来验证某个引脚是高电平还是低电平,就是用发光二极管来验证,呵呵。后来居然分析出原因来了,是电路中某个焊点虚焊,导致受到撞击后单片机收到了一个错误的信号,而这个信号恰好被解析成了一条后退指令。重新焊接后问题解决。你看,这就是我全靠那点有限的基础知识排除的一个硬件故障。

还有一次,就是前几天,其实这种事情遇到的次数还挺多的。我在做一个航空项目,我们有一个设备,远在美国,我不可能在设备旁边调试。而且这个设备运行着一个军方自己写的嵌入式实时操作系统,名字我就不说了。这个操作系统缺乏好的开发环境,也没有gdb这样好用的debugger。而且代码每更改一次,需要上传到服务器上,服务器会自动进行编译,代码量很大,编译一次要5个多小时,然后你才能看到结果。如果你一次代码没有提交对,下次再提交,你至少额外增加了5个小时的时间花费。就是在这种条件下,我分析设备传回来的数据,虽然它完全是乱掉的,但从中也能渐渐分析出一些规律,进而分析出它在一些指针的处理上似乎总在犯某方面的错误,正是这样的错误使它表现出来的行为完全不是我们所期望的。我在PC上纠正它的C语言源代码,PC和那台设备的CPU完全不是同一个体系,虽然我在PC上写程序,但我必须时刻提醒自己它在设备上运行的时候应该是什么样子。然后提交了代码,一次性通过,服务器编译了5个小时后没有爆出编译错误,而且设备的行为也马上恢复了正常。全靠基础知识掌握得牢靠,否则,来来回回改错误是必不可少的。



所以,基础知识掌握得有多扎实,决定了你在技术道路上能够走得多远。