今日头条前端实习生面试三面总结

今日头条前端实习生面试三面总结

一面

一面给了一份题做

简述JS的继承与原型链

每个引用类型都有proto属性,指向了他的构造函数的prototype属性

1
2
var a=[1,2,3];
a._proto_=Array.prototype;

当访问一个对象的某个属性时,如果没找到则会到其proto上寻找,如果没有,就在构造函数的prototy的proto上寻找,这种层级上查的链式结构叫做原型链

放一张远古原型链图

实现一下JS的继承

JS的继承就是在原型链的基础上
继承只需改变prototype,指向父类,但是需要修改constructor指向正确的内容。
childclass.prototype=new FatherClass();
childclass.prototype.constructor=ChildClass;

写一个数组去重

我想的是一个比较笨的方法,用一个Object来实现唯一key,从而去重

1
2
3
4
5
6
7
8
9
10
11
12
13
function uniq(array){
var temp = {}
for(var i=0;i<array.length;i++)
{
temp[array[i]]=array[i];
}
var result=[];
for(var i in temp)
{
result.push(temp[i]);
}
return result;
}

CSS元素垂直居中

父元素不定宽高,如何实现子元素的垂直居中

我想到的是

1
2
3
4
.box{
display:flex;
justify-content:center;
}

然后面试官问如果不用flex布局如何实现

我只想到了 transform: translateY(-50%); 这种

然后面试官问了如果用Flex的话会有一个rotation属性,如果使用了会如何影响

这个属性之前也没了解过,所以就按照转向随便编了编

进程间的通信方式,各自有什么应用场景

反正当时是没答上来,现在整理一波答案

常见的通信方式有管道、消息队列、共享存储、信号量、套接字、信号

一、管道(Pipe):

管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。

1、匿名管道:

它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。

它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。

在内存中申请一块固定大小的缓冲区用于交换数据,它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

单个进程中的管道几乎没有任何用处。所以,通常调用 pipe 的进程接着调用 fork,这样就创建了父进程与子进程之间的 IPC 通道。

2、命名管道

命名管道与匿名管道的区别是命名管道可以用于没有血缘的进程间通信

二、消息队列(Message Queue)

在内核中创建一队列,队列中每个元素是一个数据报,不同的进程可以通过句柄去访问这个队列。

消息队列提供了⼀个从⼀个进程向另外⼀个进程发送⼀块数据的⽅法。

三、信号量(Semaphore)

1、概念

信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
在内核中创建一个信号量集合(本质是个数组),数组的元素(信号量)都是1,使用P操作进行-1,使用V操作+1。

(1) P(sv):如果sv的值⼤大于零,就给它减1;如果它的值为零,就挂起该进程的执⾏。
(2) V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运⾏,如果没有进程因等待sv⽽挂起,就给它加1。

PV操作用于同一进程,实现互斥。
PV操作用于不同进程,实现同步。

2、功能:

对临界资源进行保护。

四、共享存储(Shared Memory)

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

1、概念:

将同一块物理内存一块映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。

2、特点:

1)不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以。
2)共享内存是临界资源,所以需要操作时必须要保证原子性。使用信号量或者互斥锁都可以。
3)生命周期随内核。

五、套接字(Socket)

套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

六、信号(Signal)

实现一个深度克隆

React的父子组件,兄弟组件之间怎么传值

讲一下React的生命周期

如果想中断React组件的更新,应该怎么做

跳格子的算法题

实现一个事件发射器

二面

自我介绍

反转一颗二叉树

ES6有什么新特性

Export导出的意义是什么

webpack有什么用

2019年JS有什么新东西

从用户输入URL到显示页面的过程

对于转盘抽奖,九宫格抽奖,跳格子抽奖,能否抽象成一个统一的算法

如何实现隔离

箭头函数有什么优势

讲一下HTTPS的密钥交换过程

CA证书是怎么发挥作用的

HTTP协议和TCP协议是什么关系

TCP的三次握手

三面

自我介绍

用ES5写一个数组去重,能不能优化一下性能

客户端怎么验证HTTPS发送的是原始内容

HTTPS使用密钥加密内容的原理是什么

如果我拦截了一个HTTPS请求,那些内容是不加密的

如何实现百度这种每次输入后向后端发送请求获取结果

如果请求过程中遇到问题导致前一个请求比后一个请求返回的晚怎么办

讲一下CSS的position

讲一下你是怎么学习JS的,有没有系统的看过一本书

文章作者: Lufer
文章链接: https://coder.lufer.cc/2019/05/23/今日头条前端实习生面试三面总结/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lufer
支付宝打赏
微信打赏