当自己接到腾讯的面试的时候, 心情相当的激动, 然后就抱着希望去参加了这次面试
一到腾讯大厦, 那是一个高大上呀, 内心的激动, 仿佛自己是腾讯人了一样, 哈哈 (~ o ~)Y 首先一上去 (ps: 来面试的人还真多 wow~ o), 就开始 50 分钟的笔试题大多数为 js 的考察 (还有点印象的类似题目):
JS 考察:
1 基本数据类型: undefinednullStringNumberboolean
2 有以下两个函数, 定义一个对象使其拥有这两个函数属性
javascript 代码
- function mobile(){
- return 'mobile';
- }
- function phone(){
- return 'phone';
- }
- var a = {};
- a.mobile = mobile();
- a.phone = phone();
- console.log(a);
- 3(考察了对象变量和堆内存)
javascript 代码
- var a = {n:10,m:20};
- var b = a;
- b.n = 30;
- console.log(a.n);
- console.log(b);
输出的结果是什么?
看了这个图就很明了了, 变量 a 和变量 b 在堆内存空间中所指向的地址指针是相同的, 所以当 b 改变时 a 也会改变
4(考察闭包)
javascript 代码
- 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)
先说一下输出的答案:
- )function(){return this.x;}
- )20
- )20
- )true
- )20
- )15
这道题中的 this 都是指向 windows, 所以 this.x 的值都为 20, 第 1234 种情况都很好理解, 到第五第六种考察了 call 这个函数, call 的用途:
- // 1. 替换函数运行环境中的 this
- // 2. 传递参数
- // 3. 运行函数
所以第六种是把 this 指向了 a 对象, 所以输出的是 a.x 就为 15
5(数组去重复项, 以下是我做的)
javascript 代码
- 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, 输出一百二十三
javascript 代码
- 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 内联元素块元素
3css3 的贝塞尔曲线 (张鑫旭大神的解说 http://www.zhangxinxu.com/wordpress/2013/08/贝塞尔曲线-cubic-bezier-css3动画-svg-canvas/)
4 弹性盒子 flexbox
综合考察:(因为自己不怎么会, 时间紧迫就不怎么记得了)
1js 跨域问题
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 分
唉, 自己准备不够充分, 好多题目都不怎么会答, 就这样和腾讯擦肩而过了, 希望有机会进面试的同学们吸取我的教训, 好好准备其实进腾讯也不是梦, 加油!
来源: http://www.qdfuns.com/article/27377/635f072c77d0e5c4c712fe67bca93e0d.html