前端面试题(HTML、CSS、JavaScript)

目录

一、HTML

src与href区别

对html语义化理解

语义化标签有哪些?

script中的defer与async区别

行内元素与块级元素有哪些?

canvas与svg区别

SEO优化

html5新特性

二、CSS

盒模型

选择器优先级

伪元素与伪类

隐藏元素几种方式

水平/垂直居中方式

清除浮动

外边距合并与塌陷

对BFC的理解

flex布局与flex属性

grid网格布局

css单位有哪些

link与@import区别

实现三角形

画一条0.5px的线

移动端1px问题

z-index什么情况下失效?

css3新特性

三、JavaScript

数据类型有哪些

Map和weakMap区别

var let const区别

作用域与作用域链,变量提升

说说你对闭包的理解

垃圾回收机制

事件流与事件委托

箭头函数

this指向

自动装箱

本地存储与cookie

浅拷贝与深拷贝

判断数组类型

构造函数,原型对象与实例对象

原型链

讲讲promise

async与await

事件循环

宏任务与微任务

浮点数精度

定时器精度

大文件上传

CommonJS与ESM区别

ES6+新特性


一、HTML

src与href区别

src和href都用于加载外部资源,浏览器解析时,src会下载外部资源并嵌入到当前标签位置,同时会阻塞其他资源的加载和解析;而href则是建立与外部资源的引用关系,也就是链接,同时不会阻塞其他资源的加载和解析。
src:<script>、<img>    href:<a>、<link>

对html语义化理解

HTML语义化是指根据内容选择合适的标签,优点是浏览器爬虫能更好的识别内容,网页结构清晰,代码可读性强,有利于团队的开发和维护

语义化标签有哪些?

​​布局结构​​:<header>, <footer>, <nav>, <aside>, <article>, <section>
​​内容分组​​:<figure>(配图), <figcaption>(图片说明), <time>(时间)
​​文本标注​​:<mark>(高亮), <blockquote>(引用), <cite>(引用来源)

script中的defer与async区别

defer和async都表示异步加载外部js脚本,defer会等待页面解析完成后再执行,而async会立即执行;多个defer标签保证按先后顺序加载,而多个async标签不能保证顺序

行内元素与块级元素有哪些?

行内元素(display: inline)​​:
<span>, <a>, <strong>, <em>, <img>, <input>
​​特点​​:不独占一行;无法直接设置宽高;边距仅水平有效。

​​块级元素(display: block)​​:
<div>, <p>, <h1>~<h6>, <ul>,<ol>, <li>, <section>,列表,表格,表单,语义化标签
​​特点​​:独占一行;可设置宽高/边距。

canvas与svg区别

Svg和canvas都能用来表示图形,Svg基于XML语法通过数学公式定义图形,而canvas基于像素操作,通过js直接在画布上绘制图形;Svg无限缩放不失真而canvas放大失真;Svg适用于交互复杂或无限缩放不失真;Canvas适用于高频重绘以及像素操作,如高性能游戏和动画

SEO优化

SEO是指通过技术优化和内容策略,提升网站在搜索引擎中的自然排名,从而获取更多流量的过程。
关键HTML优化点:
使用title、meta description等语义化标签;h1到h6层级清晰,h1仅一个;图片加上alt属性,帮助爬虫理解图片

html5新特性

HTML5新增语义化标签,多媒体音视频标签,本地存储local storage和session storage,还有canvas、webSocket、拖拽、表单属性等


二、CSS

盒模型

盒模型由四部分组成,分别为Content内容,padding内边距border边框,margin外边距。盒模型分为标准盒模型和IE盒模型,他们的主要区别在于标准盒模型的width等于内容宽度,而IE盒模型的width等于内容加内边距加边框,box-sizing:content-box是标准盒模型,box-sizing:border-box是IE盒模型。

选择器优先级

选择器优先级从高到低依次为:

  1. !important(覆盖所有)
  2. 内联样式(style="...",权重 1000)
  3. ID 选择器(#id,权重 100)
  4. 类/伪类/属性选择器(.class, :hover,权重 10)
  5. 元素/伪元素选择器(div, ::after,权重 1)
  6. 通配符/关系选择器(*, >, +,权重 0)

伪元素与伪类

伪类用于选择处于特定状态的元素,用单引号,常见的伪类包括:
:hover,:first-child,:last-child,:nth-child(n),:focus。

伪元素用于创建​​虚拟元素,用双引号,常见的伪元素包括:
::before,::after,::first-letter,::first-line。

隐藏元素几种方式

  • display: none    不占位
  • visibility: hidden    占位
  • opacity: 0    占位,可交互
  • position: absolute + left: -9999px    移出屏幕
  • z-index: -999    利用其它元素遮盖
  • clip-path    裁剪
  • transform: scale(0)    将元素缩放至0

水平/垂直居中方式

​​水平居中​​:
行内元素:text-align: center
块级元素:margin: 0 auto(需定宽)

​​垂直居中​​:
单行文本:line-height: 容器高度

水平垂直居中:
Flex:align-items: center;   justify-content: center
Grid:place-items: center; / align-items: center;  justify-items: center
绝对定位 + transform
绝对定位 + 负边距

清除浮动

原因​​:浮动元素脱离文档流,导致父容器高度塌陷无法被撑开。

方法​​:

​​空元素法​​:<div style="clear:both"></div>
​​伪元素法(推荐)​​:

.clearfix::after {content: '';display: block;clear: both;
}

​​父元素 BFC

外边距合并与塌陷

合并:相邻块级元素的垂直外边距会合并,取其中的较大值

塌陷:父元素与子元素的垂直外边距接触,比如子元素添加上外边距会导致父元素一起下移

解决方法:
父元素添加内边距或边框
父元素触发BFC

对BFC的理解

BFC块级格式化上下文,是一个独立的渲染区域,内部元素的布局不影响外部元素。

​​触发条件​​:
float: left | right
overflow: hidden | scroll | auto; (不是visible)
display: flow-root | inline-block | flex | grid 等( 非none 非inline 非block)
position: absolute | fixed ;( 非relative)

flex布局与flex属性

flex弹性布局能够根据不同的屏幕尺寸的变化来始应大小,实现响应式布局

​​容器属性​​:
flex-direction(主轴方向)
justify-content(主轴对齐)
align-items(交叉轴对齐)
align-content(多行对齐)
flex-wrap(换行)
flex: <grow> <shrink> <basis> 【放大比例、缩小比例、初始基本尺寸】
默认值:flex: 0 1 auto
flex: 1 = flex-grow: 1 = flex: 1 1 auto(扩展并填充剩余空间)
flex: 0 0 100px(固定宽高,不缩放)

grid网格布局

​​display: grid;   二维布局
grid-template-columns/rows:定义网格轨道
弹性单位:fr 表示剩余空间的分配比例
函数:repeat(3, 1fr) 表示重复3列,每列宽度相等
grid-gap:行列间距
grid-template-areas:通过命名区域定义布局
grid-area:项目占位区域

css单位有哪些

px 像素
% 相对于父元素的百分比
相对单位em和rem,em相对于父元素字体大小,而rem是相对于根元素的字体大小
与视口相关的单位vw和vh,vw相对于视口的宽度,vh相对于视口的高度
vmin和vmax,分别表示vw和vh中的较小值和较大值

link与@import区别

link不仅可以加载CSS文件,还可以定义RSS等属性;link是并行加载不会阻塞,而import会阻塞后续资源加载;import有兼容性问题而link没有

实现三角形

.box1 {width: 0;height: 0;border: 10px solid transparent;border-bottom: 10px solid #666;
}

画一条0.5px的线

transform: scaleY(0.5)
使用 meta viewport 设为0.5,只针对移动端

移动端1px问题

1px边框在高分辨率屏幕上会显得较粗
设备像素比 = 物理像素 / 逻辑像素
在retina屏的手机上若dpr为2,css里写的1px宽度映射到物理像素上则为2px
解决方案:
使用媒体查询,直接写为0.5px
使用伪元素::after + transform进行缩放
其他方案:使用图片,使用viewport和rem,使用渐变linear-gradient或box-shadow

z-index什么情况下失效?

元素没有设置position属性
元素设置了浮动float
​​父元素z-index小于子元素z-index
父元素设置了position: relative

解决方法:
设置position属性(除了static)
清除浮动
提高父元素z-index
父元素的position改为绝对定位absolute

css3新特性

布局​​:Flexbox、Grid。
​​动画​​:transition、@keyframes 动画。
​​变换​​:transform(旋转、缩放)。
​​视觉​​:圆角(border-radius)、阴影(box-shadow)、渐变(linear-gradient)。
​​响应式​​:媒体查询(@media)。
​​字体​​:@font-face 自定义字体。
​​新单位​​:vw、vh、rem。


三、JavaScript

数据类型有哪些

​​基本类型(7种)​​:
string、number、boolean、null、undefined、symbol、bigint
​​特点​​:值直接存储在栈中
​​引用类型​​:
object(包括 Array、Function、Date 等)
​​特点​​:值存储在堆内存中,栈中存内存地址

Map和weakMap区别

Map和weakMap都是ES6引入的键值对集合,Map的键可以是任意类型,而weakMap的键必须是对象;weakMap对键是弱引用,如果键对象没有其他引用,键值对会被垃圾回收器回收;Map支持遍历而weakMap不可遍历也没有size属性

var let const区别

var和let const的主要区别为var是函数作用域,而let和const是块级作用域;var存在变量提升可以先使用后声明,而let和const存在暂时性死区必须先声明后使用;var可以重复声明,而let和const不能;
let和const的区别为const不能重新赋值,但对象中的值可以修改,因为栈中存储的是地址,值存储在堆中。

暂时性死区是指使用let或const声明变量时,从代码块开始到声明语句执行前的这个区域,在这个区域内访问对象会报错

作用域与作用域链

作用域分为全局作用域、函数作用域和块级作用域。
作用域链:当访问变量时,js会从当前作用域开始查找,逐层向外形成链式查找,直到找到变量或抛出错误

说说你对闭包的理解

闭包是函数与其词法作用域的组合。简单来说,闭包等于内层函数加外层函数的变量。
函数在定义时会关联一个词法环境,记录其作用域链。由于内层函数使用了外层函数的变量,所以即使外层函数执行完毕,其作用域链仍被内层函数引用,无法被垃圾回收。
因此,闭包如果处理不当,可能会造成内存泄露。同时,闭包可以封装私有变量以及保存上下文状态。

垃圾回收机制

可以自动回收不再使用的内存
标记清除法:标记阶段从根对象出发递归遍历并标记所有可到达对象,清除阶段回收未标记的对象
引用计数法:记录每个对象的引用次数,引用次数为零时回收

V8引擎分代回收优化策略:把内存分为新生代和老生代,新生代将内存分为空闲区和使用区,清除时将存活对象复制到空闲区,然后清空使用区;老生代则使用标记清除和标记整理法

事件流与事件委托

事件流描述了事件从触发到处理的完整过程,分为三个阶段:
捕获阶段:事件从根元素window逐渐向下传递到目标元素的父级元素,依次触发各层级的捕获事件,默认不会触发,需要将addEventListener的第三个参数设为true设为捕获监听。
目标阶段:到达目标元素,触发目标事件。
冒泡阶段:从目标元素逐层向上传递,直到根元素window,依次触发各层级的冒泡事件,默认就是冒泡阶段触发监听器。
冒泡模式下会先执行子元素事件,再执行父元素事件,捕获模式相反。
可以使用stopPropagation阻止冒泡。

事件委托:利用事件冒泡机制将子元素事件监听绑定到父元素身上。
通过这种方式,使得父元素能够统一处理子元素事件,适用于动态生成元素以及大量处理同类元素的场景。
事件从子元素冒泡到父元素时,通过event.target获取触发事件的子元素,event.currentTarget是指父元素本身。

箭头函数

箭头函数与普通函数的区别:箭头函数使用起来更简洁,箭头函数自身无this指向的是外层作用域的this;箭头函数没有arguments对象,且不能作为构造函数,没有prototype属性

this指向

this指向​​由调用方式​​决定:
new调用:指向新对象
call/apply/bind:指向绑定的对象
对象方法调用:指向调用对象
普通函数/定时器调用:非严格模式指向 window,严格模式为 undefined
箭头函数:指向外层作用域的 this

自动装箱

当我们尝试访问原始值的属性或方法时,js会创建一个临时的包装对象,从而允许我们访问对应的属性或方法,在执行完毕后会立即销毁该对象

本地存储、cookie、Token

本地存储:存储在浏览器本地。LocalStorage永久存储,sessionStorage会话级存储。
Cookie是服务器发送给客户端的一小段数据,存储在浏览器中,每次请求自动携带,不能跨域。
Token是服务器生成的加密字符串,可存储在缓存中,也可以存储在数据库中,可以跨域,安全性更高。

浅拷贝与深拷贝

浅拷贝:复制对象的第一层属性,适用于简单数据结构。
数组浅拷贝:slice()、concat()、扩展运算符。
对象浅拷贝:Object.assign()、扩展运算符。

深拷贝:复制原对象的所有属性,且彼此之间完全独立。JSON.parse(JSON.stringify()) 缺点是不能处理循环引用以及特殊类型。
手写实现或使用第三方库。

判断数组类型

1. Array.isArray(arr);
2. arr instanceof Array;
3. Object.prototype.toString.call(arr) === '[object Array]';
4. arr.constructor === Array;
5. Object.getPrototypeOf(arr) === Array.prototype;

构造函数,原型对象与实例对象

构造函数是用于创建对象的函数,通过new调用。
原型对象是构造函数的一个属性,用于给所有实例共享属性和方法。
实例对象是通过new创建的对象,继承原型对象的属性和方法。

原型链

当我们访问对象的属性或方法时,js会先查找对象自身的属性,如果没有就去查找其原型对象,如果还没有的话就一直递归向上查找,直到Object.prototype,其原型对象为null,查找结束。

讲讲promise

Promise是js中处理异步操作的标准方案,它解决了回调地域问题,使代码逻辑更清晰。
Promise对象用于管理一个异步操作的最终状态和结果,一共有三种状态:pending等待,fulfilled成功,rejected失败,并且一旦状态确定,就无法再改变。
使用new Promise来创建Promise实例并处理异步操作,使用resolve()和reject()来改变promise的状态,使用.then和.catch来获取结果,可以链式调用。

回调地狱:当异步操作需要按顺序处理,并且前一个异步操作的结果是后一个异步操作的输入时,代码会变成嵌套的回调函数,呈金字塔形。这会导致代码难以维护,且难以处理错误。
可以使用promise解决回调地狱,使用then方法将异步操作的结果按顺序执行,前一个then中返回一个promise对象传递给下一个then,可以用一个统一的catch来捕获错误。
还可以使用async和await来出解决回调地狱。

Promise.all  全部成功则成功,任一失败则立即失败。
Promise.race  取第一个完成的结果(无论成功或失败)。
Promise.allSettled  等待所有任务完成,返回每个任务的结果状态。
Promise.any  取第一个成功的任务,全部失败则聚合错误。

async与await

async和await是处理异步任务的语法糖,基于promise实现,旨在让异步操作的代码写法更接近于同步逻辑。
语法:函数前面加async,函数内部promise操作前加await。
函数始终返回一个 Promise 对象,若函数返回非 Promise 值,会自动包装为 Promise.resolve(value)。
函数内部统一使用try catch来捕获错误。
当执行到await语句时,会暂停当前函数的执行,等待异步操作执行完成,但不会阻塞函数外的代码执行。

事件循环

Js是单线程语言,但通过事件循环实现了非阻塞异步执行。
事件循环:
执行调用栈中的所有同步代码,遇见宏任务放进宏任务队列,遇见微任务放进微任务队列。
执行所有微任务队列中的微任务。
从宏任务队列中取出一个宏任务来执行。
然后执行所有的微任务,然后执行一个宏任务......依次循环

宏任务与微任务

微任务:
Promise.then catch finally
MutationObserver
process.nextTick

宏任务:
I/O操作、UI渲染
setTimeout/setInterval
严格来讲requestAnimationFrame既不是宏任务也不是微任务,它在渲染之前被调用

微任务优先级高于宏任务,因为微任务一般用于紧急更新,要确保在渲染前完成更新。

执行所有同步任务。
执行所有微任务。
执行 requestAnimationFrame 回调。
浏览器进行重绘。
执行所有宏任务。

浮点数精度

在js中,所有数字都基于IEEE754标准,以64位浮点数形式存储。
由于浮点数无法精确表示某些十进制数,例如0.1和0.2在二进制中是无限循环,因此相加后会产生误差。

解决方法:
将浮点数转为整数运算
使用toFixed
使用第三方库

定时器精度

由js是单线程,定时器必须等待当前同步代码执行完毕后才执行,而且定时器是​​宏任务​​,优先级低于微任务和渲染任务。

解决方法:
使用performance.now()
使用setTimeout + 时间偏移校正
使用requestAnimationFrame
使用​​Web Worker​

大文件上传

​​分片上传:将文件切分为多个小块(如 2MB/片),并行上传
​​断点续传:服务器记录已上传分片,客户端上传前先校验
​​Web Worker​​:在后台线程处理文件分片计算,避免阻塞主线程

CommonJS与ESM区别

CommonJS(Node.js):
同步加载,语法:require() / module.exports,运行时加载
ESM(浏览器/Node.js):
可以异步加载,语法:import / export,编译时解析

ES6+新特性

​​let/const、箭头函数、解构赋值、扩展运算符、参数默认值、剩余参数
Promise、async/await、Map/Set、class、Proxy、Reflect、Symbol
可选链(?.)、空值合并(??)





 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89239.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89239.shtml

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

相关文章

Linux-线程控制

线程等待pthread_join()pthread_join 是 Linux 系统中用于线程同步的重要函数&#xff0c;主要作用是等待指定线程结束并回收其资源。基本功能- 阻塞当前调用线程&#xff0c;直到目标线程执行结束。 - 回收目标线程的资源&#xff0c;避免产生“僵尸线程”。 - 可选地获取目标…

RAG优化秘籍:基于Tablestore的知识库答疑系统架构设计

目录一、技术架构设计二、双流程图解析横向架构对比纵向核心流程三、企业级代码实现Python检索核心TypeScript前端接入YAML部署配置四、性能对比验证五、生产级部署方案六、技术前瞻分析附录&#xff1a;完整技术图谱一、技术架构设计 原创架构图 #mermaid-svg-3Ktoc4oH4xlbD6…

i.mx8 RTC问题

项目场景&#xff1a;需要增加外置RTC&#xff0c;保证时间的精准。问题描述&#xff1a;基本情况&#xff0c;外置i2c接口的RTC&#xff0c;注册、读写都正常&#xff0c;但是偶发性重启后&#xff0c;系统时间是2022&#xff0c;rtc时间是1970&#xff0c;都像是恢复了默认时…

数据集相关类代码回顾理解 | utils.make_grid\list comprehension\np.transpose

目录 utils.make_grid list comprehension np.transpose utils.make_grid x_gridutils.make_grid(x_grid, nrow4, padding2) make_grid 函数来自torchvision的utils模块&#xff0c;用于图像数据可视化&#xff0c;将一批图像排列成一个网格。 x_grid&#xff1a;四维图像…

C#中Static关键字解析

本文仅作为参考大佬们文章的总结。 Static关键字是C#语言中一个基础而强大的特性&#xff0c;它能够改变类成员的行为方式和生命周期。本文系统性总结static关键字的各类用法、核心特性、适用场景以及需要注意的问题&#xff0c;以帮助掌握这一重要概念。 一、Static关键字概…

通用综合文字识别联动 MES 系统:OCR 是数据流通的核心

制造业的 MES 系统需实时整合生产数据以调控流程&#xff0c;但车间的工单、物料标签、质检报告等多为纸质或图片形式&#xff0c;传统人工录入不仅滞后&#xff0c;还易出错&#xff0c;导致 MES 系统数据断层。通用综合文字识别借助 OCR 技术&#xff0c;成为连接这些信息与 …

【Linux 学习指南】网络编程基础:从 IP、端口到 Socket 与 TCP/UDP 协议详解

文章目录&#x1f4dd;理解源IP地址和目的IP地址&#x1f320; 认识端口号&#x1f309;端口号范围划分&#x1f309;理解"端口号"和"进程ID"&#x1f309;理解源端口号和目的端口号&#x1f309;理解socket&#x1f320;传输层的典型代表&#x1f309;认识…

React+Next.js+Tailwind CSS 电商 SEO 优化

一、项目背景与技术选型​1. 原始痛点​项目最初基于纯 React 开发&#xff08;SPA 架构&#xff09;&#xff0c;存在三个致命问题&#xff1a;​搜索引擎爬虫无法有效抓取动态渲染的商品详情、分类页内容&#xff1b;​单页面应用 难以实现页面级的 meta 定制&#xff0c;关键…

Process Lasso:提升电脑性能的得力助手

在日常使用电脑的过程中&#xff0c;我们常常会遇到这样的问题&#xff1a;电脑运行缓慢、程序响应迟缓、多任务处理时卡顿不断。这些问题不仅影响工作效率&#xff0c;还让人感到非常烦躁。其实&#xff0c;这些问题很多时候是因为电脑的进程管理不够优化。而Process Lasso正是…

AI驱动的大前端内容创作与个性化推送:资讯类应用实战指南

在信息爆炸的时代&#xff0c;资讯类应用面临两大核心挑战&#xff1a;一是如何高效生产海量优质内容&#xff0c;二是如何让用户从海量信息中快速获取感兴趣的内容。AI技术的介入正在重构资讯类应用的开发模式&#xff0c;从内容生产到用户触达形成全链路智能化。本文将从开发…

2025/7/16——java学习总结

Java IO 流全体系总结&#xff1a;从基础到实战的完整突破&#xff08;重写&#xff09;一、基础核心&#xff1a;字节流与字符流的底层逻辑&#xff08;一&#xff09;字节流&#xff1a;二进制数据的读写基础操作字节输入流&#xff1a;掌握 FileInputStream 单字节读取细节&…

书籍自然数数组的排序(8)0715

题目给定一个长度为N的整型数组arr&#xff0c;其中有N个互不相等的自然数1~N&#xff0c;请实现arr的排序&#xff0c;但是不要把下标0~N-1位置上的数通过直接赋值的方式替换成1~N。解答 arr在调整之后应该事下标从0到N-1的位置上依次放着1~N&#xff0c;即arr[index] index …

【08】MFC入门到精通——MFC模态对话框 和 非模态对话框 解析 及 实例演示

文章目录八、模态对话框 和 非模态对话框 创建及显示8.1 对话框是怎样弹出的8.2 模态对话框的创建及显示8.3 非模态对话框的创建及显示8.4 完整代码下载八、模态对话框 和 非模态对话框 创建及显示 Windows对话框分为两类&#xff1a;模态对话框 和 非模态对话框。 模态对话框…

github上传大文件(多种解决方案)

之前一直用vscode的上传项目方法&#xff0c;这个方便之处在于不用打开git终端输入各种命令&#xff0c;不过麻烦的是我一直无法拉取github上的远程仓库提交&#xff0c;每次只能更新已有的仓库并且上传的文件还不能太大&#xff0c;应该是不能超过100MB&#xff0c;而且直接在…

生活污水深度除磷的方法

生活污水中磷含量过多的危害大家都知道总磷是水质检测的重要指标之一&#xff0c;在污水处理中生活污水往往都会出现总磷超标的现象。生活污水磷超标的危害是多方面的主要包括水体富营养化、危害水生生物、影响人类健康&#xff0c;以及可能引发蓝藻水华等问题。除磷方法污水的…

Flutter瀑布流布局深度实践:打造高性能动态图片墙

本文将深入探讨如何在Flutter中实现高性能瀑布流布局&#xff0c;解决动态高度内容展示的核心难题&#xff0c;并带来卓越的用户体验。引言&#xff1a;瀑布流布局的魅力 瀑布流布局(Pinterest-style layout)已成为现代应用展示图片和内容的黄金标准。它通过错落有致的排列方式…

OpenCV 伽马校正函数gammaCorrection()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于对输入图像应用伽马校正&#xff08;Gamma Correction&#xff09;&#xff0c;这是一种非线性的图像处理技术&#xff0c;主要用于调整…

Linux-局域网构建+VLAN 划分 + 端口 MAC-IP 绑定 + 静态 DHCP

文章目录1. 适用于家庭、工作室或小型企业的局域网构建2. VLAN划分3. VLAN 划分 端口 MAC-IP 绑定 静态 DHCP跳转→网络管理基础复习 1. 适用于家庭、工作室或小型企业的局域网构建 ✅ 一、硬件连线&#xff08;一次到位&#xff09; 光纤入户 → 光猫/宽带调制解调器光猫…

渗透测试路线

渗透测试学习路线报告&#xff08;从入门到高级&#xff09; 引言&#xff1a;渗透测试概述与学习路线设计 渗透测试作为网络安全体系中的核心实践环节&#xff0c;通过模拟真实攻击者的技术手段与攻击路径&#xff0c;主动识别信息系统中的安全漏洞、评估防护机制有效性&#…

Node.js 中http 和 http/2 是两个不同模块对比

1. 核心模块对比 特性http 模块 (HTTP/1.1)http2 模块 (HTTP/2)协议版本HTTP/1.1&#xff08;文本协议&#xff09;HTTP/2&#xff08;二进制协议&#xff09;多路复用不支持&#xff08;需多个 TCP 连接&#xff09;支持&#xff08;单连接多流&#xff09;头部压缩无HPACK 压…