钉钉前端面试代码题
10262
发布于 未知归属地

前端面试算法题都比较简单,难度不超过 medium。
除了算法题以外,一般会问一些设计题/场景题。
通常都会在无 IDE 的环境下,直接写代码。
不能太过于依赖 IDE 的自动提示/补全,要有意识的记住一些常用包装类型的方法,以及需要养成良好的代码风格。
春招一面钉钉的时候面了以下两个问题,以及一个 165.比较版本号

JavaScript
//评测题目: 1-随机字符串生成
/*
实现一个随机符串生成函数 randomStr(),要求如下:
1. 生成的随机的字符串应该以字母开头,并包含 [a-z][0-9] 这些字符。
2. 生成的字符串长度为 8。
3. 生成的字符串不能够在程序运行的生命周期中存在重复的情形。
*/
const randomStr = (() => {
    let used = new Set()
    let result;
    let map='abcdefghijklmnopqrstuvwxyz0123456789'
    function Random() {
        result = map[Math.floor(Math.random()*26)]
        for (let i = 0; i < 7; i++) {

            let random = map[Math.floor(Math.random() * 36)]
            result += random
        }
        if (used.has(result)) {
            return Random()
        }
        used.add(result)
        return result
    }
    return Random
})()


//评测题目: 3-日志上报
/*
现在有一个基于 http 的前端日志采集系统,为了优化性能,我们需要把较密集的单次上报日志的行为,
改成合并掉 100ms 时间窗口内的单次上报为批量上报。
假设现有的单次上报的函数如下,请改写此函数的实现,不能使用任何库:

假设现有的单次上报的函数如下,请改写此函数的实现,不能使用任何库:
const uploadLog = (logStr) => {
  fetch('https://log.xxx.com', {
    method: 'POST',
    body: JSON.stringify([logStr])
  });
}


注意:
1.没有日志上报调用时,不发生 http 请求。
2.无论日志上报调用有多频繁,http 请求间隔"不小于" 100ms

*/

// uploadLog('123');uploadLog('456');



//考察闭包 + 节流
const uploadLog=(logStr)=>{
    let timer=null;
    let queue=[]
    return()=>{
        queue.push(logStr)
        if (timer) {
            return;
        }

        timer = setTimeout(() => {
            console.log(queue);
            queue=[]
            timer = null;
        }, 100);
    }
}
setInterval(uploadLog([111]),10)
评论 (13)