20190515 前端面试总结
2019-07-01 10:43
281 查看
- 自我介绍?介绍一下印象深刻的项目,自己主导开发的项目?
- 都封装过什么样的组件?封装组件时需要注意的点?组件设计原则?
- 浏览器缓存?状态码?post请求附带头信息及其影响
- 箭头函数和普通函数的区别?怎样使用普通函数模拟箭头函数
- 元素水平垂直居中的实现?flex 兼容性处理?transform兼容性处理?
- 如何解决跨域?cors 设置信息?post请求会有什么副作用
- key的作用
- mobx observer 内部实现以及使用到 js 原理?setter 和 getter 能够对数组进行监听么
- 前端异步方案?async怎么实现并发执行?
- 下拉加载更多的实现?去抖函数和节流函数的区别?在一定时间内一定会被触发的是哪个函数
- 为什么需要react-loadable按需加载组件
- 自适应怎么做的?rem vw 的区别?
- css 预处理是什么意思?less 能够解决兼容性问题么
- 项目中遇到的难点?是怎么解决的?
(中大公司 微医)
浏览器缓存
flex transform等css属性兼容性问题
检查兼容性的网站:https://caniuse.com/#search=flex
自动添加前缀的插件
先用预处理器把less、sass转为css,然后再通过 Autoprefixer 给编译好的 css 加前缀
var autoprefixer = require('autoprefixer'); module.exports = { module: { loaders: [ { test: /\.less$/, loader: "style-loader!css-loader!postcss-loader!less-loader" } ] }, postcss: [ autoprefixer({ browsers: ['last 2 versions'] }) ] }
解决方案
-
使用浏览器私有属性 -webkit- ,-moz- ,-ms-
-moz-
代表firefox浏览器私有属性 -ms-
代表IE浏览器私有属性-webkit-
代表chrome、safari私有属性-o-
代表opera私有属性
CSS hack
-
条件hack
keywords:lt、gt、lte、!非指定版本
<!--[if <keywords>? IE <version>?]> 代码块,可以是html,css,js <![endif]-->
.test { color: #090\9; /* For IE8+ */ *color: #f00; /* For IE7- */ _color: #ff0; /* For IE6- */ }
*html *前缀只对IE6生效 *+html *+前缀只对IE7生效 @media screen\9{...}只对IE6/7生效 @media \0screen {body { background: red; }}只对IE8有效 @media \0screen\,screen\9{body { background: blue; }}只对IE6/7/8有效 @media screen\0 {body { background: green; }} 只对IE8/9/10有效 @media screen and (min-width:0\0) {body { background: gray; }} 只对IE9/10有效 @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效
特殊场景
IE6双边距bug
现象:块属性标签添加了浮动float之后,若在浮动方向上也有margin值,则margin值会加倍。
解决:进行hack处理了,对IE6进行
_margin-left: 5px;
上下margin重合
现象:相邻的 margin-top margin-bottom 会重合
解决:不要同时使用 top 和 bottom
chrome下小于12px的文本显示问题
现象:小于12px的按照12px进行解析
解决:设置
-webkit-text-size-adjust: none;
组件设计原则
- 功能单一
- 接口设计符合规范和大众习惯
- 可配置:比如按钮的颜色、大小、事件处理、位置等都是可以配置的
- 健壮性:对传入的值进行有效的校验
async怎么实现并行执行
async function myFunction() { try { let foo = await getFoo(); let bar = await getBar(); // 上面的 foo 和 bar 是串行的,比较耗时 let [foo, bar] = await Promise.all([getFoo(), getBar()]); } catch (err) { console.log(err); } }
相关文章推荐
- 最全面的前端面试问题及答案总结
- 前端面试总结与归纳
- 最全前端面试问题及答案总结(转载自hawx1993)
- 今日头条前端面试总结
- 基础知识总结-前端面试(一)
- 前端开发面试总结系列一
- 前端开发面试总结JavaScript部分
- web前端面试总结
- 前端面试总结
- 自己总结的一些关于前端和php的面试中的常见的问题
- 牛客网--前端面试经典题目合集总结(持续更新)
- web前端开发工程师面试技巧自我总结
- 前端面试总结---CSS相关面试题
- web前端面试总结(3)
- 前端面试js小总结(一)
- 前端面试总结(转载请标明)
- 前端开发面试总结其他部分
- 前端面试题目总结
- 谈谈阿里实习生招聘面试经历及经验总结(回忆版)--前端开发
- 前端面试中常见的算法问题总结