我可不会告诉你我就是依靠这些面试题拿到的阿里和腾讯的offer

 

请列举7种以上常用的HTML标签,说明其语义。

1)div标签,是一个块元素,就像一个大盒子,可以放各式各样的东西;

2)p标签,也是一个块元素,它通常用来放一段话的….;

3)h1,h2,h3,…h6标签,也是块元素,常用来放标题;

4)span标签,是一个行内元素,常用来处理一段话中的某几个字符;

5)img标签,用来加载图片的标签;

6)table标签,用来创建表格的标签;

7)br标签,用来换行的标签;

8)hr标签,用来表示分行线的标签;

9)a 一个点击跳转的标签;

10)ul 一个用来做列表的标签。

 

请说明下面各种情况的执行结果,并注明产生对应结果的理由。

function doSomething() {

alert(this);

}

① element.onclick = doSomething,点击element元素后。

② element.onclick = function() {doSomething()}, 点击element元素后。

③ 直接执行doSomething()。**

1)弹出element object,通过函数赋值方式,this直接指向element对象;

2)弹出window object,this是写在doSomething这个函数里面的,而这种方式的事件绑定写法并没有将element对象传递给this,而在默认情况下this 指向window;

3)弹出window object,没有绑定对象的情况下this默认指向window。

请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100]。

如果你有多种解法,请阐述各种解法的思路及优缺点。(仅需用代码实现一种解法,其它解法用文字阐述思路即可)

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请根据下面的HTML和CSS代码,画出布局示意图

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

阅读以下JavaScript代码:

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请阐述 a) 代码的功能; b) 代码的优点和缺点; c) listener.apply(el) 在此处的作用; d) 如果有可改进之处,请给出改进后的代码,并说明理由。

a) 功能:事件注册

b) 优点:跨浏览器,特性探测,性能优化。缺点:document.all

c) 作用:使得IE中listener的this 为 el,与其它浏览器一致

d) 改进:document.all改成window.attachEvent; useCapture的默认

请编写一个JavaScript 函数toRGB,它的作用是转换CSS中常用的颜色编码。 要求:

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

尝试实现注释部分的Javascript代码,可在其他任何地方添加更多代码(如不能实现,说明一下不能实现的原因):

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请编写一个JavaScript函数,它的作用是校验输入的字符串是否是一个有效的电子邮件地址。要求: a) 使用正则表达式。 b) 如果有效返回true ,反之为false。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请分别列出HTML、JavaScript、CSS、Java、PHP、Python的注释代码形式。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请编写一段JavaScript脚本生成下面这段DOM结构。要求:使用标准的DOM方法或属性。

 

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请用CSS定义p标签,要求实现以下效果: 字体颜色在IE6下为黑色(#000000);IE7下为红色(#ff0000);而其他浏览器下为绿色(#00ff00)。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请简化以下的CSS代码,并给出简单的说明。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

简化

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请编写一个通用的事件注册函数(请看下面的代码)。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请给JavaScript的String 原生对象添加一个名为trim 的原型方法,用于截取空白字符。要求

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

根据下图,编写HTML结构。要求:符合xHTML 1.0规范

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请指出下面代码中不符合xHTML 1.0规范的地方,说明理由,并写出改善后的代码:

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

说明:

1)h1元素包含p元素,理由:h1元素不能包含其他块级元素;

2)dt元素包含p元素和div元素,理由:dt元素内不能包含其他块级元素;

3)p元素包含div元素,理由:p元素内不能包含其他块级元素;

4)i元素,理由:i表样式斜体,不符合语义化;

5)b元素,理由:b表样式粗体,不符合语义化。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

这篇文章分享之后我还是要推荐下我自己的前端学习群:659247717 ,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新前端资料和零基础入门教程,欢迎初学和进阶中的小伙伴

请根据下面的描述,用JSON语法编写一个对象: “小明今年22岁,来自杭州。兴趣是看电影和旅游。他有两个姐姐,一个叫小芬,今年25岁,职业是护士。还有一个叫小芳,今年23岁,是一名小学老师。”

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

说明:

1)标签小写(包括onclick);

2)属性名要是用引号(单双引号不限);

3)必须闭合标签。

根据下图,编写HTML结构。要求:遵循xHTML 1.0规范且符合Web语义。

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

阿里巴巴的前端面试题到底有多可怕?看了这些就全明白了!

                                                                         不简单,你竟然都看到这里了,在这之前,先问问自己前面的掌握了吗?

                                                                          如果没有,那还不快回去再看!!!  

 

 css

calc, support, media各自的含义及用法?

@support主要是用于检测浏览器是否支持CSS的某个属性,其实就是条件判断,如果支持某个属性,你可以写一套样式,如果不支持某个属性,你也可以提供另外一套样式作为替补。

calc() 函数用于动态计算长度值。 calc()函数支持 "+", "-", "*", "/" 运算;

@media 查询,你可以针对不同的媒体类型定义不同的样式。

css水平、垂直居中的写法,请至少写出4种?

这题考查的是css的基础知识是否全面,所以平时一定要注意多积累

水平居中

  • 行内元素: text-align: center
  • 块级元素: margin: 0 auto
  • position:absolute +left:50%+ transform:translateX(-50%)
  • display:flex + justify-content: center

垂直居中

  • 设置line-height 等于height
  • position:absolute +top:50%+ transform:translateY(-50%)
  • display:flex + align-items: center
  • display:table+display:table-cell + vertical-align: middle;

1rem、1em、1vh、1px各自代表的含义?

rem

rem是全部的长度都相对于根元素<html>元素。通常做法是给html元素设置一个字体大小,然后其他元素的长度单位就为rem。

em

  • 子元素字体大小的em是相对于父元素字体大小
  • 元素的width/height/padding/margin用em的话是相对于该元素的font-size

vw/vh

全称是 Viewport Width 和 Viewport Height,视窗的宽度和高度,相当于 屏幕宽度和高度的 1%,不过,处理宽度的时候%单位更合适,处理高度的 话 vh 单位更好。

px

px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。

一般电脑的分辨率有{1920*1024}等不同的分辨率

1920*1024 前者是屏幕宽度总共有1920个像素,后者则是高度为1024个像素

画一条0.5px的直线?

考查的是css3的transform

height: 1px;
transform: scale(0.5);

说一下盒模型?

盒模型是css中重要的基础知识,也是必考的基础知识

盒模型的组成,由里向外content,padding,border,margin.

在IE盒子模型中,width表示content+padding+border这三个部分的宽度

在标准的盒子模型中,width指content部分的宽度

box-sizing的使用

  box-sizing: content-box 是W3C盒子模型
  box-sizing: border-box 是IE盒子模型

box-sizing的默认属性是content-box

画一个三角形?

这属于简单的css考查,平时在用组件库的同时,也别忘了原生的css

 .a{
            width: 0;
            height: 0;
            border-width: 100px;
            border-style: solid;
            border-color: transparent #0099CC transparent transparent;
            transform: rotate(90deg); /*顺时针旋转90°*/
 }

<div class="a"></div>

清除浮动的几种方式,及原理?

清除浮动简单,但这题要引出的是BFC,BFC也是必考的基础知识点

  • ::after / <br> / clear: both
  • 创建父级 BFC(overflow:hidden)
  • 父级设置高度

BFC (块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。

触发条件:

  • 根元素
  • position: absolute/fixed
  • display: inline-block / table
  • float 元素
  • ovevflow !== visible

规则:

  • 属于同一个 BFC 的两个相邻 Box 垂直排列
  • 属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠
  • BFC 的区域不会与 float 的元素区域重叠
  • 计算 BFC 的高度时,浮动子元素也参与计算
  • 文字层不会被浮动层覆盖,环绕于周围

html

说一下<label>标签的用法

label标签主要是方便鼠标点击使用,扩大可点击的范围,增强用户操作体验

遍历A节点的父节点下的所有子节点

这题考查原生的js操作dom,属于非常简单的基础题,但长时间使用mvvm框架,可能会忘记

<script>
    var b=document.getElementById("a").parentNode.children;
    console.log(b)
</script>

js

用js递归的方式写1到100求和?

递归我们经常用到,vue在实现双向绑定进行数据检验的时候用的也是递归,但要我们面试的时候手写一个递归,如果对递归的概念理解不透彻,可能还是会有一些问题。

function add(num1,num2){
	var num = num1+num2;
        if(num2+1>100){
	 return num;
	}else{
	  return add(num,num2+1)
        }
 }
var sum =add(1,2);                 

页面渲染html的过程?

不需要死记硬背,理解整个过程即可

浏览器渲染页面的一般过程:

1.浏览器解析html源码,然后创建一个 DOM树。并行请求 css/image/js在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点。DOM树的根节点就是 documentElement,对应的是html标签。

2.浏览器解析CSS代码,计算出最终的样式数据。构建CSSOM树。对CSS代码中非法的语法它会直接忽略掉。解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置 < 用户设置 < 外链样式 < 内联样式 < html中的style。

3.DOM Tree + CSSOM --> 渲染树(rendering tree)。渲染树和DOM树有点像,但是是有区别的。

DOM树完全和html标签一一对应,但是渲染树会忽略掉不需要渲染的元素,比如head、display:none的元素等。而且一大段文本中的每一个行在渲染树中都是独立的一个节点。渲染树中的每一个节点都存储有对应的css属性。

4.一旦渲染树创建好了,浏览器就可以根据渲染树直接把页面绘制到屏幕上。

以上四个步骤并不是一次性顺序完成的。如果DOM或者CSSOM被修改,以上过程会被重复执行。实际上,CSS和JavaScript往往会多次修改DOM或者CSSOM。

说一下CORS?

CORS是一种新标准,支持同源通信,也支持跨域通信。fetch是实现CORS通信的

如何中断ajax请求?

一种是设置超时时间让ajax自动断开,另一种是手动停止ajax请求,其核心是调用XML对象的abort方法,ajax.abort()

说一下事件代理?

事件委托是指将事件绑定到目标元素的父元素上,利用冒泡机制触发该事件

ulEl.addEventListener('click', function(e){
    var target = event.target || event.srcElement;
    if(!!target && target.nodeName.toUpperCase() === "LI"){
        console.log(target.innerHTML);
    }
}, false);

target、currentTarget的区别?

currentTarget当前所绑定事件的元素

target当前被点击的元素

说一下宏任务和微任务?

  1. 宏任务:当前调用栈中执行的任务称为宏任务。(主代码快,定时器等等)。
  2. 微任务: 当前(此次事件循环中)宏任务执行完,在下一个宏任务开始之前需要执行的任务为微任务。(可以理解为回调事件,promise.then,proness.nextTick等等)。
  3. 宏任务中的事件放在callback queue中,由事件触发线程维护;微任务的事件放在微任务队列中,由js引擎线程维护。

说一下继承的几种方式及优缺点?

说比较经典的几种继承方式并比较优缺点就可以了

  1. 借用构造函数继承,使用call或apply方法,将父对象的构造函数绑定在子对象上
  2. 原型继承,将子对象的prototype指向父对象的一个实例
  3. 组合继承

原型链继承的缺点

  • 字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数。

借用构造函数(类式继承)

  • 借用构造函数虽然解决了刚才两种问题,但没有原型,则复用无从谈起。

组合式继承

  • 组合式继承是比较常用的一种继承方法,其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有它自己的属性。

说一下闭包?

闭包的实质是因为函数嵌套而形成的作用域链

闭包的定义即:函数 A 内部有一个函数 B,函数 B 可以访问到函数 A 中的变量,那么函数 B 就是闭包

export和export default的区别?

使用上的不同

export default  xxx
import xxx from './'

export xxx
import {xxx} from './'

说一下自己常用的es6的功能?

此题是一道开放题,可以自由回答。但要注意像let这种简单的用法就别说了,说一些经常用到并有一定高度的新功能

像module、class、promise等,尽量讲的详细一点。

什么是会话cookie,什么是持久cookie?

cookie是服务器返回的,指定了expire time(有效期)的是持久cookie,没有指定的是会话cookie

数组去重?

此题看着简单,但要想面试官给你高分还是有难度的。至少也要写出几种方法

js

var arr=['12','32','89','12','12','78','12','32'];
    // 最简单数组去重法
    function unique1(array){
        var n = []; //一个新的临时数组
        for(var i = 0; i < array.length; i++){ //遍历当前数组
            if (n.indexOf(array[i]) == -1)
                n.push(array[i]);
        }
        return n;
    }
    arr=unique1(arr);
    // 速度最快, 占空间最多(空间换时间)
    function unique2(array){
        var n = {}, r = [], type;
        for (var i = 0; i < array.length; i++) {
            type = typeof array[i];
            if (!n[array[i]]) {
                n[array[i]] = [type];
                r.push(array[i]);
            } else if (n[array[i]].indexOf(type) < 0) {
                n[array[i]].push(type);
                r.push(array[i]);
            }
        }
        return r;
    }
    //数组下标判断法
    function unique3(array){
        var n = [array[0]]; //结果数组
        for(var i = 1; i < array.length; i++) { //从第二项开始遍历
            if (array.indexOf(array[i]) == i) 
                n.push(array[i]);
        }
        return n;
    }

es6

es6方法数组去重
arr=[...new Set(arr)];
es6方法数组去重,第二种方法
function dedupe(array) {
  return Array.from(new Set(array));       //Array.from()能把set结构转换为数组
}

get、post的区别

此题比较简单,但一定要回答的全面

1.get传参方式是通过地址栏URL传递,是可以直接看到get传递的参数,post传参方式参数URL不可见,get把请求的数据在URL后通过?连接,通过&进行参数分割。psot将参数存放在HTTP的包体内

2.get传递数据是通过URL进行传递,对传递的数据长度是受到URL大小的限制,URL最大长度是2048个字符。post没有长度限制

3.get后退不会有影响,post后退会重新进行提交

4.get请求可以被缓存,post不可以被缓存

5.get请求只URL编码,post支持多种编码方式

6.get请求的记录会留在历史记录中,post请求不会留在历史记录

7.get只支持ASCII字符,post没有字符类型限制

你所知道的http的响应码及含义?

此题有过开发经验的都知道几个,但还是那句话,一定要回答的详细且全面。

1xx(临时响应)

100: 请求者应当继续提出请求。

101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备进行切换。

2xx(成功)

200:正确的请求返回正确的结果

201:表示资源被正确的创建。比如说,我们 POST 用户名、密码正确创建了一个用户就可以返回 201。

202:请求是正确的,但是结果正在处理中,这时候客户端可以通过轮询等机制继续请求。

3xx(已重定向)

300:请求成功,但结果有多种选择。

301:请求成功,但是资源被永久转移。

303:使用 GET 来访问新的地址来获取资源。

304:请求的资源并没有被修改过

4xx(请求错误)

400:请求出现错误,比如请求头不对等。

401:没有提供认证信息。请求的时候没有带上 Token 等。

402:为以后需要所保留的状态码。

403:请求的资源不允许访问。就是说没有权限。

404:请求的内容不存在。

5xx(服务器错误)

500:服务器错误。

501:请求还没有被实现。

                                                                         哇塞!你既然都看完了,那么你离你心目中的大厂更近了一步

 

 

最后

博主呕心沥血整理的前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!还有!记得三连!

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值