【北京之旅】--程序员应聘技巧之笔试



       对于如何招聘还不是我们这些程序员该考虑的事情,但是对于应聘需要我们好好的进行思考,应聘也是需要很多技巧的,就在昨天笔者也进行了一次应聘,经历了应聘的全过程,这里就来谈谈对于应聘的一些感悟,对于一些应聘的问题进行讨论剖析。


一、应聘过程


       对于应聘正如我们所了解的可能会分为很多步骤,其中最主要的分为三步,首先是投递简历,其次是笔试,接下来进行面试,当然如果我们被应聘上了最后的一步就是讨论薪资和户口等问题。
       简历投递技巧就不在详述,网上类似的文章内容会有很多,详细的技巧请上网查阅吧。应聘过程中需要注意的一些问题这里也不再详述,可以去网上下载一本《程序员面试宝典》这本书已经出到第四版了,里面详细说明了有关应聘的很多问题。


二、说说笔试


       笔试的内容来详述下,对于开发人员无论是大公司还是小公司,笔试是必不可少的一项内容,就在昨天笔者面试的公司也进行了笔试,但最后去的时候却忘记了带上纸和笔,不要说我孤陋寡闻,或者是沽名钓誉,稍稍解释下在通知进行面试的时候只是提了有可能进行笔试的内容,结果由于一时高兴忘记了带上笔试工具,在此也告诫大家无论是不是进行笔试,在进行面试的时候一定要带上工具,做好充足的准备。
       谈到了笔试那就来说说笔试之前的准备工作,有开发经验的程序员笔试就会相当的简单,但对于没有开发经验的程序员那笔试无疑是一场硬仗。虽然是硬仗但也是有获胜的机会的,其实很简单那就是充足的准备,接下来就来看看该准备哪些东西。
      在笔试之前充足的准备必不可少,但是需要准备的内容会很多所以需要找些技巧,针对性的进行准备。


      1、针对面试的公司
       此话怎讲,难道公司面试也有敲门?这是当然的,从笔试的内容及难度看,每个公司每年的笔试题的难度是类似的,而且笔试的内容可能也会很相似,如果特别想要进入某一公司的话不妨针对性的练习下那个公司往年的笔试题,把握住方向这样笔试会变的简单。


      2、针对项目
       这里所说的项目可能是和外包有关,也可能它们公司所用的技术是固定的,如:.NET或者Java,某一个项目特别需要人手,这时笔试题往往会和它们项目的技术有关,在准备笔试的时候不妨也考虑下它们的项目需求。拿笔者昨天笔试的公司来说,公司开发使用的是.NET的B/S项目,所以在笔试时很多有关Vs的使用及Asp.NET的内容。


      

         对于笔试的内容无非是技术的相关内容,针对昨天面试的内容进行了总结,上图为技术的大致内容。下面逐个进行说明。


三、IDE


       首先从IDE说起,IDE是程序开发必不可少的工具,所以有关它的使用也是笔试时常考的内容,就在昨天的面试过程中,同样也考到了有关IDE使用的技巧,虽然不是很困难,但也没能拿到满分。
        这部分可能会考到有关的开发工具的快捷键,快捷键是高手必备的素质,作为程序开发人员只要是有经验的开发人员在进行开发时都会用到快捷键,灵活的掌握和使用快捷键能够提高程序开发的效率,真正的高手要脱离鼠标只使用快捷键就能够掌控全局。快捷键的使用需要进行长期的培养,首先是要熟悉常用的快捷键,其次是使用,多多积累,当然最主要的是每次在使用新工具时都要有意识的去查看和使用快捷键。

       另外还有就是调试工具的使用技巧,而且也是笔试的重点,这类题是检验是否是高手的利器。在程序开发过程中调试是必不可少的,即使是高手也免不了对程序进行调试,那么如何使用调试工具快速的找到程序的bug就是高手们需要思考的问题了。想要了解一个开发人员是否是高手只需要问他程序出错时如何进行调试即可,是高手还是菜鸟只要通过这个问题一验便知。通过上面的讨论也可以看出想要在面试的时候进入高手的行列,就必须掌握调试的高级技巧,类似于我们常用的添加断点、逐句、逐段的调试方法都是最低级的,在遇到了多层循环、死循环、几千次甚至几万次循环的时候上面的方法就不适用了。
        还有是在循环过程中,如何在达到指定的条件时循环停止进入调试的状态,这个问题有没有思考过?当遇到执行几千次设置几万次循环的时候,我们不能在使用简单的调试方法了。真正的高手能够在循环中指定调试的进入状态,并能够灵活的运用IntelliTrace。(下篇博客将会着重讨论调试的技巧)

        有关IDE的笔试内容还有更多,这里不再详述,可以在网上查找些有关IDE笔试的题目,针对性的练习。


四、面向对象


        面向对象是现在编程中最主流的编程方法学,所以对面向对象的理解程度也是笔试过程中常会考到的内容。相信只要是程序员都采用过面向对象的思想开发过程程序,那问个问题您对面向对象理解多少?只知道类和对象,这是菜鸟级的水平,高手理解的面向对象远非这些。面向对象是老生常谈,程序员天天进行面向对象编程,有没有反问过自己对面向对象理解到了什么程序?面向对象的三大性质封装、继承、多态有没有深刻思考过,尤其对于多态,是面向对象最复杂的内容,有没有进行思考过?如果没有,那是时候再好好温习下面向对象了,这是基础也是很重要的理论。
       笔者针对昨天面试的内容进行了一些总结,这些内容虽然很基础很简单,但真正考起来您还未必能拿高分。下面的内容是基于C#语言的,笔者进行了实测,其它类型的语言需要自测。
      1、虚函数:使用virtual标示,没有限定的使用条件,但是不能够在接口中出现,因为接口中的方法本身属于抽象方法;虚方法中能够有具体的实现;如果父类中包含虚方法的声明,在子类中可以不重写。
      2、接口:一个类可以实现多个接口,一个接口可以由多个类来实现;接口之间也可以进行继承,但是接口不能继承类;能够声明接口,但不能实例化接口,接口只能用来被实现;
      3、抽象类:能够声明,不能被实例化;类中的方法能够具有具体的实现;抽象类能够继承其它类,也能够继承抽象类,同样能够实现接口。
      4、抽象方法:接口中的方法是抽象方法;抽象方法只能出现在抽象类及接口中,如果出现在抽象类中需要使用abstract标示出某一个方法为抽象方法;抽象方法必须在子类中进行重写;抽象方法没有具体的实现;
      5、重写/重载/覆盖
      6、类之间的关系,依赖、继承、关联、聚合、组合
      面向对象的内容还有很多需要我们复习的地方,不再详述请翻阅其它书籍。


五、数据库


        谈到程序设计就不得不说说数据库了,它是程序设计中至关重要的一部分,数据库设计的好坏旺旺决定了程序设计的难易程度,所以数据库也是笔试必考的内容。
从昨天的笔试内容和面试的问题来看,数据库主要从三个方面来考察。1.表设计,2、查询语句,3、Linq。

   1、表设计

        数据库表的设计至关重要,在笔试的时候可能会涉及到表的主外键的考察,确定表的主键,这里一定要注意陷阱,有经验的开发人员在设计表结构的时候会让主键唯一,而且选择字段最少的候选键,如果一张表的主键包含的字段超过一个那建议将这张表进行拆分,建立关系表。
       如题:有一个关系,员工(员工号,姓名,性别,爱好),员工号能唯一确定一条记录,但是一个员工有多个爱好,请问在设计表时主键应为()
                  A、员工号+爱好    B、姓名    C、员工号

       这道题应该选C,只能是员工号,在建表的时候至少需要创建两张表,因为如果一张表的话数据会冗余。

  2、SQL语句

       SQL语句在程序设计中相当重要,好的SQL语句能够大大提高程序运行效率,很大程度上减少程序代码的编写,SQL语句的优化也是高手的体现。不要以为能写几个连接查询、分组查询、用几个数据库函数就很牛了,SQL还有很多你不知道的内容。另外还有就是函数的使用,使用SQL函数能简化查询语句,所以要多掌握些SQL函数。在笔试的时候可能会问到一些查询问题,如查询一张表中从20行到30行的内容,数据库的行转列问题等等。

   3、Linq

        这个名词不是很新了,很早以前就接触过,当时没有对它进行深入的了解,昨天面试的时候考察了这个问题,那来看看它是什么意思。Linq是Language-Intergate Query,语言集成查询,它是从vs2008后开始有的强大的查询语句,能够在C#和Vb.net上使用,能够对 Sql和XML等进行操作。(有关更多Linq的内容将会在下篇博客中讨论)


六、Asp.net


       Asp.net的页面生命周期是面试.NET的B/S开发的时候经常会问的问题,菜鸟级的开发人员只知道使用Load、DataBinding事件,真正的高手要熟悉整个页面的生命周期。笔者昨天面试的公司同样也问到了这个问题,扪心自问下我们对页面生命周期知道多少?亡羊补牢为时未晚,笔者对页面生命周期的事件进行了一些整理,下面详述下。

PreInit

在启动阶段完成之后、初始化阶段开始之前引发。

注意如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被覆盖。

Init

在所有控件都已初始化且已应用所有外观设置后引发。 各个控件的Init事件在页的Init事件之前发生。使用该事件来读取或初始化控件属性。

InitComplete

在页的初始化阶段结束时引发。使用此事件对要在下一个回发后务必保留的视图状态进行更改。

PreLoad

在页为自身和所有控件加载视图状态之后以及处理Request实例包括的回发数据之后引发。

Load

Page对象对Page对象调用OnLoad方法,然后以递归方式对每个子控件执行相同操作,直到加载完本页和所有控件为止。 各个控件的Load事件在页的Load事件之后发生。

控件事件

使用这些事件来处理特定控件事件,如Button控件的Click事件或TextBox控件的TextChanged事件。

LoadComplete

在事件处理阶段结束时引发。对需要加载页上的所有其他控件的任务使用该事件。

PreRender

Page对象创建呈现页所需的所有控件(包括组合控件的子控件)之后引发。

在呈现阶段开始之前,使用该事件对页或其控件的内容进行最后更改。

PreRenderComplete

在设置了 DataSourceID 属性的每个数据绑定控件调用其 DataBind 方法之后引发。

SaveStateComplete

在为页和所有控件保存视图状态和控件状态之后发生。

Unload

首先针对每个控件引发,继而针对该页引发。

 

    有关更多页面生命周期的内容请翻阅:http://msdn.microsoft.com/zh-cn/library/ms178472.aspx


结语


        笔试部分的内容还有很多,本文主要是针对面试的主要问题进行了一些整理,希望能帮助面试.NET开发的程序员,在笔试时注意上面的一些问题,拿到期望的offer还是相当容易的,最重要的是准备,即使是很有经验的程序员参加笔试也不一定能够拿到高分,相反的经过准备的外行人可能在笔试的时候脱颖而出,所以需要针对性的去准备。


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值