腾讯2018校招WEB前端开发笔试有感

  鹅厂的校招考察的我感觉比较“杂”。
  前端开发感觉我的印象,考察了JS、TCP/IP协议、MVVM、数据库。都是在不定项选择中。没有单选题,无疑增加了难度。还考察了一些Linux操作系统、sizeof函数,数据结构也有一部分题。根结点,JS中考到了跨域。还有一两道数学几何体。竟然还考察了用css和table布局的不同。
  最后有三道编程题,难度都不易。
  今年系统升级了作弊筛查功能,让博主在宿舍考试有点尴尬。
  

JavaScript中的严格模式

var a = 5;
(function() {
    
    
    var a = b = 3;
})();
console.log(a);
console.log(b);

如果是上面的代码,会输出什么?
我想很多人都会知道,输出5和3。因为b前面没有var声明,会被当作全局变量声明。

"use strict";
var a = 5;
(function() {
    
    
    var a = b = 3;
})();
console.log(a);
console.log(b);

那么,如果在严格模式下会怎么办呢?会在var a = b = 3;抛出未捕获的异常。

b is not defined

即全局变量必须显示声明考察

JavaScript单线程

window.setTimeout(function() {
    
    
    console.log(1);
}, 1);
window.setTimeout(function() {
    
    
    console.log(2);
}, 2);
window.setTimeout(function() {
    
    
    console.log(3);
}, 3);
window.requestAnimationFrame(function() {
    
    
    console.log(4);
});

上面代码执行情况可能有哪几种?
一共有四种情况,分别是:

  • 4123
  • 1423
  • 1243
  • 1234

    setTimeout表示的是隔了多少时间后,就将函数添加到事件处理后面,但是并不代表马上就要执行

考察IPV6

考察协议

  • DNS
  • FTP
  • TLS
  • POP3
  • HTTP2

考察JavaScript单线程

var a = 1;
setTimeout(function() {
    
    
    console.log(a);
}, 0);
var date1 = new Date();
while(new Date().getTime() - date1.getTime() <= 10) {
    console.log(a);
}
a = 2;

这道题,也是考察JavaScript的单线程,setTimeout的参数即使是0,表示0毫秒过后,将这个事件添加到队列里去,但是它依然要等待其他JavaScript代码处理结束后,才会执行队列里的代码。因此它的执行结果是:

  • n个1
  • 2

JavaScript题目

var x = 1;
function a() {
    
    
    alert(x);
    var x = 2;
    x++;
    alert(x);
}

function b() {
    
    
    alert(x);
    x++;
    alert(x);
}

if(0 < 100 < 0) {
    a();
} else {
    b();
}

if(0 < 100 < (0 + 4)) {
    a();
} else {
    b();
}

经过测试,发现这道题,考察的是if语句数据类型的转换。它的实际过程是这么回事:

0小于100返回true,true再次被比较时回被转为1。
true 小于 0 返回false,所以第一个if语句将会执行函数b里的代码。
会依次弹出1, 2。
第二个if 0 小于 100会返回true,true会被转为1。
true 小于 4返回true,所以第二个if将会执行函数a里的代码。
会依次弹出undefined, 3。

// 即
1 2 undefined 3

考察nodejs

考察UDP的首部头

UDP首部与伪首部

UDP的首部由8个字节组成。

  • 源端口:2个字节。
  • 目的端口:2个字节。
  • 长度:2个字节。
  • 检验和:2个字节。

考察TCP的首部

TCP首部字段

一个TCP报文由TCP首部和数据组成的。TCP报文首部的前20个字节是固定的,后面有4n个字节是根据需要而增加的, 因此TCP首部的最小长度是20字节。

20个字节由以下部分组成:

  • 源端口:2个字节
  • 目的端口:2个字节
  • 序号:4个字节, 因为TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。
  • 确认号:4个字节,是期望收到下一个报文段的第一个数据字节的序号。
  • 数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。
  • 保留:占6位。
  • 6个状态位:占6位,URG,ACK,PSH,RST,SYN,FIN。
  • 窗口:占2个字节,指的是接受窗口的大小。
  • 检验和:占2个字节。
  • 紧急指针:占2个字节,只有URG=1时才有意义。
  • 选项和填充:一共占4个字节,选项大小可变。
  • 排序算法的时间复杂度,是否是稳定的
    什么是稳定的?稳定其实指的是如果两个数大小一样,当经过排序后,它们的顺序依然没有改变,那么排序就是稳定的。

常见排序算法是否稳定

  • 冒泡排序,n的平方,稳定
  • 插入排序,n的平方,稳定
  • 归并排序,n的log2n,稳定
  • 基数排序,d(r+n), 稳定, r代表关键字的基数,d代表长度,n代表关键字的个数。
  • 快速排序,n的log2n, 不稳定
  • 希尔排序,n的1.3次方,不稳定
  • 选择排序,n的平方,不稳定
  • 堆排序,n的log2n, 不稳定

sizeof(double)是表达式还是函数?

sizeof不是函数,它是编译时处理的,函数只能在运行时求值。

描述:有一棵树,它的度是4。度为4的节点个数是1,度为3的节点个数是2,度为2的节点个数是3,度为1的节点个数是4,问总节点的个数和节点为0的个数是多少。

所谓度就是节点子树的个数,即分支数目,我画出来是21个节点,度为0的个数是11。

网站性能优化的方法有哪些?

参见雅虎军规。

从输入URL到页面加载的过程

参见google。

求任意整数有多少种解法

2 = 1 + 1
3 = 1 + 2
4 = 1+ 3;4 = 2 + 2;

给定有序数组,求出数字出现的次数

可以自己设置一个hashTable

猜你喜欢

转载自blog.csdn.net/Prototype___/article/details/77949939