node 面试题(node面试题面试必问)

node 面试题(node面试题面试必问)1 route 和 router 区别 router 用来 span style color ff9900 操作路由 span route 用来获取路由信息 router 是 span style color ff9900 VueRouter span

大家好,我是讯享网,很高兴认识大家。



1、route和router区别?

 \(router用来<span style="color:#ff9900;">操作路由</span>&#xff0c;\)route用来获取路由信息
 \(router是<span style="color:#ff9900;">VueRouter</span>的一个<span style="color:#ff9900;">实例对象</span>&#xff0c;他包含了<span style="color:#ff9900;">所有的路由</span>&#xff0c;包括路由的跳转方法&#xff0c;钩子函数&#xff0c;子对象&#xff08;例如history&#xff09;<br />  \)route是一个路由信息对象,每一个路由都会有一个\(route对象&#xff0c;是一个<span style="color:#ff9900;">局部</span>的对象。</p> <hr /> <h4>2、vue自定义指令&#xff1f;</h4> <p>Vue中的核心内置指令不能够满足我们的需求时&#xff0c;我们定制自定义的指令用来满足开发的需求。<br /> 1、全局自定义指令<br /> 2、私有自定义指令&#xff08;组件内定义指令&#xff09;<br /> 主要目的是在Vue的模板中直接操作DOM。</p> <hr /> <h4>3、vue<strong>优化Vue项目的性能</strong>&#xff1f;</h4> <p>1、<span style="color:#be191c;"><strong>代码分割&#xff1a;</strong></span>使用Webpack的<span style="color:#ff9900;">代码分割</span>功能&#xff0c;按需加载组件<br /> 2、<span style="color:#be191c;"><strong>懒加载&#xff1a;</strong></span>对路由组件进行<span style="color:#ff9900;">懒加载</span>&#xff0c;减少初始加载时间<br /> 3、<span style="color:#be191c;"><strong>虚拟滚动&#xff1a;</strong></span>使用<span style="color:#ff9900;">虚拟滚动</span>技术&#xff0c;仅渲染可见区域的DOM节点&#xff08;虚拟滚动其核心原理是只渲染用户当前可见区域的数据&#xff0c;而不是一次性渲染整个列表或数据集。这样做可以显著提高渲染效率&#xff0c;尤其是在数据量巨大时&#xff0c;能够避免性能下降和页面卡顿的问题&#xff09;<br /> 4、<span style="color:#be191c;"><strong>减少重绘重排&#xff1a;</strong></span>合理使用CSS&#xff0c;避免<span style="color:#ff9900;">频繁的DOM操作</span>。&#xff08;如&#xff1a;减少DOM节点&#xff0c;使用使用CSS的和属性等等&#xff09;<br /> 5、<span style="color:#be191c;"><strong>使用keep-alive&#xff1a;</strong></span>对频繁切换的组件使用<span style="color:#ff9900;">keep-alive</span>&#xff0c;缓存组件状态</p> <hr /> <h4>4、vue模板如何编译&#xff1f;</h4> <p><strong><span style="color:#be191c;">1、解析</span></strong><br /> 将模板字符串解析成抽象语法树&#xff08;AST&#xff09;。这一步是通过一个解析器完成的&#xff0c;它会识别模板中的指令、插值、模板标签等&#xff0c;并构建出一个AST。<br /> 优化<br /><strong><span style="color:#be191c;">2、优化</span></strong><br /> 对AST进行静态分析和优化。例如&#xff0c;标记所有静态节点&#xff0c;以便在虚拟DOM的diff算法中可以快速跳过它们&#xff0c;减少不必要的DOM操作。<br /> 代码生成<br /><strong><span style="color:#be191c;">3、代码生成</span></strong><br /> 将优化后的AST转换成可执行的JavaScript代码。这一步会生成一个render函数&#xff0c;这个函数能够生成虚拟DOM树。</p> <hr /> <h4>5、Vue2响应式原理&#xff1f;</h4> <p>‌Vue2的响应式原理‌主要通过Object.defineProperty方法来实现。Vue2使用Object.defineProperty对组件的data对象的属性进行劫持&#xff08;或称为拦截&#xff09;。当读取data中的属性时触发get&#xff0c;当修改data中的属性时触发set&#xff0c;从而实现对数据的监控和响应式更新‌。</p> <hr /> <h4>6、Vue3响应式原理&#xff1f;</h4> <p>‌<strong>Vue3的响应式原理</strong>‌主要基于JavaScript的Proxy对象&#xff0c;通过数据代理和动态劫持来实现数据的响应式更新。在Vue3中&#xff0c;响应式系统通过Proxy对象来监视数据的变化&#xff0c;并在数据变化时自动更新视图&#xff0c;无需手动操作DOM。</p> <hr /> <h4>7、刷新浏览器后&#xff0c;Vuex的数据是否存在&#xff1f;如何解决&#xff1f;</h4> <p>刷新浏览器后&#xff0c;Vuex的数据会丢失&#xff0c;因为Vuex的状态是保存在<span style="color:#ff9900;">运行内存</span>中的&#xff0c;当页面刷新时&#xff0c;内存中的数据会被清除。页面刷新会重载vue实例&#xff0c;导致store里的数据丢失。</p> <h5>解决方法1&#xff1a;使用vuex-along</h5> <h5>解决方法2&#xff1a;localStorage 或者 sessionStroage</h5> <hr /> <h4>8、vue双向数据绑定原理&#xff1f;</h4> <p>vue的双向绑定&#xff0c;即数据与视图的响应式设计。具体表现为&#xff1a;View 的改变能实时让Model发生变化&#xff0c;而 Model 的变化也能实时更新 View。</p> <p><strong><span style="color:#be191c;">初始化&#xff1a;</span></strong><br /> Vue 在初始化组件时&#xff0c;会遍历数据对象&#xff0c;使用 Object.defineProperty 将每个属性转换为 getter/setter。<br /><strong><span style="color:#be191c;">依赖收集&#xff1a;</span></strong><br /> 当组件渲染时&#xff0c;Vue 会追踪哪些数据被用到了&#xff0c;即收集依赖。<br /><span style="color:#be191c;"><strong>依赖变更通知&#xff1a;</strong></span><br /> 当数据变化时&#xff0c;setter 会被触发&#xff0c;Vue 会通知所有依赖于这个数据的组件。<br /><span style="color:#be191c;"><strong>视图更新&#xff1a;</strong></span><br /> 组件收到通知后&#xff0c;会重新渲染&#xff0c;生成新的虚拟DOM&#xff0c;并与旧的虚拟DOM进行比较&#xff0c;更新实际的DOM。<br /><strong><span style="color:#be191c;">事件处理&#xff1a;</span></strong><br /> 对于表单输入&#xff0c;Vue 会监听 input 事件&#xff0c;并在事件处理函数中更新数据&#xff0c;实现双向绑定。</p> <hr /> <h4>9、computed和watch区别&#xff1f;</h4> <p>1、computed是<span style="color:#ff9900;">计算属性</span>&#xff1b;watch是<span style="color:#ff9900;">监听</span>&#xff0c;监听data中的数据变化。<br /> 2、computed支持缓存&#xff0c;当其<span style="color:#ff9900;">依赖的属性值</span>发生变化时&#xff0c;计算属性会<span style="color:#ff9900;">重新计算</span>&#xff0c;反之&#xff0c;则使用<span style="color:#ff9900;">缓存</span>中的属性值&#xff1b;watch不支持缓存&#xff0c;当对应属性发生变化的时候&#xff0c;响应执行。<br /> 3、computed<span style="color:#ff9900;">不支持异步</span>&#xff0c;有异步操作时无法监听数据变化&#xff1b;watch支持异步操作。<br /> 4、computed第一次加载时就监听&#xff1b;watch默认第一次加载时不监听。</p> <hr /> <h4>10、vue中mixin&#xff1f;</h4> <p>Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。<br /> 本质其实就是一个js对象&#xff0c;它可以包含我们组件中任意功能选项&#xff0c;如data、components、methods、created、computed等。</p> <hr /> <h4>11、Vue中给对象添加新属性时&#xff0c;界面不刷新怎么办?</h4> <p>vue2是用过<span style="color:#ff9900;">Object.defineProperty</span>实现数据响应式&#xff0c; 当我们<span style="color:#ff9900;">访问</span>foo属性或者<span style="color:#ff9900;">设置</span>foo值的时候都能够触发setter与getter。<br /> 但是我们为obj添加新属性的时候&#xff0c;却无法触发事件属性的拦截<br /> 原因是一开始obj的foo属性被设成了<span style="color:#ff9900;">响应式数据</span>&#xff0c;而bar是后面新增的属性&#xff0c;并没有通过Object.defineProperty设置成响应式数据。</p> <pre></pre> <h6><span style="color:#be191c;">解决方法&#xff1a;</span></h6> <p><span style="color:#0d0016;">Object.assign()<br /> 直接使用Object.assign()添加到对象的新属性不会触发更新。应创建一个新的对象&#xff0c;合并原对象和混入对象的属性。</span></p> <hr /> <h4>12、vue组件通讯方式&#xff1f;</h4> <p>1、通过<span style="color:#ff9900;">props</span>传递‌&#xff1a;父组件通过props向子组件传递数据。子组件通过props接收父组件传递的数据。这种方式适用于父子组件之间的通信‌。</p> <p>‌2、通过<span style="color:#ff9900;">emit</span>触发自定义事件&#xff1a;子组件通过emit触发一个事件&#xff0c;父组件监听这个事件来接收数据。这种方式适用于子组件向父组件传递数据‌。</p> <p>3‌、使用<span style="color:#ff9900;">ref‌</span>&#xff1a;父组件可以通过\)refs直接访问子组件的实例,从而调用子组件的方法或访问其数据。这种方式适用于父子组件之间的直接交互‌。

4‌、EventBus(全局事件总线)‌:通过创建一个事件总线,实现非父子关系的组件之间的通信。这种方式适用于兄弟组件或跨多级的组件通信‌。

‌5、Vuex‌:Vuex是一个状态管理库,适用于大型应用中组件间的状态管理。通过改变状态来通知其他组件更新‌。

6‌、provide/inject‌:provide和inject可以实现跨级组件的数据传递。provide在祖先组件中提供数据,inject在后代组件中注入数据‌。

7‌、attrs/listeners‌:attrs用于父传子,子传孙的情况;listeners用于孙传子的反向通信。这种方式适用于祖先与后代组件之间的数据传递‌。

8‌、插槽(Slots)‌:插槽用于父组件向子组件插入内容,也可以用于子组件向父组件传递数据‌。

‌9、路由传参‌:通过路由的params和query参数进行组件间的数据传递。这种方式适用于通过路由进行的数据传递‌。


讯享网


1、行内元素有哪些?块级元素有哪些?空元素有那些?行内元素和块级元素有什么区别?

行内元素:
&lt;span&gt;、&lt;a&gt;、&lt;img&gt;、&lt;br&gt;、&lt;strong&gt; 、&lt;b&gt;、&lt;em&gt; 、&lt;i&gt;、&lt;input&gt;、&lt;label&gt;、&lt;select&gt; 、 &lt;option&gt;
块级元素:
&lt;div&gt;、&lt;p&gt;、&lt;hr&gt; 、&lt;h1&gt; 到 &lt;h6&gt; 、&lt;ul&gt;、&lt;ol&gt; 、&lt;li&gt; 、&lt;table&gt;、&lt;thead&gt;、&lt;tbody&gt;、&lt;tfoot&gt;、&lt;tr&gt;、&lt;th&gt; 、&lt;td&gt;
空元素:
&lt;br&gt;、&lt;img&gt;、&lt;input&gt;、&lt;meta&gt;、&lt;link&gt;、&lt;hr&gt;
区别:
行内元素不可以设置宽高,不独占一行
块级元素可以设置宽高,独占一行


2、简述一下你对HTML语义化的理解?

语义化是指 根据内容的结构(内容语义化),选择合适的标签(代码语义化)
语义化的好处:
1、语义化使代码结构清晰,语义明确。更具可读性,便于个人和团队开发和维护
2、屏幕阅读器和其他辅助技术可以更好地传达语义化的 HTML,从而帮助视障用户等残障人士更好地访问网页内容。
3、语义化有利于SEO,有助于提高网站的搜索引擎排名


3、标签上 title 与 alt 属性的区别是什么?

alt 是给搜索引擎识别,在图像无法显示时的替代文本
title 是关于元素的注释信息,主要是给用户解读。当鼠标放到文字或是图片上时有 title 文字显示。


4、什么是优雅降级渐进增强?

是Web设计和开发中常用的两种策略,

渐进增强:从最基本的功能开始构建应用,然后逐步添加更高级的功能和效果,以提供更好的用户体验。这种策略首先确保所有用户都能访问基本的内容和功能,然后为使用更高级浏览器或设备的用户提供增强的体验。
优雅降级:是从完整的功能开始构建应用,然后针对低版本浏览器进行兼容,确保即使在旧版浏览器或设备中也能提供基本的可用性。这种策略意味着在高级浏览器中实现丰富的功能,而在低版本环境中逐步减少功能,以确保核心内容和功能始终可用。

小讯
上一篇 2025-05-25 07:26
下一篇 2025-06-06 22:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/193687.html