前端面试20题

2018-11-07  本文已影响0人  leo_xl

1:数据结构:队列、栈、链表、树,堆、图

栈:栈是一种动态集合,它是一种LIFO(last in first out后进先出)结构
队列:与栈不同,它是一种FIFO(first in first out先进先出)结构
链表:与数组中元素地址连续不同,链表中两个元素地址不一定连续,而是由专门的一个指针指明该元素的后一个(前一个)元素的地址。链表有单项链表,双向链表,循环链表
树:
1)二叉树:二叉树要存储4个数据,分别是节点携带的信息和其父节点、左右子节点的指针。
2)分支无限制的有根树: 上面二叉树每个节点最多有两个子节点,而分支无限制的有根数则没有这个限制,可能有3个、5个甚至更多子节点。所以存储这种数据结构的问题在于我们事先并不知道应该设置多少个child指针,若设置的少了不能满足要求,设置的过多又会浪费空间。所以这里提出一种新的描述这种数据结构的方法——左孩子右兄弟表示法,这种方法每个节点设置3个指针:父指针、从左数第一个孩子的指针、其右侧相邻的兄弟指针。
堆:堆实际上是以数组形式存储的二叉树
图:图是由顶点集合以及顶点间的关系集合组成的一种数据结构。

2:栈和队列的区别

栈是前进后出,队列是先进先出

3:栈的两种存储结构

1:数组
2:链表

4:各种树(平衡树、排序树、B树、B+数...)

5:实现链表排序的一种算法,为什么选这种?

6:排序有哪几种方法

1:选择排序、2:冒泡排序、3:插入排序、4:快速排序、5:希尔排序、6:堆排序、7:归并排序、8:基数排序

7:各种排序的复杂度

1:选择排序O(n^2)、2:冒泡排序:O(n^2)、3:插入排序:O(n^2)、4:快速排序:O(n^2)、5:O(n^2)、6:堆排序:O(nlogn)、7:归并排序:O(nlogn)、8:基数排序:(N∗M)

8:linux常用命令

tail -f test.log 查看日志滚动
mkdir 创建文本
scp 远程拷贝,-r是拷贝文件夹
cp 复制一个文件
mv 重命名/移动一个目录
copy 拷贝文件到另外一个目录 cp -R /home /home2
chmod -R 777 xxx 给文件最大权限
netstat -lnp|grep LISTEM 查看端口使用情况
kill -9 xxxx 杀掉xxxx进程
lsof -i:3000 查看3000端口占用情况

9:TCP和UDP的区别

1:TCP面向连接 ,比如打电话需要先拨号,UDP无连接的,即发送数据之前不需要建立连接
2:TCP提供可靠的服务,传送的数据,无差错、不丢失、不重复、且按序到达,UDP尽最大努力交付,不保证可靠交付
3:UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信
4:每一条TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信
5:TCP对系统资源要求较多,UDP对系统资源要求较少

10:http请求和响应的过程

1:域名解析
2:发起TCP的3次握手
3:简历TCP链接后发起http请求
4:服务器端响应http请求,浏览器得到html代码
5:浏览器解析html代码,并请求html代码中的资源
6:浏览器对页面进行渲染呈现给用户

11:OSI七层模型与TCP/IP四层模型(功能、内容、应用)

OSI:全名叫 开放式系统互联通信参考模型
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

TCP/IP四层:
1:HTTP、SSH、FTP协议(应用层、表示层、会话层)
2:TCP、UDP协议(传输层)
3:IP协议(网络层)
4:以太网(数据链路层、物理层)

12:CSS权重

第一等:代表内联样式,如:style="",权值为1000。
第二等:代表ID选择器,如:#content,权值为100.
第三等:代表类,伪类和属性选择器,如.content,权值为10。
第四类:代表类型选择器和伪元素选择器,如div p,权值为1。
最后把这些值加起来,就是当前元素的权重了。
权重算出来了,但是某个元素到底用哪个样式,还有3个规则:
1:如果样式上有!important标记,那么始终才用这个标记的样式
2:匹配的内容按照CSS权重排序,权重大的优先
3:如果权重也一样,按照它在CSS样式表里声明的顺序,后声明的优先,例如
h1{color:#f00;}
h1{color:#0f0;}
最终显示的是color:#0f0;

13:BFC(块级格式化上下文)

W3C对BFC的定义如下:浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks,table-cells,和table-captions),以及voerflow值补位visiable的块级盒子,都会为他们的内容创建新的BFC(块级格式化上下文)

简单理解,一个HTML元素要创建BFC,则满足下列的任意一个或多个条件即可:
1:float的值不为none。
2:position的值不是static或者relative。
3:display的值是inline-block、table-cell、flex、table-caption或者inline-flex
4:overflow的值不是visible
BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。===≠

14:兼容性理解、举例

15:js闭包

笼统总结:能够访问到其他作用域的变量就是闭包

精确总结:闭包是基于正常的垃圾回收处理机制下的。也就是说,一般情况一个函数(函数作用域)执行完毕,里面声明的变量会全部释放,被垃圾回收器回收。但闭包利用一个技巧,让作用域里面的变量,在函数执行完之后依旧保存没有被垃圾回收处理掉。

16:JS继承

1:原型链继承
2:构造继承
3:实例继承
4:拷贝继承
5:组合继承

17:柯里化

柯里化是指这样一个函数(假设叫做createCurry),他接收函数A作为参数,运行后能够返回一个新的函数。并且这个新的函数能够处理函数A的剩余参数。

18:异步编程

程序未得到所需计算资源时被挂起的状态。
异步编程的四种方法:
1:回调函数
2:事件监听
3:发布/订阅
4:Promises对象

上一篇下一篇

猜你喜欢

热点阅读