一.react与jquery对比
1.数据和视图分离 2.以数据驱动视图
react与vue对比
组件化:react mvvm: vue
二. 说一下对组件化的理解
1.组件的封装 2.组件的复用
组件的封装:视图,数据,变化逻辑(数据驱动视图变化)
组件的复用:props传递,复用
三.JSX本质是什么
JSX语法,JSX解析成JS,独立的标准
JSX语法:html形式,引入JS变量和表达式,if…else,循环,style和className,事件
JSX语法,如何在浏览器运行?
//React.createElement 参数说明:tag,attr,child
React.createElement(‘div’,{id:’div1’},child1,child2,child3)
React.createElement(‘div’,{id:’div1’},[])
JSX解析
JSX其实是语法糖,开发环境会将JSX编译成JS代码,JSX的写法大大降低了学习成本和编码工作量,同时,JSX会增加debug成本
JSX独立的标准
JSX是React引入的,但不是React独有的;
React已经将它作为一个独立标准开放,其他项目也可用
React.createElement是可以自定义修改的
说明:本身功能已经完备;和其他标准兼容和扩展性没有问题。
四.JSX与Vdom之间的关系
为何需要vdom:JSX需要渲染成html,数据驱动视图
React.createElement和h,都能生成vnode
何时patch:ReactDOM.render(…)和setState
自定义组件的解析:初始化实例,然后执行render
五.说一下React setState的过程
setState的异步,vue修改属性也是异步的,setState的过程
setState为何需要异步?
可能会依次执行多次setState,你无法规定、限制用户如何使用setState;没必要每次setState都重新渲染,考虑性能;即便是每次重新,用户也看不到中间的效果;只看到最后的效果即可。
vue的整个实现流程
第一步:解析模板成render函数;第二步,响应式开始监听,第三步,首次渲染,显示页面,且依赖绑定,第四步,data属性变化,触发render.
setState的过程
每个组件实例,都有renderComponent方法(继承自Component实例的方法)
执行renderComponent会重新执行实例的render
render函数返回newVnode,然后拿到preVnode,
执行patch(preVnode,newVnode)
六.阐述自己对React和Vue的认识(开放题)
两者的本质区别:Vue本质是MVVM框架,又MVC发展而来;React本质是前端组件化框架,由后端组件化发展而来。但这并不妨碍它们两者都能实现相同的功能。
看模板和组件化的区别:vue使用模板(最初由angular提出),react使用JSX;模板语法,我更倾向于JSX,模板分离,我更倾向于vue
两者的共同点:都支持组件化,都是数据驱动视图(数据和视图分离)
总结问题答案:国内使用,首选vue。文档更易读、易学、社区够大。如果团队水平较高,推荐使用React。组件化和JSX
前言:
技术选型没有绝对的对与错,技术选型要考虑的因素非常多。
作为面试者,你要有自己的主见。和面试官的观点不一致没关系,只要能说出理由。
七.hybrid
移动端占大部分流量,已经远远超过PC;
一线互联网公司都有自己的App;
这些App中有很大比例的前端代码;
1.什么是hybrid,为何用hybrid?
hybrid是客户端和前端的混合开发,存在的意义在于快速迭代,无需审核。hybrid实现流程图,以及webview和file协议。
hybrid即混合,即前端和客户端的混合开发;需要前端开发人员和客户端开发人员共同配合完成;某些环节也可能涉及到sever端,PS:不要以为自己是前端就可以不理会客户端的知识。
hybrid存在价值:可以快速迭代更新(关键)(无需app审核,思考为何?);体验流畅(和NA的体验基本类似);减少开发和沟通成本,双端共用一套代码。
webview:是app中的一个组件(app中可以有webview,也可以没有)。用于加载h5页面,即一个小型的浏览器内核。
file协议:加载本地文件等的协议。本地文件,快,变态快。http(s)协议:网络加载,慢。“协议”和“标准”很重要!!!
具体实现:不是所有场景都适合使用hybrid;使用NA,体验要求极致,变化不繁琐(如头条的首页);使用hybrid:体验要求高,变化繁琐(如头条的新闻详情页);使用h5,体验无要求,不常用(如举报,反馈等页面)
前端做好静态页面(html,js,css),将文件交给客户端;客户端拿到静态页面,以文件形式存储在app中;客户端在一个webview中;使用file协议加载静态页面。
2.app发布之后,静态文件如何实时更新?静态页面如何获取内容?
要替换每个客户端的静态文件,只能客户端来做(客户端是我们开发的),客户端去server下载最新的静态文件,我们维护sever端的静态文件。
静态页面如何获取内容:不能使用ajax获取。第一个跨域,第二速度慢。客户端获取新闻内容,然后js通讯拿到内容,再渲染
3.介绍一下hybrid更新和上线流程?
分版本,有版本号,如20190630123015
将静态文件压缩成zip包,上传到服务端
客户端每次启动,都去服务端检查版本号
如果服务端版本号大于客户端版本号,就去下载最新的zip包
下载后解压,然后将现有文件覆盖。
要点1:服务端的版本和zip包维护 要点2:更新zip包前,先对比版本号 要点3:下载zip包解压缩,覆盖原来的文件。
4.hybrid和h5的主要区别?
优点:体验更好,和NA的体验基本类似,快速更新迭代,无需app审核
缺点:开发成本高。联调,测试,查bug都比较麻烦;运维成本高。参考此前的上线流程。
场景:hybrid,产品的稳定功能,体验要求高,迭代频繁。h5,单次的运营活动(如xx红包)或不常用功能。
5.前端js和客户端如何通讯?
6.js和客户端通讯的基本形式?
js访问客户端能力,传递参数和回调函数;客户端通过回调函数返回内容。
7.schema协议简介和使用
协议:http,https,http2,tcp/ip,socket,file,schema,ssh
八.vue和jquery区别
1.数据和视图分离,解耦(开放封闭原则) 2.以数据驱动视图,只关心数据变化,DOM操作被封封装
说一下对MVVM的理解
MVVM - Modle View ViewModel
Model数据,对应data
View视图,对应template的html标签
ViewModles数据模型,作为连接View和Model之间的桥梁
九.vue三要素
响应式 1. 关键是理解Object.defineProperty,获取属性get,赋值属性set 2.将data的属性代理到vm上
模板解析 模板是什么 render函数 render函数与vdom
模板是什么,本质:字符串;有逻辑,如v-if v-for等;与html格式很像,但有很大区别;最终还要转换为html来显示;模板最终要转换成js代码,因为:有逻辑(v-if v-for),必须用js才能实现(图灵完备);转换为html渲染页面,必须用js才能实现;因此,模板最终要转换成一个js函数(render函数)。
渲染
render函数-with用法
《js语言精髓》