前端工程化理解 (2024 面试题)

  • 最好介绍远古世界
  • 最好随性一点,不要太刻板 ,不然像背书

什么是前端工程化? - 知乎

前端工程化的历史

互联网初期,09 年以前,页面只需要展示一些列表、表格、文章内容以及简单图片即可,其目的是为了传送信息。这个时候构建内容非常简单 html 即可,对文章内容进行一些简单排版可以传输就ok了。

互联网开始向个人普及的时候,更多的桌面应用的缺点越来越明显,越来越多的软件专项web应用,用户从科研人员变成了普通大众。相对的获取\传输信息依旧很重要,但是对于界面交互就希望有更高的要求。这个时候构建内容的工具从简单的 html 增加了一项 css 来美化html在浏览器上输出的内容。当然也是这段时间,人机交互也稍微复杂了一些,通过js来控制一些页面展示的效果(例如:轮播图、文字滚动)

第一阶段 桌面应用到web应用

越来越多的行业依赖软件,但明显桌面应用的限制越来越突出

  • 一个软件一个包,
  • 需要经常更新
  • 跨端 跨电脑需要重新安装

随着软件需求爆炸性增长

后来互联网的用户数量爆炸式增长(个人PC普及后期),前端(页面展示,那个时候可能还没有专职的前端)需要负载的功能日益复杂,浏览器版本、种类层出不穷。这个时候需要解决的主要问题是不同浏览器的兼容性2006年诞生的jquery就是其中的代表。兼容性问题要解决,交互问题同样需要解决。页面和服务器的交互逻辑受困于jsp等技术这些代码只能由服务端代码完成,有什么变更需要页面全部刷新。所以ajax应运而生。大概就是08年前后,jquery技术风靡数年至今。

第二阶段 web应用 到单页应用

  • ajax 诞生
  • 2008 html5
  • 网速增加
  • 浏览器和硬件升级
  • 浏览器兼容性问题变少,前端h5,es5相继发布web 前端 的主要矛盾由 浏览器的兼容性问题 前端的工作有组织dom结构、动画效果、页面交互逻辑 变成 除此之外大量 JS 代码的组织,与 View 层的绑定。都比较麻烦。可以理解为开发效率和可维护性问题

可维护性举例

  • js 的类型
  • 庞大的 CSS包
  • 打包
  • 编码规范

2009 之后前端需要利用软件工程化的思想来解决瓶颈问题

当时出现了很多 template模板工具,基于 jq,实现简单的 view 和 model 层包装。也出现了了 gulp、

再往后就是以react\vue为主导的spa(单页面应用的时代),然后就是以扩充前端能力为主的浏览器+node全栈时代,前端的severless和*sr(ssr、nsr、csr...)百花齐放。这个时代如果没有工程化的支持,那~这些都不会存在。

SASS(英文全称:Syntactically Awesome Stylesheets)Sass 诞生于 2007 年,使用Ruby 编写,是一种对css的一种扩展提升,增加了规则、变量、混入、选择器、继承等等特性。可以理解为用js的方式去书写,然后编译成css。比如说,sass中可以把反复使用的css属性值定义成变量,然后通过变量名来引用它们,而无需重复书写这一属性值。

LESS(2009年开源的一个项目,受Sass的影响较大,但又使用CSS的语法,让大部分开发者和设计师更容易上手。LESS保留了css的任何功能,同时提供了多种方式能平滑的将写好的代码转化成标准的CSS代码,可以在任何使用随时切换到css的语法进行书写。

2011 年以前

大概 09 年 - 10 年期间,CommonJS 社区大牛云集。CommonJS 原来叫 ServerJS,推出 Modules/1.0 规范后,在 Node.js 等环境下取得了很不错的实践。

09年下半年这帮充满干劲的小伙子们想把 ServerJS 的成功经验进一步推广到浏览器端,于是将社区改名叫 CommonJS,同时激烈争论 Modules 的下一版规范。分歧和冲突由此诞生,逐步形成了三大流派:

  1. Modules/1.x 流派。这个观点觉得 1.x 规范已经够用,只要移植到浏览器端就好。要做的是新增 Modules/Transport 规范,即在浏览器上运行前,先通过转换工具将模块转换为符合 Transport 规范的代码。主流代表是服务端的开发人员。现在值得关注的有两个实现:越来越火的 component 和走在前沿的 es6 module transpiler。
  2. Modules/Async 流派。这个观点觉得浏览器有自身的特征,不应该直接用 Modules/1.x 规范。这个观点下的典型代表是 AMD 规范及其实现 RequireJS。这个稍后再细说。
  3. Modules/2.0 流派。这个观点觉得浏览器有自身的特征,不应该直接用 Modules/1.x 规范,但应该尽可能与 Modules/1.x 规范保持一致。这个观点下的典型代表是 BravoJS 和 FlyScript 的作者。BravoJS 作者对 CommonJS 的社区的贡献很大,这份 Modules/2.0-draft 规范花了很多心思。FlyScript 的作者提出了 Modules/Wrappings 规范,这规范是 CMD 规范的前身。可惜的是 BravoJS 太学院派,FlyScript 后来做了自我阉割,将整个网站(flyscript.org)下线了。这个故事有点悲壮,下文细说。

2015 年

前端的ES module发布后,rollup应声而出。

rollup编译ES6模块,提出了Tree-shaking,根据ES module静态语法特性,删除未被实际使用的代码,支持导出多种规范语法,并且导出的代码非常简洁,如果看过 vue 的dist 目录代码就知道导出的 vue 代码完全不影响阅读。


browserify、webpack、rollup、parcel这些工具的思想都是递归循环依赖,然后组装成依赖树,优化完依赖树后生成代码。但是这样做的缺点就是慢,需要遍历完所有依赖,即使 parcel 利用了多核,webpack 也支持多线程,在打包大型项目的时候依然慢可能会用上几分钟,存在性能瓶颈。
 

前端模块化/构建工具从最开始的基于浏览器运行时加载的 RequireJs/Sea.js 到将所有资源组装依赖打包 webpack/rollup/parcel的bundle类模块化构建工具,再到现在的bundleless基于浏览器原生 ES 模块的 snowpack/vite,前端的模块化/构建工具发展到现在已经快 10 年了。

工程化解决的问题就是提高整个工作系统的效率。大量的js代码,堆积的程序最麻烦的就是如何去维护。100行代码,看一遍,打着断点过一下,就知道是在做什么了。但是1000行,10000行甚至是10万行的代码,你怎么维护?真的要一点一点看?那这个对企业来说维护的成本就是天文数字甚至于不可估量。随着浏览器的不断更新迭代,大量的能力扩充,对我们构建前端应用来说也是一个挑战。

什么是前端工程化

  • 历史背景
  • 出现原因
  • 主要工具
  • 现状
  • 未来展望

前端工程化是指,使用软件工程的技术和方法,将前端的开发流程、技术、工具、经验等规范化和标准化,其主要目的,是为了提高效率和降低维护成本,即提高开发过程中的开发效率,减少不必要的重复工作时间。前端工程化具体包含:

  • 标准化,定义编码、目录结构、接口以及源码管理等规范;
  • 组件化,组件分为HTML、JS和CSS;
  • 模块化,功能封装;
  • 自动化,持续集成和持续部署。

核心关键词: 标准规范 降本提效

落地四大块:标准模块组件自动化

不同时代的理解

第一个阶段是选择框架、库:像jquery,这时候的工程化就是在开发时忽略对兼容性的考虑、提高编码效率降低开发成本

第二个阶段是优化构建:以grunt、gulp为代表的这些工具。这时候的工程化是解决应用体积变大后输出产物的优化

第三阶段是html+js+css模块化开发:这时候的工程化的代表是angluar。
第四个阶段是组件开发与资源的管理:在这个阶段 react/vue 引领了前端开发应用的潮流,webpack + rollup 则引领了优化构建的方向。

第五个阶段是前端能力的扩充与完善:以node全栈和h5规范为基础的百花齐放。说实在的h5规范现阶段扩充了很多能力并且浏览器厂商也在逐步支持,并且这些能力愈来愈强大,如视频/音频的播放能力、canvas与webGL、WebAssembly等等多样的能力意味着更多的接口、代码以及业务逻辑。node全栈给前端扩充了N多能力,首当其冲的是ssr,目前看来非常重要的数据安全性(以通过graphGL来进行数据组合过滤实现为代表)。其次是前端的serverless,不受制于传统后端与前端的业务范围。

首先前端工程化是把软件工程相关的方法和思想应用到前端开发中。


狭义上的理解:将开发阶段的代码发布到生产环境,包含:构建,分支管理,自动化测试,部署

广义上理解:前端工程化应该包含从编码开始到发布,运行和维护阶段

工具是工程化的手段,只要我们引入的方法、技术方案、工具可以提升开发效率、提高前端应用质量,那么都属于前端工程化

工程化主要特点是什么

  • 不建议大家盲目地追求工程化,对于大部分规模不大的前端团队而言,工程体系的建设和规范并不是当务之急

工程化如何实践

我的理解里把 前端工程化分为 5 类

开发、构建、部署、性能、规范化

还有第六类 需求

规范化需求

  • 性能优化
  • 团队规范
  • 开发
    • 框架选型
    • 前后端分离
    • 组件化
    • 脚手架
    • 本地开发服务器
    • mock 服务
    • 微前端
  • 规范化
    • 目录结构规范
    • 编码规范
    • 技术栈规范
    • 前后端接口规范
    • git 规范
      • commit 规范
      • 分支名、提交等规范
    • cr 规范
    • 设计规范
    • 图标规范
    • 文档规范
    • 版本规范
    • 开发流程规范
    • 发布规范(测试、灰度、预发、线上)
  • 构建
    • 依赖打包
    • 文件压缩
    • 代码分割
    • 增量更新与缓存
    • 资源定位
    • 图标合并
    • es 与 babel
    • css 预编译和 postcss
    • 持续构建与集成
    • 类库打包
    • 构建优化
  • 部署
    • 持续部署
    • 部署流程设计
    • 静态资源部署策略
    • nginx 反向代理
    • spa 路由配置
    • 跨域
    • https 证书
    • http2 配置
    • 灰度发布
    • 预发布环境
  • 性能
    • 缓存策略
    • 缓存复用
    • cdn 内容分发网络
    • 按需加载
    • 同步异步加载
    • 请求合并
    • 首屏渲染速度
    • http2 服务推送
    • 日志性能监控
    • 预加载
    • 性能测试


 

前端工程项目

执行 npm run serve 发生了什么

  1. 读取 package.json 文件
    • 当你在项目的根目录下执行 npm run serve 命令时,npm 首先会查找 package.json 文件中的 "scripts" 字段,找到与 "serve" 对应的命令。
  1. 执行对应的脚本命令
    • 一旦找到对应的命令,npm 就会执行它。这个命令可能是一个构建命令,也可能直接启动开发服务器。在 React 项目中,这通常是一个如 react-scripts start 或类似的命令(如果使用 CRA)。
  1. 启动开发服务器
    • 如果脚本命令是启动开发服务器的命令,那么在这一步,开发服务器将被启动。这通常是一个基于 Node.js 的服务器,如 Webpack Dev Server。
    • 开发服务器会监听文件变化,并在文件被修改时重新构建应用程序。这样,你就可以在开发过程中实时看到更改的效果。
  1. 编译和打包应用程序
    • 在服务器启动之前或启动时,项目代码会被编译和打包成浏览器可以理解的格式(如 JavaScript、CSS 等)。这通常是通过 Babel、Webpack 等工具完成的。
    • 在开发模式下,编译和打包的过程通常不会进行代码压缩和混淆,以便于调试。
  1. 提供静态文件
    • 开发服务器会提供一个静态文件服务,将编译后的文件(如 HTML、JavaScript、CSS 等)提供给浏览器。这样,你就可以在浏览器中查看和测试你的 React 应用程序了。
  1. 监听源代码变化
    • 开发服务器会持续监听源代码文件的变化。一旦检测到文件被修改或保存,服务器会自动重新编译和打包应用程序,并刷新浏览器以显示最新的更改。这通常是通过热模块替换(HMR)或浏览器自动刷新来实现的。
  1. 输出日志和错误信息
    • 在服务器运行过程中,如果有任何错误或警告信息产生,它们通常会被输出到控制台或日志文件中。这样,你就可以及时发现和修复问题。
  1. 保持服务器运行
    • 除非手动停止或遇到错误导致服务器崩溃,否则开发服务器将一直保持运行状态。你可以通过关闭命令行窗口、按下 Ctrl+C 或使用其他方法来停止服务器。

四种类型版本号代表什么

  • 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
  • 波浪号(tilde):比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
  • 插入号(caret):比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
  • latest:安装最新版本。

Webpack Dev Server 启动时发生了什么

Webpack Dev Server 是一个小型的Node.js Express服务器,它使用webpack-dev-middleware 来服务于webpack的包。除了静态文件,此包还包含一些额外的特性,如热模块替换(Hot Module Replacement)和Source Maps等。以下是Webpack Dev Server启动时的步骤:

  1. 启动开发服务器:通过运行webpack-dev-server命令或在webpack配置文件中设置devServer属性,可以启动webpack-dev-server。它将监听指定的端口,并根据配置文件中的配置进行工作。
  2. 读取配置文件:Webpack Dev Server会读取webpack的配置文件(默认为webpack.config.js)。这个配置文件包含了项目的入口文件、输出路径、加载器(loaders)、插件(plugins)等关键信息。
  3. 编译和构建:根据配置文件中的信息,Webpack Dev Server会使用webpack来编译和构建项目。它会将项目的源代码转化为可在浏览器中运行的代码,并生成一个或多个bundle文件。
  4. 启动服务器并监听文件变化Webpack Dev Server会启动一个本地的开发服务器,并监听项目的文件变化。当检测到文件变化时,它会自动重新编译和构建项目,并实时更新浏览器中的页面
  5. 提供实时重载和热模块替换功能:Webpack Dev Server还提供了实时重载(live reloading)和热模块替换(Hot Module Replacement)功能。实时重载是指当项目中的文件发生变化时,服务器会自动重新加载整个页面。而热模块替换则更加高效,它只替换发生变化的模块,而不是重新加载整个页面。

需要注意的是,Webpack Dev Server将所有的项目文件存储在内存中的虚拟文件系统中,而不是写入磁盘。这使得每次修改源代码时,无需重新写入磁盘,可以更快地更新文件。开发服务器能够直接提供文件,而无需访问实际的物理文件。当浏览器接收到通知后,可以选择重新加载整个页面或仅更新受影响的模块。

以上步骤描述了大体流程,但实际的启动过程可能还包含更多的细节和步骤,具体取决于项目的配置和需求。

搭建cli 要做哪些工作

当搭建一个用于PC项目的React CLI工具时,主要任务包括但不限于以下几个方面:

  1. 项目初始化
    • 创建CLI工具的基础结构,通常会基于Node.js编写命令行工具,使用npm init初始化一个新的Node.js包,并设置必要的元数据和依赖项。
  1. 命令行接口设计
    • 使用诸如commander.js之类的库来设计交互式命令行界面,开发如createaddbuildstart等核心命令,以便用户可以通过命令行快速创建项目、添加模块、构建项目以及启动开发服务器。
  1. 项目模板创建
    • 设计并实现一套标准的React PC项目模板,包含基本的文件结构、配置文件(如Webpack)、公共样式和脚本文件、示例组件、以及可能的路由配置等。
  1. 依赖管理
    • 内置脚本负责在创建新项目时自动安装React、ReactDOM以及相关的开发依赖,例如Babel、Webpack及其loader、开发服务器(如webpack-dev-server)等。
  1. 开发环境配置
    • 设置开发环境下的Webpack配置,包括HMR(Hot Module Replacement)、source map、CSS处理、ES6转译等。
    • 实现一键启动开发服务器,开启自动刷新功能。
  1. 构建流程
    • 编写或引用现有的Webpack或其他构建工具配置文件模板,支持生产环境的代码压缩、优化、分包及静态资源处理。
    • 添加build命令用于编译和打包项目到生产环境。
  1. 可定制化和扩展性
    • 支持用户自定义模板或者添加额外的特性,比如TypeScript支持、CSS预处理器等。
    • 提供插件机制,允许开发者扩展CLI的功能。
  1. 文档撰写与发布
    • 编写详细的README和使用指南,说明如何安装、使用和配置CLI工具。
    • 将CLI工具发布到npm仓库,便于全球开发者通过npm install命令轻松获取和使用。
  1. 测试与维护
    • 编写单元测试和集成测试,保证CLI工具稳定可靠。
    • 随着React和其他相关技术的发展,持续跟踪最新进展,更新CLI工具中的模板和依赖,保持其与时俱进。

最后,考虑到用户友好性和易用性,还会考虑添加一些附加功能,如代码质量检测工具集成(如ESLint、Prettier)、代码格式化、代码拆分方案等。

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

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

相关文章

SHOPFA:APP定制开发的哪种二开项目容易交付,哪些不可以接?

在商城系统开发领域,定制开发与二次开发(二开)是两种截然不同的项目类型。它们之间的主要差异体现在项目起点、灵活性、成本、时间以及风险等多个方面。 一、项目起点 商城定制开发通常是从零开始,根据客户的实际需求&#xff0c…

电介质材料(四)——复合电介质材料

本篇为西安交通大学本科课程《电气材料基础》的笔记。 本篇为这一单元的第四篇笔记,上一篇传送门。 复合电介质材料 是由多种成分共同组成,例如油纸复合绝缘、云母层压板、环氧浸渍玻璃纤维布等。即便是没有添加的材料,材料也会存在杂质和…

华为ensp中PPP(点对点协议)中的CHAP认证 原理和配置命令

作者主页:点击! ENSP专栏:点击! 创作时间:2024年4月11日6点00分 PPP协议(Point-to-Point Protocol)是点到点协议,是一种常用的串行链路层协议,用于在两个节点之间建立点…

地表蒸散发遥感产品信息提取验证与融合

原文链接:地表蒸散发遥感产品信息提取验证与融合https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247600962&idx4&sncb995f8ac85c3c0759da82a15520c118&chksmfa820aa5cdf583b306988fbb5795c6370dab52a2fde5cfa5a8566dd7ba2864cb651c9230c6f3&…

企业级开源路由系统VyOS-构建和使用

介绍 VyOS是一个基于Linux的企业级路由器操作系统,被许多公司和个人用来驱动物理网络设备,如路由器和防火墙。它有一个统一的命令行界面来管理其所有的网络相关功能(和Juniper Junos操作很像)。VyOS使用Debian GNU/Linux作为其基…

xss基础

第一关&#xff1a; html部分标签可以解析js <script>alert (1)</script> 第二关&#xff1a; 可以看到value用双引号闭合了&#xff0c;使用上一关的payload没用&#xff0c;尝试一下闭合这个input 所以使用双引号和>闭合后再加入上一关的payload 11"…

Shotcut:免费且开源的优质视频剪辑工具

Shotcut&#xff1a;您的专业级免费开源视频编辑利器&#xff0c;助您轻松实现创意无限的剪辑梦想&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 Shotcut&#xff0c;一款广受赞誉的免费、开源跨平台视频编辑软件&#xff0c;以其卓越的功能性和易用性赢得了全球用户…

打造智能健身时代:健身房会员管理系统解析

随着健康意识的提升和生活水平的提高&#xff0c;健身行业正迎来蓬勃发展的时代。健身房作为人们锻炼身体的重要场所&#xff0c;其会员管理系统的优劣直接影响到健身房的运营效率和服务质量。本文将探讨健身房会员管理系统的重要性以及如何打造智能化的健身时代。 1. 会员信息…

【今日刷题】LeetCode 199.二叉树的右视图(中等)

今日刷题&#xff1a;LeetCode 199.二叉树的右视图&#xff08;中等&#xff09; 题目描述&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,…

Mysql底层原理四:B+树索引

B树索引&#xff08;索引的原理&#xff09; 1.前言 前边我们详细唠叨了InnoDB数据⻚的7个组成部分&#xff0c;知道了各个数据⻚可以组成⼀个双向链表&#xff0c;⽽每个数据⻚中的记录会按照主键值从⼩到⼤的顺序组成⼀个单向链 表&#xff0c;每个数据⻚都会为存储在它⾥边…

Python球球大作战

文章目录 写在前面球球大作战程序设计注意事项写在后面 写在前面 安装pygame的命令&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame球球大作战 《球球大作战》是一款简单易上手、充满趣味性和竞技性的休闲手游。游戏的核心玩法可以用一句话概…

(React Hooks)前端八股文修炼Day9

一 对 React Hook 的理解&#xff0c;它的实现原理是什么 React Hooks是React 16.8版本中引入的一个特性&#xff0c;它允许你在不编写类组件的情况下&#xff0c;使用state以及其他的React特性。Hooks的出现主要是为了解决类组件的一些问题&#xff0c;如复杂组件难以理解、难…

qt-C++笔记之QLabel加载图片

qt-C笔记之QLabel加载图片 —— 2024-04-06 夜 code review! 文章目录 qt-C笔记之QLabel加载图片0.文件结构1.方法一&#xff1a;把图片放在项目路径下&#xff0c;在 .pro 文件中使用 DISTFILES添加图片文件1.1.运行1.2.qt_test.pro1.3.main.cpp 2.方法二&#xff1a;不在 .pr…

《深入Linux内核架构》第2章 进程管理和调度 (2)

目录 2.4 进程管理相关的系统调用 2.4.1 进程复制 2.4.2 内核线程 2.4.3 启动新程序 2.4.4 退出进程 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;订阅后续文章。 2.4 进程管理相关的系统调用 2.4.1 进程复制 1. _do_fork函数 fork vfork clone都最终调用_…

计算机网络 Telnet远程访问交换机和Console终端连接交换机

一、实验要求和内容 1、配置交换机进入特权模式密文密码为“abcd两位班内学号”&#xff0c;远程登陆密码为“123456” 2、验证PC0通过远程登陆到交换机上&#xff0c;看是否可以进去特权模式 二、实验步骤 1、将一台还没配置的新交换机&#xff0c;利用console线连接设备的…

数学建模-最优包衣厚度终点判别法-二(K-Means聚类)

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是viperrrrrrr~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff…

OpenAI曾转录100万小时视频数据,训练GPT-4

4月7日&#xff0c;纽约时报在官网发布了一篇名为《科技巨头如何挖空心思&#xff0c;为AI收集数据》的技术文章。 纽约时报表示&#xff0c;OpenAI曾在2021年几乎消耗尽了互联网有用的文本数据源。为了缓解训练数据短缺的难题&#xff0c;便开发了知名开源语音识别模型Whispe…

Leetcode 394. 字符串解码

心路历程&#xff1a; 这道题看到括号直接想到栈&#xff0c;五分钟新题直接秒了&#xff0c;一开始以为需要两个栈分别存储数字和非数字&#xff0c;后来发现一个栈就够了&#xff0c;思路如图&#xff1a; 这道题考察的应该是队栈这两种数据结构的转换&#xff0c;因为每次…

C语言比较两个字符串是否相等是很容易的

一、概要 两个字符串char str1[n]和char str2[n] while循环&#xff0c;开始前i置为0&#xff0c;如果两个字符串都没有到末尾&#xff0c;且str1[i]str2[i]&#xff0c;则i&#xff0c;循环继续 循环结束之后&#xff0c;如果两个字符串都到了末尾(str1[i]\0 &&…

Java零基础入门-Java反射机制

一、概述 我们都听说过java有个反射机制&#xff0c;通过反射机制我们可以更深入的控制程序的运行过程。例如&#xff0c;在程序进入到运行期间&#xff0c;由用户输入一个类名&#xff0c;然后我们可以动态获取到该类拥有的所有类结构、属性名和方法&#xff0c;甚至还可以任意…