【全栈知识点】全栈开发知识点

张开发
2026/5/5 2:47:44 15 分钟阅读
【全栈知识点】全栈开发知识点
-----------------------------------AI类-----------------------------------------------AI工作流用过哪些AI辅助编程Cursor AI对话搜索DeepSeek、ChatGPT)用过哪些AI分别有什么使用技巧DeepSeek擅长长上下文推理和复杂逻辑分析技巧是提供完整背景和格式要求如“请用表格对比”。 ChatGPT对话逻辑强技巧是用“角色扮演分步指令”如“你是一个资深架构师分三步帮我设计...”AI知识库有哪些本质是RAG检索增强生成技术。工具层面有Dify、FastGPT、AnythingLLM个人常用的是Obsidian Copilot、Notion AI。你认为 AI 协作开发在岗位中的价值是什么它如何提升效率价值将开发者从“怎么写”的低效细节中解放出来更专注于“做什么”和“为什么这么做”的架构决策。 提效能快速生成样板代码、解释遗留系统逻辑、辅助调试错误、补充单元测试。在你看来AI 协作开发的⻛险有哪些如何避免风险生成代码有安全隐患SQL注入、引入过时依赖、造成开发者过度信任而丧失审查能力。 规避采用“AI建议人脑决策”原则对生成代码进行安全审查开启联网搜索获取最新信息对核心逻辑手动编写测试。在AI Coding中踩坑和经验上下文过长导致“遗忘”早期需求。解法关键约束条件要反复强调或单独维护一份需求文档喂给AI。-----------------------------------后端-----------------------------------------------API网关,即API Gateway网关的作用分别为 1.网关层对外部和内部进行了隔离保障了后台服务的安全性。 2.对外访问控制有网络层面转换成运维层面减少变更的流程和错误成本 3减少客户端和服务的耦合服务可以独立运行并通过网关层做映射 4.通过网关层聚合减少外部访问的频次提升访问效率 5.节约后端服务开发成本减少上线风险 6.为服务熔断灰度发布线上测试提供简单方案 7.便于进行应用层面的扩展 其实也就是将服务于客户端隔离,避免客户端直接调用,为了客户端提供统一入口 保证服务安全性 这里我们采用Ocelot Ocelot是一个用.NET Core实现并且开源的API网关它功能强大包括了路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成 配置简单功能强大大部分核心功能如路由、限流、服务发现等都可通过简单的 JSON 配置完成无需编写大量代码降低了使用门槛和开发工作量。 扩展性强灵活定制提供了中间件机制开发者可以根据特定业务需求编写自定义中间件来扩展其功能满足复杂的定制化场景。 轻量级性能良好基于 .NET Core 构建启动快、内存占用低在常规的微服务场景中能提供出色的性能表现。什么是微服务微服务强调的是将单一应用程序划分为一组小型的、独立的服务。每个服务都运行在自己的进程中并通过轻量级通信机制如HTTP/gRPC协作。 服务拆分通常基于业务边界如订单服务、用户服务、库存服务。每个服务可以是一个独立的ASP.NET Core应用。 独立部署每个服务有自己的Dockerfile独立部署在KubernetesK8s的Pod中。 技术栈.NET 6/8/9 非常适合构建微服务因为它启动快、内存占用相对较低且支持跨平台Linux容器。 关键组件在.NET微服务体系中通常需要引入服务发现如Consul或K8s自带、API网关如Ocelot、YARP、分布式事务如CAP理论下的最终一致性常用DotNetCore.CAP库以及熔断降级如Polly。什么是分布式当一个系统由多个通过网络互联的计算机节点组成共同完成任务时它就是分布式系统。微服务架构一定是分布式的但分布式系统不一定是微服务例如传统的SOA架构或分布式单体。 通信模式 同步gRPC在.NET中性能优于HTTP/REST常用于服务间高效通信。 异步消息队列RabbitMQ、Azure Service Bus、Kafka。.NET提供了完善的客户端库支持。 数据一致性在分布式系统中无法像单体应用那样依赖SQL Server的本地事务ACID。.NET开发者常利用事件驱动架构或Saga模式如使用MassTransit、NServiceBus等框架来保证最终一致性。 状态管理分布式系统通常要求服务是“无状态”的以便水平扩展。若有状态则需借助分布式缓存如Redis.NET中有StackExchange.Redis或分布式数据库如TiDB或Azure Cosmos DB。ORM框架用过哪些优缺点是啥EF Core、DapperEF Core重量级优点是开发快、自动管理SQL、有LINQ和变更追踪缺点是复杂查询性能差、SQL难控制。 Dapper轻量级优点是手写SQL性能高、精细控制缺点是手动写CRUD、没有自动映射关联。什么是WebService指通过Web标准如HTTP、XML、SOAP提供的服务。与WebAPI不同WebService更强调跨平台和契约WSDL比较重而现在流行的WebAPIRESTful或GraphQL更轻量。什么是反射程序在运行时动态获取类型信息方法、属性并创建实例或调用方法的能力。常用于依赖注入框架、ORM映射、插件系统等。注意反射有性能开销和安全风险。ORM中的延迟加载与直接加载有什么异同延迟加载访问导航属性时才去查数据库。优点是减少不必要数据加载缺点是可能产生N1查询问题。 直接加载Eager Loading主查询时用Include()一次性把关联数据带回来。优点是减少查询次数缺点是可能加载很多用不上的数据。什么是堆和栈栈是内存中一块用于存储 局部变量 和 函数调用信息 的区域。它的工作方式遵循 后进先出 (LIFO) 原则特点极快空间有限 堆是用于存储 大型对象 或 生命周期不确定 的数据的内存区域。特点速度慢有GC垃圾回收器管理空间大 指针是一个变量它的值是 另一个变量的内存地址什么是线程和进程每个程序至少有一个进程操作系统分配资源的基本单位每个进程至少有一个线程CPU 执行的基本单位同一进程里多线程的数据是共享的共享全局变量、静态变量和打开的文件句柄。多线程通常是为了解决高并发、并行任务以及快速响应的问题什么是IOC控制反转IOC是控制反转通过依赖注入的方式把获取其他类的控制权其优点是解耦更灵活dotNet的服务是怎么打包的以什么方式在服务器运行打包dotnet publish 生成dll或exe独立部署时。 运行可跨平台用dotnet MyApp.dll运行或部署到IIS、DockerLinux上也可用systemd/nohup守护进程。什么是面向对象以“事物”为中心思考“谁在做什么”。将问题拆解成不同的对象每个对象有自己的属性和行为通过对象之间的交互来解决问题。 三大特性继承、封装、多态什么是面向过程以“事件”为中心思考“发生了什么”。将问题拆解成一系列步骤用函数方法一步步执行。 特点 自顶向下把大问题拆成小问题每个小问题写成一个函数。 数据与操作分离数据是数据函数是函数。函数处理数据。 关注“怎么做”关注执行任务的顺序和逻辑。.net core与.net formwork有啥区别跨平台能力 .NET Framework仅支持 Windows。虽然 Mono 项目可移植到 Linux/macOS但官方运行时是 Windows 绑定。 .NET Core原生支持 Windows、Linux、macOS。可以在 Docker、K8s、各种云环境中无缝运行。 2. 应用程序模型 .NET Framework支持 WinForms、WPF、ASP.NET WebForms、MVC 5、Web API 2、WCF 等。这些技术高度依赖 Windows 底层如 GDI、DirectX、IIS。 .NET Core 早期Core 3.1支持 WinForms 和 WPF但仅限于 Windows。 全新应用模型ASP.NET CoreMVC/Web API/Razor Pages、BlazorServer/WebAssembly、MAUI跨平台桌面移动.NET 8 成熟。 不再支持 WebForms、WCF Server有社区移植版但非官方。 3. 部署方式 .NET Framework通常依赖 系统全局安装 的运行时应用与运行时版本紧耦合。不同应用可能因系统级运行时升级而出现兼容性问题“DLL Hell”。 .NET Core支持 独立部署self-contained运行时和应用打包在一起和 框架依赖部署依赖目标机器上安装的共享运行时。可做到应用级依赖隔离互不干扰。 4. 性能与底层优化 .NET Framework经过十几年打磨但设计上受限于早期硬件和 Windows 特性。JIT 和 GC 相对保守。 .NET Core从头开始设计大量采用 服务器场景优化如 RyuJIT、分层编译、GC 工作模式可配置。.NET Core 3.0 后性能已明显超过 .NET Framework到 .NET 8 更是大幅领先特别是 HTTP 处理、JSON 序列化、内存分配。 5. API 覆盖范围 .NET Framework包含大量 Windows 专用的 API如注册表、EventLog、PerformanceCounter、WMI、AppDomain 高级操作等。还有一些过时的技术Remoting、Enterprise Services。 .NET Core最初是 .NET Framework 的一个子集但从 2.0 开始逐渐补全到 3.0 已经涵盖大部分常用 API。缺失的部分通常是 Windows 强耦合或非跨平台特性。对于必须访问注册表等需求提供 Microsoft.Win32.Registry 包作为 Windows 专用扩展。 6. 开源与社区 .NET Framework闭源部分代码可参考 Reference Source只有 Microsoft 内部团队维护。 .NET Core完全开源MIT 协议代码托管在 GitHub接受社区贡献。开发节奏非常快每年 11 月发布新版本。 7. 版本演进与未来 .NET Framework最后一个大版本是 4.8.12022 年微软已宣布不再计划增加新功能只提供安全更新和可靠性修复。 .NET Core从 5.0 开始更名为 .NET 5去掉 “Core”之后每年一个大版本.NET 6 LTS、7、8 LTS、9 预览。所有新特性、新性能优化都只会出现在现代 .NET 上。.net core3.1与.net 8 有啥区别生命周期与支持 .NET Core 3.1 已于 2022 年 12 月结束支持EOL而 .NET 8 是 LTS长期支持版本支持到 2026 年 11 月适合企业级新项目。 性能 .NET 8 在 JIT、GC、线程池、JSON 序列化等方面有大幅优化。比如 PGO配置文件引导优化 默认启用动态调整热点代码Struct 内联、AVX-512 指令集 支持等。相同业务下.NET 8 的吞吐量通常比 3.1 高 20%~50% 以上。 原生 AOT提前编译 .NET 8 支持真正的 Native AOT可以将应用直接编译为单文件、无依赖、启动极快的原生二进制类似 Go 或 Rust。而 .NET Core 3.1 只能依赖 JIT 或早期的 CoreRT不成熟无法用于生产级 AOT。 最小 APIMinimal APIs .NET 6 引入.NET 8 进一步完善。仅需几行代码即可创建 HTTP 服务大幅减少样板代码不需要 Startup.cs 和显式 Controller。而 .NET Core 3.1 必须使用 MVC 或 WebApi 的传统模式。 内置的 JSON 处理 .NET Core 3.1 开始引入 System.Text.Json但功能相对基础缺少多态、引用循环处理、中文转义等。.NET 8 中 System.Text.Json 已经非常成熟新增了 可自定义的契约模型、JsonSerializerOptions.Web 默认驼峰命名、JsonNode 可变 DOM、以及更快的序列化性能基本可以替代 Newtonsoft.Json。 Blazor 统一模型 .NET Core 3.1 只有 Blazor Server 模式且处于早期阶段。.NET 8 推出了 Blazor United现在叫 Blazor Web App同一组件可同时支持服务端渲染、客户端 WebAssembly 以及流式交互极大简化全栈 Web 开发。 C# 语言版本 .NET Core 3.1 默认 C# 8.0可手动开启 9.0但不完全适配。.NET 8 默认 C# 12带来了主构造函数、集合表达式、默认 lambda 参数、ref readonly 参数等大量语法糖开发效率更高。 其他改进 原生支持 DateOnly / TimeOnly3.1 需要手写库。 TimeProvider 抽象方便测试时间相关逻辑。 更好的容器支持默认非 root 用户、更小的镜像大小、原生调试体验。 EF Core 8对 SQLite 的向量搜索、JSON 列映射、改进的批量更新等。 日志与指标内置 OpenTelemetry 支持更完善的分布式追踪。CTS、CLS、CLR分别代表什么对应的作用是什么CTS通用类型系统确保不同语言C#/VB.NET的类型能互操作比如都继承自System.Object。 CLS公共语言规范CTS的子集规定语言必须支持的规则保证跨语言调用。 CLR公共语言运行时执行.NET程序的虚拟机负责JIT编译、GC、异常处理等。dotNet数据库迁移使用过哪些EF Core的Migrations最常用此外还有FluentMigrator、DbUp。EF Core迁移的要点是设计Model → Add-Migration 生成迁移文件 → Update-Database 应用。说说常用的锁lock是一种什么样的锁lockMonitor最常用的进程内互斥锁。 Mutex可跨进程的互斥锁。 Semaphore / SemaphoreSlim限制并发数量。 ReaderWriterLockSlim读多写少场景提升并发。 SpinLock极短等待时用的自旋锁。 lock 是一种什么样的锁 它是 互斥锁同一时刻只允许一个线程进入临界区。 可重入同一个线程可以多次进入不会死锁。 本质是 C# 语法糖底层是 Monitor.Enter / Exit。 基于对象的 同步块索引 实现锁对象必须是引用类型。 性能比 Mutex 高很多因为不用进内核态适合进程内线程同步。 使用时注意锁对象要私有、只读临界区代码要短避免死锁。线程池的优点有哪些又有哪些不足降低资源开销复用线程避免频繁创建和销毁带来的性能损耗。 提升响应速度任务到达时无需等待线程创建直接分配空闲线程执行。 统一管理限制并发线程数防止系统因线程过多导致内存耗尽或 CPU 过载。 简化开发开发者只需关注业务逻辑不用自己维护线程生命周期。 不足之处 不适合长时间阻塞任务如果任务长时间阻塞比如 I/O 或等待锁会占满线程池线程导致后续任务饥饿。 无法控制优先级线程池中的线程都是默认优先级无法针对关键任务提高优先级。 调试困难任务执行异常时的堆栈和上下文不如显式创建的线程清晰。 可能引发死锁例如任务内部又等待另一个被提交到线程池的任务完成容易形成依赖死锁。 任务无优先级所有任务 FIFO 执行不支持优先级调度需要自己实现。SQL优化的方法有哪些索引优化 在 WHERE、JOIN、ORDER BY、GROUP BY 的字段上建索引。 避免索引失效不在索引列上用函数、隐式类型转换、LIKE %xx 前置模糊匹配。 查询语句优化 只查需要的列不用 SELECT *。 尽量用 EXISTS 代替 IN当子查询结果集大时。 多表 JOIN 时用小结果集驱动大结果集。 避免重复查询用 CTE 或临时表。 分页优化 深分页时不用 OFFSET 大偏移量改用“游标查询”或“基于索引的排序后取 id 再关联”。 减少数据库操作 批量插入/更新避免循环执行单条 SQL。 合理使用存储过程减少网络交互。 使用执行计划分析 EXPLAIN 查看扫描行数、访问类型ALL 全表扫描要避免、是否用到文件排序或临时表。 数据库设计优化 字段类型尽量小、简单如 INT 优于 VARCHAR。 适当反范式化减少 JOIN。 大表考虑分区或分表。 事务与锁优化 控制事务大小及时提交避免长事务造成锁等待。如果一个表10个字段其中7个字段有索引咋处理主库只保留写操作必须的3个索引比如主键、唯一约束、一个用于事务隔离的索引。 从库保留全部7个索引甚至额外再加一些。 高频热数据比如用户频繁查询的首页列表数据直接放 Redis不查数据库。 冷数据保留完整索引供偶尔的导出或报表查询使用。 分段按时间分区每天/每周一个分区。写操作先入消息队列攒批写入当前分区读操作根据查询条件路由到对应的分区。docker的中间件有哪些常用中间件镜像Redis、MySQL、MongoDB、RabbitMQ、Nginx。k8s在代码项目里使用的什么语言,怎么使用管理的k8s通过YAML声明式配置管理代码项目中常用Helm Chart打包调用k8s APIGo/Java/.NET客户端实现弹性伸缩或CI/CD集成。redis有哪些数据类型数据类型String、Hash、List、Set、Sorted Set、BitMap、HyperLogLog、GEO等。redis配置与调优调优内存maxmemory LRU淘汰、持久化RDB AOF、网络tcp-backlog、timeout、禁用危险命令keys、flushall。MongoDB使用过哪些方法find()查询、aggregate()聚合、updateMany()批量更新、createIndex()建索引、bulkWrite()批量写入什么是git有做过git托管仓库的开发吗使用层面我日常工作中广泛使用 Git代码托管在 GitHub、GitLab 以及公司内部的 Gitea 上。包括创建仓库、分支策略如 Git Flow、GitHub Flow、PR/MR 评审、打标签、钩子配置等都很熟悉。nginx是请求服务的方式有哪些怎么做重定向Nginx主要做反向代理、负载均衡、静态服务器。重定向用return 301或rewrite指令。liunx常用命令有哪些ls、cd、grep、ps、top、netstat、chmod、tar、systemctl、docker、kubectl。-----------------------------------前端--------------------------------------------------Vue2和Vue3有什么区别响应式原理 Vue2 用 Object.defineProperty只能劫持对象已有属性数组需要特殊处理。 Vue3 用 Proxy可以代理整个对象包括动态新增属性、删除属性、数组索引和 length 变化都直接监听。 API 风格 Vue2 以 Options API 为主data、methods、computed 等。 Vue3 引入 Composition API逻辑可以按功能组织复用代码更清晰尤其适合复杂组件。 性能优化 Vue3 打包体积更小支持 tree-shaking编译时优化静态提升、事件缓存、Block Tree 减少 diff 开销。 同样的应用Vue3 性能比 Vue2 提升明显。 TypeScript 支持 Vue3 源码用 TS 编写对 TS 的集成更友好。 Vue2 对 TS 支持较弱需要额外的装饰器或类组件库。 组件根节点 Vue2 组件必须有唯一根节点。 Vue3 支持多根节点Fragment减少无意义的包裹元素。 新内置组件 Vue3 提供了 Teleport传送门比如模态框挂载到 body、Suspense异步组件等待状态。 生命周期 名字有变化beforeDestroy 改为 beforeUnmountdestroyed 改为 unmounted。 Composition API 中对应钩子名称带 on 前缀。 其他细节 Vue3 移除了 $on、$off、$once 实例方法事件总线不再内置推荐 mitt 或 vue3 全局 API。 移除了 filters推荐用 computed 或方法替代。 v-for 和 v-if 优先级变化Vue2 中 v-for 高于 v-ifVue3 中 v-if 高于 v-for。介绍前端的首屏加载、运行时渲染效率、构建产物优化的三个优化核心维度一、首屏加载优化让用户尽快看到内容 核心目标是缩短白屏时间和可交互时间。 路由懒加载按需加载页面组件不一次性加载所有 JS。 CDN 加速将静态资源部署到 CDN减少网络往返时间。 压缩与 GzipJS/CSS/HTML 压缩服务端开启 Gzip 或 Brotli。 图片优化WebP 格式、懒加载、响应式图片srcset。 骨架屏 / 预渲染先展示占位 UI提升感知体验。 关键 CSS 内联提取首屏所需的 CSS 内联到 HTML非关键 CSS 异步加载。 预加载与预连接link relpreload 提前加载关键资源preconnect 提前建立连接。 SSR 或 SSG服务端渲染或静态站点生成直接输出 HTML减少客户端渲染工作量。 二、运行时渲染效率优化让页面交互流畅 核心是减少不必要的重绘重排降低 CPU 和内存消耗。 虚拟 DOM 优化合理设置组件 key避免使用 index 作为 key减少组件层级和 props 传递。 响应式粒度控制Vue 中用 computed 缓存避免模板中调用方法shallowRef/shallowReactive 处理大对象。 列表虚拟滚动对长列表只渲染可视区域如 vue-virtual-scroller。 防抖与节流高频事件滚动、输入、resize使用防抖节流。 异步组件与 Suspense非关键组件异步加载减少初始渲染负担。 避免不必要的组件重渲染合理使用 v-once、v-memoVue3或者手动控制更新时机。 Web Worker将计算密集型任务移到 Worker 线程避免阻塞主线程。 三、构建产物优化让最终生成的代码更小更合理 核心是减小包体积拆分模块提高缓存命中率。 代码分割动态 import 实现按路由或按需分割避免单文件过大。 Tree Shaking删除未使用的代码注意副作用sideEffects配置。 资源压缩Terser 压缩 JSCSS 压缩HTML 压缩图片使用 imagemin 压缩。 依赖优化替换大型库为轻量替代如 day.js 替代 moment按需引入如 lodash-es。 Bundle 分析使用 webpack-bundle-analyzer 或 Vite 内置分析工具定位大模块。 缓存策略文件名加哈希contenthash实现长期缓存分离第三方库到单独的 vendor chunk。 现代语法降级通过 browserslist 和 babel 按目标环境编译减少 polyfill 体积对现代浏览器可直接输出 ES6 代码。 使用 Vite 等更快的构建工具开发时利用原生 ESM生产打包用 Rollup产物优化更彻底。Vite和Webpack在性能优化配置上有什么不同开发服务器启动与热更新 Webpack需要打包整个应用启动慢热更新HMR也需要重新编译修改的模块及其依赖大项目时会有明显延迟。 Vite利用原生 ES 模块启动时只做预构建用 esbuild 将 CommonJS 转为 ESM不打包所以启动极快。热更新基于 ESM 的精确失效替换只更新修改的模块速度非常快。 生产构建优化 Webpack使用 TerserPlugin 压缩 JSCSS 提取用 MiniCssExtractPlugin代码分割需要手动配置 splitChunksTree Shaking 依赖 sideEffects 和 usedExports。配置比较复杂但控制力强。 Vite底层用 Rollup 打包优化配置更简洁。比如压缩直接用 build.minify默认 esbuild比 Terser 快很多CSS 自动提取和压缩。代码分割通过 build.rollupOptions.output.manualChunks 配置但默认已经做了合理的 vendor 拆分。 预加载与依赖优化 Webpack需要手动配置 preload/prefetch 插件或者用 webpackPreload 魔法注释。 Vite提供 vite-plugin-preload 或内置 build.modulePreload 选项自动生成预加载指令。 缓存策略 Webpack通过 cache.type: filesystem 开启持久化缓存能极大提升二次构建速度但需要显式配置。 Vite默认开启 cacheDirnode_modules/.vite依赖预构建缓存和文件系统缓存几乎零配置。 静态资源处理 Webpack需要配置 file-loader、url-loader、asset-module 等。 Vite内置静态资源处理import 图片等直接返回 URL可以通过 ?url、?raw 等查询参数改变处理方式更简洁。 环境变量与模式 Webpack用 DefinePlugin 或 dotenv 自定义。 Vite内置 import.meta.env支持 .env 文件自动根据 mode 加载更方便在不使用浏览缓存的情况下怎么在客户端本地存储用户数据使用内存存储变量 将敏感数据保存在 JavaScript 运行时内存中如全局变量、闭包、Map 对象。页面关闭或刷新后数据即消失且开发者虽然可以打断点看到但相比持久化存储更难被长期窃取。适用于生命周期短的临时数据。 WebAssembly 内存 将数据保存在 Wasm 的线性内存中JS 层无法直接读取需要导出的函数才能访问。这比普通 JS 变量更隐蔽。 Service Worker CacheStorage 并加密 CacheStorage 不是明文直接暴露在 Application 面板的 Storage 区域但仍可被读取。配合加密同样可做到不可读。 不本地存储改用短时效的 token 后端会话 客户端只保存一个随机生成的、后端签名的短时效令牌比如 JWT 但内容不存敏感信息真正的用户数据全部保存在服务端。令牌即便被看到也毫无价值且可随时失效。Electron通信使用的什么ipc与webContents通信 渲染进程 → preload → ipcRenderer → 主进程 → ipcMain → 底层API 底层API → ipcMain → 主进程 → ipcRenderer → preload → 渲染进程Electron的一般项目结构是啥electron有一个mian主进程和多个渲染进程渲染进程至少有一个 其中主进程与渲染进程需要preload进行通信。 preload是渲染进程与主进程进行通信的桥梁 主进程控制应用生命周期负责创建渲染进程仅有一个。 渲染进程每个窗口对应一个独立进程支持Node.js和DOM API数量可动态扩展。js事件循环、闭包、原型链、继承1. 事件循环 JS 是单线程的事件循环用来协调同步任务和异步任务。 同步任务直接在主线程执行栈中运行。 异步任务如定时器、网络请求、Promise会被挂起完成后将回调放入任务队列。 事件循环不断检查执行栈空时从任务队列中取出回调放入执行栈执行。 任务队列分宏任务setTimeout、I/O和微任务Promise.then、MutationObserver。微任务优先级高于宏任务每次宏任务结束后会清空所有微任务。 2. 闭包 闭包是指函数能够记住并访问它的词法作用域即使该函数在词法作用域之外执行。 形成条件函数嵌套函数内部函数引用了外部函数的变量。 作用实现私有变量、模块化、缓存数据等。 注意闭包会延长变量的生命周期使用不当可能导致内存泄漏。 3. 原型链 每个 JS 对象都有一个内部属性 [[Prototype]]通过 __proto__ 或 Object.getPrototypeOf 访问指向其原型对象。 当访问对象属性时如果自身不存在就会沿着原型链向上查找直到找到或到达 null。 函数都有一个 prototype 属性用于实例化对象时设置实例的原型。 原型链的顶端是 Object.prototype再往上就是 null。 4. 继承 在 JS 中继承通过原型链实现。 原型链继承子类的原型指向父类的实例。缺点所有子类实例共享父类引用属性。 构造函数继承在子类构造函数中调用父类构造函数Parent.call(this)。解决引用共享但无法继承父类原型上的方法。 组合继承上述两者结合最常用。 寄生组合继承优化组合继承避免两次调用父类构造函数。 ES6 class 继承class Child extends Parent底层仍是寄生组合继承语法更清晰虚拟DOM的理解虚拟 dom 就是 vue 通过 js 对象渲染虚拟 dom 的虚拟 dom 的 js 对象包含节点的类型、属性、子节点等信息这些虚拟 dom 节点会构成一棵树形结构用来表示整个页面的结构。 当 vue 组件更新时会通过 diff 算法进行计算diff 算法是先比较记录再批量更新操作。 diff 算法流程分别有新 dom 树会和缓存的旧 dom 树进行比较 根节点比较、逐层比较从树的根节点开始确定根节点是否相同、找出节点直接的差异如果节点类型不同则会停止对子级节点比较但只是节点属性、内容不同则会记录并继续对子级的比较记录。这只是 diff 算法的第一步用于记录确定哪些部分需要更新。 同级比较在同一级的节点直接进行比较、找出增删改的节点。 叶子节点比较:对叶子节点进行比较 key比较:如果节点有唯一标识符 key则 diff 算法会使用这些表示来更精确的比较节点https为什么比http更安全加密传输HTTP明文传输HTTPS在HTTP下加了一层SSL/TLS混合使用非对称加密交换密钥和对称加密传输数据。 身份验证HTTPS通过CA证书验证服务器身份防中间人攻击。 完整性保护防止数据在传输过程中被篡改。axios封装过没通常封装成request.js统一配置baseURL、超时、拦截器请求加token、响应统一错误处理。还可以针对不同模块创建不同的axios实例。微前端将前端应用拆分为独立的小应用组合成一个整体。核心要解决子应用加载动态script标签、隔离JS沙箱、CSS作用域、通信自定义事件或全局状态。主流框架有qiankun、Module Federation、wujie。

更多文章