美文网首页让前端飞前端开发那些事JavaScript 进阶营
前端面经总结——富途笔试+三轮技术面+HR面

前端面经总结——富途笔试+三轮技术面+HR面

作者: Rocky_Wong | 来源:发表于2018-11-14 21:53 被阅读28次

    前言

    今天终于收到富途的offer啦,和大家分享一下面试的全过程。感觉整个过程都比较顺利,富途对css基础,js基础,网络安全,项目经验,算法,个人软实力都有所考核,算是比较全面的吧。

    整个流程是:笔试+一面+二面+CTO面+HR面

    笔试

    小题

    1. 写出在html头部中,设置设备宽度等于页面宽度的属性标签

    答:

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
    

    2. css选择器的优先级

    答:标签选择器 < 类选择器 < ID选择器 < 内联style < !important

    3. BFC的概念和特性

    答: BFC——块级格式化上下文

    • 触发条件
      • float不为none
      • overflow不为visible
      • display为table-cell,table-caption,inline-block
      • position为absolute,fixed
      • fieldset元素
    • 功能
      • 自我独立,内部元素不会影响外部元素
      • 会包含浮动元素
      • 同一个BFC的margin重叠

    4. 使用雪碧图的关键css属性是什么

    答:background-position

    5. 基础类型

    答:number,boolean,string,null,undefined,symbol

    6. onLoad 和 DOMContentLoad 的区别

    答:

    • DOMContentLoad是HTML文档被加载和解析完成后触发
    • onLoad是页面所有资源(包括图片,音频等)加载完后触发

    7. this

    let a =1;
    
    let obj = {
        a: 2,
        b: function () {
            return this.a
        }
    }
    
    console.log(obj.b())
    

    答:2

    8. 原型

    function F () {};
    let f = new F();
    f.prototype = ?
    

    答:只有函数有prototype属性,所以undefined

    9. 事件队列

    // 具体的题目忘了,无非都是考核promise,setTimeout,async的执行顺序
    // 以下是头条的类似题目,这个考得更全面
    async function a1 () {
        console.log('a1 start')
        await a2()
        console.log('a1 end')
    }
    async function a2 () {
        console.log('a2')
    }
    console.log('script start')
    setTimeout(() => {
        console.log('setTimeout')
    }, 0)
    Promise.resolve().then(() => {
        console.log('promise1')
    })
    a1()
    let promise2 = new Promise((resolve) => {
        resolve('promise2.then')
        console.log('promise2')
    })
    promise2.then((res) => {
        console.log(res)
        Promise.resolve().then(() => {
            console.log('promise3')
        })
    })
    console.log('script end')
    

    10. 严格模式

    答:

    • 变量必须声明后再使用
    • 函数的参数不能有同名属性,否则报错
    • 不能使用with语句
    • 不能对只读属性赋值,否则报错
    • 不能使用前缀 0 表示八进制数,否则报错
    • 不能删除不可删除的属性,否则报错
    • eval不会在它的外层作用域引入变量
    • eval和arguments不能被重新赋值
    • arguments不会自动反映函数参数的变化
    • 不能使用arguments.callee
    • 不能使用arguments.caller
    • 禁止this指向全局对象
    • 不能使用fn.caller和fn.arguments获取函数调用的堆栈
    • 增加了保留字(比如protected、static和interface)

    大题

    1. bind函数的实现

    答:以下是网上比较标准的答案,我当时没想到继承这方面。

    Function.prototype.bind2 = function (context) {
    
        if (typeof this !== "function") {
          throw new Error("Function.prototype.bind - what is trying to be bound is not callable");
        }
    
        var self = this;
        var args = Array.prototype.slice.call(arguments, 1);
        var fNOP = function () {};
    
        var fbound = function () {
            self.apply(this instanceof self ? this : context, args.concat(Array.prototype.slice.call(arguments)));
        }
    
        fNOP.prototype = this.prototype;
        fbound.prototype = new fNOP();
    
        return fbound;
    
    }
    

    2. js深拷贝的实现

    答:注意几个点

    • 基本类型和引用类型的区分
    • 环形对象的处理
    • 函数对象,日期对象,正则对象的处理
    • 数组和纯对象的处理

    3. trim的实现

    答:str.replace(/(^\s)|(\s$)/g, "")

    一面

    面试官考察了一下笔试题后开始面试,大都是问前端的基础问题

    了解目前团队,对项目的角色定位,负责过的东西

    答:略

    项目中对通用组件的处理

    答:

    • 回答了业务组件page和通用组件component的区别
    • 针对通用组件该注意的问题(数据与通讯)
    • 设计通用组件接口的规范要求(传入参数的规范设计)

    vue中watch和computed的区别

    答:

    • computed,计算属性,随着依赖的数据响应式地改变,用于复杂逻辑处理
    • watch,命令式地监听数据变化进行操作

    vue官方文档描述得相当详细,大家可以参考文档👇

    vue官方文档

    事件队列EventLoop

    答:回答以下关键点

    • 事件队列的诞生缘由和概念
    • 主执行栈与异步队列
    • 宏任务与微任务
    • 整体的执行过程

    快速排序和归并排序的大致实现以及其复杂度

    答:

    • 归并排序
      • 关键步骤(略)
      • 复杂度
        • 最优 nlog(n) 平均 nlog(n) 最差 nlog(n)
    • 快速排序
      • 关键步骤(略)
      • 复杂度
        • 最优 nlog(n) 平均 nlog(n) 最差 n2

    说一下遇到过的网络安全问题以及解决方案

    答:当时结合项目说了一下XSS攻击的防范和CSP防御

    HTTP缓存问题以及304的情况

    答:略

    实现判断A数组是否是B数组子集

    答:忘了。。。

    移动端开发时遇到的兼容问题和调试方式

    答:

    • 回答了开发时使用谷歌的移动端调试模式,Mac的Xcode模拟器调试,还有手机代理调试的方法
    • 当线上遇到的问题时,会通过sentry埋点上报系统来查看错误信息

    二面

    二面的面试官应该是web端的负责人,不再问前端知识,更多是问一些实际情景解决方案和网络安全。

    两个水桶各装着x升颜料,一个红颜料,一个蓝颜料,现在从蓝桶往红桶勺y升蓝颜料,再从红桶勺y升颜料回蓝桶,请问两个桶的红蓝比例是多少?

    答:一个是x/y,一个是y/x

    一个抽奖程序的前后端逻辑

    回答的过程中一直有和面试官讨论我的想法和出发点,最后回答了以下几点:

    • 奖品占比概率,奖品份数,假设抽奖总人数
    • 前后端分工,安全问题,是否由后台进行抽奖计算
    • 考虑奖品抽完的情况

    网络安全的手段

    答:

    • 对XSS的防范
    • 对CSRF的防范
    • CSP
    • HTTPS

    冒泡排序的实现,复杂度以及优化

    答:

    • 优化点:做swap标记,若循环下来没有交换过则说明已经排序完成
    • 复杂度 最优n 平均n2 最差n2

    首屏优化手段

    答:

    • SSR
    • 占位元素优先出现
    • webpack的压缩优化
    • PWA

    SPA的优缺点

    答:

    • 资源共用
    • 局部刷新
    • URL模式
    • 用户体验/页面切换快
    • 数据传递容易
    • 不利于SEO,可用SSR优化
    • 初次加载时长
    • 路由管理
    • 减轻服务器压力
    • 前后端职责分离

    为什么百度的图片用另外的域名而不是主网站的域名

    答:可以从CDN和携带cookie两个方面回答

    最后是一道计算个人所得税的填空代码题,很简单

    答:略

    三面

    CTO面应该是想了解你的整体能力,沟通能力,考察你是否符合公司人才标准,以及对代码的规范和对问题思考的全面深入程度。

    三面我只分享一下题目,大家可以独自去思考和网上搜索答案。

    1. 将for循环改为goto语法

    2. 实现一个求中位数的函数,middle(a,b,c)

    3. 实现一个生成3~7区间的随机整数的函数

    4. 大医院每天接生100人,小医院每天接生50人,哪个医院能达到“生男孩几率大于60%”的目标的多一点?

    四面

    最�后的HR面问的也是比较经典的问题

    • 个人软实力考核
    • 前公司状况
    • 个人状况
    • 学习途径
    • 期望薪酬
    • 职业规划
    • 新公司看法和了解

    最后

    希望大家都能拿到自己心仪的offer,有任何疑问都可以在评论区一起讨论啊~谢谢支持🙏

    相关文章

      网友评论

        本文标题:前端面经总结——富途笔试+三轮技术面+HR面

        本文链接:https://www.haomeiwen.com/subject/qupsfqtx.html