1. H5的新特性?
1) 更加语义化的标签,如<header>、<nav>、<article>等,便于网页结构的表达。
2) 新的多媒体标签,如<video>和<audio>,支持本地视频和音频的播放。
3) 本地存储API,如localStorage和sessionStorage,用于在客户端保存数据。
4) 离线web应用程序缓存,允许网页在断网情况下继续访问。
5) 地理位置API,可以获取用户的地理位置信息。
6) 拖放API,支持在网页中进行拖放操作。
7) Canvas 2D绘图API,可以在网页中动态绘制图形。
2. 事件循环(EventLoop)?
1) 检查宏任务队列(如setTimeout)中是否有可执行的任务,如果有则执行。
2) 执行完所有宏任务后,检查微任务队列(如Promise.then)是否有待执行的任务,依次执行。
3) 执行完微任务后,如果有需要重新渲染的DOM变化,则进行页面重新渲染。
4) 重复上述步骤,进入下一个事件循环。
3. setTimeout和setImmediate执行顺序?
- 1)setTimeout:是宏任务,会被添加到宏任务队列中,在事件循环的宏任务阶段执行。
-2) setImmediate:是Node.js中的特有API,属于微任务,会被添加到微任务队列中,在事件循环的微任务阶段执行。
-3)总结:所以在Node.js环境中,setImmediate会先于setTimeout执行。
4. 环境变量配置?
可以通过process.env来访问和设置环境变量。在不同的操作系统上,设置环境变量的方式有所不同,比如在Windows上使用set命令,在Unix/Linux上使用export命令。在前端开发中,通常会在构建过程中注入一些环境变量,比如API接口地址、版本号等。
5. Git工作流?
1) 主干开发模型(Git Flow):使用master/develop/feature等分支。
2) GitHub Flow:以master分支为主,每个功能单元一个分支,pull request合并。
3) GitLab Flow:在GitHub Flow的基础上,增加了环境分支。
4)具体流程包括:创建分支 -> 提交修改 -> 推送分支 -> 发起合并请求 -> 代码审查 -> 合并到主干。
6. 登录工作流?
1) 传统的表单提交方式,后端返回session ID,前端保存。
2) 基于token的认证,前端获取token并保存在cookie或localStorage中。
3) 单点登录(SSO),通过第三方认证服务完成登录。
4) 基于OAuth2.0的认证授权,如微信登录、Github登录等。
7. JavaScript中的堆栈?
- 1)值类型包括number、string、boolean、null、undefined、symbol,存储在栈内存中。
-2) 引用类型如object、array、function,存储在堆内存中,变量只是保存了对象的引用。
-3)这种区别会影响到变量的赋值和比较行为。在前端面试中,考察这些基本概念是非常常见的。