3年半前端阿里1-4面面经¶
统计信息:字数 12685 阅读26分钟
一面 40min
-
react hooks, useEffect和useCallback区别?
-
react性能优化
-
简述diff算法?为什么是O(n3)
-
currentTarget和target区别?
-
webpack loader原理?plugin原理?手写过吗?
-
怎么进行代码分割?
-
浏览器性能优化
-
如何封装一个脚手架cli,如何感知脚手架的更新?
-
部署流程?静态资源如何部署?覆盖式更新和非覆盖式更新的区别?hash值的意义,max-age设置多久?200和304?from memory和from disk?
-
git rebase? git merge --squash ? 团队中如何使用git?
-
如何理解js原型链?为什么这样设计?
-
es5几种继承方式 优缺点?es6继承?
二面 60min
-
flex布局?
-
左边固定,右边flex:1,如果右侧文字超出,左侧会被挤压吗?怎么解决?
-
element、antd等组件库替换主题样式的原理是啥?
-
如何发布一个npm包?设计开发一个UI库怎么打包?如何按需加载?babel-import-plugin原理是啥?es5引入和es6引入有什么区别?如何进行tree-shaking, 是哪个plugin进行的?es moduleh和Commonjs的区别?
-
Webpack打包优化?如何分chunk?如何按需加载组件?
-
webpack-dev-server和dev-middleware、hotmiddleware的区别,原理能说说吗?
-
如何替换项目中所有https=>http? (css和js都得替换,css-loader和babel-loader-plugin)
-
移动端适配?post-css原理?
-
redux原理?connect高阶组件的原理?如何连接store和业务组件?
-
如何写一个高阶组件?高阶组件有哪几种使用场景(反向继承,生命周期劫持)?
-
react setState原理?diff原理?setState同步还是异步?
-
react key的原理?
-
react事件处理机制?
-
react fiber为什么会出现?解决了什么场景下什么问题?
-
react hooks为什么会出现?有什么优势?
-
useEffect、useCallback、useMemo的区别?
-
koa原理?洋葱模型?dispatch函数细节?
-
new 原理?如何实现一个new ?
-
一个异步请求,如果5s内有返回就正常返回,如果5s内没返回就输出'超时',如何用promise实现?
-
描述一下作用域和作用域链?作用域链是什么时候确定的?函数定义时会确定哪些东西?预编译阶段会发生了什么?描述一下AST?
-
浏览器性能优化?介绍一下浏览器缓存?打包出来的文件加hash值有什么用?
-
怼项目.
三面 90min
-
移动端适配方案 rem原理?物理像素和独立像素?
-
怎么判断机型是iphonx, 几种方案?
-
css动画优化方案,如何开启gpu加速?
-
小程序遇到过哪些坑?tarojs原理?以前的版本和现在有什么区别?重运行时的优缺点?
-
react组件性能优化方案
-
http三次握手
-
https原理
-
https如何防止中间人攻击
-
跨域方案?jsonp原理?cors原理,描述一次完整的Cors请求?
-
node掌握怎么样?高并发下有哪些处理?数据库被击穿怎么办?
-
这一面大部分时间在怼项目 怼业务场景
四面交叉面 30min
-
axios的原理,和xhr、fetch区别,axios在node能使用吗?node怎么发起请求?
-
tarojs原理?重编译轻运行时的优缺点?轻编译重运行时优缺点?
-
promise几种状态?怎么实现promise.finally?
-
如果要实现一个请求5s内没正常返回就返回我想要的,比如'超时',怎么用Promise实现?
-
怎么设计一个动态配置化表单?哪些场景使用?
-
剩下一半时间问项目
还有几道js题
\1. 实现函数字符串转对象
```
'a.b.c'
=>
a: {
b: {
c: null
}
}
```
2.异步请求控制并发 LimitPromise
\3. 输入字符串 输出二维数组
```
`
12312
1 3
12 3
`
=>
[
['12312'],
['13'],
['123']
]
```
\4. 考this,输出什么?
```
function O() {
this.x = 1
this.print = function () {
console.log(this.x)
}
}
var o = new O()
var print = o.print
print()
var n = {x: 2, print: print}
n.print()
```
可惜5面hr+boss面挂了,缘分未到吧~明年再面
列出display的值,说明他们的作用。position的值, relative和absolute分别是相对于谁进行定位的?¶
block 象块类型元素一样显示。
inline 缺省值。象行内元素类型一样显示。
inline-block 象行内元素一样显示,但其内容象块类型元素一样显示。
list-item 象块类型元素一样显示,并添加样式列表标记。
- absolute 生成绝对定位的元素,相对于 static 定位以外的第一个祖先元素进行定位。
fixed (老IE不支持)生成绝对定位的元素,相对于浏览器窗口进行定位。
relative 生成相对定位的元素,相对于其在普通流中的位置进行定位。
static 默认值。没有定位,元素出现在正常的流中
(忽略 top, bottom, left, right z-index 声明)。
inherit 规定从父元素继承 position 属性的值。
CSS3有哪些新特性?¶
CSS3实现圆角(border-radius),阴影(box-shadow),
对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
增加了更多的CSS选择器 多背景 rgba
在CSS3中唯一引入的伪元素是::selection.
媒体查询,多栏布局
border-image
为什么要初始化CSS样式。¶
因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
_最简单的初始化方法就是: _ {padding: 0; margin: 0;} (不建议)
淘宝的样式初始化:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \\5b8b\\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }
对BFC规范的理解?¶
BFC,块级格式化上下文,一个创建了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素。在同一个BFC中的两个毗邻的块级盒在垂直方向(和布局方向有关系)的margin会发生折叠。
(W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行布局,以及与其他元素的关系和相互作用。)
解释下 CSS sprites,以及你要如何在页面或网站中使用它。¶
CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。这样可以减少很多图片请求的开销,因为请求耗时比较长;请求虽然可以并发,但是也有限制,一般浏览器都是6个。对于未来而言,就不需要这样做了,因为有了http2
。
html部分¶
说说你对语义化的理解?¶
1,去掉或者丢失样式的时候能够让页面呈现出清晰的结构
2,有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;
3,方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;
4,便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。
Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?¶
(1)、\<!DOCTYPE> 声明位于文档中的最前面,处于 <html>
标签之前。告知浏览器以何种模式来渲染文档。
(2)、严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。
(3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
(4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
你知道多少种Doctype文档类型?¶
该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。
HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。
XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。
Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks
(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。
HTML与XHTML——二者有什么区别¶
区别:
1.所有的标记都必须要有一个相应的结束标记
2.所有标签的元素和属性的名字都必须使用小写
3.所有的XML标记都必须合理嵌套
4.所有的属性必须用引号""括起来
5.把所有\<和&特殊符号用编码表示
6.给所有属性赋一个值
7.不要在注释内容中使“--”
8.图片必须有说明文字
常见兼容性问题?¶
- png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理.
- 浏览器默认的margin和padding不同。解决方案是加一个全局的{margin:0;padding:0;}来统一。
- IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。
- 浮动ie产生的双倍距离(IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。)
box{ float:left; width:10px; margin:0 0 0 100px;}
.bb{
background-color:#f1ee18;/_所有识别_/
.background-color:#00deff\\9; /_IE6、7、8识别_/
\+background-color:#a200ff;/_IE6、7识别_/
\_background-color:#1e0bd1;/_IE6识别_/
}
这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)
- 渐进识别的方式,从总体中逐渐排除局部。
首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。
接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。
- IE下,可以使用获取常规属性的方法来获取自定义属性,
也可以使用getAttribute()获取自定义属性;
Firefox下,只能使用getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性.
- IE下,event对象有x,y属性,但是没有pageX,pageY属性;
Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.
- 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
- Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.
- 超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
- 怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。现在可以使用html5推荐的写法:
<doctype html>
- 上下margin重合问题
ie和ff都存在,相邻的两个div的margin-left和margin-right不会重合,但是margin-top和margin-bottom却会发生重合。
解决方法,养成良好的代码编写习惯,同时采用margin-top或者同时采用margin-bottom。
- ie6对png图片格式支持不好(引用一段脚本处理)