1.闭包的理解和项目中的应用。
所谓闭包,其实就是主函数返回的一个子函数,子函数的"生存环境"依赖于主函数中的一些变量,而形成的一个类似于"包"的函数
闭包的优缺点:
- 局部变量会常驻在内存中;
- 可以避免使用全局变量,防止全局变量污染;
- 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
应用场景:
- 柯里化
- 模块化
项目中使用:
防抖节流方法使用
回调函数
2.三大框架的区别以及各种的特点?如果开始一个新项目怎么选技术栈?为什么?
一、Angular
优点:
1、文档齐全,各种api功能都有介绍。
2、框架功能完整,数据交互HttpClient,路由管理@angular/router,数据管理有rxjs,表单有@angular/forms,且自带XSS保护。
3、模块化管理,代码结构清晰,并提供单元测试工具。
4、模板功能强大,自带各种指令,挺提供依赖注入,管道,服务,装饰器等各种实现方式。
二、React
优势:
1、比较轻量级,比较灵活,可以跟其他框架很好的融合
2、生态完整,redux react-redux react-router-dom等很好的组合
3、单数据流,虚拟dom使项目性能更高
4、api较少,上手比较简单,学习成本较低
选择技术栈:
框架本身的问题:
- 是否成熟?谁在背后支持呢?
- 具备的功能?
- 采用什么架构和模式?
- 生态系统是否丰富?
需要自我反思的问题:
- 我和我的团队能否轻松学习并掌握?
- 是否适合我的项目?
- 开发体验是否足够好?
3.react有哪些优点?
react相对其他框架的”特点“ 是其只提供了view层。
因此不同于vuejs这种mvvm框架,它仅仅相当于mvvm中的v。
由于仅仅涉及到view层,其数据处理,路由什么都需要自己去实现。
1.JSX
2.虚拟DOM,高效速度快,跨浏览器兼容
3.组件化
4.自由灵活,React只是MVC中的View层,自己无法构建大型的应用,需要与已有的框架和库来配合,如:、Flux(前端架构) 、Redux(状态管理)、Axios/Fetch(异步请求)等
5.React Native
4.angular双向绑定和react setState更新视图有什么不同之处?
不同的绑定方式决定了不同的状态管理思想,因此数据绑定方式的不同是React和Angular根本的不同。
通过上图可见,单向绑定和双向绑定:
共同点:Model -> Template -> UI
Model层数据的变化会引起View层变化。
在React中,更新Model的动作即setState。
不同点:捕捉到用户输入时View层(即UI)的更新机制
以输入框为例:
单向绑定:
用户输入时会触发事件(onChange, onKeyDown etc..),在事件回调函数中更新Model,进而更新view。
// two-way: 1) model层(inputValue)的变化会引起ui的变化(同React)
// 2) 用户输入触发事件直接修改dom重新渲染UI,同时更新Model
// (该情境下,UI变化并非由Model引起)结论就是:双向绑定和单向绑定的根本区别就是UI层的变化是否有Model层的变化驱动。
5.前端工程化的理解?相关的优化?css和图片的优化?
目前来说,Web业务日益复杂化和多元化,已经不是过去的拼个页面+搞几个jQuery插件就能完成的了。工程复杂了就会产生许多问题,比如:如何进行高效的多人协作?如何保证项目的可维护性?如何提高项目的开发质量?
我认为前端工程化主要应该从模块化、组件化、规范化、自动化四个方面来思考。
- 模块化
简单来说,模块化就是将一个大文件拆分成相互依赖的小文件,再进行统一的拼装和加载。只有这样,才有多人协作的可能。
JS的模块化
CSS的模块化
资源的模块化(图片、字体)
- 组件化
组件化≠模块化。模块化只是在文件层面上,对代码或资源的拆分;而组件化是在设计层面上,对UI(用户界面)的拆分。从UI拆分下来的每个包含模板(HTML)+样式(CSS)+逻辑(JS)功能完备的结构单元,我们称之为组件。
- 规范化
模块化和组件化确定了开发模型,而这些东西的实现就需要规范去落实。规范化其实是工程化中很重要的一个部分,项目初期规范制定的好坏会直接影响到后期的开发质量。
- 目录结构的制定
- 编码规范
- 前后端接口规范
- 文档规范
- 组件管理
- Git分支管理
- Commit描述规范
- 定期CodeReview
- 视觉图标规范
- 自动化
前端工程化的很多脏活累活都应该交给自动化工具来完成,
图标合并
持续集成
自动化构建
自动化部署
自动化测试
6.对ts熟悉程度,ts和es6的区别?新项目如何选择语言,为什么?
8.浏览器和安全相关的问题?
9.密码等数据的加解密传输方法和过程?
对称加密和非对称加密?
10.怎么保证前端存储密钥的安全性?
要再高一点,可以多重加密,对密钥进行加密(如楼上几位说的),而且最好结合多种加密算法(结合对称加密如AES/DES,非对称加密算法RSA,等等复合加密),这样别人破解复杂度会比较高,但还是能被破解的;
最安全的做法,是进行联机验证,通过你的服务器返回验证结果,验证的程序不要放在服务端,这样比较安全。
11.项目中的问题,微前端的使用?项目拆分组件和模块的依据是什么?
微前端:qiankun使用
模块化只是在文件层面上,对代码或资源的拆分;而组件化是在设计层面上,对UI(用户界面)的拆分。