2022-08-31 01:45:38
独特功能:介绍项目中具有创新性或独特性的功能,例如实现了复杂的交互效果、高效的数据处理等。
性能优化:说明在项目中采取的性能优化措施,如代码压缩、图片优化、缓存策略等,以及这些优化带来的效果提升。
用户体验改进:讲述如何通过设计和技术手段提升用户体验,如响应式设计、友好的界面交互等。
技术技能:列举在实习中学习到的新技术、新框架或新工具,如 Vue、React 的深入使用,Webpack 的配置等。
项目流程:了解并参与了实际项目的开发流程,包括需求分析、设计、开发、测试和上线等环节,学会了如何与团队成员协作。
问题解决能力:分享在实习中遇到的技术难题及解决方法,锻炼了自己独立思考和解决问题的能力。
使用 Array.isArray() 方法:这是最直接和可靠的方法,例如 Array.isArray([1, 2, 3]) 返回 true,Array.isArray("abc") 返回 false。
通过构造函数判断:obj.constructor === Array,但这种方法在对象构造函数被修改时不准确。
避免复杂性:如果浏览器是多线程的,不同线程对 DOM 的操作可能会导致竞态条件和渲染不一致的问题,增加开发的复杂性。
简化编程模型:单线程模型使得 JavaScript 编程更加简单,开发者不需要考虑线程同步和锁的问题。
普通文档流布局:元素按照 HTML 中的顺序依次排列,包括块级元素和行内元素的布局规则。
浮动布局:通过 float 属性使元素脱离文档流,向左或向右浮动,常用于实现图文环绕效果。
定位布局:使用 position 属性(static、relative、absolute、fixed、sticky)来精确控制元素的位置。
Flex 布局:通过设置父元素为 display: flex,可以方便地实现子元素在水平或垂直方向上的灵活排列和对齐。
Grid 布局:将页面划分为网格,通过定义行和列来精确控制元素的布局,适用于复杂的页面布局。
响应式原理:Vue2 使用 Object.defineProperty 实现响应式,存在一些局限性,如无法监听数组索引变化和新增属性;Vue3 使用 Proxy 实现响应式,解决了这些问题,性能更好。
组合式 API:Vue3 引入了组合式 API(Composition API),使得代码组织更加灵活,便于复用逻辑;Vue2 主要使用选项式 API(Options API)。
性能优化:Vue3 对虚拟 DOM 进行了优化,采用了静态提升和补丁标志等技术,减少了不必要的渲染,提高了性能。
Fragment:Vue3 支持 Fragment,即一个组件可以有多个根节点;Vue2 一个组件只能有一个根节点。
创建阶段:beforeCreate(实例初始化后,数据观测和事件配置之前)、created(实例创建完成,数据观测和事件配置已完成,但尚未挂载到 DOM)、beforeMount(在挂载开始之前被调用,相关的 render 函数首次被调用)、mounted(实例已挂载到 DOM 上)。
更新阶段:beforeUpdate(数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前)、updated(由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后调用)。
销毁阶段:beforeDestroy(实例销毁之前调用,此时实例仍然完全可用)、destroyed(Vue 实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁)。
CORS(跨域资源共享):服务器设置响应头 Access-Control-Allow-Origin,允许特定域或所有域访问资源。
JSONP:利用 <script> 标签不受同源策略限制的特点,通过动态创建 <script> 标签来获取数据,但只支持 GET 请求。
代理服务器:在开发环境中,可以通过配置代理服务器(如 Webpack 的 devServer.proxy)将跨域请求转发到目标服务器;在生产环境中,可以使用 Nginx 等反向代理服务器实现跨域。
技术难点:详细描述项目中遇到的技术难题,如复杂的交互逻辑、性能瓶颈、兼容性问题等,并说明解决方法和思路。
团队协作难点:讲述在项目中与团队成员沟通协作时遇到的问题,如需求变更、任务分配不合理等,以及如何解决这些问题,保证项目顺利进行。
defer:脚本会在文档解析完成后,DOMContentLoaded 事件触发之前按照它们在文档中的顺序执行。适用于需要依赖 DOM 且对执行顺序有要求的脚本。
async:脚本会在下载完成后立即执行,不保证执行顺序,可能会在文档解析过程中执行。适用于独立运行的脚本,如统计脚本。
强缓存:通过设置 Expires 或 Cache-Control 响应头,浏览器在缓存有效期内直接使用本地缓存,不发送请求到服务器。
协商缓存:通过设置 Last-Modified/If-Modified-Since 或 ETag/If-None-Match 响应头和请求头,浏览器先发送请求到服务器,服务器根据资源的更新情况决定是否使用缓存。
安全性问题:Cookie 数据存储在客户端,容易被窃取和篡改,可能存在 XSS 和 CSRF 攻击风险。
性能问题:每次请求都会携带 Cookie 数据,增加了网络传输量,影响页面加载速度。
存储容量有限:不同浏览器对 Cookie 的存储容量和数量有限制。
连接方式:TCP 是面向连接的协议,在通信前需要建立连接(三次握手),通信结束后需要释放连接(四次挥手);UDP 是无连接的协议,不需要建立连接,直接发送数据。
可靠性:TCP 提供可靠的传输服务,通过确认机制、重传机制和流量控制等保证数据的可靠传输;UDP 不保证数据的可靠传输,可能会丢失、重复或乱序。
传输效率:TCP 由于需要进行连接建立和释放、确认和重传等操作,传输效率相对较低;UDP 传输效率高,适用于对实时性要求较高的应用。
应用场景:TCP 适用于对数据可靠性要求较高的应用,如文件传输、电子邮件等;UDP 适用于对实时性要求较高的应用,如视频直播、在线游戏等。
视频直播:对实时性要求高,允许一定的数据丢失和延迟,UDP 可以快速传输视频数据。
在线游戏:需要实时交互,UDP 的低延迟特性可以保证游戏的流畅性。
DNS 查询:DNS 查询通常只需要发送一个简单的请求和接收一个响应,UDP 的无连接特性可以提高查询效率。
安全性:HTTPS 通过 SSL/TLS 协议对数据进行加密传输,防止数据在传输过程中被窃取和篡改,保护用户隐私和数据安全。
信任机制:HTTPS 使用数字证书来验证服务器的身份,确保用户访问的是合法的网站,防止中间人攻击。
SEO 优化:搜索引擎更倾向于收录 HTTPS 网站,提高网站的排名和曝光率。
宏任务:包括 script(整体代码)、setTimeout、setInterval、setImmediate(Node.js)、I/O 操作、UI 渲染等。
微任务:包括 Promise.then、Promise.catch、Promise.finally、MutationObserver 等。
技术能力:列举在实习中学习到的新技术、新框架或新工具,以及在实际项目中的应用经验。
问题解决能力:分享在实习中遇到的技术难题及解决方法,锻炼了自己独立思考和解决问题的能力。
团队协作能力:讲述在实习中与团队成员沟通协作的经验,学会了如何有效地表达自己的想法和倾听他人的意见。
前端:使用 Blob.slice() 方法将大文件分割成多个小块,通过 Websocket 或 HTTP 请求逐个上传小块。记录已上传的小块索引,在断点续传时从断点处继续上传。
后端:接收前端上传的文件小块,存储在服务器上,并记录已接收的小块信息。当所有小块上传完成后,将小块合并成完整的文件。如果数据传输一半断掉了,前端可以根据已上传的小块索引重新上传未上传的小块。
动态导入:使用 ES6 的动态导入语法 import(),在需要加载模块时才进行导入,实现按需加载。
路由懒加载:在 Vue 或 React 等框架中,使用路由懒加载技术,将不同路由对应的组件在访问该路由时才进行加载,减少初始加载时间。
语法:ES6 使用 import 和 export 语法进行模块导入和导出;CommonJS 使用 require 和 module.exports 语法。
加载机制:ES6 模块是静态加载的,在编译时就能确定模块的依赖关系;CommonJS 模块是动态加载的,在运行时才能确定模块的依赖关系。
输出值:ES6 模块输出的是值的引用,模块内部的变化会影响引用的值;CommonJS 模块输出的是值的拷贝,模块内部的变化不会影响拷贝的值。
URL 格式:hash 模式的 URL 中带有 # 符号,例如
工作原理:hash 模式通过监听 hashchange 事件来实现路由变化;history 模式通过 history.pushState() 和 history.replaceState() 方法来操作浏览器历史记录,并监听 popstate 事件来实现路由变化。
兼容性:hash 模式兼容性更好,可以在所有浏览器中使用;history 模式需要服务器进行配置,否则在刷新页面时可能会出现 404 错误。
Vue Router:可以通过 watch 监听 $route 对象的变化,或者在组件中使用 beforeRouteUpdate 导航守卫。
fill:拉伸填充整个容器,可能会改变元素的宽高比。
contain:保持元素的宽高比,将元素完整地显示在容器内,可能会有留白。
cover:保持元素的宽高比,覆盖整个容器,可能会裁剪元素的部分内容。
none:保持元素的原始尺寸,不进行缩放。
scale-down:比较 none 和 contain 的效果,选择较小的尺寸。
原型链继承:通过将子类的原型指向父类的实例来实现继承。
输入过滤:对用户输入的内容进行过滤,过滤掉