前端常见面试题

面试自我介绍:
1、我叫什么,我来自哪里
2、上家公司在哪,担任的角色是什么?
3、最近辅助的一个项目是哪个?主要负责的模块是哪些?
4、项目的难点与亮点






1、token验证的流程
    答:
        1、用户向服务器发送用户名和密码。
        2、服务端收到请求,去验证用户名与密码
        3、验证成功后,服务端会签发一个Token,再把这个Token发送给客户端。
        4、客户端收到Token以后可以把它存储起来,比如放在Cookie里或者Local Storage里
        5、用户随后的每一次请求,都会通过Cookie,将token传回服务器
        6、服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据
2、说一下什么是同源策略,以及常用解决跨域的方案
    答:
        同源策略:同源指的是域名、协议、端口号相同。
                 同源策略规定了js代码的访问权限,只能访问和自己同源的页面
                 同源策略是一种约定,它是浏览器最核心也是最基本的安全功能
        常用解决跨域的方案:
                 1、跨域资源共享(CORS)
                 2、jsonp
                 3、nginx反向代理
                 4、服务器代理
3、如何通过css设置超出部分?
    答:
        1、white-space:nowrap  =>设置内容抵达容器边界会自动转到下一行
        2、overflow:hidden      =>不显示超出对象尺寸的内容
        3、text-overflow:ellipsis    =>将被隐藏的部分用省略号代替

4、请说一下微任务和宏任务的区别
    答:
        微任务(miscrotask)
        宏任务(macrotask)
        表示异步任务的两种分类

  微任务和宏任务之间的关系:


(此处内容过多,未完,详情请翻阅文档)

5、说一下JS的预编译
    答:   
        把var和function定义的变量提升到script的最上方
        赋值语句不会被提升,哪怕等号后面是一个function
6、原生JS的兼容性问题例举5个
    答:
        1、获取滚动条滚动的距离
            var sTop = document.documentElement.scrollTop||document.body.scrollTop
        2、获取事件对象
            var e = e || event
        3、阻止浏览器默认行为
            function prevent(e){
                if(e.preventDefault){
                    e.preventDefault()
                }else{
                    e.returnValue = false
                }
            }
        4、阻止事件冒泡
            e.stopPropagation?e.stopPropagation():e.cancelBubble=true
        5、事件监听
            addEventListener()
            attachEvent()
        6、获取事件源
            e.target||e.srcElement
        7、ajax兼容
            var xhr = new XMLHttpRequest()||new ActiveXObject("Microsoft,XMLHTTP")
7、IE的事件机制与火狐的事件机制有什么不同
    答:
        事件处理机制:
            IE是事件冒泡
            火狐是事件捕获
8、for in 与Object.keys的区别
    答:
        for in:
                 一般用于遍历对象的属性
                 作用于数组的for in 除了会遍历数组元素外,还会遍历自定义可枚举的属性,以及原型链上可枚举的属性;
                 作用于数组的for in 的遍历结果是数组的索引,且都为字符串型,不能用于运算
                 某些情况下,可以按照随机顺序遍历数组元素;
        Object.keys()
                遍历结果为由对象自身可枚举 属性组成的数组,数组中的属性名排列顺序与使用for in 循环遍历该对象是返回的顺序一致
                与for in 区别爱与不能遍历出原型链上的属性
9、map与forEach的区别
    答:
        相同点:
                1、都是循环遍历数组中的每一项
                2、每一次执行匿名函数都支持三个参数,数组中的当前项item,当前项的索引index,原始数组input
                3、匿名函数中农的this都是指向window
                4、只能遍历数组
        不同点:
                forEach没有返回值!!!
                map有返回值,可以return出来
10、如何准确的判断一个数据的类型
    答:   
        1、typeof:只能判断基本数据类型,不能判断引用数据类型,判断出来的都是Object
        2、instanceof:只能进行类型对比,不能进行类型判断
        3、constructor:是prototype对象上的属性,指向构造函数
        4、可以通过toString()来获取每个对象的类型

原文地址:https://www.cnblogs.com/yj199661/p/11231738.html