2024前端面试题分享
前言
最近忙着面试很久没有更新文章了,分享一下我收集的前端面经,当然题目仅供参考(乞求秋招offer)
面试题
响应式布局 ---根据用户的的窗口变化而变化的布局方式
react 的hooks ---官方提供的钩子和自定义的钩子,用来处理状态变化,视图更新,和逻辑复用
useMome 和useCallBack ---没有了解
性能优化(懒加载,缓存,压缩) ---减少网络请求,使用浏览器缓存,减小打包的体积,使用动态路由
webpack打包控制 ---设置打包的文件名,和被打包的文件类型,排除不需要打包的文件、文件夹,转换js的规范
无感刷新 token 的意义 ---使用双token,当主token失效后,刷新token代替请求,用户就不需要重新验证身份,
url输入到浏览器发生了什么 ---会检查本地的dns表查找ip,没有找到则向dns服务器发送请求获取ip,访问到ip后拿到页面数据,开始按html,link,script的顺序渲染页面;这里包含了异步处理,则会被塞到异步队列中等待同步任务处理完后执行异步操作web Woker(接受一个脚本文件,后台使用线程处理,不影响主线程,通过消息事件<message>传递信息)
Webpack为什么打包、进行压缩之后,性能就会提高呢 ---降低了代码的体积,去除了模块化,页面请求的数据变少了,获取脚本的速度变快了
为什么使用webpack ---webpack可以优化web的体积和性能,打包时可以设置文件指纹,保证页面的实时更新,打包后的代码被混淆处理,不便阅读反解,保护代码的版权
对原始值的拆包和解包 ---没有了解
For of和For in的区别 ---for of是迭代对象遍历值的语法糖,基于symbol.iterator属性实现的,for in 是遍历引用类型的属性,从而遍历整个对象的
判断数据类型的方法 ---基本数据类型使用 type of ,引用数据类型使用 instanceof ,要注意的点typeof null 是Object,instanceof是判断原型链上的对象是否存在,数组可以使用Array.isArray来判断,它的原理是将值使用tostring方法和 [array object]对比
深拷贝、浅拷贝 子问题:JSON.parse( JSON.stringify(arr))在深拷贝时有哪些需要注意 ---当对象有undefined和null属性值或者数组内有空数组时,json序列化会排除掉这些空值
数组的常用静态方法和实例方法? ---Array.isArray,Array.from,push,pop,map,filter,splice
子问题:①哪些方法会修改原数组、哪些不会? ---push,pop,splice会改变,map不会改变原数组,但是内部的回调会改变
②数组Pop方法的返回值 ---数组被删除的第一个元素
③使用哪些数组方法可以实现浅拷贝 ---map
④slice()第二个参数为-1是什么意思 ---裁剪到数组的倒数1位,
⑤splice()有什么用 ---可以实现数组的插入,删除
对Promise的理解?Promise规范有了解吗?Promise的缺点 ---promise时异步处理的解决方法,它可以将异步的方法保存起来,使用回调的方式处理异步结果; ;promise对于多次异步的处理会产生大量回调,代码不易维护
子问题:①有哪些静态方法和原型方法②catch方法之后还可以进行链式调用吗 ---实例方法then,catch ,静态方法,all;可以catch方法相当于只处理reject状态的回调,任然会返回一个promise
请求头content-type的类型有哪些 ---html 、image、json
子组件和父组件加载顺序 ---同步先于异步,父组件先于子组件,
事件修饰符.sync ---没有了解,字面意思应该是一个异步事件,推后执行
Vue2中Computed计算属性的特性以及实现原理 ---可以设置值,拦截访问,getter和setter处理
console.log(null == undefined) // true
console.log(true == 2) // false
console.log(null == 0) // false
console.log(1 == '1') // truefunction test(age) {
console.log(age);
var age = 20;
console.log(age);
function age() {}
console.log(age);
}
// 参数function , 20 ,20 ;函数优先会被提到最前面,var将age重新赋值,和传入的age无关
flex 1和 flex auto的区别 ? ---flex 1是 1 1 0,flex auto是 1 1 auto auto的伸缩会将剩下的空间全部取走
http2 和 http1.1的区别? ---不清楚,没有深入了解
说一下浏览器缓存 ---浏览器会保存首次的网络请求资源,对于后续的同名文件和请求,会将保存的资源返回,比如,随机的api请求,多次请求返回的是同一组数据
说一下跨域怎么处理的 ?jsonp说一下原理 ---使用本地服务器代理请求,在返回给页面,
继承方法有哪些 ---class,prototype,类和原型
解决跨域的方式有哪些 ---cors,jsonp
react router有哪些常用的路由模式? ---BrowserRouter 和 HashHistory, ‘/’和‘#’
讲一下扩展运算符的使用,好处是什么,set解构和map解构 ---简化属性的提取,set和map使用数组的结构方式结构
set是否支持forEach循环 --- 支持set的原型上有foreach方法
说一下对ajax的了解,基于什么去实现的,有什么样的一个功能 ---基于xmlhttprequest,可以获取后端传递的json数据,异步不阻塞主进程,并且不会触发页面的整体变化
ajax跟fetch应用上有什么区别,什么时候用ajax,什么时候会用fetch ---ajax基于xmlhttprequest只能在浏览器中使用,fetch是支持浏览器和node
说一下了解的webpack,输入输出和构建流程 ---在webpack.config.js文件中设置打包规则,包括,指定文件夹,文件类型,打包的es6语法转换,
webpack构建好的产物都是什么?你是如何部署的?前端平台的部署是一个什么流程? ---一个主要的html,和其他的js脚本css样式文件,以及静态资源,将打包好的dist文件夹中的文件部署到github的分支,在将这个分支用github的静态page功能部署,暂时没有用过平台部署
github给你分配了一个链接,这个链接是如何代理到你打包好的前端资源上的? ---这个链接会和存放资源的服务器ip构成一个dns表,而打包 好的资源就存放在服务器上
webpack热更新实现原理
react组件通讯的方式有哪些 ---props透传,useContext深层传递的钩子
说一下react的diff算法
输入 url 到请求返回发生了什么
了解浏览器缓存吗?浏览器缓存有哪些?
强缓存和协商缓存
EventLoop是什么?浏览器事件循环和Nodejs事件循环有什么区别?
怎么做前端工程化规范? (prettier、eslint、commitlint、webpack/vite、CI/CD)
Promise 有哪些静态方法?(all、race、allSettled)说一说 Promise.allSettled 方法?
async / await 原理?(generator语法糖)
TypeSctipt 如何将一个联合类型缩小为具体类型?
你的项目的js或css文件大概多大?多大比较合适?为什么?
异步事件都有哪些区别?(宏任务、微任务)
前端常用优化性能方式?
说一说块盒子和内联盒子的特点? a. 两者设置内边距和外边距有什么区别? 内联元素设置边距:左右正常,上下无作用
讲一讲 BFC 和触发的条件?
说一下 JS 变量类型,怎么判断它们 和 它们的优缺点
cookie,session和token的区别
讲一下变量提升
说一下vue组件间的通信
之前做的项目有开发环境和生产环境的区分吗?怎么区分
vue双向绑定中,界面驱动数据的监听方式是什么
ts最大的特点是强类型,你觉得怎么用好他?有必要吗?强调了是两个问题
react会有一个入口文件来运行,运行时发生了什么?
css实现三栏布局
http1和http2的区别
https的加密过程1. 变量作用域和this指向问题,说输出
var bar = 'window'
function say() {
var bar = '111'
console.log(bar)
console.log(this.bar)
}
const obj = {
bar: '222',
say() {
console.log(bar)
console.log(this.bar)
}
}
say()
obj.say()
obj.say = say
obj.say().async函数输出顺序问题
async function f1() {
console.log(1)
}
async function f2() {
console.log(2)
await console.log(3)
// 取消注释后输出顺序又是怎样
// console.log(5)
}
function f3() {
console.log(4)
}
f1()
f2()
f3()
手写题:手写深拷贝 ( 支持 原型继承 和 循环调用 )
实现一个函数,可以将数组转化为树状数据结构
1. 数组只有一个没有 parentId 的元素,为根节点
2. 输出一个根节点,打印出树状结构
// 入参格式参考:
const arr = [
{ id: 1, name: 'i1' },
{ id: 2, name: 'i2', parentId: 1 },
{ id: 4, name: 'i4', parentId: 3 },
{ id: 3, name: 'i3', parentId: 2 },
{ id: 7, name: 'i7', parentId: 3 },
{ id: 8, name: 'i8', parentId: 3 }
]
数组实现reduce、map算法:最大子数组和
算法:最长不重复字符串
① 数组扁平化(函数传入两个参数,第一个为数组,第二个为扁平化层级) ② 实现斐波那契数列
扁平数组 转 树结构找出出现最多次的字符
写一个函数,实现输入的ajax请求串行输出(可用递归、迭代、await都可以)。
二叉树、完全二叉树、满二叉树区别
二叉树遍历时间复杂度,最好最坏
二叉树遍历方式,以哪个节点为主 ?手写监听数组 ---重写原型方法(push,pop,shift,unshift),使用proxy监听对象的方式
链表反转一只青蛙可以一次跳上2个台阶,也可以调试1个台阶,求跳上n级台阶共多少种跳法
算法:括号匹配
写一个重复执行函数
写一个函数遍历统计页面上所有的dom元素,并且以对象的形式返回
以下是本人实际面试的题目
一、
介绍项目中的难点http请求中有什么内容,(http响应头,http状态码,http的传输方式,网络模型,https,tcp/ip)
tcp协议有什么特点
计算机网络的分层
http2.0新增了什么(和http1有什么区别)
react和vue有什么区别
手写题:
判断变量输出var a = 0;
var b = 0;
var c = 0;
function fn(a){
console.log('fn',a++,c);
function fn2(b){
console.log('fn2',a,b,c);
}
var c = 4;
fn = fn2;
}
fn(1)
fn(2)事件循环输出
console.log('start');
async function async1(){
console.log('async1 start')
await async2();
console.log('async1 end')
}
async function async2(){
console.log('async2')
}
setTimeout(()=>{
console.log('setTimeout')
},0)
async1()
new Promise((res)=>{
console.log('Promise1')
res()
}).then(()=>{
console.log('Promise2')
})console.log('end');
反转链表 ,链表有什么特点
反问:
哪里需要加强提升?(知识点应该学习的深入一些,算法需要多练)
二、写一个vue项目,你会怎么实现
vue3的生命周期
solt插槽是怎么使用的sesstion和cookie
跨域问题怎么解决
是否了解web安全
for in和for of{
a:1 ,
b: [1,2,3,4,5],
c: ()=>{},
d: {
e: null,
f: {
}
}
}三、
介绍项目,歌词和进度条是怎么保持一致的?项目中歌曲可以播放的格式有哪些?
vue2转vue3怎么实现?
js的事件循环是什么?
反问,公司的技术方向是什么?前端开发人数有多少?
自我介绍问项目问题,echart图表是怎么用的?
h5和css3有没有了解?有什么新特性?
有没有用过ai编程?(colipot)
学习的过程有没有遇到困难不理解的地方?是怎么解决的
遇到不会的问题会怎么查?
认为自己有什么优缺点?
闲聊了几句,家在哪里,目前居住在哪里?
四、
自我介绍
为什么选择学习前端,说一下前端的学习路线
介绍项目的难点以及是怎么解决的
如果项目启动的时候有白屏,怎么解决?
vue2和vue3的区别?proxy实现响应式为什么更好?
webpack怎么优化性能?
反问:公司的前端的技术方向是什么?vue
五、
自我介绍
项目中有懒加载的效果是怎么实现的?
知道块级标签和行内标签是怎么排布的吗?分别有哪些标签呢?
input标签有哪些type类型?
了解语义化标签吗?有哪些标签是语义化标签呢?
浏览器的标准模式和怪异模式,怪异模式下会怎么渲染dom?
css有哪些选择器?伪类选择器有哪些?
css怎么实现一个水平垂直居中的布局?
有哪些position定位属性?分别是什么效果?
js的事件传递机制是怎么样的?(ul里有一个li,触发点击时怎么响应事件,如果要让ul先触发怎么实现?)
反问:公司的前端的技术方向是什么?vue,react,原生
相关文章:
2024前端面试题分享
前言 最近忙着面试很久没有更新文章了,分享一下我收集的前端面经,当然题目仅供参考(乞求秋招offer) 面试题 响应式布局 ---根据用户的的窗口变化而变化的布局方式 react 的hooks ---官方提供的钩子和自定义的钩子…...
数学基础 -- 线性代数之正交矩阵
正交矩阵 正交矩阵是线性代数中的一个重要概念,具有许多优良的性质,在数值计算、线性变换、信号处理等领域有着广泛的应用。 1. 正交矩阵的定义 一个 n n n \times n nn 的方阵 Q Q Q 如果满足以下条件: Q T Q Q Q T I Q^T Q Q Q^T …...
PostgreSQL 17即将发布,新功能Top 3
按照计划,PostgreSQL 17 即将在 2024 年 9 月 26 日发布,目前已经发布了第一个 RC 版本,新版本的功能增强可以参考 Release Notes。 本文给大家分享其中 3 个重大的新增功能。 MERGE 语句增强 MERGE 语句是 PostgreSQL 15 增加的一个新功能…...

心觉:别再做单线程的打工人!换个思路突破
Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松搞定人生挑战,实现心中梦想! 挑战日更写作161/1000(完整记录在下面) 公门洞开纳百川 众心逐梦越千山 号召引领潜力绽 心觉潜意识无间 想让财富翻个2倍…...

深度学习-用神经网络NN实现足球大小球数据分析软件
文章目录 前言一、 数据收集1.1特征数据收集代码实例 二、数据预处理清洗数据特征工程: 三、特征提取四、模型构建五、模型训练与评估总结 前言 预测足球比赛走地大小球(即比赛过程中进球总数是否超过某个预设值)的深度学习模型是一个复杂但有…...

linux 9系统分区扩容
1.可以看到我的是9.2的系统,系统分区:/dev/mapper/rl-root 83G 8.0G 75G 10% / 2.接下来,我们新增一块新的硬盘,而不是直接对这个硬盘的基础上再扩容。 关机,加30G硬盘,再开机 fdisk -l fdisk /dev/…...

Solidity初体验
一、概念知识 什么是智能合约? 智能合约是仅在满足特定条件时才在区块链上部署和执行的功能,无需任何第三方参与。 由于智能合约本质上是不可变的和分布式的,因此它们在编写和部署后无法修改或更新。此外,分布式的意义在于任何…...

大模型笔记01--基于ollama和open-webui快速部署chatgpt
大模型笔记01--基于ollama和open-webui快速部署chatgpt 介绍部署&测试安装ollama运行open-webui测试 注意事项说明 介绍 近年来AI大模型得到快速发展,各种大模型如雨后春笋一样涌出,逐步融入各行各业。与之相关的各类开源大模型系统工具也得到了快速…...
html前段小知识点
1. 什么是HTML? 超文本标记语言是一种 用于创建网页的标准标记语言 HTML 文档包含了HTML 标签及文本内容 也叫文档1.什么是css? CSS (层叠样式表),是一种用来为结构化文档添加样式的计算机语言,CSS 文件扩展名为 .css。 可以设…...

AD7606工作原理以及FPGA控制验证(串行和并行模式)
文章目录 一、AD7606介绍二、AD7606采集原理2.1 AD7606功能框图2.2 AD7606管脚说明 三、AD7606并行模式时序分析以及实现3.1 并行模式时序图3.2 并行模式时序要求3.3 代码编写3.4 仿真观察 四、AD7606串行模式时序分析以及实现4.1 串行模式时序图4.2 串行模式时序要求4.3 代码编…...

如何查看Pod的Container资源占用情况
云原生学习路线导航页(持续更新中) 方法一:直接查看pod的资源占用 kubectl top pods ${pod-name} -n ${ns} 方法二:通过运行的进程,查看pod的某个容器资源占用 1.找到pod所在node容器号:kubectl descri…...

WordPress上可以内容替换的插件
插件下载地址:WordPress内容替换插件 – 果果开发 类型 替换的类型:文章、自定义文章类型、分类、标签、媒体库、页面、评论、数据库表,不同的类型可以替换不同的字段。 替换字段 替换的字段,哪些字段内容需要替换。除了数据库…...

C++ | Leetcode C++题解之第355题设计推特
题目: 题解: class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…...

构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类 引言 在计算机视觉领域中,CIFAR-10数据集是一个经典的基准数据集,广泛用于图像分类任务。本文将介绍如何使用PyTorch框架构建一个简单的卷积神经…...
flowable 根据xml 字符串生成流程图
//获取xml InputStream stream repositoryService.getProcessModel(processDefinitionId); String result IOUtils.toString(stream, StandardCharsets.UTF_8); // 创建 XMLInputFactory XMLInputFactory factory XMLInputFactory.newInstance(); // 从字符…...

AI建模——AI生成3D内容算法产品介绍与模型免费下载
说明: 记录AI文生3D模型、图生3D模型的相关产品;记录其性能、功能、收费与免费方法 0.AI建模产品 Rodin MeshAnything Meshy 生成效果比较: Rodin效果最好、Meshy其次 1.Rodin 官网:gHyperHuman 支持:文生模型、…...

在Go中迅速使用RabbitMQ
文章目录 1 认识1.1 MQ分类1.2 安装1.3 基本流程 2 [Work模型](https://www.rabbitmq.com/tutorials/tutorial-two-go#preparation)3 交换机3.1 fanout3.2 direct3.3 [topic](https://www.rabbitmq.com/tutorials/tutorial-five-go) 4 Golang创建交换机/队列/Publish/Consume/B…...

Windows JDK安装详细教程
一、关于JDK 1.1 简介 Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 JDK(Java Development Kit)是用于开发 Java 应用程序的工具包。它由以下几个主要…...

Ribbon负载均衡底层原理
springcloude服务实例与服务实例之间发送请求,首先根据服务名注册到nacos,然后发送请求,nacos可以根据服务名找到对应的服务实例。 SpringCloudRibbon的底层采用了一个拦截器,拦截了openfeign发出的请求,对地址做了修…...

【C语言可变参数函数的使用与原理分析】
文章目录 1 前言2 实例2.1实例程序2.2程序执行结果2.3 程序分析 3 补充4 总结 1 前言 在编程过程中,有时会遇到需要定义参数数量不固定的函数的情况。 C语言提供了一种灵活的解决方案:变参函数。这种函数能够根据实际调用时的需求,接受任意…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...