L'entretien web front-end posera les questions suivantes : 1. Points de connaissances liés au HTML et au HTML5, tels que "Qu'est-ce que la sémantique" et "Quelles sont les nouvelles fonctionnalités du HTML5" 2. Points de connaissances CSS et JS, telles que "Comment réaliser un centrage vertical", "Qu'est-ce que la fermeture js" et d'autres questions.
Les entretiens Web front-end demandent généralement : des points de connaissances liés au HTML et au HTML5, tels que ce qu'est la sémantique, quelles sont les nouvelles fonctionnalités du CSS et du JS ; points de connaissance, Par exemple, comment réaliser un centrage vertical, qu'est-ce que la fermeture js, etc.
Cet article rassemble quelques questions d'entretien souvent rencontrées dans les entretiens et donne les réponses correspondantes, ce qui a un certain effet de référence. j'espère que cela pourra aider davantage d'intervieweurs front-end et de personnes qui apprennent le front-end.
[Tutoriel recommandé : Tutoriel JavaScript]
HTML/HTML5
1. Connaissez-vous la sémantique ? Parlez de la sémantique que vous comprenez. Si c’était vous, que feriez-vous habituellement pour garantir la sémantique ?
Les nouvelles balises telles que l'en-tête, le pied de page, la section, etc. en html5 sont de la sémantique
D'une part, la sémantique permet aux ordinateurs de comprendre rapidement le contenu et de traiter efficacement les informations. être plus convivial avec les moteurs de recherche
D'un autre côté, cela facilite la collaboration avec les autres. D'autres peuvent comprendre la signification des balises de votre page Web en lisant le code
Lorsque le style est supprimé ou perdu. , la page peut être Présenter une structure claire
est bon pour le référencement : établir une bonne communication avec les moteurs de recherche aide les robots à explorer des informations plus efficaces : les robots s'appuient sur des balises pour déterminer le contexte et le poids de chaque mot-clé
Pratique à analyser par d'autres appareils (tels que les lecteurs d'écran, les lecteurs aveugles, les appareils mobiles) pour afficher les pages Web de manière significative
Facile pour le développement et la maintenance de l'équipe, la sémantique est plus lisible et est la suivante étape pour transformer les pages Web Tendances importantes, les équipes qui suivent les normes du W3C doivent suivre cette norme pour réduire la différenciation
2. Présenter les nouvelles fonctionnalités de HTML5
Nouvelle déclaration DOCTYPE< ! DOCTYPE html>
Prise en charge complète du CSS3
vidéo et audio
Stockage local
Lunette sémantique
canevas de nouveaux événements tels que ondrag onresize
3. Si vous résolvez le problème de l'impossibilité de revenir en arrière d'ajax,
HTML5 a introduit une nouvelle API, à savoir : history.pushState, history. .replaceState
Vous pouvez interfacer l'historique du navigateur via pushState et replaceSate, et modifier l'URL de la page actuelle
onpopstate écoute
4.
Websocket est un nouveau protocole proposé en HTML5, qui peut réaliser la communication entre le client et le serveur et réaliser la fonction push du serveur
L'avantage est que tant que le CV est connecté une fois, vous pouvez recevoir en continu des messages push du serveur, économisant ainsi de l'argent sur la bande passante et la pression côté serveur.
La connexion constante de simulation d'interrogation Ajax consiste à lancer une requête ajax au serveur de temps en temps (0,5 s) pour demander si le serveur dispose de mises à jour de données
L'inconvénient est qu'une connexion HTTP doit être établi à chaque fois, même si très peu de données doivent être transmises, cela gaspille de la bande passante
5 Web Worker et Websocket
thread principal du Worker<.>
Chargez un fichier js via worker = new worker(url) pour créer un travailleur et renvoyez une instance de travailleurEnvoyez des données au travailleur via la méthode worker.postMessage(data) . Lier la méthode Worker.onmessage pour recevoir les données envoyées par Worder Vous pouvez utiliser Worker.terminate() pour terminer l'exécution d'un worder.websocket
est un protocole de transport pour les applications Web, qui fournit un flux de données bidirectionnel arrivant de manière séquentielle. Il s'agit d'un protocole HTML5. Le lien websocket est persistant En maintenant un lien bidirectionnel entre le client et le serveur, les mises à jour du serveur peuvent être transmises au client en temps opportun sans que le client n'interroge pendant un certain temps.
6. Quel est le rôle de Doctype ? Comment distinguer le mode strict du mode mixte ? importance? La déclaration
est placée au début du document, avant la balise. Indiquez au navigateur dans quel mode rendre le documentLe mode de composition et de fonctionnement js en mode strict s'exécute selon le standard le plus élevé pris en charge par le navigateurEn mode mixte, la page a été assouplie à Affiché de manière rétrocompatible. Simulez le comportement des anciens navigateurs pour éviter que les sites ne fonctionnent DOCTYPE qui n'existe pas ou qui est mal formaté entraînera le rendu du document en mode promiscuité7. les types de documents existent-ils dans Doctype ?
Cette balise peut déclarer trois types de DTD, représentant respectivement la version stricte, la version de transition et le document HTML basé sur un framework HTML4.01 spécifie trois types de documents : Strict, Transitional et FramesetXHTML 1.0 spécifie trois types de documents XML : Strict, Transitional et FranmesetLe mode Standards (standard) (c'est-à-dire le mode de rendu strict) est utilisé pour restituer les pages Web qui suivent les dernières balises, Le Le mode Quirks (inclus) (c'est-à-dire le mode de rendu lâche ou le mode de compatibilité) est utilisé pour restituer des pages Web conçues pour les navigateurs traditionnels8. Quelle est la différence entre HTML et XHTML ?
Toutes les balises doivent avoir une balise de fermeture correspondante
Tous les noms d'éléments et d'attributs de balise doivent être en minuscules
Toutes les balises XML doivent être correctement imbriquées
Tous les attributs doivent être entre guillemets ""
Encoder tous les < et & symboles spéciaux
Attribuer une valeur à tous les attributs
Ne pas utiliser le contenu d'annotation '--'
Les images doivent avoir des légendes
CSS
1. content-box et border-box , pourquoi semble-t-il que content-box soit plus raisonnable. , mais border-box est encore souvent utilisé ?
content-box est le modèle de boîte standard du W3C Element width+padding+border
border- Box est un modèle de boîte étrange. de IE. Sa largeur d'élément est égale à la largeur du contenu. La largeur du contenu inclut le remplissage et la bordure
Par exemple, l'ajout d'un remplissage ou d'une bordure à l'élément cassera la mise en page, mais l'utilisation de border -box peut l'être. facilement complété
2. Disposez trois DIV de manière égale sur une seule ligne (inspectez la bordure)
1. Définissez la largeur de la bordure sur 33,33%
2.flexbox flex:1
3. Quelles sont les méthodes pour mettre en œuvre une disposition à deux colonnes ?
Méthode 1 :
*{ margin: 0; padding:0; } html,body{ height: 100%; } #left{ width: 300%; height: 100%; float: left; } #right{ height: 100%; margin-left: 300px; background-color: #eee; }
Méthode 2 :
*{ margin: 0; padding: 0; } html,body{height: 100%;} #left{ width: 300px; height: 100%; float: left; } #right{ height: 100%; overflow: hidden; backrgound-color: #eee; }
La deuxième méthode ci-dessus est implémentée en créant un nouveau BFC (reste de formatage au niveau du bloc) pour empêcher le retour à la ligne du texte. BFC est un environnement de mise en page relativement indépendant et la disposition de ses éléments internes n'est pas affectée par la disposition externe.
Il peut être créé d'une manière suivante et unique
La valeur de float n'est pas nulle
La valeur de la position n'est ni statique ni relative
display La valeur est table-cell, table-caption, inline-block, flex ou inline-flex Une des valeurs
le débordement n'est pas visible
4. La valeur de l'attribut flex est Combien ?
L'attribut flex est l'abréviation de flex-grow, flex-shrink et flex-basis
L'attribut flex-grow définit le taux de grossissement de l'élément, la valeur par défaut est 0
L'attribut flex-shrink définit le taux de rétrécissement de l'article, la valeur par défaut est 1
L'attribut flex-basis définit l'espace fixe de l'article
5. Comment réaliser un DIV du coin supérieur gauche vers le coin inférieur droit Quelles sont les méthodes pour se déplacer ? Comment y parvenir ?
Changer la valeur gauche en largeur de la fenêtre - valeur supérieure de la largeur div en hauteur de la fenêtre = hauteur div
Méthode d'animation de jquery
transition CSS3
6. Centrage vertical
Élément en ligne sur une seule ligne
Vous pouvez définir le rembourrage en haut, le rembourrage en bas
et modifier height et Définir la hauteur de la ligne à égale
Éléments en ligne multilignes
Vous pouvez convertir les éléments en style tabel, puis définir vertical-align:middle;
Utiliser la disposition flexible
Éléments au niveau du bloc
Marges négatives de positionnement absolu de hauteur connue
Hauteur inconnue transform:translateY(-50 %);
mise en page flexible
display: flex; justify-content: center; aligin-items: center;
7. Quelle est la différence entre rem et em ?
em est relatif à l'élément parent, rem est relatif à l'élément racine
8. Effacer les flotteurs
Utilisez l'attribut clear pour nettoyer
Insérer une balise vide à la fin du conteneur parent
<div style="clear: both;"></div>
Utiliser le pseudo-élément CSS :
.clearfix:after { content: "."; height: 0; visibility: hidden; display: block; clear: both; }
Former le conteneur parent en BFC
BFC peut nettoyer les flotteurs principalement en utilisant ses règles de disposition :
Les boîtes internes seront placées les unes après les autres dans le sens vertical. >
La distance verticale de la boîte est déterminée par la marge. Les marges de deux cases adjacentes appartenant au même BFC se chevaucheront Le côté gauche de la case marge de chaque élément est en contact avec le côté gauche de la case bordure contenant la case bordure rapide (pour les cases de gauche à -formatage à droite, sinon c'est l'inverse). Cela est vrai même s'il y a un flottant La zone de BFC ne chevauchera pas la boîte flottanteBFC est un conteneur indépendant isolé sur la page, et les sous-éléments à l'intérieur le conteneur n'affectera pas les éléments extérieurs. L'inverse est également vraiLors du calcul de la hauteur du BFC, les éléments flottants participent également au calculQuelle est la méthode pour déclencher le BFC ?
Élément racinel'attribut float n'est pas nulla position est absolue ou fixel'affichage est un bloc en ligne, une cellule de tableau, un tableau -caption, flex, inline-flexle débordement n'est pas visible9 La valeur de position, relative et absolue est positionnée par rapport à qui ?
relatif : positionnement relatif, par rapport à sa propre position dans le flux normal de documents. absolu : Génère un positionnement absolu, un positionnement relatif à l'élément parent dont le dernier positionnement n'est pas statique. corrigé : (non pris en charge par les anciennes versions d'IE) Génère un positionnement absolu par rapport à la fenêtre ou au cadre du navigateur. statique : Valeur par défaut, pas de positionnement, l'élément apparaît dans le flux normal du document. sticky : Générez des éléments de positionnement collants, la position du conteneur est calculée en fonction du flux normal de documents.10. Que sont les sélecteurs CSS ? Quelles propriétés peuvent être héritées ? Comment est calculé l’algorithme de priorité ? Quelles sont les nouvelles pseudo-classes en CSS3 ?
Sélecteurs :
sélecteur d'identifiant (#myId) sélecteur de classe (.myClassName) Sélecteur de balise ( div, p, h1)Sélecteur adjacent (h1 + p)
Sélecteur enfant (ul > li)
Sélecteur descendant ( li a) Sélecteur de caractères génériques (*) Sélecteur d'attribut (bouton[disabled="true"]) Sélecteur de pseudo-classe (a:hover,li :nth-child)
Priorité
!important > 行内样式(比重1000) > id(比重100) > class/属性(比重10) > tag / 伪类(比重1);
11、介绍sass
定义变量css嵌套,允许在代码中使用算式,支持if判断for循环
12、transition 和 margin的百分比根据什么计算?
transition是相对于自身;margin相对于参照物
13、display:none和visibility:hidden的区别?
display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,就当他从来不存在。
visibility:hidden 隐藏对应的元素,但是在文档布局中仍保留原来的空间。
15、CSS中link 和@import的区别是?
link属于HTML标签,而@import是CSS提供的;
页面被加载的时,link会同时被加载,而@import被引用的CSS会等到引用它的CSS文件被加载完再加载;
import只在IE5以上才能识别,而link是HTML标签,无兼容问题;
link方式的样式的权重 高于@import的权重.
JS
1、介绍一下闭包和闭包常用场景?
使用闭包主要为了设计私有的方法和变量,闭包的有点事可以避免变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用域的概念。
闭包有三个特性:
函数嵌套函数
函数内部可以引用外部的参数和变量
参数和变量不会被垃圾回收机制回收
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包常见方式,就是在一个函数的内部创建另一个函数
应用场景,设置私有变量的方法
不适用场景:返回闭包的函数是个非常大的函数
闭包的缺点就是常驻内存,会增大内存使用量,使用不当会造成内存泄漏
2、为什么会出现闭包这种东西?解决了什么问题?
受javascript链式作用域链的影响,父级变量中无法访问到子级的变量值
3、介绍一下你所了解的作用域链,作用域链的尽头是什么?为什么?
每一个函数都有一个作用域,比如创建了一个函数,函数里面又包含了一个函数,那么现在又三个作用域,这样就形成了一个作用域链
作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域链网上找
4、ajax创建的过程是怎样的,主要用到哪些状态码?
创建XMLHttpRequest对象,也就是创建一个异步调用对象
创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
设置响应HTTP请求状态变化函数
发送HTTP请求
获取异步调用返回的数据
使用javascript和DOM实现局部刷新
var xmlHttp = new XMLHttpRequest(); xmlHttp.open('GET','demo.php','true'); xmlHttp.send() xmlHttp.onreadystatechange = function(){ if(xmlHttp.readyState === 4 & xmlHttp.status === 200){ } }
5、事件委托
利用冒泡原理,把时间加到父级上,触发执行效果
可以大量节省内存占用,减少事件注册
可以方便地动态添加和修改元素,不需要因为元素的改动而修改时间绑定
var ul = document.querySelector('ul'); var list = document.querySelectorAll('ul li'); ul.addEventListener('click', function(ev){ var ev = ev || window.event; var target = ev.target || ev.srcElemnt; for(var i = 0, len = list.length; i < len; i++){ if(list[i] == target){ alert(i + "----" + target.innerHTML); } } });
6、javascript的内存回收机制?
垃圾回收器会每隔一段时间找出那些不再使用的内存,然后为其释放内存
一般使用标记清除方法 当变量进入环境标记为进入环境,离开环境标记为离开环境
还有引用计数方法
stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小不定也不会自动释放
基本数据类型存放在栈中
引用类型存放在堆内存中,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据
7、javascript中的this是什么,有什么用,指向上面?
全局代码中的this是指向全局对象
作为对象的方法调用时指向调用这个函数的对象
作为构造函数指向创建的对象
使用apply和call设置this
8、判断数组有哪些方法?
a instanceof Array
a.constructor == Array
Object.protype.toString.call(a) == [Object Array]
9、严格模式的特性?
对javascript的语法和行为,都做了一些改变
全局变量必须显式的声明
对象不能有重名的属性
函数必须声明在顶层
消除js语法的一些不合理,不严谨之处,减少一些怪异行为
消除代码运行的一些不安全之处,保证代码运行的安全
提高编译效率,增加运行速度
为未来新版本的js做好铺垫
10、js的原型链,如何实现继承?
function foo(){}; foo.prototype.z = 3;var obj = new foo(); obj.x = 1; obj.y = 2; obj.x //1 obj.y //2 obj.z //3
11、图片懒加载
当页面滚动的时间被触发->执行加载图片操作->判断图片是否在可视区域内->在,则动态将data-src的值赋予该图片
12、webpack常用到哪些功能?
设置入口
设置输出目录
设置loader
extract-text-webpack-plugin将css从js代码中抽出并合并
处理图片文字等功能
解析jsx解析bable
13、函数组合继承
原型继承,构造函数继承,call apply继承
var super = function(name){ this.name = name; } super.prototype.func1 = function() {console.log('func1')}var sub = function(name, age){ super.call(this, name); this.age = age; } sub.prototype = new super()'
14、对作用域链的理解
作用域链的作用是保证执行环境里有权访问的变量和函数是有序耳朵,作用域链额变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的
15、js垃圾回收方法
标记清除(mark and sweep)
这是JavaScript最常见的垃圾回收方式,当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”。
垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量以及被环境中变量所引用的变量(闭包),在这些完成之后仍存在标记的就是要删除的变量了
引用计数(reference counting)
在低版本IE中经常会出现内存泄露,很多时候就是因为其采用引用计数方式进行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数,当声明了一个 变量并将一个引用类型赋值给该变量的时候这个值的引用次数就加1,如果该变量的值变成了另外一个,则这个值得引用次数减1,当这个值的引用次数变为0的时 候,说明没有变量在使用,这个值没法被访问了,因此可以将其占用的空间回收,这样垃圾回收器会在运行的时候清理掉引用次数为0的值占用的空间。
在IE中虽然JavaScript对象通过标记清除的方式进行垃圾回收,但BOM与DOM对象却是通过引用计数回收垃圾的, 也就是说只要涉及BOM及DOM就会出现循环引用问题。
16、js继承方式及其优缺点
原型链继承的缺点
一是字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数
借用构造函数(类试继承)
借用构造函数虽然解决了刚才两种问题,但是没有原型,则复用无从谈起,需要原型链+借用构造函数的模式,这种模式成为组合继承
组合式继承
组合式继承是比较常用的一种继承方法,其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承,这样,即通过在原型上定义方法实现了函数复用,有保证每个实例都有它自己的属性
ES6
1、let和const的区别?
let声明的变量可以改变,值和类型都可以改变,没有限制
const声明的变量不得改变值
2、平时用了es6的哪些内容,和es5有什么不同?
let,const,箭头函数,字符串模板,class类,模块化,promise
ES5 reuqire,react,createclass
3、介绍promise
就是一个对象,用来传递异步操作的消息。有三种状态:pending(进行中),resolved(已完成)和rejected(失败)
有了promise对象,就可以将异步操作以同步操作的流程表示出来,避免了层层嵌套的回调函数
前端框架
模块化
1、使用模块化加载时,模块记载的顺序是怎么样的,如果不知道,根据已有的知识,加载顺序是怎么样的
commonjs 同步循序执行
AMD 提前加载,不管是否调用模块,先解析所有模块require速度快 有可能浪费资源
CMD提前加载,在正真需要使用(依赖)模块时才解析该模块
seajs按需解析,性能比AMD差
框架问题
1、什么是MVVM,和MVC有什么区别,原理是什么?
mvc的界面和逻辑关联紧密,数据直接从数据库读取,必须通过controller来承上启下,通信都是单向的
mvvm的view 和 viewModel可以互相通信,界面数据从viewmodel中获取
2、父子组件通信
vue:父组件是通过props属性给子组件通信,在子组件里面emit,在父组件监听
react:props传递 父给子穿一个回调函数,将数据传给父亲处理
3、兄弟组件怎么通信的?
vuex 建立一个vue的实例,emit触发时间 on监听时间
redux 子A ->父->子B
4、生命周期有哪些,怎么用?
beforecreated: el 和 data并未初始化
created: 完成了 data数据的舒适化,el没有
beforeMount:完成了el 和 data初始化
mounted:完成挂载,updated,destroyed
浏览器
1、跨域通信有哪些解决方案?
(1)JSONP
由于同源策略的限制,XMLHttpRequest只允许请求当前资源(域名、协议、端口)的资源,script标签没有同源限制,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。
通过动态