• 也谈谈技术面试


    今天看到首页有几篇面试相关的文章。面试是我最近想的很多的问题,有所思,有所得,从小部门面试的角度谈谈所思所得吧。

    面试就是在短时间内对应聘者的经验、能力、潜力进行评估。我一般比较关注这些方面:(1)品格;(2)经验;(3)解决问题的能力;(4)技术特长;(5)潜力。面试时间一般为1小时,笔试+机试+面谈。

    下面结合偶常用的一份C++/C#程序员面试题谈谈体会。

    面试题一般分为34部分。第一部分是自我评估,第二部分是上机编程,第三部分是领域相关的东东,第四部分是考查能力与潜力的选做题。

    1)自我评估

    自我评估一般有三道题:

    a)请估计你的编码量,在合适的选项上画上√。(机器生成的代码不算)

    b)你使用过什么源代码管理工具?(只使用过一、两次的不算,可多选)

    c)你习惯使用什么样的开发工具/IDE?(可多选)

    主要考查个人经验和品质。如果这一部分胡填瞎吹,在后面会露馅。这里面还能看出一个人解决问题的能力。有一个哥们折腾了半天,问:这个√我在“插入”(word)怎么找不到啊!(偶想:不会copy嘛!)。这种哥们,显然解决问题的能力不强,可以直接拒之。可能会冤枉他,但冤枉的概率很低。

    一般来说,偶觉得需要评估拟采用语言及其相关语言的编码量,比如招聘c#程序员,偶一般评估其java, c#, sql, vb.net的编码量。有时候这哥们不会c#javasql很熟其实也不错。

    IDE和源代码管理工具评估大概能评价一个人的技术风格。比如,用dreamweaver的侧重于页面,用visual studio的侧重于后台,linux下用vi, emacs, cvs的具有一定的黑客特质,用kdevelop, eclipse/cdt的侧重于实用主义。

    2)机试

    一般来说,就一个hello world题。主要考察基本的OO设计及编码风格。下面是原题:

    C#版:

    a)写一个类Message,该类具备以下成员:

    ·一个名为message,储存消息文本;

    ·一个方法Show(),打印消息文本;

    ·一个构造函数,根据传递的字符串,初始化消息文本。

    ·其它你认为需要的东西

    b)调用Message的实例,打印“hello world”。。

    C++版:

    a)写一个C++Message,该类具备以下成员:

    ·一个名为message,类型为string(或char*)的私有变量,储存消息文本;

    ·一个方法show(),打印消息文本;

    ·一个构造函数,根据传递的字符串,初始化消息文本。

    b)写一个程序,通过调用Message的实例,打印“hello world”。编写make文件;make;运行程序。

    大家写出来的结果真是五花八门,精彩之极。能在1小时内写出实现功能的C++应聘者不到50%C#的高一些。在10分钟内写出,并且写的让人看的很舒服的,大概只有20%,没有一年的编码经验是写不出很漂亮的代码的。

    以前常用一个较难的题:界面上有一条线段,鼠标在线段的附近点击,写一个算法,判断是否会选中线段。发现效果不好,一般人在一小时内搞不定。

    3)领域相关

    这个和应聘的职位相关。如果招聘网络程序员,偶会让他讲讲几种IO的区别,抓几个包分析分析。如果招聘Asp.Net Web程序员,偶会让他讲讲DataTable, DataSet, DataAdapter的角色与功能。如果他说不会,用NHibernate什么的,那就让他谈谈这方面的体会。这种题目相对开放。主要考查他有没有相关领域的开发经验以及经验的深浅。到这里,不出大差错的话,差不多就可以录用了。当然,如果应聘者较多,就需要比较选择题的成绩了。

    4)选做题

    选做题是非常开放的题目。基本上分模式、算法、库的考查。

    C#版的如下:

    (a) 谈谈你对facade模式的理解与心得

    (b) 谈谈你对.net framework的理解与使用心得

    (c) 想产生一个数列:T(n) = T(n-1),n,T(n-1)T(0) = 1

    比如T(3)1,2,1,3,1,2,1

    T(4)1,2,1,3,1,2,1,4,1,2,1,3,1,2,1

    不用递归有什么效率高的算法吗?

    C++版的如下:

    (a) 谈谈你对facade模式的理解与心得

    (b) 谈谈你对C++ 程序内存管理的理解与心得

    (c) 谈谈你对C++ 标准库的理解与使用心得

    (d) 想产生一个数列:T(n) = T(n-1),n,T(n-1)T(0) = 1

    比如T(3)1,2,1,3,1,2,1

    T(4)1,2,1,3,1,2,1,4,1,2,1,3,1,2,1

    这些问题很开放。有些人上来能谈的有条有理,这个人大概在这些方面进行过思考过。如果一上来不知道怎么谈,可以诱导他,慢慢的谈出他在这方面的经验、心得和体会。比如谈.net framework,可以问问常用的类,谈谈framework的结构,你觉得什么地方好用,什么地方不好用,怎么选择、试用、使用、扩展第三方库?

    对于“精通”。一般来说,在简历中写精通的人90%都是吹牛,直接拒掉冤枉的概率只有10%。就算一个人是真正的精通,那也不是企业最需要的人。企业最需要的是能解决问题,有思路的技术人员,其次才是精通某项技术的技术人员。《.NET方向高级开发人员面试时应该事先考虑的问题》中的题目,一半偶不会用来面试人,一些可能放在选做题里面,一些可能放在领域相关题里面(假设我要招聘这方面的开发人员),一些是用来考察一个人的品质是否诚实,权重不会很大。当然,偶招聘的一般是一般开发人员,不是高级开发人员。:P 不过,对于高级开发人员,偶一般也不会面试这些,偏架构的一般会从《企业应用架构模式》,《without ejb》中选题,还有就是开发过程。偏技术的可以给他一个问题让他解决,或者给他一段IL汇编代码,让他看,或者在可上网的条件下问他一个现实中可能出现的非常刁的问题。


    面试(技术面试)别人是一个很恼人的问题。不知大家有什么心得体会?
    版权所有,欢迎转载
  • 相关阅读:
    libevent中的基本数据结构---queue.h
    TCP 连接关闭及TIME_WAIT探究
    网络程序中常用的三种心跳机制----服务器端
    TCP程序中发送和接收数据
    如何编写一个稳定的网络程序(TCP)
    Linux 编程--三种常用的定时器
    Libevent 事件循环(2)---事件被加入激活队列
    单机千万并发连接实战(修订版)
    千万并发连接实战
    kqueue例子
  • 原文地址:https://www.cnblogs.com/xiaotie/p/364831.html
Copyright © 2020-2023  润新知