前端面试(一面面试题)

前端面试(一面面试题)

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

calc() 函数主要是用于动态计算长度值。calc() 函数支持"+","-","*","/"运算。
@support 主要适用于检测浏览器是否支持CSS的某个属性,相当于条件判断,如果浏览器兼容这套样式则最好,如果不支持则你可以通过判断为浏览器提供另一套兼容样式做候选。
@media 查询,你可以针对不同的媒体类型定义不同的样式

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

水平居中

  1. 行内元素:text-align:center;
  2. 块级元素:margin:0 auto;
  3. position:absolute;left:50%;transform:translateX;
  4. display:flex;justify-content:center;

垂直居中

  1. 设置line-height 等于height
  2. position:absolute;top:50%;transform:translateY(-50%);
  3. display:flex;align-items:center;
  4. display:table;display:table-cell;vertical-align:middle;

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

rem
rem是全部的长度都相等于根元素,也就是 < html > 元素。通常做法就是给HTML元素设置一个字体的大小那其他元素的长度单位就是rem。
em
em 1.子元素字体大小的em是相对于父元素字体大小。2.元素的height,width,padding,margin使用em的话就是相对于该元素的font-size
vw & vh
vw vh的全称是Viewport Width和Viewport Height,视窗的宽度和高度,相当于屏幕的宽度和高度的1%,不过处理宽度的时候%单位更适合,处理高度的话使用vh
px
px(Pixel),相对长度单位像素px是相对于显示器屏幕的分辨率而言的,一般的电脑分辨率有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的默认属性是content-box

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

如何使用css画一个三角形?

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

<style>
.a{
   width: 0;
   height: 0;
   border-width: 100px;
   border-style: solid;
   border-color: transparent transparent #0099CC transparent;/*直接通过控制border的背景透明度来显示不同位置的三角*/
   /*transform: rotate(90deg); 顺时针旋转90°*/
 }
style>
<div class="a">div>

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

  • ::after /
    / 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 的高度时,浮动子元素也参与计算
  • 文字层不会被浮动层覆盖,环绕于周围

说一下< label >标签的用法

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

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

//这题考查原生的js操作dom,属于非常简单的基础题,但长时间使用mvvm框架,可能会忘记
<script>
    var b=document.getElementById("a").parentNode.children;
    console.log(b)
</script>

页面渲染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。)

说一下闭包?

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

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

export和export default的区别?

使用上的不同

export default  xxx
import xxx from './'

export xxx
import {xxx} from './'

数组去重

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

说一下事件代理?

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

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当前被点击的元素

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。
  • 请求是正确的,但是结果正在处理中,这时候客户端可以通过轮询等机制继续请求。

3xx(已重定向)

  • 300:请求成功,但结果有多种选择。
  • 301:请求成功,但是资源被永久转移。
  • 303:使用 GET 来访问新的地址来获取资源。
  • 304:请求的资源并没有被修改过

4xx(请求错误)

  • 400:请求出现错误,比如请求头不对等。
  • 401:没有提供认证信息。请求的时候没有带上 Token 等。
  • 402:为以后需要所保留的状态码。
  • 403:请求的资源不允许访问。就是说没有权限。
  • 404:请求的内容不存在。

5xx(服务器错误)

  • 500:服务器错误。
  • 501:请求还没有被实现。

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

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

原型链继承的缺点

  • 字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数。
    借用构造函数(类式继承)

组合式继承

  • 组合式继承是比较常用的一种继承方法,其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有它自己的属性。
本文转载自:【灰蓝雨墨】的文章https://zhuanlan.zhihu.com/p/84212558 若有侵权请与我联系。

你可能感兴趣的:(前端)