웹 프런트엔드 인터뷰에서는 다음을 질문합니다. 1. "의미론이란 무엇입니까?" 및 "HTML5의 새로운 기능은 무엇입니까?"와 같은 HTML 및 HTML5 관련 지식 2. CSS 및 JS 지식 , ""수직 센터링 달성 방법", "js 클로저란 무엇입니까?" 및 기타 질문과 같은 질문입니다.
웹 프런트엔드 인터뷰에서는 일반적으로 다음과 같은 질문을 합니다. HTML 및 HTML5 관련 지식 포인트(예: 의미론 및 새로운 기능) 수직 센터링을 달성하는 방법, js 클로저란 무엇인지 등과 같은 HTML5 및 JS 지식 포인트입니다.
이 기사에서는 인터뷰에서 자주 접하는 몇 가지 인터뷰 질문을 모아서 해당 내용을 제공합니다. 답변은 어느 정도 참고 효과가 있으며, 더 많은 프론트엔드 면접관과 프론트엔드를 배우는 사람들에게 도움이 되기를 바랍니다.
【추천 튜토리얼: JavaScript 튜토리얼】
#🎜🎜 #HTML/HTML5
1. 당신이 이해하는 의미에 대해 이야기해 보세요. 의미를 보장하기 위해 보통 무엇을 하시겠습니까?
html5의 머리글, 바닥글, 섹션 등과 같은 새로운 태그는 의미론적입니다. 한편 의미론적이란 컴퓨터가 내용을 빠르게 이해할 수 있도록 하는 것입니다. 콘텐츠를 효율적으로 처리하면 검색 엔진에 더 친숙해질 수 있습니다한편, 다른 사람이 코드를 읽어 웹 페이지 태그의 의미를 이해할 수 있습니다# 🎜🎜# 스타일이 제거되거나 손실되면 페이지에 명확한 구조가 표시될 수 있습니다
SEO에 도움이 됩니다. 검색 엔진과의 원활한 커뮤니케이션을 구축하고 크롤러가 보다 효과적인 정보를 크롤링하도록 돕습니다. 크롤러는 각 키워드의 컨텍스트 및 가중치를 결정하는 태그
다른 기기(예: 스크린 리더, 시각 장애인 리더, 모바일 기기)에서 구문 분석하여 의미 있는 방식으로 웹 페이지를 렌더링하는 데 편리함
#🎜 🎜#팀 개발 및 유지 관리에 편리한 것과 웹 페이지를 더 읽기 쉽게 만드는 의미는 웹 페이지를 만드는 데 있어 다음으로 중요한 추세입니다. W3C 표준을 따르는 팀은 이 표준을 따르고 차별화를 줄여야 합니다.2. HTML5 새로운 기능 소개
새로운 DOCTYPE 문
css3 완벽 지원비디오 및 오디오# 🎜🎜#로컬 스토리지
Semantic Bezel
canvas ondrag onresize와 같은 새로운 이벤트
3. 해결할 수 없습니다. 돌아가는 문제html5는 새로운 API, 즉 다음과 같은 API를 도입했습니다. 및 replacementSate 인터페이스, 그리고 현재 페이지의 URL 변경onpopstate 다시 듣기
4, websocket 및 ajax 폴링# 🎜🎜#websocket 은 HTML5에서 제안하는 새로운 프로토콜로 클라이언트와 서버간의 통신을 구현하고, 서버의 푸시 기능도 구현할 수 있습니다이력서는 한 번만 연결하면 장점이 있습니다 , 지속적으로 서버 푸시 메시지를 받아 대역폭과 서버 측 압력을 절약할 수 있습니다.ajax 폴링 시뮬레이션 지속적인 연결은 서버에 데이터 업데이트가 있는지 쿼리하기 위해 서버에 ajax 요청을 한 번씩(0.5초) 시작하는 것입니다
단점은 매번 HTTP 연결을 설정하려면 아주 적은 양의 데이터만 전송해도 대역폭이 낭비됩니다5, 웹 작업자 및 웹소켓
#🎜🎜 #worker 메인 스레드worker=newworker(url)를 통해 js 파일을 로드하여 워커를 생성하고 워커 인스턴스를 반환합니다 #🎜🎜 # 작업자.postMessage(data) 메서드를 통해 작업자에게 데이터를 보냅니다.
worder가 보낸 데이터를 받기 위해 Worker.onmessage 메소드를 바인딩합니다.Worder의 실행을 종료하려면 Worker.terminate()를 사용할 수 있습니다.
websocket
은 양방향, 순차적으로 도착하는 데이터 흐름을 제공하는 웹 애플리케이션용 전송 프로토콜입니다. 이는 HTML5 프로토콜입니다. 웹소켓 링크는 클라이언트와 서버 간의 양방향 링크를 유지함으로써 클라이언트가 일정 기간 동안 폴링할 필요 없이 적시에 클라이언트에 푸시될 수 있습니다. #🎜🎜 #6. Doctype의 역할은 무엇인가요? 엄격 모드와 혼합 모드를 구별하는 방법은 무엇입니까? 중요성?선언은 문서 앞부분, 태그 앞에 위치합니다. 문서를 렌더링할 모드를 브라우저에 알려줍니다엄격 모드의 조판 및 js 작업 모드는 브라우저가 지원하는 최고 표준에서 실행됩니다
혼합 모드에서는 페이지가 느슨하게 이전 버전과 호환되는 방식으로 표시됩니다. 사이트가 작동하지 않는 것을 방지하기 위해 이전 브라우저의 동작을 시뮬레이션합니다
DOCTYPE이 존재하지 않거나 형식이 잘못되면 문서가 무차별 모드로 렌더링됩니다#🎜🎜 #7. 문서 유형에는 몇 가지 유형이 있나요?
이 태그는 엄격한 버전, 전환 버전 및 프레임워크 기반 HTML 문서를 나타내는 세 가지 DTD 유형을 선언할 수 있습니다. HTML4.01은 세 가지 유형의 문서 유형을 지정합니다. Strict, Transitional 및 Frameset은 최신 태그를 따르는 웹 페이지를 렌더링하는 데 사용되는 반면 Quirks(포함) 모드(느슨한 렌더링 모드 또는 호환성 모드라고도 함)는 다음을 위해 설계된 웹 페이지를 렌더링하는 데 사용됩니다. 기존 브라우저8. HTML과 XHTML의 차이점은 무엇인가요?
모든 태그에는 해당 닫는 태그가 있어야 합니다.
모든 태그 요소와 속성의 이름은 소문자여야 합니다.
모든 XML 태그는 적절하게 중첩되어야 합니다.
모든 속성은 따옴표로 묶어야 합니다. ""
인코딩을 사용하여 표현 all < 및 & 특수 기호
모든 속성에 값을 할당하세요
댓글 내용에 '--'를 사용하지 마세요.
사진에 캡션이 있어야 합니다
CSS
1. box, 왜 content-box가 더 합리적으로 보이는데 border-box가 여전히 자주 사용되나요?
content-box는 W3C의 표준 상자 모델 요소 너비 + 패딩 + 테두리
border-box는 이상한 상자 모델을 위한 것입니다. 요소 너비는 콘텐츠 너비와 같습니다. 콘텐츠 너비에는 패딩과 테두리가 포함됩니다
예를 들어 요소에 패딩이나 테두리를 추가하면 레이아웃이 깨지는 경우가 있지만 테두리 상자를 사용하면 쉽게 완료할 수 있습니다
2. 세 가지를 구현합니다. 동일하게 배열된 DIV(테두리 상자 검사)
1. 테두리 상자 너비를 33.33%로 설정합니다.
2.flexbox flex:1
3. 2열 레이아웃을 구현하는 방법은 무엇인가요?
방법 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; }
방법 2:
*{ margin: 0; padding: 0; } html,body{height: 100%;} #left{ width: 300px; height: 100%; float: left; } #right{ height: 100%; overflow: hidden; backrgound-color: #eee; }
4. flex 속성의 값은 무엇입니까?
flex 속성은 flex-grow, flex-shrink 및 flex-basis의 약자입니다. flex-grow 속성은 항목의 확대 비율을 정의하며 기본값은 0입니다. flex-shrink 속성은 축소를 정의합니다. 항목의 비율, 기본값은 1입니다. flex-basis 속성은 프로젝트의 고정 공간을 정의합니다.5. DIV의 왼쪽 상단을 오른쪽 하단으로 이동하는 방법은 무엇입니까? 그것을 달성하는 방법?
왼쪽 값을 창 너비로 변경 - div 너비 위쪽 값을 창 높이 = div 높이로 변경 jquery의 애니메이션 방법 css3 전환6, 수직 센터링
한 줄 인라인 요소
가능 padding-top, padding-bottom으로 설정하세요높이와 줄 높이를 동일하게 설정하세요다중 줄 인라인 요소
요소를 테이블 스타일로 변환한 다음 수직 정렬:중간;사용 플렉스 레이아웃
블록 수준 요소
알려진 높이 절대 위치 지정 음수 여백알 수 없는 높이 변환:translateY(-50%);flex 레이아웃
display: flex; justify-content: center; aligin-items: center;
7. 여자 이름?
em은 상위 요소에 상대적이고, rem은 루트 요소에 상대적입니다8. 부동 소수점 지우기
clear 속성을 사용하여 정리하세요상위 컨테이너 끝에 빈 태그를 삽입하세요<div style="clear: both;"></div>
.clearfix:after { content: "."; height: 0; visibility: hidden; display: block; clear: both; }
상위 컨테이너를 BFC로 구성
BFC는 주로 레이아웃 규칙을 사용하여 부동 소수점을 정리할 수 있습니다. 내부 상자는 수직 방향으로 하나씩 배치됩니다.상자의 수직 방향의 거리는 여백에 따라 결정됩니다. 동일한 BFC에 속하는 인접한 두 상자의 여백은 겹칩니다. 각 요소의 여백 상자 왼쪽은 포함하는 테두리 상자의 왼쪽에 닿습니다(왼쪽에서 오른쪽으로 서식 지정의 경우, 그렇지 않으면 반대). 이는 플로트가 있더라도 마찬가지입니다BFC의 영역은 플로트 상자와 겹치지 않습니다BFC는 페이지에서 격리된 독립 컨테이너이며 컨테이너의 하위 요소는 외부 요소에 영향을 주지 않습니다. 그 반대도 마찬가지입니다BFC의 높이를 계산할 때 플로팅 요소도 계산에 참여합니다
BFC를 실행하는 방법은 무엇인가요?
루트 요소float 속성이 없음이 아닙니다위치가 절대 또는 고정입니다.디스플레이가 inline-block, table-cell, table-caption, flex, inline-flex오버플로가 표시되지 않습니다9 , 위치의 가치는 누구를 기준으로 상대적이고 절대적인가?
relative: 일반 문서 흐름에서 자체 위치를 기준으로 한 상대 위치 지정입니다. absolute: 최신 레벨 위치 지정이 정적이 아닌 상위 요소를 기준으로 위치 지정하는 절대 위치 지정을 생성합니다. 수정됨: (이전 버전의 IE에서는 지원되지 않음) 브라우저 창이나 프레임을 기준으로 절대 위치 지정을 생성합니다. static: 기본값, 위치 지정 없음, 요소가 일반적인 문서 흐름에 나타납니다. sticky: 끈적한 위치 지정 요소를 생성하고 컨테이너의 위치는 일반적인 문서 흐름을 기반으로 계산됩니다.10. CSS 선택자는 무엇인가요? 어떤 속성을 상속받을 수 있나요? 우선순위 알고리즘은 어떻게 계산되나요? CSS3의 새로운 의사 클래스는 무엇입니까?
선택기:
id 선택기(#myId) 클래스 선택기(.myClassName) 태그 선택기(div, p, h1) 인접 선택기(h1 + p)하위 선택기(ul > ; li) 하위 항목 선택자(li a) 와일드카드 선택자(*) 속성 선택자(button[disabled="true"]) 의사 클래스 선택자(a :hover,li:nth-child)
우선순위
!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数据并执行回调函数,从而解决了跨域的数据请求。
通过动态