大前端开发——前端知识渐变分层讲解 利用金字塔原理简化前端知识体系
Web开发基础
核心概念
-
HTML、CSS和JavaScript:Web开发的三大基石,分别负责结构、样式和行为。
-
代码管理:随着项目规模扩大,需要将代码拆分成小块,便于维护。
-
作用域污染:早期所有代码共享全局作用域,容易导致变量和函数名冲突。
细化解释
在Web开发的初期,开发者通常将HTML、CSS和JavaScript写在一个文件(如index.html)中。这种方式简单,但当代码量增加时,文件变得臃肿,维护困难。为了解决这个问题,开发者开始将JavaScript拆分成多个文件,通过<script>标签引入。然而,所有代码仍共享全局作用域,如果多个文件中定义了同名变量或函数,就会相互覆盖,导致“作用域污染”。
模块化与打包工具
核心概念
-
模块化:将代码拆分为独立模块,每个模块有自己的作用域,避免全局污染。
-
打包工具:如Webpack,将多个模块整合成一个或多个文件,便于部署。
-
Webpack:主流打包工具,支持前端和后端代码的统一处理。
细化解释
模块化开发通过将功能封装到独立的模块中,避免了全局作用域的冲突。每个模块可以导出功能(如函数或变量),其他模块通过导入使用这些功能。Webpack作为打包工具,能够分析模块间的依赖关系,将所有模块打包成一个bundle.js文件,浏览器可以直接加载运行。
后端引入方式与AMD/CMD协议
核心概念
-
require:Node.js中同步加载模块的方式。
-
AMD(异步模块定义):浏览器端异步加载模块的标准。
-
CMD(通用模块定义):在AMD基础上改进,提供更灵活的加载方式。
细化解释
在Node.js中,require同步加载模块,适合服务器端,但在浏览器端由于网络延迟,同步加载效率低下。AMD通过define定义模块,支持异步加载依赖,适用于前端。CMD在AMD基础上优化,允许按需加载依赖,并通过缓存减少重复请求。
Webpack的统一打包功能
核心概念
-
统一打包:支持不同模块标准(如CommonJS、ES Modules)的代码整合。
-
入口文件:从指定入口开始,构建依赖图并打包。
细化解释
Webpack能够处理使用require(CommonJS)或import(ES Modules)的代码,将其统一打包为一个文件。开发者无需担心模块标准的差异,只需指定入口文件,Webpack会自动解析依赖并生成bundle.js。
单页面应用和多页面应用
核心概念
-
网页加载:浏览器通过URL向服务器请求资源。
-
缓存机制:存储静态资源,减少重复请求。
-
单页面应用(SPA):一个HTML文件,通过JavaScript动态渲染。
-
多页面应用(MPA):多个独立HTML文件,适合SEO。
细化解释
传统MPA中,每个页面对应一个HTML文件,导航时重新请求。SPA只有一个HTML,通过JavaScript动态更新内容,提升用户体验。缓存机制通过存储JS、CSS等静态文件,加速后续加载。
单页面应用框架
React、Angular、Vue
-
React、Angular、Vue:主流SPA框架,提供组件化开发。
-
与Webpack结合:优化代码打包和资源管理。
细化解释
这些框架通过组件化方式组织代码,与Webpack结合实现模块化开发和高效打包。React以声明式UI著称,Vue易上手,Angular功能全面。
组件化的概念
-
单页面应用采用的方式都是构建一个大组件,然后再把这个大组件挂载到一个名叫 div#app 下面去
-
这里几乎是所有初中级前端迈不过去的概念了,他们不知道可以多创建一个 div,然后通过改写 main.js 将多个 Vue 组件挂载到多个 div 下,因为一般情况下完全不需要这样做,但是在谷歌插件开发,需要增强一个网页功能时,恰巧需要这个概念,若没有这个概念,就很难搞了,如下图红框里面这些小图标
-
-
将单页面的打包理解为一个大 Vue 组件的 js 代码用 Webpack 打包的过程,才能更好的理解谷歌插件开发,否则很难对谷歌插件知识进行分层,最终将插件知识和 Webpack + Vue 打包知识混合在一起,那就让你脑袋大了。
谷歌插件开发基础
popup.html,option.html,background.js,content script,inject script
-
谷歌插件:实现多页面间数据通信。
-
结构:
-
background:后台脚本,处理持久数据。
-
popup:弹出界面。
-
content script:注入网页,监听消息。
-
inject script:处理业务逻辑。
-
细化解释
谷歌插件通过多个组件协作实现功能。background脚本常驻后台,popup提供用户交互,content script访问网页DOM,inject script执行具体逻辑。多端通信涉及1:n关系(如插件到多个tab)。
background.js 特殊存在,为何谷歌称它 serviceworker.js
-
background.js 最早期 MV2 版本时,它就是一个独立 page 和其他页面没啥区别,也即意味着原来谷歌浏览器需要给 background.html 提供 V8 运行环境,提供一些毫无用处的 DOM 全局变量的概念,但是 background.js 是个不可见的纯提供服务的概念,追加 window 和 DOM 以及其他 html5 API 都没有任何实质意义,还增加了性能开销,这东西需要常驻以便为其他页面提供服务;
-
那为何不把 background.html 做成一个简单的 worker.js 呢?用的时候加载进来,不用的时候卸载掉?不就不存在性能损耗了吗?不就可以让谷歌浏览器同时支持上百个插件在运行了吗?既然如此那必须干!于是 background.html 变成了 background.js,成为其他页面通信中转和数据增删改查的服务;
谷歌插件的知识分层
-
知道谷歌插件由 popup.html,option.html,background.js,content script,inject script 5 个部分构成,其中 popup.html,option.html 是单页面,content script 和 inject script 是组件化打包之后挂载到网页的某个 div 上实现具体功能的存在,而 background.js 是负责通信中转和数据增删改查的概念,但以上概念,均可以通过 webpack 进行打包,且 target:"web",因为这 5 个概念都没有偏离 web 下运行的范畴;
-
你要掌握的谷歌插件知识只有
-
5 个部分如何通信?
-
content script 和 inject script 不共用一个作用域
-
inject script 是与网页共享一个 window 作用域
-
content script 在复杂开发中,只充当通信中转器,因为网页环境无法直接跟某个插件直接通信,因为网页和插件是 1:n 的概念,window.postmessage 到底发给哪个插件,浏览器不得而知,你必须有个 content script 接收这个消息才能保证网页和插件的对应。
-
所有的数据持久化,必须通过 background.js,因为其他那 4 个都不能保证稳定性和对应性,例如 inject script 只能存到 localstorage 里面,是针对某个网页的,与插件的存储范围不一样。
-
了解 chrome.storage 所有增删改查的使用方法;
-
-
至于 vuex,vue-router,vue 脚手架的使用压根跟谷歌插件开发没有关系,但若你一开始就从一个谷歌插件脚手架开始,迷惑也很正常;
Electron桌面应用开发
主进程 Main 和渲染进程 renderer
-
主进程:管理操作系统功能,类似于 background.js
-
渲染进程:类似于 popup.html option.html
-
webview 渲染进程:类似于网页+inject script
-
渲染进程的 preload.js:类似于网页+content script
-
-
归根结底,你只需要了解两个概念,主进程和渲染进程,其他都是进一步的细化
细化解释
Electron结合Node.js(主进程)和Chromium(渲染进程),支持跨平台开发。主进程处理文件操作等,渲染进程负责界面展示,二者通过IPC通信。
主进程 Main
-
node.js 环境下的运行脚本,electron.exe main.js 进行启动
-
相当于 electron.js 程序运行到一定步骤后,使用 eval 函数,将 main.js 加载后执行
渲染进程 Renderer
-
main.js 启动 V8 环境构建出来的网页环境,这个环境可以直接执行里面的 html 和 js,那说明 web 打包那一套又可以直接拿来用了,比如 vue 脚手架打包一个单页面,直接丢进来就能用了
-
特殊的渲染进程 webview,会对具体的网页进行渲染,通过将 Vue 打包成组件挂载到网页的具体 div 上面,实现网页功能的增强
进程间通信
核心概念
-
进程间通信(IPC):主进程与渲染进程间的消息传递。
-
服务间通信:主进程与外部服务的交互。
-
通信方式:监听、发送消息、第三方中转。
细化解释
在Electron中,IPC通过ipcMain和ipcRenderer实现进程间通信。服务间通信可能涉及HTTP或WebSocket,复杂场景可借助消息队列。
服务间通信
-
如果将所有的逻辑都放在 main.js 中,比如数据库的增删改查操作,就会让主进程变得特别冗杂,冗杂就会导致出错率增大,针对渲染进程和 webview 进程闪退,都会自动重启,而主进程因为异常而闪退,则没有任何机会重启,因此降低主进程的代码复杂量,非常必要。
-
但是将逻辑抽离出来,单独形成 http 本地服务实现数据库增删改查,但随之而来的问题,是主进程和 http 本地服务就无法通信了,此时可以将主进程和 http 本地服务都理解为独立的服务,两个服务之间可通过订阅一个独立的服务消息,实现消息的实时通信,例如 Redis 或者 zeroMQ
总结
看似非常复杂的大前端开发,最终无非就是在解决两个问题:
-
解决不同层级下的通信问题
-
同页面下的通信,例如 vue 的父子通信,或者 vuex
-
不同页面下的通信,例如谷歌插件不同页面的 chrome.runtime.sendMessage
-
不同进程下的通信,例如 electron 的 ipcRenderer.invoke
-
不同服务下的通信,例如 electron 的 main.js 和本地 http.exe
-
-
解决数据的存储问题
-
同页面下的数据存储,例如 vuex 和 localStorage
-
不同页面下的数据存储,例如 chrome.storage
-
不同进程下的数据存储,例如 config.json 和 sqlite
-
其他东西都是这两大问题的具体细化过程,以及 web 方面的开发知识,如果你觉得很难,那基本是 web 本身的基础就不牢靠,学得似是而非。
相关文章:
大前端开发——前端知识渐变分层讲解 利用金字塔原理简化前端知识体系
Web开发基础 核心概念 HTML、CSS和JavaScript:Web开发的三大基石,分别负责结构、样式和行为。 代码管理:随着项目规模扩大,需要将代码拆分成小块,便于维护。 作用域污染:早期所有代码共享全局作用域&…...
面向网络安全的开源 大模型-Foundation-Sec-8B
1. Foundation-Sec-8B 整体介绍 Foundation-Sec-8B 是一个专注于网络安全领域的大型语言模型 (LLM),由思科的基础人工智能团队 (Foundation AI) 开发 。它基于 Llama 3.1-8B 架构构建,并通过在一个精心策划和整理的网络安全专业语料库上进行持续预训练而得到增强 。该模型旨在…...
长效住宅IP是什么?如何获取长效住宅IP?
在当今的互联网世界里,IP地址作为连接用户与网站之间的桥梁,其重要性不言而喻。对于跨境电商、社交媒体运营以及数据采集等领域的专业人士而言,普通的IP地址已无法满足日益复杂的需求。他们更需要一种稳定、安全且持久的长效住宅IP来完成各类…...
零基础实现把知识库接到聆思CSK6大模型开发板上
前言 大模型作为一个语言模型,实际上没有真正的记忆功能。所谓的对话记忆只是开发者将对话历史向GPT发送消息时将最近的对话历史通过提示工程组发送给ChatGPT。换句话说,如果对话历史超过了大模型的最大上下文,GPT会忘记之前的部分࿰…...
docker 部署前、后端分离项目详细步骤(从打包到部署)
在平常的开发工作中,一个项目经历需求、开发、测试、上线等步骤。在开发测试完成后,我们需要部署测试环境、生产环境等,那么我们用 docker 方式应该怎么部署呢?前后端分离的项目又该如何部署呢?那么,今天我…...
【深度学习的灵魂】图片布局生成模型LayoutPrompt(1)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目…...
BG开发者日志429:故事模式的思路
1、故事模式已有的一关试验关中,直接揭示了一些重要真相,白给了。 /原设计思路是玩家可以直接玩故事模式,很快就能通关本模式的所有关卡,知道所有真相。 /原表现方式是步行模拟,到地点看对话。 (现在看来…...
Linux批量管理:Ansible自动化运维指南
引言 在服务器规模化的时代,Ansible就像一位"自动化指挥官"🎖️,让你轻松管理成百上千台Linux主机!本文将带你全面掌握Ansible的核心用法,从基础架构到高级Playbook,从主机管理到应用部署。无论…...
【AI提示词】第一性原理
提示说明 擅长运用第一性原理思维进行深度问题分析与创新解决方案构建的专家。 提示词 # Role: 第一性原理思考导师## Profile - language: 中文 - description: 擅长运用第一性原理思维进行深度问题分析与创新解决方案构建的专家 - background: 具备理论物理学与哲学复合背…...
【LeetCode】螺旋矩阵
题目 题目链接 请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素,示例如下: 思路 整体思路为模拟。具体地,可以采用“减而治之”的思想,将整个遍历过程拆分为一次次对每一行和每一列的遍历,每次只考虑一行/…...
给 BBRv2/3 火上浇油的 drain-to-target
最近彻底跟 BBR 杠上了,再读一篇落实性论文 Promises and Potential of BBRv3,结论依然是 BBRv3 并未如声称的那般优化公平性,反而可能更糟糕,不得不说又是任重而道远。 说一个我遇到的,讲理之外顺带吐槽。 BBRv1 在…...
后端id类型为long类型时,返回给前端浏览器四舍五入,导致id精度缺失问题
背景 今天在代码里,掉了别人写的接口,有个id的字段是long类型的,我这边加点参数返回给前端,然后前端根据id修改,结果修改的数据记录有,但是没起作用,后来发现根据他传给我的id在后台数据库查不…...
《云原生》核心内容梳理和分阶段学习计划
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息文章目录 云原生核心内容梳理和分阶段学习计划一、云原生核心技术栈(2025年重点方向)二、分阶段学习计划(6-12个月系统性进阶)**阶段1:基础入…...
跟我学C++中级篇——控制死锁
一、同步和死锁 在前面学习多线程和网络编程时,都对线程中数据的同步和数据结构多线程访问的安全问题进行了分析和说明。其实,多线程编程之所以难,难点之一就在这里,数据同步意味着效率和安全的平衡,而这里的安全有一…...
「Mac畅玩AIGC与多模态08」开发篇04 - 基于 OpenAPI Schema 开发专用 Agent 插件
一、概述 本篇介绍如何在 macOS 环境下,通过编写 OpenAPI Schema,开发自定义的专用插件,让智能体可以调用外部 API,扩展功能至任意在线服务。实践内容基于 Dify 平台,适配 macOS 开发环境。 二、环境准备 1. 确认本地开发环境 macOS 系统Dify 平台已完成部署并可访问本…...
“兴火·燎原”总冠军诞生,云宏信息《金融高算力轻量云平台》登顶
“兴火燎原”创新马拉松公开赛2024年度全国总决赛于4月18日在福州举办,云宏科技股份有限公司(以下简称:云宏)的《金融高算力轻量云平台》项目脱颖而出,夺得全国总冠军。 作为数字中国创新大赛金融领域的核心赛事&…...
MySQL 索引与事务详解
MySQL 索引与事务详解 一、索引(Index) 1. 索引的作用与原理 索引是数据库的"目录",能够大幅提高查询速度,但会增加写入开销。MySQL 使用 BTree 作为主要索引结构。 2. 索引类型 (1) 普通索引 CREATE INDEX idx_n…...
洛谷题解 | CF111C Petya and Spiders
目录 题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例 #2输入 #2输出 #2 说明/提示题目简化题目思路AC 代码 题目描述 Little Petya loves training spiders. Petya has a board $ nm $ in size. Each cell of the board initially has a spider sitting…...
【深度对比】Google Play与IOS 马甲包处理差异分析
在移动应用发布与推广过程中,马甲包(Cloned App / Alternate Version) 曾被广泛用于流量测试、风险隔离、多品牌运营等场景中。随着 Google Play 与 Apple App Store 审核政策不断收紧,开发者们越来越关注两个平台对“马甲包”的态…...
【C++】C++11新特性(二)
目录 完美转发 引用折叠: lambda表达式 完美转发 引用折叠: 引用折叠是 C的类型系统规则,用于处理“引用的引用”(如 T& &)。 在推导过程中,必须折叠成有效的单一引用类型。直接声明引用的引用…...
高等数学-第七版-下册 选做记录 习题9-4
1. 3. 4. 8....
特殊权限管理
特殊权限的类型 SUID(Set User ID):当一个可执行文件设置了 SUID 权限后,在执行该文件时,进程会以文件所有者的身份运行,而不是以执行用户的身份。例如,/usr/bin/passwd文件用于修改用户密码&a…...
最新的30个Android Kotlin面试题
以下是2025年最新的30个Android Kotlin面试题及其核心解析,综合了协程、密封类、高阶函数、扩展函数等高频考点,并附有相关引用来源: 一、协程与并发编程 协程与线程的核心区别是什么? 协程是轻量级线程,通过挂起而非阻…...
牛客周赛 Round 91
赛时成绩如下: A. while 题目描述 小歪找到了一个由五个字符构成的字符串,它一次可以选择任意一个字符,将其修改为另一个字符,他想要知道,将这个字符串修改为 "while" 需要的最少操作次数。 解题思路&#x…...
Kafka 的服务端的物理存储架构是什么?零拷贝,mmap,sendfile、DMA gather又是什么?
Kafka 服务端的物理存储架构 Kafka 的物理存储架构设计旨在支持高吞吐、低延迟的数据处理,其核心特点包括: 1. 分区与日志段 主题(Topic)与分区(Partition): Kafka 将每个主题划分为多个分区&…...
1.7 点云数据获取方式——视觉SLAM
图1-7-1 Visual SLAM生成的点...
双向流热固耦合的收敛
1 收敛性 如果想把流固耦合计算过程的收敛性弄清楚,必须理解流固耦合的求解过程和对流场与固体场的定义设置: -这个与其他的真实物理场可能有所不同 -例如你的初始条件可能是不同的当遇到收敛困难时,需要看一下的求解过程用户使用监测点和…...
C++之类和对象:构造函数,析构函数,拷贝构造,赋值运算符重载
前提:如果一个类是空类,C中空类中真的什么都没有吗,不是的,编译器会自动生成6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 默认成员函数:构造函…...
Vue2 相关知识点整理
一、Vue2 核心机制 1. Vue2 的响应式原理是什么? 答案: Vue2 通过 Object.defineProperty 给对象的每个属性添加 getter 和 setter,当数据被访问或修改时,自动触发视图更新。通俗解释: 就像给每个数据绑了一个“监控…...
CSS:编写位置分类及优先级
文章目录 一、行内样式二、内部样式三、外部样式(推荐)四、优先级五、编码风格 一、行内样式 最好不这样写 二、内部样式 可以使用 三、外部样式(推荐) 四、优先级 行内样式 > 内部样式 外部样式 五、编码风格...
Tauri 跨平台开发指南及实战:用前端技术征服桌面应用(合集-万字长文)
厌倦了笨重的Electron应用?想要构建体积小、性能高、安全可靠的跨平台桌面应用?Tauri将是你的不二之选!本教程带你从入门到精通,掌握这个下一代桌面应用开发框架,并通过实战APK分析工具项目,将理论知识转化…...
深入解析 Linux 进程池:原理、实现与高并发优化
引言 当你的服务器需要同时处理 10,000 个客户端请求时,传统的"来一个请求创建一个进程"模式会导致严重的性能瓶颈。此时,进程池(Process Pool) 便成为关键解决方案。它像一支训练有素的特种部队,通过预先创…...
[Python]非零基础的快速上手
从js转的python,没有从初学者阶段开始,主打一个快速上手能写再说. pycharm:一种编辑器 数据类型 基本数据类型:整型(整数)、浮点型、字符型、布尔型 复杂数据类型:列表(数组)、集合区{1,2,3}、元组(1,3.4)字典{n’:2,b:1} 模板字符串 输出模板字符串…...
《算法笔记》10.5小节——图算法专题->最小生成树 问题 E: Jungle Roads
题目描述 The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to mai…...
数据中心网络架构:高效规划与自动化设计实践
在数据中心网络架构规划设计中,面临如下难点: 设备数量庞大: 服务器、交换机等设备数量多,如何合理规划机柜布局和空间分配,避免资源浪费或密度超标,成为设计难点。 线缆设计复杂: 海量线缆…...
Mysql存储引擎、锁机制
Mysql存储引擎 InnoDB(MySQL 5.5 及以后版本中的默认存储引擎) 事务支持:支持 ACID 事务,适合需要高可靠性的场景(如支付、订单)。 锁机制:默认使用 行级锁…...
UVA1537 Picnic Planning
目录 题目算法标签: 最小生成树, k r u s k a l kruskal kruskal重构树, 树形 d p dp dp思路重构树代码 题目 UVA1537 Picnic Planning 算法标签: 最小生成树, k r u s k a l kruskal kruskal重构树, 树形 d p dp dp 思路 将 1 1 1号点设置为终点, 然后执行重构树计算度数…...
通过AWS Console连接服务器,简化运维过程
简单通过AWS Console连接您的Linux服务器 本文作者: 封磊 Eclicktech SA | AWS Community Builder DevTool | AWS UGL | 亚马逊云科技云博主 阿里云&InfoQ&CSDN签约作者 文章目录 简单通过AWS Console连接您的Linux服务器本文作者: 封磊Eclicktech SA | AWS Community …...
公交实时查询小程序功能点开发
线路查询:用户可输入公交线路号码,小程序实时显示该线路车辆位置与发车信息,能一键切换行驶方向,助用户依实时情况选合适候车站点。站点查询:输入车站信息,小程序呈现经过该站所有公交线路及公交信息&#…...
nginx配置集群服务器中的tcp负载均衡器
文章目录 前言1. Ubuntu下nginx安装2. nginx的tcp负载配置 前言 假设一台机器支持两万的并发量,现在我们需要保证八万的并发量。首先想到的是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能来解决此问题。但是单台机…...
Qt/C++开发监控GB28181系统/获取设备信息/设备配置参数/通道信息/设备状态
一、前言 设备注册成功后,接下来要做的就是获取设备的信息,尤其是通道信息,根据国标协议,永远只有两个层级,一个是设备,然后就是设备下面多个通道,设备编码在整个系统中唯一,通道编…...
Linux系统基础:基础指令简介(网络概念部分)
简介:Linux 是一种开源的类 Unix 操作系统内核,由 Linus Torvalds 于 1991 年首次发布。经过多年发展,它已成为服务器、嵌入式设备和个人计算机领域的重要操作系统。 网络基础概念 初始协议 简单来说,协议是一种约定࿰…...
labview项目文件架构
为了使 LabVIEW 项目更具可扩展性和易于维护,合理规划和设计项目文件结构是非常重要的。 以下是一些基于行业经验和最佳实践的建议: 1. ### 文件夹层次划分 将不同的功能模块分开存储在一个清晰的分层目录结构中是一个常见的做法。通常情况下ÿ…...
nuxt项目中引入并配置 iview
安装iview npm install iview --save注:想要加入其它的配置,可以在 nuxt.config.js 的 plugins 配置项中加入,同时在 plugins 文件夹下加入引入逻辑。 在nuxt.config.js文件中写: {src: ~plugins/iview, ssr: true}同时新建 plugi…...
Origin绘图操作:点线图符号显示不全解决方法
一、问题说明 在用origin绘制点线图时,图表刻度线处的点符号显示不完全,如图所示: 二、解决方法 方法一:调整坐标轴刻度,使其能够显示全部数据点。 方法二:有时为了图表美观,则不对坐标轴刻…...
【进程与线程】
文章目录 一、实验目的二、实验内容与设计思想实验内容设计思路 三、实验代码实现四、总结 一、实验目的 1.深刻理解进程和线程的概念,掌握线程与进程在组成成分上的差别; 2.进一步认识并发执行的实质。 二、实验内容与设计思想 实验内容 用pipe()创…...
项目实战-飞机大战【补档】
和项目实战-贪吃蛇大作战【补档】-CSDN博客一样,这也是一个我在大一和网友完成的项目的补档。Dont waste your youth—time flies. 目录 1.工具&环境 2.项目简介 3.需求文档 4.流程图 5.产品原型图 6.可行性分析 7.源代码 8.实战效果 编辑 9.心得…...
算法基础学习|02归并排序——分治
一、思路 (1)确定分界点:mid(lr)/2 ——这里和快排不同 (2)递归排序(left right) (3)归并——合二为一 时间复杂度nlogn 二、题目练习 三、模板 归并排序 …...
测试基础笔记第十六天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、UI自动化介绍1.认识UI自动化测试2.实施UI自动化测试前置条件3.UI自动化测试执行时机4.UI自动化测试核心作用和劣势 二、认识Web自动化测试工具-Selenium021.Sel…...
Android项目中使用ComposeUI
首先确认项目环境kotlin版本,以下是本机的版本 使用命令 ./gradlew -version 这里kotlin 版本是1.5.31 然后查看build.gradle sdk版本 这里是32 属于低版本 然后需要添加以下配置 buildFeatures {compose true}composeOptions {kotlinCompilerExtensionVersio…...