搜房面试经历

接到搜房面试邀请让我有些猝不及防,估计是在招聘网站看到我简历了吧,说起来搜房也算是我人生的一个老师,来北京后再上面找房被黑中介坑了好多次,终于决定多花一些钱在靠谱房地产公司租房,当时心里就有一种邪恶的赶脚,不过那天正好没有去上班,就答应了,毕竟面试多多少少还是能学到不少东西的。

从地铁出来的时候被眼前的景象震慑住了,举目荒凉,陆续有三条野狗从我身边经过,按照指示到了公司门口,搜房的大楼还是修的很气派的,进门登记后,前台也是人事把我领到了一个小会议室,很诧异会议室只有桌子和椅子,没有白板投影仪神马的,人事妹子看到我简历说的第一句话就让我心里拔凉拔凉的了,“你工作两年,工资就已经xxx了,很不错呀!”,当时我就惊呆了,很不错是嘛。。。。

胡乱聊了几句后终于进入正题,一个技术哥哥进来拿了两份试题,问我要做哪个,我说这一年来都在做前端的东西,我先看看前端的吧,但是技术哥哥拿着.net的试卷说,你先看看这题,随便说说,不用写了。说实话将近一年没有用.net知识了,多少真的有些生疏了。主要就是几个问答题,顺序记不住了

.NET

1. SQL注入

这个我侃侃而谈了一番,因为很简单,大家都会,什么过滤字符啦、什么不拼接SQL语句,使用模板啦、什么数据库权限啦。。。

2. ORM

我们公司用的是linq自己实现的很简单的、称不上是ORM的解决方案或者IBATIS,没有仔细研究过,平时又懒,对NHibernate、Entity Framework总想着要了解,却没有去研究,所以除了一些对linq的简单解释我只说了呵呵。

3. 分布式

这个实在是没有接触过,所以没有答,确实需要回去后看看。

4. 缓存

对浏览器页面缓存倒是了解一些,但是这是.net的题,我只说了一些.net的文件依赖和数据库依赖的缓存,也没有研究过代码,只是调用过接口,所以也没有说出所以然来。

5. xss攻击

这个名词把握震慑住了,不知道是什么,期间技术哥哥问了我一些jsonp跨域的知识,回去后一百度才知道是怎么回事儿,原来有个这么洋气的名字。

6.设计模式

这个就是简单说了说工厂模式、观察者模式、策略模式和单例模式,问我使用场景,拿.net类库举了下例子。

7. asp.net Button控件原理

之前写过几篇相关的博客,正想大说一番呢,刚说出表单提交,面试哥哥就说可以了,做做前端的题吧,看得出挺失望的,回顾一下也是,大部分题要么没听说过,要么表述不出来,要么一知半解。技术哥哥让我浏览一下问我多久能做完,大概20道题左右,只有一个编程题,其它都是写执行结果或者改错,我说半个小时,技术哥哥就出去了。

总体而言前端的题还是比较简单的,但是说是前端,没有一个CSS相关,只有第一题是HTML改错,其它都是JavaScript,出来后只记得一部分了,反正很多都是考察引用传递和闭包知识的。

所谓前端

1. HTML改错

搜房面试经历
<div>
        <ol>
            <form method="get" action="xxx.aspx">
            <li>用户名:<input id="inpupt1" type="text" /></li>
            <li>密码:<input id="inpupt1" type="text" /></li>
            <li><input type="submit" value="登陆"/></li>
            </form>
        </ol>
    </div>
搜房面试经历

说实话我看出来的第一个错是“登陆”,应该是”登录”,大学毕设的时候,导师刻意纠正的,我就在想是不是该指出来。。。

主要错误就是id重复、post表单元素需要name属性在服务器获取,密码的类型应该是password、表单方法应该是post,我不确定form这么奇葩的位置是不是正确,即使放到外面也不会把div提交啊

2. onclick与addEventListener

<div id="test">Click Here</div>
搜房面试经历
var node=document.getElementById('test');
        node.onclick=function(){
            console.log('1');
        }
        node.addEventListener('click',function(){
            console.log('2');
        },false);
        node.onclick=function(){
            console.log('3');
        }
        node.addEventListener('click',function(){
            console.log('4');
        },false);
搜房面试经历

这个就是onclick会被覆盖,addEventListener会依次添加,这样就会输出2,3,4

3. 常识,哪些有错,应该是都没有错

var a= a||null; //null
        var b= c||null; //null
        var c= typeof f; //undefined

这个题看起来简单,实际还是很有意思的,尤其是第二个,如果改为 var b= d || null; ,这样就会报错了。

4. 数组和引用

var a=[0],b=a;
        b[0]=2;
        console.log(a+b); //22

        a=[0], b=a, b=[1];
        console.log(a+b); //01

这个题最有意思了,有几个知识点,首先[0]这样的写法是定义了一个数组,只有一个元素0,然后就是关于引用的知识了,前后两个还是有一定混淆度的,最好玩儿的是全明白了,很容易写出两个数字相加的结果,实际上会调用数组的toString方法,然后拼接字符串,这道题能做对的同学肯定是很细心的。

5. 闭包

搜房面试经历
function test(){
            var a=0;
            var node=document.getElementById('test');
            node.onclick=function(){
                b=0;
                console.log(a++ + ++b);
            }

            for(var i=0;i<10;i++){
                node.onclick();
            }
        }
        test();
搜房面试经历

这个会输出从1到10,由于闭包原因,a的值会一直保留,而b每次都会被重置为0

6. 类似闭包,改错

搜房面试经历
function test(){
            var param=1;
            var node=document.getElementById('test');
            node.onclick=function(){
                console.log(param);
            }
            return node;
        }
搜房面试经历

这个我一看不知道错在哪里,或者说他希望我改成什么样,于是就这样了

搜房面试经历
function test(){
            var param=1;
            var node=document.getElementById('test');
            (function(n){
                n.onclick=function(){
                    console.log(param);
                }
            })(node);
            return node;
        }
搜房面试经历

7. 然后就是window.onload和jQuery的ready区别

老生常谈,因为当时时间充裕,就卖弄的写了一下实现原理

8. setTimeOut和setInterval区别

这个之前写过篇博客setTimeout()和setInterval() 何时被调用执行中说过,除了其本身调用次数区别,主要是时间参数处理时机问题,setTimeOut是n毫秒后执行,setInterval是间隔n毫秒执行一次,无论函数本身调用执行占多少时间,顺别提了提JavaScript单线程导致时间并不精确的问题。

9.为字符串添加一个count方法,统计字符串中’H’出现的次数

这个没有想到比较好的办法,就用数组处理了,不知道大家有没有什么其它办法

String.prototype.count=function(){
            return this.split('H').length-1;
        }

就记得这几个了,最后问了一些现在工作的问题,由于暂时没太想跳槽,没太详细说。之后技术哥哥说我前端比后台技术要好多了,听起来很惭愧的感觉,果真.net答的很让人失望。

总结

1. 这段日子确实疏忽了对.net基本知识原理的学习,很多知识都是一知半解,需要研究原理

2. 对一些公司不使用的热门技术没有足够重视,没有去主动学习

3. 对前端一些知识了解不够深入

相关推荐