前端开发工程师面试题2

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

  (1)、 声明位于文档中的最前面,处于 标签之前。告知浏览器的解析器,用什么文档类型 规范来解析这个文档。

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

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

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

  2、行内元素有哪些?块级元素有哪些?

  (1)CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,

比如div默认display属性值为“block”,成为“块级”元素;  span默认display属性值为“inline”,是“行内”元素。

  (2)行内元素有:a b span img input select strong(强调的语气)

块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p

  3、link 和@import 的区别是?

 (1)link属于XHTML标签,而@import是CSS提供的;

  (2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;

  (3)import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;

  (4)link方式的样式的权重 高于@import的权重.

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

  IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink;

  5、HTML5有哪些新特性?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

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

 

  绘画 canvas    用于媒介回放的 video 和 audio 元素   本地离线存储 localStorage 长期存储数据,

浏览器关闭后数据不丢失;  sessionStorage 的数据在浏览器关闭后自动删除  语意化更好的内容元素,

比如 article、footer、header、nav、section   表单控件,calendar、date、time、email、url、search

新的技术webworker,

websockt, Geolocation

  6、对语义化如何理解?

  用正确的标签做正确的事情!

  HTML语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;在没有样式CCS情况下也以一种文档格式显示,

并且是容易阅读的。搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。

使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

  7、HTML5的离线储存有几种方式?

  localStorage长期存储数据,浏览器关闭后数据不丢失;sessionStorage  数据在浏览器关闭后自动删除。

  8、iframe有那些缺点?

  iframe会阻塞主页面的Onload事件;

  iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。使用iframe之前需要考虑这两个缺点。

如果需要使用iframe,最好是通过javascript动态给iframe添加src属性值,这样可以可以绕开以上两个问题。

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

cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会sessionStorage和localStorage的存储空间更大;

sessionStorage和localStorage有更多丰富易用的接口;sessionStorage和localStorage各自独立的存储空间;

HTML/CSS部分

1、什么是盒子模型?

在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),

元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,

而有的部分只用来分隔相邻的区域或区域。4个部分一起构成了css中元素的盒模型。

2、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

行内元素:a、b、span、img、input、strong、select、label、em、button、textarea

块级元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote

空元素:即系没有内容的HTML元素,例如:br、meta、hr、link、input、img

3、CSS实现垂直水平居中

一道经典的问题,实现方法有很多种,以下是其中一种实现:

HTML结构:

<div class="wrapper">

<div class="content"></div>

</div>

CSS:

.wrapper{position:relative;}

.content{

background-color:#6699FF;

width:200px;

height:200px;

position: absolute;        //父元素需要相对定位

top: 50%;

left: 50%;

margin-top:-100px ;   //二分之一的height,width

margin-left: -100px;

}

4、简述一下src与href的区别

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

src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,

例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,

图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

5、什么是CSS Hack?

一般来说是针对不同的浏览器写不同的CSS,就是 CSS Hack。

IE浏览器Hack一般又分为三种,条件Hack、属性级Hack、选择符Hack(详细参考CSS文档:css文档)。例如:

// 1、条件Hack

<!--[if IE]>

<style>

.test{color:red;}

</style>

<![endif]-->

// 2、属性Hack

.test{

color:#0909; /* For IE8+ */

*color:#f00;  /* For IE7 and earlier */

_color:#ff0;  /* For IE6 and earlier */

}

// 3、选择符Hack

* html .test{color:#090;}       /* For IE6 and earlier */

* + html .test{color:#ff0;}     /* For IE7 */

6、简述同步和异步的区别

同步是阻塞模式,异步是非阻塞模式。

同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,

直到收到返回信息才继续执行下去;

异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,

这样可以提高执行的效率。

7、px和em的区别

px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,

并且em会继承父级元素的字体大小。

浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em

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

渐进增强 progressive enhancement:

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

优雅降级 graceful degradation:

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

区别:

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

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

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

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

IE: trident内核

Firefox:gecko内核

Safari:webkit内核

Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核

Chrome:Blink(基于webkit,Google与Opera Software共同开发)

CSS部分

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

  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)

  可继承的样式: font-size font-family color, UL LI DL DD DT;

  不可继承的样式:border padding margin width height ;

  优先级就近原则,同权重情况下样式定义最近者为准;

  载入样式以最后载入的定位为准;

  优先级为:

  !important >  id > class > tag     important 比 内联优先级高

  2、CSS3新增伪类举例:

  p:first-of-type 选择属于其父元素的首个元素的每个元素。

  p:last-of-type  选择属于其父元素的最后元素的每个元素。

  p:only-of-type  选择属于其父元素唯一的元素的每个元素。

  p:only-child    选择属于其父元素的唯一子元素的每个元素。

  p:nth-child(2)  选择属于其父元素的第二个子元素的每个元素。

  :enabled  :disabled 控制表单控件的禁用态。

  :checked单选框或复选框被选中。

  3、如何居中div?如何居中一个浮动元素?

  给div设置一个宽度,然后添加margin:0 auto属性

  div{    width:200px;    margin:0 auto; }

  居中一个浮动元素

 确定容器的宽高 宽500 高 300 的层  设置层的外边距 .div {   Width:500px ; height:300px;//高度可以不设

Margin: -150px 0 0 -250px;  position:relative;相对定位  background-color:pink;//方便看效果  left:50%;  top:50%;}

  列出display的值,说明他们的作用。position的值, relative和absolute定位原点是?

  1.block 象块类型元素一样显示。  none 缺省值。象行内元素类型一样显示。  inline-block 象行内元素一样显示,

但其内容象块类型元素一样显示。  list-item 象块类型元素一样显示,并添加样式列表标记。

  2. absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

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

  relative  生成相对定位的元素,相对于其正常位置进行定位。

  static  默认值。没有定位,元素出现在正常的流中  *(忽略 top, bottom, left, right z-index 声明)。

  inherit 规定从父元素继承 position 属性的值。

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

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

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

最简单的初始化方法就是:

* {padding: 0; margin: 0;} (不建议)淘宝的样式初始化: body, h1, h2, h3, h4, h5, h6, hr, p, blockquote,

dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button,

input, textarea, th, td { margin:0; padding:0; }body, button, input, select, textarea { font:12px/1.5tahoma,

arial, /5b8b/4f53; }h1, h2, h3, h4, h5, h6{ font-size:100%; }address, cite, dfn, em, var { font-style:normal; }

code, kbd, pre, samp { font-family:couriernew,

courier, monospace; }small{ font-size:12px; }ul, ol { list-style:none; }a { text-decoration:none; }

a:hover { text-decoration:underline; }sup { vertical-align:text-top; }sub{ vertical-align:text-bottom; }

legend { color:#000; }fieldset, img { border:0; }button,

input, select, textarea { font-size:100%; }table { border-collapse:collapse; border-spacing:0; }

  5、absolute的containing block计算方式跟正常流有什么不同?

  6、position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

 7、对BFC规范的理解?

  (W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关 系和相互作用。)

  8、css定义的权重

  以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:

/*权重为1*/div{}/*权重为10*/.class1{}/*权重为100*/#id1{}/*权重为100+1=101*/#id1 div{}/*权重为10+1=11*/.class1 div{}

/*权重为10+10+1=21*/.class1 .class2

div{} 如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现

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

  10、用过媒体查询,针对移动端的布局吗?

  11、使用 CSS 预处理器吗?喜欢那个?

  12、CSS3有哪些新特性?

  CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),  对文字加特效(text-shadow、),

线性渐变(gradient),旋转(transform)  transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px)

skew(-9deg,0deg);//旋转,缩放,定位,倾斜  增加了更多的CSS选择器  多背景

rgba

  13、经常遇到的CSS的兼容性有哪些?原因,解决方法是什么?

  14、介绍一下CSS的盒子模型?

  (1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;

  (2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).

CSS部分2

1.对WEB标准以及W3C的理解与认识?

  标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外链css和js脚本、结构行为表现的分离、

文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维护、

改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性;

  2.XHTML和HTML有什么区别?

  HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言

  最主要的不同:

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

  XHTML 元素必须被关闭。

  标签名必须用小写字母。

  XHTML 文档必须拥有根元素。

  3.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

  用于声明文档使用那种规范(HTML/XHTML)一般为 严格 过度 基于框架的html文档

  加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug

  4.行内元素有哪些?块级元素有哪些?CSS的盒模型?

  块级元素:div p h1 h2 h3 h4 form ul

  行内元素: a b br i span input select

  Css盒模型:内容,border ,margin,padding

  5.CSS引入的方式有哪些? link和@import的区别是?

  内联 内嵌 外链 导入

  区别 :同时加载

  前者无兼容性,后者CSS2.1以下浏览器不支持

  Link 支持使用javascript改变样式,后者不可

  6.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?

  标签选择符 类选择符 id选择符

  继承不如指定 Id>class>标签选择

  后者优先级高

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

  结构层 HTML 表示层 CSS 行为层 js

 8.CSS的基本语句构成是?

  选择器{属性1:值1;属性2:值2;……}

  9.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?

  Ie(Ie内核) 火狐(Gecko) 谷歌(webkit) opear(Presto)

  10.写出几种IE6 BUG的解决方法

  1.双边距BUG float引起的 使用display

  2.3像素问题 使用float引起的 使用dislpay:inline -3px

  3.超链接hover 点击后失效 使用正确的书写顺序 link visited hover active

  4.Ie z-index问题 给父级添加position:relative

  5.Png 透明 使用js代码 改

  6.Min-height 最小高度 !Important 解决’

  7.select 在ie6下遮盖 使用iframe嵌套

  8.为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)

  9.ie 6 不支持!important

  11.img标签上title与alt属性的区别是什么?

  Alt 当图片不显示是 用文字代表。

  Title 为该属性提供信息

  12.描述css reset的作用和用途。

  Reset重置浏览器的css默认属性 浏览器的品种不同,样式不同,然后重置,让他们统一

  13.解释css sprites,如何使用。

  Css 精灵 把一堆小的图片整合到一张大的图片上,减轻服务器对图片的请求数量

  14.浏览器标准模式和怪异模式之间的区别是什么?

  盒子模型 渲染模式的不同

  使用 window.top.document.compatMode 可显示为什么模式

  15.你如何对网站的文件和资源进行优化?期待的解决方案包括:

  文件合并

  文件最小化/文件压缩

  使用CDN托管

  缓存的使用

  16.什么是语义化的HTML?

  直观的认识标签 对于搜索引擎的抓取有好处

  17.清除浮动的几种方式,各自的优缺点

  1.使用空标签清除浮动 clear:both(理论上能清楚任何标签,增加无意义的标签)

  2.使用overflow:auto(空标签元素清除浮动而不得不增加无意代码的弊端,,使用zoom:1用于兼容IE)

  3.是用afert伪元素清除浮动(用于非IE浏览器)

  18.css hack

  _marging \\IE 6

  +margin \\IE 7

  Marging:0 auto \9 所有Ie

  Margin \0 \\IE 8

  Javascript部分

  1.javascript的typeof返回哪些数据类型

  Object number function boolean underfind

  2.例举3种强制类型转换和2种隐式类型转换?

  强制(parseInt,parseFloat,number)

  隐式(== – ===)

  3.split() join() 的区别

  前者是切割成数组的形式,后者是将数组转换成字符串

  4.数组方法pop() push() unshift() shift()

  Push()尾部添加 pop()尾部删除

  Unshift()头部添加 shift()头部删除

  5.事件绑定和普通事件有什么区别

  6.IE和DOM事件流的区别

  1.执行顺序不一样、

  2.参数不一样

  3.事件加不加on

  4.this指向问题

  7.IE和标准下有哪些兼容性的写法

  Var ev = ev || window.event

  document.documentElement.clientWidth || document.body.clientWidth

  Var target = ev.srcElement||ev.target

  8.ajax请求的时候get 和post方式的区别

  一个在url后面 一个放在虚拟载体里面

  有大小限制

  安全问题

  应用不同 一个是论坛等只需要请求的,一个是类似修改密码的

  9.call和apply的区别

  Object.call(this,obj1,obj2,obj3)

  Object.apply(this,arguments)

  10.ajax请求时,如何解释json数据

  使用eval parse 鉴于安全性考虑 使用parse更靠谱

  11.b继承a的方法

  12.JavaScript this指针、闭包、作用域

  13.事件委托是什么

  让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

  14.闭包是什么,有什么特性,对页面有什么影响

  闭包就是能够读取其他函数内部变量的函数。

  15.如何阻止事件冒泡和默认事件

  canceBubble return false

  16.添加 删除 替换 插入到某个接点的方法

  obj.appendChidl()

  obj.innersetBefore

  obj.replaceChild

  obj.removeChild

  17.解释jsonp的原理,以及为什么不是真正的ajax

  动态创建script标签,回调函数

  Ajax是页面无刷新请求数据操作

  18.javascript的本地对象,内置对象和宿主对象

  本地对象为array obj regexp等可以new实例化

  内置对象为gload Math 等不可以实例化的

  宿主为浏览器自带的document,window 等

  19.document load 和document ready的区别

  Document.onload 是在结构和样式加载完才执行js

  Document.ready原生种没有这个方法,jquery中有 $().ready(function)

  20.”==”和“===”的不同

  前者会自动转换类型

  后者不会

  21.javascript的同源策略

  一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合

  22.编写一个数组去重的方法

  function oSort(arr)

  {

  var result ={};

  var newArr=[];

  for(var i=0;i<arr.length;i++)

  {

  if(!result[arr])

  {

  newArr.push(arr)

  result[arr]=1

  }

  }

  return newArr

  }

</arr.length;i++)

JavaScript部分2

  1、eval是做什么的?

  它的功能是把对应的字符串解析成JS代码并运行;应该避免使用eval,不安全,

非常耗性能(2次,一次解析成js语句,一次执行)。

  2、Node.js的适用场景?

  高并发、聊天、实时消息推送

  3、介绍js的基本数据类型。

  number,string,boolean,object,undefined

  4、Javascript如何实现继承?

  通过原型和构造器

 5、如何创建一个对象? (画出此对象的内存图)

  function Person(name, age) {    this.name = name;    this.age = age;

this.sing = function() { alert(this.name) }   }

 

 6、谈谈This对象的理解。

  this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是有一个总原则,

那就是this指的是调用函数的那个对象。this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象

 7、事件是什么?IE与火狐的事件机制有什么区别? 如何阻止冒泡?

  (1) 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。

是可以被 JavaScript 侦测到的行为。

  (2) 事件处理机制:IE是事件冒泡、火狐是 事件捕获;

  (3) ev.stopPropagation();

 8、什么是闭包(closure),为什么要用它?

  执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.

使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,因为say667()的内部函数的执行需要依赖say667()中的变量。

这是对闭包作用的非常直白的描述.  function say667() {    // Local variable that

ends up within closure    var num = 666;    var sayAlert = function() { alert(num); }

num++;    return sayAlert;} var sayAlert = say667(); sayAlert()//执行结果应该弹出的667

  9、如何判断一个对象是否属于某个类?

  使用instanceof (待完善)   if(a instanceof Person){       alert('yes');   }

  10、Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

  hasOwnProperty

  11、对JSON 的了解?

  JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。

数据格式简单, 易于读写, 占用带宽小{'age':'12', 'name':'back'}

JavaScript部分

1、怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

createDocumentFragment() //创建一个DOM片段

createElement() //创建一个具体的元素

createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替换

insertBefore() //插入

3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的Name属性的值

getElementById() //通过元素Id,唯一性

2、实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

/**

* 对象克隆

* 支持基本数据类型及对象

* 递归方法

*/

function clone(obj) {

var o;

switch (typeof obj) {

case "undefined":

break;

case "string":

o = obj + "";

break;

case "number":

o = obj - 0;

break;

case "boolean":

o = obj;

break;

case "object": // object 分为两种情况 对象(Object)或数组(Array)

if (obj === null) {

o = null;

} else {

if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {

o = [];

for (var i = 0; i  obj.length; i++) {

o.push(clone(obj[i]));

}

} else {

o = {};

for (var k in obj) {

o[k] = clone(obj[k]);

}

}

}

break;

default:

o = obj;

break;

}

return o;

}

3、如何消除一个数组里面重复的元素?

// 方法一:

var arr1 =[1,2,2,2,3,3,3,4,5,6],

arr2 = [];

for(var i = 0,len = arr1.length; i< len; i++){

if(arr2.indexOf(arr1[i]) < 0){

arr2.push(arr1[i]);

}

}

document.write(arr2); // 1,2,3,4,5,6

4、想实现一个对页面某个节点的拖曳?如何做?(使用原生JS)。

5、在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。

典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,

它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

function log(){

var args = Array.prototype.slice.call(arguments);

//为了使用unshift数组方法,将argument转化为真正的数组

args.unshift('(app)');

console.log.apply(console, args);

};

6、Javascript中callee和caller的作用?

caller是返回一个对函数的引用,该函数调用了当前函数;

callee是返回正在被执行的function函数,也就是所指定的function对象的正文。

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

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且

当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

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

web storage和cookie的区别

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,

并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,

不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,

getCookie。但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,

而Web Storage仅仅是为了在本地“存储”数据而生。

8、手写数组快速排序

关于快排算法的详细说明,可以参考阮一峰老师的文章快速排序

“快速排序”的思想很简单,整个排序过程只需要三步:

(1)在数据集之中,选择一个元素作为”基准”(pivot)。

(2)所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。

(3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

9、统计字符串”aaaabbbccccddfgh”中字母个数或统计最多字母数。

var str = "aaaabbbccccddfgh";

var obj  = {};

for(var i=0;istr.length;i++){

var v = str.charAt(i);

if(obj[v] & obj[v].value == v){

obj[v].count = ++ obj[v].count;

}else{

obj[v] = {};

obj[v].count = 1;

obj[v].value = v;

}

}

for(key in obj){

document.write(obj[key].value +'='+obj[key].count+' '); // a=4  b=3  c=4  d=2  f=1  g=1  h=1

}

10、写一个function,清除字符串前后的空格。(兼容所有浏览器)

function trim(str) {

if (str & typeof str === "string") {

return str.replace(/(^s*)|(s*)$/g,""); //去除前后空白符

}

}

综合问题

1.自我评价一下HTML/CSS/JS的掌握情况

  2.简述HTML经常使用的标签和作用。

  Div/a/p/span/li/ul/ol/table/tr/td

  3.你认为最常遇到的兼容Bug有哪些?有哪些问题是你认为解决起来最麻烦的?

  IE6 PNG

  IE6 Fixed

  4.块级元素和行内元素都有哪些? 行内元素有哪些特点?

  5.介绍所知道的CSS hack技巧(如:_, *, +, \9, !important 之类)

  6.CSS定位方式有哪些?position属性的值有哪些?他们之间的区别是什么?

  在CSS中关于定位的内容是:position:relative | absolute | static | fixed

  ?    static 没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级。

  ?    relative 不脱离文档流,参考自身静态位置通过 top,bottom,left,right 定位,并且可以通过z-index进行层次分级。

  ?    absolute 脱离文档流,通过 top,bottom,left,right 定位。选53D6其最近的父级定位元素,

当父级 position 为 static 时,absolute元素将以body坐标原点进行定位,可以通过z-index进行层次分级。

  ?    fixed 固定定位,这里他所固定的对像是可视窗口而并非是body或是父级元素。可通过z-index进行层次分级。

  7.函数的几种定义方法?

  function a(){},

  var a = function(){}

  8.对象的定义方法?

  a = new Object(), a = {}

  9.类的定义方法(prototype)(继承)

  Var a = function(){}

  a.prototype = {}

  new a();

  10.this 关键字的指向

  obj.foo() == obj        //方法调用模式,this指向obj

  foo() == window;         //函数调用模式,this指向window

  new obj.foo() == obj    //构造器调用模式, this指向新建立对象

  foo.call(obj) == obj;//APPLY调用模式,this指向obj

  11.什么是闭包,及其作用是什么?

  12.事件绑定的几种方法,事件冒泡?

  13.Ajax/json/json0070?

  14.异步ajax的优缺点都有什么?

  优点:

  ?    相对于同步ajax:不会造成UI卡死,用户体验好。

  ?    相对于刷新页面,省流量

  缺点:

  ?    后退按钮无效;

  ?    多个请求同时触发时,由于回调时间不确定,会造成混乱,避免这种混乱需要复杂的判断机制。

  ?    搜索引擎不友好

  ?    数据安全

  15.常用JS框架都有什么?是否使用过jQuery,以及jQuery的优点是什么?

  16.JS用了多久,介绍一下自己做过的JS项目?

  17.开发调试工具和方法都有什么(编辑器、浏览器)

  18.类、函数、对象(代码表达)

  19.闭包(setTimeout)(产生两个首尾相连的计时器)(使用for循环产生10个计时器)||

  20.Jquery Mobile 相关

  21.HTML5/CSS3的掌握情况

  22.是否听说过和理解webapp?

  23.个人擅长的语言,优缺点都是什么?

  24.介绍一下曾经参与过的项目经验,合作开发、独立开发

  25.编程的重要知识?

  26.开发过程中遇到困难,如何解决?

  27.有没有个人/开源项目

  28.前端开发(HTML/CSS/)

2016年Web前端面试题目汇总

以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中无法解决的问题,通过对知识的整理以及经验的总结,

重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正。:)

1、一次完整的HTTP事务是怎样的一个过程?

基本流程:

a. 域名解析

b. 发起TCP的3次握手

c. 建立TCP连接后发起http请求

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

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

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

2、对前端工程师这个职位你是怎么样理解的?

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

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

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

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

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

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

文章是之前看的别人的就保存下来了,原出处不记得了。跟原创说声抱歉。

JS实现继承的几种方式

前言

JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。

JS继承的实现方式

既然要实现继承,那么首先我们得有一个父类,代码如下:

//定义一个动物类
function Animal (name) {
//属性
this.name = name || 'Animal';
//实例方法
this.sleep = function(){
console.log(this.name + '正在睡觉!');
}
}
//原型方法
Animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food);
};

1、原型链继承

核心: 将父类的实例作为子类的原型

function Cat(){
}
Cat.prototype = new Animal();
Cat.prototype.name = 'cat';
 
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.eat('fish'));
console.log(cat.sleep());
console.log(cat instanceof Animal); //true
console.log(cat instanceof Cat); //true

特点:

  1. 非常纯粹的继承关系,实例是子类的实例,也是父类的实例
  2. 父类新增原型方法/原型属性,子类都能访问到
  3. 简单,易于实现

缺点:

  1. 要想为子类新增属性和方法,必须要在new Animal()这样的语句之后执行,不能放到构造器中
  2. 无法实现多继承
  3. 来自原型对象的引用属性是所有实例共享的(详细请看附录代码: 示例1
  4. 创建子类实例时,无法向父类构造函数传参

推荐指数:★★34两大致命缺陷)

2017-8-17 10:21:43补充:感谢 MMHS 指出。缺点1中描述有误:可以在Cat构造函数中,为Cat实例增加实例属性。如果要新增原型属性和方法,则必须放在new Animal()这样的语句之后执行。

2、构造继承

核心:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型)

function Cat(name){
Animal.call(this);
this.name = name || 'Tom';
}
 
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

特点:

  1. 解决了1中,子类实例共享父类引用属性的问题
  2. 创建子类实例时,可以向父类传递参数
  3. 可以实现多继承(call多个父类对象)

缺点:

  1. 实例并不是父类的实例,只是子类的实例
  2. 只能继承父类的实例属性和方法,不能继承原型属性/方法
  3. 无法实现函数复用,每个子类都有父类实例函数的副本,影响性能

推荐指数:★★(缺点3

3、实例继承

核心:为父类实例添加新特性,作为子类实例返回

function Cat(name){
var instance = new Animal();
instance.name = name || 'Tom';
return instance;
}
 
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); // false

特点:

  1. 不限制调用方式,不管是new 子类()还是子类(),返回的对象具有相同的效果

缺点:

  1. 实例是父类的实例,不是子类的实例
  2. 不支持多继承

推荐指数:★★

4、拷贝继承

function Cat(name){
var animal = new Animal();
for(var p in animal){
Cat.prototype[p] = animal[p];
}
Cat.prototype.name = name || 'Tom';
}
 
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

特点:

  1. 支持多继承

缺点:

  1. 效率较低,内存占用高(因为要拷贝父类的属性)
  2. 无法获取父类不可枚举的方法(不可枚举方法,不能使用for in 访问到)

推荐指数:(缺点1

5、组合继承

核心:通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用

function Cat(name){
Animal.call(this);
this.name = name || 'Tom';
}
Cat.prototype = new Animal();//感谢@学无止境c 的提醒,组合继承也是需要修复构造函数指向的。Cat.prototype.constructor = Cat;
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); // true

特点:

  1. 弥补了方式2的缺陷,可以继承实例属性/方法,也可以继承原型属性/方法
  2. 既是子类的实例,也是父类的实例
  3. 不存在引用属性共享问题
  4. 可传参
  5. 函数可复用

缺点:

  1. 调用了两次父类构造函数,生成了两份实例(子类实例将子类原型上的那份屏蔽了)

推荐指数:★★★★(仅仅多消耗了一点内存)

6、寄生组合继承

核心:通过寄生方式,砍掉父类的实例属性,这样,在调用两次父类的构造的时候,就不会初始化两次实例方法/属性,避免的组合继承的缺点

function Cat(name){
Animal.call(this);
this.name = name || 'Tom';
}
(function(){
//创建一个没有实例方法的类
var Super = function(){};
Super.prototype = Animal.prototype;
//将实例作为子类的原型
Cat.prototype = new Super();
})();
 
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); //true感谢@bluedrink 提醒,该实现没有修复constructor
Cat.prototype.constructor = Cat; //需要修复下构造函数

特点:

  1. 堪称完美

缺点:

  1. 实现较为复杂

推荐指数:★★★★(实现复杂,扣掉一颗星)

附录代码:

示例一:

function Animal (name) {
//属性
this.name = name || 'Animal';
//实例方法
this.sleep = function(){
console.log(this.name + '正在睡觉!');
}
//实例引用属性
this.features = [];
}
function Cat(name){
}
Cat.prototype = new Animal();
 
var tom = new Cat('Tom');
var kissy = new Cat('Kissy');
 
console.log(tom.name); // "Animal"
console.log(kissy.name); // "Animal"
console.log(tom.features); // []
console.log(kissy.features); // []
 
tom.name = 'Tom-New Name';
tom.features.push('eat');
 
//针对父类实例值类型成员的更改,不影响
console.log(tom.name); // "Tom-New Name"
console.log(kissy.name); // "Animal"
//针对父类实例引用类型成员的更改,会通过影响其他子类实例
console.log(tom.features); // ['eat']
console.log(kissy.features); // ['eat']
 
原因分析:
 
关键点:属性查找过程
 
执行tom.features.push,首先找tom对象的实例属性(找不到),
那么去原型对象中找,也就是Animal的实例。发现有,那么就直接在这个对象的
features属性中插入值。
console.log(kissy.features);的时候。同上,kissy实例上没有,那么去原型上找。
刚好原型上有,就直接返回,但是注意,这个原型对象中features属性值已经变化了。

Js核心面向对象面试题

web开发面试题3 

1.网页三要素是什么

Icon

HTML(内容)
CSS(
外观)
Javascript(
行为)

2.JavaScript是什么

Icon

JavaScript一门解释型(不是编译型)脚本语言,它的主要特点有:面向对象,弱类型,动态,基于原型的面向对象(对象)(不基于类)

3.讲下js的数据类型

Icon

基本类型: 数值(number),字符串(string),布尔值(boolean),undefined
对象类型: 对象(Object),数组(Array),函数(Function)

4.用什么方法来判断一个对象的数据类型,怎么样去判断数组

Icon

typeof判断对象类型,instanceOf判断是不是数组

5.分别讲下小括号,中括号,大括号,冒号在js中的作用

Icon

1). 小括号: ()用来定义或调用一个函数
2). 中括号运算符: [ ]用来创建一个数组/获取数组元素
3). 大括号运算符: { }用来创建一个对象
4). 冒号运算符: 冒号用来分隔对象的属性名和属性值

6.讲下函数的三种定义:

Icon

1.function name(){}
2. var name=function(){}
3. var name=new Function("n","m","n+m")

7.函数的形参和实参是否可以不一样,如果不一样,通过什么调用

Icon

可以不一样,每个函数里面都有个arguments数组类型的变量,可以拿到实参的个数

8.说几个系统预定义函数

Icon

parseInt() / parseFloat() : 将一个字符串转为数字
isNaN() : 判断是否不是一个数值或者数值类型字符串
encodeURI() / decodeURI(): 对字符串进行编码与解码
eval() : JS代码格式的字符串当作js执行
setInterval(callback,m)间隔多久执行一次callback函数

9.讲下变量的作用域

Icon

如果在函数里面用var声明,就是局部变量,如果在函数里面不用var声明,那就是全局变量,在函数外面用var定义都是全局变量

10.数组有哪两种声明方式

Icon

1.直接用[]里面包含数据声明
2.new Array声明

11.数组用什么去访问

Icon

用下标来访问 arr[index]

12.怎么样删除数组对象

Icon

delete arra[0];

13.对象是怎么样定义的,属性是怎么定义的

Icon

可以用function定义一个对象,然后根据形参在里面this.x=x可以定义属性,或者可以通过动态的添加一个属性

14.对象是怎么样创建的?

Icon

1.var obj={}就可以创建一个对象 2.new Object()也可以创建一个对象

15.怎么样给一个对象动态添加属性或者方法

Icon

直接在对象上面用obj.属性="test", obj.方法名=function(){}定义一个方法

16.js里面的全局对象是什么,怎么调用的

Icon

js里面的全局对象是window,js里面直接调用的函数都是window对象里面的函数,
默认的this也指向window,默认全局对象的属性和方法不用前面加window,可以直接调用

17.讲几个常见的js内置对象,他们有什么好处

Icon

Object,Array,String,Number,Boolean,Date,Function
可以方便的使用一些方法和常量,譬如String里面就有很多字符串函数 Date可以处理时间

19.prototype(原型)是什么,它是怎么使用的

Icon

每个函数都有一个prototype属性, 它是一个引用变量, 默认指向一个空Object对象 ,有备用的意思,当调用一个对象的函数或者属性的时候,如果在当前对象里面找不到,那么就到原型里面去找

20.js是怎么样实现继承的?

Icon

使用prototype属性就可以实现继承 一般是child.prototype=new parent()就可以实现

21 什么是DOM,DOM分为那三种

Icon

DOM= Document Object Model,文档对象模型, DOM W3C(万维网联盟)的标准。DOM 定义了访问 HTML XML 文档的标准:独立于平台和语言的接口. W3C DOM 标准被分为 3 个不同的部分:
 核心 DOM - 针对任何结构化文档的标准模型
XML DOM - 针对 XML 文档的标准模型
HTML DOM - 针对 HTML 文档的标准模型

22.DOM中有几种类型的节点

Icon

整个文档是一个文档节点(Document)
每个 HTML 标签是一个元素节点(Element)
每一个 HTML 属性是一个属性节点(Attribute)
包含在 HTML 元素中的文本是文本节点(Text)

23.讲下DOM对象的三种查询方式

Icon

getElementById()根据元素id来查找 ,getElementsByTagName(tag):根据元素的tag名字来查找getElementsByName(name) 根据元素名字来查找

24.怎么样创建元素节点和文本节点,怎么样删除节点

Icon

createElement("div")创建元素节点,createTextNode()创建一个文本节点,removeChild()可以用来删除节点

25.用那个属性可以快速的给一个节点加一段html内容

Icon

innerHTML

26.如果我在js里面访问在js下面的html的tag,用什么技术实现

Icon

默认js都是解释性语言,js不能访问后面定义的html元素的,但在window里面有个onload函数,把代码写在下面
函数体里面就可以 window.οnlοad=function(){}

W3C盒模型和IE盒模型的区别

盒模型在初学css的时候就会接触到,其实很容易理解,这里也不多废话,但是实际上在布局的时候还是会出现很多问题。对于盒模型的认识不能只停留在知道一个盒模型由哪些部分构成,也要更多的了解如何在不同情况下利用盒模型的特点进行布局。 
这里讨论一下两种不同的盒模型: W3C盒模型和IE盒模型。 
其实IE的盒模型问题只会出现在IE5.5及其更早的版本中,因为在IE6及更新的版本在标准兼容模式下使用的是W3C的盒模型标准,但事实上不仅IE5.5,连IE6的使用率也很少了,这里对他们进行讨论只是为了更深刻的理解盒模型。 
对于两种模型这里有一张图:

可以看到IE的盒模型与W3C盒模型的区别在与width的计算,这说明什么问题呢?我们在设置样式的时候经常会用到marginpadding还有width,对于下面html文件:

<!-- 没有声明 -->
<html>
<head lang="ch">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box{
            float:left;
            width: 100px;
            height: 100px;
            background-color: #ff9000;
        }
        .container{
            width: 200px;
            padding: 10px;
            background-color: #f00;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
        <div class="box"></div>
    </div>
<script>
</script>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

不管是不是IE,浏览器下显示的效果都是: 

可以看到container正好将两个box包装起来。

但加入给container添加一个padding如下:

.container{
    width: 200px;
    background-color: #f00;
    overflow: hidden;
    padding: 10px;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

则其在非IE下的样式为:

但在IE下为:

IE中的box换行了,这就是因为IE中的width是包括了padding的,而W3C也就是我们平常使用的盒模型不包括,不管padding加多少内容区域的宽度不会改变,这也十分合理。 
避免触发IE盒模型的方法是使用<!DOCTYPE html>声明,告诉IE采用W3C盒子模型即可。

flex弹性布局学习总结

本文首次发布在我的个人博客:Claiyre的个人博客 https://claiyre.github.io/

博客园地址:http://www.cnblogs.com/nuannuan7362/
如需转载,请在文章开头注明原文地址

一、简要介绍

  css3最喜欢的新属性之一便是flex布局属性,用六个字概括便是简单、方便、快速。

  flex flexible box:弹性布局盒模型),2009w3c提出的一种可以简洁、快速弹性布局的属性。主要思想是给予容器控制内部元素高度和宽度的能力。目前已得到以下浏览器支持:

  

  其中在webkit内核的浏览器中使用时,必须加上-webkit-前缀,以下不再重复说明。

  下图为flex的相关概念的示意图

  

  使用flex布局的容器(flex container),它内部的元素自动成为flex项目(flex item)。容器拥有两根隐形的轴,水平的主轴(main axis),和竖直的交叉轴。主轴开始的位置,即主轴与右边框的交点,称为main start;主轴结束的位置称为main end;交叉轴开始的位置称为cross start;交叉轴结束的位置称为cross enditem按主轴或交叉轴排列,item在主轴方向上占据的宽度称为main size,在交叉轴方向上占据的宽度称为cross size

  此外,需注意使用flex容器内元素,即flex itemfloatclearvertical-align属性将失效。

二、属性总结表

  下图是关于flex的属性总结表,后面会详细介绍每个属性的意义和用法

三、容器属性详述

   1.flex-direction

    决定主轴的方向,即项目排列的方向,有四个可能的值:row(默认)|row-reverse|column|column-reverse

    row:主轴为水平方向,项目沿主轴从左至右排列

    column:主轴为竖直方向,项目沿主轴从上至下排列

    row-reverse:主轴水平,项目从右至左排列,与row反向

    column-reverse:主轴竖直,项目从下至上排列,与column反向

  2、flex-wrap

    默认情况下,item排列在一条线上,即主轴上,flex-wrap决定当排列不下时是否换行以及换行的方式,可能的值nowrap(默认)|wrap|wrap-reverse

    nowrap:自动缩小项目,不换行

    wrap:换行,且第一行在上方

    wrap-reverse:换行,第一行在下面

  3、flex-flow

    是flex-directionflex-wrap的简写形式,如:row wrap|column wrap-reverse等。默认值为row nowrap,即横向排列 不换行。

  4、justify-content

    决定item在主轴上的对齐方式,可能的值有flex-start(默认),flex-endcenterspace-betweenspace-around。当主轴沿水平方向时,具体含义为

      flex-start:左对齐

      flex-end:右对齐

      center:居中对齐

      space- between:两端对齐

      space-around:沿轴线均匀分布

    效果如下图 

  

5、align-items

  决定了item在交叉轴上的对齐方式,可能的值有flex-start|flex-end|center|baseline|stretch,当主轴水平时,其具体含义为

    flex-start:顶端对齐

    flex-end:底部对齐

    center:竖直方向上居中对齐

    baselineitem第一行文字的底部对齐

    stretch:当item未设置高度时,item将和容器等高对齐

  效果图如下:

  

 6、align-content

  该属性定义了当有多根主轴时,即item不止一行时,多行在交叉轴轴上的对齐方式。注意当有多行时,定义了align-content后,align-items属性将失效。align-content可能值含义如下(假设主轴为水平方向):

      flex-start:左对齐

      flex-end:右对齐

      center:居中对齐

      space- between:两端对齐

      space-around:沿轴线均匀分布

      stretch:各行将根据其flex-grow值伸展以充分占据剩余空间

  效果图如下

  

  

四、flex item属性详述

  item的属性在itemstyle中设置。item共有如下六种属性

  1、order

    order的值是整数,默认为0,整数越小,item排列越靠前,如下图所示代码如下

<div class="wrap">
    <div class="div" style="order:4"><h2>item 1</h2></div>
    <div class="div" style="order:2"><h2>item 2</h2></div>
    <div class="div" style="order:3"><h2>item 3</h2></div>
    <div class="div" style="order:1"><h2>item 4</h2></div>
</div>

效果图为

  

  2、flex-grow

    定义了当flex容器有多余空间时,item是否放大。默认值为0,即当有多余空间时也不放大;可能的值为整数,表示不同item的放大比例,如

<div class="wrap">
    <div class="div" style="flex-grow:1"><h2>item 1</h2></div>
    <div class="div" style="flex-grow:2"><h2>item 2</h2></div>
    <div class="div" style="flex-grow:3"><h2>item 3</h2></div>
</div>

即当有多余空间时item1item2、和item312:3的比例放大。

  3、flex-shrink

    定义了当容器空间不足时,item是否缩小。默认值为1,表示当空间不足时,item自动缩小,其可能的值为整数,表示不同item的缩小比例。flex-grow

  4、flex-basis

    表示项目在主轴上占据的空间,默认值为auto。如下代码

<div class="wrap">
    <div class="div" style="flex-basis:80px"><h2>item 1</h2></div>
    <div class="div" style="flex-basis:160px"><h2>item 2</h2></div>
    <div class="div" style="flex-basis:240px"><h2>item 3</h2></div>
</div>

  其效果图为

  

  5、flex

    flex属性是flex-growflex-shrinkflex-basis三属性的简写总和。

  6、align-self

    align-self属性允许item有自己独特的在交叉轴上的对齐方式,它有六个可能的值。默认值为auto

      auto:和父元素align-self的值一致

      flex-start:顶端对齐

      flex-end:底部对齐

      center:竖直方向上居中对齐

      baselineitem第一行文字的底部对齐

      stretch:当item未设置高度时,item将和容器等高对齐

  

以上仅我个人浅见,如有错误之处,烦请指正。

如您觉得我的文章对您有帮助,请点击下方推荐,让更多的人看到。

常见面试题之左边固定,右边自适应布局(四种方法:负边距、flex)

  • css

yyh1945 20170730日发布

  • |   4收藏|  19
  • 1.6k 次浏览

这个布局是最简单的布局之一,但是网络上大多是copy,而没有认真解释以及用新的特性实现。下面就做一个新的概括.

要求: 左边固定100px, 右边自适应

position:absolute, margin-left入门写法

<div class="parent">
  <div class="l-child">左边固定1左边固定2左边固定3</div>
  <div class="r-child">右边自适应1右边自适应2右边自适应3</div>
</div>
//父元素相对定位,作为子元素绝对定位的参考
.parent{display:relative;background:#ddd}
.l-child{position:absolute;width:100px;background:#bbb}
.r-child{margin-left:100px;background:#999}

demo展示

左边float,触发父元素宽度计算 入门写法

html结构同上

.parent{background:#ddd;overflow:hidden; }
.l-child{float:left;width:100px;background:#bbb;z-index:10000; }
.r-child{margin-left:100px;background:#999;}

demo展示

左右float,右边使用负边距 奇伎淫巧

这个技能要这样get

  1. 父元素清除浮动
  2. A元素宽100%不变,margin-left:-100px后,外部的文档流认为以边框为界,A减少了100px,而A是右浮动,也就是左边开始有100px空白可填充的文档流空间;
  3. 子元素A1是认为父元素大小没有变化,margin-left:100px后,正好等于父元素在外部空出来的文档流空间。
  4. B元素左浮动,且是后面的dom节点,正好占据并且覆盖A空出来的空间
<div class="parent">
  <div class="r-box">
    <div class="r-content">
      右边自适应1右边自适应2右边自适应3
    </div>
  </div>
  <div class="l-box">
    左边固定1左边固定2左边固定3
  </div>
</div>
.parent{background:#ddd;overflow:hidden; }
.l-box{float:left;width:100px;background:#bbb;}
.r-box{float:right;width:100%;margin-left:-100px;background:#999;}
.r-content{margin-left:100px;}

demo展示

flex布局 高大尚

父元素flex布局后,子元素默认就是弹性布局,除非你确定子元素的弹性方式
ps:这个方法完美之处还在于,垂直方向也自动填充,轻松实现了等高布局!!
html同第一个demo

.parent{display:flex;background:#ddd}
.l-child{flex:0 0 100px;background:#bbb}
.r-child{background:#999}

demo展示

总结CSS面试题目的考察点及常见布局问题整理

整理网上流传的若干份面试题目,突发奇想,总结关于CSS面试题目的考察点,发现问题大多围绕几个属性和几种题目,水平有限,仅供参考。

整理网上流传的若干份面试题目,突发奇想,总结关于CSS面试题目的考察点,发现问题大多围绕几个属性和几种题目,水平有限,仅供参考。

写这个博文内心有种莫名奇妙的自我谴责感,实在不应该把面试层叠样式“应试”复习。牛逼的你,也许会说:万变不离其中,把css掌握了,哪里需要担心会考什么。呵呵!

 1,  多元素水平居中

实现一下效果:

平常人看见题目,最初感觉实现图片中的效果不难,设置小黑框的宽高边距,字体水平垂直居中即可。其实,题目应该实际上是考察多元素水平居中,即无论元素(小黑框)基数为多少,它们都能作为一个整体,水平居中。

在网站布局中,很多时候,子元素中使用行内元素如 span或块元素li标签且标签个数不定,而我们又想让这一块不管个数有多少个(子元素的总体宽度不定),始终都能居中显示。这就需要设置子元素 display:inline-block。同时,根据display:inline-block的属性,子元素本身具备inline的特性,因此父元素 需要设置text-align:center,来实现子元素作为一个整体在父元素中水平居中。

  1. main{  text-align:center;}
  2. div{  display:inline-block;  *display:inline;/*hank IE*/*zoom:1;/*hank IE*/}

使用display:inline-block属性,可以使行内元素或块元素能够不加float属性就可以定义自身的宽、高,同时又能使该元素在父元素居中显示。

在内联元素上定义display:inline-block属性,发现IE6、IE7中的显示效果同其它浏览器一致,但事实是ie7及更低版本的ie浏览器不支持display:inline-block这个属性。

在IE下,display: inline-block只是触发了元素的layout。比如将display: inline-block设置到div上,只能保证这个div拥有块元素的特征(可以设置宽度,高度等),但还是会产生换行。接下来要设置 display: inline,使其不产生换行。将display:inline-block;*display:inline;写在同一个样式上,inline- block属性是不会触发元素的layout的,因此我们还要额外加上 *zoom:1来触发layout。

除了以上所提到的有效方法之外,还有另外一种方法

先使用 display:inline-block 属性触发块元素,然后再定义 display:inline,让块元素呈递为内联对象(两个display 要先后放在两个 CSS 样式声明中才有效果,这是 IE 的一个经典 bug ,如果先定义了 display:inline-block,然后再将 display 设回 inline 或 block,layout 不会消失)。

div {display:inline-block;...}div {*display:inline;}

但是要注意的是,display:inline-block元素间会产生多余空白(本题没有涉及)。解决方法:父元素定义font-size:0 去掉行内块元素水平方向空白;子元素定义vertical-align 属性去掉行内块元素垂直方向空白。

http://codepen.io/floralam/pen/XJwWZJ?editors=110

2,  栏栅化布局

实现一下布局:

http://codepen.io/floralam/pen/OPYyEE

  1. .parent{
  2. display: flex;
  3. flex-direction: column;//上面两行等同于flex-flowcolomn
  4. flex-wrap: wrap;//显示wrap一行显示不完的时候换行
  5. height: 440px;
  6. width: 660px;
  7. }

一个Flexbox布局是由一个伸缩容器(flex containers)和在这个容器里的伸缩项目(flex items)组成。

伸缩方向与换行(flex-flow)

伸缩容器有一个CSS属性“flex-flow”用来决定伸缩项目的布局方式

如果伸缩容器设置了“flex-flow”值为“row”,伸缩项目排列由左向右排列。

如果“flex-flow”值设置为“column”,伸缩项目排列由上至下排列。

制作一个20%、60%、20%网格布局

  1. .main-content {
  2. width:60%;
  3. }
  4. .main-nav,.main-sidebar {
  5. -webkit-box-flex:1;/* OLD - iOS 6-, Safari 3.1-6 */
  6. -moz-box-flex:1;/* OLD - Firefox 19- */
  7. width:20%;/* For old syntax, otherwise collapses. */
  8. -webkit-flex:1;/* Chrome */
  9. -ms-flex:1;/* IE 10 */
  10. flex:1;/* NEW, Spec - Opera 12.1, Firefox 20+ */
  11. }

3,  未知高度多行文本垂直居中

http://codepen.io/floralam/pen/WbBrwV?editors=110

  1. .container{
  2. position: fixed;
  3. left:0;
  4. top:0;
  5. height:100%;
  6. width:100%;
  7. text-align: center;
  8. }
  9. .mask:after{
  10. content:" "; display: inline-block; vertical-align: middle; height:100% } .dialog{ display: inline-block; border: 3px solid lightblue;
  11. }

box 容器通过 after或者before 生成一个高度 100% 的「备胎」,他的高度和容器的高度是一致的,相对于「备胎」垂直居中,在视觉上表现出来也就是相对于容器垂直居中了

4,  多栏自适应布局

对于移动设备浏览器:http://codepen.io/floralam/pen/NPVwgz?editors=110

  1. .container{
  2. display:-webkit-box;
  3. }
  4. .left{
  5. -webkit-box-flex:1;
  6. }
  7. .right{
  8. -webkit-box-flex:1;
  9. }

实现左右两侧元素,右侧元素的文字不会溢出到左侧位置。

1)让左边的图片左浮动或者绝对定位,

http://codepen.io/floralam/pen/wBbPPj

  1. .right{
  2. margin-left: 150px;
  3. }

2)让左边的图片左浮动或者绝对定位,

http://codepen.io/floralam/pen/gbJogQ

.right{

overflow:hidden;/*让右侧文字和左侧图片自动分栏*/

}

3)左侧图片设置为左浮动,

http://codepen.io/floralam/pen/bNyaaX?editors=110

.right{

display: table-cell;/*让右侧文字和左侧图片自动分栏*/

}

两栏或多栏自适应布局的通用类语句是(block水平标签,需配合浮动):

http://codepen.io/floralam/pen/vEwpjV

  1. .cell{
  2. padding-right:10px;
  3. display: table-cell;
  4. *display: inline-block;
  5. *width: auto;
  6. }

5,  强制不换行

div{
    white-space:nowrap;
}

自动换行

div{
word-wrap: break-word; //
性允许长单词或 URL 地址换行到下一行
word-break: normal; //让浏览器实现在任意位置的换行
}

word-wrap是控制换行的。break-word是控制是否断词的。

强制英文单词断行

div{

word-break:break-all;

}

6,  li超过一定长度,以省略号显示

http://codepen.io/floralam/pen/zxQjrK

  1. .nowrap li{
  2. white-space:nowrap;
  3. width:100px;
  4. overflow:hidden;
  5. text-overflow: ellipsis;
  6. }

 7,  左侧导航

http://codepen.io/floralam/pen/ogrbXW?editors=110

  1. .nav{
  2. position:relative;
  3. float:left;width:190px;
  4. margin-right:-190px;
  5. background:lightblue;
  6. }
  7. .container{
  8. float:right;
  9. width:100%;
  10. background:pink;
  11. }
  12. .content{
  13. margin-left:200px;
  14. }

8,  css3文字分栏

http://codepen.io/floralam/pen/ZYdOmN?editors=110

9,  修复侧边栏

在外容器的添加导航和主内容,当导航和主内容的宽度加上内外边距的数值大于外容器的宽度减去内边距的值,会导致导航和主内容(其中一个,html代码排后面的元素)被挤下。

http://codepen.io/floralam/pen/XJLRYq?editors=110

解决方案:

1)      Section元素上使用box-sizing:border-box;模拟IE6中,使得内元素的宽度为width的值,而非width加上padding和margin的值。

2)      width:-moz-calc(75% -1rem * 2);width:-webkit-calc(75% - 1rem * 2); width: calc(75% - 1rem * 2); width属性中减去padding值

3)http://codepen.io/floralam/pen/yydPOE

在元素内部增加一个额外的容器,并将padding放在这个新增的内部容器中,这是一种修复方法,而且得到众多浏览器支持。

10, css描绘三角形

http://codepen.io/floralam/pen/azgGmZ

很多关于使用css3来描绘特定图像,使用代码而非图片实现(多座小山包,返回顶部)的题目,都离不开描绘三角形。

11, 清除浮动的技巧

在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。

1) 添加最后一个元素<div style ="clear:both"></div>

2) 父元素设置overflow: hidden;

3) 使用CSS的:after伪元素

通过CSS伪元素在容器的内部元素最后添加了一个看不见的空格"020"或点".",并且赋予clear属性来清除浮动。需要注意的是为了IE6和IE7浏览器,要给clearfix这个class添加一条zoom:1;触发haslayout。

从不同的角度分析Flex的优缺点

技术角度

(1)具备了RIA时代富客户端的优点(C/S+B/S

(2)支持多种服务器语言(JAVA.NETPHP)及主流框架(SpringHibernate

(3)与Java结合后相当强大,能充分利用Java的资源背景

(4)拥有丰富的组件和第三方组件,对企业级的数据汇总和业务流程展现力较强悍

(5)借助开源的力量,拥有众多民间组织和牛人支持

(6)Adobe公司(还有MM多年积累)的强大背景

(7)源于Flash的天生丽质,轻松使用多媒体资源,动态交互性强

(8)借助FlashPlayer的安装普及度,轻松实现跨浏览器跨平台

(9)良好的架构设计和制作精良的文档示例(明年FLEX4同步推出中文版)

(10)借助于插件丰富的Eclipse开发平台并拥有独立的IDE

(11)框架设计重用性高,有利于模块化设计

(12)近几年发展态势良好,获得了广泛认可,产品和技术也越发成熟

开发者角度:

(1)开源,透明

(2)基于Eclipse开发平台,易上手,且插件丰富

(3)基于Eclipse平台,开发调试方便(FB4中的条件断点)

(4)ActionScript语言与Java的融合度和相似度较高,易学易用

(5)MXML标签与XML相似,逻辑清晰可读性强

(6)架构设计良好,耦合度低,有利于组件重用

(7)无需针对不同浏览器编写代码,摆脱编写和调试的噩梦(针对JS说的)

(8)类似VB的可视化拖拽组件,快速创建界面

(9)方便定制及使用第三方的皮肤和样式,无需美工也有好效果

(10)支持多媒体资源,轻易开发动态交互性强的界面

(11)众多的RPC组件保障对后台数据访问的安全性和效率

(12)文档示例丰富,通过网络可以获取大量的学习资源

(13)近两年发展态势良好,前景光明

企业角度:

(1)开源,免费

(2)具备了RIA时代富客户端的优点(C/S+B/S

(3)项目和组件的重用性高,易于资源积累和快速构建

(4)Flex提供了与其他语言的结合,能广泛利用已有的资源

(5)界面华丽,客户认可度高

(6)学习曲线一般,培训成本低

用户角度:

(1)部署和更新方便

(2)界面漂亮,交互性强

(3)安全

缺点:

(1)不擅长处理复杂的业务流程,主要还是适合展现(Flex不是万能的)

(2)继承了Flash的诸多优点,却唯独丢掉了Flash的小巧轻盈(减肥是永恒的话题)

(3)目前尚没有比较好的减肥策略,带宽较好时这不是问题(不是一般的卡。。。)

(4)对服务器和客户端的硬件设备都有一定要求(CPU和内存占用很生猛。。。)

(5)运行期内存泄露状况严重,尽管可以通过一定手段改善(这个很崩溃)

(6)对一些较专业的领域涉及较少,需要第三方组件支持(比如地质方面的)

(7)Adobe公司对中国分部的支持不够(感觉宣讲和文档都做得不够)

(8)搜索引擎对swf文件的支持不够(Adobe一直在努力)

(9)与以往浏览习惯不同,比如右键被屏蔽,图片无法保存(可以改善)

鉴于Flex生成的swf文件太肥是其主要缺点(加载慢,运行慢,内存占用多),我就主要从减肥和优化的角度来说一下使用心得。

使用心得:

(1)Flex只是前台展现,需要搭配强大的后台(注意前后台的均衡和优化)

(2)考虑异步加载(比如分步加载外部资源)

(3)界面推荐使用相对布局,合理组合,避免多余嵌套

(4)界面加载图片推荐使用外部加载方式,尽可能多使用矢量图形

(5)规范CSS样式表,尤其注意使用的外部字体大小

(6)使用额外的皮肤和特效时需要综合考虑生成的文件大小和执行效率

(7)适当地考虑延时加载策略,主界面只显示必要的内容

(8)规范编码,提高执行效率,避免内存泄露

(9)使用RSLModule和其他有效方式努力减肥

(10)尽可能重写一些继承底层类的组件,执行效率更好

(11)慎重使用重量级组件(比如DataGridAdvancedDataGrid

面试之响应式布局

响应式布局介绍

响应式布局是什么意思?

响应式布局可以根据不同的浏览设备(PC端,平板,智能手机等)呈现不同的网页布局,同时减少缩放、平移和滚动。

适应移动端的大趋势,提高用户体验,减少开发成本。

为什么要使用响应式布局?

主要是使网页适用于用于移动端设备,屏幕分辨率是出现的最大的兼容性问题。

可以为不同的设备提供不同的网站,也就是同一网站做普通PC端和移动端两种页面。不论是前期的开发还是后期的维护改版,都非常的麻烦。

响应式布局的缺点?

兼容代码多,工作量大

设计原则?适合什么样的项目?

向下兼容,移动优先。

对于非常复杂的网页布局,不适合进行网页自适应的布局,原因之一是实现成本太高,其次就是复杂页面(例如容商网首页,中国企业集群首页等)也不适合移动端的浏览。

其他的响应式布局的框架?

     Prue框架是Yahoo的一款轻量级的框架,兼容IE7以上,性能好,但是中文文档少,不利于团队开发,没有组件。

Foundation by ZURB,次于Bootstrap,重量级,362K大小

Bootstrap优势?

学习成本低

     是目前最流行的自适应框架

     性能非常好,最基础的文件大小只有149.1k

          bootstrap.min.js     35.1k

bootstrap.min.css   114k

中文文档完善,还有全套的视频教程

     有许多组件可以选择,如Bootstrap switch,Sco.js,Flat UI等,便于快速开发

 兼容性

Chrome

Firefox

Internet Explorer

Opera

Safari

Android

支持

支持

N/A

不支持

N/A

iOS

支持

N/A

不支持

支持

Mac OS X

支持

支持

支持

支持

Windows

支持

支持

支持

支持

不支持

windows平台,支持IE8,如果不用框架则需要IE9以上支持,而且通过插件Bsie(鄙视IE)可以兼容IE6。

响应式布局实例

响应式页面实例地址

http://xys.laiwanapp.com/bootstrap-1/

http://xys.laiwanapp.com/bootstrap-2/

http://xys.laiwanapp.com/bootstrap-3/

兼容性问题(分辨率分解-*~768手机,768~992平板,992~1200普通PC,1200~*大屏幕PC)

chrome18

firefox11(firefox3.6)

IE7(较少用户)

IE8(主流)

IE9(代表最新版本)

IE6

实例1-微博

无(无圆角)

崩溃

实例2-相册

圆角错误

无圆角(无圆角,不支持背景尺寸属性)

崩溃

实例3-博客

圆角错误

无圆角, 进度条无动画(无圆角,进度条无动画)

崩溃

其它

说明

chrome18和firefox都是旧版本的,用户非常少

不支持背景属性可以用position和z-index属性解决

IE6崩溃可以使用针对Bootstrap的插件Bsie解决大部分,但如果不要求对IE6支持,不建议使用,影响性能

下图分别是无圆角,正常圆角,圆角错误,圆角是CSS3属性,所以会出现兼容问题,但IE7以上都支持,已经很好了(w3school说IE9以上才支持,说明使用了css hack)

且官方文档里说明说明了这一点:http://v3.bootcss.com/css/#images-shapes

总结:支持主流浏览器,旧版本的浏览器出现的兼容性问题不大。

  

其它需要改进

移动端测试

兼容性问题(分辨率分解-

1.     *~768手机,1栏

2.     768~992平板,2栏

3.     992~1200普通PC,2栏

4.     1200~*大屏幕PC,3栏

分辨率dpi

ppi

型号

2560x1536(手机)

546

MX4 pro

1栏

1栏

720x1280(手机)

华为荣耀3c

1栏

1栏

1200x1920(手机平板)

华为 x1 7.0

1栏

2栏

800x1280(平板)

toshiba wt8a(win 8.1系统)

2栏

3栏

1366x768

Acer win8.1

-

-


原理

2.怎样实现响应式布局

现在响应式布局用得比较大众的应该是Bootstrap,但是我并不打算使用。原因很简单,我对Bootstrap不熟悉不了解。然后 我简单的看了下Bootstrap是怎么实现的响应式布局。原理很简单,就是使用到了CSS3中的media。media何方神圣?可以用来吃吗?它可以针对不同的媒体类型定义不同的样式,也可以针对不同的屏幕尺寸设置不同的样式。且当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。既然如此,响应式何愁。

3.media的简单使用

Max Width:在可视区域的宽度小于 600px 的时候被应用。

@media screen and (max-width: 600px) {
  .class {
    background: #0094ff;
  }
}

Min Width:在可视区域的宽度大于600px 的时候被应用。

@media screen and (min-width: 600px) {
  .class {
    background: red;
  }
} 

简单?对,就是如此简单。您还可以 在600到900直接的启用。

@media screen and (min-width: 600px) and (max-width: 900px) {
  .class {
    background: #0094ff;
  }
}

当然,您还可以,放入单独文件。爽歪歪了吧。

<link rel="stylesheet" media="screen and (max-width: 600px)" href="max600.css" />

好了,你已经知道得太多了。实现一个首页的响应式 基本上已经够用了。

默认样式 显示 移动端:

.blog_body_e.col-xs-12 .a_blog_user {
    display: inline-block;
}
 
.blog_body_e, .blog_body_b {
    padding-left: 10px;
    padding-right: 10px;
}

如果是PC端:(默认 大于992px就算是PC端 当然,你也可以自定义)

@media (min-width: 992px) {
    .blog_body_e.col-md-3 .a_blog_user {
        display: block;
    }
 
    .blog_body .blog_body_b {
        width: 80%;
        float: left;
    }
 
    .blog_body .blog_body_e {
        width: 20%;
        float: left;
        box-sizing: border-box;
        padding-right: 25px;
    }
 
    .blog_body_e, .blog_body_b {
        padding-left: 20px;
        padding-right: 20px;
    }
}

我们看分布看看效果图

  • 博客园
  • 首页
  • 新随笔
  • 联系
  • 管理
  • 订阅

随笔- 113 文章- 2 评论- 10

最全前端开发面试问题及答案整理

前端开发面试知识点大纲:

HTML&CSS Web标准的理解、浏览器内核差异、兼容性、hackCSS基本功:布局、盒子模型、选择器优先级及使用、HTML5CSS3、移动端适应。

JavaScript 数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、NodejsJSONajax等。

其他: HTTP、安全、正则、优化、重构、响应式、移动端、团队协作、可维护、SEOUED、架构、职业生涯

1.请你谈谈Cookie的弊端

cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的。 第一:每个特定的域名下最多生成20cookie

1.IE6或更低版本最多20cookie
2.IE7
和之后的版本最后可以有50cookie
3.Firefox最多50cookie
4.chrome
Safari没有做硬性限制
IEOpera 会清理近期最少使用的cookieFirefox会随机清理cookie

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

IE 提供了一种存储可以持久化用户数据,叫做uerData,从IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在。

优点:极高的扩展性和可用性

1.通过良好的编程,控制保存在cookie中的session对象的大小。
2.通过加密和安全传输技术(SSL),减少cookie被破解的可能性。
3.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
4.控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie
缺点:

1.`Cookie`数量和长度的限制。每个domain最多只能有20cookie,每个cookie长度不能超过4KB,否则会被截掉。

2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。

3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

2.浏览器本地存储

在较高版本的浏览器中,js提供了sessionStorageglobalStorage。在HTML5中提供了localStorage来取代globalStorage

html5中的Web Storage包括了两种存储方式:sessionStoragelocalStorage

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

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

3.web storage和cookie的区别

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookiegetCookie

但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地存储数据而生

浏览器的支持除了IE7及以下不支持外,其他标准浏览器都完全支持(ieFF需在web服务器里运行),值得一提的是IE总是办好事,例如IE7IE6中的UserData其实就是javascript本地存储的解决方案。通过简单的代码封装可以统一到所有的浏览器都支持web storage

localStoragesessionStorage都具有相同的操作方法,例如setItemgetItemremoveItem

CSS 相关问题

display:nonevisibility:hidden的区别?

display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,
就当他从来不存在。

visibility:hidden 隐藏对应的元素,但是在文档布局中仍保留原来的空间。

CSS中 link 和@import 的区别是?

A(1) link属于HTML标签,而@importCSS提供的; (2) 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;(3) import只在IE5以上才能识别,而linkHTML标签,无兼容问题; (4) link方式的样式的权重 高于@import的权重.

position的absolute与fixed共同点与不同点

A:共同点:
1.改变行内元素的呈现方式,display被置为block2.让元素脱离普通流,不占据空间;3.默认会覆盖到非定位元素上

B不同点:
absolute根元素是可以设置的,而fixed根元素固定为浏览器窗口。当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。

介绍一下CSS的盒子模型?

1)有两种, IE 盒子模型、标准 W3C 盒子模型;IEcontent部分包含了 border pading;

2)盒模型: 内容(content)、填充(padding)、边界(margin) 边框(border).

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

* 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

* 可继承的样式: font-size font-family color, text-indent;

* 不可继承的样式: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 单选框或复选框被选中。

列出display的值,说明他们的作用。position的值, relative和absolute分别是相对于谁进行定位的?

1. 
block
象块类型元素一样显示。
inline 缺省值。象行内元素类型一样显示。
inline-block 象行内元素一样显示,但其内容象块类型元素一样显示。
list-item 象块类型元素一样显示,并添加样式列表标记。

2. 
*absolute

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

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

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

* static 默认值。没有定位,元素出现在正常的流中
*(忽略 top, bottom, left, right z-index 声明)。

* inherit 规定从父元素继承 position 属性的值。

CSS3有哪些新特性?

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

为什么要初始化CSS样式。

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

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

*最简单的初始化方法就是: * {padding: 0; margin: 0;} (不建议)

淘宝的样式初始化:
1 body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
2 body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
3 h1, h2, h3, h4, h5, h6{ font-size:100%; }
4 address, cite, dfn, em, var { font-style:normal; }
5 code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
6 small{ font-size:12px; }
7 ul, ol { list-style:none; }
8 a { text-decoration:none; }
9 a:hover { text-decoration:underline; }
10 sup { vertical-align:text-top; }
11 sub{ vertical-align:text-bottom; }
12 legend { color:#000; }
13 fieldset, img { border:0; }
14 button, input, select, textarea { font-size:100%; }
15 table { border-collapse:collapse; border-spacing:0; }

对BFC规范的理解?

BFC,块级格式化上下文,一个创建了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素。在同一个BFC中的两个毗邻的块级盒在垂直方向(和布局方向有关系)的margin会发生折叠。
W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行布局,以及与其他元素的关系和相互作用。)
解释下 CSS sprites,以及你要如何在页面或网站中使用它。

CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS“background-image”“background- repeat”“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。这样可以减少很多图片请求的开销,因为请求耗时比较长;请求虽然可以并发,但是也有限制,一般浏览器都是6个。对于未来而言,就不需要这样做了,因为有了`http2`
html部分

说说你对语义化的理解?

  1. 去掉或者丢失样式的时候能够让页面呈现出清晰的结构
    2,有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;
    3,方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;
    4,便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。

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

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

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

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

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

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

该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。
HTML 4.01 规定了三种文档类型:StrictTransitional 以及 Frameset
XHTML 1.0 规定了三种 XML 文档类型:StrictTransitional 以及 Frameset
Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks
(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

HTML与XHTML——二者有什么区别

区别:
1.所有的标记都必须要有一个相应的结束标记
2.所有标签的元素和属性的名字都必须使用小写
3.所有的XML标记都必须合理嵌套
4.所有的属性必须用引号""括起来
5.把所有<&特殊符号用编码表示
6.给所有属性赋一个值
7.不要在注释内容中使“--”
8.
图片必须有说明文字

常见兼容性问题?

* png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理.

* 浏览器默认的marginpadding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。

* IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。

* 浮动ie产生的双倍距离(IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-leftmargin-rightmargin值会加倍。)
#box{ float:left; width:10px; margin:0 0 0 100px;}

这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)

* 渐进识别的方式,从总体中逐渐排除局部。

首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。 
接着,再次使用“+”IE8IE7IE6分离开来,这样IE8已经独立识别。

css
.bb{
background-color:#f1ee18;/*
所有识别*/
.background-color:#00deff\9; /*IE6
78识别*/
+background-color:#a200ff;/*IE6
7识别*/
_background-color:#1e0bd1;/*IE6
识别*/ 
}

* IE,可以使用获取常规属性的方法来获取自定义属性,
也可以使用getAttribute()获取自定义属性;
Firefox
,只能使用getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性.

* IE,event对象有x,y属性,但是没有pageX,pageY属性
Firefox
,event对象有pageX,pageY属性,但是没有x,y属性.

* 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。

* Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.

* 超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hoveractive了解决方法是改变CSS属性的排列顺序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}

* 怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。现在可以使用[html5](http://www.w3.org/TR/html5/single-page.html)推荐的写法:`<doctype html>`

* 上下margin重合问题
ieff都存在,相邻的两个divmargin-leftmargin-right不会重合,但是margin-topmargin-bottom却会发生重合。
解决方法,养成良好的代码编写习惯,同时采用margin-top或者同时采用margin-bottom
* ie6png图片格式支持不好(引用一段脚本处理)

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

浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。

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

浮动元素引起的问题和解决办法?

浮动元素引起的问题:
1)父元素的高度无法被撑开,影响与父元素同级的元素
2)与浮动元素同级的非浮动元素会跟随其后
3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
解决方法: 使用CSS中的clear:both;属性来清除元素的浮动可解决23问题,对于问题1,添加如下样式,给父元素添加clearfix样式:

.clearfix:after{content: ".";display: block;height: 0;clear: both;visibility: hidden;}
.clearfix{display: inline-block;} /* for IE/Mac */

清除浮动的几种方法:

1,额外标签法,<div style="clear:both;"></div>(缺点:不过这个办法会增加额外的标签使HTML结构看起来不够简洁。)
2,使用after伪类

#parent:after{
content:".";
height:0;
visibility:hidden;
display:block;
clear:both;
}

3,浮动外部元素
4,设置`overflow``hidden`或者auto
IE 8
以下版本的浏览器中的盒模型有什么不同

IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框
DOM操作——怎样添加、移除、移动、复制、创建和查找节点。

1)创建新节点

createDocumentFragment() //创建一个DOM片段

createElement() //创建一个具体的元素

createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild()

removeChild()

replaceChild()

insertBefore() //在已有的子节点前插入一个新的子节点

3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)

getElementById() //通过元素Id,唯一性

html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

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

* 拖拽释放(Drag and drop) API
语义化更好的内容标签(header,nav,footer,aside,article,section
音频、视频API(audio,video)
画布(Canvas) API
地理(Geolocation) API
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除

表单控件,calendardatetimeemailurlsearch
新的技术webworker, websocket, Geolocation

* 移除的元素

纯表现的元素:basefontbigcenterfont, sstrikettu

对可用性产生负面影响的元素:frameframesetnoframes

支持HTML5新标签:

* IE8/IE7/IE6支持通过document.createElement方法产生的标签,
可以利用这一特性让这些浏览器支持HTML5新标签,

浏览器支持新标签后,还需要添加标签默认的样式:

* 当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
<!--[if lt IE 9]> 
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script> 
<![endif]-->

如何区分: DOCTYPE声明\新增的结构元素\功能元素

iframe的优缺点?

1.<iframe>优点:

解决加载缓慢的第三方内容如图标和广告等的加载问题
Security sandbox
并行加载脚本

2.<iframe>的缺点:

*iframe会阻塞主页面的Onload事件;

*即时内容为空,加载也需要时间
*没有语意

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

调用localstorgecookies等本地存储方式

webSocket如何兼容低浏览器?

Adobe Flash Socket ActiveX HTMLFile (IE) 基于 multipart 编码发送 XHR 基于长轮询的 XHR

线程与进程的区别

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

进程和线程的重要区别。

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

期待的解决方案包括:
文件合并
文件最小化/文件压缩
使用 CDN 托管
缓存的使用(多个域名来提供缓存)
其他

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

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

6.减少http请求(合并文件,合并图片)。
你都使用哪些工具来测试代码的性能?

Profiler, JSPerfhttp://jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout, Dromaeo

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

FOUC - Flash Of Unstyled Content 文档样式闪烁
<style type="text/css" media="all">@import "../fouc.css";</style>
而引用CSS文件的@import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。
解决方法简单的出奇,只要在<head>之间加入一个<link>或者<script>元素就可以了。

null和undefined的区别?

null是一个表示""的对象,转为数值时为0undefined是一个表示""的原始值,转为数值时为NaN

当声明的变量还未被初始化时,变量的默认值为undefined null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

1)变量被声明了,但没有赋值时,就等于undefined

2) 调用函数时,应该提供的参数没有提供,该参数等于undefined

3)对象没有赋值的属性,该属性的值为undefined

4)函数没有返回值时,默认返回undefined
null表示"没有对象",即该处不应该有值。典型用法是:

1 作为函数的参数,表示该函数的参数不是对象。

2 作为对象原型链的终点。

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

1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
2、属性和方法被加入到 this 引用的对象中。
3、新创建的对象由 this 所引用,并且最后隐式的返回 this

var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);

JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小
{'age':'12', 'name':'back'}
js
延迟加载的方式有哪些?

deferasync、动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)、按需异步载入js

如何解决跨域问题?

jsonp document.domain+iframewindow.namewindow.postMessage、服务器上设置代理页面

jsonp的原理是动态插入script标签
具体参见:详解js跨域问题

documen.write innerHTML的区别

document.write只能重绘整个页面

innerHTML可以重绘页面的一部分

.call() 和 .apply() 的区别和作用?

作用:动态改变某个类的某个方法的运行环境。 区别参见:JavaScript学习总结(四)function函数部分

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

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

setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
详见:详解js变量、作用域及内存

JavaScript中的作用域与变量声明提升?

详见:详解JavaScript函数模式

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

通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器中
其他问题?

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

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

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

99%的网站都需要被重构是那本书上写的?

* 网站重构:应用web标准进行设计(第2版)

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

优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IEhack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效.

渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。
详见:css学习归纳总结(一)

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

对Node的优点和缺点提出了自己的看法?

*(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,
因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

*(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,
而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子

除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?

你常用的开发工具是什么,为什么?

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

前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。
1、实现界面交互
2、提升用户体验
3、有了Node.js,前端可以实现服务端的一些事情

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

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

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

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

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

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

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

你认为怎样才是全端工程师(Full Stack developer)?

介绍一个你最得意的作品吧?

项目中遇到什么问题?如何解决?

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

如何管理前端团队?

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

你有哪些性能优化的方法?

(详情请看雅虎14条性能优化原则)。

1 减少http请求次数:CSS Sprites, JSCSS源码压缩、图片大小控制合适;网页GzipCDN托管,data缓存 ,图片服务器。

2 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

3 innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

4 当需要设置的样式很多时设置className而不是直接操作style

5 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

6 避免使用CSS Expressioncss表达式)又称Dynamic properties(动态属性)

7 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。
http状态码有那些?分别代表是什么意思?

100-199 用于指定客户端应相应的某些动作。 
200-299 用于表示请求成功。 
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 
400-499 用于指出客户端的错误。400 1、语义有误,当前请求无法被服务器理解。401 当前请求需要用户验证 403 服务器已经理解请求,但是拒绝执行它。
500-599 用于支持服务器错误。 503 – 服务不可用
详情:http://segmentfault.com/blog/trigkit4/1190000000691919

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

分为4个步骤:
1),当发送一个URL请求时,不管这个URLWeb页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。
2), 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
3),一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTPGET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200HTTP响应状态表示一个正确的响应。
4),此时,Web服务器提供资源服务,客户端开始下载资源。

请求返回后,便进入了我们关注的前端模块
简单来说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而javascript又可以根据DOM API操作DOM
详情:从输入 URL 到浏览器接收的过程中发生了什么事情?

平时如何管理你的项目?

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

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

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

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

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

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

图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理
说说最近最流行的一些东西吧?常去哪些网站?

Node.jsMongodbnpmMVVMMEANthree.js,React
网站:w3cfuns,sf,hacknews,CSDN,慕课,博客园,InfoQ,w3cplus

javascript对象的几种创建方式

  1. 工厂模式
    2,构造函数模式
    3,原型模式
    4,混合构造函数和原型模式
    5,动态原型模式
    6,寄生构造函数模式
    7,稳妥构造函数模式

javascript继承的6种方法

1,原型链继承
2,借用构造函数继承
3,组合继承(原型+借用构造)
4
,原型式继承
5,寄生式继承
6,寄生组合式继承
详情:JavaScript继承方式详解

ajax过程

(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.

(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.

(3)设置响应HTTP请求状态变化的函数.

(4)发送HTTP请求.

(5)获取异步调用返回的数据.

(6)使用JavaScriptDOM实现局部刷新.
详情:JavaScript学习总结(七)AjaxHttp状态字

异步加载和延迟加载

  1. 异步加载的方案: 动态插入script标签
    2.通过ajax去获取js代码,然后通过eval执行
    3.script标签上添加defer或者async属性
    4.创建并插入iframe,让它异步执行js
    5.
    延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。

前端安全问题?

XSSsql注入,CSRF
CSRF:是跨站请求伪造,很明显根据刚刚的解释,他的核心也就是请求伪造,通过伪造身份提交POSTGET请求来进行跨域的攻击。

**完成CSRF需要两个步骤:**

1.登陆受信任的网站A,在本地生成COOKIE

2.在不登出A的情况下,或者本地COOKIE没有过期的情况下,访问危险网站B
ie各版本和chrome可以并行下载多少个资源

IE6 两个并发,iE7升级之后的6个并发,之后版本也是6

Firefoxchrome也是6
javascript里面的继承怎么实现,如何避免原型链上面的对象共享

用构造函数和原型链的混合模式去实现继承,避免对象共享可以参考经典的extend()函数,很多前端框架都有封装的,就是用一个空函数当做中间变量
grunt YUI compressor google clojure用来进行代码压缩的用法。

YUI Compressor 是一个用来压缩 JS CSS 文件的工具,采用Java开发。

使用方法:

//压缩JS
java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 -v src.js > packed.js
//
压缩CSS
java -jar yuicompressor-2.4.2.jar --type css --charset utf-8 -v src.css > packed.css

详情请见:你需要掌握的前端代码性能优化工具

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

1Flash ajax对比
Flash适合处理多媒体、矢量图形、访问机器;对CSS、处理文本上不足,不容易被搜索。
AjaxCSS、文本支持很好,支持搜索;多媒体、矢量图形、机器访问不足。
共同点:与服务器的无刷新传递消息、用户离线和在线状态、操作DOM
请解释一下 JavaScript 的同源策略。

概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。

这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。 指一段脚本只能读取来自同一来源的窗口和文档的属性。

为什么要有同源限制?

我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。

什么是 "use strict"; ? 使用它的好处和坏处分别是什么?

ECMAscript 5添加了第二种运行模式:"严格模式"strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

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

- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
-
消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
注:经过测试IE6,7,8,9均不支持严格模式。

缺点: 现在网站的JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。

GET和POST的区别,何时使用POST?

GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
POST:一般用于修改服务器上的资源,对所发送的信息没有限制。

GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,
也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。

然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST GET 更稳定也更可靠

哪些地方会出现css阻塞,哪些地方会出现js阻塞?

js的阻塞特性:所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。直到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。为了提高用户体验,新一代浏览器都支持并行下载JS,但是JS下载仍然会阻塞其它资源的下载(例如.图片,css文件等)。

由于浏览器为了防止出现JS修改DOM树,需要重新构建DOM树的情况,所以就会阻塞其他的下载和呈现。

嵌入JS会阻塞所有内容的呈现,而外部JS只会阻塞其后内容的显示,2种方式都会阻塞其后资源的下载。也就是说外部样式不会阻塞外部脚本的加载,但会阻塞外部脚本的执行。

CSS怎么会阻塞加载了?CSS本来是可以并行下载的,在什么情况下会出现阻塞加载了(在测试观察中,IE6CSS都是阻塞加载)

CSS后面跟着嵌入的JS的时候,该CSS就会出现阻塞后面资源下载的情况。而当把嵌入JS放到CSS前面,就不会出现阻塞的情况了。

根本原因:因为浏览器会维持htmlcssjs的顺序,样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载,所以就会出现上面CSS阻塞下载的情况。

嵌入JS应该放在什么位置?

1、放在底部,虽然放在底部照样会阻塞所有呈现,但不会阻塞资源下载。

2、如果嵌入JS放在head中,请把嵌入JS放在CSS头部。

3、使用defer(只支持IE

4、不要在嵌入的JS中调用运行时间较长的函数,如果一定要用,可以用`setTimeout`来调用

Javascript无阻塞加载具体方式

将脚本放在底部。<link>还是放在head中,用以保证在js加载前,能加载出正常显示的页面。<script>标签放在</body>前。
成组脚本:由于每个<script>标签下载时阻塞页面解析过程,所以限制页面的<script>总数也可以改善性能。适用于内联脚本和外部脚本。

非阻塞脚本:等页面完成加载后,再加载js代码。也就是,在window.onload事件发出后开始下载代码。 1defer属性:支持IE4fierfox3.5更高版本浏览器 2)动态脚本元素:文档对象模型(DOM)允许你使用js动态创建HTML的几乎全部文档内容。代码如下:

<script>
var script=document.createElement("script");
script.type="text/javascript";
script.src="file.js";
document.getElementsByTagName("head")[0].appendChild(script);
</script>

此技术的重点在于:无论在何处启动下载,文件额下载和运行都不会阻塞其他页面处理过程。即使在head里(除了用于下载文件的http链接)。

闭包相关问题?

详情请见:详解js闭包

js事件处理程序问题?

详情请见:JavaScript学习总结(九)事件详解

eval是做什么的?

它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
写一个通用的事件侦听器函数?

Node.js的适用场景?

高并发、聊天、实时消息推送

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

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

页面重构怎么操作?

编写 CSS、让页面结构更合理化,提升用户体验,实现良好的页面效果和提升性能。
WEB应用从服务器主动推送Data到客户端有那些方式?

html5 websoket
WebSocket
通过Flash
XHR
长时间连接
XHR Multipart Streaming
不可见的Iframe
<script>
标签的长时间连接(可跨域)

事件、IE与火狐的事件机制有什么区别? 如何阻止冒泡?

1 // event(事件)工具集,来源:github.com/markyun
2 markyun.Event = {
3 //
页面加载完成后
4 readyEvent : function(fn) {
5 if (fn==null) {
6 fn=document;
7 }
8 var oldonload = window.onload;
9 if (typeof window.onload != 'function') {
10 window.onload = fn;
11 } else {
12 window.onload = function() {
13 oldonload();
14 fn();
15 };
16 }
17 },
18 //
视能力分别使用dom0||dom2||IE方式 来绑定事件
19 // 参数: 操作的元素,事件名称 ,事件处理程序
20 addEvent : function(element, type, handler) {
21 if (element.addEventListener) {
22 //
事件类型、需要执行的函数、是否捕捉
23 element.addEventListener(type, handler, false);
24 } else if (element.attachEvent) {
25 element.attachEvent('on' + type, function() {
26 handler.call(element);
27 });
28 } else {
29 element['on' + type] = handler;
30 }
31 },
32 //
移除事件
33 removeEvent : function(element, type, handler) {
34 if (element.removeEnentListener) {
35 element.removeEnentListener(type, handler, false);
36 } else if (element.datachEvent) {
37 element.detachEvent('on' + type, handler);
38 } else {
39 element['on' + type] = null;
40 }
41 }, 
42 //
阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
43 stopPropagation : function(ev) {
44 if (ev.stopPropagation) {
45 ev.stopPropagation();
46 } else {
47 ev.cancelBubble = true;
48 }
49 },
50 //
取消事件的默认行为
51 preventDefault : function(event) {
52 if (event.preventDefault) {
53 event.preventDefault();
54 } else {
55 event.returnValue = false;
56 }
57 },
58 //
获取事件目标
59 getTarget : function(event) {
60 return event.target || event.srcElement;
61 },
62 //
获取event对象的引用,取到事件的所有信息,确保随时能使用event
63 getEvent : function(e) {
64 var ev = e || window.event;
65 if (!ev) {
66 var c = this.getEvent.caller;
67 while (c) {
68 ev = c.arguments[0];
69 if (ev && Event == ev.constructor) {
70 break;
71 }
72 c = c.caller;
73 }
74 }
75 return ev;
76 }
77 };
1.
我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。 
2. 事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件。;
3. ev.stopPropagation();注意旧ie的方法 ev.cancelBubble = true;

ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?

详情请见:JavaScript学习总结(七)AjaxHttp状态字

1. 通过异步模式,提升了用户体验

2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用

3. Ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。

. Ajax的最大的特点是什么。

Ajax可以实现动态不刷新(局部刷新)
readyState属性 状态 5个可取值: 0=未初始化 1=启动 2=发送,3=接收,4=完成

ajax的缺点

1ajax不支持浏览器back按钮。

2、安全问题 AJAX暴露了与服务器交互的细节。

3、对搜索引擎的支持比较弱。

4、破坏了程序的异常机制。

5、不容易调试。

跨域: jsonp iframewindow.namewindow.postMessage、服务器上设置代理页面

js对象的深度克隆

1 function clone(Obj) { 
2 var buf; 
3 if (Obj instanceof Array) { 
4 buf = []; //
创建一个空的数组 
5 var i = Obj.length; 
6 while (i--) { 
7 buf[i] = clone(Obj[i]); 
8 } 
9 return buf; 
10 }else if (Obj instanceof Object){ 
11 buf = {}; //
创建一个空对象 
12 for (var k in Obj) { //为这个对象添加新的属性 
13 buf[k] = clone(Obj[k]); 
14 } 
15 return buf; 
16 }else{ 
17 return Obj; 
18 } 
19 }

AMD和CMD 规范的区别?

详情请见:详解JavaScript模块化开发

网站重构的理解?

网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。也就是说是在不改变UI的情况下,对网站进行优化,在扩展的同时保持一致的UI

对于传统的网站来说重构通常是:

表格(table)布局改为DIV+CSS
使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)
对于移动平台的优化
针对于SEO进行优化
深层次的网站重构应该考虑的方面

减少代码间的耦合
让代码保持弹性
严格按规范编写代码
设计可扩展的API
代替旧有的框架、语言(VB)
增强用户体验
通常来说对于速度的优化也包含在重构中

压缩JSCSSimage等前端资源(通常是由服务器来解决)
程序的性能优化(如数据读写)
采用CDN来加速资源加载
对于JS DOM的优化
HTTP服务器的文件缓存

如何获取UA?

1 <script> 
2 function whatBrowser() { 
3 document.Browser.Name.value=navigator.appName; 
4 document.Browser.Version.value=navigator.appVersion; 
5 document.Browser.Code.value=navigator.appCodeName; 
6 document.Browser.Agent.value=navigator.userAgent; 
7 } 
8 </script>

js数组去重

以下是数组去重的三种方法:

1 Array.prototype.unique1 = function () {
2 var n = []; //
一个新的临时数组
3 for (var i = 0; i < this.length; i++) //遍历当前数组
4 {
5 //
如果当前数组的第i已经保存进了临时数组,那么跳过,
6 //否则把当前项push到临时数组里面
7 if (n.indexOf(this[i]) == -1) n.push(this[i]);
8 }
9 return n;
10 }
11 
12 Array.prototype.unique2 = function()
13 {
14 var n = {},r=[]; //n
hash表,r为临时数组
15 for(var i = 0; i < this.length; i++) //遍历当前数组
16 {
17 if (!n[this[i]]) //
如果hash表中没有当前项
18 {
19 n[this[i]] = true; //
存入hash
20 r.push(this[i]); //把当前数组的当前项push到临时数组里面
21 }
22 }
23 return r;
24 }
25 
26 Array.prototype.unique3 = function()
27 {
28 var n = [this[0]]; //
结果数组
29 for(var i = 1; i < this.length; i++) //从第二项开始遍历
30 {
31 //
如果当前数组的第i项在当前数组中第一次出现的位置不是i
32 //那么表示第i项是重复的,忽略掉。否则存入结果数组
33 if (this.indexOf(this[i]) == i) n.push(this[i]);
34 }
35 return n;
36 }

HTTP状态码

1 100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
2 200 OK 正常返回信息
3 201 Created 请求成功并且服务器创建了新的资源
4 202 Accepted 服务器已接受请求,但尚未处理
5 301 Moved Permanently 请求的网页已永久移动到新位置。
6 302 Found 临时性重定向。
7 303 See Other 临时性重定向,且总是使用 GET 请求新的 URI
8 304 Not Modified 自从上次请求后,请求的网页未修改过。

10 400 Bad Request
服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
11 401 Unauthorized 请求未授权。
12 403 Forbidden 禁止访问。
13 404 Not Found 找不到如何与 URI 相匹配的资源。
14 
15 500 Internal Server Error
最常见的服务器端错误。
16 503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

cache-control

网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有privateno-cachemax-agemust-revalidate等,默认为private

Expires 头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。允许客户端在这个时间之前不去检查(发请求),等同max-age的效果。但是如果同时存在,则被Cache-Controlmax-age覆盖。

Expires = "Expires" ":" HTTP-date
例如

Expires: Thu, 01 Dec 1994 16:00:00 GMT (必须是GMT格式)
如果把它设置为-1,则表示立即过期

Expiresmax-age都可以用来指定文档的过期时间,但是二者有一些细微差别

1.ExpiresHTTP/1.0中已经定义,Cache-Control:max-ageHTTP/1.1中才有定义,为了向下兼容,仅使用max-age不够;
2.Expires指定一个绝对的过期时间(GMT格式),这么做会导致至少2个问题:1)客户端和服务器时间不同步导致Expires的配置出现问题。 2)很容易在配置后忘记具体的过期时间,导致过期来临出现浪涌现象;

3.max-age 指定的是从文档被访问后的存活时间,这个时间是个相对值(比如:3600s),相对的是文档第一次被请求时服务器记录的Request_time(请求时间)

4.Expires指定的时间可以是相对文件的最后访问时间(Atime)或者修改时间(MTime),max-age相对对的是文档的请求时间(Atime)

如果值为no-cache,那么每次都会访问服务器。如果值为max-age,则在过期之前不会重复访问服务器。
js操作获取和设置cookie 1 //创建cookie

2 function setCookie(name, value, expires, path, domain, secure) {
3 var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);
4 if (expires instanceof Date) {
5 cookieText += '; expires=' + expires;
6 }
7 if (path) {
8 cookieText += '; expires=' + expires;
9 }
10 if (domain) {
11 cookieText += '; domain=' + domain;
12 }
13 if (secure) {
14 cookieText += '; secure';
15 }
16 document.cookie = cookieText;
17 }
18 
19 //
获取cookie
20 function getCookie(name) {
21 var cookieName = encodeURIComponent(name) + '=';
22 var cookieStart = document.cookie.indexOf(cookieName);
23 var cookieValue = null;
24 if (cookieStart > -1) {
25 var cookieEnd = document.cookie.indexOf(';', cookieStart);
26 if (cookieEnd == -1) {
27 cookieEnd = document.cookie.length;
28 }
29 cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
30 }
31 return cookieValue;
32 }
33 
34 //
删除cookie
35 function unsetCookie(name) {
36 document.cookie = name + "= ; expires=" + new Date(0);3
]

【web前端开发】浏览器兼容性处理大全

1.居中问题

  1. div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto;

2、高度问题

两上下排列或嵌套的div,上面的div设置高度(height),如果div里的实际内容大于所设高度,在FF中会出现两个div重叠的现象;但在IE中,下面的div会自动给上面的div让出空间所以为避免出现层的重叠,高度一定要控制恰当,或者干脆不写高度,让他自动调节,比较好的方法是 height:100%;但当这个div里面一级的元素都float了的时候,则需要在div块的最后,闭和前加一个沉底的空div,对应CSS是:.float_bottom {clear:both;height:0px;font-size:0px;padding:0;margin:0;border:0;line-height:0px;overflow:hidden;}

3、clear:both;

不想受到float浮动的,就在div中写入clear:both;

4、IE浮动 margin产生的双倍距离

#box {
float:left;
width:100px;
margin:0 0 0 100px; //
这种情况之下IE会产生200px的距离
display:inline; //使浮动忽略
}

5、padding问题

FF设置 padding 后,div会增加 height 和 width,但IE不会 (* 标准的 XHTML1.0 定义 dtd 好像一致了)高度控制恰当,或尝试使用 height:100%;宽度减少使用 padding但根据实际经验,一般FF和IE的 padding 不会有太大区别,div 的实际宽 = width + padding ,所以div写全 width 和 padding,width 用实际想要的宽减去 padding 定义。

6、div嵌套时 y轴上 padding和 marign的问题

FF里 y 轴上 子div 到 父div 的距离为 父padding + 子marign
IE里 y 轴上 子div 到 父div 的距离为 父padding 和 子marign 里大的一个
FF里 y 轴上 父padding=0 且 border=0 时,子div 到 父div 的距离为0,子marign 作用到 父div 外面

7、padding,marign,height,width的傻瓜式解决技巧

注意是技巧,不是方法:
写好标准头
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
高尽量用padding,慎用margin,height尽量补上100%,父级height有定值子级height不用100%,子级全为浮动时底部补个空clear:both的div宽尽量用margin,慎用padding,width算准实际要的减去padding

8、列表类

1. ul标签在FF中默认是有 padding值的,而在IE中只有margin有值
先定义 ul {margin:0;padding:0;}
2. ul和ol列表缩进问题消除ul、ol等列表的缩进时,样式应写成: {list-style:none;margin:0px;padding:0px;}

9、显示类(display:block,inline)

1. display:block,inline两个元素
display:block; //可以为内嵌元素模拟为块元素
display:inline; //实现同一行排列的的效果
display:table; //for FF,模拟table的效果
display:block 块元素,元素的特点是:
总是在新行上开始;高度,行高以及顶和底边距都可控制;宽度缺省是它的容器的100%,除非设定一个宽度
<div>,<p>,<h1>,<form>,<ul> 和 <li> 是块元素的例子
display:inline 就是将元素显示为行内元素,元素的特点是:和其他元素都在一行上;高,行高及顶和底边距不可改变;宽度就是它的文字或图片的宽度,不可改变。<span>,<a>,<label>,<input>,<img>,<strong> 和 <em> 是 inline 元素的例子
2.鼠标手指状显示
全部用标准的写法 cursor: pointer;

10、背景、图片类

1. background显示问题
全部注意补齐 width,height 属性
2.背景透明问题
IE: filter: progid: DXImageTransform.Microsoft.Alpha(style=0,opacity=60);
IE: filter: alpha(opacity=10);
FF: opacity:0.6;
FF: -moz-opacity:0.10;
最好两个都写,并将opacity属性放在下面

11、min-height最小高度的实现(兼容IE6、IE7、FF)

作用是:当容器的内容较少时,能保持一个最小的高度,以免破坏了布局或UI设计效果。而当容器内的内容增加的时候,容器能够自动的伸展以适应内容的变化。
#mrjin {
background:#ccc;
min-height:100px;
height:auto !important;
height:100px;
overflow:visible;
}

12、著名的 Meyer Reset(重置)

html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6,p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, font, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td

margin: 0; 
padding: 0; 
border: 0; 
outline: 0; 
font-weight: inherit; 
font-style: inherit; 
font-size: 100%; 
font-family: inherit; 
vertical-align: baseline; 

:focus { 
outline: 0; 

body { 
line-height: 1; 
color: black; 
background: white; 

ol, ul { 
list-style: none; 

table { 
border-collapse: separate; 
border-spacing: 0; 

caption, th, td { 
text-align: left; 
font-weight: normal; 

blockquote:before, blockquote:after, 
q:before, q:after { 
content: ""; 

blockquote, q { 
quotes: "" ""; 
}

13、跨浏览器的CSS透明度

.transparent { 
opacity: 0.7; 
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
filter: alpha(opacity=70); 
-moz-opacity: 0.7; 
-khtml-opacity: 0.7;

14、文字阴影(CSS3)

.text { text-shadow: 1px 1px 1px #666; filter: Shadow(Color=#666666, Direction=135, Strength=5); }

15、Box阴影(CSS3)

.box { box-shadow: 5px 5px 5px #666; -moz-box-shadow: 5px 5px 5px #666; -webkit-box-shadow: 5px 5px 5px #666; }

16、Sticky Footer (让页脚永远停靠在页面底部,而不是根据绝对位置)

<div id="wrap"> 
<div id="main" class="clearfix"></div> 
</div> 
<div id="footer"> </div>
CSS:
* { margin:0; padding:0; } 
html, body, #wrap { height: 100%; } 
body > #wrap {height: auto; min-height: 100%;} 
#main { padding-bottom: 150px; } 
#footer { 
position: relative; 
margin-top: -150px; 
height: 150px; 
clear:both;} 
.clearfix:after {content: "."; 
display: block; 
height: 0; 
clear: both; 
visibility: hidden;} 
.clearfix {display: inline-block;} 
* html .clearfix { height: 1%;} 
.clearfix {display: block;}

17、iframe元素內嵌頁面如何去掉继承的html及body背景色/背景图片

iframe元素的功能是在一个文档里内嵌一个文档,创建一个浮动的帧。内嵌文档时一个完整的页面,有HTML,BODY等属性。这样遇到了一个问题,如果样式表中对BODY定义过背景色/背景图片,那么内嵌文档将全部继承过来。所以如何去掉背景色和背景图片:
【1】去掉背景色:filter:Chroma(Color=white);
举例:<iframe width="100%" height="400" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" leftmargin="0" topmargin="0" style="filter:Chroma(Color=white);" ></iframe>
【2】去掉背景图片:
举例:<iframe width="100%" height="400" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" leftmargin="0" topmargin="0" style="filter:Chroma(Color=white);" allowTransparency="true" ></iframe>
注意:内嵌页面同时也要增加BODY属性:
<body bgcolor="transparent" style='background:transparent'>

18、为什么web标准中无法设置IE浏览器滚动条颜色了?

原来样式设置:
<style type="text/css">
body{scrollbar-face-color:#f6f6f6; scrollbar-highlight-color:#fff; scrollbar-shadow-color:#eeeeee; scrollbar-3dlight-color:#eeeeee; scrollbar-arrow-color:#000; scrollbar-track-color:#fff; scrollbar-darkshadow-color:#fff; }
</style>
解决办法是将body换成html。

19、为什么中火狐浏览器下文本无法撑开容器的高度?

标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-height:200px; 这里为了照顾不认识min-height的IE6 可以这样定义:
div { height:auto!important; height:200px; min-height:200px; }

20、如何定义1px左右高度的容器?

IE6下这个问题是因为默认的行高造成的,解决的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-height:1px

21、怎么样才能让层显示在FLASH之上呢?

解决的办法是给FLASH设置透明:
<a href="http://www.chinaz.com/">:</a>
<pre lang="html" line="1">
<param name="wmode" value="transparent" />

22、怎样使一个div层居中于浏览器中?

<style type="text/css">
<!--
div {
position:absolute;
top:50%;
left:50%;
margin:-100px 0 0 -100px;
width:200px;
height:200px;
border:1px solid red;
}
-->
</style>

23、怎样使div背景透明?

首先,需要这两个层都是兄弟关系,其次,这两个层都需要绝对定位。举个例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="colinivy" />
<title> Colinivy's world</title>
<style type="text/css">
body {
font:normal 12px/30px Verdana; }
#test {
position:relative;
width:400px;
height:50px;
}
#inner {
z-index:2;
position:absolute;
top:10px;
left:10px;
width:380px;
height:30px;
color:#003;
font-weight:bold;
text-align:center;
}
#transbox {
z-index:1;
position:absolute;
top:0px;
left:0px;
width:400px;
height:50px;
background:#eef;
border:1px solid #a00;
filter:alpha(opacity=40);
-moz-opacity:0.4;
opacity:0.4;
}
</style>
</head>
<body>
<div id="test">
<div>
<p>这里很多的文字,这里很多的文字,这里很多的文字,这里很多的文字,</p>
</div>
<div id="transbox"></div>
<div id="inner">
BlueIdea,BlueIdea,BlueIdea 
</div>
</div>
</body>
</html>

24、怎样去掉选中时的虚线框?

利用οnfοcus="this.blur();"例如:<a href="#" οnfοcus="this.blur();">测试</a>

25、ie6下png背景显示问题?

针对ie6下png背景显示问题,CSS中可以这样解决:_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=crop, src=’http://www.0351zhuangxiu.com/uploads/images/bj.jpg’);

26、文字与表单对齐方法?

设置表单元素第一字体为Tahoma(Verdana系列也可),并设置vertical-align:middle.建设大家把这个约定写入CSS RESET中,能减小很多麻烦:
body,button,input,select,textarea{font:12px/1.5 tahoma,arial,sans-serif; vertical-align:middle}

27、optgroup标签的用法?

optgroup标签,鲜为人知,它对提升选择表单用户体验很有帮助。就是可以在有很多选项时,对这些选项分组:例子:
<select id="selectId">
<optgroup label="GROUP ONE">
<option value="1">one select</option>
<option value="2">two select</option>
</optgroup>
<optgroup label="GROUP TWO">
<option value="3">three select</option>
<option value="4">four select</option>
</optgroup>
</select>

28、文字与图片垂直居中对齐方法?

为图片与文字的共同父元素所有的后代元素定义*{vertical-align:middle};例如:
<p>我要的坚强<img src="i/image.gif" /></p>
只需定义p*{vertical-align:middle}即可使文字与图片同行垂直居中.

29、文章标题列表中日期居右显示的两种方法?

方法A相对方法B省资源,但比方法B要多写两句代码,使用时请视情况而定:
方法A:
<p>这是文章标题<span>2010-10-10</span></p>
然后定义p和span的样式:
p{ position:relative}
p span{ position:absolute; right:0}
方法B:
<p><span>2010-10-10</span>这是文章标题</p>
然后定义span右浮动:
p span{float:right}

30、ie6下max/min-width/height实现?

ie6下max/min-width/height实现,_width: expression_r(this.width >600 ? “600px” : true);,height同理.

31、空白外边距互相叠加的问题?

一般通过添加透明边框或者1px的内边距避免;
其一,为外围元素定义透明边框.具体到本例,即在样式div中加入border:1px solid transparent;
其二,为外围元素定义内边距填充..具体到本例,即在样式div中加入padding:1px;
例如:<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>空白边距叠加demo@Mr.Think</title>
<style>
body{width:300px; font-family:'微软雅黑'; font-size:1em; text-indent:10px; line-height:1.25}
div{background:#a40000;margin:10px}
div p{background:#eee;margin:15px}
</style>
</head>
<body>
<div><p>空白边距叠加demo@Mr.Think</p></div>
</body>
</html>

32、网页设计中的默认字体

font: 12px/1.5 Tahoma, Helvetica, Arial, sans-serif;
说明:line-height采用1.5, 也就是18px. 这是淘宝视觉规范中定义的行高,对于12px字体,这个行高看起来很舒服。font-family默认采用Tahoma. Tahoma是英文Windows操作系统的默认字体,这个字体比较均衡,显示中英文混排很不错,是经久耐看的一款字体。

33、浏览器兼容——常用的css hack

(1).title{ height:200px;
*height:200px;
_height:200px; }
(2).title{ height:200px;
*height:200px !important;
*height:200px; }
(3).title{ height:200px; }
*html.title{ height:200px;}
*+html.title{ height:200px;}

框架常见面试题

原创 2017年09月09日 10:53:52

  • 147

2 、 结合项目谈谈你对 MVC 的理解
MVC 是 Model—View—Controler 的简称。即模型—视图—控制器。MVC 是一种设
计模式,它强制性的把应用程序的输入、处理和输出分开。
MVC 中的模型、视图、控制器它们分别担负着不同的任务。
视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用
户的输入。视图不进行任何业务逻辑处理。
模型: 模型表示业务数据和业务处理。相当于 JavaBean。一个模型能为多个视图提
供数据。这提高了应用程序的重用性
控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型
去处理请求。
然后根据处理的结果调用相应的视图来显示处理的结果。
MVC 的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,
并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用
户。
如在项目中要对应 MVC 的话:View 对应项目中 Jsp,Controler 对应 Action,Model
对应 service+dao 层的业务逻辑和持久层的操作。
3 、 项目中为什么使用 SSH
1. 使用 Struts 是因为 struts 是基于 MVC 模式的,很好的将应用程序进行了分层,使开发
者更关注于业务逻辑的实现;struts 有着丰富的标签库,能大大提高开发效率。
2. 使用 Hibernate:因为 hibernate 为 Java 应用提供了一个易用的、高效率的对象关系映
射框架(ORM)。hibernate 是个轻量级的持久性框架,功能丰富。
3. 使用 Spring:因为 spring 基于 IoC(Inversion of Control,反向控制)和 AOP 构架多层 j2ee
系统的框架。
4 、 挑选一个你做的功能说明 SSH 框架的应用原理
① 在表示层中,首先通过 JSP 页面实现交互界面,负责传送请求(Request)和接收
响应(Response),然后 Struts 根据配置文件(*-struts.xml)将 ActionServlet 接收到的
Request 委派给相应的 Action 处理。
② 在业务层中,管理服务组件的 Spring IoC容器负责向 Action提供业务模型(Model)
组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等
容器组件以提升系统性能和保证数据的完整性。
③ 在持久层中,则依赖于 Hibernate 的对象化映射和数据库交互,处理 DAO 组件
请求的数据,并返回处理结果。
结合上面的概述;然后可以把我们做的信息发布管理模块用上述的方式实例化描述一遍。
5 、 Struts 工作原理
-----------------------------------按照 Struts 工作原理图地说:
1.客户端发出一个指向 servlet 容器的请求;
2.请求会经过 StrutsPrepareAndExecuteFilter 过滤器;
3.过滤器和请求将访问 struts2 的底层框架结构。在 web 容器启动时,struts2 框架
会自动加载配置文件里相关参数,并转换成相应的类。
如:ConfigurationManager、ActionMapper 和 ObjectFactory。ConfigurationManager 存
有配置文件的一些基本信息,ActionMapper 存有 action 的配置信息。在请求过程中所有
的对象(Action,Results,Interceptors,等)都是通过 ObjectFactory 来创建的。过滤器会
通过询问 ActionMapper 类来查找请求中需要用到的 Action。
4.如果找到需要调用的 Action,过滤器会把请求的处理交给 ActionProxy。ActionProxy
为 Action 的代理对象。ActionProxy 通过 ConfigurationManager 询问框架的配置文件,找
到需要调用的 Action 类。
5.ActionProxy 创建一个 ActionInvocation 的实例。ActionInvocation 在 ActionProxy 层
之下,它表示了 Action 的执行状态,或者说它控制的 Action 的执行步骤。它持有 Action
实例和所有的 Interceptor。
6.ActionInvocation 实例使用命名模式来调用,1. ActionInvocation 初始化时,根据配
置,加载 Action 相关的所有 Interceptor。2. 通过 ActionInvocation.invoke 方法调用 Action
实现时,执行 Interceptor。在调用 Action 的过程前后,涉及到相关拦截器(intercepetor)
的调用。
7. 一旦 Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的
返回结果。
---------------------------------通俗地说:
发送 http 请求
Web 服务器(tomcat/weblogic...)
执行 struts 核心过滤器 StrutsPrepareAndExecuteFilter
加载 struts 配置文件中配置信息,找到对应的 Action 类并实例化
执行各类拦截器和 Action 中对应方法
配置文件中找到返回结果
转发到具体页面或其它操作
6 、 Struts 有什么优缺点
优点:
1. 实现 MVC 模式,结构清晰;
2. 丰富的 struts 的标记库,利用好能大大提高开发效率;
3. 全局结果与声明式异常;
4. 可使用 OGNL 进行参数传递
5. 各个类方便使用的拦截器
缺点:
1. 转到表现层时,需要配置结果页面;页面多了比较繁杂;
2. 对 Servlet 的依赖性过强
3. struts 标签稍微比 el 表达式繁重
7 、 为何使用 Spring
Spring 是一个轻量级的控制反转(IoC)、面向切面(AOP)、面向接口、事务管理、包容
促进其它框架;使系统中用到的其它框架耦合程度大大降低,拓展性强、简单易用好管理。
8 、 spring 在项目中如何充当粘合剂
1、在项目中利用 spring 的 IOC(控制反转或依赖注入),明确地定义组件接口(如 UserDAO),
开发者可以独立开发各个组件, 然后根据组件间的依赖关系组装(UserAction 依赖于
UserService,UserService 依赖于 UserDAO)运行,很好的把 Struts(Action)和 hibernate(DAO
的实现)结合起来;
2、spring 的事务管理把 hibernate 对数据库的操作进行了事务配置
9 、 描述在系统中如何使用了 Spring 的事务控制
Spring 事务包括编程式事务和声明式事务。在系统中使用了声明式的事务管理是用
Spring 的 AOP 来实现的;配置了只读事务和回滚事务(传播行为为 REQUIRED)当出现
错误后进行回滚操作。在项目中通过 aop 切入事务到 serivce 层,这样做能使一次业务
逻辑操作如果包括几个数据库操作都控制在一个事务中。
10 、 Hibernate 工作原理及为什么要用
原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建 SessionFactory 3.打开
Session 4.创建事务 Transation 5.持久化操作 6.提交事务 7.关闭 Session 8.关闭
SesstionFactory
为什么要用: 1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐
的重复性代码。 2. Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM
实现。他很大程度的简化 DAO 层的编码工作 3. hibernate 使用 Java 反射机制,而不是
字节码增强程序来实现透明性。 4. hibernate 的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
11 、 Hibernate 在系统中使用的优化策略
Hibernate 对数据的缓存包括两个级:一级缓存,在 Session 的级别上进行,主要是对象
缓存,以其 id 为键保存对象,在 Session 的生命期间存在;二级缓存, 在 SessionFactory
的级别上进行,有对象缓存和查询缓存,查询缓存以查询条件为键保存查询结果,在
SessionFactory 的生命期间存 在。默认地,Hibernate 只启用一级缓存。
关于这个问题答系统使用了 Hibernate 的二级缓存就好。
12 、 列举你在开发中常用的 Struts 标签
property、iterator、if、date、form、a、url、textfiled、textarea、select、radio、checkboxlist、
hidden、param
13 、 Jquery 异步获取数据的方式有几种?有何区别?
1、load 载入远程 HTML 文件代码并插入至 DOM 中
2、get
3、post
4、ajax
5、getJSON
6、getScript 通过 GET 方式请求载入并执行一个 JavaScript 文件
14 、 述 简述 UML 并说明你使用 Rose 常 于什么情况,画什么图?
Unified Modeling Language (UML) 统一建模语言;用于在软件开发各个阶段中用图形的
方式描述流程和功能需求;IBM Rational Rose是uml建模工具之一比较多的在需求阶段,
常用于画用例图、类图、时序图。
15 、 请简述导入导出的工具类;并说明你导出过的最大数据量
POI(合并单元格对象和背景色的应用)
16 、 统计图的实现方式
Fusioncharts 图表采用 SVG(可缩放矢量图形)实现,无需 Flash;跨终端
17、 易告知信息推送方式;如何实现?
在后台填写推送信息和推送名单后,系统将自动推送;后台 EE 开发人员只实现定时的
调用由客户端开发人员写的接口推送信息。
18 、 简述调查问卷的制作
不在你填写的开发功能内的;只需要描述下功能。可以制定调查题目和提供单选和多选
两种类型的选项;并可对调查结果进行统计。
19 、 系统的并发量如何?如何解决大并发量的请求?
系统并发量不大;但有在应用服务器中间件 Weblogic 上做负载均衡的配置。
20 、 项目中遇到问题如何解决?
自行解决——网络搜索——团队讨论解决
21 、 简述你在项目中的开发流程
项目课中的设计和开发都是比较贴近实际开发的,做了的话按照当时的开发情况描述。
3 拓展
1、 使用一种排序算法排序一组数字
冒泡、直接插入、选择
2、 编写一个可以体现多线程的例子
3、 编写一个 Singleton 类

前端开发工程师面试题2相关推荐

  1. 深圳乐创互联科技有限公司 - (web前端开发工程师机试题)

    web前端开发工程师机试题 面试要求可查看上方链接 效果图 代码 css: * {margin: 0;padding: 0;list-style: none;text-decoration: none ...

  2. 前端开发工程师面试题集锦(一)

    今天主要分享一些前端开发高频面试题,也会提供一些答案参考,后续会慢慢更新更多的 1.行内元素和块级元素有哪些?区别是什么? 答: 行内元素:与其他行内元素并排,不能设置宽高,例a img span 块 ...

  3. 前端开发工程师——面试题总结

    一.CSS部分 1.W3C标准盒模型 W3C标准盒模型 2.垂直水平居中 多种css布局实现 3.flex布局 Flex 布局教程:语法篇 Flex 布局教程:实例篇 4.position的几种属性值 ...

  4. WEB前端开发工程师面试题

    1.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义? Doctype声明位于文档中的最前面的位置,处于标签之前.此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规 ...

  5. 前端开发工程师面试题之综合篇

    温馨提示:以下系列的面试题是通过整合网上各位大牛的文章而成,站在巨人的肩膀上,能够让我们更进一步. 1.页面从输入URL到页面加载显示完成,这个过程中都发生了什么? 输入域名地址 发送域名地址至DNS ...

  6. 金山办公2020校招前端开发工程师笔试题

    每天看看面试题,巩固知识,冲鸭 一 .写出如下代码的执行结果 考察了 promise,以及任务处理顺序.promise值得单写一篇文章,这里不过多赘述. new Promise((resolve) = ...

  7. 前端面试题:金山办公2020校招前端开发工程师笔试题(一)

    第一题: []==[]输出的结果为false: 首先,'=='运算符比较的是两个操作数是否相等,(这里不是指严格相等),两个操作数都是空数组,都是Object对象.但是对象的比较并非是值得比较,即使这 ...

  8. 广州电信高级前端开发工程师笔试题及答案(国企面试题大全)

    js部分 1.问:localStorage,sessionStorage和cookie的区别? 概述:localStorage,sessionStorage是HTML5 Web Storage API ...

  9. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(4)

    推荐文章: VUE之VUEX常见面试题大全汇总--史上最全[vuex面试题] 前端面试题之HTML+CSS(持续更新)_勤动手多动脑少说多做厚积薄发-CSDN博客1.行内元素和块级元素?img算什么? ...

最新文章

  1. Reveal真机查看任意APP
  2. C及C++中typedef的简单使用指南
  3. MT7628/MT7688 修改串口2作为调试串口 所踩的坑
  4. 3、JMSN~Maven安装
  5. Cocos2D-x(3)——动作类备忘
  6. rhel6.5网卡初始化错误解决
  7. uniapptabbar的高度是多少_【报Bug】uniapp页面底部空出了tabBar的高度
  8. python内置数据类型与特点_初学Python之内置数据类型一
  9. 大话IT职场之搞技术是青春饭吗?
  10. Java SE 随机数生成器 Random
  11. matlab 数字波束合成,dbf数字波束合成
  12. 嵌入式系统工程师的职位要求
  13. Qt启动进程ping网址
  14. 计算并返回 x 的平方根,其中 x 是非负整数。
  15. 除了小程序游戏之外,同样备受外界关注的还有小程序电商
  16. powerquery分组_Power Query系列 - 排序Ranking
  17. java中的反射机制是什么
  18. 深度解密Go语言之关于 interface 的 10 个问题
  19. python之bt种子,dht网络共享热门资源
  20. 悼念一位腾讯游戏大佬。。

热门文章

  1. 曾经写过得太监小说1《尚志》
  2. 汽车节气门为何容易脏?
  3. 如何用手机调整PDF文件?几个步骤学习一下
  4. 每日新闻:中国移动OPhone手机下周全面亮相(8月28日)
  5. 神歌单:听这些程序员敲代码效率飞起来
  6. 4.1【微信小程序全栈开发课程】个人中心(一)--页面样式、用户信息展示
  7. dell电脑装linux raid无法安装系统,系统定制安装遇到RAID卡无法安装的解决方案
  8. 三点弯曲的有限元仿真
  9. 云计算安全漏洞及其对策(一)
  10. 2020高压电工考试及高压电工模拟考试题