陌陌前端实习面经

1,567 阅读6分钟

这篇是网上找的:原文地址:blog.csdn.net/weixin_3388…

笔试

来到陌陌的时候首先会先发一套前端的笔试题,很简单。

1. 描述一下标准模式和怪异模式的区别;

DOCTYPE声明:告知浏览器如何解析和渲染文档
DTD:文档类型定义

标准模式:浏览器按W3C标准解析执行代码。
怪异模式:兼容老页面。使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行的方式不一样,所以我们称之为怪异模式。

标准模式与怪异模式的区别
1) 盒模型: IE下标准模式为标准w3c盒模型【content+padding+border+margin】,怪异模式为IE盒模型【content+margin:padding与border包含在content宽高中】
2) 行内元素的垂直对齐:基于 Gecko 的浏览器【Mozilla Firefox、HotBrowser、Mozilla Suite、Camino】标准模式对齐至基线,怪异模式对齐至底部
3) 怪异模式中,IE6/7/8都不认识!important声明
4) 设置行内元素的高宽: 在Standards模式下,给等行内元素设置wdith和height都不会生效,而在quirks模式下,则会生效。
5) 使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下却会失效。

2. 实现一个左边div宽度固定,右边div宽度自适应的布局;

<div class= "container">
    <div class="left"></div>
    <div class="right"></div>
</div>

<style>
/*方法一: BFC(块级格式化上下文)*/
    .container{
        width:1000px;height:400px;border: 1px solid red;
    }
    .left{
        width:200px;height:100%;background: gray;
        float: left;
    }
    .right{
        overflow:hidden;  /* 触发bfc */
        background: green;
    }

/*方法二: flex布局 */
    .container{
        width:1000px;height:400px;border:1px solid red;
        display:flex;         /*flex布局*/
    }
    .left{
        width:200px; height:100%;background:gray;
        flex:none;
    }
    .right{
        height:100%;background:green;
        flex:1;        /*flex布局*/
    }

/* 方法三: table布局 */
    .container{
        width:1000px;height:400px;border:1px solid red;
        display:table;         /*table布局*/
    }
    .left{
        width:200px; height:100%;background:gray;
        display:table-cell;
    }
    .right{
        height:100%;background:green;
        display: table-cell;
    }

/*方法四: css计算宽度calc*/
    .container{
        width:1000px;height:400px;border:1px solid red;
    }
    .left{
        width:200px;height:100%;background:gray;
        float:left;
    }
    .right{
        height:100%;background:green;
        float:right;
        width:calc(100% - 200px);
    }
</style>

3. 在Array的原型链上实现array.prototype.inArray的方法;

4. 介绍一下各属性是什么含义;

<meta name=“viewport” content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

width=device-width 设置视口宽度等于设备的宽度
initial-scale=1.0 初始缩放比例, 1不缩放
maximum-scale:允许用户缩放到的最大比例
minimum-scale:允许用户缩放到的最小比例
user-scalable:用户是否可以手动缩放

5. display: none 和 visibility: hidden的区别;

1,display:none会让元素从渲染树中消失,渲染的时候不占据任何空间;visibility:hidden不会让元素从渲染树中消失,渲染的时候仍然占据空间,只是内容不可见。
2,display:none是非继承属性,子孙节点消失是由于元素从渲染树中消失造成,通过修改子孙节点的属性无法显示;visibility:hidden是继承属性,子孙节点消失是由于继承了hidden,通过设置visibility:visible,可以让子孙节点显示。
3,读屏器不会读取display:none的元素内容,而会读取visibility:hidden的元素内容。

一面

1. 介绍一下自己的项目经历,可以看着自己的简历介绍(用到的技术 + 遇到的技术难点);

用到的技术

使用Vue全家桶 + 自定义组件 + 自定义插件还原设计稿;采用Rem + 视口缩放实现移动端适配;使用预渲染技术解决SPA应用SEO问题,提升提升SPA应用体验;使用Git进行版本控制;使用Eslint + Airbnb标准统一项目编码规范。

移动端100~300ms的点击事件延迟问题
由于移动端会有双击缩放的这个操作,因此浏览器在click之后要等待300ms,看用户有没有下一次点击,也就是这次操作是不是双击。
现有的解决方案:FastClick
FastClickFT Labs 专门为解决移动端浏览器 300 毫秒点击延迟问题所开发的一个轻量级的库。FastClick的实现原理是在检测到touchend事件的时候,会通过DOM自定义事件立即出发模拟一个click事件,并把浏览器在300ms之后的click事件阻止掉。

移动端触摸滑动总是不顺畅
只需要给需要滑动的盒子加上 -webkit-overflow-scrolling: touch; 样式即可

滚动穿透问题
滚动穿透是指在移动端当有 fixed 遮罩背景和弹出层时,在屏幕上滑动能够滑动背景下面的内容。
解决方案:position: fixed

body.modal-open {

    position: fixed;

    width: 100%;

}
  • css的盒模型;
  • 宽度未知的div如何实现居中,列举所有能实现的方法;
  • let const var的区别;
  • 如何实现数组、对象的深拷贝,列举所有方法;
  • typeof undefined? typeof null?
  • undefined==undefined、undefined===undefined、null==null、null===null、NaN==NaN、NaN===NaN;
  • 如何实现类;
  • 介绍一下单例模式;
  • ES5如何实现单例;
  • ES6的class如何实现单例;
  • 多个promise如何实现串联;
  • promise的all和race的区别;
  • 介绍一下async和await;
  • 介绍一下fetch;
  • 用过axios吗,知道他如何做请求劫持分发吗;
  • Vue如何实现双向数据绑定;
  • Vue组件之间如何通信(父->子、子->父、兄弟之间);
  • Vue如何处理数据流(Vuex,EventBus的emit和on);
  • Vuex都有哪部分组成(state、mutation、action、getter);
  • Vuex中mutation和action哪一个是处理异步操作的(action);
  • vue-router如何处理’/xxx/a|b|c|d’这样子的路由(/xxx/:id);
  • vue-router‘/xxx/:id’这样子的路由如何获取到id值;
  • vue-router如何做路由的跳转(标签&实例方法两种);
  • 对工程化有什么了解;
  • 数据可视化,用过threejs和echarts吗;
  • Nodejs大概会到什么程度;
  • Nodejs的res.send和res.json的区别;
  • 你有什么问题吗

还有一些问题记不太清了,问的很细,就是css->js基础->es6->框架->工程化相关->nodejs,由于我在公司css写的少所以面试官css和布局也问的比较少;

二面

二面leader说一面面的已经很不错了,二面也没啥要问的了,就聊一聊自己的情况介绍一下这个组的主要工作;

问题有点多,还没整理完,先发出来,待后续整理