字节跳动技术中台日常实习二面凉经-反面教材在此orz 21/11/26

上次一面还算得上是面经

这回是凉经(也算个反思帖吧!)哈哈

  • JS基础不行(考察了贼不熟悉,之前几乎没看过的Promise

  • 稍微有些自信的计算机网络考了一个CDN的内容(真没用过QAQ ),考了个HTTP缓存(只剩一点点印象了,就看到过一次这个概念orz,被深入追问搞懵

  • Vue框架内容本来没有系统学过(问双向绑定的具体实现,虽然是经典八股文,虽然说出来了Proxy代理,但是 我哪儿会啊

  • 算法题 超级经典 最大子序列和 用的贪心算法(经典思路对代码错,这么简单的代码都写不出来。。感觉当时脑子已经乱掉了

  • 问题不多,大部分时间都是面试官在指出我答题时的问题——没用甚至起到副作用的回答太多、答不到点子上、代码能力太弱!

    • 虽然挺伤俺心但是真的挺有收获的!总而言之,感谢这位冷酷(雀氏有一些严肃)帅气(真的挺帅的)的哥哥!我会更加努力哒!

经验总结:

**回答问题时要抓住重点,铺垫的背景可以不讲那么多,只要回答面试者想知道的(想要考察的)点即可!**不知道可以爽快地过/询问面试官正确答案进行进一步探讨?总之尽可能多地让自己会的知识点和自己的闪光点被面试官大大看到!

一面内容回顾

问到了一面时问过的 CDN内容分发网络、Vue中的key

考察面试之后是否有很好的总结

回答中废话太多且关键内容太浅!

从这里面试官大大就对我印象分- -了

上面说的“问题抓不住重点”就是出自这里

经验教训:之后总结一个知识点要加上“精炼版本的解答”——

遵循学习知识三段论

  • 了解这个知识的概念是什么
  • 了解这个知识被提出来的目的是什么?
  • 将知识用一句话(简练地)说清楚!

了解CDN内容分发网络嘛~说一下

开始我说了cdn是用来存储一些资源的类似服务器群体,一些上线的项目会就近使用这其中的资源,可以加速~

面试官大大这样批评我——“cdn能干啥不是我想问的,我想直到的是其中的细则”

菜是原罪呐QAQ

正确回答:

  • CDN依靠部署在各地的边缘服务器 , 通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

  • CDN的关键技术主要有内容存储和分发技术。

  • 最好能是使用过这个。

上面重点标注的==边缘服务器==,中心平台才是重点哈!

“要结合实际应用去理解,而不是背知识点”

金句频出!(也是疯狂吊打我啊)

Vue中的key有什么作用

又问到了这个知识点,很明显答案没让面试官大大满意XD

再来回忆一下官方文档吧!

  • key 的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法在新旧 nodes 对比时辨识 VNodes

    • 如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。
    • 而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素
  • 有相同父元素的子元素必须有独特的 key。重复的 key 会造成渲染错误。

效率上的问题看来是比较被看重的!学习的时候要多注意呐!

另外这里还是得多用,就能记住了~背知识点是不对的哩

计网

说一下HTTP缓存的内容

答了本地磁盘缓存和浏览器缓存

下面追问的部分在小林Coding的《图解网络》中有说过,但是我只在很久前看过一遍…忘记了

追问-说下本地磁盘缓存的细节呢

好久没看这块儿。。给忘掉了

追问-了解浏览器缓存中的强缓存和协商缓存嘛

也是忘掉了。。

http缓存详解,http缓存推荐方案

这篇文章写得不错,推荐~

JS知识考察

这里直接就手写代码了,开始问我了解Promise不~让写一个经典的Promise.all(),这东西…我只是听说过有从没实现过啊…就让面试官大大换一个,

实现sleep函数

很多编程语言里都有sleep()delay()等方法,它能让我们的程序不那么着急的去执行下一步操作,而是延迟、等待一段时间。

最开始用了个语法糖实现被告知不符合要求,需要自己封装一个sleep函数返回promise

async function sleep() {
    await setTimeout(() => {
        console.log("wake up")
    }, 1000)
}
sleep(1000)

主要是对Promise封装不很了解。。这里开始有点懵,后来面试官大大很无奈地给了提示…(这么简单还需要我给提示嘛?面试官大大脸上写满了这句话 我太菜了…)

function sleep(time) {
 	return new Promise(resolve => {
//        setTimeout(() => {
//            resolve()
//        }, time)
        setTimeout(resolve, time)// 这种写法更简单~
    })   
}
sleep(1000).then(() => console.log("wake up"))

算法题

53. 最大子序和

可以暴力解,可以贪心,可以动归的一题

// 1.使用的贪心算法,每轮记录当前的和temp
	// 01 当前和大于零则继续将下一个要遍历的值加到temp上	
	// 02 一旦当前和小于零则放弃当前的和temp,将下一个要遍历的值赋给当前的和temp
// 2.记录最大子序值,每轮进行更新
// 这么简单一个思路我不理解为啥我会写不出来正确代码??!if else不会嘛?
var maxSubArray = function(nums) {
    let tempSum = nums[0]// 存储 现在的和
    let maxSum = nums[0]
    for(let i = 1; i < nums.length; i++) {
        if(tempSum < 0) {
            tempSum = nums[i]
        }
        else {
            tempSum += nums[i]
        }
        maxSum = maxSum > tempSum ? maxSum : tempSum
    }
    return maxSum
};

面试官大大给出的宝贵建议

大部分为面试官大佬的原话,少数进行艺术加工但是大体上就是这个意思

  • 学好基础学科的内容——计算机网络、操作系统

  • 学好前端基础——JavaScript

  • 对框架要熟悉,要了解一些效率上的问题以及部分核心功能的原理(也就是常说的“读源码”)

  • 多敲代码

    • 你看到知识,背下来它,嗯背得很好,下次不要这样了。
    • 公司招实习生不是为了让你来学习的,而是要实现业务,比如说写一个跑马灯,写一个轮播图,要能写得出来啊,代码能力要强!
    • 学习过程中如果有想法就要付诸实践多去敲一敲代码,实现一些具体功能!多敲才能更熟练。
  • 实现算法题时,如果对于高级解法没有特别多自信,那么可以选择先暴力求解A出来再去寻求好解法!

    • 有些想到的好想法不会具体实现可以不提或放在最后题,不要上来把自己的印象分扣光哈!
  • 入职以后,为了更好的未来发展要关注软素质——如何让代码更优雅,更简洁~

你可能感兴趣的:(面试,前端开发之路,js,底层知识,面试,javascript,前端)