前端面试八股文(超详细)

Promise 是一种为了避免回调地狱的异步解决方案 2. Promise 是一种状态机: pending(进行中)、fulfilled(已成功)和rejected(已失败) 只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

回调地狱

回调函数中嵌套回调函数的情况就叫做回调地狱。 回调地狱就是为是实现代码顺序执行而出现的一种操作,它会造成我们的代码可读性非常差,后期不好维护。

Promise是最早由社区提出和实现的一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和更强大。

ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。 ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。

promise是为解决异步处理回调金字塔问题而产生的

1、Promise对象的状态不受外界影响

1)pending 初始状态

2)fulfilled 成功状态

3)rejected 失败状态

Promise 有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态

2、Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成fulfilled或者由pending变成rejected

1)无法取消Promise,一旦新建它就会立即执行,无法中途取消 2)如果不设置回调函数,Promise内部抛出的错误,不会反映到外部 3)当处于pending状态时,无法得知目前进展到哪一个阶段,是刚刚开始还是即将完成

1)onResolvedCallbacks 成功后要执行的回调序列 是一个数组

2)onRejectedCallbacks 失败后要执行的回调序列 是一个数组

以上两个数组存放在Promise 创建实例时给Promise这个类传的函数中,默认都是空数组。 每次实例then的时候 传入 onFulfilled 成功回调 onRejected 失败回调,如果此时的状态是pending 则将onFulfilled和onRejected push到对应的成功回调序列数组和失败回调序列数组中,如果此时的状态是fulfilled 则onFulfilled立即执行,如果此时的状态是rejected则onRejected立即执行

上述序列中的回调函数执行的时候 是有顺序的,即按照顺序依次执行

2、箭头函数 ES6 中,箭头函数就是函数的一种简写形式,使用括号包裹参数,跟随一个 =>,紧接着是函数体:

3、函数默认参数值

ES6 中允许你对函数参数设置默认值:

4、对象超类

ES6 允许在对象中使用 super 方法:

5、Map VS WeakMap

ES6 中两种新的数据结构集:Map 和 WeakMap。事实上每个对象都可以看作是一个 Map。

一个对象由多个 key-val 对构成,在 Map 中,任何类型都可以作为对象的 key,如:

6、类

ES6 中有 class 语法。值得注意是,这里的 class 不是新的对象继承模型,它只是原型链的语法糖表现形式。

函数中使用 static 关键词定义构造函数的的方法和属性:

不同点:var 在ECMAScript 的所有版本中都可以使用,而const和let只能在ECMAScript6【ES2015】及更晚中使用

var

let

const

原型链继承

父类的实例作为子类的原型

优点:

简单易于实现,父类的新增的实例与属性子类都能访问

缺点:

可以在子类中增加实例属性,如果要新增加原型属性和方法需要在new 父类构造函数的后面

无法实现多继承

创建子类实例时,不能向父类构造函数中传参数

借用构造函数继承(伪造对象、经典继承)

复制父类的实例属性给子类

优点:

解决了子类构造函数向父类构造函数中传递参数

可以实现多继承(call或者apply多个父类)

缺点:

方法都在构造函数中定义,无法复用

不能继承原型属性/方法,只能继承父类的实例属性和方法

实例继承(原型式继承)

优点:

不限制调用方式

简单,易实现

缺点:不能多次继承

undefined和null的区别:. ● undefined 表示一个变量没有被声明,或者被声明了但没有被赋值(未初始化),一个没有传入实参的形参变量的值为undefined,如果一个函数什么都不返回,则该函数默认返回undefined。. null 则表示"什么都没有",即"空值"。. ● Javascript将未赋值的变量默认值设为 undefined ;Javascript从来不会将变量设为 null 。. 它是用来让程序员表明某个用var声明的变量时没有值的;

apply接受两个参数,第一个参数是this的指向,第二个参数是函数接受的参数,以数组的形式传入,且当第一个参数为null、undefined的时候,默认指向window(在浏览器中),使用apply方法改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次。

call方法的第一个参数也是this的指向,后面传入的是一个参数列表(注意和apply传参的区别)。当一个参数为null或undefined的时候,表示指向window(在浏览器中),和apply一样,call也只是临时改变一次this指向,并立即执行。

bind方法和call很相似,第一参数也是this的指向,后面传入的也是一个参数列表(但是这个参数列表可以分多次传入,call则必须一次性传入所有参数),但是它改变this指向后不会立即执行,而是返回一个永久改变this指向的函数。

其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而浏览器缓存则主要由前端开发在前端js上进行设置。

缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。

​ 对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据。

①不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求

②存在该缓存结果和缓存标识,但该结果已失效,强制缓存失效,则使用协商缓存

③存在该缓存结果和缓存标识,且该结果尚未失效,强制缓存生效,直接返回该结果

①协商缓存生效,返回304

②协商缓存失效,返回200和请求结果

立即执行版的意思是触发事件后函数会立即执行,然后 n 秒内不触发事件才能继续执行函数的效果。

**所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。**节流会稀释函数的执行频率。

要理解闭包,首先要理解 JavasSript 的特殊的变量作用域。

变量的作用域无非就两种:全局变量和局部变量。

JavasSript 语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。

2、如何从外部读取函数内部的局部变量?

出于种种原因,我们有时候需要获取到函数内部的局部变量。但是,上面已经说过了,正常情况下,这是办不到的!只有通过变通的方法才能实现。

那就是在函数内部,再定义一个函数。

在上面的代码中,函数 f2 就被包括在函数 f1 内部,这时 f1 内部的所有局部变量,对 f2 都是可见的。但是反过来就不行,f2 内部的局部变量,对 f1 就是不可见的。

这就是 JavasSript 语言特有的"链式作用域"结构(chain scope),

子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

既然 f2 可以读取 f1 中的局部变量,那么只要把 f2 作为返回值,我们不就可以在 f1 外部读取它的内部变量了吗!

上面代码中的 f2 函数,就是闭包。

各种专业文献的闭包定义都非常抽象,我的理解是: 闭包就是能够读取其他函数内部变量的函数。

由于在 JavaScript 中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成"定义在一个函数内部的函数"。

所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在 f1 调用后被自动清除。

为什么会这样呢?原因就在于 f1 是 f2 的父函数,而 f2 被赋给了一个全局变量,这导致 f2 始终在内存中,而 f2 的存在依赖于 f1,因此 f1 也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

这段代码中另一个值得注意的地方,就是 “nAdd=function(){n+=1}” 这一行,首先在 nAdd 前面没有使用 var 关键字,因此 nAdd 是一个全局变量,而不是局部变量。其次,nAdd 的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以 nAdd 相当于是一个 setter,可以在函数外部对函数内部的局部变量进行操作。

不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象,后面的高阶方法会添加去掉重复“{}”的方法。

新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。

利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。

利用hasOwnProperty 判断是否存在对象属性

创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。

深拷贝和浅拷贝的示意图大致如下:

示意图

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

那什么是原型链呢?

简单理解就是原型组成的链,对象的__proto__它的是原型,而原型也是一个对象,也有__proto__属性,原型的__proto__又是原型的原型,就这样可以一直通过__proto__想上找,这就是原型链,当向上找找到Object的原型的时候,这条原型链就算到头了。

原型对象和实例之间有什么作用呢?

通过一个构造函数创建出来的多个实例,如果都要添加一个方法,给每个实例去添加并不是一个明智的选择。这时就该用上原型了。

在实例的原型上添加一个方法,这个原型的所有实例便都有了这个方法。

prototype:

prototype属性,它是函数所独有的,它是从一个函数指向一个对象。它的含义是函数的原型对象,也就是这个函数(其实所有函数都可以作为构造函数)所创建的实例的原型对象; 这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象);

proto:

proto 是原型链查询中实际用到的,它总是指向 prototype,换句话说就是指向构造函数的原型对象,它是**对象独有的。**注意,为什么Foo构造也有这个属性呢,因为再js的宇宙里万物皆对象,包括函数

constructor:

我们看到途中最中间灰色模块有一个constructor属性,这个又是做什么用的呢?** **

每个函数都有一个原型对象,该原型对象有一个constructor属性,指向创建对象的函数本身。

此外,我们还可以使用constructor属性,所有的实例对象都可以访问constructor属性,constructor属性是创建实例对象的函数的引用。我们可以使用constructor属性验证实例的原型类型(与操作符instanceof非常类似)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tbxes1Jd-1646559635648)(D:\Typora\原型链.png)]

目前所有的引擎都还没有实现import,import最终都会被转码为require,在webpack打包中,import和require都会变为_webpack_require_。

2.行内元素和块级元素有哪些 常见的内联元素: a - 锚点 select - 项目选择 span - 常用内联容器,定义文本内区块 strong - 粗体强调 img - 图片 input - 输入框 label - 表格标签 textarea - 多行文本输入框 br - 换行

常见的块级元素 div ul ,li 非排序列表 form - 交互表单 table - 表格 h1 -h6 标题 hr - 水平分隔线 p - 段落 dl -dt-dd - 定义列表 address - 地址 blockquote - 块引用 fieldset - form控制组

HTML标签名称作为选择器

口诀:样式#定义,结构id调用,只能调用一次,别人切勿使用

选取页面中所有元素(标签)

建立在基础选择器之上,对基础选择器进行组合形成的

只能选择某元素的最近一级的子元素

约定语法规范:并集选择器喜欢竖着写

可以为某些选择器添加一些特殊的效果

用于选取获得焦点的表单元素

一、px是固定的像素,一旦设置了就无法因为适应页面大小而改变。

二、em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定死了的,更适用于响应式布局。

三、em是相对于其父元素来设置字体大小的,一般都是以的“font-size”为基准。这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小。而Rem是相对于根元素,这样就意味着,我们只需要在根元素确定一个参考值

总之:对于em和rem的区别一句话概括:

em相对于父元素,rem相对于根元素。

相对定位下,使用绝对定位,利用margin偏移外容器的50%,再利用translate平移回补自身宽高的50%即可

利用textAlign:center实现行内元素的水平居中,再利用verticalAlign:middle实现行内元素的垂直居中,前提是要先加上伪元素并给设置高度为100%,用过elementUI的可以去看看其消息弹窗居中实现方式就是如此

上面都是在未知外容器和自身宽高下实现水平垂直居中的,如果已知其宽高,可以有更多种简单的方式实现居中,其原理无非是利用绝对定位的top/left偏移、margin偏移、padding填充,在此就不分析了。还有就是单纯文字的居中利用lineHeight和textAlign即可实现。

盒模型包括margin、border、padding、content四个部分,主要的设置属性是margin、border、padding。 盒子模型又分为两种W3C和IE盒子。

W3C的元素宽度=content的宽度 IE的元素宽度=content+padding+border

盒模型就是用来做容器,为了把内容打包和整理,为了不让页面显得杂乱无章。一个好的包装能够给用户不一样地体验。并且如果没有好的包装,再好的内容也不会也看下去的欲望。这就像一个干净整洁的桌面和堆满杂物的桌面给人的观感效果。 所以,合理灵活的应用好盒模型是前端的必要基础!!!

Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为 Flex 布局。

注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

以下6个属性设置在容器上。

第一种:开启BFC

根据W3C的标准,在页面中元素都有一个隐含的属性 Block Formatting Context,简称BFC,默认是关闭的;

开启元素BFC后,元素将会具有以下特性:

开启BFC的方法:。

** overflow【常见,副作用最小】**

overflow设置为非visible的值。推荐使用hidden(副作用最小)

a) auto (溢出显示滚动条)

b) scroll (默认就显示滚动条)

c) hidden (溢出隐藏)[常用]

注:但在IE6及以下的浏览器中不支持BFC,所以使用这种方式不兼容IE6。在IE6中有类似BFC的隐含属性 hasLayout,开启方式很多,推荐使用zoom:1

第二种:在浮动元素后添加元素,并设置其clear属性

第三种:br元素的clear属性

br元素本身没有高度,所以也就不会存在IE低版本下最小高度问题。只需要在浮动元素下添加一句 :

※第四种:after伪类【各大公司推荐】

可以通过after伪类向元素的最后添加一个空白的块元素,然后对其清除浮动,和第二种方法原理相同,可达到相同的效果,而且不会在页面中添加多余的div,这是最推荐的方式,几乎没有副作用

CSS3 是 CSS 规范的最新版本,在 CSS2.1 的基础上增加了很多强大的新功能,以帮助开发人员解决一些实际面临的问题,并且不再需要非语义标签、复杂的 JavaScript 脚本以及图片。 例如,CSS3 支持圆角、多背景、透明度、阴影、动画、图表等功能。 CSS1 和 CSS2.1 都是单一的规范,其中 CSS1 主要定义了网页对象的基本样式,如字体、颜色、背景、边框等,CSS2 添加了高级概念,如浮动、定位、高级选择器(如子选择器、相邻选择器和通用选择器等)。 整个 CSS3 的规范发布不会因为部分存在争论而影响其他模块的推进。 对于浏览器来说,可以根据需要,决定哪些 CSS 功能被支持。

静态布局是最为原始的布局方式,没有什么技术性可言,往往是计算机行业刚刚入门的小白使用的布局方式。制作的网页上的元素尺寸一律以px为单位

布局特点: 页面上的布局是按最初写代码时候的布局方式进行布局的,常规的pc网站是进行设置了宽度值进行布局的,不会随着pc端的屏幕的大小而变化。 优点: 这种布局方式不管是对资深的前端开发工程师还是刚入门的小白来说都是最简单的,最让人容易以接受、学习的,没有我们所说的兼容性的问题。这种布局方式大多用在门户网站和企业的官网上,这些官网的设备的尺寸是固定的,这种布局方式往往是最简单的方法。 缺点: 不会随着pc端的屏幕大小而变化。

弹性布局可以简便、完整、响应的实现各种页面上的布局。与静态不同的是,使用em或rem单位(lem=16px,1rem=10px)进行相对布局,相对使用百分比更加方便、灵活,相应同时支持浏览器的字体大小调整和缩放的等正常显示。 优点: 1.适应性强,在做多种不同的屏幕分辨率不同的界面是非常使用。 2.随意按照宽度、比例划分元素的宽高。 3.可以轻松的改变元素的显示顺序。 4.网页布局实现快捷,维护起来更加容易。 如果做移动端时,如果客户对细微的之处的要求不高,使用弹性布局进行制作是最好的选择,一份css+一份js调节font-size搞定。 缺点: 浏览器兼容性较差,只能兼容到IE9及以上。

自适应布局分别为不同屏幕不同分辨率定义布局,即是创建多个静态页面,每个静态页面对应一个屏幕分辨率的一个范围内。在改变不同的屏幕分辨率可以切换到不同的静态布局上,但是布局中的元素位置会发生改变,但是在每个静态布局中,页面中的元素不会随着窗口大小的调整发生变化。使用 @media 媒体查询给不同尺寸和介质的设备切换不同的样式。在优秀的响应范围设计下可以给适配范围内的设备最好的体验,在同一个设备下实际还是固定的布局。 优点: 1.对网站的复杂程度兼容性更大; 2.对开发工程师来说制作的成本代价更低; 3.代码执行效果更高效; 4.测试时更加容易,运营相对更加精准。 缺点: 在现如今的移动端设计百花齐放的时期之下,同一个网站往往需要为不同的设备制作不同的页面,不但会增加开发成本,还会因为客户的需求改变时,可能会改动多套代码、流程相比较来说较繁琐。

流式布局的布局方式是页面的元素的宽度按照屏幕的分辨率进行适配的调整,但是整体布局不变,也称之为栅栏系统。使用%百分比定义宽度,高度大都是用px来固定住,可以根据可视区域 (viewport) 和父元素的实时尺寸进行调整,尽可能的适应各种分辨率。往往配合 max-width/min-width 等属性控制尺寸流动范围以免过大或者过小影响阅读。 缺点: 屏幕大小变化时,页面元素也随之变化但是布局不变。这就会因为如果屏幕太大或太小都会布局时元素无法正常显示。

响应式布局是css3增加的新布局方式,该布局方式2010年提出来的一个概念,说白了就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念是为解决移动互联网浏览而诞生的。响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验,而且随着目前大屏幕移动设备的普及,用“大势所趋”来形容也不为过。响应式几乎成为优秀页面布局的标准。 设计方法: 媒体查询+流式布局。通常使用@media媒体查询,和网格系统配合相对布局单位进行布局,实际上说白了就是综合响应式等技术通过css给单一网页不同设备分辨率返回不式时的技术。 优点: 适应pc端和移动端,如果有足够的耐心,页面效果会很完美。 缺点: 1.只能适应主流的宽高; 2.如果匹配足够多的设备屏幕的大小,对于工程师来说工作量不小,设计更需要多个版本,工作量增大。

浮动布局进行调用浮动属性改变页面中元素的位置,浮动布局应该是目前各大网站用的最多的一种布局方式了,但是也特别复杂。浮动元素是脱离文档流的,但不脱离文本流。浮动元素有左浮动(float : left)和右浮动(float : right)两种

优点: 兼容性比较好缺点: 浮动带来的影响比较多,页面宽度不够的时候会影响布局。

定位布局时利用position属性控制页面元素设置一些不规则布局。

我们的优化原则有以下几个:

能缓存的,尽量强缓存。

引入外部资源时不要出现超时、404的状况。

减少HTTP请求数。

合理利用懒加载

1、懒加载数据。 首先根据标签的left和top属性判断是否显示在了屏幕中(如果显示在屏幕中,其left和top属性值应该是在0到窗口长宽之间)。 如果显示在屏幕中,则将src标签的内容替换为图片的url。

2、使用外部引入的css和js文件,并且引入的css和js越少越好(HTTP2.0不适用)。 这里可以使用webpack打包这些文件,也可以使用强缓存与协商缓存来缓存这些文件。

4、避免重定向。 重定向会重新渲染网页。

5、尽量不要用iframe。 因为iframe会阻塞渲染。

6、使用base64编码将图片嵌入到样式表中,减少请求数(由于base64会比一般的图片大一点,只适用于那些体积比较小但是很常用的图片)。

7、使用雪碧图(精灵图): 通过使用background-position:-xpx -ypx;来调整图片的位置,不过HTTP2不适用,原因为HTTP2实际上是多路复用的,只用一个TCP连接,所以多个图片的请求也是在同一个TCP连接里,这样能省下非常多的请求时间,但坏处就是单连接开销很大,如果要传多个大文件,就很麻烦。

如果没有小图标,会引起404,拖慢网页加载进度。 9、能使用jpeg就不要用png,能使用png8就不要用png24。 (1)色彩丰富的、大的图片切成jpg的; (2)尺寸小的,色彩不丰富的和背景透明的切成gif或者png8的; (3)半透明的切成png24。

10、使用canvas压缩图片。

1、避免使用@import。 使用@import相当于将引入的css放在了页面底部,因为使用@import引用的文件只有在引用它的那个css文件被下载、解析之后,浏览器才会知道还有另外一个css需要下载,这时才去下载,然后下载后开始解析、构建render tree等一系列操作。因此使用@import会拖慢渲染的过程。

2、将样式表放在head中。 如果放在body中,可能出现在浏览器下载好css样式表之前,组件就已经加载好了的情况,这可能会导致重新渲染。

3、避免使用css表达式。 如:expression((new Date()).getHours()%2 ? “#B8D4FF” : “#F08A00” ); 解析表达式和计算都需要时间。

1、尽量减少DOM访问。

2、使用事件代理(减少DOM操作)。

3、把脚本放在底部(加载脚本时会阻塞页面渲染)。

4、合理使用节流函数和防抖函数。

CDN即内容分发网络。它依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

针对webpack打包优化主要是减少打包后的代码体积,主要的措施有: 1、进行tree-shaking 2、使用UglifyJS等插件压缩代码 3、分割代码、按需加载

我们可以使用webpack-bundle-analyzer这个插件来查看每部分代码的加载耗时,进而分析可以优化的地方

html5总的来说比html4多了十个新特性,但其不支持ie8及ie8以下版本的浏览器

一、语义标签

二、增强型表单

三、视频和音频

四、Canvas绘图

五、SVG绘图

六、地理定位

七、拖放API

八、WebWorker

九、WebStorage

十、WebSocket

1.不同浏览器的标签默认的外补丁(margin)和内补丁(padding)不同

解决方案:css里增加通配符*{margin:0;padding:0}

解决方案:设置display:inline;

3.当标签的高度设置小于10px,在IE6、IE7中会超出自己设置的高度

解决方案:设置display:inline;

4.图片默认有间距

解决方案:使用float为img布局

6.边距重叠问题;

解决方案: 当相邻两个元素都设置了margin边距时,margin将取最大值,舍弃最小值;

解决方案:统一使用cursor:pointer;

8.两个块级元素,父元素设置了overflow:auto;子元素设置了position:relative;且高度大于父元素,在IE6、IE7会被隐藏而不是溢出;

解决方案:父级元素设置position:relative

说明:Firefox下,可以使用const关键字来定义常量;IE下,只能使用var关键字来定义常量。

解决方法:统一使用var关键字来定义常量。

问题说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性。

11.事件绑定

标准浏览器采用事件捕获的方式对应IE的事件冒泡机制(即标准由最外元素至最内元素或者IE由最内元素到最外元素)最后标准方亦觉得IE这方面的比较合理,所以便将事件冒泡纳入了标准,这也是addEventListener第三个参数的由来,而且事件冒泡作为了默认值。

12.操作tr的html

在ie9以下,不能操作tr的innerHTML

IE:ActiveXObject

其他:xmlHttpReuest

14.对象宽高赋值问题

解决方法: 统一使用pointer

2. innerText在IE中能正常工作,但在FireFox中却不行.

需用textContent。

3. CSS透明

FF:opacity:0.6。

4. css中的width和padding

在IE7和FF中width宽度不包括padding,在Ie6中包括padding.

5. FF和IEBOX模型解释不一致导致相差2px

状态管理模式。

把组件的共享状态抽取出来,以一个全局单例模式管理。在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为!这就是“状态管理模式”。

应用场景有:单页应用中,组件之间的数据状态。 应用实例: 1、购物车功能; 2、下单页面有选择优惠券按钮,点击进入优惠券页面,选择后返回到下单页,数据会绑定回来,显示已选择的优惠券; 3、登录状态等等

有五种,分别是 State、 Getter、Mutation 、Action、 Module

1、Vuex就是一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于一般Vue对象里面的data

2、state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新

3、它通过mapState把全局的 state 和 getters 映射到当前组件的 computed 计算属性中

1、getters 可以对State进行计算操作,它就是Store的计算属性

2、虽然在组件内也可以做计算属性,但是getters 可以在多组件之间复用

3、如果一个状态只在一个组件内使用,是可以不用getters

Action 类似于 mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态;Action 可以包含任意异步操作。

Module 可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

1、多层嵌套的组件、兄弟组件间的状态会更好管理维护。 2、缓存一些当前要使用请求远程或本地的数据集(刷新后会自己销毁)。 3、有了第二条,就可以减少向服务器的请求,节省资源。如果你的用户足够多,那么每多出一个请求,对公司来说,都是一大笔钱。 4、对开发者来说,如果你的项目足够复杂,团队的规模也不仅是一个人,数据集中处理更利于程序的稳定和维护

以往的MVC模式是单向绑定,即Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新

MVVM模式就是Model–View–ViewModel模式。它实现了View的变动,自动反映在 ViewModel,反之亦然。对于双向绑定的理解,就是用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。再说细点,就是在单向绑定的基础上给可输入元素input、textare等添加了change(input)事件,(change事件触发,View的状态就被更新了)来动态修改model。

vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的

我们已经知道实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器Observer和订阅者Watcher之间进行统一管理的。接着,我们还需要有一个指令解析器Compile,对每个节点元素进行扫描和解析,将相关指令(如v-model,v-on)对应初始化成一个订阅者Watcher,并替换模板数据或者绑定相应的函数,此时当订阅者Watcher接收到相应属性的变化,就会执行对应的更新函数,从而更新视图。

MVC模式

以往的MVC模式是单向绑定,即Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新

MVVM模式

MVVM模式就是Model–View–ViewModel模式。它实现了View的变动,自动反映在 ViewModel,反之亦然。对于双向绑定的理解,就是用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。再说细点,就是在单向绑定的基础上给可输入元素input、textare等添加了change(input)事件,(change事件触发,View的状态就被更新了)来动态修改model。

在MVVM框架下视图和模型是不能直接通信的,只能通过ViewModel进行交互,它能够监听到数据的变化,然后通知视图进行自动更新,而当用户操作视图时,VM也能监听到视图的变化,然后通知数据做相应改动,这实际上就实现了数据的双向绑定。并且V和VM可以进行通信。

MVVM模式的优点:

低耦合:View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

可重用性: 可以把一些视图逻辑放在一个ViewModel里面,让很多View重用这段视图逻辑。

独立开发: 开发人员可以专注于业务逻辑和数据的开发,设计人员可以专注于页面的设计。

MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用。

- MVC中Controller演变成MVVM中的ViewModel

-MVVM通过数据来显示视图层而不是节点操作

-MVVM主要解决了MVC中大量的dom操作使页面渲染性能降低,加载速度变慢,影响用户体验等问题。

computed: 是计算属性,依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值;

watch: 更多的是「观察」的作用,类似于某些数据的监听回调 ,每当监听的数据变化时都会执行回调进行后续操作;

运用场景:

(1)v-for 遍历必须为 item 添加 key

(2)v-for 遍历避免同时使用 v-if

v-for 比 v-if 优先级高,如果每一次都需要遍历整个数组,将会影响速度,尤其是当之需要渲染很小一部分的时候,必要情况下应该替换成 computed 属性

路由(Router)这个概念最先是后端出现的,是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源,请求不同的页面是路由的其中一种功能。

前端随着 ajax 的流行,数据请求可以在不刷新浏览器的情况下进行。异步交互体验中最盛行的就是 SPA —— 单页应用。单页应用不仅仅是在页面交互时无刷新的,连页面跳转都是无刷新的,为了实现单页应用,所以就有了前端路由。

一个基本的前端路由至少应该提供以下功能:

前端路由实现原理就是匹配不同的 url 路径,进行解析,然后动态的渲染出区域 html 内容。但是这样存在一个问题,就是 url 每次变化的时候,都会造成页面的刷新。那解决问题的思路便是在改变 url 的情况下,保证页面的不刷新。目前 Router有两种实现方式 History 和 hash。

1、GET方法

GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。

在GET请求的URL中发送查询字符串(名称/值对),需要这样写:

说明:

GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。

注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。

2、POST方法

POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。

POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。

3、HEAD方法

HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。

4、PUT方法

PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。

它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。

5、DELETE方法

DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。

6、CONNECT方法

CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。

7、OPTIONS方法

OPTIONS方法用来描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。

8、TRACE方法

TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。

GET是获取的意思,顾名思义就是获取信息。

GET是默认的HTTP请求方法。

GET方法把参数通过key/value形式存放在URL里面,如果参数是英文数字原样显示,如果是中文或者其他字符加密(Base64)URL长度一般有限制所以GET方法的参数长度不能太长。由于参数显示再地址栏所以不安全,一般需要保密的请求不使用GET。

POST是邮件的意思,顾名思义就像一封信一样将参数放在信封里面传输。它用于修改服务器上的数据,一般这些数据是应该保密的,就像信件一样,信的内容只能收信的人看见。例入当用户输入账号和密码登录时账号和密码作为参数通过HTTP请求传输到服务器,这时候肯定不能用GET方法将账号密码直接显示再URL上,这时候就应该用POST方法保证数据的保密性。

总之,两者之间没有本质区别,区别就在于数据存储的位置。各自有适用环境,根据需求选择合适的方法即可。

同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略来对脚本和请求进行校验,若不同源,则禁止使用。

那如果判断是否同源?主要根据三个维度,域名,协议,端口三个都相同才算同源。 举个 :

这个主要是为了防止恶意网站通过js获取用户其他网站的cookie等用户信息。

防止恶意网站通过iframe获取页面dom,从而窃取页面的信息。

防止恶意的请求攻击服务器窃取数据信息。

那是不是说非同源的请求就无法实现呢?也不是,这就引出了我们本文主要阐述的解决跨域请求问题的方法。

jsonp能实现跨域是利用了img、script和link标签自身的跨域能力。 我们知道当img或者script中的src是一个链接的时候,浏览器会请求这个链接获取资源,那么这个链接如果是跨域的,浏览器也会请求,从而达到了跨域请求的一个功能。

可以看到,我们创建一个script标签,将src改成我们要请求的接口,并将script添加在body中,那么当浏览器解析到这个script时,会想src对应的服务器发送一个get请求,并将参数带过去。 然后当浏览器接收到服务端返回的数据,就会触发参数中callbak对应的回调函数cb,从而完成整个get请求。

简单粗暴

①只支持get请求 ②需要后台配合,将返回结果包装成callback(res)的形式

那如果黑客植入script脚本通过jsonp的方式对服务器进行攻击,怎么办? 可以通过页面设置的内容安全协议csp进行防范。

cors 是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),它允许浏览器向跨源服务器发送XMLHttpRequest请求,从而克服了 AJAX 只能同源使用的限制 cors 需要浏览器和服务器同时支持,整个 CORS通信过程,都是浏览器自动完成不需要用户参与,对于开发者来说,cors的代码和正常的 ajax 没有什么差别,浏览器一旦发现跨域请求,就会添加一些附加的头信息 但是,cors不支持ie10及以下版本。

浏览器将cors请求分为简单请求和复杂请求。 简单请求则直接发送请求到服务器,只请求一次。 而复杂请求在正式请求前都会有预检请求,在浏览器中都能看到有OPTIONS请求,用于向服务器请求权限信息的,需要请求两次。

那如何区分是简单请求还是复杂请求呢?

简单请求必须要同时满足下面三个条件:

类型描述application/json消息主体是序列化后的 JSON 字符串application/x-www-form-urlencoded数据被编码为键值对。这是标准的编码格式multipart/form-data需要在表单中进行文件上传时,就需要使用该格式。常见的媒体格式是上传文件之时使用的text/plain数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符

application/json:

application/x-www-form-urlencoded:是Jquery的Ajax请求默认方式

不满足简单请求的条件,那么就是复杂请求。 复杂请求会在正式请求发送之前,先发一个预检请求进行校验,校验通过后才能进行正式请求。 举个 浏览器现在要发送一个put的复杂请求,那么在put请求发送之前,浏览器先发送一个options请求。 options请求头信息:

服务器收到options请求以后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应 options响应头信息

当options请求通过之后发出正式的HTTP请求,倘若options请求不通过,则服务器不允许此次访问,从而抛出错误

options请求通过之后的,浏览器发出发请求

那这样的话,如果页面存在大量的复杂请求,岂不是每个请求前面都要进行一次options的请求,那不会造成大量资源的浪费么? 如果基于cors请求的方法来解决跨域问题,那么复杂请求之前是需要进行一个options的请求的,但我们可以通过对options请求进行缓存来减轻请求的压力。

在options请求中,我们可以通过设置响应头的参数Access-Control-Max-Age来对结果进行缓存 比如: Access-Control-Max-Age: 600 表示对options检验结果进行十分钟的缓存

该字段的兼容性如下:

其实nginx不仅仅只是用于解决跨域问题,而是涉及到很多服务器资源分配的处理,在此就不详细探讨了。

其实原理很简单,就是在我们使用npm run dev命中,启动了一个node服务,然后将前端发出的请求发送到node服务,再将该服务转发到原本的后台服务,在这过程中实现了一层代理,由一个node服务发送一个请求到另外一个后台服务,自然也没有了浏览器所限制的跨域问题。

1 浏览器根据请求的 URL 交给 DNS 域名解析,找到真实 IP ,向服务器发起请求;

2 服务器交给后台处理完成后返回数据,浏览器接收⽂件( HTML、JS、CSS 、图象等);

3 浏览器对加载到的资源( HTML、JS、CSS 等)进⾏语法解析,建立相应的内部数据结构 (如 HTML 的 DOM);

4 载⼊解析到的资源⽂件,渲染页面,完成。 ————————————————

客户端网址中输入url 将输入的url发送到DNS获得该域名对应的WEB服务器的ip地址 客户端游览器与WEB服务器建立TCP连接 客户端游览器向WEB服务器发送HTTP或HTTPS请求 WEB服务器响应请求,返回指定的URL数据或错误信息 客户端拿到WEB服务器的数据后解析源文件,进行页面排版,显示基础页面 分析页面中的超链接,渲染页面 ————————————————

详细简版: 1 从浏览器接收 url 到开启⽹络请求线程(这⼀部分可以展开浏览器的机制以及进程与线程 之间的关系)

2 开启⽹络线程到发出⼀个完整的 HTTP 请求(这⼀部分涉及到dns查询, TCP/IP 请求,五层因特⽹协议栈等知识)

3 从服务器接收到请求到对应后台接收到请求(这⼀部分可能涉及到负载均衡,安全拦截以及后台内部的处理等等)

4 后台和前台的 HTTP 交互(这⼀部分包括 HTTP 头部、响应码、报⽂结构、 cookie 等知 识,可以提下静态资源 的 cookie 优化,以及编码解码,如 gzip 压缩等)

7 CSS 的可视化格式模型(元素的渲染规则,如包含块,控制框, BFC , IFC 等概念) JS 引擎解析过程( JS 的解释阶段,预处理阶段,执⾏阶段⽣成执⾏上下⽂, VO ,作 ⽤域链、回收机制等等)

8 其它(可以拓展不同的知识模块,如跨域,web安全, hybrid 模式等等内容)

Internal Server Error 500内部服务器错误,服务器遇到未知无法解决的问题。

一般情况下,出现500响应状态的原因有很多种,但是主要的是“程序代码和服务器配置”两个问题。相对于代码而言,就是对站点进行升级,网页改版,新增加了一些常用的插件。就比如WordPress插件的版本可能就需要更高版本的PHP才能兼容。

而相对服务器而言的话,更多的是在系统版本升级导致,就比如最开始使用的是Windows Server 2003,后期想要升级2008、2012等版本的时候配置稍有不慎就会导致Internal Server Error 500。

Not Found 404 错误请求,因发送的请求语法错误,服务器无法正常读取。

相信绝大多数的人都见过404的状态码,当用户试图请求Web服务器上一个不存在的资源时,就会触发Not Found404。出现404状态码可能是链接失效导致,也有可能是URL拼写错误,还有可能是因为Web服务器将所请求的资源移到了其他的地方。一般的网站都会设置自定义页面以防链接失效所产生不良的影响。

Forbidden 403 禁止访问,客户端没有权利访问所请求内容,服务器拒绝本次请求。

状态码403通常代表客户端错误,是指的服务器端有能力处理该请求,但是拒绝授权访问。这个状态码类似于401,但是进入该状态后不能再继续进行验证,该访问是长期禁止的,并且与应用逻辑密切相关,比如密码不正确等。

Bad Request 400 错误请求,因发送的请求语法错误,服务器无法正常读取。

状态码400表示该语法无效,服务器无法理解该请求。客服端不应该在未经修改的情况下重复此请求。一般会因为前端提交数据的字段名称,或者是字段类型和后台的实体类不一致,导致无法封装。

Unauthorized 401 未经授权,需要身份验证后才能获取所请求的内容,类似于403错误.不同点是.401错误后,只要正确输入帐号密码,验证即可通过。

状态码401就是Web服务器认为,客户端发送的HTTP数据流浪是正确的,但是进入URL资源的时候需要身份验证,而客户端尚未提供相关的验证信息,或者是已提供但是没有通过验证。这也是通常所知的“HTTP基本验证”。

200 OK 请求成功,表示已经请求成功,默认情况下的状态码为200的响应就可以被缓存了。

不同请求方式对于请求成功的意义如下:

GET: 已经取得资源,并将资源添加到响应的消息体中。HEAD: 响应的消息体为头部信息。POST: 响应的消息体中包含此次请求的结果。TRACE: 响应的消息体中包含服务器接收到的请求信息。

PUT 和 DELETE 的请求成功通常并不是响应200OK的状态码而是 204No Content 表示无内容(或者 201Created表示一个资源首次被创建成功)。

Partial Content 206 部分内容,当客户端通过使用range头字段进行文件分段下载时使用该状态码。

状态码206表示服务器已经成功处理了部分GET请求。类似于FlashGet或者迅雷这类的HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。

Moved Permanently 301 永久移动,该状态码表示所请求的URI资源路径已经改变,新的URL会在响应的Location:头字段里找到。

Found 302临时移动,该状态码表示所请求的URI资源路径临时改变,并且还可能继续改变.因此客户端在以后访问时还得继续使用该URI.新的URL会在响应的Location:头字段里找到。

即使规范要求浏览器在重定向时保证请求方法和请求主体不变,但并不是所有的用户代理都会遵循这一点,你依然可以看到有缺陷的软件的存在。所以推荐仅在响应 GET 或 HEAD 方法时采用 302 状态码,而在其他时候使用 307 Temporary Redirect 来替代,因为在这些场景下方法变换是明确禁止的。

Bad Gateway 502 网关错误,服务器作为网关且从上游服务器获取到了一个无效的HTTP响应。

Not Found 404 错误请求,因发送的请求语法错误,服务器无法正常读取。

相信绝大多数的人都见过404的状态码,当用户试图请求Web服务器上一个不存在的资源时,就会触发Not Found404。出现404状态码可能是链接失效导致,也有可能是URL拼写错误,还有可能是因为Web服务器将所请求的资源移到了其他的地方。一般的网站都会设置自定义页面以防链接失效所产生不良的影响。

Forbidden 403 禁止访问,客户端没有权利访问所请求内容,服务器拒绝本次请求。

状态码403通常代表客户端错误,是指的服务器端有能力处理该请求,但是拒绝授权访问。这个状态码类似于401,但是进入该状态后不能再继续进行验证,该访问是长期禁止的,并且与应用逻辑密切相关,比如密码不正确等。

Bad Request 400 错误请求,因发送的请求语法错误,服务器无法正常读取。

状态码400表示该语法无效,服务器无法理解该请求。客服端不应该在未经修改的情况下重复此请求。一般会因为前端提交数据的字段名称,或者是字段类型和后台的实体类不一致,导致无法封装。

Unauthorized 401 未经授权,需要身份验证后才能获取所请求的内容,类似于403错误.不同点是.401错误后,只要正确输入帐号密码,验证即可通过。

状态码401就是Web服务器认为,客户端发送的HTTP数据流浪是正确的,但是进入URL资源的时候需要身份验证,而客户端尚未提供相关的验证信息,或者是已提供但是没有通过验证。这也是通常所知的“HTTP基本验证”。

200 OK 请求成功,表示已经请求成功,默认情况下的状态码为200的响应就可以被缓存了。

不同请求方式对于请求成功的意义如下:

GET: 已经取得资源,并将资源添加到响应的消息体中。HEAD: 响应的消息体为头部信息。POST: 响应的消息体中包含此次请求的结果。TRACE: 响应的消息体中包含服务器接收到的请求信息。

PUT 和 DELETE 的请求成功通常并不是响应200OK的状态码而是 204No Content 表示无内容(或者 201Created表示一个资源首次被创建成功)。

Partial Content 206 部分内容,当客户端通过使用range头字段进行文件分段下载时使用该状态码。

状态码206表示服务器已经成功处理了部分GET请求。类似于FlashGet或者迅雷这类的HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。

Moved Permanently 301 永久移动,该状态码表示所请求的URI资源路径已经改变,新的URL会在响应的Location:头字段里找到。

Found 302临时移动,该状态码表示所请求的URI资源路径临时改变,并且还可能继续改变.因此客户端在以后访问时还得继续使用该URI.新的URL会在响应的Location:头字段里找到。

即使规范要求浏览器在重定向时保证请求方法和请求主体不变,但并不是所有的用户代理都会遵循这一点,你依然可以看到有缺陷的软件的存在。所以推荐仅在响应 GET 或 HEAD 方法时采用 302 状态码,而在其他时候使用 307 Temporary Redirect 来替代,因为在这些场景下方法变换是明确禁止的。

Bad Gateway 502 网关错误,服务器作为网关且从上游服务器获取到了一个无效的HTTP响应。

bad gateway502代表您所访问的网站出了问题,因为502 Bad Gateway 服务器作为网关或者代理时,是为了完成访问下一个服务器,但该服务器返回了非法的应答。也许是暂时的,也许是永久的。建议大家稍等一下再从新访问试试。

THE END
0.构造式和结构式的区别区别:结构式是表示用元素符号和短线表示化合物(或单质)分子中原子的排列和结合方式的式子;构造式也即结构简式就是结构式的简单表达式。结构式用“-”、“=”、“≡”分别表示1、2、3对共用电子;用“→”表示1对配位电子,箭头符号左方是提供孤对电子的一方,右方是具有空轨道、接受电子的一方。 jvzq<84yyy4dj~xcp0ipo8jqpmlcx43:89677mvon
1.框架结构和砖混结构的区别框架结构和砖混结构是什么如果你要进行室内空间的改造,构造构造由于大都墙体不承重,所以改造起来比较简单,敲掉墙体就能够了,而砖混构造中许多墙体是承重构造,不允许撤除的,你只能在少量非承重墙体上做文章。 以上就是关于框架结构和砖混结构是什么以及框架结构和砖混结区别的信息,希望对大家了解框架结构和砖混结构有所帮助哦。jvzquC41o0lbpp3eqo5{jrxjk1pjcsz1sie26?>680nuou
2.玉石与白云质大理岩的物质组成区别:详解白云石大理岩与白云岩之别白云石大理岩与白云岩在物质组成、结构构造和性质上存在一定差异,如白云石大理岩含有一定量的方解石、石英等矿物而白云岩基本不含其他矿物。 3. 玉石与白云质大理岩的物质组成区别是什么? 玉石与白云质大理岩的物质组成区别主要体现在主要成分、结构构造和性质等方面如玉石为硅酸盐矿物,白云质大理岩为碳酸盐矿物。 jvzq<84yyy416:6jf0ipo87246hbkzn1hevuqn134>:993jvor
3.一楼没柱子二楼怎么做承重柱和构造柱有什么区别[摘要]承重墙和中间的构造柱都是有讲究的,不能随便设计也不能睡吧拆除,那么一楼没柱子二楼怎么做,有没有什么好的方式和方法呢。承重柱和构造柱有什么区别,很多人都不太了解这些相关的内容,下面就来具体介绍承重柱的相关内容和常识。 房子的结构和设计在施工之前是有专门设计师对建筑进行设计的,包括承重墙和中间jvzquC41|jotjr3hcpm/exr1|h5rih>;6;<30qyon
4.巩膜和结膜的区别图片3、结构/构造不同 (1)结膜:由细胞、弹力纤维以及胶原纤维三种物质组成的透明的黏膜。 (2)巩膜:是由富含血管的组织和色素细胞组成。巩膜分为三层,最外层富含血管,中间层不透明,几乎不含有血管,排列紧密;最内层呈棕黑色,含有大量的色素细胞。 4、病变症状不同 jvzquC41yy}/oni/etkek}3qti4dp8rqdkrf1snpiz{bp871f6716@hdggk1f@:8926f;k99h6:b7=g20jznn
5::李永军,李伟平:论不法原因给付的制度构造笔者认为,在不明确原因理论的法条结构下,不法原因给付制度的规定是不完备且突兀的。如前所述,原因理论在处理不法原因给付问题上有着其他制度不可比拟的优势,既然我国学界对于不法原因给付制度的设立大多给予认可,并且原因理论对于不法原因给付制度的建构意义重大,那么原因理论的引入及其在制定法上的确立就应走在不法jvzq<84kqngx0lxup0io1o}{lfz04968325u49683292a=;675>:0|mvon
6.马允:政府获取平台数据权力的构造与边界既有文献已注意到政府调取电子数据对行政调查权和检查权的结构性冲击,也注意到数据报送中国家、平台和用户三方数据权益的冲突,但对政府获取平台数据权力构造和实体边界的体系化观察思路尚不清晰。本文旨在推进和展开这一思路,对政府获取平台数据的权力运行场景进行细化,厘清不同场景下的权力属性和内部构造,探讨新型权力jvzq<84h||lzl‚3ewrr/gmz0ep5jpot132971:;4;44ivv
7.结构转型与产业升级的新结构经济学研究:定量事实与理论进展2021 年第 1 期 ECONOMIC REVIEW 总第 227 期 DOI: 10.19361 / j.er.2021.01.01 结构转型与产业升级的 新结构经济学研究:定量事实与理论进展 王 勇 汤学敏∗ 摘要: 新结构经济学强调禀赋驱动的结构转型与产业升级这一理论机制ꎬ最 优的产业结构内生决定于要素禀赋结构ꎬ要素禀赋结构的升级会推动产业结构jvzquC41yy}/p|j0rm{/gmz0ep5eqlx142832B7837;75<<6:2<60YIH
8.结构类型这样可以保证readonly结构的成员不会修改该结构的状态。 这意味着除构造函数外的其他实例成员是隐式readonly。 备注 在readonly结构中,可变引用类型的数据成员仍可改变其自身的状态。 例如,不能替换List<T>实例,但可以向其中添加新元素。 下面的代码使用 init-only 属性资源库定义readonly结构: jvzquC41fqit0vnetqyph}3eqo5{j6hp1fuupny1eunbty4ncpmvcpj/tglftnseg1hvkuykp/zzrnx1uvxve}
9.装饰装修材料与构造(五)了解各类装饰装修织物与卷材的基本特点、品种及常见规格;熟悉主要织物与卷材在装饰装修中的应用;重点掌握墙布、地毯、窗帘在装饰装修中的基本构造做法。 装修织物与卷材是室内装饰装修中的重要材料之一,主要包括壁纸、地毯、窗帘等,它们用途不同,质地、性能以及制造方法等也各不相同,但都具有色彩丰富、质地柔软、富有弹性jvzq<84l|{y/e}{0ukv0niw0et0497312<338h63c:96:>1rcmf0qyo
10.框架结构和钢混结构的区别框架结构和钢混结构是什么框架构造中的钢筋混凝土框架构造,更是将别的框架构造的特色体现得淋漓尽致:工程质量好,效,柱构件易于标准化、定型化,能满意人防、消防要求,使水、电、暖各专业的安置能有效地进行,能大大缩短施工工期,削减开支。 以上就是关于框架结构和钢混结构的介绍,大家在选购房子的时候要注意框架结构和钢混结构哦,希望对大家jvzquC41|jotjr3hcpm/exr1lkgkw8via3:7;>=0jvsm