迟来的前端面试经验

devtools/2025/1/7 23:26:41/

最近也是在换工作,小公司和大厂(虾皮、腾讯)都有面试。几次面试收获还是比较大的,了解许多自己的短板,当然也拿到了合适的offer。本文主要整理下面试遇到的问题和知识点,希望对准备找工作的掘友有所帮助。

基础部分

面试的时候,前端基础知识,还是仔细准备,这一块可以问的东西很多,不管哪一面,都将会有问到,或者通过面试题来考察。

你对css3的动画属性了解多少?

这个问题,是在介绍项目的时候,面试官提出来的。我介绍的项目是一个利用贝塞尔曲线公式,来控制小车做曲线运动移动到对应的位置,抽取奖品。我自己是用js套用公式做的,当时面试官,有提到具体的公式是怎样的(有点慌,确实是百度来的。。。),车的坐标怎么控制,小车是否可以连续运动(项目中采用的是把所有动画函数放入一个数组,采用类似express中间件 next这样的方式来实现)。然后面试就提了上面的问题,我的回答(常规操作),animation开头的后面的属性,能记住的都说了,最后面试官问我知道 css3也可以设置贝塞尔曲线么,还有 animationend 事件 ,然后项目的新的思路就出来了,利用css3 cubic-bezier 结合动画结束事件 animationend ,就可以实现小车的曲线运动了。嗯,服气!

session和cookie的区别是啥?

这个网上答案有很多,建议回答的时候,就是解释一下基本的概念,然后结合场景说明下用途就ok啦。。。。

聊聊js的原型链吧?

这个考的方式有很多。比如直接说出一个 function Person ,让你画图的(如果头脑清晰,可以把函数也是对象的那部分画出来,这是一个加分项);还有就是出一个题,让你说出 p1.proto , Person.prototype 的关系或是各种 proto 的指向问题,建议用纸笔仔细捋捋。

防抖和节流的实现原理,和使用场景? 这个也是一个面试高频问题。防抖类似于,我们排队上地铁,一个人上去后,后面的人才能接着上(one by one),一般用在 搜索展示下拉框 这样的场景;节流,是理解为是 水龙头按节奏的滴水 ,一般是用在有 onresize onsrcoll 这样的场景。

http的缓存机制? 协商缓存(etag,last-mofify)和强制缓存(cache-control)。分别解释了各种概念后,面试官追问,既然有了last-modify为什么还要有etag:1、文件内容没有变的情况,但是last-mofidy会变,比如,打开文件修改,当时内容没有变化。2、就是last-mofify的时间精度是秒级,但后台可能存在一秒对文件多次操作的可能。

聊聊http2的特性?

概念性问题,背背书。。。。

addeventlistener第三个参数作用

项目场景问题

项目中长列表问题怎么优化? 这个主要是虚拟列表,vue和react 都要对应的解决方案。具体的原理,推荐一篇文章:虚拟滚动轮子

聊聊vue总key的作用?

在vue中主要是通过 tag元素标签 和 key 来判断元素是否为相同元素。如果不是同一个元素,就按照新的虚拟节点生成dom,删除老节点。如果项目在进行diff比较,重点是子元素的比较(然后子元素又会重新,按照 tag 和 key 来判断是否同一元素)这是一个递归的过程。具体的实现原理,大家多看看相关的文章,我也在摸索中,哈哈。。。

平常项目中怎么做性能和异常监控?

这个主要是 window.performance 来监控页面的白屏时间、tcp连接时间、资源加载。peferomance。异常监控,window.error

如果有100万的pv访问,前端有什么方案去配合后端处理压力?

这个问题,我当然的就是骨架屏,资源懒加载这样的体验上面的解决方案;还有一些静态数据缓存。有清晰的大佬,可以帮忙解决下,感谢!

编程题

1、形似于数组var arr = [1, [2, [3, [4, 5, [6, 7], 8, [9, 10, [11]]], 12]]]扁平? 这个是之前看过牙羽大佬的 javascript专题 系列文章有提到,上代码

var flat = function (arr) {

while (arr.some(i => Array.isArray(i))) {

arr = [].concat(…arr)

}

return arr

}

复制代码

写出Promise.all的pollify? 上代码:

Promise.all = function (arr) {

const fns = arr || [];

let result = [];

const count = 0;

return new Promise((resolve, reject) => {

for (let i = 0, len = fns.length; i < len; i++) {

count++;

fn.then((data) => {

result[i] = data;

if (count == len) {

resolve(result)

}

}, (reson) => {

// fail

result[i] = reson

reject(result);

})

}

})

}

复制代码

实现下compose函数?

这个最简单的方法是用reduceRight函数来实现,但当时在编码的时候,有点卡壳,采用的while循环来实现,请各位大佬指正哈

function compose(…fns) {

let isFist = true;

return function () {

let result = Array.from(arguments);

let fn;

while (fns.length) {

fn = fns.pop();

  if (isFist) {

    result = fn.apply(null, result)

  } else {

    result = fn.call(null, result)

  }


  isFist = false

}

return result

1

2

3

4

5

6

7

8

9

}

}

复制代码

测试用例:

const add2 = num => num + 2;

const fn1 = compose(add2);

console.log(fn1(3)); //执行后,打印 5

const sum = (a, b) => a + b;

const fn2 = compose(add2, sum); console.log(fn2(3, 2)); //执行后,打印 7

复制代码

统计一个超导文本(只有a-z)里面 每个字母出现的个数?

这个问题就部贴代码了,我也不知道自己的实现有么有问题。我简单说下我的思路:采用分片的思想统计,首先我们需要实现一个函数 doStatic 接受首尾索引(start,end),这个函数用来统计一小段文本(切片),一般是用对象key-value中形势来统计。然后,我们可以采用setTimeout每次从文本截取一段传到函数 dostatic 中,把放回的key-valu对象放到一个数组 result 中。如果文本还有剩余,继续截取,统计。当文本全部截取完后,我们就可以通过回调或者其他方法把数组result拿出来。再这个数组result进行处理。 这是我当时的思路,如果各位掘友有更好的实现和思路,欢迎留言大家一起学习哈!

小结

面试也是检验自己一种方式,只要我们自己总结就一定会有收获offer或者其他技能方面的,一起加油吧!

有想法的小伙伴可以加入Q群:1017810018一起学习探讨经验哦



喜欢的朋友记得点赞、收藏、关注哦!!!


http://www.ppmy.cn/devtools/148438.html

相关文章

重学 Android 自定义 View 系列(十):带指针的渐变环形进度条

前言 该篇文章根据前面 重学 Android 自定义 View 系列(六)&#xff1a;环形进度条 拓展而来。 最终效果如下&#xff1a; 1. 扩展功能 支持进度顺时针或逆时针显示在进度条末尾添加自定义指针图片使用线性渐变为进度条添加颜色效果 2. 关键技术点解析 2.1 进度方向控制的…

【74CH192D+4511减法30进制2022年7月7日】

缘由30秒定时器错误帮我看看-大数据-CSDN问答 电路图用到S1倒计时信号控制&#xff0c;S2置数30。从演示可以看到置数&#xff0c;开始&#xff0c;暂停&#xff0c;继续&#xff0c;等于0时清零&#xff0c;并且灯亮&#xff0c;最后断开信号输入完成所有功能。看题主有自己动…

解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canc

Docker 问题一&#xff1a;解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canc 问题描述问题分析问题处理结论 问题描述 在使用docker进行镜像拉取的时候&#xff0c;存在拉取不下来&#xff0c;或者超市的问题&…

数据仓库中的指标体系模型介绍

数据仓库中的指标体系介绍 文章目录 数据仓库中的指标体系介绍前言什么是指标体系指标体系设计有哪些模型?1. 指标分层模型2. 维度模型3. 指标树模型4. KPI&#xff08;关键绩效指标&#xff09;模型5. 主题域模型6.平衡计分卡&#xff08;BSC&#xff09;模型7.数据指标框架模…

小结:DNS,HTTP,SMTP,IMAP,FTP,Telnet,TCP,ARP,ICMP

DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09; 是互联网的重要组成部分&#xff0c;它负责将人类易读的域名&#xff08;如 www.google.com&#xff09;转换为机器可以识别的 IP 地址&#xff08;如 142.250.72.206&#xff09;。这一过程被称为域名解析…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程&#xff0c;还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收&#xff0c;那么子进程就会变成一个僵尸进程——即程序执行完成&#xff0c;但是进程没有完全结束&#xff0c;其…

医学图像分析工具02:3D Slicer || 医学影像可视化与分析工具 支持第三方插件

3D Slicer 是一款功能全面的开源医学影像分析软件&#xff0c;广泛应用于影像处理、三维建模、影像配准和手术规划等领域。它支持多种医学影像格式&#xff08;如 DICOM、NIfTI&#xff09;和丰富的插件扩展&#xff0c;是神经科学、放射学和生物医学研究中不可或缺的工具。 在…

EdgeX规则引擎eKuiper

EdgeX 规则引擎eKuiper 一、架构设计 LF Edge eKuiper 是物联网数据分析和流式计算引擎。它是一个通用的边缘计算服务或中间件,为资源有限的边缘网关或设备而设计。 eKuiper 采用 Go 语言编写,其架构如下图所示: eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源…