腾讯云|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点约我面试(没给我选择机会),大中午的会议室都被小姐姐们占用去睡午觉了,我差点就找不到地方面试了,因为这个面试又睡不了午觉,我只能说,挂的好,后面又发了几次面试邀约和笔试邀约总之拒得挺爽的
