一次失败的面试

做任何毫不费力的事情,都是在浪费时间,忘记这是哪本书里看到的了,到了30岁的年纪,越来越有感触,记录失败的面试,顺便祭奠一下被我挥霍掉的这5年。

前提:

公司从事的行业就不透露了,主要从事一些内部项目,如流程管理,原素材管理等。项目很多,但都不是很大,工作压力不是很大,只要多了解业务,思路清晰,很多工作都是轻轻松松的完成,即使偷懒,也被认为是骨干,并做到了pm的职位,还为自己可以号称全栈而沾沾自喜(确实全栈,甚至包括光纤部署,存储网络等都是自己来干)。而富裕的时间就是给互联网贡献流量了。突然,一觉醒来,发现自己已经三十岁了,有一个需要富养的千金,决定不能这样在荒废下去,不能在做这种轻松的小项目。于是开始了求职之路。

求职过程:

到某做在线教育的互联网公司面试工程师的职位。做了一份笔试题后(很多错误),和hr聊了聊,然后,就没有然后了。

面试题内容:

既然决定了,就要总结一下,回家后凭借记忆力把面试题大概的重写了一下,好多题目可能和原题不一致,毕竟是面试,不是参加最强大脑:

1 public,protected,private,internal,protected internal 这些限定符中,哪些可以被类使用,那些可以被方法是用

说实话,第一题就蒙了。这个还真不是很清楚!直接msdn的答案:

访问修饰符

说明

public

公有访问。不受任何限制。

private

私有访问。只限于本类成员访问,子类,实例都不能访问。

protected

保护访问。只限于本类和子类访问,实例不能访问。

internal

内部访问。只限于本项目内访问,其他不能访问。

protected internal

内部保护访问。只限于本项目或是子类访问,其他不能访问

C# 方法默认访问级别: private 

C# 类默认访问级别: internal 

1 派生类的可访问性不能高于其基类型。换句话说,不能有从内部类A 派生的公共类B。如果允许这种情况,将会使A 成为公共类,因为A 的所有受保护的成员或内部成员都可以从派生类访问。

2 成员的可访问性决不能高于其包含类型的可访问性。

3 可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。

 

即这些限定符类和方法均可以使用,但方法的可访问性不能高于其包含类的可访问性。

2 overload和override的区别

白送分的题:

1 override发生在继承中,两个函数的函数特征相同

2 overload的函数名虽然相同,但函数特征不同。

注:函数特征包括函数名,参数类型和参数个数。

3 String和StringBuilder 的区别

白送分题

1 string为System.String类 StringBuilder为System.Text.StringBuilder类

2 string不可变,修改后会创建一个新的string;StringBuilder 为可变的,当对变化比较频繁的时候,StringBuilder效率会高

4 以下程序共发生了几次装箱操作,有什么可以优化的方式

int v = 2;
Console.WriteLine("v={0},v={1},v={2}", v,v,v);
Console.ReadKey();

 

较简单

三次 优化方式为

int v = 2;
Console.WriteLine("v={0},v={0},v={0}", v);
Console.ReadKey();

  

5 程序阅读题

写出下列程序输出结果:

static void Main(string[] args)
{
string test = "hello";
test = test.ToUpper();
test = test.Insert(0, " WORLD");
Console.WriteLine(test);
Console.ReadKey();
}

 

较简单 _WORLDHELLO(_表示空格)

6 程序阅读题

写出下列程序输出结果:

class A
{
    public A()
    {
       OutputText();
    }
    public virtual void OutputText()
    { 
      Console.WriteLine("Hello world");
     }
}
class B:A
{
      int x = 0;
      int y;
      public B()
      { 
          y = 1;
      } 
      public override void OutputText() 
      { 
         Console.WriteLine("x+y={0}", x + y);
      }
}  

  

当时毫不犹豫的就写了 无输出!

实际上 子类会默认调用父类的无参数构造函数!!!

7 写程序题

具体题干忘记了 意思就是写出2+3+…55的值

典型的考递归的题

private static int MyAdd(int x,int y)
{
     int sum=y;
     if (x <= 55)
     {
           Console.Write("+{0}", x);
           sum += x;
           return MyAdd(y, x + y);
      }
     else
      {
           Console.Write("={0}", sum);
           return sum;
       }
}

  

8 写一个单例模式样例

这个题写了一个最简单的:

public sealed class Single
{
        private static Single _instance = null;
        private Single ()
        {
        }
        public static Single Instance
        {
            get { return _instance ?? (_instance = new Singleton()); }
        }
}

  

9数据库题 写出SQL的几种连接方式

较简单

4种 内连接(左右) 外连接(左右)

 

10 数据库题 写一条SQL语句,查询主单表下的name字段是否有重复及重复次数

这个 简单理解为 应该是group by?

select count(name),name from 表1 group by name;

  

11 事物题 什么是事物的ACID属性

平时做的项目 确实很少用到事物,所以 事物题全军覆灭。

1. 原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行

2. 一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。

3. 隔离性(insulation),由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。

4. 持久性(Duration),事务完成之后,它对于系统的影响是永久性的。

 

12 由低到高写出事物的隔离级别

1 读未提交(Read uncommitted): 可以读取其他事务未提交的数据
2 读已提交(Read committed):只能读取其他事务已经提交的数据(有进行修改的)
3 可重复读(Repeatable read):保证使用该隔离级别的事务,在读取数据时的数据保持一致,不会被别的事务修改、删除数据(因为别的事务如果有修改、删除操作会被阻塞)
4 可串行化(Serializable):使用该隔离级别的事务用到的表将全部锁定,其他事务不可以进行添加、修改、删除

13 什么事幻影数据

幻影数据即不可重复读数据,指指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。具体有三种情况:

1 事务T1读取某一数据后,事务T2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。

2 事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神密地消失了。

3 事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 

14 js题:

var obj=(function(){
         var num=2;
         var output=function()
         {
                   var num;
                   alert(num); //1
                   num=2
                   alert(num);//2
         }
         return {output:output};
})();
obj.output(); 

  

 

求两个alert的值

1 undefined

 

2 2

这道题,不知道为啥我鬼使神差的1写了null!

     

15 js题  setTimeout与setinterval区别

setTimeout() : 用于在指定的毫秒数后调用函数或计算表达式;

setInterval() : 按照指定的周期(以毫秒计)来调用函数或计算表达式. 会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭;

摘自js手册

简单说 setTime只执行了一个句柄,而setInterval循环执行。

 

写在后边:

常理来说,应该有16道题吧,但能想到的只有15道了

不管怎么说,这次面试铩羽而归。只能巩固现在,期待未来了

 

posted @ 2015-03-19 19:20  双鱼座的牛  阅读(8489)  评论(94编辑  收藏  举报