去哪儿网面试总结

前天参加了一下去哪儿校园招聘的面试,光荣的在第一面就挂了,虽然面试我的是重大计算机的已毕业学生。本来吧,其实都没想过通过笔试环节的,但是面试也还是挂在了笔试的那一堆题目中,这两天就好好研究了一下,稍作总结于此。

一、 题目中给了一个表格,里边是父母双亲的血型以及对应的子女可能出现的血型,要求用JavaScript实现功能:根据父母血型判断子女可能出现的血型;根据父母以及子女的血型判断子女是否为亲生。

这个类型最基本的写法就是if-else,我也知道当if-else多了的时候可以使用switch-case来替代,但是当case多了的时候我就不知道使用哈希表来解决了。这应该是面试挂掉的一个挂点吧,因为面试官提醒说用哈希表来解决一下,可是,我的确不知道,也当场实现不了。下面附上这两天的学习结果吧,使用JavaScript实现针对此问题的哈希表:

function HashTable(){
    this.table = new Array(137);
    this.simpleHash = simpleHash;
    this.showDistro = showDistro;
    this.put = put;
    this.get = get;
}
function put(parentType,childPossible,childImpossible){
    var pos = this.simpleHash(parentType);
    this.table[pos] = {};
    this.table[pos]['childPossible'] = childPossible;
    this.table[pos]['childImpossible'] = childImpossible;
}
function get(parentType,childType){
    if(childType === undefined){
        return this.table[this.simpleHash(parentType)]['childPossible'];
    }else{
        var index = this.table[this.simpleHash(parentType)]['childPossible'].indexOf(childType);
        if(index == -1){
            return '您的孩子可能不是亲生的';
        }else{
            return '您的孩子是亲生的';
        }
    }
}
function simpleHash(parentType){
    var total = 0;
    for(var i=0; i<parentType.length; ++i){
        total += parentType.charCodeAt(i);
    }
    return total % this.table.length;
}
function showDistro(){
    var n=0;
    for(var i=0; i < this.table.length; ++i){
        if(this.table[i] != undefined){
            console.log(i + ': ' + this.table[i]['childPossible'] + ' + ' + this.table[i]['childImpossible']);
        }
    }
}
var hTable = new HashTable();
hTable.put('O,O','O','A,B,AB');
hTable.put('A,O','A,O','B,AB');
hTable.put('A,A','A,O','B,AB');
hTable.put('A,B','A,B,AB,O','————');
hTable.put('A,AB','A,B,AB','O');
hTable.put('B,O','A,O','A,AB');
hTable.put('B,B','B,O','A,AB');
hTable.put('B,AB','A,B,AB','O');
hTable.put('AB,O','A,B','O,AB');
hTable.put('AB,AB','A,B,AB','O');
hTable.showDistro();

二、占位符替换问题,这个倒是没什么问题,实现的方式可以有很多,贴一个结果mark一下,和原题稍有差别,原题容易被误解为对象key-value匹配:

var str = 'af%sffio%sbfas%sfds%sjj%sf';
var arr = ['中国','美国','俄罗斯','英国','法国','德国','瑞典'];

function placeholder(str,arr){
    var strLen = str.match(/%s/g).length,
        arrLen = arr.length;
    if(strLen < arrLen){
        var tempArr1 = [], tempArr2 = [];
        for(var i=strLen-1; i<arrLen;i++){
            tempArr1.push(arr[i]);
        }
        for(var j=0;j<strLen-1;j++){
            tempArr2.push(arr[j]);
        }
        tempArr2.push(tempArr1);
        arr = tempArr2;
    }else if(strLen > arrLen){
        for(var k=arrLen; k<strLen; k++){
            arr.push('null');
        }
    }

    var strArr = str.split('%s');
    var result = [];
    for(var h=0;h<arr.length;h++){
        result.push(strArr[h]);
        result.push(arr[h]);
    }
    result.push(strArr[strArr.length-1]);

    console.log(result.join(''));

}
placeholder(str,arr);

三、操作系统的一些东西懂吗?至于我的回答肯定是:xxx,这也是一个挂点吧。

四、聊点关于前端其他的吧,讲一下盒模型吧,“blablabla……”;再说一下事件吧,“blablabla……”;这些你都是自己体会到的还是看书记下来的(从眼神中感觉他是觉得我在背课本),“blablabla……”;谈谈你对前端工程化的理解吧,“blablabla……”,这里应该也是一个挂点。。

五、其余的就都是穿插了一些其他问题,比如自动化专业都学哪些课程啊,为什么从重庆来到西安找工作了呀,都面试过哪几家其他单位了呀,它的笔试题目和我们的有什么区别呀。

六、你有什么需要问我的,“blablabla……”,有的人实践强,但是没有理论基础,有的人基础厉害,但是没有过实践,建议你回去好好学学数据结构等计算机基础课程。

结果:挂掉。

附录:这两天学习过程中使用JavaScript实现的采用循环链表解决约瑟夫问题(代码组织待优化):

function Node(element,index){
    this.index = index;
    this.element = element;
    this.next = null;
}
function List(element,index){
    this.head = new Node(element,index);
    this.head.next = this.head;
    this.insert = insert;
    this.find = find;
    this.remove = remove;
    this.findPrevious = findPrevious;
    this.display = display;
}
function find(element){
    var currNode = this.head;
    while(currNode.element != element){
        currNode = currNode.next;
    }
    return currNode;
}
function insert(newelement,element,index){
    var newNode = new Node(newelement,index);
    var currNode = this.find(element);
    newNode.next = currNode.next;
    currNode.next = newNode;
}
function findPrevious(element){
    var currNode = this.head;
    while(currNode.next.element != element){
        currNode = currNode.next;
    }
    return currNode;
}
function remove(element){
    var prevNode = this.findPrevious(element);
    prevNode.next = prevNode.next.next;
}
function display(){
    var currNode = this.head;
    while((currNode.next != this.head) && (currNode.next != currNode)){
        console.log(currNode.element + '\n');
        currNode = currNode.next;
    }
    console.log(currNode.element);
}
var nameList = ['A','B','C','D','E','F','G','H','I','J'];
var loopList = new List(nameList[0],1);
for(var i=1; i<nameList.length; i++){
    loopList.insert(nameList[i],nameList[i-1],i+1);
}
var currNode = loopList.head;
for(var j=1;j<4;j++){
    currNode = currNode.next;
    if(j == 3){
        if(currNode.next != currNode){
            loopList.remove(currNode.element);
            j = -1;
        }else{
            console.log(currNode.element);
            break;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值