全面的ASP.NET Core Blazor简介和快速入门

前言

   因为咱们的MongoDB入门到实战教程Web端准备使用Blazor来作为前端展示UI,本篇文章主要是介绍Blazor是一个怎样的Web UI框架,其优势和特点在哪?并带你快速入门上手ASP.NET Core Blazor(当然这个前提是你要有一定的C#编程基础的情况,假如你完全没有接触过C#的话建议你先从基本语法学起)。

Blazor是什么?

  • Blazor是一个使用 .NET框架和C#编程语言Razor语法构建Web应用程序的UI框架,它可以用于构建单页应用(SPA)和 Web服务,它使用编译的C#来操纵HTML DOM来替代JavaScript。Blazor 的目标是让开发人员使用C#编程语言来编写 Web 应用程序,使得C#程序员可以在一个熟悉的编程语言中完成整个应用程序的开发。这样既可以提高开发效率,也可以减少学习成本。

  • Blazor的核心技术基于WebAssembly,它允许在浏览器中运行编译后的本地代码,从而使得.NET运行时可以在浏览器中运行。在Blazor 中,开发人员可以使用Razor模板语法或者C#语言来编写Web应用程序的逻辑和界面代码。Blazor 应用程序可以直接在浏览器中运行,也可以作为服务端应用程序在服务器端运行,并通过 SignalR 实时通信。

  • Blazor提供了一些常见的UI组件和布局控件,使得开发人员可以快速搭建 Web 应用程序的前端界面。此外,Blazor 还支持依赖注入、路由和可重用组件等功能,增强了应用程序的灵活性和可重用性。

总而言之:Blazor是一种新兴的Web应用程序框架,具有很大的潜力和发展前景。Blazor是在.NET和Razor上构建的用户界面框架,它采用了最新的Web技术和.NET框架优势,可以使用C# 编程语言编写Web 应用程序,它不仅可以提高开发效率,还可以提供更好的用户体验和更好的可维护性。

Blazor的优势和特点

Blazor是一个基于.NET框架和 C#编程语言构建 Web 应用程序的 UI 框架,它具有以下几个优势和特点:

  • 简化开发流程:在Blazor中,前端和后端都可以使用C#进行编程,使得C#程序员可以在一个熟悉的编程语言中完成整个应用程序的开发,避免了学习多种语言和框架的麻烦。

  • 高效的性能:Blazor应用程序可以直接在浏览器中运行,也可以在服务端运行,并通过SignalR实时通信,从而可以减少网络延迟和带宽消耗,提高应用程序的性能。

  • 安全性强:Blazor 应用程序不需要在客户端上运行任何JavaScript代码,相对于传统的Web应用程序,可以大幅度降低应用程序受到跨站点脚本攻击(XSS)的风险。

  • 易于测试和调试:由于Blazor应用程序的代码都是使用C#编写的,因此可以使用Visual Studio和其他C#开发工具对其进行测试和调试,简化了开发人员的工作和提高Bug查找效率。

  • 可以重用现有代码:由于Blazor使用.NET框架和C#编程语言,因此可以重用现有的.NET库和组件,简化了开发过程并提高了代码的复用性。

  • 单语言全栈开发:在 Blazor 中,开发人员可以使用同一种编程语言(C#)来构建 Web 应用程序的服务器端和客户端代码,从而实现一种全栈开发的方式(如果是一个小项目并且需要一个人同时撸前后端代码,用Blazor效率会更高)。

Blazor的劣势

  • 框架生态相对较弱:相比于Vue、React、Angular等前端框架,Blazor的生态尚不完全,社区资源和开源项目相对较少,这可能会增加开发人员的学习和解决问题的难度。

  • 目前仅支持最新版本的浏览器:虽然 Blazor 支持各种主流浏览器,但由于涉及到 WebAssembly 和其他新技术,一些旧版浏览器可能无法完全支持 Blazor 应用程序。

  • 学习曲线较陡峭:Blazor是一种全新的Web开发技术,可能对一些非.NET后端开发人员来说存在较大的学习曲线,需要付出更多的时间和精力来学习和掌握。

Blazor支持的平台

下表所示的浏览器在移动平台和桌面平台上均支持 Blazor WebAssembly 和 Blazor Server。

浏览者Version
Apple Safari当前版本+
Google Chrome当前版本+
Microsoft Edge当前版本+
Mozilla Firefox当前版本+

+当前版本指的是浏览器的最新版本。

对于 Blazor Hybrid 应用,我们测试并支持最新的平台 Web View 控件版本:

  • Windows 上的 Microsoft Edge WebView2👉

  • Android 上的 Chrome👉

  • iOS 和 macOS 上的 Safari👉

Blazor三种托管模型及其各自特点

1、Blazor Server

简介:

  Blazor Server 应用程序在服务器上运行,可享受完整的 .NET Core 运行时支持。所有处理都在服务器上完成,UI/DOM 更改通过 SignalR 连接回传给客户端。这种双向 SignalR 连接是在用户第一次从浏览器中加载应用程序时建立的。由于 .NET 代码已经在服务器上运行,因此您无需为前端创建 API。您可以直接访问服务、数据库等,并在传统的服务端技术上做任何您想做的事情。在客户端上,Blazor 脚本 (blazor.server.js) 与服务器建立 SignalR 连接。脚本由 ASP.NET Core 共享框架中的嵌入资源提供给客户端应用。客户端应用负责根据需要保持和还原应用状态。

图片

Blazor Server 托管模型具有以下优点:
  • 下载项大小明显小于 Blazor WebAssembly 应用,且应用加载速度快得多。

  • 应用可以充分利用服务器功能,包括对 .NET Core API 的使用。

  • 服务器上的 .NET Core 用于运行应用,因此调试等现有 .NET 工具可按预期正常工作。

  • 支持瘦客户端。例如,Blazor Server 应用适用于不支持 WebAssembly 的浏览器以及资源受限的设备。

  • 应用的 .NET/C# 代码库(其中包括应用的组件代码)不适用于客户端。

Blazor Server 托管模型具有以下局限性:
  • 通常延迟较高。每次用户交互都涉及到网络跃点。

  • 不支持脱机工作。如果客户端连接失败,应用会停止工作。

  • 若要缩放具有许多用户的应用,需要使用服务器资源处理多个客户端连接和客户端状态。

  • 需要 ASP.NET Core 服务器为应用提供服务。无服务器部署方案不可行,例如通过内容分发网络 (CDN) 为应用提供服务的方案。

2、Blazor WebAssembly

简介:

  Blazor WebAssembly(WASM)应用程序在浏览器中基于WebAssembly的.NET运行时运行客户端。Blazor应用程序及其依赖项和.NET运行时被下载到浏览器中。该应用程序直接在浏览器的UI线程上执行。UI更新和事件处理在同一进程中进行。应用程序的资产被作为静态文件部署到能够为客户提供静态内容的网络服务器或服务上。当Blazor WebAssembly应用被创建用于部署,而没有后端ASP.NET Core应用为其提供文件时,该应用被称为独立的Blazor WebAssembly应用。当应用程序被创建用于部署,并有一个后端应用程序为其提供文件时,该应用程序被称为托管的Blazor WebAssembly应用程序。

图片

Blazor WebAssembly 托管模型具有以下优点:
  • 从服务器下载应用后,没有 .NET 服务器端依赖项,因此,如果服务器脱机,应用将保持正常运行。

  • 可充分利用客户端资源和功能。

  • 工作可从服务器转移到客户端。

  • 无需 ASP.NET Core Web 服务器即可托管应用。无服务器部署方案可行,例如通过内容分发网络 (CDN) 为应用提供服务的方案。

Blazor WebAssembly 托管模型具有以下局限性:
  • 应用仅可使用浏览器功能。

  • 需要可用的客户端硬件和软件(例如 WebAssembly 支持)。

  • 下载项大小较大,应用加载耗时较长。

Blazor WebAssembly 支持预先 (AOT) 编译,你可以直接将 .NET 代码编译到 WebAssembly 中。AOT 编译会提高运行时性能,代价是应用大小增加。

3、Blazor Hybrid

简介:
  • Blazor 还可用于使用混合方法生成本机客户端应用。混合应用是利用 Web 技术实现其功能的本机应用。在 Blazor Hybrid 应用中,Razor 组件与任何其他 .NET 代码一起直接在本机应用中(而不在 WebAssembly 上)运行,并通过本地互操作通道基于 HTML 和 CSS 将 Web UI 呈现到嵌入式 Web View 控件。

  • 可以使用不同的 .NET 本机应用框架(包括 .NET MAUI、WPF 和 Windows 窗体)生成 Blazor Hybrid 应用。Blazor 提供 BlazorWebView 控件,将 Razor 组件添加到使用这些框架生成的应用。通过结合使用 Blazor 和 .NET MAUI,可以便捷地生成适用于移动和桌面的跨平台 Blazor Hybrid 应用,而将 Blazor 与 WPF 和 Windows 窗体集成可以更好地实现现有应用的现代化。

  • 由于 Blazor Hybrid 应用是本机应用,它们可以支持只有 Web 平台所没有的功能。通过正常的 .NET API,Blazor Hybrid 应用对本机平台功能具有完全访问权限。Blazor Hybrid 应用还可以与现有 Blazor Server 或 Blazor WebAssembly 应用共享和重复使用组件。Blazor Hybrid 应用结合了 Web、本机应用和 .NET 平台的优点。

图片

Blazor Hybrid 托管模型具有以下优点:
  • 重复使用可在移动、桌面和 Web 之间共享的现有组件。

  • 利用 Web 开发技能、体验和资源。

  • 应用对设备的本机功能具有完全访问权限。

Blazor Hybrid 托管模型具有以下局限性:
  • 必须为每个目标平台生成、部署和维护单独的本机客户端应用。

  • 与在浏览器中访问 Web 应用相比,查找、下载和安装本机客户端应用通常需要更长的时间。

如何选择要使用的托管模型?

根据应用的功能要求选择 Blazor 托管模型。下表显示了选择托管模型的主要注意事项。

Blazor Hybrid 应用包括 .NET MAUI、WPF 和 Windows 窗体框架应用。

功能Blazor ServerBlazor WebAssembly (WASM)Blazor Hybrid
与 .NET API 完全兼容✔️支持❌❌✔️支持
直接访问服务器和网络资源✔️支持❌不支持†❌不支持†
较小的有效负载,较快的初始加载速度✔️支持❌❌❌❌
接近本机执行速度✔️支持✔️支持‡✔️支持
服务器上安全且专用的应用代码✔️支持❌不支持†❌不支持†
下载后即可脱机运行应用❌❌✔️支持✔️支持
静态站点托管❌❌✔️支持❌❌
将处理过程转移至客户端❌❌✔️支持✔️支持
对本机客户端功能具有完全访问权限❌❌❌❌✔️支持
基于 Web 的部署✔️支持✔️支持❌❌

†Blazor WebAssembly 和 Blazor Hybrid 应用可以使用基于服务器的 API 来访问服务器/网络资源并访问专用和安全的应用代码。
‡Blazor WebAssembly 仅通过预先 (AOT) 编译达到接近本机性能。

总之,Blazor 的三种模式各有特点,可以根据应用场景选择适当的模式。如果需要访问服务器端资源或者需要实现实时通信功能,可以选择 Server 模式;如果需要实现离线访问或者减少网络流量,可以选择 WebAssembly 模式;如果需要兼顾两种模式的优势,可以选择 Hybrid 模式。

Razor语法简述

Blazor 是一种基于 .NET 平台的 Web 开发框架,它使用 C# 语言和 Razor 语法来编写前端代码。

什么是Razor?

  Razor 是一种标记语法,用于将基于 .NET 的代码嵌入网页中。Razor 语法由 Razor 标记、C# 和 HTML 组成。包含 Razor 的文件通常具有 .cshtml 文件扩展名。Razor 也可在 Razor 组件 文件 (.razor) 中找到。Razor 语法类似于各种 JavaScript 单页应用程序 (SPA) 框架(如 Angular、React、VueJs 和 Svelte)的模板化引擎。更多请查看ASP.NET Core 的 Razor 语法👉。

Razor 操作符

Razor 操作符是用于将 Razor 代码与 HTML 元素相互关联的语法。例如:

  • @ 符号:用于将 C# 代码嵌入到 HTML 中。

  • @: 符号:用于输出 HTML 编码的文本。

  • @@ 符号:用于在 Razor 模板中编写 @ 符号。

  • @() 符号:用于在 Razor 表达式中调用 C# 方法。

Razor代码块

<p>@UserName</p>@code{    private string UserName = "追逐时光者";}

隐式 Razor 表达式

隐式 Razor 表达式以 @ 开头,后跟 C# 代码:

<p>@DateTime.Now</p><p>@DateTime.IsLeapYear(2023)</p>

显式 Razor 表达式

显式 Razor 表达式由 @ 符号和平衡圆括号组成。若要呈现上一周的时间,可使用以下 Razor 标记:

<p>Last week this time: @(DateTime.Now - TimeSpan.FromDays(7))</p>

表达式编码

计算结果为字符串的 C# 表达式采用 HTML 编码。计算结果为 IHtmlContent 的 C# 表达式直接通过 IHtmlContent.WriteTo 呈现。计算结果不为 IHtmlContent 的 C# 表达式通过 ToString 转换为字符串,并在呈现前进行编码。​​​​​​​

@("<span>Hello World</span>")输出:HTML 在浏览器中显示为纯文本:<span>Hello World</span>

条件判断 @if, else if, else, and @switch

@if 控制何时运行代码:​​​​​​​

@if (value % 2 == 0){    <p>The value was even.</p>}

else 和 else if 不需要 @ 符号:​​​​​​​

@if (value % 2 == 0){    <p>The value was even.</p>}else if (value >= 1337){    <p>The value is large.</p>}else{    <p>The value is odd and small.</p>}

以下标记展示如何使用 switch 语句:​​​​​​​

@switch (value){    case 1:        <p>The value is 1!</p>        break;    case 1337:        <p>Your number is 1337!</p>        break;    default:        <p>Your number wasn't 1 or 1337.</p>        break;}

语句循环 @for, @foreach, @while, and @do while

可以使用循环控制语句呈现模板化 HTML。若要呈现一组人员:​​​​​​​

@{    var people = new Person[]    {          new Person("Weston", 33),          new Person("Johnathon", 41),          ...    };}

支持以下循环语句:

@for​​​​​​​

@for (var i = 0; i < people.Length; i++){    var person = people[i];    <p>Name: @person.Name</p>    <p>Age: @person.Age</p>}

@foreach​​​​​​​

@foreach (var person in people){    <p>Name: @person.Name</p>    <p>Age: @person.Age</p>}

@while​​​​​​​

@{ var i = 0; }@while (i < people.Length){    var person = people[i];    <p>Name: @person.Name</p>    <p>Age: @person.Age</p>    i++;}

@do while​​​​​​​

@{ var i = 0; }@do{    var person = people[i];    <p>Name: @person.Name</p>    <p>Age: @person.Age</p>    i++;} while (i < people.Length);

复合语句 @using

在 C# 中,using 语句用于确保释放对象。在 Razor 中,可使用相同的机制来创建包含附加内容的 HTML 帮助程序。在下面的代码中,HTML 帮助程序使用 @using 语句呈现 <form> 标记:​​​​​​​

@using (Html.BeginForm()){    <div>        Email: <input type="email" id="Email" value="">        <button>Register</button>    </div>}

@try, catch, finally

异常处理与 C# 类似:​​​​​​​

@try{    throw new InvalidOperationException("You did something invalid.");}catch (Exception ex){    <p>The exception message: @ex.Message</p>}finally{    <p>The finally statement.</p>}

图片

更多Razor语法请查看ASP.NET Core 的 Razor 语法👉。https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?view=aspnetcore-6.0

新建ZeroBlazor空白解决方案

1、启动 Visual Studio 2022选择创建新项目

图片

 2、搜索“空白解决方案“并创建

图片

图片

图片

使用VS 2022快速创建Blazor Server应用

1、在ZeroBlazor解决方案中添加新项目

图片

 2、添加新项目中搜索“Blazor Server 应用”进行创建

图片

图片

3、框架选择“.NET 7.0 (标准期限支持)”,然后单击“创建”按钮

图片

4、应用程序文件夹和文件介绍

图片

  • Program.cs 是启动服务器以及在其中配置应用服务和中间件的应用的入口点。

  • App.razor 为应用的根组件。

  • Pages 存放应用程序的 Razor 页面,每个 Razor 页面都对应着一个组件,用于呈现应用程序的 UI 元素。

  • Shared 存放多个 Razor 页面或组件之间共享的组件、布局和其他视图元素等。

  • wwwroot 该文件夹包含静态文件,例如图片、字体、图标、CSS 和 JavaScript 文件等。

  • BlazorAppSample.csproj 应用程序的项目文件,用于指定依赖项、编译选项和发布选项等。

  • Properties 目录中的 launchSettings.json 文件为本地开发环境定义不同的配置文件设置。创建项目时会自动分配端口号并将其保存在此文件上。

5、运行应用

单击 Visual Studio 调试工具栏中的“开始调试”按钮(绿色箭头)以运行应用,查看运行效果。

图片

图片

打开浏览器开发者工具(F12),您会注意到所有标准的 CSS 和 JavaScript 文件都下载到了客户端,并通过 Web Sockets 建立了一个 SignalR 连接。

图片

使用VS 2022快速创建Blazor WebAssembly应用

1、在ZeroBlazor解决方案中添加新项目

图片

2、添加新项目中搜索“Blazor WebAssembly 应用”进行创建

图片

图片

3、框架选择“.NET 7.0 (标准期限支持)”,然后单击“创建”按钮

图片

4、应用程序文件夹和文件介绍

图片

  • Program.cs 是启动服务器以及在其中配置应用服务和中间件的应用的入口点。它创建了WebAssemblyHostBuilder并启动它。

  • App.razor是应用程序的启动路由页面,里面规定了默认Layout。

  • Pages 存放应用程序的 Razor 页面,每个 Razor 页面都对应着一个组件,用于呈现应用程序的 UI 元素。

  • Shared 存放公共 Razor 页面或组件之间共享的组件、布局和其他视图元素等。

  • wwwroot 该文件夹包含静态文件,例如图片、字体、图标、CSS 和 JavaScript 文件等。

  • BlazorWasmSample.csproj 应用程序的项目文件,用于指定依赖项、编译选项和发布选项等。

  • Properties 目录中的 launchSettings.json 文件为本地开发环境定义不同的配置文件设置。创建项目时会自动分配端口号并将其保存在此文件上。

5、运行应用

单击 Visual Studio 调试工具栏中的“开始调试”按钮(绿色箭头)以运行应用,查看运行效果。

图片

正如我们看到的一样Blazor WebAssembly应用程序首次启动会比较慢,因为它会在客户端下载应用程序及其所有依赖项,你可以F12打开浏览器开发者工具,会看到客户端下载了大量dll文件(只会在第一次浏览时下载)。

图片

图片

以上所有dll文件只会在第一次请求时下载,然后它们会被缓存在浏览器中。如果你再次刷新页面,将会看到这此加载下载的文件很少,而且运行时不再需要网络,这样在断网环境或没有网络的离线下,仍然可以运行,再次运行时的情况:

图片

课外知识拓展

WebAssembly是什么?

  WebAssembly(缩写为“Wasm”)是一种开放标准,旨在提供一种高效且可移植的二进制格式,以运行跨平台的应用程序。与 JavaScript 不同,WebAssembly 不是一种高级脚本语言,而是一种可移植的二进制格式(低级指令集),它的主要目的是提供一种更高效和可移植的编程语言,以便于在 Web 平台上进行运行。可以将其他编程语言(如C++、C#、Golang、Rust等)的代码编译成 WebAssembly格式,可以实现比 JavaScript 更高效的运行速度,并且减少了代码大小和网络带宽的消耗。与传统的浏览器插件相比,WebAssembly 还具有更好的性能和更高的安全性。

目前,WebAssembly 可以在主流的 Web 浏览器(如 Chrome、Firefox、Safari 和 Edge)上运行,并且被越来越多的 Web 应用程序所采用。WebAssembly 还提供了与 JavaScript 相互操作的功能,使得开发人员可以轻松地在现有的 Web 应用程序中使用 WebAssembly。

SPA 单页面应用程序是什么?

  SPA(single-page application),翻译过来就是单页应用SPA是一种网络应用程序或网站的模型,它通过动态重写当前页面来与用户交互,这种方法避免了页面之间切换打断用户体验在单页应用中,所有必要的代码(HTMLJavaScriptCSS)都通过单个页面的加载而检索,或者根据需要(通常是为响应用户操作)动态装载适当的资源并添加到页面页面在任何时间点都不会重新加载,也不会将控制转移到其他页面举个例子来讲就是一个杯子,早上装的牛奶,中午装的是开水,晚上装的是茶,我们发现,变的始终是杯子里的内容,而杯子始终是那个杯子结构如下图(我们熟知的JS框架如react,vue,angular,ember都属于SPA)。

图片

Blazor UI组件库推荐

 值得推荐的Blazor UI组件库👉

ASP.NET Core Blazor入门到实战教程

公众号回复:Blazor实战,获取教程链接🐱‍🚀。

图片

Blazor相关学习教程

  • 微软官方教程ASP.NET Core Blazor👉:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/?view=aspnetcore-7.0

  • 全面的ASP.NET Core Blazor简介和快速入门👉:https://www.cnblogs.com/Can-daydayup/p/17157143.html

  • Blazor Server和WebAssembly应用程序入门指南👉:https://www.cnblogs.com/ittranslator/p/a-beginners-guide-to-blazor-server-and-webassembly-applications.html

  • Blazor教程 - 生成第一个 Blazor 应用👉:https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/run

  • 生成Blazor待办事项列表应用👉:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/tutorials/build-a-blazor-app?view=aspnetcore-6.0&pivots=server

  • 使用Blazor的ASP.NET Core SignalR👉:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/tutorials/build-a-blazor-app?view=aspnetcore-6.0&pivots=server

  • 使用 Blazor 构建 Web 应用程序👉:https://learn.microsoft.com/zh-cn/training/paths/build-web-apps-with-blazor/?view=aspnetcore-6.0

参考文章

微软官方教程ASP.NET Core Blazor:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/?view=aspnetcore-7.0

Blazor VS 传统Web应用程序:https://zhuanlan.zhihu.com/p/343079368

Blazor Server 和 WebAssembly 应用程序入门指南:https://www.cnblogs.com/ittranslator/p/a-beginners-guide-to-blazor-server-and-webassembly-applications.html

什么是SPA单页面应用:https://www.cnblogs.com/xiaozhuangge/p/15396609.html

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

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

相关文章

大数据01-导论

零、文章目录 大数据01-导论 1、数据与数据分析 **数据&#xff1a;是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加工的原始素材。**数据可以是连续的值&#xff0c;比如声音、图像&#xff0c;称为模拟数据&#xff1b;也可…

探索【注解】、【反射】、【动态代理】,深入掌握高级 Java 开发技术

文章目录 Java注解1.注解基础2.注解原理 反射1.Class对象的获取1.基础公共类1.1.Object > getClass()1.2.类名.class 的方式1.3.Class.forName() 2.获取类的成员变量3.获取成员方法并调用4.反射优缺点 代理1.结构2.静态代理2.1.案例1-计算前后校验2.1.1.创建接口2.1.2.创建实…

Ubuntu20.04 安装jekyll

首先使根据官方文档安装&#xff1a;Jekyll on Ubuntu | Jekyll • Simple, blog-aware, static sites 如果没有报错&#xff0c;就不用再继续看下去了。 我这边在执行gem install jekyll bundler时报错&#xff0c;所以安装了rvm&#xff0c;安装rvm可以参考这篇文章Ubuntu …

javaweb——socket

定义 Socket&#xff08;套接字&#xff09;是计算机网络编程中的一种抽象&#xff0c;用于在网络上进行通信。它允许计算机之间通过网络进行数据传输。在Java中&#xff0c;Socket类提供了对TCP/IP协议的支持&#xff0c;通过它可以创建客户端和服务端程序&#xff0c;实现网…

FLUENT Meshing Watertight Geometry工作流入门 - 9 生成体网格

本视频中学到的内容&#xff1a; 讨论体网格的重要性&#xff0c;并了解生成体网格的不同方法 了解体网格质量&#xff0c;以及如何改进 视频链接&#xff1a; FLUENT Meshing入门教程-9生成体网格_哔哩哔哩_bilibili 体网格生成是使用大量离散体积或单元来离散化/表示计算模…

跨境云手机如何简化tiktok运营流程

如今&#xff0c;tiktok已经成为世界范围内都非常流行的社交媒体平台。然而在大多数情况下&#xff0c;由于网络原因&#xff0c;tiktok无法在国内使用&#xff0c;但依然有越来越多的人注册tiktok号码、建立tiktok矩阵。原因是tiktok仍然有大量的流量可供商业使用&#xff0c;…

java面试题基础篇

1.java面向对象三大特性 ​ 封装&#xff08;Encapsulation&#xff09;&#xff1a;是面向对象方法的重要原则&#xff0c;就是把对象的属性和操作&#xff08;或服务&#xff09;结合为一个独立的整体&#xff0c;并尽可能隐藏对象的内部实现细节。 ​ 继承&#xff1a;就是…

php 函数(方法)、日期函数、static关键字

php 函数、日期函数 1. php函数2. 日期函数3. static 1. php函数 函数是一段可重复使用的代码块&#xff0c;可以将一系列操作封装起来&#xff0c;使代码更加模块化、可维护和可重用&#xff0c;来大大节省我们的开发时间和代码量&#xff0c;提高编程效率。 <?php// …

Sora OpenAI 101教程(一):从文本生成令人兴奋的视频的 AI 模型

想象一下&#xff0c;您可以通过简单的文本提示创建令人惊叹的视频&#xff0c;例如“一个人带着狗在月球上行走”。听起来不可能&#xff0c;对吧&#xff1f;好吧&#xff0c;现在不再这样了&#xff0c;感谢 OpenAI 的最新人工智能模型 Sora&#xff0c;它可以从文本生成令人…

情人节官宣频发,白敬亭宋轶等多对情侣陷情风。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 情人节甜蜜满溢&#xff0c;娱乐圈情侣们争相晒幸福。2024年&…

《苍穹外卖》知识梳理P11-Apache POI导出报表

一.Apache POI 可以通过Apache POI处理excel文件&#xff0c;核心操作是读和写 应用场景 银行网银交易明细各种业务系统导出Excel报表批量导入业务数据 使用步骤 1.导入maven坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi&…

安装ts-node有感

起因&#xff1a;想要在vsCode上运行ts脚本 解决方案&#xff1a; 1.安装vsCode插件 code runner 2.全局安装ts-node 这一步遇到三个问题&#xff1a; ①.node版本问题&#xff1a;需安装版本18以上node&#xff0c;可使用nvm去控制不同的node版本 ②.certificate has exp…

NHANES数据库使用(1)

官网&#xff1a;NHANES - National Health and Nutrition Examination Survey Homepagehttps://www.cdc.gov/nchs/nhanes/index.htm 1、打开数据库 2、 选择数据集 B区检索方法和变量。C区检索数据集。A区含有B区和C区的功能。选择 NHANES 2017-March 2020打开。 3、打开数据…

flowpilot Pxiel 6 redmi K30 Pro

Installation flowdriveai/flowpilot Wiki GitHub Flowpilot can be installed on: Android phone Non-rooted running Android 10Android 11Android 12Rooted running Android 13 requires rootDesktop pc with Ubuntu > 20.04. 安装Termux https://f-droid.org/repo…

【Kuiperinfer】笔记01 项目预览与环境配置

学习目标 实现一个深度学习推理框架设计、编写一个计算图实现常见的算子&#xff0c;例如卷积、池化、全连接学会如何进行算子的优化加速使用自己的推理框架推理常见模型&#xff0c;检查结果是否能够和torch对齐 什么是推理框架&#xff1f; 推理框架用于对已经训练完成的模…

【完全二叉树节点数!】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数

【完全二叉树】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数 :star:解法1 按照完全二叉树解法2 按照普通二叉树&#xff1a;深度优先遍历 后序 左右中解法3 按照普通二叉树&#xff1a;广度优先遍历 层序遍历 ---------------&#x1f388;&#x1f388;题目链接…

Linux进程概念 (下) 地址空间

前言 中篇讲了进程为什么要有优先级&#xff0c;以及环境变量和通过代码获得环境变量 本篇主要讲解什么是地址空间 &#xff0c; 地址空间是怎么设计的&#xff1f;为什么要有地址空间&#xff1f; 程序地址空间 先看下图 验证上图的正文代码至堆的地址是不是从低地址向高地…

python-自动化篇-运维-网络-IP

文章目录 IP自我介绍IPy安装模块windowsLinux IPy介绍支持大多数 IP 地址格式IPv4 地址IPv6 地址网络掩码和前缀 派生网络地址将地址转换为字符串使用多个网络多网络计算方法 IP自我介绍 IP地址规划是网络设计中非常重要的一个环节&#xff0c;规划的好坏会直接影响路由协议算…

红队攻防之office文件钓鱼制作ppt钓鱼

为众人抱薪者&#xff0c;不可使其冻毙于风雪&#xff1b;为自由开路者&#xff0c;不可使其困顿于荆棘。 PPT手势触发 这种攻击则利用的是鼠标轨迹来进行操作&#xff0c;比如鼠标点击、鼠标移动等。 首先&#xff0c;创建一个普通的PPTX文件&#xff0c;随便填入一些内容&…

Shell脚本条件语句

1.条件测试 文件测试与整数测试 test命令 测试表达式是否成立&#xff0c;若成立返回0&#xff0c;不成立返回其他数值 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 测试 是否成功使用 $? 操作符&#xff1a; -d&#xff1a;测试是否为目…