奔三路 - 你30岁前的学习路!

奔三路学习网

当前位置: 主页 > 前端面试通 > 笔经面经 >

记腾讯的笔试面试经历

时间:2018-01-13 11:48来源:未知 作者:admin
当自己接到腾讯的面试的时候,心情相当的激动,然后就抱着希望去参加了这次面试。一到腾讯大厦,那是一个高大上呀,内心的激动,仿佛自己是腾讯人了一样,哈哈,首先一上去就

当自己接到腾讯的面试的时候,心情相当的激动,然后就抱着希望去参加了这次面试。一到腾讯大厦,那是一个高大上呀,内心的激动,仿佛自己是腾讯人了一样,哈哈,首先一上去就开始50分钟的笔试题,大多数为js的考察。

( ps:来面试的人还真多wow~ ⊙o⊙ )

JS考察:

1、基本数据类型:undefined、null、String、Number、boolean、array、object。

2、有以下两个函数,定义一个对象使其拥有这两个函数属性。

function mobile(){
        return  'mobile';
    }
    function phone(){
        return 'phone';
    }
    var a = {};
    a.mobile = mobile();
    a.phone = phone();
    console.log(a);

3、(考察了对象变量和堆内存)

 var a = {n:10,m:20};
 var b = a;
 b.n = 30;
 console.log(a.n);
 console.log(b);

输出的结果是什么?

看了这个图就很明了了,变量a和变量b在堆内存空间中所指向的地址指针是相同的,所以当b改变时a也会改变。

 

4、(考察闭包)

var x = 20;
    var a = {
        x : 15,
        fn : function(){
            var x = 30;
            return function(){
                return this.x;
            };
        }
    };
    console.log(a.fn());
    console.log((a.fn())());
    console.log(a.fn()());
    console.log(a.fn()() == (a.fn())());
    console.log(a.fn().call(this));
    console.log(a.fn().call(a));

( 还有很多种情况的输出,当时我看到我就懵逼了o(≧口≦)o )
先说一下输出的答案:

  1. function(){return this.x;}
  2. 203. 20
  3. true
  4. 20
  5. 15

这道题中的this都是指向windows,所以this.x的值都为20,第1、2、3、4种情况都很好理解,到第五第六种考察了call这个函数,call的用途:
// 1. 替换函数运行环境中的this
// 2. 传递参数
// 3. 运行函数
所以第六种是把this指向了a对象,所以输出的是a.x就为15。


5、( 数组去重复项,以下是我做的 )

var arr = ['a','g','q','d','a','e','q'];
    Array.prototype.unique = function(){
        for(var i = 0; i < this.length; i++){
            for(var j = i+1; j < this.length; j++){
                if(this[i] == this[j]){
                    this.splice(j,1);
                }
            }
        }
        return this;
    };
    console.log(arr.unique());

6、编写一个函数fn(Number n),将数字转为大写输出,如输入123,输出一百二十三。

function fn(n){
        if(!/^([1-9]\d*)/.test(n)){
            return '非法数据';
        }
        var unit = '千百十亿千百十万千百十个';
        if(n.length > unit.length){
            return '数据过长';
        }
        var newStr = '';
        var nlength = n.length;
        unit = unit.substr(unit.length - nlength);
        for(var i = 0; i < nlength; i++){
            newStr += '零一二三四五六七八九'.charAt(n[i]) + unit.charAt(i);
        }
        newStr = newStr.substr(0,newStr.length-1);
        newStr = newStr.replace(/零(千|百|十)/g,'零').replace(/(零)+/g,'零').replace(/零(亿|万)/g,'$1');
        return newStr;
    }
    console.log(fn('205402002103'));

这题考察了正则表达式还有数组的操作。

CSS:

1. 考察了盒子模型
2. 内联元素、块元素
3. css3的贝塞尔曲线
4. 弹性盒子flex box

综合考察:

( 因为自己不怎么会,时间紧迫就不怎么记得了 )
1. js跨域问题
2. 。。。

算法考察:

1. 有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?

首先分为6组跑一次,6次
A1 A2 A3 A4 A5 A6 
B1 B2 B3 B4 B5 B6 
......... 
每组的第一都跑一次, 一共为7次,取前三名,暂定为(A1 B1 C1),此时第一名已经定了为A1

那么其他三个组D组 E组 F组肯定直接被淘汰,因为他们的第一名都跑不进前三,所以不用考虑改组的其他赛车 

接着ABC组缩小范围
A组 A2 A3 参加比赛,因为只有A1作为参照物,而A1是冠军 所有它俩都机会,A1>A2>A3 
B组 B1 B2 参加比赛,B3跑输 B1 B2 ,B1跑输A1,因此B2之后的拿不到前三,A1>B1>B2 
C组 C1 参加比赛,同理,A1>B1>C1 

最后 A2 A3 B1 B2 C1 可以决出前三 ,总共为8次

2. 一面墙,单独工作时,A花18小时砌好,B花24小时,C花30小时,现A, B, C的顺序轮流砌,每人工作1小时换班,完工时,B总共干了多少小时?()
A. 9小时
B. 8小时
C. 7小时
D. 6小时48分
 
唉,自己准备不够充分,好多题目都不怎么会答,就这样和腾讯擦肩而过了,希望有机会进面试的同学们吸取我的教训,好好准备。其实进腾讯也不是梦,加油! (责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
发布者资料
小邱 查看详细资料 发送留言 加为好友 用户等级:注册会员 注册时间:2017-11-26 17:11 最后登录:2018-04-22 10:04
栏目列表
推荐内容

关注奔三路小程序,方便你我他