请问如何通过“自由绘”实现深度布局家 居的数 字 化?

网络文化经营许可证 跟帖评论自律管理承诺书 违法和不良信息举报电话:400-140-2108 未成年人相关举报:400-140-2108,按5 公司名称:北京抖音信息服务有限公司

}

编辑导语:数据化时代,越来越多的场景需要数据可视化,越来越多的设计师需要与数据打交道。对于B端设计师,数据可视化更是一个必不可少的一个技能。本文作者从数据可视化的基本信息入手,给大家整理了一份B端数据可视化设计指南。一起来看看吧。

在如今的工作中(尤其是 B 端)越来越多的会开始出现数据可视化的身影,对于一部分小伙伴来说这个概念是较为陌生的,面对这道无形之中提升的“门槛”我们常常会表现的手足无措。

所以,为了让大家对于数据可视化不再那么束手无措,我希望能通过这篇文章和大家一起交流学习,解决一些属于我们共同的问题。

那么我们还是老规矩,想要了解一个事物首先需要知道的是它的定义。

一、数据可视化的基本信息

1. 数据可视化的定义

较为笼统的来说数据可视化是一种由图形、图像、数字等元素组成的语言用于解释、呈现目标数据之间的关系。

从这个定义上来看,数据可视化从外观层面来说是与图形、图像这些视觉元素密不可分,这也是数据可视化最为明显的特征。

而结合我们实际的生活与工作来说,数据可视化是一种以图形符号为主要表现形式,将不可见的、抽象的、复杂的、枯燥的、专业的、不直观的数据内容,有趣的、浅显的传递给用户的有效手段。

用户可以通过这样的手段完成自己的目标(例如对选定范围内的数据进行分析,发现数据的周期与规律、迅速找到自己目标节点中的关键数值、对比几组数据以了解当下研究对象的情况等)这也是数据可视化最为明显的价值。

关于可视化的发展史上可追溯至 1950 年,当时人们利用计算机创建出了首批图形图表,可以说是数据可视化图表最为早期的雏形,而在 50-60 年代的可视化中又以查尔斯·约瑟夫·米纳德的《1812-1813 对俄战争中法军人力持续损失示意图》为代表。

该图描绘了拿破仑的军队自离开波兰到俄罗斯边界后军力损失的状况,也是后世分析拿破仑对俄战争的重要数据分析资料,后来这种带状图被称为“桑基图”用来解释能量的流动。

而可视化真正被提到一个应用理论的高度是到了 1987 年布鲁斯·麦考梅克和马克沁·布朗所编写的美国国家科学基金会报告《Visualization in Scientific Computing》(科学计算之中的可视化),其意在强调了基于计算机的可视化技术方法的必要性,此时的概念已经与现在我们所接触的工作中的数据可视化是非常接近。

到了 90 年代初人们发起了一个称为“信息可视化”的研究领域旨在为许多应用领域(科学、商业、行政、财务、数字媒体)之中对于抽象的异质性数据集的分析工作提供支持,与前面提到的“科学可视化”交叉形成了现在耳熟能详的“数据可视化”,此时这个词汇才慢慢的被更多的专业领域的人所接受,并在之后互联网的不断发展中扩充着自己的分支。

3. 为什么会使用数据可视化

目前大量开始使用视觉可视化的原因其实非常简单大致的原因可以分为需要处理的数据量太大了和人脑不够用了。

据不完全统计 IBM 公司每天有 2.5 亿字节数据的吞吐量,麻省理工学院的研究科学家 Andrew McAfee 和 Erik Brynjolfsson 教授指出,如今在互联网上传递的数据量比过去 20 年的总和还多,而且根据 IDC 预测,到 2025 年将有 163 万亿 GB 的数据。

这是非常惊人的,而这么多需求的数据量单凭人脑的计算能力和处理能力来说是完全无法与之匹配的,研究表明人脑很难同时处理 5 组以上的抽象数据,所以这种单线程的处理方式就决定了需要借助外力。

而对于用户尤其是决策层的用户来说在现实的工作场景中经常需要同时处理超过 5 组以上的数据并需要对其建立精准的分析模型以便于做出最准确的决策所以基于这样的需求,数据可视化设计氤氲而生。

4. 数据可视化的优势

基于数据可视化的需求来看,数据可视化的优势是显而易见的,可以概括为两点:认知减负和传递赋能。

认知减负是使用者在使用数据可视化工具时候的最直观感受,当所面对的庞大的、复杂的枯燥海量数据集变成了图像化、通俗化、形象化的视觉符号时,我们会本能的放下对于面对冰冷数据时候的抗拒和戒备,这是因为人对于一目了然更加接近自己熟悉的有趣事物的时候,会更为亲切和愿意去主动理解。

而且被处理过、规划过的简洁直观表现形式,能更为直接的让使用者看到数据与数据之间的关联,进而分析出其潜在关系,在人对数据的认知这个环节上降低了识别成本和分析成本。

传递赋能上图像传递更接近人类最本能的获取信息的方式,比起文字来说图像更像是一个解密的步骤,通过解开文字描述这重“密码”将最本质的信息进行呈现,而且对比文字,图像所能够承载的信息其实更为广泛,而且人类读图的效率要远远高于阅读文字。

无论是一个约定俗成的语义符号形象还是符合语境的配色都能够起到比文字直白表述更为强烈的深入人心效果,并且图解的形式并不受限于语言的障碍,极大的降低了沟通成本。

基于用户的使用目标来说,使用数据可视化其实就像是一个侦探用“蛛网图”辅助自己梳理思绪进行破案的过程:

将一些有关的,但是较为零散信息数据用一根根线索穿插起来,形成体系化的联系,方便使用者迅速把握各个节点之间的关系进行推导。

所以说我们在设计数据可视化的时候并不是对我们拿到的数据的无脑映射,而是要基于用户的目标经过一定的处理和优化后才能进行呈现,随时记住我们是给用户在打辅助,所以我们每一步的设计一定要基于用户的思考。

用户的期望是能够高效、清晰、简洁地完成数据的对比、关键节点的查询、每组数据之间的分析等一系列交互,提升自己的工作效率,降低自己的学习和使用成本。

数据可视化的应用领域较为广泛涉及医疗、统计、管理、金融、娱乐、人工智能等一系列领域,在 UI 的设计中我们最常接触到的包括:

PC 后台的数据概览、数据可视化大屏、游戏 UI、后台实时监控等。

当我们大致了解了数据可视化的历史、使用原因、优势、用户目标、应用领域后下面就要切入我们设计师最为关心的话题:我们在设计中的任务。

数据可视化作为一门跨领域的学科,本身对于从业者而言就有着一定的综合素质要求,但由于国内教育并没有垂直教学学科,所以在现在的阶段从业人员一部分由纯视觉设计专业的同学组成,另一部分由纯工科类型的专业的同学组成。

于是这就导致了非视觉设计师在进行设计时,会将全副精力放在强数据的准确性、合理性上,从而让视觉的易读性上有一定的损失,表现形式也较为单一枯燥,视觉感官较差,反观视觉设计师通常会将数据可视化在视觉表现形式上过度用力,虽然营造了很好的视觉体验,但是从其实用度、可用性上来说会大打折扣。

于是设计的难点很多时候就会集中在平衡视觉与实用之间的关系。

通过以上分析,不难看出设计的主要目标,而面对这句较为抽象的“把握设计与实用之间的平衡”其实无外乎也就是拆解到功能和视觉这两个方面。

从功能上来说,我的目标是提升用户的数据阅读效率、让用户能够迅速 Touch 到目标信息,提升交互效率,一切都是以结果为导向,以解决用户问题为导向,一定记住人们不愿意接受未处理过的数据。

而从视觉上来说,我们的目标是处理好在视觉上各个模块之间的统一、透气关系,将数据进行可视化的同时尽量提升感官上的审美体验与传达上的有趣。

以上会作为后文中我们每一步设计的指导和检验的方式,从实际操作的维度上来说二者也并不是五十比五十的分配,遵循的原则是:体验一定要让位于功能,所以在视觉的层面发挥的空间其实需要比较克制。

了解了数据可视化的设计难点,明确了数据可视化的设计目标,那么我下面进入我们最重点的环节:

可视化页面案例制作,由于数据可视化的形式较多,这次我们以工作中经常接触得到的 PC 页面数据概览页为例。

同样的,细化到数据概览这个分支项目,我们同样需要明确了解其基础定义和性质,严格意义上来说数据概览部分属于 Dashboard design(仪表盘设计)的一种,其主要的目的和功能可分为分析和操作两块。

所以从综合的角度来说数据概览部分可以理解为:

其它模块的摘要视图,并显示来自应用程序各个部分的关键信息。

从这点上来说建议此模块可以在其余模块设计完后再进行设计。

如此有利于设计师从一个全局的视角切入进行设计,理解上也会更加透彻,否则很可能会陷入在你设计其他模块的时候不断地返回对其进行修改的怪圈。

它也是核心功能、常用功能的快速操作助手和快捷页面跳转(有点类似于导航),交互功能的排布和关键信息的显示,其共同的要求点是显而易见的,即明确各个模块之间的层级,做好顺序、优先级排布。

这就需要你对业务目标有一定的了解,记住,对业务目标不了解,你的设计将毫无意义。

你可以通过查询一些内部资料、报告、也可以询问产品经理等相关负责人,还可以通过用户调研得出,这里不展开说,在动手之前你需要搞清楚:

各模块之间优先级如何、你需要在一张单独的图表内展示多少变量、想展示一段时间内的值是项目和项目之间还是组与组之间、每段变量中有多少关键数据需要展示等问题。

如上图所示,在工作中我们接到需求的时候是面对一堆冗杂的数据集,组成了若干个模块。

但是正如上文所说,我们并不能对其进行无脑的可视化映射,所以首先要做的就是要对各个模块进行优先级的梳理排序。

明确了各个模块的优先级排布之后,我们开始对每一个单独模块进行可视化转化,即哪一个部分分别用什么类型的可视化形式表现。

这一步非常类似于土地使用规划,当你在将土地划分完后,为每一块土地定义其使用类型。

想准确的将图表与所要表现的数据进行对应,需要了解图表本身所包含的基本元素。

在这些元素中正常情况下一定在图表中的有:标题、时间范围、图形主体。

经常出现的有:坐标系、图例、提示信息,有时候会有的有:切换选项和值域。

知道了这些重要的基础信息了,那么在面对这么多图表的时候我们该如何正确的选择来进行使用呢?

基于目的来进行思考,所谓的基于目的来进行思考也就是要明确你所确立的数据指标需要分析的维度。

而日常使用的数据需要分析的维度无外乎:比较、构成、分布联系。

比较类图表应该是大家最为熟悉的范畴,第一时间能够想到的就是柱状图。

这也是运用最为广泛的图表之一,经常出现在 PC 端之中,用于描述分类数据之间的对比,描述的数据可以是地区、品类甚至一个时间周期。

但由于其扩展能力有限,所以一般不建议项目超过 12 条。

条形图与柱状图类似,看上去只是交换了 X 轴与 Y 轴,功能和承载数据种类较为类似。

但不同的是,条形所能承载的项目数量相对于柱状图而言更多。

由于其优良的纵向延展性一般用于手机端较多,而且从上到下的阅读方式符合人眼阅读习惯,所以也会经常用于排行榜的设计中。

分组条形图是条形图的衍生之一用于比较多个变量在不同区域之间的数量关系。

比如当想比较同样一款衣服和鞋子在四个门店中的一个季度的营业额时就可以使用分组条形图。

双向条形图表适合比较两组以上的分类数据比较,和分组条形图较为类似。

但是由于自身外观特征更适合用于比较两组意义相反的数据,也正是如此,双向条形图的组内二级分类数量一般不要超过 3 条最好。

折线图与前者最大的不同就在于在坐标轴中加入了连续类别这个概念,数据基于时间等因素变得动态了起来,注重变化趋势的展现。

面积图是折线图的延伸,除了表示变化趋势之外还能比较所选范围内积累的值。

玫瑰图应该算是可视化图表中的“网红”,因为我们从小学的课本中就知道它还有一个别称叫“南丁格尔玫瑰图”。

它是一种圆形的直方图,使用半径长短表示数值大小。

其特点就在于因为其独特的外观可以将数值之间的差距在视觉层面进行放大,和将坐标轴范围缩小来提升视觉上数值的碾压是一个道理,发布会吹水最爱。

但是要注意的是这不是一个表示占比构成的图,因为玫瑰图的每一份角度是一样的,一定要和饼状图等图区分开来,它用来表示的还是数值与数值之间的大小。

雷达图经常用于分析一些多维的性能数据、评分数据。

经常打游戏的朋友应该不陌生,有多少五边形选手可以扣个 1。

每一项指标越接近圆心说明状态越差,越向外说明越佳。

子弹图用于比较当前数值与目标之间的关系。

比如看当前业绩是否达标,也可以通过标记划分区域来进行更好的评估。

漏斗图适用于业务流程比较规范、周期长、环节多的单流程单项分析。

一定要有清晰的环节,比如监控买家从浏览到最后下单的数量统计以求得转化率,不适合无逻辑、无流程的分类对比。

构成类图表整体上来说主要用于观察部分和整体的占比关系。

最经典的莫过于饼状图,这个不用多说,通过每一份半圆角度所占整个圆的大小来表示部分和整体的关系。

但是由于其所占面积较大,经常会让视觉过于集中,影响注意力。

相对于饼状图而言,环状图十分有效的避免的干扰视觉的问题。

其本质是将饼图中间掏空,功能与饼图基本一致。

但是视觉上做到了轻量化,目前在日常设计中较为常用。

旭日图相当于前面二者的结合,适用于展示多层级数据的占比关系。

距离圆心越近代表层级越高,下一层级的总和构成上一层级,存在一定的父子层级关系。

堆叠面积图出了可以表达趋势外。

其优势在于能够表达总量和分量的构成关系,堆叠面积图上的最大的面积代表了所有的数据量的总和,是一个整体。

各个叠起来的面积表示各个数据量的大小。

堆叠柱状图的优势在于它既可以表达一级分类的比较,同时还能看出二级分类在其一级分类中的占比。

但是缺点在于二级分类并不是按照同一基准线对齐的,相比于堆叠面积图更为常用。

瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程值为负的时候向下减。

分布联系类地图在这两年在国人的心中其实已经非常熟悉了,因为疫情今年的地图可视化的应用经常出现在我们的生活中,地图可以结合不同的表达方式:

可以结合散点、可以结合动画、还可以结合引导线以及热力图的方式,图的形式使用视具体的业务需求来定。

最后就是气泡图,这是在查看分布关系中最为经典的视觉模型,用气泡的面积大小表示数量,结合辅助线可以更好地观察分布情况。

4. 匹配图表 重构布局

当我们对每种图表的功能和使用范围有了一个较为明确的认知之后,下面我们就可以对我们之前所规划好的优先级的模块进行可视化形式(图表)的匹配了。

进行匹配过后,我们将对布局进行重构,整体重构需要遵循的原则是:

布局层级明确,首屏尽量曝光更多内容。

统一透气,具有呼吸感。

(1)布局层级明确,首屏尽量曝光更多内容

从首屏曝光更多内容来说,主要是因为基于分析类的数据概览工作场景和 Analytical dashboard 自身特征决定的。

用户希望能够通过仅仅一屏的的大小进行对各类信息的情况有基本的把控,达到一眼全局的目的,其主要注意力都会放在首屏,所以我们需要尽可能的在首屏安排更多的信息。

当然首屏内容也并不是越多越好,一般建议也尽量不要超过 7 组模块,而在层级明确这块儿主要是根据人眼阅读习惯所产生的优先级排布:

正常情况下都是左上为优先级最高,而右下优先级较低,这是无数经典的眼动测试和设计总结产生的最常用结论,就不展开叙述了。

所以当我们按照优先级、首屏曝光更多内容的原则进行处理后会得到如上图的布局。

(2)统一透气 具有呼吸感

这主要是视觉层面的问题,统一透气的要求在首页概览中可以依靠栅格系统来解决。

它可以有效的保持页面布局一致性,为页面建立基础布局框架,将页面中的所有元素都捆绑在一个体系之中,同时还能有效解决适配问题。

完成了大规划之后,下面我们开始对一个一个的模块进行拆解,同样的以目标指导设计,边设计边验证

(1)层级明确 突出重点

和大规划一样,单独到每一个图表同样要时刻注意层级的梳理,销售渠道部分很明确应该是运用一个折线图的形式。

由于业务目标上来说更关注销售额而不是销售额和订单数的比较,所以我们选用了一个带有切换选项的折线图形式。

但是我们会很容易发现在读图时会出现较大的视觉干扰,并没有能够很好地突出重点信息,视觉层级不清晰、混乱。

于是我们对没有重点的视觉层级进行梳理,像之前划分模块那样,对视觉元素进行高、中、低的 P0、P1、P2 的设定,提升易读性。

层级最高的自然是重点信息突出部分。

所以我们需要在其之上做加法,给予内容异形悬停样式进行具体强调,配合投影加强视觉效果,有效传递用户,拉开与别的元素的层级。

同时数据部分用特殊字体并适当加大字号进行设计,方便用户第一时间能够看到所要强调的数据具体值。

其次就是主体图形部分,这是用户需要看到的重要部分,在使用场景中会长时间盯视。

所以采用更低的明度与更高的饱和色颜色确保易读性。

但是也不致于会让用户太晃眼产生视觉疲劳,最后考虑到该模块所处位置属于页面中较为核心的地带,给予一定的颜色透明度渐变装饰,在强化主体图形的同时不致于太显单薄。

前两者都是一定程度的做加法,那么层级最低的元素需要开始做减法,此时轴线、刻度、切换选项等元素需要弱化视觉层级,降低透明度,尤其是背后的刻度线与背景的明度对比大概控制在 1.6:1 上较为合适。

销售总额、订单数、渠道数同属于一个数据统计的范畴,最忌讳的就是把以上提供的三个信息给做平,让用户抓不住重点。

面对这样的情况还是一样,确立需要突出的重点信息给予特殊文字和大小的设计,选择合适的主体图形。

但在这里需要注意的是由于在这个模块中 P0 是金额数、订单数、渠道数这些重要值。

所以可视化图形需要适当为其让步,不要放在阅读中心位置,按照 P1 来进行处理,而订单数、转换率这样的标题就成了 P2 需要适当降低透明度和文字大小,不干扰主要信息的表达。

说到统一,最先想到的一定是色彩,无非也就是需要处理好对立统一关系,而这其中统一的比例又要大于对立,配色上尽量选用同类色系,不宜太过花哨。

尤其是对于 B 端而言,建议在可能的情况下不要超过 5 种,而且主色、辅助色,对比色的比例建议控制在 6:3:1 的比例(但不绝对),既能做到有所区别又不致于过于绚丽干扰视觉。

你的主色不一定要迁就你的品牌色,但是一定要是如上文说的尽量低明度高饱和,以适应于长时间的注视。

颜色过后就是字体,字体的使用需要极为谨慎。

如果可以尽量只出现一种字体(但不要超过三种),并且只采用基础字体。

正常情况下都是将其作为一个需要被降噪了的视觉元素来对待(比如降低透明度),在 PC 端中尽量也不要出现较多不同的字号、字重,造成没有必要的视觉干扰。

除了字体之外,在统一感的营造上卡片的布局结构也需要尽量保持一致。

这是为了提升易用性,同一个产品内,相同布局会给予用户相同交互、相同功能的暗示,也更容易培养用户习惯,提升操作效率。

呼吸感是留白的艺术,很考验设计师的排版能力,在单独的模块内,元素与元素之间尽量不要用实线进行间隔,可以的话利用亲密性原则通过元素间距的远近进行布局。

而柱状图的设计上,柱与柱之间的间距最好大于柱宽的 1.5 倍,这样才显得视觉上较为透气,不致于太臃肿。

最后就是模块中的边距留白部分,这点一定要重视,不然不仅你的版心会变散,还会严重影响你的页面呼吸感。

细节上首先要说的就是横纵坐标轴上的文字,上面的文字一定不要过长,最好的方式是将文字进行精简。

然后横、竖排对齐处理,如果实在不能精简那么再进行斜排的方式。

第二点就是横纵坐标轴有的时候会因为需要展示的数据过多而过于密集影响阅读。

这个时候可以采用适当增加一个值域的划定的方式来进行坐标间距的缩放。

第三点就是,在排行榜等模块可以适当增加一些小设计,比如金、银、铜的设计,提升情感化元素的融入。

第四点就是,尽量不要选用一些 3D 的酷炫效果来做可视化。

因为这种效果很容易对数据进行遮挡和扭曲,不是非常适用于高效阅读,也不适合 PC 页面上的交互,而且也不利于开发,比较得不偿失。

当所有的模块设计完成后,像拼高达一样进行组装,组装完成后适当调整其过于干扰视觉的地方,然后进行自检。

自检不只是从检查你的视觉、你的模块间的布局,更重要的是带入使用角色来进行检查,你可以模仿用户使用中的各种需求场景,对已经制作好的页面进行交互和阅读,看是否能够快速高效地完成使用目标。

当然除了自己之外,你还能在有条件的情况下找专家用户进行使用,即使记录使用中存在的问题并及时进行调整,当初步使用大致无问题后便可以交付。

好了以上就是在 B 端设计中对于数据可视化尤其是 PC 端数据概览的设计探讨。

当然其实关于数据可视化的范围还远远不止于此。

感谢你能够耐心看到最后,如果这对于你的工作有一点帮助那么备感荣幸,也很感谢留下你的交流意见。

本文由 @核糖Bro 原创发布于人人都是产品经理,未经许可,禁止转载。

}

为什么要转这类文章呢?因为交流了很多的小伙伴,讨论的话题多种多样,稍

微总计了一下,40%多都是程序员朋友,虽然本人不是程序员,但是也喜欢交

流探讨看到一些觉得还不错的文章就转转,希望对前端,后端的程序员朋友有

当然,diy,服务器,os,水果,虚拟化.......都交流

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

最近读到一本与前端面试有关的书《》,里面的内容很多都是高频的面试题,在此推荐给各位网友。

1.1、前端 MV*框架的意义

早期前端都是比较简单,基本以页面为工作单元,内容以浏览型为主,也偶尔有简单的表单操作,基本不太需要框架。

随着 AJAX 的出现,Web2.0的兴起,人们可以在页面上可以做比较复杂的事情了,然后前端框架才真正出现了。

如果是页面型产品,多数确实不太需要它,因为页面中的 JavaScript代码,处理交互的绝对远远超过处理模型的,但是如果是应用软件类产品,这就太需要了。

长期做某个行业软件的公司,一般都会沉淀下来一些业务组件,主要体现在数据模型、业务规则和业务流程,这些组件基本都存在于后端,在前端很少有相应的组织。

从协作关系上讲,很多前端开发团队每个成员的职责不是很清晰,有了前端的 MV框架,这个状况会大有改观。

之所以感受不到 MV*框架的重要性,是因为Model部分代码较少,View的相对多一些。如果主要在操作View和Controller,那当然 jQuery 这类库比较好用了。

IE6盒子模型与W3C盒子模型。

文档中的每个元素被描绘为矩形盒子。盒子有四个边界:外边距边界margin, 边框边界border, 内边距边界padding与内容边界content。

CSS3中有个属性可以控制盒子的计算方式,

a. 每个特定的域名下最多生成的cookie个数有限制

c. cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节

d. 安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。

1.4、浏览器本地存储

在HTML5中提供了和。

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁,是会话级别的存储。

localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

b. 每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽

c. cookie还需要指定作用域,不可以跨域调用

e. Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生

1.6、对BFC规范的理解

BFC是页面CSS 视觉渲染的一部分,用于决定块盒子的布局及浮动相互影响范围的一个区域。

BFC的一个最重要的效果是,让处于BFC内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。

利用BFC可以闭合浮动,防止与浮动元素重叠。

1.7、线程与进程的区别

a. 一个程序至少有一个进程,一个进程至少有一个线程

b. 线程的划分尺度小于进程,使得多线程程序的并发性高

c. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率

d. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

e. 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配

1.8、你都使用哪些工具来测试代码的性能?

1.9、你遇到过比较难的技术问题是?你是如何解决的?

1.10、常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?

1.11、列举IE与其他浏览器不一样的特性?

c. Trident内核的大量 Bug等安全性问题没有得到及时解决

e. CSS方面,也有自己独有的处理方式,例如设置透明,低版本IE中使用滤镜的方式

1.12、什么叫优雅降级和渐进增强?

针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给

b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要

c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

1.13、WEB应用从服务器主动推送Data到客户端有那些方式?

1.14、对前端界面工程师这个职位是怎么样理解的?

a. 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好

b. 参与项目,快速高质量完成实现效果图,精确到1px;

c. 与团队成员,UI设计,产品经理的沟通;

d. 做好的页面结构,页面重构和用户体验;

e. 处理hack,兼容、写出优美的代码格式;

f. 针对服务器的优化、拥抱最新前端技术。

1.15、你在现在的团队处于什么样的角色,起到了什么明显的作用?

1.16、你的优点是什么?缺点是什么?

1.17、如何管理前端团队?

1.18、最近在学什么?能谈谈你未来3,5年给自己的规划吗?

1.19、平时如何管理你的项目?

a. 先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;

b. 编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);

c. 标注样式编写人,各模块都及时标注(标注关键样式调用的地方);

d. 页面进行标注(例如 页面 模块 开始和结束);

e. CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);

f. JS 分文件夹存放 命名以该JS功能为准的英文翻译。

g. 图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理

1.20、说说最近最流行的一些东西吧?常去哪些网站?

1.21、Flash、Ajax各自的优缺点,在使用中如何取舍?

a. Flash适合处理多媒体、矢量图形、访问机器

b. 对CSS、处理文本上不足,不容易被搜索

a. Ajax对CSS、文本支持很好,支持搜索

b. 多媒体、矢量图形、机器访问不足

a. 与服务器的无刷新传递消息

b. 可以检测用户离线和在线状态

同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。

指一段脚本只能读取来自同一来源的窗口和文档的属性。

CMD 按需执行依赖 - 懒执行,seaJS 是它的实现

1.24、网站重构的理解

重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。

a. 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)

b. 对于移动平台的优化,针对于SEO进行优化

c. 减少代码间的耦合,让代码保持弹性

1.25、浏览器的内核分别是什么?

1.26、前端页面有哪三层构成,分别是什么?作用是什么?

a. 结构层:由 HTML 或 XHTML 之类的标记语言负责创建,仅负责语义的表达。解决了页面“内容是什么”的问题。

b. 表示层:由CSS负责创建,解决了页面“如何显示内容”的问题。

c. 行为层:由脚本负责。解决了页面上“内容应该如何对事件作出反应”的问题。

1.27、知道的网页制作会用到的图片格式有哪些?

Webp:谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。

Apng:全称是“Animated Portable Network Graphics”, 是PNG的位图动画扩展,可以实现png格式的动态图片效果。04年诞生,但一直得不到各大浏览器厂商的支持,直到日前得到 iOS safari 8的支持,有望代替GIF成为下一代动态图标准。

alt属性是为了给那些不能看到你文档中图像的浏览者提供文字说明的。且长度必须少于100个英文字符或者用户必须保证替换文字尽可能的短。

这包括那些使用本来就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器的用户等。

title属性为设置该属性的元素提供建议性的信息。使用title属性提供非本质的额外信息。参考《》

2.2、分别写出以下几个HTML标签:文字加粗、下标、居中、字体

2.3、请写出至少5个html5新增的标签,并说明其语义和应用场景

section:定义文档中的一个章节

nav:定义只包含导航链接的章节

header:定义页面或章节的头部。它经常包含 logo、页面标题和导航性的目录。

footer:定义页面或章节的尾部。它经常包含版权信息、法律信息链接和反馈建议用的地址。

aside:定义和页面内容关联度较低的内容——如果被删除,剩下的内容仍然很合理。

2.4、请说说你对标签语义化的理解?

a. 去掉或者丢失样式的时候能够让页面呈现出清晰的结构

b. 有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;

c. 方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;

d. 便于团队开发和维护,语义化更具可读性,遵循W3C标准的团队都遵循这个标准,可以减少差异化。

2.5、Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器以何种模式来渲染文档。

严格模式的排版和 JS 运作模式是,以该浏览器支持的最高标准运行。

在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。

DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。

2.6、你知道多少种Doctype文档类型?

标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,

Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

a. XHTML 元素必须被正确地嵌套。

c. 标签名必须用小写字母。

d. XHTML 文档必须拥有根元素。

2.8、html5有哪些新特性、移除了那些元素?

a. HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。

长期存储数据,浏览器关闭后数据不丢失

h. 的数据在页面会话结束时会被清除

a. 解决加载缓慢的第三方内容如图标和广告等的加载问题

b. 无法被一些搜索引擎索引到

c. 影响浏览器中的并行资源下载,iframe和父页面不能共享下载

在写程序时我们也会经常遇到这样的问题,如何保证原来的接口不变,又提供更强大的功能,尤其是新功能不兼容旧功能时。IE6以前的页面大家都不会去写DTD,所以IE6就假定 如果写了DTD,就意味着这个页面将采用对CSS支持更好的布局,而如果没有,则采用兼容之前的布局方式。这就是Quirks模式(怪癖模式,诡异模式,怪异模式)。

区别:总体会有布局、样式解析和脚本执行三个方面的区别。

a. 盒模型:在W3C标准中,如果设置一个元素的宽度和高度,指的是元素内容的宽度和高度,而在Quirks 模式下,IE的宽度和高度还包含了padding和border。

c. 设置百分比的高度:在standards模式下,一个元素的高度是由其包含的内容来决定的,如果父元素没有设置百分比的高度,子元素设置一个百分比的高度是无效的用

d. 设置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下却会失效。

a. 太深的嵌套,比如table>tr>td>h3,会导致搜索引擎读取困难,而且,最直接的损失就是大大增加了冗余代码量。

b. 灵活性差,比如要将tr设置border等属性,是不行的,得通过td

c. 代码臃肿,当在table中套用table的时候,阅读代码会显得异常混乱

d. 混乱的colspan与rowspan,用来布局时,频繁使用他们会造成整个文档顺序混乱。

e. table需要多次计算才能确定好其在渲染树中节点的属性,通常要花3倍于同等元素的时间。

src用于替换当前元素;href用于在当前文档和引用资源之间确立联系。

src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置

href是Hypertext Reference的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接

3.1、谈谈你对CSS布局的理解

3.2、请列举几种可以清除浮动的方法(至少两种)

浮动会漂浮于普通流之上,像浮云一样,但是只能左右浮动。正是这种特性,导致框内部由于不存在其他普通流元素了,表现出高度为0(高度塌陷)。

e. 父元素也设置浮动

创建了BFC的元素就是一个独立的盒子,里面的子元素不会在布局上影响外面的元素,同时BFC仍然属于文档中的普通流。

IE6-7的显示引擎使用的是一个称为布局(layout)的内部概念。

3.3、请列举几种隐藏元素的方法

a. visibility: hidden;这个属性只是简单的隐藏某个元素,但是元素占用的空间任然存在。

c. position: absolute;使元素脱离文档流,处于普通文档之上,给它设置一个很大的left负值定位,使元素定位在可见区域之外。

d. display: none;元素会变得不可见,并且不会再占用文档的空间。

e. transform: scale(0);将一个元素设置为无限小,这个元素将不可见。这个元素原来所在的位置将被保留。

g. height: 0; overflow: hidden;将元素在垂直方向上收缩为0,使元素消失。只要元素没有可见的边框,该技术就可以正常工作。

h. filter: blur(0);将一个元素的模糊度设置为0,从而使这个元素“消失”在页面中。

3.4、如何让一段文本中的所有英文单词的首字母大写

3.5、请简述CSS样式表继承

CSS样式表继承指的是,特定的CSS属性向下传递到子孙元素。会被继承下去的属性如下:参考《》

3.6、请简述CSS的选择器

3.7、CSS伪类与CSS伪对象的区别

CSS 引入伪类和伪元素的概念是为了描述一些现有CSS无法描述的东西

根本区别在于:它们是否创造了新的元素(抽象)

伪类:一开始用来表示一些元素的动态状态,随后CSS2标准扩展了其概念范围,使其成为了所有逻辑上存在但在文档树中却无须标识的“幽灵”分类

伪对象:代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中

3.8、请简述CSS的权重规则

一个行内样式+1000,一个id+100,一个属性选择器/class类/伪类选择器+10,一个元素名/伪对象选择器+1。

关系选择器将拆分为两个选择器再计算。参考《》

3.9、请写出多种等高布局

a. 假等高列:使用背景图片,在列的父元素上使用这个背景图进行Y轴的铺放,从而实现一种等高列的假像

b. 给容器div使用单独的背景色()():用<div>元素中的最大高度撑大其他的<div>容器高度

c. 创建等高布局:用border-left来做,只能使用两列。

d. 使用对冲实现多列布局方法:在所有列中使用正的上、下padding和负的上、下margin,并在所有列外面加上一个容器,设置overflow:hiden把溢出背景切掉

e. 使用列等高:但不能使用在多列

f. 等高列效果:兼容性不好,在ie6-7无法正常运行

3.10、在CSS样式中常使用px、em,各有什么优劣,在表现上有什么区别?

px是相对长度单位,相对于显示器屏幕分辨率而言的。

em是相对长度单位,相对于当前对象内文本的字体尺寸。

px定义的字体,无法用浏览器字体放大功能。

em的值并不是固定的,会继承父级元素的字体大小,1 ÷ 父元素的font-size × 需要转换的像素值 = em值。

b. 页面被加载时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载

b. 让元素脱离普通流,不占据空间

c. 默认会覆盖到非定位元素上

absolute的”根元素“是可以设置的,而fixed的”根元素“固定为浏览器窗口。

当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。

absolute:生成绝对定位的元素,相对于 static 定位以外的第一个祖先元素进行定位

fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。 (IE6不支持)

relative:生成相对定位的元素,相对于其在普通流中的位置进行定位

static:默认值。没有定位,元素出现在正常的流中

CSS3实现圆角(),阴影(),对文字加特效(),线性渐变(),变形()

增加了更多的CSS选择器 多背景 rgba,在CSS3中唯一引入的伪元素是::selection,媒体查询,多栏布局

3.15、为什么要初始化CSS样式?

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。

CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,

c. 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名

d. 更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变。

a. 在宽屏,高分辨率的屏幕下的自适应页面,你的图片如果不够宽,很容易出现背景断裂

b. CSS Sprites在开发的时候,要通过photoshop或其他工具测量计算每一个背景单元的精确位置

c. 在维护的时候比较麻烦,如果页面背景有少许改动,一般就要改这张合并的图片

3.17、解释下浮动和它的工作原理?

a. 浮动元素脱离文档流,不占据空间(引起“高度塌陷”现象)

b. 浮动元素碰到包含它的边框或者浮动元素的边框停留。

3.18、浮动元素引起的问题

a. 父元素的高度无法被撑开,影响与父元素同级的元素

b. 与浮动元素同级的非浮动元素会跟随其后

c. 若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构

3.19、什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?

如果使用import方法对CSS进行导入,会导致某些页面在Windows下的IE出现一些奇怪的现象:

以无样式显示页面内容的瞬间闪烁,这种现象称之为文档样式短暂失效(Flash of Unstyled Content),简称为FOUC。

原理:当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花屏现象。

解决方法:使用LINK标签将样式表放在文档HEAD中。

3.20、line-height三种赋值方式有何区别?(带单位、纯数字、百分比)

带单位:px不用计算,em则会使元素以其父元素font-size值为参考来计算自己的行高

纯数字:把比例传递给后代,例如父级行高为1.5,子元素字体为18px,则子元素行高为1.5*18=27px

百分比:将计算后的值传递给后代

3.22、经常遇到的浏览器兼容性有哪些?如何解决?

c. 在ie6,ie7中元素高度超出自己设置高度。原因是IE8以前的浏览器中会给元素设置默认的行高的高度导致的

3.23、有哪项方式可以对一个DOM设置它的CSS样式?

c. 内联样式:将css样式直接定义在 HTML 元素内部

3.24、什么是外边距重叠?重叠的结果是什么?

在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。

折叠结果遵循下列计算规则:

a. 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值

b. 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值

c. 两个外边距一正一负时,折叠结果是两者的相加的和

a. opacity作用于元素,以及元素内的所有内容的透明度,rgba()只作用于元素的颜色或其背景色。

b. 设置rgba透明的元素的子元素不会继承透明效果!

3.26、css属性content有什么作用?有什么应用?

可以配合自定义字体显示特殊符号。

4.1、请解释一下什么是闭包

当函数可以记住并访问所在的作用域时,就产生了闭包,即使函数是在当前作用域之外执行。闭包有如下特性:

a. JavaScript允许你使用在当前函数以外定义的变量

b. 即使外部函数已经返回,当前函数仍然可以引用在外部函数所定义的变量

c. 闭包可以更新外部变量的值

d. 用闭包模拟私有方法

由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。

在定时器、事件监听器、Ajax请求、跨窗口通信、Web Workers或者任何其他的异步(或者同步)任务中,只要使用了回调函数,实际上就是在使用闭包!

区别是从第二个参数起,call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。

4.3、如何使用原生 Javascript 代码深度克隆一个对象(注意区分对象类型)

在网上找了个函数,用递归的方式做复制。传入的参数必须得是Array或Object。

并且用到了和。。参考《》

jQuery内部使用Sizzle引擎,处理各种选择器。Sizzle引擎的选择顺序是从右到左,所以这条语句是先选.class,

第二个会直接过滤出div标签,而第一个就不会过滤了,将所有相关标签都列出。参考《》

4.5、实现输出document对象中所有成员的名称和类型

就是看到篇文章还会判断document.hasOwnProperty,然后再做打印,我测试了下这样的话打印不出来。

4.6、获得一个DOM元素的绝对位置

:返回当前元素相对于其 元素的顶部的距离

:返回当前元素相对于其 元素的左边的距离

:返回值是一个对象,它包含了一组用于描述边框的只读属性——left、top、right和bottom,属性单位为像素

首先是用创建一个table,再用设置table的属性,

然后用for循环设置tr和td的内容,用拼接内容,设置td的时候还用到和.padding。

4.8、实现预加载一张图片,加载完成后显示在网页中并设定其高度为50px,宽度为50px

先new ()获取一个图片对象,然后在图片对象的onload中设置宽度和高度。。

先是通过table.tBodies[0].rows获取到当前tbody中的行,接下来是两种方法处理。获取到的行没有这个方法。

第一种是将这些行push到另外一个数组中

这里我有个疑问,就是在appendChild的时候,并不是在最后把列加上,而是做了替换操作?

先是在构造函数中定义一个数组,然后用push模拟add,splice模拟remove。

四个方法都放在了上面。。

4.11、Ajax读取一个XML文档并进行解析的实例

a. 初始化一个HTTP请求,IE以ActiveX对象引入。 后来标准浏览器提供了XMLHttpRequest类,它支持ActiveX对象所提供的方法和属性

4.12、JS如何实现面向对象和继承机制?

c. 通过创建函数来生成对象

a. 构造函数绑定,使用call或apply方法,将父对象的构造函数绑定在子对象上

c. 直接继承函数的prototype属性,对b的一种改进

d. 利用空对象作为中介

e. 在ECMAScript5中定义了一个新方法,用于创建一个新方法

f. 拷贝继承,把父对象的所有属性和方法,拷贝进子对象,实现继承。参考《》

4.13、JS模块的封装方法,比如怎样实现私有变量,不能直接赋值,只能通过公有方法

a. 通过json生成对象的原始模式,多写几个就会非常麻烦,也不能反映出它们是同一个原型对象的实例

b. 原始模式的改进,可以写一个函数,解决代码重复的问题。同样不能反映出它们是同一个原型对象的实例

c. 构造函数模式,就是一个普通函数,不过内部使用了变量,但是存在一个浪费内存的问题。

d. Prototype模式,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承,可以把那些不变的属性和方法,直接定义在prototype对象上。Prototype模式的验证方法:、和运算符。

4.14、对this指针的理解,可以列举几种使用情况?

this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。

指的是:调用函数的那个对象。

a. 纯粹的函数调用,属于全局性调用,因此this就代表全局对象Global。

b. 作为对象方法的调用,这时this就指这个上级对象。

c. 作为构造函数调用,就是通过这个函数new一个新对象(object)。这时,this就指这个新对象。

d. 与的调用,它们的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。

4.15、在JavaScript中,常用的绑定事件的方法有哪些?

c. 绑定事件监听函数,标准浏览器使用 ,IE11以下版本 来绑定事件监听函数,通称为DOM2事件系统。

a. Netscape主张元素1的事件首先发生,这种事件发生顺序被称为捕获型

b. 微软则保持元素3具有优先权,这种事件顺序被称为冒泡型

c. W3C选择了一个择中的方案。任何发生在w3c事件模型中的事件,首是进入捕获阶段,直到达到目标元素,再进入冒泡阶段

事件监听函数的第三个参数就是控制方法是捕获还是冒泡

a. 一款轻量级的js库

b. 丰富快速的DOM选择器

d. 事件、样式、动画等特效支持

e. Ajax操作封装,支持跨域

4.18、Ajax有哪些好处和弊端?

b. 异步与服务器通信

c. 前端和后端负载平衡

d. 基于标准被广泛支持

c. 对搜索引擎支持较弱

d. 违背URL和资源定位的初衷

a. null是一个表示"无"的对象,转为数值时为0

b. null表示"没有对象",即该处不应该有值。

a. undefined是一个表示"无"的原始值,转为数值时为NaN。

b. undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。

4.20、new操作符具体干了什么呢?

a. 一个新对象被创建。它继承自函数原型

b. 构造函数被执行。执行的时候,相应的传参会被传入

c. 上下文(this)会被指定为这个新实例

d. 如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果

4.21、js延迟加载的方式有哪些?

b. 使用script标签的defer和async属性,defer属性为延迟加载,是在页面渲染完成之后再进行加载的,而async属性则是和文档并行加载

4.22、如何解决跨域问题?

d. 通过设置的src属性,进行跨域请求

b. 输入css的style标签不能改变样式。也是能改变样式的

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

b. 在IE中,如果循环引用中的任何对象是 DOM 节点或者 ActiveX 对象,垃圾收集系统则不会处理。

c. 闭包可以维持函数内局部变量,使其得不到释放。

d. 在销毁对象的时候,要遍历属性中属性,依次删除,否则会泄漏。

函数声明和变量声明总是被JavaScript解释器隐式地提升到包含他们的作用域的最顶端。

函数表达式中只会提升名称,函数体只有在执行到赋值语句时才会被赋值。

4.26、如何判断当前脚本运行在浏览器还是node环境中?

通过判断对象是否为window,如果是window,当前脚本运行在浏览器中

设立"严格模式"的目的,主要有以下几个:

a. 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

b. 消除代码运行的一些不安全之处,保证代码运行的安全;

c. 提高编译器效率,增加运行速度;

注:经过测试IE6,7,8,9均不支持严格模式

函数可计算某个字符串,并执行其中的的 JavaScript 代码。

eval()是一个顶级函数并且跟任何对象无关。

如果字符串表示了一个表达式,eval()会对表达式求值。如果参数表示了一个或多个JavaScript声明, 那么eval()会执行声明。

a. 原型是一个对象,其他对象可以通过它实现属性继承。

a. 因为每个对象和原型都有一个原型(注:原型也是一个对象),对象的原型指向对象的父,而父的原型又指向父的父,我们把这种通过原型层层连接起来的关系称为原型链。

b. 这条链的末端一般总是默认的对象原型。

4.30、画出此对象的内存图

jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。

jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等

4.32、jQuery的源码看过吗?能不能简单说一下它的实现原理?

一个强悍的dom元素查找器($),插件式编程接口(jQuery.fn),以及插件初始化的”配置”对象思想

如果当前浏览器支持window.,那就直接调用这个对象中的方法。

b. msg出现了声明提升,可以查看4.25的例子

c. next中出现了隐式的类型转换

4.35、请说明下下面代码的执行过程

a. JavaScript引擎是单线程运行的,浏览器无论在什么时候都只且只有一个线程在运行JavaScript程序

b. setTimeout是异步线程,需要等待js引擎处理完同步代码(while语句)之后才会执行,while语句直接是个死循环,js引擎没有空闲,不会执行下面的alert,也不会插入setTimeout。我在chrome中执行在线代码,最后浏览器是终止死循环执行alert。

c. JavaScript的工作机制是:当线程中没有执行任何同步代码的前提下才会执行异步代码,setTimeout是异步代码,所以setTimeout只能等js空闲才会执行,但死循环是永远不会空闲的,所以setTimeout也永远不会执行。

4.36、输出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,则输出

arguments.属性包含当前正在执行的函数。

Function.返回一个对函数的引用,该函数调用了当前函数。

4.38、函数柯里化(Currying)如何理解?

柯里化:把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

柯里化其实本身是固定一个可以预期的参数,并返回一个特定的函数,处理批特定的需求。这增加了函数的适用性,但同时也降低了函数的适用范围。

4.39、JS异步编程方式有几种?

4.40、请说说在JavaScript引用类型和值类型的理解

值类型:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。即Undefined、Null、Boolean、Number 和 String。

引用类型:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。即对象、数组

参考《》,。下面有道题目可以研究下,具体流程参考《》

4.41、请解释一下JavaScript中的作用域和作用域链

变量的作用域(scope):程序源代码中定义这个变量的区域。

作用域链:是一个对象列表或链表,这组对象定义了这段代码“作用域中”的变量。查找变量会从第一个对象开始查找,有则用,无则查找链上的下一个对象。

5.1、讲讲输入完网址按下回车,到看到网页这个过程中发生了什么

d. 服务器端响应http请求,浏览器得到html代码

e. 浏览器解析html代码,并请求html代码中的资源

f. 浏览器对页面进行渲染呈现给用户

5.2、谈谈你对前端性能优化的理解

合并JS和CSS,减少DNS查找次数,避免重定向,使用GET完成AJAX请求,减小请求中的Cookie,缓存资源,使用CDN,开启GZip,压缩HTML页面,开启长连接,避免行内脚本阻塞并行下载,少用iframe(阻塞onload事件,影响并行下载)。

样式表置于页面顶部,避免使用CSS表达式,使用外部JS和CSS,压缩JS和CSS,避免滤镜。

脚本置于页面底部,减少DOM访问,减少重绘和重排,尽量使用局部变量,使用定时器分割大型任务,用合适的正则操作字符串,惰性模式减少分支,事件委托,第三方代码异步加载,节流与去抖动,使用localStorage替代cookie。

内联图使用Data:URL,压缩图片或使用WebP格式,固定图片尺寸,图片预加载,图片延迟加载,使用字体矢量图标,Sprites图片。

5.3、请说出三种减少页面加载时间的方法

a. 尽量减少页面中重复的HTTP请求数量

c. css样式的定义放置在文件头部

f. 使用多域名负载网页内的多个文件、图片

Cache-Control 指令控制谁在什么条件下可以缓存响应以及可以缓存多久

5.5、一次js请求一般情况下有哪些地方会有缓存处理?

b. 浏览器端文件缓存

d. 服务器端文件类型缓存

5.6、一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。

a. 图片懒加载,滚动到相应位置才加载图片。

b. 图片预加载,如果为幻灯片、相册等,将当前展示图片的前一张和后一张优先下载。

d. 如果图片过大,可以使用特殊编码的图片,加载时会先加载一张压缩的特别厉害的缩略图,以提高用户体验。

5.7、谈谈以前端角度出发做好SEO需要考虑什么?

a. 了解搜索引擎如何抓取网页和如何索引网页

a. HTTP 2.0中的二进制分帧层突破了限制:客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。

b. 把HTTP消息分解为很多独立的帧之后,就可以通过优化这些帧的交错和传输顺序,进一步提升性能。

c. HTTP 2.0通过让所有数据流共用同一个连接,可以更有效地使用TCP连接。

d. 服务器除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。

e. HTTP 2.0会压缩首部元数据,针对之前的数据只编码发送差异数据。

a. UDP 协议的头长度不到TCP头的一半,所以同样大小的包里UDP携带的净数据比TCP包多。

b. TCP会发响应,UDP不会。并且UDP没有Seq和Ack等概念,省去了建立连接的开销,DNS解析就使用UDP协议。TCP有3次握手4次挥手。

c. UDP不能分割报文段(MSS),超过MTU的时候,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。

d. UDP没有重传机制,丢包的时候就不能按需发送。TCP有超时重传、快速重传和SACK。

URI表示某一互联网资源,而URL表示资源地点,所以URL是URI的子集。

}

我要回帖

更多关于 正常式布局的优缺点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信