Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ALL] 2016年校招面试回忆录 #20

Open
zgfang1993 opened this issue Mar 24, 2017 · 0 comments
Open

[ALL] 2016年校招面试回忆录 #20

zgfang1993 opened this issue Mar 24, 2017 · 0 comments

Comments

@zgfang1993
Copy link
Owner

zgfang1993 commented Mar 24, 2017

距离去年找毕业已经有一年多了,记得当时把喜欢的公司全部都罗列出来,一个个疯狂投简历。一听喜欢的公司在哪开宣讲会了,就屁颠屁颠地跑过去,上海杭州哪都跑,远的就坐火车过去,当时的生活还是挺有意思的。
当时把每次的笔试面试都记了下来,校招对社招的参考意义可能不大,但也是个纪念。校招可能偏重理论知识,学习能力。社招更偏重于项目经验,解决问题的能力。

蜻蜓FM

算是中型创业公司吧,记得当时过去笔试,压根就没有前端的题,直接给你java的题目做。
工资比较高,要求也比较高。

1. 700个节点的完全二叉树有几个叶节点? 350

数据结构的一道题,算是easy的吧。
解答:
一个具有n个节点的完全二叉树,其叶子节点的个数: n/2 向上取整,或者(n+1)/2 向下取整。
扩展:
image

2.已知先根序列,中根序列,求后根序列

3.多线程中栈与堆是公有的还是私有的? 栈私有,堆公有

解答:
在多线程环境下,每个线程拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源。其他的资源(比如堆、地址空间、全局变量)是由同一个进程内的多个线程共享。
与线程“绑定”的是栈,用于存储自动变量。每一个线程建立的时候,都会新建一个默认栈与之配合。堆则是通常与进程相关,用于存储全局性的变量,进程建立的时候,会建立默认堆。于是,每一个线程都有自己的栈,然后访问共同的堆。

4.排序适用情况

image

5.进程 线程

6.编程

大华

1.输出什么

b();    //undefined
var x= 'a';
function b(){
alert(x);
var x= 'b';
}

2.判断

null === undefined;  //false
null == undefined;  //true
null instanceof Object; //false
undefined  instanceof Object; //false

解答:
null和undefined是原始类型,所以都不是Object的实例

typeof null; //"object"
typeof undefined; //"undefined"

null: 一般表示没有赋值的Object ,空对象指针
undefined: 一般表示没有赋值的原始类型
实际上,undefined值派生自null值,null == undefined; //true

3.parseInt可能的返回值

A.“”
B.undefined
C.NaN
D.null

4.判断

"a" !=="a"; //false
[] !== [];   //true

5.优化页面加载速度

  1. 合并Js文件和CSS文件(减少http请求)
  2. CSS sprites(图片精灵 雪碧图 减少http请求)
  3. 压缩文本和图片
  4. 图片格式优化
  5. 精简代码,减少冗余,不使用内联CSS
  6. 游览器缓存(浏览器缓存可以减少HTTP请求,从而反过来提高网站的加载速度。)
  7. 内容分发网络(CDN)(位于不同地理位置的服务器组成的网络)
  8. 适用ajax技术(局部刷新,不需要重新加载整个页面)
  9. 置于顶部的样式表和底部的脚本
  10. 延迟解析脚本

6.行内元素和块级元素的区别

行内元素:a b br em img i input label span strong

  1. 行内元素在同一行,是水平方向的
  2. 设置width height 无效,随标签里的内容而变化,可设置line-height
  3. Margin,padding 只有左右有效,上下无效

块级元素: div h1-h6 hr ul ol table tr

  1. 块级元素各占一行。是垂直方向的!
  2. 块级元素可以用样式控制其width、height的值。

7.语义化标签。

  1. 结构清晰,样式丢失的时候也能看清楚页面结构
  2. 有利于开发人员的开发和维护(因为结构清晰,易于阅读)
  3. 搜索引擎很好的利用了这些语义化标签抓取内容,SEO优化
  4. H5新增加的语义化标签:article nav aside section header footer hgroup
  5. 有利于移动端设备的阅读

美团面试(10.16)

美团问的更偏向于原生JavaScript和算法一些,会直接让你手写代码,手写ajax原生代码,反正当时愣住了。

1.自我介绍

2.Ajax原生代码

3.Jason

4.[2,3,4,[55,77,[6,43,2]],33]→[2, 3, 4, 55, 77, 6, 43, 2, 33] 递归方法

//方法一
var arr = [2,3,4,[55,77,[6,43,2]],33];
function handleArr(arr){
    var res = [];

    function pushNum(arr) {
        arr.filter(function (val) {
            if (typeof val !== "object") {
                res.push(val);
            } else {
                pushNum(val);
            }
        });
    };

    pushNum(arr);
    return res;
}
handleArr(arr);
//方法二
var arr = [2,3,4,[55,77,[6,43,2]],33];
function handleArr(arr) {
    var res = [];
    function pushNum(arr) {
        for(var i=0;i<arr.length;i++){
            if(typeof arr[i] !== "object"){
                res.push(arr[i]);
            }else{
                pushNum(arr[i]);
            }
        }
    }
    pushNum(arr);
    return res;
}

5.Dom操作,添加节点,输出节点内容

6.排序算法

7.二叉树

8.This指向问题

var name = "Bob";
var nameObj = {
    name : "Tom",
    showName : function () {
        console.log(this.name);
    }
};
nameObj.showName(); //"Tom"
var name = "Bob";
var nameObj = {
    name : "Tom",
    showName : function () {
        console.log(this.name);
    },
    waitShowName : function () {
        setTimeout(this.showName,1000);
    }
};
nameObj.waitShowName(); //"Bob"
//改成匿名函数
var name = "Bob";  
 var nameObj ={  
     name : "Tom",  
     showName : function(){  
         alert(this.name);  
     },  
     waitShowName : function(){  
         !function(__callback){
            __callback();
        }(this.showName);  
     }  
 };  
 nameObj.waitShowName();  //“Bob”

setTimeout可以看做是一个延迟执行的:

  !function(__callback){
            __callback();
        }(this.showName);  

如何改为输出Tom

var name = "Bob";  
var nameObj ={  
    name : "Tom",  
    showName : function(){  
        alert(this.name);  
    },  
    waitShowName : function(){
        var that = this; //使this值得到维持
        setTimeout(function(){
            that.showName();  //避免了setTimeout中的匿名函数运行时,匿名函数中的this指向window
        }, 1000);
    }
}; 
 
 nameObj.waitShowName();  //Tom

扩展1:

var name = "window";
var Bob = {
    name: "Bob",
    showName: function(){
        alert(this.name);
    }
};
var Tom = {
    name: "Tom",
    showName: function(){
        var fun = Bob.showName;
        fun();
    }
};
Tom.showName();  //window

等价于

var name = "window";
var Tom = {
    name: "Tom",
    showName: function(){
        var fun = function(){
            alert(this.name);   //this值没有得到维持
        }
        fun();
    }
};

Tom.showName();  //window

扩展2:

var name = "Bob";  
var nameObj ={  
    name : "Tom",  
    showName : function(){  
        alert(this.name);  
    },  
    waitShowName : function(){
        var that = this;
        setTimeout(that.showName(), 1000);
    }
}; 

nameObj.waitShowName(); // "Tom"

扩展3:

var Bob = {
    name: "Bob",
    showName: function(){
        alert(this.name);
    }
};

var Tom = {
    name: "Tom",
    showName: Bob.showName
}

Tom.showName();  //Tom

注意:

  • setTimeout
  • setInterval
  • 匿名函数

在浏览器中setTimeout、setInterval和匿名函数执行时的当前对象是全局对象window。

9.Js中click绑定另一种写法

同花顺

1.移动开发或者PC开发中遇到过哪些兼容问题,都是怎么解决的,举三个案例。

2.会弹出什么?

function a(x,y,z) {
    x = 4;
    y = 5;
    z = 6;
    alert(arguments[2]);//6
}
a(1,2,3);

3.TCP/IP建立连接的过程(3-way shake)

4.不使用中间变量交换两个数的值,求多种方法。

5.第一个人10岁,第二个人比第一个人大2岁,依次递推,递归方式算出第8个人几岁。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant