快手主站一面
1.如何学习新技术栈
2.(项目相关)无限滚动列表的优化措施
包括,如何实现无限滚动,Intersection Observer判断是否需要加载,如果滑动很多下,数据量很大了怎么办,缓存如何实现,等等
3.url输入到展示的流程
见[[前端面试常见题-网络和工程化篇]]
4.重排和重绘分别是什么,区别是什么
见[[前端面试常见题-网络和工程化篇]]
5.
<script>
标签为什么要放在<body>
底部,放在<head>
中会有什么影响
解析HTML文档是同步的,遇到<script>
标签就会暂停解析去下载脚本文件;
也就是,会发生脚本阻塞
放在 <head>
中就会出现,下载脚本文件完成之后才继续解析 <body>
部分的HTML,导致白屏时间变长等问题;
放在 <body>
底部就可以保证先构建完成DOM树,页面内容已经完整地显示在屏幕上了,此时再开始下载脚本;
现代的解决方案有 async
和 defer
, 这两个都放在 <head>
中使用;
defer:脚本在HTML文档完全解析之后执行;一般首选
async:异步下载脚本,脚本下载完成后立即执行;对于独立脚本,比如第三方分析和广告可以使用
6.实习和项目中的收获,团队协作的经验
7.实现LRU,最长公共子序列
LRU见[[前端面试常见题-计算机基础篇]]