最近一段时间,公司在招兵买马,我呢,也充当了一回面试官的角色,要说明的是,我自己的水平很菜,当,我面试的题目也仅仅限于我们工作中经常考虑的一些问题,至于智力题和算法题,只涉及了最简单的。我们招聘的职位是软件开发工程师,负责软件的设计到开发的全过程,要求熟悉C#,ASP.Net。
交谈
一般而言,面对求职者,我会根据他们的简历问下项目的大致情况,然后问下项目的模块,架构方面的知识。比如说用的是几层架构,各个层是如何交互的。层之间的依赖关系是怎么样的。少不了的,我会加问一句,这样做有什么好处。
而如果项目中用到框架的话,我会问,这个框架产生的背景是什么,为什么项目中要用到这个框架,如果不用框架会存在什么问题,这个框架又解决了哪些方面的问题。
面向对象的方面,我会在程序开发的过程中都用到哪些面向对像的知识,设计模式是什么,它和面向对象是什么关系。如果求职者了解设计模式的话,我会问他都了解什么模式,各是为了解决什么问题而产生的。如果不了解设计模式,我问下什么是抽象类,然后会下什么是接口,接口有什么用,当然,也少不了会问下什么时候用接口,什么时候用抽象类。
面向对象的访问级别也是我时而问到的一个知识点。
如果求职者提供了项目的介绍,那么我会对项目中出现的名词作一个详细的询问,如果其中涉及到算法或者设计思路的部分,我也会让他们讲述一下其中的原理。
作为一个额外的问题,我会要求求职者描述下从浏览器输入URL地址开始到页面完全展示的这个过程,浏览器和web服务器是怎么处理的。
机试
我们的机试题的要求是在开发环境下完成(平台是vs2008),尽量在不查阅网络的情况下完成。机试题千奇百怪,但一般不会太刁钻,主要是考查求职者对突发问题的处理能力,题目的难度也是随着完成的进度逐步递增的。
1.加法程序。
要求:模拟两个数相加的过程,点击按钮时,计算结果。
考查点:异常处理,编程风络,用户体验
深入考查:用户点击按钮时,弹出三次确认框,只有本次确认成功后才执行计算。
2.冒泡排序
要求:生成一定数目(最终用户可以输入数目)的随机数,利用冒泡排序算法,对这些数字作从大到小排序
考察点:冒泡排序算法,随机数生成的方法,代码编程风格,异常处理,用户体验
3.限制登录
要求:输入用户名和密码登录,如果用户名或密码错误,给出错误提示,如果连续错误3次(5分钟内),则锁定用户,直到30分钟后才可以再次登录。30分钟内,用户重开窗口或者在其它机器上登录均无效。
考查点:数据库设计,理解需求的能力,业务模型构建的能力。
4.倒计时程序
要求:利用系统时钟,计算出当前时间居指定时间的倒计时长,倒计时格式以“时:分:秒”形式显示。要求每秒刷新一次。
考查点:javascript用法,倒计时时间算法,对常见问题的建模。
5.网页构建
要求:给出一个网页效果图(一般为400*300大小),要求将其布局出来
考查点:HTML,DIV,CSS,一定的空间分析能力
深入考查:只能用DIV+CSS布局,不用Table布局
6.访问人数
要求:不用数据库,记录网站的访问人数。每次有新的用户时(新打开窗口或者在另一台机器上登录),访问人数总数加1。总访问数不随着关机和重新启动IIS而消失。
考查点:如何处理新的Session,如果处理Application变量,如何将数据保存到文件中。
深入考查:如何处理系统突然断电的情况。
应届生的问题
如果求职者是应届生,那么关于工作经验的问题就可以不问,一般而言会问一些课本上的问题,基本上会捡各门课的核心知识点问。
· 谈谈什么是程序,你如何理解程序的
· 指针是什么东西,什么是参数的引用传递,什么是值传递,各用在什么场合
· 什么是虚函数,什么是抽象函数,什么是构造函数。C#中的析构函数用在什么场合
· 什么是堆,什么是栈
· 简单讲下你了解的数据结构
· 什么是算法的时间复杂度,什么是空间复杂度,什么叫以空间换时间,能不能举一个例子
· 什么是线程,什么是进程
· 死锁是怎么回事,如何避免
· 缓存是什么,用在什么场合,一般而言,什么样的东西值得缓存
· 说说数据库中的三个范式,说说什么是左连接,什么是交叉连接
· 软件工程中的软件开发模型都有什么,简要说说你了解的软件开发模型
· 平时都看什么方面的书
基本上也就这么多题了吧,在工作中都会遇到的一些东西,其实我发现,用.net久了,会给人一种而懒惰的感觉,如果工作中只会拖拖拉拉控件,我觉得,至少,还不是一个真正的开发人员。因为拉控件而不思考,在遇到一些性能或者设计上的问题的时候,就会很难办。
当然,最好的提高方式还是多看看别人的代码,多关心下技术上的最新动态,同时,也要把自己的基础打得牢固一些。
——冯辉
原贴地址:http://www.ifenghui.com.cn/Article/134.aspx
扩展阅读: