Skip to content

知乎前端日常实习面试

March 9, 2023 | 11:32 AM

知乎面试

记录一下我人生的第一次前端面试吧,知乎前端日常实习 3-7下午三点到四点

CSS部分

常用的选择器包括标签选择器、类选择器、ID选择器、后代选择器、子元素选择器、相邻兄弟选择器、通用选择器和属性选择器等

CSS的权重是指在样式冲突时,某一条样式被应用的优先级。权重值的计算方式是根据选择器的类型和数量来确定的。选择器的权重值从高到低为:!important > 行内样式 > ID选择器 > 类选择器、属性选择器和伪类选择器 > 标签选择器和伪元素选择器。具体来说,ID选择器的权重值为100,类选择器、属性选择器和伪类选择器的权重值为10,标签选择器和伪元素选择器的权重值为1。在样式冲突时,权重值高的样式会覆盖权重值低的样式。

  1. 使用display属性:设置元素的display属性为none,这样元素在页面上不会占用任何空间,同时也不会对其他元素产生影响。
  2. 使用visibility属性:设置元素的visibility属性为hidden,这样元素在页面上不可见,但仍然占用空间。
  3. 使用opacity属性:设置元素的opacity属性为0,这样元素在页面上不可见,但仍然占用空间。
  4. 使用position属性:将元素的position属性设置为absolute或fixed,然后将元素移动到屏幕外或者使其超出容器的范围之外,这样元素在页面上不可见,但仍然占用空间。
  5. 使用z-index属性:将元素的z-index属性设置为负值,这样元素在页面上不可见,但仍然占用空间。
  6. 使用clip属性:将元素的clip属性设置为一个矩形区域,这样元素只会显示矩形区域内的部分,其余部分会被裁剪掉。

使用position属性:将元素的position属性设置为absolute或fixed,然后将元素移动到屏幕外或者使其超出容器的范围之外,这样元素在页面上不可见,但仍然占用空间。

  1. 优先级:CSS中每个选择器都有一个优先级,可以通过优先级来确定哪个样式定义将被应用。如果两个类定义中的样式相冲突,可以通过调整优先级来解决冲突。
  2. 父元素选择器:可以使用父元素选择器来限定样式的范围,从而避免冲突。比如,如果两个类定义中的样式都应用到某个父元素的不同子元素上,可以使用父元素选择器来限定样式的范围,从而避免冲突。
  3. 命名空间:可以使用命名空间来区分不同模块或组件的样式定义,从而避免冲突。比如,可以为不同模块或组件的类定义添加不同的命名空间前缀,从而将它们区分开来。
  4. scoped样式:可以使用scoped样式来将样式限定在特定的组件或模块中,从而避免与其他组件或模块的样式冲突。scoped样式是一种Vue框架提供的特殊样式,可以通过在style标签中添加scoped属性来实现。

后面的有点记不清楚了

JavaScript部分

  • 基本数据类型:Undefined null Boolean number string
  • 引用数据类型:object array function

map()forEach()都是JavaScript数组对象的方法,用于遍历数组。它们的区别在于返回值和使用方式。

forEach()方法会对数组的每个元素执行一次回调函数,没有返回值,仅仅是遍历数组。

arr = [1, 2, 3, 4];
arr.forEach((num) => {
  console.log(num * 2);
});
// 输出2 4 6 8

map()方法会对数组的每个元素执行一次回调函数,并将回调函数的返回值组成一个新的数组返回,不会修改原数组。

arr = [1, 2, 3, 4];
const newArr = arr.map((num) => {
  return num * 2;
});
console.log(newArr); // 输出[2, 4, 6, 8]

因此,如果我们想对数组进行遍历并执行一些操作,可以使用forEach()方法;如果我们需要在遍历数组的同时生成一个新的数组,可以使用map()方法。

记不清楚了后面,反正回答的有点差

Vue部分

项目部分

我这次能拿到这个面试完全看的是组件库的项目,面试官似乎对我组件库的项目很感兴趣

手撕js部分

没有我背的八股js,直接哭死

实现了将一个由键值对对象组成的数组转换成一个键为对象中key属性值、值为value属性值的对象

function change(arr) {
    return arr.reduce((pre, { key, value }) => {
        pre[key] = value;
        return pre
    }, {})
}

let a = change([{ key: 'a', value: '1' }, { key: 'b', value: '2' }])
console.log(a)

我直接不会,然后面试官教我怎么实现

反问

我第一次面试,所以我感觉很烂,您觉得怎么样呢,还有后续吗?

知乎的技术栈是什么呢?

请问你们的组件是直接用现成的还是自己弄呢?

好的,没有了,谢谢您

总结

自己太紧张了,很多地方发挥的很失败,面试没准备好,在面试的时候我才在搭建环境,自己的js基础太差了,git命令也很差,需要恶补一下,知乎的寄了,接下来加油吧!