2021中高级前端面试题合集,知乎上已获万赞-程序员宅基地

技术标签: 大前端  程序员  面试  前端  

02 目录


下面是这篇文章的目录结构,一般比较简单的问题我就一笔带过了,主要是分享一下比较有难度的知识点,答案来自网上,如果有版权问题我会删除。还有本文只是给出一个大概的知识点,如果想要深入学习还要靠自己去查一下哦!

如果答案有错误,欢迎指正!

  • 计算机基础
  • 前端基础(HTML/CSS)
  • JavaScript
  • 前端框架
  • 浏览器渲染
  • 计算机网络
  • 手写代码
  • Webpack
  • Node
  • ES6

03 计算机基础


进程与线程的区别
  • 进程是系统进行资源分配和调度的一个独立单位
  • 线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位
  • 一个进程至少有一个线程组成

线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源

进程间通信方式
  • 管道通信
  • 消息队列通信
  • 信号量通信
  • 共享内存通信
  • 套接字通信
函数库与系统库
  • 系统库调用运行在内核模式,函数库运行在用户模式
  • 系统调用是os提供的服务,处于内核态且不能直接调用,而要使用类似int 0x80的软中断陷入内核
  • 库函数中有很大部分是对系统调用的封装
  • 函数库属于过程调用,开销小;系统库需用户空间和内核上下文环境切换,开销大
  • 用户态可以调用系统提供API接口调用内核来切换成内核态(中断方式)
二叉树
  • 二叉树每一个节点不能多于两个孩子
  • 没有孩子的节点就是叶子节点
  • 一个节点有左右两个指针,若无则指向null
  • 深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点
  • 二叉树的遍历三种方式,如下:
    (1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。
    (2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。
    (3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根
数据库索引
  • 索引是一种数据结构(B+树)

  • 不推荐使用索引

(1)表记录太少;
(2)数据重复且分布平均的字段(只有很少数据值的列);
(3)经常插入、删除、修改的表要减少索引;

  • 使用索引

(1)主键,unique字段;
(2)和其他表做连接的字段需要加索引;
(3)在where里使用>,≥,=,<,≤,is null和between等字段;
(4)使用不以通配符开始的like,where object like ‘Math%’;
(5)order by和group by字段;

数据库引擎
  • InnoDB存储引擎
  • MyISAM存储引擎
  • MEMORY存储引擎
  • Archive存储引擎
虚拟内存及缓冲区溢出
虚拟内存
  • 虚拟内存是计算机系统内存管理的一种技术
  • 应用程序认为它拥有连续的可用的内存,实际分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上
  • 虚拟内存技术可以通过覆盖或者把处于不活动状态的程序以及它们的数据全部交换到磁盘上等方式来实现
缓冲区溢出
  • 计算机向缓冲区填充数据时超出了缓冲区本身的容量,覆盖合法数据
危害
  • 堆栈溢出,可以改变返回程序地址
  • 程序崩溃,拒绝服务
  • 执行非法代码,获取非法权限
  • 程序运行失败,系统宕机,重启
排序算法
  • 快速排序(nlogn)
  • 选择排序(n^2)
  • 插入排序(n^2)
  • 希尔排序(n^1.5)
  • 归并排序(nlogn)
  • 冒泡排序(n^2)
常用git指令
  • 下载一个项目和它的整个代码历史 git clone [url]
  • 添加指定目录到暂存区,包括子目录 git add [dir]
  • 提交暂存区到仓库区 git commit -m [修改信息]
  • 同步到远程仓库, git push
  • 列出所有本地分支 git branch
  • 新建一个分支,并切换到该分支 git checkout -b [branch]
路由器与交换机
  • 路由器可以给你的局域网自动分配IP,交换机只是用来分配网络数据的
  • 路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以
  • 交换机在中继层,交换机根据MAC地址寻址
  • 路由器提供防火墙的服务,交换机不能提供该功能

04 前端基础(HTML/CSS)


flex容器布局
主轴属性
  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content
交叉轴属性
  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self
BFC/IFC

BFC(Block Formatting Context)叫做“块级格式化上下文"

(1)内部的盒子会在垂直方向,一个个地放置;
(2)盒子垂直方向的距离由margin决定,属于同一个BFC的两个相邻Box的上下margin会发生重叠;
(3)每个元素的左边,与包含的盒子的左边相接触,即使存在浮动也是如此;
(4)BFC的区域不会与float重叠;
(5)BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之也如此;
(6)计算BFC的高度时,浮动元素也参与计算。

触发条件
(1)float的属性不为none;
(2)position为absolute或fixed;
(3)display为inline-block,table-cell,table-caption,flex;
(4)overflow不为visible

IFC(inline Formatting Context)叫做“行级格式化上下”

(1)内部的盒子会在水平方向,一个个地放置;
(2)IFC的高度,由里面最高盒子的高度决定;
(3)当一行不够放置的时候会自动切换到下一行;

CSS3的filter属性详解
  • blur

  • brightness

  • contrast

  • grayscale

  • hue-rotate

  • invert

  • opacity

  • saturate

  • sepia

CSS的继承属性(部分)
  • font-size:设置字体的尺寸
  • text-indent:文本缩进
  • text-align:文本水平对齐
  • text-shadow:设置文本阴影
  • line-height:行高
  • 元素可见性:visibility
  • 光标属性:cursor
CSS盒模型
  • W3C 标准盒模型:
    属性width,height只包含内容content,不包含border和padding

  • IE 盒模型:
    属性width,height包含border和padding,指的是content+padding+border

content-box(标准盒模型)
border-box(IE盒模型)

CSS的四种定位
  • Static

    这个是元素的默认定位方式,元素出现在正常的文档流中,会占用页面空间。

  • Relative

    相对定位方式,相对于其父级元素(无论父级元素此时为何种定位方式)进行定位,准确地说是相对于其父级元素所剩余的未被占用的空间进行定位(在父元素由多个相对定位的子元素时可以看出),且会占用该元素在文档中初始的页面空间,即在使用top,bottom,left,right进行移动位置之后依旧不会改变其所占用空间的位置。可以使用z-index进行在z轴方向上的移动。

  • Absolute

    绝对定位方式,脱离文档流,不会占用页面空间。以最近的不是static定位的父级元素作为参考进行定位,如果其所有的父级元素都是static定位,那么此元素最终则是以当前窗口作为参考进行定位。可以使用top,bottom,left,right进行位置移动,亦可使用z-index在z轴上面进行移动。当元素为此定位时,如果该元素为内联元素,则会变为块级元素,即可以直接设置其宽和高的值;如果该元素为块级元素,则其宽度会由初始的100%变为auto。

    注意:当元素设置为绝对定位时,在没有指定top,bottom,left,right的值时,他们的值并不是0,这几个值是有默认值的,默认值就是该元素设置为绝对定位前所处的正常文档流中的位置。

  • Fixed

    绝对定位方式,直接以浏览器窗口作为参考进行定位。其它特性同absolute定位。当父元素使用了transform的时候,会以父元素定位

CSS权重计算
  • 第一等级:代表内联样式,如style="",权值为 1000
  • 第二等级:代表id选择器,如#content,权值为100
  • 第三等级:代表类,伪类和属性选择器,如.content,权值为10
  • 第四等级:代表标签选择器和伪元素选择器,如div p,权值为1
    注意:通用选择器(*),子选择器(>),和相邻同胞选择器(+)并不在这个等级中,所以他们的权值为0

CSS优化技巧
  • 合理使用选择器
  • 减少DOM操作,减少重绘和重排
  • 去除无效的选择器
  • 文件压缩
  • 异步加载文件
  • 减少@import的使用
px/em/rem/vh/vw
  • px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的
  • em是相对长度单位。相对于当前父元素的字体尺寸。如未设置,则相对于浏览器的默认字体尺寸
  • rem是CSS3新增的一个相对单位。使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素
  • css3新单位,view width的简写,是指可视窗口的宽度。假如宽度是1200px的话。那10vw就是120px
  • css3新单位,view height的简写,是指可视窗口的高度。假如高度是1200px的话。那10vh就是120px

05 JavaScript


闭包以及作用域
  • 作用域是可访问变量的集合,可以分为全局作用域和局部作用域。

  • 闭包就是将函数内部和函数外部连接起来的一座桥梁

  • this是在函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用

事件循环机制
  • 宏任务与微任务的区别

  • Node中的事件循环机制

JS垃圾回收与V8垃圾回收
  • JS:标记清楚法/引用计数法
  • V8:标记清除发/标记压缩法/增量标记法/压缩算法
原型与原型链
  • 所有原型链的终点都是 Object 函数的 prototype 属性
  • 每一个构造函数都拥有一个 prototype 属性,此属性指向一个对象,也就是原型对象
  • 原型对象默认拥有一个 constructor 属性,指向指向它的那个构造函数
  • 每个对象都拥有一个隐藏的属性 __ proto __,指向它的原型对象

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

点击这里领取Web前端开发经典面试题

片转存中…(img-QKYsUnBc-1626849551037)]

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

点击这里领取Web前端开发经典面试题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_60099172/article/details/118966101

智能推荐

JAVA——maven-archetype-webapp 初始项目搭建 (maven 3.5)-程序员宅基地

文章浏览阅读2.3k次。1、创建:2、创建artifact3、配置tomcat,并把项目插入进去4、完成,可以进行以下操作测试Web.xml中添加<welcome-file-list> <welcome-file>index.jsp</welcome-file></welcome-file-list>2. 新建index.jsp,编写..._maven-archetype-webapp

Spring自动装配byName和byType的区别-程序员宅基地

文章浏览阅读459次,点赞3次,收藏2次。SpringBean自动装配类型_byname和bytype的区别

mybatis if和foreach嵌套 (同一个列,不定个数的查询条件)_mybatis if 嵌套 foreach-程序员宅基地

文章浏览阅读6.5k次。有这么一种需求:根据输入的内容的个数设置不同个数的查询条件(在一个列上设置不定个数的查询条件),这时就需要根据foreach循环在一个列上拼接查询条件了。 模板如下图:..._mybatis if 嵌套 foreach

JavaScript之关闭轮询定时器(setTimeout/clearTimeout|setInterval/clearInterval)小结-程序员宅基地

文章浏览阅读593次。已知:  1.1 开启Timeout程序: scope.setTimeout("functionName()" | functionHandle, timeValue) 返回值:timerID  1.2 关闭Timeout程序: scope.clearTimeout(timerID);    2.1 开启Interval程序:scope.setInterval("function..._js 轮训怎么清除

linux启动引导分区设置,Linux系统启动引导过程和服务控制-程序员宅基地

文章浏览阅读268次。Linux系统刚入门的小伙伴们是不是还在迷惑到底系统从我们按下电源键的那一刻,是如何进行一步一步运行的,知道我们输入用户名和密码进入系统,来操作电脑,今天我们就来写一下开机的启动过程以及相关服务的控制。一. 系统引导流程:1 . 开机加电,BIOS对硬件加电自检加电自检,检测硬件设备,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等2 . 检..._linux启动使用系统分区的哪些文件引导区的

hibernate操作oracle的blob字段 -程序员宅基地

文章浏览阅读236次。1. Bolb类型字段说明: 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用sel..._oracle blob转字符串 hibernate

随便推点

C/C++中#pragma comment 的解释_#pragma comment(lib,"winmm.lib") c语言中这个是什么意思-程序员宅基地

文章浏览阅读6.2k次。这是从百度百科上找到的,#pragma comment( comment-type ,["commentstring"] )comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。commentstring是一个提供为comment-type提供附加信息的字符串。compiler放置编译器的版本或者名字到一个对象文件..._#pragma comment(lib,"winmm.lib") c语言中这个是什么意思

【Java】积分手机端-中文转拼音_手机兑换积分的拼音-程序员宅基地

文章浏览阅读309次。目录前因启示启示后果前因  这次小咸儿因为项目的业务逻辑的需求,在一个添加页面时,需要根据添加的中文名称,生成一个拼音字段值,存入到数据库中。  如图,手机端添加页面:启示  实现的方式有两种,一种是在前端页面进行转换,一种是在后端进行转换,小咸儿首先利用的方式是利用后端实现的,接下来还有前端实现的分享。启示   1. 下载jar包 ,首先要先下载一个jar包——pinyin4j...._手机兑换积分的拼音

KaTex parse error: KaTeX does not work in quirks mode_katex doesn't work in quirks mode.-程序员宅基地

文章浏览阅读946次。报错如下图原因是没有DOCTYPE声明;解决方法:html页面顶端声明 <!DOCTYPEhtml>如下图<!DOCTYPE html><html lang="en"><head>_katex doesn't work in quirks mode.

附近的人mysql实现_附近的人功能实现及原理-程序员宅基地

文章浏览阅读718次。如何查找当前点(118.818747°E,32.074497°N)附近500米的人?这一类功能很常见(如微信附近的人、共享单车附近的车辆、美团附近的商家),那在java中是如何实现的呢?1 实现方式目前普遍的实现方式有三种,下面将依次展开讨论:Mysql+外接正方形Mysql+geohashRedis+geohash2 Mysql+外接正方形2.1 实现思路查找附近500米的人,就是以当前坐标点为..._根据金纬度 查询附近的人 mysql

Threejs + Videojs/原生video/第三方播放器 实现全景视频/全景直播播放DEMO_three video-程序员宅基地

文章浏览阅读1.8w次,点赞9次,收藏43次。原理原理其实很简单,做过全景图的同学都知道,球模型+全景图片贴图。 全景视频/全景直播就是 球模型+全景视频素材 。至于播放器样式,可以自己用Js+Dom自定义,或者更改videojs的样式 即便你是用原生video也是可行的 threejs官方demo就是原生video标签。本demo就是拿着threejs的demo改的<!DOCTYPE html><html ..._three video

Docker 中 RUN、CMD 与 ENTRYPOINT 的区别_docker run cmd-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏28次。docker 中 RUN、CMD 与 ENTRYPOINT 的区别。_docker run cmd

推荐文章

热门文章

相关标签