<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>腾讯-QQ浏览器-校招 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-38/</link><description>Recent content in 腾讯-QQ浏览器-校招 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 06 Jul 2025 13:37:36 +0000</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-38/index.xml" rel="self" type="application/rss+xml"/><item><title>腾讯-QQ浏览器-校招 · 第 1 轮 · 一面</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-38/round-49/</link><pubDate>Sun, 06 Jul 2025 13:37:36 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-38/round-49/</guid><description>&lt;blockquote&gt;
&lt;p&gt;← 已是第一轮 · &lt;a href="https://amatsuzero.github.io/LastStand/posts/frontend/interview-experiences/experience-38/"&gt;返回本次面经&lt;/a&gt; · 已是最后一轮 →&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;本轮概述：&lt;/strong&gt; &lt;strong&gt;中高级难度&lt;/strong&gt;。既有基础概念的深度考察，也有复杂业务场景的解决方案设计，对于校招同学有一定的挑战。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本轮要点：&lt;/strong&gt; ### 考察范围&lt;/p&gt;
&lt;p&gt;这轮面试主要考察三个维度：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;项目实战能力&lt;/strong&gt;：通过虚拟列表、Token管理等具体技术方案考察解决复杂业务问题的能力&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端基础功底&lt;/strong&gt;：涵盖浏览器原理、JavaScript核心机制、CSS布局、性能优化等核心知识&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算机基础&lt;/strong&gt;：通过算法题考察数据结构和算法基础&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="重点准备知识点"&gt;重点准备知识点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;虚拟列表等性能优化方案的深度理解和实践经验&lt;/li&gt;
&lt;li&gt;HTTP协议、浏览器工作原理、缓存机制等网络基础&lt;/li&gt;
&lt;li&gt;JavaScript事件循环、闭包、原型链等语言核心特性&lt;/li&gt;
&lt;li&gt;Vue/React框架原理，特别是响应式系统和虚拟DOM&lt;/li&gt;
&lt;li&gt;CSS布局方案和BFC等核心概念&lt;/li&gt;
&lt;li&gt;前端工程化和性能优化实践&lt;/li&gt;
&lt;li&gt;基础算法和数据结构&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="建议"&gt;建议&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;深入理解前端核心概念，不仅知其然还要知其所以然&lt;/li&gt;
&lt;li&gt;积累实际项目经验，特别是性能优化和复杂业务场景的解决方案&lt;/li&gt;
&lt;li&gt;保持对新技术的敏感度，了解技术发展趋势&lt;/li&gt;
&lt;li&gt;加强计算机基础，算法和数据结构是技术能力的重要体现&lt;/li&gt;
&lt;li&gt;培养系统性思维，能够从多个角度分析和解决问题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本轮共 20 道题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-subjective-fbe5211ce8dc"&gt;1. 请讲一下你项目中的的虚拟列表，包括实现原理、优化过程以及如何设置缓冲区？&lt;/h2&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;核心原理：只渲染可视区域，动态计算显示范围&lt;/li&gt;
&lt;li&gt;关键技术：滚动监听、索引计算、位置缓存&lt;/li&gt;
&lt;li&gt;优化重点：动态高度处理、缓冲区设置、滚动性能&lt;/li&gt;
&lt;li&gt;实际考虑：内存占用与性能平衡&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;虚拟列表是解决大数据量列表渲染性能问题的核心方案。其实现原理基于&amp;quot;只渲染可视区域&amp;quot;的思想。&lt;/p&gt;
&lt;p&gt;具体实现上，首先需要确定容器的可视高度和每个列表项的高度。通过监听滚动事件，实时计算当前滚动位置对应的起始索引和结束索引。核心公式是：起始索引 = Math.floor(scrollTop / itemHeight)，结束索引 = 起始索引 + Math.ceil(containerHeight / itemHeight)。&lt;/p&gt;
&lt;p&gt;在优化过程中遇到的主要挑战是处理动态高度的列表项。解决方案是维护一个位置缓存数组，记录每个列表项的实际高度和累计偏移量。当列表项高度发生变化时，需要更新缓存并重新计算后续项的位置。&lt;/p&gt;
&lt;p&gt;缓冲区设置是性能优化的关键。通常在可视区域前后各增加5-10个列表项作为缓冲，具体数量需要根据列表项的复杂度和渲染耗时来调整。缓冲区过小会导致快速滚动时出现白屏，过大则会增加内存占用和渲染负担。&lt;/p&gt;
&lt;p&gt;对于滚动性能优化，还需要结合防抖节流、requestAnimationFrame等技术，确保滚动的流畅性。&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-2e4835cecc28"&gt;2. 在虚拟列表中，如何结合防抖和节流技术优化性能？&lt;/h2&gt;
&lt;h3 id="题目要点-1"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;节流应用：滚动事件实时响应，保证连续性操作的流畅度&lt;/li&gt;
&lt;li&gt;防抖应用：计算密集操作、数据预加载等非实时场景&lt;/li&gt;
&lt;li&gt;组合策略：根据不同操作特性选择合适的优化方案&lt;/li&gt;
&lt;li&gt;参数调优：时间间隔需要平衡性能和用户体验&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;在虚拟列表的性能优化中，防抖和节流扮演着不同但互补的角色。&lt;/p&gt;
&lt;p&gt;对于滚动事件本身，节流是更合适的选择。因为滚动是连续性操作，用户期望得到实时反馈，而不是等待操作结束后才响应。通常设置16-33ms的节流间隔，对应60-30fps的更新频率，既保证了流畅度又避免了过度计算。&lt;/p&gt;
&lt;p&gt;防抖则主要用于一些计算密集型的操作。比如当滚动停止后，可能需要进行数据预加载、图片懒加载等操作，这些可以使用防抖来避免频繁触发。另外，对于搜索框结合虚拟列表的场景，搜索关键词的处理也适合使用防抖。&lt;/p&gt;
&lt;p&gt;在实际实现中，还需要考虑组合使用的场景。比如可以对滚动事件使用节流进行实时响应，同时对复杂的重新计算逻辑使用防抖进行优化。这样既保证了用户体验，又避免了不必要的性能消耗。&lt;/p&gt;
&lt;p&gt;需要注意的是，节流和防抖的时间设置需要根据具体业务场景调整，过短可能达不到优化效果，过长则会影响用户体验。&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="question-subjective-07425dedaf84"&gt;3. 如何使用 requestAnimationFrame 优化虚拟列表的滚动性能？&lt;/h2&gt;
&lt;h3 id="题目要点-2"&gt;题目要点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;核心优势：与浏览器重绘周期同步，避免无效渲染&lt;/li&gt;
&lt;li&gt;应用场景：DOM更新调度、动画优化、时间切片&lt;/li&gt;
&lt;li&gt;性能提升：减少重排重绘、合并多次操作、避免掉帧&lt;/li&gt;
&lt;li&gt;注意事项：刷新率适配、兼容性考虑&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;requestAnimationFrame是浏览器提供的专门用于动画优化的API，它能够确保回调函数在浏览器下一次重绘之前执行，这对虚拟列表的滚动性能优化具有重要意义。&lt;/p&gt;</description></item></channel></rss>