腾讯财经

1.闭包的理解和项目中的应用。

所谓闭包,其实就是主函数返回的一个子函数,子函数的"生存环境"依赖于主函数中的一些变量,而形成的一个类似于"包"的函数

闭包的优缺点:

  •       局部变量会常驻在内存中;
  •       可以避免使用全局变量,防止全局变量污染;
  •       会造成内存泄漏(有一块内存空间被长期占用,而不被释放)

应用场景:

  • 柯里化
  • 模块化

项目中使用:

防抖节流方法使用

回调函数

面试 | JS 闭包经典使用场景和含闭包必刷题

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较少,上手比较简单,学习成本较低

选择技术栈:

框架本身的问题:

  • 是否成熟?谁在背后支持呢?
  • 具备的功能?
  • 采用什么架构和模式?
  • 生态系统是否丰富?

需要自我反思的问题:

  • 我和我的团队能否轻松学习并掌握?
  • 是否适合我的项目?
  • 开发体验是否足够好?

深入比较选择 Angular 还是 React

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层的变化驱动

再论React与Angular-从数据绑定谈起

5.前端工程化的理解?相关的优化?css和图片的优化?

目前来说,Web业务日益复杂化和多元化,已经不是过去的拼个页面+搞几个jQuery插件就能完成的了。工程复杂了就会产生许多问题,比如:如何进行高效的多人协作?如何保证项目的可维护性?如何提高项目的开发质量?

我认为前端工程化主要应该从模块化、组件化、规范化、自动化四个方面来思考。

  • 模块化

简单来说,模块化就是将一个大文件拆分成相互依赖的小文件,再进行统一的拼装和加载。只有这样,才有多人协作的可能。

JS的模块化

CSS的模块化

资源的模块化(图片、字体)

  • 组件化

组件化≠模块化。模块化只是在文件层面上,对代码或资源的拆分;而组件化是在设计层面上,对UI(用户界面)的拆分。从UI拆分下来的每个包含模板(HTML)+样式(CSS)+逻辑(JS)功能完备的结构单元,我们称之为组件。

  • 规范化

模块化和组件化确定了开发模型,而这些东西的实现就需要规范去落实。规范化其实是工程化中很重要的一个部分,项目初期规范制定的好坏会直接影响到后期的开发质量。

  1. 目录结构的制定
  2. 编码规范
  3. 前后端接口规范
  4. 文档规范
  5. 组件管理
  6. Git分支管理
  7. Commit描述规范
  8. 定期CodeReview
  9. 视觉图标规范
  • 自动化

前端工程化的很多脏活累活都应该交给自动化工具来完成,

图标合并

持续集成

 自动化构建

自动化部署

自动化测试

谁能介绍下web前端工程化?

6.对ts熟悉程度,ts和es6的区别?新项目如何选择语言,为什么?

50个最新TypeScript面试题合集 – TypeScript开发教程

typescript不能不掌握的高级特性(一)

Angular 2的12个经典面试问题汇总(文末附带Angular测试)

8.浏览器和安全相关的问题?

浏览器灵魂之问,请问你能接得住几个?

9.密码等数据的加解密传输方法和过程?

对称加密和非对称加密?

10.怎么保证前端存储密钥的安全性?

要再高一点,可以多重加密,对密钥进行加密(如楼上几位说的),而且最好结合多种加密算法(结合对称加密如AES/DES,非对称加密算法RSA,等等复合加密),这样别人破解复杂度会比较高,但还是能被破解的;

最安全的做法,是进行联机验证,通过你的服务器返回验证结果,验证的程序不要放在服务端,这样比较安全。

11.项目中的问题,微前端的使用?项目拆分组件和模块的依据是什么?

微前端:qiankun使用

模块化只是在文件层面上,对代码或资源的拆分;而组件化是在设计层面上,对UI(用户界面)的拆分。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值