[关闭]
@wangjialin 2017-08-10T21:39:25.000000Z 字数 6239 阅读 744

面试问题整理(版本二)

面试


遇到的面试题目

  1. 服务端渲染跟客户端渲染的区别
  2. 用户注册界面,输入手机号码之后要做什么业务?
  3. git团队开发,说一说平时你怎么使用git进行开发的
  4. 前端优化有哪些
  5. 你认为的前端页面有什么风险?如何减小这些风险
  6. 项目开发有碰上什么问题,如何解决
  7. 说一说你做的vue项目

HTML+CSS: (平稳退化 渐进增强 优雅降级)

1:介绍一下你对浏览器内核的理解?常见的浏览器内核:

2:如何处理HTML5新标签的浏览器兼容问题?

支持HTML5新标签(Firefox、Google Chrome、Opera、Safari 4+、Internet Explorer 9+都已支持HTML5):

3:谈谈语义化

4:垂直居中(是否定高 文字/块 多行/单行),水平居中

水平居中:

垂直居中:

5:自适应(左右自适应, 上下自适应)
双飞翼布局、圣杯布局

6:CSS选择器优先级

  • /权重为1/
    div{
    }
  • /权重为10/
    .class1{
    }
  • /权重为100/
    #id1{
    }
  • /权重为100+1=101/
    #id1 div{
    }
  • /权重为10+1=11/
    .class1 div{
    }
  • /权重为10+10+1=21/
    .class1 .class2 div{
    }
  • 如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现

7:position float

  • 普通流(Normal Flow)
    在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在这个过程中,行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行, 除非另外指定,否则所有元素默认都是普通流定位,也可以说,普通流中元素的位置由该元素在 HTML 文档中的位置决定。

  • 浮动 (Floats)
    在浮动布局中,元素首先按照普通流的位置出现,然后根据浮动的方向尽可能的向左边或右边偏移,其效果与印刷排版中的文本环绕相似。

  • 绝对定位 (Absolute Positioning)
    在绝对定位布局中,元素会整体脱离普通流,因此绝对定位元素不会对其兄弟元素造成影响,而元素具体的位置由绝对定位的坐标决定。

8:经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

  • 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一(大型项目不推荐),或者reset标签。

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

  • 浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}
    这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——display:inline;将其转化为行内属性。(这个符号只有ie6会识别)
    渐进识别的方式,从总体中逐渐排除局部。
    首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。
    接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。

  1. css
  2. .bb{
  3. background-color:#f1ee18;/*所有识别*/
  4. .background-color:#00deff\9; /*IE6、7、8识别*/
  5. +background-color:#a200ff;/*IE6、7识别*/
  6. _background-color:#1e0bd1;/*IE6识别*/
  7. }
  • IE下,可以使用获取常规属性的方法来获取自定义属性,
    也可以使用getAttribute()获取自定义属性;
    Firefox下,只能使用getAttribute()获取自定义属性。
    解决方法:统一通过getAttribute()获取自定义属性。
  • IE下,even对象有x,y属性,但是没有pageX,pageY属性;
    Firefox下,event对象有pageX,pageY属性,但是没有x,y属性。
    解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
  • Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
    可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。
  • 超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
    L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}

10:对BFC规范(块级格式化上下文:block formatting context)的理解?

  • 从样式上看,具有 BFC 的元素与普通的容器没有什么区别,但是从功能上,具有 BFC 的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器没有的一些特性,例如可以包含浮动元素,上文中的第二类清除浮动的方法(如 overflow 方法)就是触发了浮动元素的父元素的 BFC ,使到它可以包含浮动元素,从而防止出现高度塌陷的问题。

  • 简单来说,BFC 就是一种属性,这种属性会影响着元素的定位以及与其兄弟元素之间的相互作用。

12:移动端的布局(媒体查询)
13:使用 CSS 预处理器吗?
less(变量。可传参函数、命名空间、嵌套、条件语句、操作)
14:什么是响应式设计?响应式设计的基本原理是什么?

JS

1:JavaScript作用链域 变量提升(一般出现在笔试),JavaScript有几种类型的值?,你能画一下他们的内存图吗?

  • 全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。
    当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,
    直至全局函数,这种组织形式就是作用域链。
  • 栈:原始数据类型(Undefined,Null,Boolean,Number、String)
  • 堆:引用数据类型(对象、数组和函数)
  • 两种类型的区别是:存储位置不同;
    原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;
    引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其
    在栈中的地址,取得地址后从堆中获得实体

2:this

  • this总是指向函数的直接调用者(而非间接调用者);
  • 如果有new关键字,this指向new出来的那个对象;
  • 在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window;

3:call apply bind(手写bind)

4:js实现继承

  • 1、构造继承(call apply
  • 2、原型继承 new
  • 3、实例继承
  • 4、拷贝继承
  • 原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。

5:js创建对象方式
javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。

1、对象字面量的方式

person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};

2、用function来模拟无参的构造函数

function Person(){}
var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
person.name="Mark";
person.age="25";
person.work=function(){
alert(person.name+" hello...");
}
person.work();

3、用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)

function Pet(name,age,hobby){
   this.name=name;//this作用域:当前对象
   this.age=age;
   this.hobby=hobby;
   this.eat=function(){
      alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
   }
}
var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
maidou.eat();//调用eat方法

4、用工厂方式来创建(内置对象)

 var wcDog =new Object();
 wcDog.name="旺财";
 wcDog.age=3;
 wcDog.work=function(){
   alert("我是"+wcDog.name+",汪汪汪......");
 }
 wcDog.work();

5、用原型方式来创建

function Dog(){

 }
 Dog.prototype.name="旺财";
 Dog.prototype.eat=function(){
 alert(this.name+"是个吃货");
 }
 var wangcai =new Dog();
 wangcai.eat();

5、用混合方式来创建

function Car(name,price){
  this.name=name;
  this.price=price; 
}
 Car.prototype.sell=function(){
   alert("我是"+this.name+",我现在卖"+this.price+"万元");
  }
var camry =new Car("凯美瑞",27);
camry.sell(); 

6:闭包
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。

闭包的特性:

1.函数内再嵌套函数
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收

7:js延迟加载的方式有哪些?
defer和async、动态创建DOM方式(用得最多)、按需异步载入js
8:Ajax 是什么? 如何创建一个Ajax?
ajax的全称:Asynchronous Javascript And XML。异步传输+js+xml。
所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。

(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
(3)设置响应HTTP请求状态变化的函数
(4)发送HTTP请求
(5)获取异步调用返回的数据
(6)使用JavaScript和DOM实现局部刷新
9:如何解决跨域问题?
jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面
10:那些操作会造成内存泄漏?
11:JQuery的源码看过吗?能不能简单概况一下它的实现原理?
12:jQuery 的 slideUp动画 ,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?

13:移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击操作。)
14:知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能讲出他们各自的优点和缺点么?
15:事件代理 三个阶段
16:什么是webkit? 知道怎么用浏览器的各种工具来调试和debug代码么?

其它

1:设计模式
2:http状态码有那些?分别代表是什么意思?如何基于http协议建立一个长连接?
3:一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)
4:部分地区用户反应网站很卡,请问有哪些可能性的原因,以及解决方法?
5:除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?
6:平时如何管理你的项目?
7:是否了解Web注入攻击,说下原理,最常见的两种攻击(XSS 和 CSRF)了解到什么程度?
8:最近在学什么

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注