腾讯云|24秋招|前端一面
共70min
- 讲在前面:一些实习相关的细节技术问题就不讲了,讲了意义也不大
实习及其延伸
- 遇到过最有挑战性的任务
- 如何保证重构的质量
- 关注重要的数据
- 代码审查
- 建立良好的测试覆盖率
- 性能监测
- 给一个具体的场景,比如白屏?你怎么通过捕获异常的方式知道页面出现了白屏
- 使用
try...catch
块捕获潜在的异常,并在控制台中输出相关信息,得知哪个模块导致了页面白屏 - 如果有异常,如何进行全局的捕获?
- 在react和原生JS中,使用
window.onerror捕获全局异常
- 在vue中使用
errorHandler 来捕获未被try...catch的全局异常
- 是否了解单元测试,有没有写过?(聊了一下软测比赛)
- 遇到的其他困难?
- Bundle包优化的过程,具体的例子
八股
- Vue响应式原理
- http1.1到http2的变化(详细分析多路服用)
- http请求比较多的情况怎么处理
- 合并http请求、分页加载、延迟加载等方法
- 作用域的类型
- 前端安全相关(攻击方式),富文本渲染到页面上有什么风险
- 大抵是xss攻击和html注入攻击这两个方面的安全风险
手撕代码
// 题目1 // 给定一个正整数 n,你可以做如下操作! // 如果 n 是偶数,则用 n/2换 n 。 // 如果n 是奇数,则可以用 n + 1或n-1替换 // 返回 n 变为 1 所需的 最小换次数。 let res = Infinity; const dfs = (n,step) => { if(n == 1){ res = Math.min(step, res); return; } if(n % 2 == 0){ n = Math.floor(n / 2); dfs(n, step + 1); } else { dfs(n - 1, step + 1); dfs(n + 1, step + 1); } } dfs(8,0); console.log(res);
// 题目2 // 请实现一个JavaScript 函数,用于控制并发请求的数量。 // 该函数接收一个请求函数数组和一个最大并发数作为参数, // 当请求函数数组中的请求函数量超过最大并发数时 // 需要等待当前请求完成后再执行后续请求。 // 函数返回一个 Promise,当所有请求都完成时, // Promise 应该 resolve”所有请求的结果数组。 const limitConcurrency = async (requests, maxConcurrency) => { // 书写代码 const results = [] let currentConcurrency = 0 let currentIndex = 0 async function executeRequest() { if (currentIndex >= requests.length) { return } if (currentConcurrency < maxConcurrency) { const requestFunction = requests[currentIndex] currentIndex++ currentConcurrency++ const result = await requestFunction() results.push(result) currentConcurrency-- // 继续执行下一个请求 executeRequest() } } // 启动初始请求数量 while (currentConcurrency < maxConcurrency) { executeRequest() } // 等待所有请求完成 while (currentIndex < requests.length) { await new Promise(resolve => setTimeout(resolve, 100)) } return results } // 示例请求函数 function request(url) { return new Promise(resolve => { setTimeout(() => { resolve(`Response from${url}`) }, Math.random() * 1000) }) } const requests = [ ()=>request("https://example.com/1"), ()=>request("https://example.com/2"), ()=>request("https://example.com/3"), ()=>request("https://example.com/4"), ()=>request("https://example.com/5") ] limitConcurrency(requests,2).then((results) => { console.log(results); })
反问
- 面试流程:技术面3~4面。 加上HR面都要5面了,不愧是你,鹅
- 技术栈和业务:做的低代码相关的,要求比较高
总结
- 问的没有很难,答的也挺一般的。但是不愧是鹅的一贯作风哦,中午1点约我面试(没给我选择机会),大中午的会议室都被小姐姐们占用去睡午觉了,我差点就找不到地方面试了,因为这个面试又睡不了午觉,我只能说,挂的好,后面又发了几次面试邀约和笔试邀约总之拒得挺爽的