海马学院:2019年前方最专业学习路线图+海量免费配套资源
视频,源代码,笔记,开发工具,流行框架,手册,采访书
资源网盘直接下载
资源获取QQ号:823988211
问题的答案提供了一个思考的方向,答案不一定正确和全面,问:如何设计一个组件封装1。组件封装的目的是重用,提高开发效率和代码质量2。低耦合,单一责任,可重用性,可维护性3。“前端组件设计思想”问:js异步加载的方式1。渲染引擎在遇到脚本标记时停止,当脚本完成时,继续向下渲染2。Defer是“先呈现后执行”。异步是“下载后立即运行”,如果有多个脚本,则按其在页面上出现的顺序加载,多个异步脚本不能保证加载顺序。Set type=module加载es6模块时,异步加载不会阻塞浏览器,当页面呈现时,可以同时添加async属性,异步执行脚本(使用语法点,这等于顶层未定义,可以检测当前代码是否在es6模块中)Q:css动画和js动画的区别1。代码复杂度,JS动画代码比较复杂。2.当动画运行时,根据对动画的控制程度,JS可以制作动画,暂停,取消,终止,CSS可以不添加动画事件。动画性能方面,JS动画不止一个JS过程分析,性能不如CSS动画Q:XSS和CSRF两个跨站点攻击1。XSS跨站点脚本攻击,主要是前端层,用户在输入层插入脚本攻击,改变页面显示,或窃取网站cookie,防范:切勿相信用
所有操作的家庭,使一个逃逸的用户输入,不允许js读写cookies 2。csrf跨站点请求伪造,以您的名义,发送恶意请求,过滤通过cookie和参数。3.我们不能完全消除攻击。只能提高攻击阈值Q:事件委托,目的,函数,写1。将元素或元素组的事件委托给其父元素或外部元素2。优点,减少内存消耗,动态绑定事件3。Target是触发事件的最具体的元素,CurrentTarget是绑定事件的元素(通常在函数中等于这个元素)4。JavaScript事件委托解释Q:线程,进程1。线程是最小的执行单元,进程是最小的资源管理单元2。一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程(通常)3。一个进程对应多个线程是最常见的。Linux、Windows等都是这样实现的。事实上,从理论上讲,这种关系并不确定。一个线程可以有多个进程对应,例如分布式操作系统的一些研究就使用了这种方法。允许线程从一个地址空间移动到另一个地址空间,甚至跨机器调用不同的进程条目(感谢AlienZHOU的补充)Q:负载平衡1。当系统面临大量用户访问,负载过高时,通常需要增加服务器数量进行横向扩展,利用集群和负载均衡来提高整个系统的处理能力2。服务器集群负载平衡原理?问:什么是CDN缓存1。CDN是一种部署策略,根据不同区域部署nginx等服务,将静态资源缓存起来。在项目优化的前端,习惯于添加静态资源哈希值,每次更新都要改变哈希,哈希值改变在融化的时候,服务将检索资源。2.(CDN)是一个战略性部署的整体系统,包括分布式存储、负载均衡、网络请求重定向和内容管理。https://www.zhucesz.com/百度百科问:闭包编写,闭包功能,闭包缺点1。使用闭包的目的是隐藏变量,间接访问变量,在定义函数的词法动作时,调用函数2。闭包内存泄漏,是IE的一个bug,闭包使用完成后,不能恢复闭包引用,导致内存泄漏3。JS中的闭包是什么?4.闭包导致内存泄漏的实验Q:跨域问题,谁限制跨域,如何解决1。浏览器的同源策略导致跨域2。隔离潜在恶意文件的重要安全机制3。jsonp,允许脚本加载第三方资源4。nginx反向代理(nginx服务在内部配置Access-Control-Allow-Origin*)5。cos前端和后端协作设置请求头、Access-Control-Allow-Origin和其他头信息6。iframe嵌套通信,PostMessageQ:JavaScript1中常见的内存泄漏陷阱。内存泄漏会导致许多问题,例如,运行缓慢,崩溃,高延迟2。内存泄漏是指你不能使用(访问)的变量。它仍然占用内存空间,不能再次使用3。意外全局变量,这些变量不会被回收(除非设置为null或重新赋值),尤其是那些用于临时存储大量信息的变量。4.周期函数总是在运行,处理程序不会被回收,jq在移除节点之前移除事件侦听器。https://www.zhucesz.com/代码有对DOM节点的引用当删除dom节点时,引用也保持为6。JavaScript中常见的四个内存泄漏陷阱问:Babel将ES6转换为ES5或ES3的原理是什么?1.它是一个编译器,输入语言是ES6+,编译目标语言是ES52。巴别塔官方工作原则3。解析:将代码字符串解析成抽象语法树4。转换:转换抽象语法树5。重构:根据转换后的抽象语法树生成代码字符串Q:Promise仿真终止1。当新对象保持“挂起”状态时,原始承诺链将停止执行。2.返回新的承诺(()=>{});//返回处于“Pending”状态的Promise对象Q:try catch 1中的Promise。Promise对象中的错误具有冒泡属性,会一直传递回来,直到捕获为止,也就是说,错误总是被下一个catch语句2捕获。当Promise链中抛出错误时,错误消息将沿着链接返回,直到捕获Q:Web站点性能优化1。在http请求方面,减少请求数,请求量,相应的方法是,压缩项目资源,控制项目资源的dns解析在2到4个域名中,提取公告的样式,通用组件,精灵,缓存资源。压缩资源,提取常用资源压缩,提取css,js常用方法3。不要缩放图片,使用雪碧,使用字体图表(阿里矢量库)4。使用CDN,把没用的cookie5放在一边。减少重绘重排,CSS属性读写分离,最好不要用js修改样式,dom离线更新,渲染前指定图片大小6。J代码级优化,减少字符串计算,合理使用闭包,将js资源负载放在首屏底部Q:js自定义事件实现1。Native提供了3种方法来实现自定义事件2。CreateEvent,设置事件类型,是html事件还是鼠标事件3。initEvent初始化事件、事件名称、是否允许冒泡、是否阻止自定义事件4。dispatchEvent触发事件Q:Angular双向数据绑定和vue data双向数据绑定1。两者都是MVVM模式开发的典型代表2。Angular通过脏检测实现,Angular将UI事件、Request事件、Settimeout设置到脏队列中进行事件监控,当数据发生变化时,触发diget方法更新数据,渲染视图3。vue是通过数据属性的数据劫持和发布订阅模式来实现的。大致可以理解为由三个模块组成,Observer完成数据的劫持,Compile完成模板片段的渲染,Watcher充当连接两者的桥梁,订阅数据更改和更新视图q:get和post通信的区别1。Get请求可以缓存,Post不能2。Post比Get稍微安全一点,因为Get请求包含在URL中,并且将由浏览器保存,Post不会,但在捕获数据包的情况下是一样的。https://www.zhucesz.com/可以通过请求体传输比Get更多的数据,而Get没有这种技术。https://www.zhucesz.com/有长度限制,这会影响Get请求,但这个长度限制是浏览器规定的,不是RFC规定的。https://www.zhucesz.com/支持更多编码类型,错了数据类型限制问:你研究过WebPack的一些原理和机制吗?如何实现1。解析webpack配置参数,合并从shell传入并在文件中配置的参数,生成最终配置结果。2.注册所有配置好的插件,使插件能够监听webpack构建生命周期的事件节点,做出相应的响应。3.从配置的条目文件中解析文件,构建AST语法树。找出每个文件依赖于哪些文件,递归。4.在解析文件递归的过程中,根据文件类型和加载器配置,找出合适的加载器对文件进行转换。5.递归后得到每个文件的最终结果。根据条目配置生成代码块https://www.zhucesz.com/。将所有块输出到文件系统。问:ES6模块和CommonJS模块1之间的区别。CommonJs模块输出一个值的副本,ES6模块输出对值2的引用。CommonJS模块在运行时加载,ES6模块是编译时输出接口3的模块变量。ES6的输入,它只是一个符号链接,所以这个变量是只读的,重新赋值它将报告一个错误Q:Module loads AMD,CMD,CommonJS modules/specification 1。这些规范都是为了JavaScript的模块化开发,特别是在浏览器端2。对于依赖模块,AMD提前执行,CMD延迟执行3。CMD推崇依赖接近性,AMD推崇依赖前Q:节点事件循环,js事件循环差异1。事件循环分为6个阶段2。微任务队列的执行时序在浏览器和节点环境3中是不同的。Microtask在事件循环的每个阶段之间执行4.浏览器端,Microtask在事件循环的宏任务执行后执行。递归调用()会导致I/O饥饿,官方建议使用setImmediate()Q:浅拷贝和深拷贝的问题1。深度复制和浅层复制仅适用于复杂类型,如Object和Array 2。也就是说,a和b指向同一个内存,所以如果你改变这些值中的任何一个,另一个值也会改变,这就是浅拷贝3。方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象4。Deep copy,()和()给我们一个基本的解决方案。但是函数不能正确地处理