迟来的前端面试经验

最近也是在换工作,小公司和大厂(虾皮、腾讯)都有面试。几次面试收获还是比较大的,了解许多自己的短板,当然也拿到了合适的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.rhkb.cn/news/501560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DepthLab: From Partial to Complete 论文解读

目录 一、概述 二、相关工作 1、深度补全 2、单目深度估计 3、已知部分深度的下游任务 三、DepthLab 1、总论 2、编码器和解码器 3、Estimation U-Net 4、Reference U-Net 四、训练操作 1、深度归一化 2、掩模策略 五、数据集 1、训练数据集 2、评估数据集 六、…

直播预告丨社区年度交流会 《RTE 和 AI 融合生态洞察报告 2024》发布

新的一年开始&#xff0c;是时候再深度交流一次了&#xff01;欢迎关注 1 月 4 日周六晚 社区年度交流会的 线上直播 。 这将是一群 实时多模态 AI 开发者 的聚会。 我们将一起探讨 Voice Agent 在 AI 陪伴助手、AI 硬件和 AI 企业服务等应用场景中的技术突破与产品创新。同时…

RP2K:一个面向细粒度图像的大规模零售商品数据集

这是一种用于细粒度图像分类的新的大规模零售产品数据集。与以往专注于相对较少产品的数据集不同&#xff0c;我们收集了2000多种不同零售产品的35万张图像&#xff0c;这些图像直接在真实的零售商店的货架上拍摄。我们的数据集旨在推进零售对象识别的研究&#xff0c;该研究具…

实战设计模式之建造者模式

概述 在实际项目中&#xff0c;我们有时会遇到需要创建复杂对象的情况。这些对象可能包含多个组件或属性&#xff0c;而且每个组件都有自己的配置选项。如果直接使用构造函数或前面介绍的工厂方法来创建这样的对象&#xff0c;可能会导致以下两个严重问题。 1、参数过多。当一个…

我的博客年度之旅:感恩、成长与展望

目录 感恩有你 技能满点 新年新征程 嘿&#xff0c;各位技术大佬、数码潮咖还有屏幕前超爱学习的小伙伴们&#xff01;当新年的钟声即将敲响&#xff0c;我们站在时光的交汇点上&#xff0c;回首过往&#xff0c;满心感慨&#xff1b;展望未来&#xff0c;豪情满怀。过去的这…

聆听音乐 1.5.9 | 畅听全网音乐,支持无损音质下载

聆听音乐手机版是面向广大音乐爱好者的移动应用程序&#xff0c;用户可以随时随地通过手机享受丰富的音乐资源。它提供了多种魅力功能&#xff0c;让用户在手机上畅享更舒适的音乐体验&#xff0c;每位用户都能享受精彩纷呈的收听体验。此外&#xff0c;软件还支持无损音质音乐…

GRU-PFG:利用图神经网络从股票因子中提取股票间相关性

“MCI-GRU: Stock Prediction Model Based on Multi-Head Cross-Attention and Improved GRU” 论文地址&#xff1a;https://arxiv.org/pdf/2410.20679 摘要 金融市场因复杂性及大数据时代的来临&#xff0c;使得准确预测股票走势变得尤为重要。传统的时序分析模型&#xff0…

Leetcode 第426场周赛分析总结

3370. 仅含置位位的最小整数 AC代码 class Solution { public:int smallestNumber(int n) {int x 1;while (x - 1 < n) {x << 1;}return x - 1;} };分析总结 也可以先直接获取n的长度&#xff0c;然后计算得到&#xff0c;这样时间复杂度由O(logn)优化为O(1) 在C…

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列&#xff1f;2. 什么是非聚合列&#xff1f;3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中&#xff1f;5. 如何判断一个列是聚合列还是非聚合列&#xff1f;6. 总结 在 SQL 中&#…

C++ —— 智能指针

内存泄漏 什么是内存泄漏&#xff0c;内存泄漏的危害 什么是内存泄漏&#xff1a;内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内 存泄漏并不是指内存在物理上的消失&#xff0c;而是应用程序分配某段内存后&#xff0c;因为设计错误&#xff0c;失去…

Ethernet 系列(12)-- 基础学习::SOME/IP

目录 1. SOME/IP简介&#xff1a; 1.1 什么是SOME/IP&#xff1a; 1.2 什么时候使用SOME/IP&#xff1a; 2. SOME/IP的特点&#xff1a; 2.1 序列化&#xff1a; 2.2 远程过程调用&#xff08;RPC&#xff09;: 2.3 服务发现&#xff1a; 2.4 发布/订阅&#xff1a; 2.5 UDP消息…

UE5.3 虚幻引擎 Windows插件开发打包(带源码插件打包、无源码插件打包)

0 引言 随着项目体量的增大&#xff0c;所有代码功能都放一起很难管理。所以有什么办法可以将大模块划分成一个个小模块吗。当然有&#xff0c;因为虚幻引擎本身就遇到过这个问题&#xff0c;他的解决办法就是使用插件的形式开发。 例如&#xff0c;一个团队开发了文件I/O模块插…

自学记录鸿蒙API 13:实现多目标识别Object Detection

起步&#xff1a;什么叫多目标识别&#xff1f; 无论是生活中的动物识别、智能相册中的场景分类&#xff0c;还是工业领域的检测任务&#xff0c;都能看到多目标识别的身影。这次&#xff0c;我决定通过学习HarmonyOS最新的Object Detection API&#xff08;API 13&#xff09…

光伏安装在屋顶:安全、环保还是潜在威胁?

随着环保意识的增强和科技的进步&#xff0c;光伏发电作为一种可再生能源技术&#xff0c;正逐渐走进千家万户。然而&#xff0c;随着光伏板的普及&#xff0c;关于其在屋顶安装是否对人体有害的疑问也随之而来。 一、光伏发电的基本原理 光伏发电是利用半导体界面的光生伏特效…

被催更了,2025元旦源码继续免费送

“时间从来不会停下&#xff0c;它只会匆匆流逝。抓住每一刻&#xff0c;我们才不会辜负自己。” 联系作者免费领&#x1f496;源&#x1f496;码。 三联支持&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 更多内容敬请期待。如有需要源码可以联系作者免…

MYsql--------ubantu中安装mysql

在Ubuntu平台上下载、启动和关闭MySQL的方法如下&#xff1a; 下载安装MySQL 更新软件包列表&#xff1a;打开终端&#xff0c;输入以下命令&#xff0c;确保软件包列表是最新的。sudo apt update安装MySQL服务器&#xff1a;执行以下命令安装MySQL服务器。在安装过程中&…

pygame飞机大战

飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 import random import pygame WIND…

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存&#xff0c;与定制删除本地缓存 1&#xff1a;封装请求图片函数 2&#xff1a;访问的图片都会转为本地缓存&#xff0c;当相同的请求url&#xff0c;会在本地调用图片 3&#xff1a;本地缓存管理【windows与andriod已经测试】【有页面】【有…

无线AP安装注意事项

现在的办公楼、酒店等项目中都设计含有网络无线覆盖这一项&#xff0c;在项目实施中&#xff0c;往往采用的是便捷并且后期便于网络无线设备管理的无线ap设备&#xff0c;作为前端无线信号的覆盖。在具体安装无线AP过程中&#xff0c;我们必须要注意以下几点才能保证项目实施完…

Golang的容器编排实践

Golang的容器编排实践 一、Golang中的容器编排概述 作为一种高效的编程语言&#xff0c;其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程&#xff0c;典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…