精华内容
下载资源
问答
  • 动画——需要先定义关键帧,再通过animation属性引用关键帧 2、触发: 过渡:需要借助伪类、js、@media触发 动画:自动触发 3、执行次数 过渡:执行一次后不会执行,但是可以借助transitionEnd事件添加循环...

     

    区别:

    1、语法:

            过渡——transition: 属性名 完成时间 速度曲线 延迟时间;

             动画——需要先定义关键帧,再通过animation属性引用关键帧

    2、触发:

           过渡:需要借助伪类、js、@media触发

            动画:自动触发

    3、执行次数

              过渡:执行一次后不会执行,但是可以借助transitionEnd事件添加循环;

           动画:可以通过属性设置循环次数;

    4、复杂度

             过渡:简单动画效果,可以通过属性展示动画的速度效果

             动画:复杂动画效果,可以定义关键帧,控制每一帧的动画效果

    适用场景:

    transition:适用于当元素从一种样式变换为另一种样式时为元素添加效果

    animation:可以在网页中取代动画图片、Flash及需要灵活定制多个帧以及循环的动画中

     

     

    展开全文
  • 渲染分为两种情况,我们可以观察到两种不同的抽象。 渲染时请勿清洁相机 我们只能使用相机标志控制第一个场景的显示 您还可以按以下键: “ C”请勿清除相机。 “ W”翻译。 “ E”旋转。 “ +/-”增加/减少...
  • ArcGIS教程 - 2 ArcGIS基础知识

    千次阅读 多人点赞 2020-02-08 11:47:37
    •创建可视化的动画(AVI,MPEG, QuickTime) • 在三维可视化场景中进行编辑和管理3D数据 • 在三维可视化场景中叠加视频 • 天际线分析、最大建筑高度分析、三维网络分析等高端三维应用分析 2.2....

    第2章 ArcGIS基础知识

    2.1 ArcGIS10.x概述

    ArcGIS10.x是ESRI公司开发的GIS产品家族,它集合了数据库、软件工程、网络技术、移动技术、云计算等主流的IT技术,目的是提供给用户一套完整的、开放的企业级GIS解决方案。本章主要介绍ArcGIS产品的发展史、构架等方面的内容。

    ESRI(Environmental System Research Institute,环境系统研究所)创建于1969年,总部位于加州的雷德兰兹。1982年ESRI发布第一套商业化GIS软件ARC/INFO 1.0,可以在计算机上显示点、线、面,并通过数据库管理工具将属性信息与之结合。ARC/INFO 1.0被公认为第一个商业化GIS系统。

    1986年PC ARC/INFO的出现是ESRI软件发展史上的又一个里程碑,它是为PC的GIS工作站而设计的。

    1992年ESRI推出了ArcView软件,人们可以用更少的投入就可以获得一套简单易用的桌面制图工具。

    在20世纪90年代,ESRI推出了基于Windows NT构架的Arcinfo产品,满足用户GIS和制图多样的选择,同时奠定了ESRI在GIS市场的领头羊地位。

    2004年推出了新一代的ArcGIS 9,为构建完善的GIS系统提供了一套完整的软件产品。

    2010年ESRI推出ArcGIS 10,全球首款支持云构架的GIS平台,使ArcGIS 10真正具备了3D建模、编辑和分析能力,并实现了三维空间向四维时空的飞跃,真正的GIS与RS一体化。

    2.2 ArcGIS10.x家族

    ArcGIS家族包含众多的组成部分,最主要的几部分如下,如图所示:

    • ArcGIS for Desktop - 一套集成的、桌面端的专业 GIS 应用程序。

    • ArcGIS for Server - 将 GIS 信息和地图以 Web 服务形式发布,并且支持企业级数据管理。

    • ArcGIS for Mobile - 为野外计算提供移动 GIS 工具和应用程序。

    • ArcGIS Online - 提供可通过 Web 进行访问的在线云 GIS 功能。

    2.2.1 ArcGIS桌面产品级别

    ArcGIS桌面是GIS专业人士的主要工作平台,用来管理复杂的GIS流程和应用工程,来创建数据、地图、模型和应用。是在机构内部署GIS应用的起点和基础。

    ArcGIS桌面是一系列整合的应用程序的总称,包括ArcMap、ArcCatalog、ArcGlobe、ArcScene、ArcToolbox 和Model Builder。通过通用的应用界面,用户可以实现任何从简单到复杂的GIS任务。根据用户的伸缩性需求,ArcGIS桌面分为三个级别产品,如图所示:

    • ArcGIS for Desktop Basic:主要用于综合性数据使用、制图和分析;

    • ArcGIS for Desktop Standard:在ArcGIS for Desktop Basic基础上增加了高级的地理数据库编辑和数据创建功能;

    • ArcGIS for Desktop Advanced:是ArcGIS for Desktop的旗舰产品,作为完整的GIS桌面应用包含复杂GIS的功能和丰富的空间处理工具;

    2.2.2 ArcGIS for Desktop应用程序概述

    ArcGIS for Desktop是一个系列软件套件,它包含了一套带有用户界面的Windows桌面应用:ArcMap,ArcCatalog,ArcGlobe,ArcScene,ArcToolbox和Model Builder,每一个应用都具有丰富的GIS工具。

    2.2.2.1 ArcMap

    ArcMap是ArcGIS for Desktop中一个主要的应用程序,承担所有制图和编辑任务,也包括基于地图的查询和分析功能。ArcMap通过一个或几个图层集合表达地理信息,而在地图窗口中又包含了许多地图元素,通常拥有多个图层的地图包括的元素有比例尺,指北针,地图标题,描述信息和图例,如图所示。

    2.2.2.2 ArcCatalog

    ArcCatalog应用程序帮助用户组织和管理所有的GIS信息,比如地图、球体、数据文件、Geodatabase、空间处理工具箱、元数据、服务等。用户可以使用ArcCatalog来组织、查找和使用GIS数据,同时也可以利用基于标准的元数据来描述数据。GIS数据库管理员使用ArcCatalog来定义和建立Geodatabase。GIS服务器管理员则使用ArcCatalog来管理GIS服务器框架,如图所示。自ArcGIS 10开始,已经将ArcCatalog嵌入到各个桌面应用程序中,包括:ArcMap、ArcGlobe、ArcScene。

    2.2.2.3  ArcScense

    ArcScene是ArcGIS桌面系统中实现3D可视化和3D空间分析的应用,需要配备3D分析扩展模块。它是一个适合于展示三维透视场景的平台,可以在三维场景中漫游并与三维矢量与栅格数据进行交互,适用于数据量比较小的场景进行3D分析显示。ArcScene是基于OpenGL的,支持TIN数据显示。显示场景时,ArcScene会将所有数据加载到场景中,矢量数据以矢量形式显示,如图所示。

    2.2.2.4 ArcGlobe

    ArcGlobe是ArcGIS桌面系统中实现3D可视化和3D空间分析的应用,需要配备3D分析扩展模块。ArcGlobe提供了全球地理信息连续、多分辨率的交互式浏览功能,支持海量数据的快速浏览。像ArcMap一样,ArcGlobe也是使用GIS数据层来组织数据,显示Geodatabase和所有支持的GIS数据格式中的信息。ArcGlobe具有地理信息的动态3D视图。ArcGlobe图层放在一个单独的内容表中,将所有的GIS数据源整合到一个通用的球体框架中。它能处理数据的多分辨率显示,使数据集能够在适当的比例尺和详细程度上可见。

    ArcGlobe交互式地理信息视图使GIS用户整合并使用不同GIS数据的能力大大提高,而且在三维场景下可以直接进行三维数据的创建、编辑、管理和分析,如图所示。

    2.2.3 ArcGIS for Desktop常用扩展模块

    ArcGIS提供了一系列的常用扩展模块,用来扩展产品的功能。通常情况下,根据这些扩展的用途,可分为两大类:

    2.2.3.1 空间分析模块(ArcGIS Spatial Analyst)

    ArcGIS Spatial Analyst模块提供了众多强大的栅格建模和分析的功能,利用这些功能可以创建,查询,制图和分析基于格网的栅格数据。使用ArcGIS Spatial Analyst,用户可从现存数据中得到新的数据及衍生信息,分析空间关系和空间特征,寻址,计算点到点旅行的综合代价等功能。同时,还可以进行栅格和矢量结合的分析,如图所示。

    利用空间分析模块能够进行以下分析:

    • 距离分析、密度分析

    • 寻找适宜位置、位置间的最佳路径

    • 距离和路径成本分析

    • 基于本地环境、邻域或待定区域的统计分析

    • 应用简单的影像处理工具生成新数据

    • 对研究区进行基于采样点的插值

    • 进行数据整理以方便进一步的数据分析和显示

    • 栅格矢量数据的转换

    • 栅格计算、统计、重分类等功能

    2.2.3.2 三维可视化与分析模块(ArcGIS 3D Analyst)

    ArcGIS 3D Analyst模块提供了强大的、先进的三维可视化、三维分析和表面建模工具。通过ArcGIS 3D分析模块,你可以从不同的视点观察表面、查询表面、确定从表面上某一点观察时其它地物的可见性,还可以将栅格和矢量数据贴在表面以创建一副真实的透视图,还可以对三维矢量数据进行高端分析。使用ArcGIS 3D分析模块,你可以有效的编辑和管理三维数据。

    ArcGIS 3D分析扩展模块的核心是ArcGlobe应用程序,ArcGlobe提供浏览多层GIS数据、创建和分析表面的界面,高效的处理栅格、矢量、地形和影像数据集。

    利用ArcGIS 3D Analyst模块能够进行以下分析:

    • 进行表面创建和分析,支持Terrain Datasets

    • 建立ArcGIS所支持的数据格式的表面模型,其中包括CAD、shapefiles、coverages和 images数据格式

    • 进行交互式透视图的显示和分析,包括拖动和缩放、旋转、倾斜以及飞行模拟

    • 模拟诸如建筑物的现实世界表面特征

    • 模拟水井、矿、地下水以及地下储藏设施等地下特征

    • 从属性值来生成飞行的三维表面

    • 把二维数据遮盖在表面上且在三维空间中显示

    • 计算表面积、体积、坡度、坡角以及山阴影

    • 进行视域和视线分析、点的高度插值、画剖面图以及最陡路径判断

    • 进行日照分析、三维缓冲区分析、最大建筑高度分析、三维网络分析等高端三维应用分析,如图2.12、2.13所示

    • 使用许多数据图层效果诸如透明度、亮度、阴影以及深度优先

    • 生成二维或三维要素的等高线

    • 基于属性或位置的三维数据查询

    • 在网络上利用VRML输出显示数据

    •创建可视化的动画(AVI,MPEG, QuickTime)

    • 在三维可视化场景中进行编辑和管理3D数据

    • 在三维可视化场景中叠加视频

    • 天际线分析、最大建筑高度分析、三维网络分析等高端三维应用分析

    2.2.3.3 地理统计分析模块(ArcGIS Geostatistical Analyst)

    ArcGIS Geostatistical Analyst模块为空间数据探测、确定数据异常、优化预测、评价预测的不确定性和生成数据面等工作提供各种各样的工具,其主要能够完成探究数据可变性、查找不合理数据、检查数据的整体变化趋势、分析空间自相关和多数据集之间的相互关系以及利用各种地统计模型和工具来做预报、 预报标准误差、计算大于某一值的概率和分位图绘制等工作。如图所示。

    2.2.3.4 网络分析模块(ArcGIS Network Analyst)

    ArcGIS Network Analyst扩展可以帮助用户创建和管理复杂的网络数据集合,并且生成路径解决方案。ArcGIS Network Analyst是进行路径分析的扩展模块,为基于网络的空间分析(比如位置分析,行车时间分析和空间交互式建模等)提供了一个完全崭新的解决框架。该扩展模块将帮助ArcGIS for Desktop用户模拟现实世界中的网络条件与情景。ArcGIS Network Analyst模块能够进行行车时间分析、点到点的路径分析、路径方向、服务区域定义、最短路径、最佳路径、邻近设施、起始目标点矩阵等分析。

    ArcGIS Network Analyst使得ArcGIS用户可以利用地理网络来解决各种问题。许多基于网络的任务都可以被执行,如寻找最高效的旅游线路或者最近的设施,生成旅游向导,以及确定基于旅游时间的服务区域。如图所示。

    2.2.3.5 追踪分析模块(ArcGIS Tracking Analyst)

    ArcGIS Tracking Analyst模块提供时间序列的回放和分析功能,可以帮助显示复杂的时间序列和空间模型,并且有助于在ArcGIS系统中与其他类型的GIS数据集成的时候相互作用。该模块扩展了ArcGIS桌面功能,它提供了多种分析工具和功能,能够和其它的扩展模块结合起来为交通、应急反应、军事以及其它领域的用户实现功能强大的应用。

    用户可以使用ArcGIS Tracking Analyst模块显示分析时间数据,包括随着时间变化追踪要素的移动轨迹,以及某个时间段特定位置的追踪系统值的变化。

    2.2.3.6 数据互操作模块(ArcGIS Data Interoperability)

    使用ArcGIS Data Interoperability扩展可以直接读访问110多种空间数据格式,包括GML、DWG/DXF文件、MicroStation Design文件、MapInfo MID/MIF文件和TAB文件类型等。用户可以通过拖放方式让这些数据和其它数据源在ArcGIS中直接用于制图、空间处理、元数据管理和3D Globe制作。例如,所有制图功能都可使用这些数据源,包括查看要素和属性、识别要素和进行选择。

    ArcGIS Data Interoperability技术来自Safe软件公司(世界领先的GIS互操作提供商)的FME(Feature Manipulation Engine)产品。其中,包含了FME Workbench应用程序,它提供一系列数据转换工具用来构建复杂矢量数据格式的转换器。

    2.2.3.7 描矢量化模块(ArcScan for ArcGIS)

    ArcScan for ArcGIS是为ArcGIS for Desktop扩展的栅格编辑和扫描数字化等能力。它通常用于从扫描地图和手画地图中获得数据。

    使用ArcScan for ArcGIS模块,能够实现从栅格到矢量的转换任务,包括栅格编辑,栅格捕捉,手动的栅格跟踪和批量矢量化。ArcScan for ArcGIS使用交互式矢量化和自动矢量化的要素模板,要素模板是在ArcGIS 10 的时候开始提供的增强编辑体验之一。

    展开全文
  • 前端面试题(持续更新中)

    万次阅读 多人点赞 2019-11-06 17:16:33
    应用场景: 1. 解决margin叠加的问题 2. 用于布局(overflow: hidden) 3.BFC不会与浮动盒子叠加。 4. 用于清除浮动,计算BFC高度。 5、行内元素和块级元素有什么区别? 块级元素:显示在一块内,会自动换行,元素...

    全家桶项目源码:Vue全家桶+SSR+Koa2全栈开发美团网[完整版] 链接:https://pan.baidu.com/s/1cwPDVkj_I5z568mYIHni4A 提取码:24g2

    2020字节跳动扎心面试题链接(从公众号获取的):
    https://mp.weixin.qq.com/s/B8xRPxwjJfURyYzTQgIxUw

    CSS面试题:
    1、谈谈你对CSS盒模型的认识?

    1、基本概念:标准模型+IE模型
    CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:内边距(padding),边框(border),margin(外边距),和内容(content)。
    标准盒模型:一个块的总宽度=width+margin(左右)+padding(左右)+border(左右)
    怪异(IE)盒模型:一个块的总宽度=width+margin(左右)(既width已经包含了padding和border值)
    设置盒模型:box-sizing:border-box

    2、CSS是如何设置这两种模型,那么二者怎么转化呢?

    content-box: 指的是W3C标准盒模型,也是默认的设置属性。
    border-box:指的是IE盒模型,width和height包含了padding和border。

    3、JS如何获取盒模型对应的宽和高?

    dom.style.width/height:对节点样式可读可写,但只能读或写内嵌的CSS样式对于在(style)或外联样式不能读写。
    dom.currentStyle.width/height:拿到的是渲染之后的宽和高,比较真实,但支持IE浏览器
    window.getComputedStyle(dom).width/height:方法是只读的,只能获取样式,不能设置。
    dom.getBoundingClientRect().width/height:getBoundingClientRect()方法得到8个值,除了 width 和 height 外的属性x、y、left、top、right和bottom都是相对于视口(viewport)的左上角位置而言的。

    4、什么是BFC?BFC的原理?

    块级格式化上下文。是一种边距重叠解决方案。
    应用场景: 1. 解决margin叠加的问题
    2. 用于布局(overflow: hidden)
    3.BFC不会与浮动盒子叠加。
    4. 用于清除浮动,计算BFC高度。

    5、行内元素和块级元素有什么区别?

    块级元素:显示在一块内,会自动换行,元素会从上到下垂直排列,各自占一行,块级元素可以设置宽高,如p,ul,form,div,(h1-h6)等标签元素
    行内元素:元素在一行内水平排列,高度由元素的内容决定,行内元素不可以设置宽高,如a,br,span,input等元素。

    6、行内元素和块级元素如何转换?

    行变块display:block
    块变行display:inline
    display:inline-block(可以在同一行内显示)

    7、什么是伪类选择器和伪元素?列举3个CSS3中引入的伪类选择器和伪元素!

    伪类用一个冒号来表示,而伪元素则用两个冒号来表示
    伪元素选择器:dom中不存在的元素,仅仅是css中用来渲染,添加一些特殊效果的,比如p::before,选择p标签(真元素)前面的假元素(伪元素,p标签前面没有元素,只是假设有)
    ::first-line选择元素的第一行,比如说改变每个段落的第一行文本的样式
    ::before::after这两个主要用来给元素的前面或后面插入内容,这两个常用"content"配合使用,见过最多的就是清除浮动
    ::selection用来改变浏览网页选中文的默认效果

    伪类选择器:一个概念上的类,不是我们定义的,是抽象的。如a:hover,选择a标签(元素选择器)中具有鼠标悬停类的所有元素,这个类是抽象的,不是我们自己定义的,再如first-child,选择第一个,选择具有这个类性质的所有元素,“第一个”,这个类就抽象了,我们没必要定义一个第一个这样的类
    列举::root()选择器,根选择器,匹配元素E所在文档的根元素。在HTML文档中,根元素始终是(html)。:root选择器等同于(html)元素。
    :not()选择器称为否定选择器,和jQuery中的:not选择器一模一样,可以选择除某个元素之外的所有元素。
    :empty()选择器表示的就是空。用来选择没有任何内容的元素,这里没有内容指的是一点内容都没有,哪怕是一个空格。

    8、px和em,rem的区别?

    px 实际上就是像素,用PX设置字体大小时,比较稳定和精确。px是固定长度单位,不随其它元素的变化而变化
    em 就是根据基准来缩放字体的大小。em 是相对长度单位。em是相对于父级元素的单位,会随父级元素的属性(font-size或其它属性)变化而变化
    rem是CSS3新增的一个相对单位,rem是相对于根目录(HTML元素)的,所有它会随HTML元素的属性(font-size)变化而变化
    例如: ==屏幕宽度/设计宽度 = 1rem的值/预设定rem的值。
    1920/1920=100/100 ;
    所以 1rem=1920/1920*100 ;
    document.documentElement 是html节点
    document.documentElement.style.fontSize = ((windowWidth / designWidth) * rem2px) + 'px';
    假如,用户将屏幕拖小了,变为960。1rem将自动变为50px;960/1920乘以100=50
    这里需要判断下,当屏幕的宽度大于设计稿定义的宽度,用设计稿的宽度,如果小于,用屏幕宽度作为变量屏幕宽度。

    10、关于绝对定位,相对定位和固定定位

    1、相对定位不脱离标准流,在页面中占位置 。
    相对于自己原来的位置来进行定位 。
    2、绝对定位脱离标准流,在页面中不占位置。
    如果没有父元素,则相对于body定位;如果有父元素,但父元素没有定位,那么还是相对于body定位;如果父元素有定位,那么相对于父元素来定位。
    3、固定定位:相对于浏览器窗口进行定位
    相对定位:position: relative;
    绝对定位:position: absolute;

    11、CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?

    CSS 选择符:
    1.id选择器( # myid)
    2.类选择器(.myclassname)
    3.标签选择器(div, h1, p)
    4.相邻选择器(h1 + p)
    5.子选择器(ul > li)
    6.后代选择器(li a)
    7.通配符选择器( * )
    8.属性选择器(a[rel = “external”])
    9.伪类选择器(a: hover, li:nth-child)

    1.2 可以继承的属性:
    可继承的样式: font-size font-family color, UL LI DL DD DT;
    不可继承的样式:border padding margin width height ;

    优先级: !important > id > class > tag
    important 比 内联优先级高,但内联比 id 要高

    CSS3新增伪类举例:
    p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
    p:last-of-type 选择属于其父元素的最后 <p> 元素的每个<p> 元素。
    p:only-of-type 选择属于其父元素唯一的<p> 元素的每个<p> 元素。
    p:only-child 选择属于其父元素的唯一子元素的每个<p> 元素。
    p:nth-child(2) 选择属于其父元素的第二个子元素的每个<p> 元素。
    :enabled :disabled 控制表单控件的禁用状态。
    :checked 单选框或复选框被选中。

    12、以下是CSS3的几种常用前缀

    -webkit
    -moz
    -ms
    -o

    13、CSS3新增的伪类有哪些

    p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素。
    p:only-of-type 选择属于其父元素唯一的<p> 元素的每个 <p> 元素。
    p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素。
    p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。
    :enabled、:disabled 控制表单控件的禁用状态。
    p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
    :checked,单选框或复选框被选中。

    14、CSS3有哪些新特性?

    1. CSS3实现圆角(border-radius),阴影(box-shadow)
    2. 对文字加特效(text-shadow),线性渐变(gradient),旋转(transform)
    3. transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋转,缩放,定位,倾斜
    4. 增加了更多的CSS选择器 多背景 rgba
    5. 在CSS3中唯一引入的伪类是 ::selection.
    6. 媒体查询,多栏布局
    7. border-image

    15、为什么要初始化CSS样式。

    因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。当然,初始化样式会对SEO有一定的影响,但求影响最小的情况下初始化。

    16、解释下浮动和它的工作原理?清除浮动的技巧

    由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响,清除浮动的本质:主要为了解决父级元素因为子级浮动引起内部高度为0的问题。

    1. 使用空标签清除浮动。
      这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。
    2. 使用overflow。
      给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。
    3. 使用after伪对象清除浮动。
      该方法只适用于非IE浏览器。
      一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;
      可以给父元素设置overflow:auto或者hidden

    #JS的面试问题:
    0、如何判断一个变量是对象还是数组?

    1、我们能够使用typeof判断变量的身份,判断字符串得到string,数字和NaN得到number,函数会得到function等,但是判断数组,对象和null时都会得到object,这就是typeof的局限性,
    2、使用instanceof(比较运算符)可以用来判断一个变量是数组还是对象
    3、constructor(构造函数)
    4、Object.prototype.toString.call()
    总结:判断简单数据类型可以用typeof,判断数组,对象使用instanceofconstructorObject.prototype.toString.call(),最好使用Object.prototype.toString.call(),更加精准

    1.闭包

    闭包就是能够读取其他函数内部变量的函数。
    外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象
    创建闭包最常见方式,就是在一个函数内部创建另一个函数。
    闭包的缺点:滥用闭包函数会造成内存泄露,因为闭包中引用到的包裹函数中定义的变量都永远不会被释放
    在退出函数之前,将不使用的局部变量全部删除。可以使变量赋值为null;

    2.数据类型

    基本数据类型:String( 字符串),Boolean(布尔),number(数值),Null(空值),undefined(未定义)
    引用数据类型:Object(Array,Date,RegExp,Function)

    3.javascript 中 == 和 === 的区别是什么?举例说明。

    ===会自动进行类型转换,==不会

    4.请尽可能详尽的解释 ajax 的工作原理

    思路:先解释异步,再解释 ajax 如何使用
    Ajax 的原理简单来说通过 XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后用JS来操作DOM而更新页面。XMLHttpRequest 是 ajax 的核心机制,它是在 IE5 中首先引入的,是一种支持异步请求的技术。简单的说,也就是 javascript 可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
    特点:Ajax 可以实现异步通信效果,实现页面局部刷新,带来更好的用户体验;按需获取数据,节约带宽资源

    ajax是什么?

    1. 通过异步模式,提升了用户体验
    2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
    3. Ajax 在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。

    Ajax 的缺点:

    1. Ajax 不支持浏览器 back 按钮
    2. 安全问题 Ajax 暴露了与服务器交互的细节
    3. 对搜索引擎的支持比较弱
    4. 破坏了程序的异常机制
    5. 不容易调试

    HTTP协议类型题目:
    5. HTTP 状态消息

    200:请求已成功,请求所希望的响应头或数据体将随此响应返回。
    302:请求的资源临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当
    继续向原有地址发送以后的请求。只有在Cache-Control或 Expires中进行了指定的情况下,
    这个响应才是可缓存的
    304:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上
    次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁
    止包含消息体,因此始终以消息头后的第一个空行结尾。
    403:服务器已经理解请求,但是拒绝执行它。
    404:请求失败,请求所希望得到的资源未被在服务器上发现。
    500:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。

    6.说一下什么是Http协议

    对客户端和服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”

    7.什么是Http协议无状态协议?怎么解决Http协议无状态协议?

    (1)、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息
    (2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

    8.Http协议中有哪些请求方式?

    GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器,从指定的资源请求数据
    POST:用于传输信息给服务器, 向指定的资源提交要处理的数据
    PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
    HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
    DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件
    OPTIONS:查询响应URI支持的HTTP方法

    区别:

    Get 是通过地址栏来传值,而 Post 是通过提交表单来传值。

    在这里插入图片描述

    9.Http协议由什么组成?

    请求报文包括三部分:
    (1).请求行:包含请求方法,URI,HTTP版本协议 (2).请求首部字段 (3).请求内容实体
    响应报文包含三部分:
    (1).状态行:包含HTTP版本,状态码,状态码原因短语 (2).响应首部字段 (3).响应内容实体

    10.HTTP协议的工作原理?

    HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息,通常情况下会配合数字证书实现。

    13.ajax的同步和异步区别:

    1. 同步:提交请求 -> 等待服务器处理 -> 处理完毕返回,这个期间客户端浏览器不能干任何事
    2. 异步:请求通过事件触发 -> 服务器处理(这是浏览器仍然可以作其他事情)-> 处理完毕
      ajax.open方法中,第3个参数是设同步或者异步。

    14.跨域? ?

    理解跨域的概念:协议、域名、端口都相同才同域,否则都是跨域

    14-1、什么情况下会碰到跨域问题?有哪些解决方法?

    跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。
    解决方法:1. JSONP方法:JSONP是服务器与客户端跨源通信的常用方法,Jsonp 需要目标服务器配合一个callback函数网页通过添加一个(script)元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。
    首先,网页动态插入(script)元素,由它向跨源网址发出请求。
    2.通过修改document.domain来跨子域
    3.使用window.name来进行跨域
    4.通过CORS解决AJAX跨域

    15.简述 ajax 的过程。

    1. 创建 XMLHttpRequest 对象,也就是创建一个异步调用对象
    2. 创建一个新的 HTTP 请求,并指定该 HTTP 请求的方法、URL 及验证信息
    3. 设置响应 HTTP 请求状态变化的函数
    4. 发送 HTTP 请求
    5. 获取异步调用返回的数据
    6. 使用 JavaScript 和 DOM 实现局部刷新

    16.axios和ajax的区别

    axios是通过promise实现对ajax技术的一种封装,就像jQuery实现ajax封装一样。
    简单来说: ajax技术实现了网页的局部数据刷新,axios实现了对ajax的封装。

    ②axios特征:
    1.自动转换JSON数据
    2.从 node.js 创建 http 请求
    3.支持 Promise API
    4.客户端支持防止CSRF
    5.提供了一些并发请求的接口
    PS:防止CSRF:就是让你的每个请求都带一个从cookie中拿到的key,根据浏览器同源策略,假冒的网站是拿不到你cookie中得到key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略

    17.JavaScript 链 原型,原型链 ? 有什么特点?

    1.原型对象也是普通的对象,是对象一个自带隐式的 _ proto_ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为null 的话,我们就称之为原型链
    2. 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链。

    3.每一次获取对象中的属性都是一次查询过程,如果在自有属性中找不到就会去原型对象中查找,如果原型对象中还查不到,就回去原型对象的原型中查找,也就是按照原型链查找,直到查找到原型链的顶端,也就是Object的原型。

    作用域链:
      一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值。
      但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

    一、作用域
      在 Javascript 中,作用域分为 全局作用域 和 函数作用域
      全局作用域:
        代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。
      函数作用域:
        在固定的代码片段才能被访问

    18、JS创建对象有几种方法?

    1.new Object()
    2.使用字面量
    3.工厂模式
    4.构造函数模式(constructor)
    5.原型模式(prototype)
    6.构造函数+原型模式
    还是点击下面链接讲解的比较详细吧 ↓
    https://www.jianshu.com/p/1fb0447db852
    在这里插入图片描述

    19、虚拟dom和实体dom的区别?

    DOM的本质:
    浏览器概念,浏览器从服务器端读取html页面,浏览器将html解析成一棵元素嵌套关系的dom树,用对象来表示页面上的元素,并提供操作dom对象的api。
    虚拟DOM:
    框架概念,程序员用js对象来模拟页面上dom元素的嵌套关系( 本质 ),为了实现页面元素的高效更新( 目的 )
    区别:1、虚拟DOM不会进行重排与重绘操作;
    2、虚拟DOM进行频繁修改,然后一次性比较并修改真实DOM中需要修改的部分,最后进行重排和重绘,减少过多DOM节点重排和重绘损耗。
    3、虚拟DOM有效降低大面积(真实DOM节点)的重排和重绘,因为最终与真实DOM比较差异,可以局部渲染

    20、描述一下事件冒泡机制

    当你使用事件冒泡时,子级元素先触发,父级元素后触发,即p先触发,div后触发。

    21、请描述一下cookies,sessionStorage和localStorage的区别

    cookie(储存在用户本地终端上的数据)是网站为了标识用户身份而储存在用户本地终端上的数据,cookie数据始终在同源的http请求中携带,只会在浏览器和服务器间来回传递。另外两个不会自动把数据发给服务器,仅在本地保存。
    在这里插入图片描述

    22、js阻止事件冒泡的两种方法

    event.stopPropagation( )
    event.target

    23、JS的内置对象
    在这里插入图片描述
    24、函数调用的四种方式

    函数调用模式
    方法调用模式
    构造器调用模式
    间接调用模式,通过call()和apply()进行

    25、JS中常见的几种继承方法

    1.原型链继承
    原型链实现继承的思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。
    原型链的基本概念: 当一个原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个指向另一个原型的指针。同时,另一个原型中也包含着一个指向另一个构造函数的指针。如果另一个原型是另一个类型的实例,此时实例和原型就构成了原型链
    原型链存在的问题
    1)包含引用类型值的原型属性会被所有实例共享,这会导致对一个实例的修改会影响另一个实例。在通过原型来实现继承时,原型实际上会变成另一个类型的实例。原先的实例属性就变成了现在的原型属性
    2)在创建子类型的实例时,不能向超类型的构造函数中传递参数

    2.构造函数继承(经典继承)
    借用构造函数的基本思想,即在子类型构造函数的内部调用超类型构造函数。函数只不过是在特定环境中执行代码的对象,因此通过使用apply()和call()方法可以在新创建的对象上执行构造函数
    借用构造函数的优势:可以在子类型构造函数中向超类型构造函数传递参数
    借用构造函数的问题:
    1)无法避免构造函数模式存在的问题,方法都在构造函数中定义,因此无法复用函数。
    2)在超类型的原型中定义的方法,对子类型而言是不可见的。因此这种技术很少单独使用。

    3.组合方式继承(构造函数 + 原型链)
    组合继承:指的是将原型链和借用构造函数的技术组合到一起。思路是使用原型链实现对原型方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数的复用,又能够保证每个实例都有它自己的属性。
    组合继承的优势
    避免了原型链和借用构造函数的缺点,融合了他们的优点,是JavaScript中最常用的继承模式。instanceof和isprototypeOf()也能够用于识别基于组合继承创建的对象

    4.es6方法继承

    27、JS运行机制

    JS为什么是单线程?

    • JS的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。

    JS的运行机制:

    • 因为JavaScript是单线程,意味着任务要一个接着一个完成,但是,如果前一个任务执行时间很长,那么后面的任务就得一直阻塞着,这样用户体验十分差。
      JavaScript的设计者考虑到了这一点,所以他将JavaScript的任务分为两种,在主线程上执行的任务"同步任务",被主线程挂载起来的任务"异步任务",后者一般是放在一个叫任务队列的数据结构中。
      只有当所有同步任务都执行完了才会,开始观察任务队列中被挂载起来的任务,并且按照队列的特性,先进先出的依次执行。

    28、DOM是什么?

    DOM是Document Object Model,即文档对象模型,它允许脚本控制Web页面、窗口和文档。

    29、DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。

    事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会从根节点开始由外到内进行事件传播,即点击了子元素,如果父元素通过事件捕获方式注册了对应的事件的话,会先触发父元素绑定的事件。
    事件冒泡(dubbed bubbling):与事件捕获恰恰相反,事件冒泡顺序是由内到外进行事件传播,直到根节点。
    无论是事件捕获还是事件冒泡,它们都有一个共同的行为,就是事件传播,
    dom标准事件流的触发的先后顺序为:先捕获再冒泡,即当触发dom事件时,会先进行事件捕获,捕获到事件源之后通过事件传播进行事件冒泡。

    30、数组去重的方法

    1.ES6 Set去重

    var arr = [1,2,3,3,2,1,5,1];
    var arr2 = Array.from(new Set(arr))
    console.log(arr2)
    
    var arr = [1,2,3,3,2,1,5,1];
    let a = [...new Set(arr)]
    console.log(a)
    

    2.利用for嵌套for,然后splice去重
    3.利用indexOf去重

    var arr = [1,3,4,5,6,7,4,3,2,4,5,6,7,3,2];
    function find(){
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
    if (newArr.indexOf(arr[i]) == -1 ) { //也可以换成if(newArr.indexOf(arr[i])<0)
    newArr.push(arr[i]);
      }
    }
    consoloe.log(newArr); // [1, 3, 4, 5, 6, 7, 2]
    }
    find(arr); //调用这个方法  indexOf对大小写敏感
    

    4.利用filter
    filter(x,index,self)可以为数组提供过滤功能,其中x代表元素,index是与X一同传入元素的索引,而self代表数组本身。

    var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7];
    var arr2 = arr.filter(function(x, index,self) {
    return self.indexOf(x)===index;
    }); 
    console.log(arr2); //[1, 2, 3, 4, 5, 6 ,7]
    

    32、事件委托

    简介:事件委托指的是,不在事件的发生地(直接dom)上设置监听函数,而是在其父元素上设置监听函数,通过事件冒泡,父元素可以监听到子元素上事件的触发,通过判断事件发生元素DOM的类型,来做出不同的响应。
    举例:最经典的就是ul和li标签的事件监听,比如我们在添加事件时候,采用事件委托机制,不会在li标签上直接添加,而是在ul父元素上添加。
    好处:比较合适动态元素的绑定,新添加的子元素也会有监听函数,也可以有事件触发机制。

    34、DOM操作——怎样添加、移除、移动、复制、创建和查找节点。

    在这里插入图片描述

    35、null和undefined的区别?

    null是一个表示"无"的对象,转为数值时为0
    undefined是一个表示"无"的原始值,转为数值时为NaN
    当声明的变量还未被初始化时,变量的默认值为undefined
    null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象
    undefined表示 “缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

    • 1.变量被声明了,但没有赋值时,就等于 undefined
      2. 调用函数时,应该提供的参数没有提供,该参数等于 undefined
      3. 对象没有赋值的属性,该属性的值为 undefined
      4. 函数没有返回值时,默认返回 undefined
    • null表示“没有对象”,即该处不应该有值。典型用法是:
      1. 作为函数的参数,表示该函数的参数不是对象
      2. 作为对象原型链的终点

    36、哪些操作会造成内存泄漏?

    内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
    垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

    • setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
    1. 闭包
    2. 控制台日志
    3. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

    37、typeof null返回什么?为什么?

    不同的对象在底层都表示为二进制,在javascript中二进制前三位都为0的话会被判断为object类型,
    null的二进制表示全0,自然前三位也是0,所以执行typeof时会返回“object”

    39、ES6中…运算符能做什么

    1.复制数组 2.合并数组 3. 扩展运算符可以与解构赋值结合起来,用于生成数组。 4.扩展运算符还可以将字符串转为真正的数组

    42、如何实现浏览器内多个标签页之间的通信?

    第一种——调用localStorage
    在一个标签页里面使用 localStorage.setItem(key,value)添加(修改、删除)内容;
    在另一个标签页里面监听 storage 事件。
    即可得到 localstorge 存储的值,实现不同标签页之间的通信。

    第二种——调用cookie+setInterval()
    将要传递的信息存储在cookie中,每隔一定时间读取cookie信息,即可随时获取要传递的信息。

    43、数据类型的自动转换和隐式转换你知道哪些?

    隐式类型转换:
    1 == ‘1’
    ‘1’ + 1
    ‘1’ - 1
    显示类型转换
    parseInt(str,radix)/parseFloat(str,radix)/Number()转变成数字。
    Boolean(param)转变成布尔值
    subString()转变成字符串

    VUE方面的问题:
    1.谈谈你对MVVM开发模式的理解

    Vue是一个 MVVM框架,其各层的对应关系如下:
    View层:在Vue中是绑定dom对象的HTML(代表UI视图,负责数据的展示;)
    ViewModel层:在Vue中是实例的vm对象 (负责监听 Model 中数据的改变并且控制视图的更新,处理用户交互操作;)
    Model层:在Vue中是data、computed、methods等中的数据(代表数据模型,数据和业务逻辑都在Model层中定义;)
    在 Model 层的数据变化时,View层会在ViewModel的作用下,实现自动更新

    2、Vue的响应式原理?

    Vue响应式底层实现方法是 Object.defineProperty() 方法,该方法中存在一个getter和setter的可选项,可以对属性值的获取和设置造成影响
    Vue中编写了一个wather来处理数据,在使用getter方法时,总会通知wather实例对view层渲染页面,同样的,在使用setter方法时,总会在变更值的同时,通知wather实例对view层进行更新

    3、Vue的生命周期

    1.beforeCreate --创建前
    触发的行为:vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。
    在此阶段可以做的事情:加loading事件
    2.created --创建后
    触发的行为:vue实例的数据对象data有了,$el还没有
    在此阶段可以做的事情:解决loading,请求ajax数据为mounted渲染做准备
    3.beforeMount --渲染前
    触发的行为:vue实例的$el和data都初始化了,但还是虚拟的dom节点,具体的data.filter还未替换
    在此阶段可以做的事情:。。。
    4.mounted --渲染后
    触发的行为:vue实例挂载完成,data.filter成功渲染
    在此阶段可以做的事情:配合路由钩子使用
    5.beforeUpdate --更新前
    触发的行为:data更新时触发
    在此阶段可以做的事情:。。。
    6.updated —更新后
    触发的行为:data更新时触发
    在此阶段可以做的事情:数据更新时,做一些处理(此处也可以用watch进行观测)
    7.beforeDestroy —销毁前
    触发的行为:组件销毁时触发
    在此阶段可以做的事情:可向用户询问是否销毁
    8.destroyed —销毁后
    触发的行为:组件销毁时触发,vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在
    在此阶段可以做的事情:组件销毁时进行提示

    4、请详细说下你对vue生命周期的理解?

    答:总共分为8个阶段:创建前 / 后,载入前 / 后,更新前 / 后,销毁前 / 后。
    创建前/后: 在beforeCreated阶段,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。
    载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完成,data.message成功渲染。
    更新前/后:当data变化时,会触发beforeUpdateupdated方法。
    销毁前/后:在执行destroy方法后,对data的改变不会再触发周期函数,说明此时vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在

    5、vue生命周期在真实场景下的业务应用

    created: 进行ajax请求异步数据的获取、初始化数据
    mounted: 挂载元素内dom节点的获取
    nextTick: 针对单一事件更新数据后立即操作dom
    updated: 任何数据的更新,如果要做统一的业务逻辑处理
    watch: 监听具体数据变化,并做相应的处理

    7、Vue中双向数据绑定是如何实现的?

    Vue在组件和实例初始化的时候,会将data里的数据进行数据劫持(object.definepropty对数据做处理)。被解除过后的数据会有两个属性:一个叫getter,一个叫setter
    getter是使用数据的时候触发,setter是在修改数据的时候触发,修改数据的时候触发setter,同时也触发了底层的watcher(可以收到属性的变化通知并执行相应的函数,从而更新视图。)监听,通知dom修改刷新。

    8、父组件与子组件传值

    父向子传值:属性传值,父组件通过给子组件标签上定义属性,子组件通过props方法接收数据;
    子向父传值:事件传值,子组件通过$emit(‘自定义事件名’,值),父组件通过子组件上的@自定义事件名=“函数”接收 ($emit方法传递参数)

    10、 如何让css只在当前组件中起作用

    将当前组件的 (style)修改为(styple scoped)

    11、第一次加载页面会触发哪几个钩子

    第一次加载会触发 beforeCreatecreatedbeforeMountmounted四个钩子

    12、Vuex是什么?

    Vuex是专门为Vue服务,用于管理页面的数据状态、提供统一数据操作的生态系统
    vuex:是vue提供的状态管理工具,简单解释就是vue各个组件直接的变量是不能直接共享的,组件直接的参数传递才多层的时候变得异常复杂,所以就诞生了vuex的状态管理工具,保证了状态的统一和可追踪
    ①:这个状态自管理应用包含以下几个部分:
    state,驱动应用的数据源;
    view,以声明方式将 state 映射到视图;
    actions,响应在 view 上的用户输入导致的状态变化。
    ②:使用vuex管理数据的好处:
    能够在vuex中集中管理共享的数据,便于开发和后期进行维护
    能够高效的实现组件之间的数据共享,提高开发效率
    存储在vuex中的数据是响应式的,当数据放生改变时,页面中的数据会同步更新
    ③:vuex中的数据和data中的数据与什么区别?
    vuex中的数据是全局的,共享的,data中的数据是私有的
    vuex中的数据是响应式的,只要vuex中的数据发生改变,引用vuex中的数据的文件会同步更新
    vuex中的数据是单向的,想要修改vuex中的数据必须在mutation中修改

    13、router是什么?

    1.routerthis.$router 是路由【导航对象】,用它 可以方便的 使用 JS 代码,实现路由的 前进、后退、 跳转到新的 URL 地址
    2.routes:指创建vue-router路由实例的配置项。用来配置多个route路由对象
    3.routethis.$route 是路由【参数对象】,所有路由中的参数, params, query 都属于它

    14、vue单页面应用及优缺点

    vue核心是一个响应的数据绑定系统,mvvm,数据驱动,组件化,轻量,简洁,高效,快速,模块友好。
    缺点:不支持低版本浏览器,最低到IE9,不利于SEO的优化,首页加载时间较长,不可以使用浏览器的导航按钮需要自行实现前进后退。

    15、vue生命周期的作用是什么?

    它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。

    16、vue.nextTick()的用处?

    nextTick可以使我们在下次DOM更新循环结束之后执行延迟回调,用于获得更新后的DOM。

    18、兄弟组件之间如何传值?

    可以用过一个vue实例Bus作为媒介,要相互通信的兄弟组件之中,都引入Bus,之后通过分别调用Bus事件触发 e m i t 和 监 听 emit和监听 emiton来实现组件之间的通信和参数传递,类似window的全局自定义事件。类似与子传父,只不过是利用一个新的vue示例作为媒介,而不是当前vue示例(this)

    19、jquery和vue的控制DOM元素的主要区别是什么?

    jquery操作的是直接dom元素。vue操作的是dom元素对象。
    vue.js优势是(视图-模型)双向绑定,简化了dom的操作(不用重写大量的html标签),提高dom的复用率(以最少代码实现更多的功能),倾向于数据读写,虽然看上去使用比较繁琐,但是利于后期的维护。
    jquery优势是jquery语义化,容易理解,比较简单,可拓展的插件多。
    总结:如果dom操作频繁,不需要动画效果,就使用vue.js。如果dom操作不频繁,但又需要复杂的动画效果,就使用jquery. vue.js比较适合于后台管理页面,jquery比较适合于前台用户交互页面。

    20、vue2模版template的四种写法?

    1.写在构造器里的:
    2.写在(template)标签里
    3.写在(script type=“x-template”)标签里
    在这里插入图片描述

    21、var let const声明的变量的区别

    let不允许在相同作用域内,重复声明同一个变量。let声明的变量只在其所在代码块内有效
    const是定义常量的,而且定义一次以后不能再进行更改, 否者会报错;
    使用const定义的常量, 拥有let一样的特性(无声明提前, 有块状作用域, 重复声明)

    • let:* 声明的变量只在它所在的代码块有效; * 需要先声明然后再使用,否则报错
    • var:* 声明的变量在全局范围内都有效;
    • var定义的变量可以修改,如果不初始化会输出undefined,不会报错
    • const: * 声明一个只读的常量,一旦声明,常量的值就不允许改变;
    • 一旦声明了变量,就必须初始化,不能留到以后赋值;
    • 只在声明所在的块级作用域内有效;
      在这里插入图片描述

    22、如何理解JSON?

    JSON是一种轻量级的数据交换格式,作用:通常用于服务端向页面传输数据。
    JSON 是 一个 JS 对象,有 2 个 API
    JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
    JSON.parse() 方法用于将一个 JSON 字符串转换为对象。

    23、函数声明和函数表达式的区别(作用域)

    1.以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的.
    2.以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用.
    3.以函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者try/catch/finally中,而函数表达式可以在任何地方声明.

    24、关于动态路由

    不能传递参数的是静态路由,可以传递参数,但是其对应的路由数量是不确定的,叫动态路由
    在参数名前面加上:,然后将参数写在路由的path内
    这是无参数跳转在这里插入图片描述

    query和params两者都可以传递参数,区别是什么?
    1.query 传参配置的是path,而params传参配置的是name,在params中配置path无效
    2.query在路由配置不需要设置参数,而params必须设置
    3.query传递的参数会显示在地址栏中
    4.params传参刷新会无效,但是query会保存传递过来的值,刷新不变

    25、vue是什么?跟JS有什么区别?

    vue就是一个js库,并且无依赖别的js库,跟jquery差不多。vue的核心库只关注视图层,非常容易与其它库或已有项目整合。Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。
    区别:在传统web开发中,我们搭建项目都以html结构为基础,然后通过jquery或者js来添加各种特效功能,需要去选中每一个元素进行命令,这样太繁琐了
    vue的好处:1.数据绑定:vue会根据对应的元素,进行设置元素数据,通过输入框,以及get获取数据等多种方式进行数据的实时绑定,进行网页及应用的数据渲染 。
    2.组件式开发:通过vue的模块封装,它可以将一个web开发中设计的各种模块进行拆分,变成单独的组件,然后通过数据绑定,调用对应模版组件,同时传入参数,即可完成对整个项目的开发。
    一句话概括:用数据绑定的思想,vue可以简单写单个页面,也可以写一个大的前端系统,也可以做手机app的界面。

    26、Vue-CLi是啥?

    它是一个vue.js的脚手架工具。说白了就是一个自动帮你生成好项目目录,配置好Webpack,以及各种依赖包的工具

    27、vue是怎么渲染的?

    1.原有模板语法,挂载渲染:就是对使用Vue标签语法的hmtl进行渲染。
    2.使用render属性,createElement函数直接渲染:原本无html,通过JavaScript 的完全编程的能力生成页面。
    3.使用render属性,配合组件的template属性,createElement函数渲染
    4.使用render属性,配合单文件组件,createElement函数渲染

    28、vue常用的5个事件修饰符
    .stop: 阻止事件冒泡;
    .prevent: 阻止默认事件;
    .capture: 实现捕获触发事件的机制 ;
    .self: 实现只有点击当前元素时候,才会触发事件处理函数 ;
    .once: 事件只触发一次;

    26、vue-router 有哪几种导航钩子?

    第一种:全局导航钩子
    第二种:单独路由独享钩子
    第三种:组件内的钩子

    29、vue-router 路由模式有几种?

    Hash: 使用URL的hash值来作为路由。支持所有浏览器。
    History: 以来HTML5 History API 和服务器配置。参考官网中HTML5 History模式
    Abstract: 支持所有javascript运行模式。如果发现没有浏览器的API,路由会自动强制进入这个模式。

    30、Vue组件通信的六种方法

    • 1.父组件向子组件传值: props/$emit
    • 2.子组件向父组件传值(通过事件形式) $ emit/$on
    • 3.vuex
    • 4.$ attrs/$ listeners
      $ attrs:包含了父作用域中不被 prop 所识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$ attrs" 传入内部组件。通常配合 interitAttrs 选项一起使用。
      $ listeners:包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件
    • 5.provide/inject
    • 6.$parent / $childrenref
      ref:如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例
      $parent / $children:访问父 / 子实例

    31、veu中的三要素

    响应式:vue如何监听到 data 每个属性变化?
    vue的响应式原理:Vue在组件和实例初始化的时候,会将data里的数据进行数据劫持(object.definepropty对数据做处理)。被解除过后的数据会有两个属性:一个叫getter,一个叫setter
    getter是使用数据的时候触发,setter是在修改数据的时候触发,修改数据的时候触发setter,同时也触发了底层的watcher(可以收到属性的变化通知并执行相应的函数,从而更新视图。)监听,通知dom修改刷新。

    模板引擎:vue的模板如何被解析,指令如何处理?
    . 本质就是个字符串。模板最终必须转换成JS代码。因为:
    . 有逻辑,如(v-if v-for),必须用JS才能实现
    . 转换为html渲染页面,必须用JS才能实现
    . 因此,模板最重要转化成JS函数(render函数)

    渲染:vue 的模板如何被渲染成 html?
    模板解析成render函数---->返回JS模拟的虚拟DOM结构:模板是一段字符串,模板解析生成render函数,执行render函数返回为vnode,vnode表明了各个节点的层级关系、特性、样式、绑定的事件。
    2、 vnode---->html:通过 updateComponent函数调用vm._update()传入vnode,利用基于snabbdom的patch()方法改造的生成真实DOM节点并渲染页面。

    32、v-if跟v-show的区别

    v-if是通过控制dom节点的存在与否来控制元素的显隐;v-show是通过设置DOM元素的display样式,block为显示,none为隐藏;
    v-if判断是否加载,可以减轻服务器的压力,在需要时加载,但有更高的切换开销;
    v-show调整DOM元素的CSS的dispaly属性,可以使客户端操作更加流畅,但有更高的初始渲染开销。
    如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

    33、在ES6中,Promise对象只有三种状态

    异步操作“未完成”(pending)
    异步操作“已完成”(resolved,又称fulfilled)
    异步操作“失败”(rejected)

    34、箭头函数和普通函数的区别

    ,不需要通过function关键字创建函数,并且可以省略return关键字.但函数体内的this对象指的是定义时所在的对象,而不是使用时所在的对象;
    ①不绑定this,箭头函数的this永远指向其父作用域,任何方法都改变不了,包括call,apply,bind。
    普通函数的this指向调用它的那个对象。
    ②箭头函数不能作为构造函数,不能使用new
    ③箭头函数不绑定arguments
    ④箭头函数通过callapply调用,不会改变this指向,只会传入参数
    ⑤箭头函数没有原型属性

    35、ES6有哪些新特性

    1.模板字符串:模板字符串是为了解决使用+号拼接字符串的不便利而出现的
    在这里插入图片描述
    2.解析结构
    在这里插入图片描述

    1. 函数默认参数

    在这里插入图片描述
    4.展开运算符
    在这里插入图片描述
    5.class类

    展开全文
  • 前端面试锦集

    千次阅读 多人点赞 2019-07-20 13:41:45
    大体分为三步: 一、浏览器向服务器发送请求(在地址栏中输入网页地址) 二、服务器收到请求找到资源返回给浏览器 三、浏览器解析服务器返回的内容(页面显示的内容)。 URL结构,DNS解析,DNS缓存,三次tcp握手,...

    前端面试锦集

    1. 自我介绍:
    2. List item.html常用的标签
      Div,span,p,h1-h5,input,img,strong,a,hr,br
      http://www.divcss5.com/html/h50219.shtml
    3. html5的新特性
      (1)websocket:https://www.runoob.com/html/html5-websocket.html
      WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
      HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
      在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
    4. ajax的工作原理:
      通过XmlHttpRequest对象来向服务器发出异步请求,从服务器获得数据,然后用Javascript来操作DOM而更新页面
      Ajax优势:
      页面无刷新,在页面内与服务器通信,给用户的体验非常好
      使用异步方式与服务器通信,不需要打断用户操作,具有更加迅速的响应能力
      可以嫌少服务器的负担,利用客户端闲置能力来处理任务
      Ajax工作流程:
      创建Ajax对象(XmlHttpRequest)
      判断数据的传输方式(get/post)
      打开连接open()
      发送send()
      ajax的js写法
    //get方法
    var ajax = new XMLHttpRequest();
    ajax.open('get','getStar.php?starName='+name);
    ajax.send();
    ajax.onreadystatechange = function () {
       if (ajax.readyState==4 &&ajax.status==200) {
        console.log(ajax.responseText);//输入相应的内容
        }
    }
    
    //post方法
    var xhr = new XMLHttpRequest();
    //post请求一定要添加请求头才行不然会报错
    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
     xhr.open('post', '02.post.php' );
    xhr.send('name=fox&age=18');
    xhr.onreadystatechange = function () {  if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText);
      } 
    };
    
    1. js基本数据类型:Boolean null string number undefined
      复杂数据类型:object
      全局数据类型:Marth

    2. 浏览器前端发送url到服务器的过程
      https://www.cnblogs.com/max-tlp/p/6827956.html
      大体分为三步:
      一、浏览器向服务器发送请求(在地址栏中输入网页地址)
      二、服务器收到请求找到资源返回给浏览器
      三、浏览器解析服务器返回的内容(页面显示的内容)。
      URL结构,DNS解析,DNS缓存,三次tcp握手,http请求,http响应,浏览器渲染,前后端交互,四次挥手https://www.jianshu.com/p/417ac86ef086

    3. 响应式布局怎么实现
      (1) 原生代码实现:@media screen可以查询当前浏览器的尺寸,因此可采用该方法对同一个页面设置不同的CSS样式,来满足不同分辨率要求。
      (2) 采用bootstrap框架布局

    4. css实现水平垂直居中
      水平居中 margin:0 auto;
      垂直居中: https://www.cnblogs.com/zhouhuan/p/vertical_center.html

    5. 页面是怎样加载和渲染的过程

    6. 数组的操作

    7. vue.js的好处

    8. html5比html4好在哪里

    9. canvas调用了那些api

    10. js获取页面url

    11. 状态码有哪些 作用是什么 404 401 400 500 200 302等

    12. ajax请求实现的过程:
      AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    13. 前端技术栈有哪些
      vuejs:是一套构建用户界面的渐进式框架。它最大的优势就是组件化,用这个框架可以把很多元素封装成组件,最后功能的开发变成了组件的拼装,极大的提高了代码的复用。
      reactjs,boots TV,nodejs

    14. js出现点击上一个模块下一个模块同样被点击应如何处理。事件捕获事件冒泡

    15. 函数声明、函数表达式及匿名函数的区别和调用指向https://www.cnblogs.com/zhouhuan/p/vertical_center.html
      https://blog.csdn.net/weixin_44505375/article/details/86499744
      函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。
      函数表达式 :var fnName = function () {…};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。
      匿名函数:function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,

    16. 立即执行函数(自执行函数)
      https://blog.csdn.net/qq_42051213/article/details/80767256
      立即执行函数的两种常见形式:( function(){…} )()和( function (){…} () ),一个是一个匿名函数包裹在一个括号运算符中,后面再跟一个小括号,另一个是一个匿名函数后面跟一个小括号,然后整个包裹在一个括号运算符中,这两种写法是等价的。要想立即执行函数能做到立即执行,要注意两点,一是函数体后面要有小括号(),二是函数体必须是函数表达式而不能是函数声明。
      除了使用()运算符之外,!,+,-,=等运算符都能起到立即执行的作用。这些运算符的作用就是将匿名函数或函数声明转换为函数表达式,如下图所示,函数体是函数声明的形式,使用运算符将其转换为函数表达式之后就可达到立即执行效果。
      使用立即执行函数的好处:通过定义一个匿名函数,创建了一个新的函数作用域,相当于创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏污染全局的命名空间。此时若是想访问全局对象,将全局对象以参数形式传进去即可。

    17. 什么是跨域,解释一下
      跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
      同源:是指,域名,协议,端口均相同,localhost和127.0.0.1虽然都指向本机,但也属于跨域。
      解决办法:
      1、JSONP:
      使用方式就不赘述了,但是要注意JSONP只支持GET请求,不支持POST请求。
      2、代理:
      例如www.123.com/index.html需要调用www.456.com/server.php,可以写一个接口www.123.com/server.php,由这个接口在后端去调用www.456.com/server.php并拿到返回值,然后再返回给index.html,这就是一个代理的模式。相当于绕过了浏览器端,自然就不存在跨域问题。
      3、PHP端修改header(XHR2方式)
      在php接口脚本中加入以下两句即可:
      header(‘Access-Control-Allow-Origin:*’);//允许所有来源访问
      header(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式

    18. JS中的位置和宽度:clientWidth、offsetWidth、scrollWidth等区别
      clientWidth = width+左右padding
      offsetWidth = width + 左右padding + 左右boder
      scrollWidth:获取指定标签内容层的真实宽度(可视区域宽度+被隐藏区域宽度比如滚动条)。
      width:content内容宽度。
      https://blog.csdn.net/qq_42089654/article/details/80515916

    19. 牛客网 https://www.nowcoder.com/profile/308592184/myFollowings

    20. 线程与进程的区别
      一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。
      另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
      线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
      从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

    21. 如何对网站的文件和资源进行优化?

    22. 请说出三种减少页面加载时间的方法。(加载时间指感知的时间或者实际加载时间)
      1.优化图片
      2.图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)
      3.优化CSS(压缩合并css,如margin-top,margin-left…)
      4.网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。)
      5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)
      6.减少http请求(合并文件,合并图片)。

    23. 请写一个简单的幻灯效果页面
      如果不使用JS来完成,可以加分。(如:纯CSS实现的幻灯片效果)
      (1) js实现方法

    //css
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            li{
                list-style: none;
            }
            #demo{
                width: 600px;
                height: 400px;
                position: relative;
                margin: 0 auto;
            }
            #list{
                position: relative;
                width: 100%;
                height: 100%;
            }
            #list li{
                width: 100%;
                height: 100%;
                position: absolute;
                opacity: 1;
            }
            #list li img{
                width: 100%;
                height: 100%;
            }
            #btn{
                position: absolute;
                right: 10px;
                bottom: 10px;
                z-index: 10;
    
            }
            #btn li{
                position: relative;
                float: left;
                width: 20px;
                height: 20px;
                background-color: #fb7a24;
                color: #ffffff;
                margin: 6px;
                text-align: center;
                border-radius: 90px;
                font-size: 13px;
            }
            #btn li:hover{
                background-color: #FF0000;
            }
            .current{
                background-color: #FF0000!important;
            }
        </style>
    <div id="demo">
        <ul id="list">
            <li><img src="img/img_1.jpg" alt=""></li>
            <li><img src="img/img_2.jpg" alt=""></li>
            <li><img src="img/img_3.jpg" alt=""></li>
            <li><img src="img/img_4.jpg" alt=""></li>
            <li><img src="img/img_5.jpg" alt=""></li>
        </ul>
        <ul id="btn">
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>
    
    </div>
    //js
    <script type="text/javascript">
    
        var list=document.getElementById('list');
        var oLi=list.getElementsByTagName('li');
        console.log(oLi)
        var btn=document.getElementById('btn');
        var oImg=btn.getElementsByTagName('li');
        console.log(oImg)
       var time=null;
        var b=0;
        function show(a) {
            for(var i=0;i<oLi.length;i++)
            {
                oLi[i].style.opacity=0;
                oImg[i].className='';
            }
            oLi[a].style.opacity=200;
            oImg[a].className='current';
        }
            function autoPlay() {
            time=setInterval(function () {
                b++;
                if(b>=oImg.length)
                    b=0;
                show(b)
            },1000);
    }
    autoPlay();
        
       //鼠标控制
        for(var i=0;i<oImg.length;i++){
            oImg[i].index = i;
            oImg[i].onmouseover=function () {
                clearInterval(time);
                show(this.index)
            }
            oImg[i].onmouseout=function(){
                autoPlay();
            }
        }
    
    
    
    </script>
    

    (2)css3实现方法

    <div class="banner"></div>
    //css3
     <style type="text/css">
            .banner{
                width: 600px;
                height: 400px;
                margin: 15px auto;
                background-size: cover;
                background-position: center;
                animation-name: mymove;
                animation-duration: 20s;
                animation-timing-function: linear;
                animation-iteration-count: infinite;
            }
            @-webkit-keyframes mymove {
                0% {background: url(" img/img_1.jpg") no-repeat;}
               25% {background: url(" img/img_2.jpg") no-repeat;}
               50% {background: url(" img/img_3.jpg") no-repeat;}
               75% {background: url(" img/img_4.jpg") no-repeat;}
               100% {background: url(" img/img_5.jpg") no-repeat;}
           }
        </style>
    
    1. .什么是FOUC(无样式内容闪烁)?你如何来避免FOUC?
      FOUC(Flash Of Unstyled Content)–文档样式闪烁
      而引用CSS文件的@import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。解决方法简单的出奇,只要在 <head>之间加入一个<link>或者<script>元素就可以了。
    2. doctype(文档类型)的作用是什么?你知道多少种文档类型?
      此标签可告知浏览器文档使用哪种HTML或XHTML规范。该标签可声明三种DTD类型,分别表示严格版本、过渡版本以及基于框架的HTML文档。
    3. 使用XHTML的局限有哪些?
      XHTML 元素必须被正确地嵌套。
      XHTML 元素必须被关闭。
      标签名必须用小写字母。
      XHTML 文档必须拥有根元素。
      所有的 XHTML 文档必须拥有 DOCTYPE 声明,并且 html、head、title 和 body 元素必须存在。虽然代码更加的优雅,但缺少容错性,不利于快速开发。
    4. data-属性的作用是什么?
      data-* 属性用于存储页面或应用程序的私有自定义数据。data-* 属性赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力。存储的(自定义)数据能够被页面的 JavaScript 中利用,以创建更好的用户体验(不进行 Ajax 调用或服务器端数据库查询)。
      data-* 属性包括两部分:
      属性名不应该包含任何大写字母,并且在前缀 “data-” 之后必须有至少一个字符
      属性值可以是任意字符串
    5. 请描述一下cookies,sessionStorage和localStorage的区别?
      sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据。有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。
      共同点:都是保存在浏览器端,且同源的。
      区别:
      1.cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
      2.存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
      3.数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
      4.作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。
      5.Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。
      6.Web Storage 的 api 接口使用更方便。
    6. 描述下“reset”CSS文件的作用和使用它的好处。
      因为浏览器的品种很多,每个浏览器的默认样式也是不同的,所以定义一个css reset可以使各浏览器的默认样式统一。
    7. 22.列举不同的清除浮动的技巧,并指出它们各自适用的使用场景。
      1.使用空标签清除浮动。这种方法是在所有浮动标签后面添加一个空标签定义css clear:both.弊端就是增加了无意义标签。
      2.使用overflow。给包含浮动元素的父标签添加css属性overflow:auto;zoom:1;zoom:1用于兼容IE6。
      3.使用after伪对象清除浮动。该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置height:0,否则该元素会比实际高出若干像素;二、content属性是必须的,但其值可以为空,content属性的值设为”.”,空亦是可以的。
      4.浮动外部元素
      此三种方法各有利弊,使用时应择优选择,比较之下第二种方法更为可取。
    8. 解释下CSS sprites,以及你要如何在页面或网站中使用它。
      CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background-repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。这样可以减少向服务端发起请求的次数,提高速率。
    9. 你用过媒体查询(响应式布局),或针对移动端的布局/CSS吗?
      媒体查询,就是响应式布局。通过不同的媒介类型和条件定义样式表规则。媒介查询让CSS可以更精确作用于不同的媒介类型和同一媒介的不同条件。
      语法结构及用法:@media 设备名 only (选取条件) not (选取条件) and(设备选取条件),设备二{sRules}。
      示例如下:
     /* 当浏览器的可视区域小于980px */
    
     @media screen and (max-width: 980px) {
     #wrap {width: 90%; margin:0 auto;}
     }
     /* 当浏览器的可视区域小于650px */
     @media screen and (max-width: 650px) {
    #header {height: auto;}
    }
    
    1. 你熟悉SVG样式的书写吗?
      SVG 意为可缩放矢量图形
      https://blog.csdn.net/dusea/article/details/49474349
      什么是SVG?
      SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
      SVG 用来定义用于网络的基于矢量的图形
      SVG 使用 XML 格式定义图形
      SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
      SVG 是万维网联盟的标准
      SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
      书写示例如下:
    <?xml version="1.0" standalone="no"?>
        <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
        <svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
            <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>
        </svg>
    
    1. css盒模型
    标准宽高
    标准模型content的宽度
    IE模型content+padding+border的宽度

    盒模型的组成:content,padding,border,margin
    css如何设置两种模型
    这里用到了CSS3 的属性 box-sizing

    /* 标准模型 */
    box-sizing:content-box;
    
     /*IE模型*/
    box-sizing:border-box;
    

    37.display属性的作用

    属性作用
    none此元素不会被显示
    block此元素将显示为块级元素,此元素前后会带有换行符
    inline默认。此元素会被显示为内联元素,元素前后没有换行符
    inline-block行内块元素
    1. css之position属性的作用
      relative 相对定位 相对于自身的位置定位,可以用left,bottom,top,right来改变位置
      fixed 固定定位 相对于整个页面来定位,滚动之后仍旧在那个位置
      absolute 绝对定位 如果父元素设置相对定位,那么就是针对父元素来定位的,否则就是针对浏览器来定位,可以用left,top,bottom,right来改变位置
      static 默认定位 默认即静止定位,是按照元素在(x)html出现的顺序依次分配位置,static是不受top right left bottom影响的。若要清除定位时可使用static来消除定位的影响。
    2. js事件代理。
      JavaScript事件代理则是一种简单的技巧,通过它你可以把事件处理器添加到一个父级元素上,这样就避免了把事件处理器添加到多个子级元素上。当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委托给父节点来触发处理函数。这主要得益于浏览器的事件冒泡机制。事件代理用到了两个在JavaSciprt事件中常被忽略的特性:事件冒泡以及目标元素。
    function getEventTarget(e) {
        var e=e||window.event;
        var src= e.target||e.srcElement;
        return src;
    }
    
    1. 解释下JavaScript中this是如何工作的。
      this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。匿名函数或不处于任何对象中的函数指向window 。
      1.如果是call,apply,with,指定的this是谁,就是谁。
      2.普通的函数调用,函数被谁调用,this就是谁。
    2. document.write()方法为什么一般不用
    <html>
    <head></head>
    <body>
    <script type="text/javascript">document.write("<p>Hello</p>");</script>
    </body>
    </html>
    

    当页面加载完毕,你会在页面看到 Hello。查看源文件就是上面的代码。
    但如果页面已经加载完毕,再使用 document.write,那就会覆盖整个文档。

    <html>
    <head></head>
    <body>
    <script type="text/javascript">
    // 当点击鼠标时调用 document.write
    document.onclick = function() {
    document.write("<span>Javascript</span>");
    };
    </script>
    </body>
    </html>
    

    因为鼠标动作是在页面加载完毕后执行的,所以整个页面会被 Javascript所覆盖。现在查看源文件就只会看到 <span>Javascript</span>

    1. 请指出document.onload和document.ready两个事件的区别。
      页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页面包含图片等文件在内的所有元素都加载完成。
    2. 如何实现下列代码:[1,2,3,4,5].duplicator();//[1,2,3,4,5,1,2,3,4,5]
    var arr = [1,2,3,4,5];
        Array.prototype.duplicator = function (){
            var len = this.length;
            for(var i=0;i<len;i++){
                this.push(this[i]);
            }
            return this;
        }
           console.log(arr.duplicator())
    
    1. 什么是”use strict”;?使用它的好处和坏处分别是什么?
      在代码中出现表达式-“use strict”; 意味着代码按照严格模式解析,这种模式使得Javascript在更严格的条件下运行。
      好处:
      消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
      消除代码运行的一些不安全之处,保证代码运行的安全;
      提高编译器效率,增加运行速度;
      为未来新版本的Javascript做好铺垫。
      坏处
      同样的代码,在”严格模式”中,可能会有不一样的运行结果;一些在”正常模式”下可以运行的语句,在”严格模式”下将不能运行。
    2. javascript的typeof返回哪些数据类型.
      string,boolean,Array,undefined,object,function
    3. js强制类型转换和隐式类型转换
      强制类型转换:parseIn,parseFloat,number
      隐式类型转换:== ===
    4. splite和join的区别
      splite 是字符串切割成数组
      join 将数组合并成字符串
    5. splice和slice操作数组的区别
      splice(1,0,‘ww’) 在1的位置添加www
      splce(1,1,‘rrr’) 从位置1开始的1个元素 用rr替代删除的元素
      slice(start,end)从start位置开始选取元素到end截止 并且返回选择的元素
    6. 尾部 push() pop() 头部unshif() shif()
    7. js继承的几种方式:https://blog.csdn.net/wyw223/article/details/86567897
    8. js事件流:https://segmentfault.com/a/1190000004463384?utm_source=tag-newest
      DOM事件流包括三个阶段。
      事件捕获阶段
      处于目标阶段
      事件冒泡阶段
    9. CSS有哪些属性是可以继承的?
      常见:
        1、字体系列属性
        font-family:字体系列
        font-weight:字体的粗细
        font-size:字体的大小
        font-style:字体的风格
        2、文本系列属性
        text-indent:文本缩进
        text-align:文本水平对齐
        line-height:行高
        word-spacing:单词之间的间距
        letter-spacing:中文或者字母之间的间距
        text-transform:控制文本大小写(就是uppercase、lowercase、capitalize这三个)
        color:文本颜色
        3、元素可见性:
        visibility:控制元素显示隐藏
        4、列表布局属性:
        list-style:列表风格,包括list-style-type、list-style-image等
        5、光标属性:
        cursor:光标显示为何种形态
    10. 手动写动画最小的时间间隔是多久:
      多数显示器的默认频率是60HZ,即每秒刷新60次。所以理论上的最小间隔是 1/60*1000ms = 16.7ms

    关于vue的面试题:

    https://segmentfault.com/a/1190000018225708?utm_source=tag-newest

    数据结构

    1、数组
    2、栈
    3、队列
    4、链表
    5、树
    6、散列表
    7、堆
    8、图
    https://blog.csdn.net/yeyazhishang/article/details/82353846

    计算机网络

    IOS七层 TCP/UDP/IP等:
    https://blog.csdn.net/Trap_In_Study/article/details/87731638

    展开全文
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    在css/js代码上线之后开发人员经常会优化性能,从用户刷新网页开始,一次js请求一般情况下有哪些地方会有缓存处理? 25 一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给...
  • 转场动画的使用一般分为以下几个步骤: 1.创建转场动画 2.设置转场类型、子类型(可选)及其他属性 3.设置转场后的新视图并添加动画到图层 下表列出了常用的转场类型(注意私有API是苹果官方没有公开的...
  • Android的动画分为了三种, 分别是 帧动画、View动画、属性动画。 1、帧动画动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。 帧动画的使用很简单,总共就两个步骤...
  • Web动画形式

    千次阅读 2018-06-10 15:27:24
    因为动画关系到Web开发的两个比较重要的点,一是视觉效果,二是用户体验,通过酷炫动画效果可以给视觉加不少分,同样,恰到好处的微动效也会给用户体验带来不错的惊喜,基于此,我们的Web动画该如何实现,他有哪些...
  • 基于SSM的校园二手交易平台的设计与实现

    万次阅读 多人点赞 2018-05-06 14:24:44
    2 概要设计 系统的整体结构流程图如下 2.1 系统模块 本系统的可以分为以下几个模块。 2.1.1 商品首页 负责显示热门的商品信息,以及显示本网站的网站信息,导航栏负责跳转到各个页面,没有登录显示按钮可以让用户...
  • ​ Android的动画分为3大类:View动画、帧动画和属性动画。View动画在我之前的一篇博客 我的Android开发之旅(二):Android三种动画效果的浅入之View动画 中有讲述到,主要介绍了View动画的基本属性以及如何使用。...
  • Transition基于两个概念:场景(scenes)和变换(transitions),场景是UI当前状态,变换则定义了在不同场景之间动画变化的过程。 Transition分为三种类型(android5.0中使用)。 进入动画:Activity中的所有视图...
  • Android 的动画可以分为三种:View 动画、帧动画和属性动画,View 动画通过对场景里的对象不断做图像变化(平移、缩放、旋转、透明度)从而产生动画效果,View 动画支持自定义。帧动画通过顺序播放一系
  •  好了废话不多说了,我们开始正式的内容,这次要说的内容有两个,一个是3D场景的渲染,另一个就是骨骼动画的显示。( PS:代码较长,文章之中只给出了实现思路,如果需要完整的代码,可以留下邮箱或者私信我! ) ...
  • 计算机图形学导论

    千次阅读 多人点赞 2018-10-12 22:42:46
    因此光线投射主要被用于实时模拟场景下, 例如三维计算机游戏以及动画等,这类场景往往对细节不太重视而且通过人为制造细节可以得到更好的表现效果。 辐射着色 :辐射着色是模拟反射光线如何反射到它表面以及如何...
  • Unity3d场景快速烘焙【2020】

    万次阅读 多人点赞 2019-07-24 22:51:53
    很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,...
  • WPF开发教程

    万次阅读 多人点赞 2019-07-02 23:13:20
    无需要求开发人员计算下一位置或下一颜色,您可以将动画表示为动画对象上的一组属性。于是,这些动画可以表示开发人员或设计人员的意图(在 5 秒内将此按钮从一个位置移动到另一个位置),系统就可以确定完成此任务...
  • maya游戏模型制作是指:maya游戏模型制作师根据原画师提供的原画稿件,制作出游戏中的环境、机械、道具、人物、动物、怪物等模型,分为maya游戏角色模型制作和maya游戏场景模型制作。 Autodesk Maya用于不少的动画...
  • 二维动画教学课件

    2018-05-01 13:46:43
    Flash提供了两种创建动画的方式,分别为逐帧动画与补间动画,其中补间动画又可以分为形状渐变动画与运动渐变动画两种,用户可以轻易的使对象在场景中来回的运动,在运动的过程中还可以伴随有诸如放大、缩小、旋转、...
  • 火龙果软件工程技术中心 (1)描述两条或更多的分支合并到单一的一条后续...(3)业务场景举例报销流程,假设分为三部分:住宿费、交通费、飞机票特殊报销。可能出现的情况有:住宿费+交通费;住宿费+交通费+飞机票特
  • 关于Activity跳转动画的文章已经很多了,但大都不是很完善。首先官方支持的Activity跳转动画有几种不同的实现方式,大部分文章只介绍了其中一种。具体到每一种来说,实现上是很简单,但实际使用过程中还是会有一些...
  • 游戏开发入门(五)游戏动画系统

    万次阅读 多人点赞 2018-01-30 18:11:38
    视频链接:游戏开发入门(五)游戏动画系统(8节课 时常:约2小时30分钟) PPT比视频要块一些 第二节与PPT对不上 视频中杂音太大,如果带耳机还听不清的话,建议直接看内容即可 笔记与总结(请先学习视频内容)...
  • 网格顶点动画(变形动画)是针对于物体的形状可以随意变换并记录为关键帧的动画,虽然模型的顶点数据还是应该交给GPU绘制才是正道,CPU刷新模型顶点始终是个吃力不讨好的事(不过我好像至始至终就是在干吃力不讨好的...
  • Cocos2d-x 2.0 TestCpp之场景切换动画深入分析

    万次阅读 热门讨论 2013-01-07 09:18:18
     场景的切换,是将当前正在运行的场景运行一个动画序列,这个动画序列一般由两部分构成,第一部分为一个精灵动画或者进度动画,第二部分为一个回调函数,场景在切换过程中,本身会进行精灵动画或进度动画的过程,...
  • Unity动画系统详解1:在Unity中如何制作动画

    千次阅读 多人点赞 2020-05-17 15:32:34
    Unity场景中的物体可以通过制作动画,让物体动起来。简单的动画如物体的移动、旋转(比如旋转的风扇、闪烁不定的灯泡等),复杂的动画如游戏中角色的动作、面部表情等。 洪流学堂,让你快人几步。你好,我是跟着大...
  • Android动画学习——Tween Animation

    千次阅读 2015-05-27 00:37:17
    Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生的动画效果,即是一种渐变动画。 Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 Property Animation:属性动画,通过...
  • Android动画之旅-Android动画基本介绍

    千次阅读 2016-04-13 17:18:22
    在上一篇博客中,我们简单了解了在Android中的动画特效,小伙伴们是不是意犹未尽呀。...Android动画大致可以分为以下四类: (1)逐帧动画(Frame Animation) (2)补间动画(Tween Animation) (3)属性动
  • Android Transition(Android过渡动画

    万次阅读 2017-12-20 21:37:02
    对Android Transition 做一个入门级的介绍,主要包括场景动画、Activity过渡动画、共享元素动画
  • 高逼格Android转场动画

    千次阅读 2019-03-01 15:24:40
    转场动画在交互上非常有优势,本文从转场动画的使用场景和方法起,最后是实现掘金中用户头像的转场动画。 转场动画适用的版本 Activity transition APIs 只有在Android 5.0(API 21)或者更高的版本上能使用。...
  • 3D动画概述暨骨骼动画实现

    千次阅读 2017-12-20 10:31:53
    不同于其他文章简单的罗列和介绍每种类型的3D动画,本文尝试以一种优化演进的思路对动画运作机理进行递进式推演,在这个过程中自然而然的推导出常见的几种3D动画类型,以此证明其出现的必要性和合理性。本文尽量以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,215
精华内容 9,686
关键字:

动画场景一般分为