首页 > 字节前端一面
头像
嚼嚼嚼
编辑于 2021-10-11 09:27
+ 关注

字节前端一面 内部员工回复

校园招聘-前端开发工程师-产品研发岗位,具体部门不太清楚,似乎是某游戏部门。
面试官是一个比较年轻的小哥哥,全程70min。
自我介绍说了自己刚学前端不久,只学了html css js(es5部分比较熟,es6不太熟)。
然后小哥哥问项目中有没有什么比较有意思或者难解决的问题,我...一时想不到。

CSS相关

问题1:定位有哪些?相对定位和绝对定位的区别?
答:①定位有相对定位(relative)、绝对定位(absolute)、静态定位(static)、固定定位(fixed)、粘性定位(sticky)。②Ⅰ相对定位不脱标(在标准流中的位置保留),绝对定位脱标(在标准流中的位置不保留)。Ⅱ相对定位的参照物是自己原来的位置,绝对定位的参照物是离自己最近的设置了相对或绝对定位的父元素。Ⅲ暂时就想到这两个,欢迎补充。

问题2:如果不用定位能怎么实现重叠盒子的效果?
答:浮动也可以。

问题3:有什么效果是浮动能做到而flex做不到的?
答:重叠盒子?这题我真不太会...

JS相关

问题1:(项目里的)原生JS实现轮播图是怎么做的?
答:(实现方法应该不止一种,这里只说我的实现方法)(项目里有五张图片以及五个与之对应的圆点)①先给每个图片和圆点都添加一个自定义属性index,这样就能把图片和圆点一一对应。②一个变量preIndex保存上一次被显示的图片和圆点的index。③给每个圆点添加点击事件,若被点击的圆点的index不等于preIndex,则通过添加删除类名的方式改变显示的图片和高亮的圆点。

问题2:(事件代理)如果一个列表中有很多项,给每个项都绑定点击事件的话会有很大开销,怎么优化?浏览器的事件传播机制是怎样的?有考虑过为什么要有这样的事件流(传进来又传出去)吗?
答:①利用事件冒泡,给父元素绑定点击事件而不是给子元素绑定。②事件捕获(根节点->触发事件的元素)->目标阶段->事件冒泡(触发事件的元素->根节点)。③Ⅰ刚开始是因为网景和微软的浏览器的实现方式不同,后来的浏览器为了兼容他俩所以都这样设计了。Ⅱ更重要的是可以根据想要的效果不同而在不同的阶段处理事件。如果某个元素被点击了,但是我不想让它被触发,就可以在事件捕获阶段把它直接砍掉。

问题3:this指向?
答:①如果作为对象的实例方法被调用就是指向这个对象。②如果在全局环境中调用就是指向window。③可以使用call(),apply()方法改变this的指向。④用new调用的函数中的this指向刚创建的这个对象。

问题4:如果用new调用函数,而这个函数中有return,那它return出来的是什么?
答:①如果没有写return就是返回这个新创建的对象。②如果返回值是非对象类型的数据(比如写了个return 0;),那么还是正常返回这个新创建的对象。③如果写了对象类型的返回值,那么就返回这个显式声明的对象。

问题5:用new调用函数时怎么把新创建的对象与构造函数的原型联系起来的?(或者说实例对象、原型对象和构造函数三者的关系是怎样的?)
答:实例对象与构造函数没有直接关系,原型对象作为纽带将它们联系起来。实例对象的_proto_指向原型对象,原型对象的constructor指向构造函数,构造函数上的prototype指向原型对象。

问题6:代码执行结果?
if([]) console.log(1);
if([].length) console.log(2);
if({}==={}) console.log(3);
if({}=={}) console.log(4);
答:只会输出1。①Object类型中除了null之外的任何对象转换为布尔值都是true,空数组虽然内容为空,但是其本身是一个对象,所以转换为true。输出1。②空数组的长度为0,转换为false,不输出。③任意两个对象都是不等的,因为它们的内存地址不同。所以都是false,不输出。

问题7:代码执行结果?不用let怎么让他输出想要的结果?
for(var i=0;i<6;i++){
    setTimeOut(function(){
        console.log(i)
    },1000);
}
答:①输出6个6。②再多加一层闭包,中间那个立即执行函数形成的闭包保存了不同的 i 值
for(var i=0;i<6;i++){
    setTimeOut(function(num){
        return function(){
            console.log(num);
        }
    }(i),1000);
}

计网相关

问题1:TCP的握手过程?为什么握手要三次?
答:①会有三次握手。客户端发送请求给服务器->服务器返回ACK->客户端返回ACK。②为了确保双方的收发功能都是正常的。

问题2:TCP的拥塞控制(慢启动与快恢复)?
答:二者功能类似,但是阶段不同。功能:都是增大发包的速率。阶段:慢启动在启动的阶段,快恢复在遇到网络拥塞等异常状况的时候。(还不太清楚,留个坑以后填上)

问题3:DNS的查询过程?

编程题

题目:输入一个字符串,要求删除其中由相同字符组成的长度大于等于2的子串。
示例:输入"abbbaca"->删掉bbb变成"aaca"->删掉aa,得到结果"ca"
答:思路:用栈,如果新入栈的字符和栈顶的相同就删掉。
const test = 'abbbaca'; //测试用例
const len = test.length;
const stk = [test[0]];
for (let i = 1; i < len; i++) {
    if (stk.length) {
        let top = stk[stk.length - 1];
        //如果将要入栈的字符和栈顶字符相同,就将指针后移到这个全由相同字符组成的子串的最后一位,并且删除栈顶元素
        if (test[i] === top) {
            while (test[i] === test[i + 1]) {
                i++;
            }
            stk.pop();
        } else {
            stk.push(test[i]);
        }
    } else {
        stk.push(test[i]);
    }
}
console.log(stk.join(''));

反问

我:学前端起步晚,现在也不会多少东西,也没学过框架,对我这样的应聘者更注重考查什么?
小哥哥:①框架只是个工具,框架使用经验的有无不重要。②校招不会很重视项目经验,主要看基础(语言基础,计算机基础等)。③有无潜力与亮点(对问题的好奇心,对技术的钻研等),比如做项目时遇到问题怎么解决的。④写代码(刷题)(嘤嘤嘤

我:哪个部门?
小哥哥:做游戏相关的前端,是一个很大的团队,技术栈很多。

总结

通过这次面试发现自己的JS基础还是不太行(稍微深挖一些就还是比较懵),算法题也刷的少了(小哥哥说给一个比较简单的题,但是我也没写出来......)。

更多模拟面试

全部评论

(16) 回帖
加载中...
话题 回帖