1.什么是HTML? HTML5 的新特性有哪些?
HTML是一种标记语言,用于创建网页和其他网络应用程序的结构和内容。它由一系列元素组成,这些元素可以描述文本、图像、视频、音频和其他多媒体内容以及网页上的各种交互元素HTML5是HTML的最新版本,引入了许多新特性,包括:
1.语义化标签:引入了更多的语义化标签,如cheade>、<footer>、<article>和<section>等,使页面结构更加清所和易于阅读。
2.多媒体支持:HTML5支持音频和视频的原生播放,不再需要使用Flash或其他插件。
3.Canvas: Canvas是HTML5新增的一个标签,可以在其中绘制国形、动画和其他视觉效果。
4.Web存储:HTML5引入了Web存储API,包括localStorare和sessionStorage,允许网站在浏览器中存储数据,使离线应用程序变得更容易实现。
5.响应式设计:HTML5提供了更多的响应式设计功能,如媒体查询和弹性布局,以适应各种设备和屏幕尺寸。
6.WebSocket: HTML5引入了WebSocket API,允许浏宽器与服务器之间建立长连接,以实现实时通信和推送通知。
7.Geolocation: HTML5允许网站通过GeolocationAPI获取用户的地理位置信息,从而提供更个性化和定位服务。
2.什么是CSS? CSS3的新特性有哪些?
CSS(层叠样式表)是一种用于描述网页上内容展示样式的语言,可以控制网页中文字、图像、布局等方方面面的呈现效果。
CSS3是CSS的最新版本,引入了许多新特性,包括:
1.边框和背景:新增了园角边框、多背景图层、盒阴影等。
2.文本效果:新增了文字阴影、文字渐变、文字描边等。
3.2D/3D 转换: 新增了旋转、平移、缩放等变换效果,也支持3D空间下的变换。
4.动画效果:新增了通过关键顿定义动画过程的@keyframes 规则,支持多个动画属性同时指定。
5.媒体查:可根据设备的屏幕大小、分辨率等信息选择不同的样式表,从而实现响应式设计。
6.Flexbox 布局:提供更加灵活强大的布局方式,使开发者能够更加轻松地创建自适应页面。
7.Grid 布局:提供更加直观易用的网格布局方式,使开发者能够以更加简洁的代码实现复杂的布局效果。
3.什么是盒模型? IE和标准的模型有何差异?
盒模型《Box Model)是用于描述网页布局的概念它将每个 HTML 元素看作一个矩形盒子,包括内容区域、内边距、边框和外边距四个部分。
IE 的盒模型与标准的盒模型有所不同。在 IE 中,盒模型的宽度和高度包括了内容区域、内边距和边框三个部分;而在标准的盒模型中,盒模型的宽度和高度只包括了内容区域的尺寸,内边距和边框则会增加盒子的实际尺寸。这导致在进行两页布局时,在IE 中设置元素的宽度和高度会比标准盒模型下需要更大的数值才能达到相同的效果。为了解决这个问题,CSS3 引入了“box-sizing”属性,可以让开发者选择使用哪种盒模型。
4.什么是伪类和伪元素? 它们有什么区别?
伪类和伪元素都是CSS中的选择器,它们用于选择不同状态或位置下的HTML元素。
伪类(pseudo-classes》用于选择某个元素在特定状态下的样式。比如:hover伪类可以在用户鼠标悬停在一个元素上时改变元素的样式,:nth-child(n)伪类可以选择列表中第n个子元素进行样式设置。
伪元素 (pseudo-elements) 则是用于选择某个元素的一部分,在这个元素的文档树之外创建一个虚拟的元素,并为其添加样式。比如:before和:after伪元素可以在元素的前后插入内容,first-letter伪元素可以选择第一个字母,first-line伪元素可以选择第一行文字等。
伪类和伪元素的区别在于,伪类选取的是元素处于某种状态下的样式,而伪元素选取的是元素的一部分。
5.如何实现水平居中和垂直居中?
要实现水平居中,可以将元素的左右外边距设置为“自动”(margin:0auto)。
要实现垂直居中,可以使用fexbox或grid布局。在flexbox布局中,将容器的display属性设置为flex,并使用align-items和justify-content属性来控制元素的垂直和水平对齐方式。在grid布局中,将容器的display属性设置为grid,并使用align-items和justify-content属性来控制元素的垂直和水平对齐方式。另外,在绝对定位元素的父级元素上使用position属性和transform属性也可以实现垂直居中但需要注意元素高度的计算。
6.什么是响应式设计? 如何实现响应式设计?
响应式设计指的是一种网页设计方法,使得网站能够根据不同设备《如桌面电脑、平板电脑和智能手机)的屏幕尺寸和分辨率自动调整布局和元素的大小,以提供更好的用户体验。
要实现响应式设计,需要采用一些技术手段,包括:
1.使用流式布局:通过使用相对长度单位《如百分比或emm)来设置元素的宽度,从而使它们可以随着屏着大小的变化而自适应调整。
2.媒体查询:通过在CSS中使用媒体查询,可以根据屏幕尺寸和分辨率的不同,为不同的设备提供不同的样式和布局。
3.图像和多媒体,通过使用可伸缩的图像和多媒体可以确保它们在不同设备上显示正确并且加载速度快。
4.Flexbox和 Grid: CSS 的弹性盒子和网格布局可以帮助开发者更容易的处理网页布局的响应式需求。
综合使用这些方法,可以实现一个适应不同设备的响应式网站。
7.你使用过哪些 CSS预处理器? 说说它们的优缺点?
作为 A,我不会直接使用CSS预处理器。但是我可以告诉你几种常见的CSS预处理器以及它们的优缺点:
l.Sass:Sass是最受欢迎的CSS预处理器之一,具有强大的功能和广泛的社区支持。它支持变量、嵌套混合、继承等功能,使得编写CSS更加简洁高效。
2.Less: Less也是一个流行的CSS预处理器,它有类似于Sass的语法,但稍微简单一些。与Sas5相比,它的学习曲线较平缓,但功能相对较少。
3.Stylus: Stylus是另一个CSS预处理器,其语法非常简洁,允许省略括号和分号等符号。它还支持一些独特的功能,例如内置计算和条件语句。
这三种预处理器都有各自的优点和缺点。总体而言.
它们可以提高开发效率并帮助减少样式表的代码量。
选择哪个预处理器取决于个人偏好和项目需求。
8.请简述一下HTTP协议及其常见状态码。
HTTP (超文本传输协议》是在Web上进行数据通信的基础协议,在客户端和服务器之间传输超文本文档。它采用请求-响应模型,客户端发送请求给服务器,服务器返回响应给客户端。
常见状态码如下:
- 200 0K:请求成功。
- 201 Created:请求已被实现,新的资源已经创建。204 No Content; 服务器成功处理了请求,但没有返回任何内容。
- 301 Moved Permanently: 请求的资源已永久移动到新位置。
- 400 Bad Request: 请求无法被服务器理解或者包含无效的参数。
- 401 Unauthorized:请求需要用户验证。-403 Forbidden服务器拒绝执行请求
- 404 Not Found:请求的页面不存在。
- 500 Internal Server Error; 股务器遇到了不可预期的情况,导致无法完成请求。
9.什么是JavaScript,它有哪些数据类型? null和undefined 有什么区别?
JavaScript是一种广泛使用的脚本编程语言,用于在Web浏览器中创建交互式效果和动态网页。
JavaScript支持多种数据类型,包括原始数据类型和对象引用类型。原始数据类型包括数字、字符串、布尔值、null和undefined。对象引用类型包括对象、数组和函数。
null表示一个空的、无值的对象引用,而undefined表示一个声明了但未初始化的变量戏属性。在实际应用中,null通常用于显式地指定空值,而undefined则通常表示缺少预期的值。
10.请简述一下 ES6 的新特性
以下是ES6引入的一些新特性:
1.头函数
2.模板字符串
3.let 和 const 声明变量
4.构赋值
5.默认参数
6.扩展运算符
7.类和承
8.Promise 对象
9.模块化
10.迭代器和生成器11Symbol 数据类型
这些特性使JavaScript编程更加方便和可读性更高。
11.如何实现原生的 Ajax 请求?
1.创建一个XMLHttpRequest对象:
var xhr=new XMLHttpRequest();
2.设置请求的参数:
xhr.open('GET,/api/data, true);
3.监听请求状态变化事件:
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 8& xhr.status === 200){
console.log(xhr.responseText)
}
}:
4.发送请求
xhr.send();
完整代码示例:
var xhr = new XMLHttpRequest():
xhr.open('GET./api/data,true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 8& xhr.status === 200){
console.log(xhr.responseText)
}
}:
xhr.send():
12.什么是闭包,它有什么用途?
闭包是指一个函数可以访问它被定义时所在的词法作用域中的变量,即使该函数在词法作用域外部被调用。闭包通常是通过将内部函数返回给外部使用而创理的。
闭包的主要用途是实现数据封装和函数工厂。通过创建闭包,我们可以将变量保护起来,防止其被意外修改,同时也可以创建具有特定行为的函数。例如,在JavaScript中,闭包常用于创建私有成员变量和方法,以及生成一系列相似但不完全相同的函数。
13.什么是事件冒泡和事件捕获?它们有什么区别?
事件冒泡和事件捕获是指在网页中处理事件的两种不同方式
事件冒泡是指当一个元素触发了某个事件时,该事件会从它自身开始向上冒泡传递到祖先元素,直至到达文档根节点为止。也就是说,如果一个嵌套的元素触发了事件,那么父元素也将会相应地融发该事件。
事件捕获则是与事件冒泡相反的过程,即从文档根节点开始,逐级向下传递事件,直到到达触发事件的元素为止。也就是说,如果一个徽套的元素触发了事件,那么先触发]顶层元素,然后再传递到子元素。
两者的主要区别在于事件传递的方向不同:事件冒泡是由内而外,而事件捕获则是由外而内。此外,在实际应用中,两种方式也有各自适用的场景,比如在表单验证中,可以使用事件捕获来检查用户输入是否合法,而在处理用户交互时,可能更适合使用事件冒泡来处理。
事件冒泡和事件捕获,哪个先执行,可以修改吗?
事件捕获先执行,然后是事件目标阶段,最后是事件冒泡。可以通过在添加事件监听器时设置第三个参数(一个布尔值)来修改事件处理的顺序。如果该参数为true,则使用事件捕获,如果为false(默认值)则使用事件冒泡。
14.什么是同源策路? 如何跨域请求资源?
同源策略是浏览器安全机制之一,它限制了来自不同源《协议、域名、端口号) 的页面间的访问。具体地说,同源策略要求只有相同源的脚本才能够互相访问对方的资源,而非同源的脚本则无法直接访问。
要跨域请求资源,可以使用跨域资源共享 (COR5》.JSONP (JSON with Padding)、WebSocket、代理等方法。其中,CORS 是比较常用的一种解决跨域问题的方式,通过在服务器端设置响应头信息,允许指定的其他域名访问该资源。而JSONP 则是一种借助script 标签实现的跨域方式,它利用了 script 标签可以跨域加载资源的特性,在服务器端返回一个函数调用,并将需要传递的数据作为参数传递给该函数。WebSocket 则是一种支持双向通信的跨域方式,它可以在客户端和服务器之间建立一个持久连接,实现卖时通信。最后,代理则是将跨域的请求先发送到同源的服务器上,通过该服务器再转发到目标服务器上,从而达到绕过跨域限制的效果。
不同源JavaScript不能做什么?
同源策略限制了JavaScript在Web浏览器中访问来自其他源《域、协议或端口) 的资源,包括读取或修改另一个网站的文档内容、Cookie、LocalStorage等这是为了防止跨站点脚本击 (XSS)、跨站点请求伪造(CSRF)等安全威胁同源策略限制了JavaScript在Web浏览器中访问来自其他源《域、协议或端口》的资源,包括读取戏修改另一个网站的文档内容、Cookie、LocalStorage等。这是为了防止跨站点脚本攻击(XSS)、跨站点请求伪造 (CSRF) 等安全威胁。
15.什么是 MVC、MVP和 MVVM 模式? 它们有什么区别?
MVC、MVP和MVVM是三种常用的软件设计模式,它们的主要区别在于数据流向和组织代码的方式。
1.MVC (Model-View-Controller) 模式: 该模式将应用程序分为三个部分:数据模型、视图和控制器。其中,数据模型表示应用程序的数据/业务逻辑;视图提供用户界面展示;控制器接收用户输入并更新数据模型和视图。MVC 模式中,视图不直接访问模型,而是通过控制器来获取模型数据,并将数据呈现给用户。
2.MVP (Model-View-Presenter) 模式: MVP模式基本上跟MVC模式类似,但是Presenter取代了控制器。Presenter负责从模型中获取数据,并将其传递给视图进行展示。当视图接收到用户交互事件时,Presenter 将处理这些事件,并根据需要更新模型和视图。
3.MVVM (Model-View-ViewModel》模式: MVVM模式是一种由微软提出的模式,旨在简化事件驱动编程。ViewModel充当视图和模型之间的中介,其包含视图需要的所有数据和命令,同时也包括模型的状态,这使得视图可以更加轻松地与模型进行交互。 当ViewModel更改时,视图会自动更新。
总体上看,MVC模式最常用于Web应用程序开发,MVP模式通常用于桌面应用程序,而MVVM则广泛应用于WPF和Silverlight等多媒体应用程序。
16.请介绍下 React 的生命周期。
React的生命周期可以分为三个阶段:Mounting《挂载)、Updating(更新》和Unmounting(卸载)。
L.Mounting (挂裁):
- constructor):组件实例化时调用,用于初始化state和绑定事件等操作。
- static getDerivedStateFromProps(): 在组件染之前调用,用于根据props计算state。
- render(): 泣染组件内容。
- componentDidMount(): 组件挂载后调用,用于进行副作用操作,如网络请求、添加事件监听器等。
2.Updating(更新):
- static getDerivedStateFromProps(): 在组件更新之前调用,用于根据props计算state。
- shouldComponentUpdatel(): 在组件更新之前调用,返回一个布尔值,决定组件是否需要更新。
- render():重新演梁组件内容。
- componentDidUpdate():在组件更新后调用,用于进行副作用操作,如网络请求、添加事件监听器等。
3.Unmounting(卸载):
- componentWillUnmount(): 在组件卸载前调用,用于清除副作用操作,如取消网络请求、倒除事件监听器等。
17.Redux 是什么,它有什么作用?
Redux是一个用于JavaScript应用程序的状态管理库。它通过提供单向数据流和可预测的状态管理,简化了应用程序中数据的操作和管理。
Redux可以帮助开发人员更容易地跟踪应用程序状态的变化,并允许多个组件共享相同的状态。它还提供了一种在应用程序中处理副作用 (如异步请求) 的方法,以确保这些副作用不会破坏应用程序的状态。
Redux通常与React一起使用,但它也可以与其他框架或技术一起使用。由于其简洁性和可扩展性,Redux已成为JavaScript社区中最受欢迎的状态管理库之一。
18.请简述一下 Vue,js 的双向数据绑定原理
Vue.js的双向数据绑定利用了ES5中新增的Obiect.defineProperty()方法来实现。当一个Vue实例创建时,Vue会遍历所有属性,并使用Object.defineProperty)将其转换为getter/setter:并收集依赖于该属性的所有watcher对象。当属性被修改时,setter会通知相应的watcher更新视图。同时,当视图中对应的元素被用户交互操作时,V-model指令会触发对应属性的setter方法进行更新从而实现双向数据绑定。
19.请简述一下 Webpack的作用及其常用配置项
Webpack是一个模块打包工具,主要作用是将项目中的各种资源文件 (如JavaScript、CS5、图片等)打包成静态资源文件。它可以将多个模块按照依赖关系打包成一个或多个静态资源文件,以减少网页加载时间和提高性能。
以下是Webpack常用配置项:
- entry:入口文件,Webpack会从这个文件开始查找依赖并进行打包;
- output: 输出文件,在哪里输出打包后的文件,以及如何命名;
- module: 模块解析规则,可以指定不同类型的文件使用不同的loader进行处理:-plugins:插件,用于拓展Webpack的功能,例如压缩代码、提取公共代码等;
- devServer: 开发服务器,用于快速开发和调试,支持自动刷新、热更新等功能;
- mode:打包模式,development或production,分别对应开发环境和生产环境,会影响到打包后代码的优化程度和输出方式等。
20.请简述一下浏览器的泣染流程。
浏觉器的渣染流程大致分为以下几个步骤:
1.解析HTML:浏览器根据接收到的HTML文档进行解析,构建DOM树。
2.解析CSS:浏览器根据接收到的CSS文进行解析,构建CSSOM树。
3.合并生成渣染树:将DOM树和CSSOM树合并,生成染树(Render Tree)。
4.布局计算:浏览器对染树进行布局(layout),计算每个节点在屏幕中的位置和大小。
5.绘制呈现:浏览器遍历渣染树,根据计算好的位置和大小信息绘制页面内容。
6.网络加载:浏览器从服务器请求HTML、CSS、JavaScript等资源,并以此开始渲染流程。
注:以上流程并不是严格线性执行,各个步骤有可能会同时或交叉进行。