zoukankan      html  css  js  c++  java
  • 前端面试总结2020

    [HTML&CSS]

    ⭐CSS图片自适应

      1. max-height。

      2. 背景图background-size:contain。

    布局

    浮动,定位,分栏布局,百分比布局,flex弹性布局,响应式布局(rem,vw,@media)。

    浏览器的兼容

      1. 默认的margin、padding不同,可以统一清除。

      2. 块标签浮动后横margin显示不正确,可以把块标签变成行内标签。

      3. 设置较小高度标签IE67里不受控制,可以用overflow:hidden或者line-height。

    https://blog.csdn.net/weixin_42103706/article/details/88221751

    移动端的兼容

      1. IOS移动端click事件300ms延迟,可以使用fastclick。

      2. 一些情况对非可点击元素span监听click事件IOS不会触发,CSS增加cursor:pointer。

      3. H5底部输入框被键盘挡住,让DOM元素出现在可见视图的顶部或者底部,.scrollIntoView( )。

      4. 禁止IOS弹出各种操作窗口,-webkit-touch-callout:none。

      5. 在IOS和Android,audio和video元素无法自动播放,可以设置触屏即播`.one('touchstart', function(){audio.play()})`。

      6. CSS动画页面闪白动画卡顿,尽可能使用合成属性transform和opacity来设计CSS3动画,不适用position的left和top来定位,再就是开启硬件加速transform:translate3d(0, 0, 0)。

    https://www.cnblogs.com/wangpenghui522/p/5398137.html


    [JS]

    JS基本数据类型

    Number,String,Boolean,Undefined,Null。

    正则匹配

    /^d{17}[d|x]|d{15}$/身份证。

    https://www.kancloud.cn/chechbox/fe/289368

    原型链

    new一个实例,这个实例的原型就是这个构造函数。每个构造函数都有一个prototype属性显示原型,每个引用类型都有一个_proto_属性隐式原型,每个引用类型_proto_指向它构造函数的prototype。

    https://blog.csdn.net/Bessicxie/article/details/93845684

    继承

      1. 原型链继承。

      2. 构造继承,使用父类的构造函数来增强子类实例。

      3. 实例继承。

      4. 拷贝继承。

      5. 组合继承,属性通过父类的构造函数继承,函数通过父类的实例作为子类的原型继承。

      6. 寄生组合继承,通过寄生方式砍掉父类的实例属性。

    https://blog.csdn.net/weixin_43160780/article/details/86601225

    this指向

      1. 没有明确的附属对象的函数中指向全局对象window。

      2. 函数对象中指向函数所附属的对象。

      3. 构造函数中指向构造函数实例。

      4. 匿名函数指向全局对象。

      5. 定时器中指向全局对象。

      6. eval中指向调用上下文中的this。

      7. call,apply,bind中指向参数。

    super和this

    super指向当前对象的原型对象,this指向函数所在的当前对象。

    https://www.cnblogs.com/pwindy/p/12666846.html

    call( )、apply( )、bind( )

    改变一个函数里的this指向。

    Fn.call(指向函数, '参数1', '参数2')

    Fn.apply(指向函数, ['参数1','参数2'])

    Fn.bind(指向函数, '参数1', '参数2')( )

    https://www.runoob.com/w3cnote/js-call-apply-bind.html

    toFixed( ),Number四舍五入指定小数位数。

    ⭐ for...in和for...of

    for...of不支持普通对象。

    https://www.jianshu.com/p/c43f418d6bf0

    forEach和map

    map会返回新数组,forEach不会。

    ES6特性

    类,模块化,箭头函数,函数默认参数,模板字符串,解构赋值,延展操作符,对象属性简写,Promise,let与const。

    https://www.jianshu.com/p/e2ba90e89754

    解构赋值浅拷贝,解构赋值本身是浅拷贝,但是拷贝基本类型得到是深的,拷贝引用类型是浅的。

    ES6新增数组方法

    Array.from()把类数组对象转化为数组。Array.of()把一组值转化为数组。find(),findIndex()。fill()填充。entries()键值对,keys(),values()。includes()。flat()拉平数组,flatMap()拉平一层。

    https://blog.csdn.net/weixin_33912246/article/details/88022414

    ES10了解

    新增了Array的flat()和flatMap(),flat()可以给数组降维和去除数组的空项。

    https://blog.csdn.net/qq_34586870/article/details/89515336#5.1%C2%A0%E6%96%B0%E5%A2%9E%E4%BA%86Array%E7%9A%84flat%28%29%E6%96%B9%E6%B3%95%E5%92%8CflatMap%28%29%E6%96%B9%E6%B3%95

    什么时候用同步

    一步一步操作,等待请求返回的数据再执行下一步。

    异步的解决方案

      1. 回调函数。

      2. 事件监听。on、bind、listen、addEventListener、observe。

      3. 工具方案,如promise、async+await、node.js中nextTick、ES6的gengerator函数。

    https://blog.csdn.net/qq_32442973/article/details/89322763

    promise,用来处理异步,.then和.catch。promise有三种状态,pending待定、fulfilled成功、rejected失败。

    https://www.jianshu.com/p/1b63a13c2701

    promise.all和promise.race

    promise.all打包多个promise返回一个结果数组。promise.race哪个结果快就返回哪个。

    https://www.jianshu.com/p/7e60fc1be1b2

    ⭐ async、await

    ES7出现,为了解决promise满屏then。async声明的函数的返回本质上是一个promise,await是在等待一个promise的异步返回。

    https://segmentfault.com/a/1190000016788484

    AMD、CMD、CommonJS、import/export

    前三个是ES5模块化编程方案,import/export是ES6的。

    RequireJS是一个AMD框架,依赖前置异步定义。

    CMD是在SeaJS中产出。

    CommonJS通过module.exports定义,前端不支持,node.js后端使用。

    import/export对模块导入导出。

    https://blog.csdn.net/tangxiujiang/article/details/81104174


    [JQ]

    $('#id')等于document.getElementById('id')。


    [NodeJS]


    [Vue]

    created和mounted的区别

    都可以获取data和methods,只有mounted可以获取DOM节点。

    https://segmentfault.com/a/1190000020058583?utm_source=tag-newest

    computed和watch的区别

    computed有缓存,能控制多个。watch只能监听一个。

    https://cn.vuejs.org/v2/guide/computed.html

    插槽slot

    在子组件`<children></children>`里加`<slot></slot>`,在父组件调用`<children>这是后备内容</children>`时会将标签里的内容插入。v-slot。

    https://cn.vuejs.org/v2/guide/components-slots.html

    父子组件传值。或者问自定义组件点击事件

      1. 父给子用props,子给父用this.$emit。

      2. 用vuex。

    https://www.cnblogs.com/phermis/p/10710894.html

    路由守卫

    全局三个router.beforeEach,router.brforeResolve,router.afterEach。路由独享守卫beforeEnter,组件内守卫三个beforeRouteEnter。

    https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

    https://blog.csdn.net/weixin_41399785/article/details/79382243

    vue-router动态路由传参

    path:'/user/:id',this.$route.params接收。

    https://router.vuejs.org/zh/guide/essentials/passing-props.html#%E5%B8%83%E5%B0%94%E6%A8%A1%E5%BC%8F

    vue路由传参

      1. this.$router.push里path:'/user/:id'。获取this.$route.params.id。

      2. this.$router.push里params:{}。获取this.$route.params.id。

      3. this.$router.push里query:{}。获取this.$route.query.id。

    https://www.jianshu.com/p/d276dcde6656

    vue修饰符

      1. 事件修饰符。.stop阻止冒泡;.prevent提交事件不重载页面;.capture内部事件由此进入;.self;.once;.passive滚动。

      2. 按键修饰符。.enter;.tab;.delete等。

      3. 系统修饰符。.ctrl等。

      4. 鼠标修饰符。.left等。

    https://cn.vuejs.org/v2/guide/events.html

    vue.use原理

    vue.use通过initUse方法初始化,接受一个plugin,检测installedPlugins数组中是否有组件,调用toArray,把当前vue对象this插入转化后得数组前,接下来要么plugin中有install要么本身就是一个函数,最后将注册后的组件放入installedPlugins避免重复注册。

    http://baijiahao.baidu.com/s?id=1666022212320580751&wfr=spider&for=pc

    hash和history

    vue路由配置中`mode:"hash";`,hash带#,history不带#,history怕刷新。

    https://blog.csdn.net/sayoko06/article/details/85321802


    [React]

    ⭐react生命周期

    Mounting里有constructor,componentDidMount。

    Updating里有shouldComponentUpdate,getSnapshotBeforeUpdate,componentDidUpdate。

    两者共有getDerivedStateFromProps(New props,setState()和forceUpdate()可以触发),render,React updates DOM and refs。

    Unmounting里有componentWillUnmount。

    https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

    render

    一个组件类必须要实现一个render方法,这个render方法必须要返回一个被包裹的JSX元素。

    https://www.jianshu.com/p/00226a584eff

    Hooks

    Hooks是一个特殊函数,钩入React特性。state hook获取state和更新state方法。effect hook可以理解成componentDidMount/componentDidUpdate。

    https://segmentfault.com/a/1190000019513907


    [App]

    wx:request封装

    request.js处理一些基本类。比如统一异常处理,GET、POST、DELETE、PUT请求,请求拦截响应拦截等。

    api.js处理接口处理。

    https://www.cnblogs.com/shimily/articles/10717222.html

    小程序实现图片上传:wx.chooseImage。


    [Others]

    ⭐MVVM和MVC的区别

    MVVM最大的区别就是实现了view和model的自动同步。

    ajax和axios的区别

    ajax指XMLHTTPRequest,会有回调地狱。axios是Promise实现对XHR的封装。fetch与XHR无关是原生js。

    https://www.jianshu.com/p/8bc48f8fde75

    axios封装

    request文件夹http.js和api.js。http.js封装请求超时、post请求头、请求和响应拦截、get、post等。api.js统一管理接口。

    https://www.cnblogs.com/chaoyuehedy/p/9931146.html

    跨域方法

      1. JSONP。通过动态创建script再通过script.src请求一个带参数的网址,在vue里this.$http.jsonp。

      2. postMessage(data.origin)。

      3. CORS。后端配置,前端用了谷歌插件。

      4. nginx反向接口代理。域名相同端口不同的跳板机,配置里有server对象,里面有listen,location。

      5. Nodejs中间件代理跨域。引入http-proxy-middleware和express。

      6. WebSocket协议跨域。

    https://segmentfault.com/a/1190000011145364

    nginx反向接口代理

    1 var xhr = new XMLHttpRequest();
    2 xhr.withCredentials = true;
    3 xhr.open('get','网址',true);
    4 xhr.send();

    webpack和gulp

    gulp通过对task对整个开发过程进行构建。webpack是前端资源模块化管理和打包工具,通过loader转换,CSS、图片、JSON都可以看作模块。

    gulp拷贝

     gulp.task('copy',function()) 

    https://www.cnblogs.com/EasonJim/p/6207688.html

    ESLint规则

    ESLint是在ECMAScript/JavaScript代码中识别和报告模式匹配的工具。

    1 npm i -g eslint //安装
    2 eslint --init //第一次使用新建一个配置文件
    3 eslint test1.js test2.js //检测js文件
    4 eslint test.js --fix //自动修复一些规则

     off或0关闭规则,warn或1警告级别,error或2错误级别。

    https://blog.csdn.net/bbsyi/article/details/88816637

    项目开发流程

      1. 市场调研、技术可行性分析(报告)。

      2. 需求分析说明书(产品部门)。

      3. 原型设计。

      4. UI设计(出效果图)。

      5. 架构设计(技术决策、技术选型)。

      6. 接口设计(前端和后端相关负责人,输出接口文档)。

      7. 搭建框架代码。

      8. 项目研发(前后端并行编码)。

      9. 对接联调(自测)。

      10. 提测(把代码交付给测试团队)。

      11. BUG修改再次提测(迭代)。

      12. 上线(试运营、灰度测试)。

     

    自己总结的一点小经验

      1. 太原薪资只有7k为什么来我们这里要这么高?注意突出自我,这几年的工作让我积攒了对项目的经验,再说明太原经济相对落后。

      2. 介绍自己的项目时,解决什么问题,项目的用户,使用了什么技能,难点亮点,你的角色。

      3. 对和面试官对线的时候,要学会掌握主动权,把不确定的问题引导到自己熟悉的问题上,引导到自己的项目上。

      4. 会的问题不要太冲动,慢慢回答,不要打断面试官的话等说完再回答,不会的问题虚心请教。

      5. 面试完可以问一下你觉得我面试得怎么样,发现自己得不足。

      6. 叙述你的职业规划。

        第一步,如果能有幸留到咱们贵公司,那我肯定会以最短的时间先熟悉公司的文化背景、业务流程。

        第二步,因为自己现在从事这行业也有三年时间了,基本的项目模块都差不多能上手,但毕竟新的公司,肯定也会有很多新的技术需要自己提升,那我希望自己能在贵公司一年内达到小组负责人的职位。

        第三步,两年后能把自己的技术历练的更加成熟,三年左右往产品这块或者往全栈这块发展,目前先就这么打算的。

  • 相关阅读:
    Paragon NTFS for Mac免费获取官方赠送正版.更新获取ntfs for mac 14方法
    Python修饰器的函数式编程
    Python装饰器与面向切面编程
    linux配置IP的方法
    Centos搭建SVN服务器三步曲
    [CentOS 6.5 X64]讓firefox java plugin 啟動
    逻辑分析题(三)
    逻辑分析题汇总(一)
    第十章—DOM(0)—NODE类型
    第十章—DOM(三)——Text类型
  • 原文地址:https://www.cnblogs.com/sxushy2016/p/14098893.html
Copyright © 2011-2022 走看看