[回馈]ASP.NET Core MVC开发实战之商城系统(一)

news2024/12/26 21:23:46

经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,今天着重讲解布局设计,环境搭建,系统配置,及首页商品类型,banner条,友情链接等功能的开发。

 

首页布局设计

首页是商城系统的门面,首页的设计的好坏关系着用户的体验,在本示例中,首页主要分为以下几个模块,如下所示:

项目环境搭建

1. 安装第三方库

所谓“工欲善其事必先利其器”,在开发程序之前,先将项目配置好。项目需要安装的第三方库,可通过Nuget包管理器进行安装。

目前程序用到的第三方库有三个:

  • 日志组件:NLog,NLog.Web.AspNetCore,主要用于记录系统日子。
  • 数据库组件:目前采用SqlSugarCore,访问数据库程序。

具体安装库和版本如下所示:

2. 启动配置

汽配启动配置主要配置注入服务,及路由,主要有以下几个:

  • Session服务,由于到进行用户身份验证,所以需要用到Session。
  • 鉴权/授权组件,主要用于什么验证及权限管理。
  • 日志组件,记录程序执行过程的日志,便于问题分析和解决。
  • 路由控制器注入。

具体配置【Program.cs】参照如下所示:

using EasyBuyShop.DAL;
using EasyBuyShop.Utils;
using Microsoft.AspNetCore.Authentication.Cookies;
using NLog.Web;
 
var builder = WebApplication.CreateBuilder(args);
 
// Add services to the container.
builder.Services.AddControllersWithViews();
 
//1. 往容器中添加Session服务,启用Session服务
builder.Services.AddSession(option =>
{
    option.IdleTimeout = TimeSpan.FromMinutes(10);
    option.Cookie.Name = "DemoMvcCore";
});
 
//添加鉴权服务
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
 
}).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    options.LoginPath = "/Auth/Login";
    options.LogoutPath = "/Auth/Logout";
});
 
// NLog: Setup NLog for Dependency injection
builder.Logging.ClearProviders();
builder.Host.UseNLog();
 
LogHelper.LoadConfiguration();
 
var app = builder.Build();
 
//启动时获取数据库连接字符串
BaseDal.ConnStr = app.Configuration.GetConnectionString("Default");
 
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
 
//2.使用Session中间件,主要用于拦截Http请求
app.UseSession();
 
app.UseHttpsRedirection();
app.UseStaticFiles();
 
app.UseRouting();
 
app.UseAuthentication();
 
app.UseAuthorization();
 
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
 
app.Run();

3. 配置文件

配置文件【appsetting.json】主要配置数据库连接字符串,及其他信息。如下所示:

{
  "ConnectionStrings": {
    "Default": "Server=localhost;Database=EasyBuyShop;Trusted_Connection=True;User Id=sa;Password=abc123"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

4. 日志配置

日志配置【nlog.config】主要配置NLog组件需要的日志保存路径以及层级等信息。如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="\Logs\internal-nlog-AspNetCore.txt">
 
	<!-- enable asp.net core layout renderers -->
	<extensions>
		<add assembly="NLog.Web.AspNetCore"/>
	</extensions>
 
	<!-- the targets to write to -->
	<targets>
		<!-- File Target for all log messages with basic details -->
		<target xsi:type="File" name="allfile" fileName="${basedir}\Logs\nlog-all-${shortdate}.log"
				layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}" />
 
		<!-- File Target for own log messages with extra web details using some ASP.NET core renderers -->
		<target xsi:type="File" name="ownFile-web" fileName="${basedir}\Logs\nlog-own-${shortdate}.log"
				layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
 
		<!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
		<target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
	</targets>
 
	<!-- rules to map from logger name to target -->
	<rules>
		<!--All logs, including from Microsoft-->
		<logger name="*" minlevel="Info" writeTo="allfile" />
 
		<!--Output hosting lifetime messages to console target for faster startup detection -->
		<logger name="*" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />
 
		<!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) -->
		<logger name="Microsoft.*" minlevel="Info" final="true" />
		<logger name="System.Net.Http.*" minlevel="Info" final="true" />
 
		<logger name="*" minlevel="Info" writeTo="ownFile-web" />
	</rules>
</nlog>

注意:NLog日志组件不支持相对路径配置,如果想让日志保存在程序根目录,需要通过${basedir}进行配置,否则日志如法保存。

页面布局

其中Header,Footer,前台各个页面都会用到,所以采用Layout布局页面展示【_Layout.cshtml】。如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - 易购商城</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/css/shop_style.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/EasyBuyShop.styles.css" asp-append-version="true" />
</head>
<body>
    <header class="py-3 mb-3 border-bottom container" style="padding-left: 0px;padding-right: 0px;">
        <div class="container-fluid d-grid gap-3 align-items-center" style="grid-template-columns: 1fr 9fr;width:100%;padding-left: 0px;padding-right: 0px;">
            <div class="dropdown">
                <a href="/Home/Index" class="d-flex align-items-center col-lg-4 mb-2 mb-lg-0 link-dark text-decoration-none dropdown-toggle">
                    <h2>易购商城</h2>
                </a>
            </div>
 
            <div class="d-flex align-items-center">
                <form class="w-100 me-3" role="search" action="/Product/Index/">
                    <div>
                        <input type="search" class="form-control" placeholder="商品名称" aria-label="Search" style="width:85%;display:inline-block;line-height:1.7" name="productName">
                        <button type="submit" class="btn btn-outline-primary">搜索</button>
                    </div>
                </form>
 
                <div class="flex-shrink-0 dropdown">
                    @if (!string.IsNullOrEmpty(ViewBag.UserName))
                    {
                        <a href="#" class="d-block link-dark text-decoration-none dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
                            <span>@ViewBag.RealName</span>
                        </a>
                        <ul class="dropdown-menu text-small shadow" style="">
                            <li><a class="dropdown-item" href="/Cart/Index">购物车</a></li>
                            <li><a class="dropdown-item" href="/Personal/Setting">设置</a></li>
                            <li><a class="dropdown-item" href="/Personal/Index">个人信息</a></li>
                            <li><hr class="dropdown-divider"></li>
                            <li><a class="dropdown-item" href="/Auth/Logout">登出</a></li>
                        </ul>
                    }
                    else
                    {
                        <a href="/Auth/Login" class="d-block link-dark text-decoration-none">
                            <span>亲,请登录</span>
                        </a>
                    }
                    
                </div>
            </div>
        </div>
    </header>
    <div class="container" style="padding-left:0px;padding-right:0px;">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>
    <footer class="py-3 my-4 border-top footer text-muted" style="line-height:10px;margin-bottom:0.5rem!important;">
        <p class="text-center text-muted">© 2023-2024 易购商城 老码识途 公子小六</p>
    </footer>
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>
    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

布局页面效果如下所示:

页头【Header】包含一个Form表单,用于查询商品信息,如下所示:

页脚【Footer】用于设置版权信息,如下所示:

商品类型功能

首先每一个商品有类型,类型分为大类【Category】,中类,小类【SubCategory】,细类等,本文为了简化,只分为大类,小类两种。

1. 数据库设计

数据表结构设计如下:

大类Category表,如下所示:

建表语句如下所示:

CREATE TABLE [dbo].[EB_Category](
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	[Category] [varchar](100) NULL,
	[Description] [varchar](500) NULL,
	[CreateTime] [datetime] NULL,
	[CreateUser] [varchar](50) NULL,
	[LastEditTime] [datetime] NULL,
	[LastEditUser] [varchar](50) NULL
) ON [PRIMARY]

小类SubCategory表,如下所示:

注意:数据表中的分类内容,是从某宝抄下来的,然后整理好后,导入数据库。

建表语句如下所示:

CREATE TABLE [dbo].[EB_SubCategory](
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	[CategoryId] [bigint] NULL,
	[SubCategory] [varchar](100) NULL,
	[Description] [varchar](500) NULL,
	[CreateTime] [datetime] NULL,
	[CreateUser] [varchar](50) NULL,
	[LastEditTime] [datetime] NULL,
	[LastEditUser] [varchar](50) NULL
) ON [PRIMARY]

2. 项目模型创建

SqlSurgar采用模型对象映射ORM操作数据库,所以需要先创建模型对象。

大类Category模型对象,如下所示:

using SqlSugar;
 
namespace EasyBuyShop.Models
{
    [SugarTable("EB_Category")]
    public class Category : EntityModel
    {
        [SugarColumn(ColumnName ="Category")]
        public string CategoryName { get; set; }
 
        public string Description { get; set; }
    }
}

小类SubCategory模型对象,如下所示:

using SqlSugar;
 
namespace EasyBuyShop.Models
{
    [SqlSugar.SugarTable("EB_SubCategory")]
    public class SubCategory : EntityModel
    {
        public long CategoryId { get; set; }
 
        [SugarColumn(ColumnName = "SubCategory")]
        public string SubCategoryName { get; set; }
        public string Description { get; set; }
    }
}

其中EntityModel为模型基类,为公共类型,如下所示:

using SqlSugar;
using System.ComponentModel.DataAnnotations.Schema;
using System.Security.Principal;
 
namespace EasyBuyShop.Models
{
    public class EntityModel
    {
        [SugarColumn(IsNullable = false, IsIdentity = true)]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public DateTime CreateTime { get; set; }
        public string CreateUser { get; set; }
        public DateTime LastEditTime { get; set; }
        public string LastEditUser { get; set; }
    }
}

3. 数据库操作类

数据库操作类位于DAL层,每一个表都有对应的DAL层,如下所示:

大类Category数据表操作DAL层,如下所示:

using EasyBuyShop.Models;
 
namespace EasyBuyShop.DAL
{
    public class CategoryDal:BaseDal
    {
        public CategoryDal()
        {
 
        }
 
        public List<Category> GetCategories()
        {
            return this.getTList<Category>();
        }
    }
}

小类SubCategory数据表操作DAL层,如下所示:

using EasyBuyShop.Models;
 
namespace EasyBuyShop.DAL
{
    public class SubCategoryDal : BaseDal
    {
        public List<SubCategory> GetSubCategories()
        {
            return this.getTList<SubCategory>();
        }
    }
}

其中BaseDal为基类,数据库操作的公共方法,如下所示:

using EasyBuyShop.Utils;
using SqlSugar;
 
namespace EasyBuyShop.DAL
{
    public class BaseDal
    {
 
        public static string ConnStr = string.Empty;
        /// <summary>
        /// 获取程序数据库操作对象
        /// </summary>
        /// <param name="strConn">数据库连接字符串</param>
        /// <returns></returns>
        public SqlSugarClient GetDb(string strConn)
        {
            var db = new SqlSugarClient(
                new ConnectionConfig()
                {
                    ConnectionString = strConn,
                    DbType = DbType.SqlServer,
                    IsAutoCloseConnection = true,
                    InitKeyType = InitKeyType.Attribute,
                    AopEvents = new AopEvents
                    {
                        OnLogExecuting = (sql, p) =>
                        {
                            LogHelper.Info(sql);
                            LogHelper.Info(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
                        }
                    }
                });
            return db;
        }
 
 
 
        /// <summary>
        /// 查询所有的用户记录
        /// </summary>
        /// <returns></returns>
        public List<T> getTList<T>()
        {
            try
            {
                return this.GetDb(ConnStr).Queryable<T>().ToList();
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return null;
            }
        }
 
 
        /// <summary>
        /// 插入一条记录
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public int InsertT<T>(T model) where T : class, new()
        {
            try
            {
                return this.GetDb(ConnStr).Insertable<T>(model).ExecuteCommand();
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return -1;
            }
        }
 
    }
}

4. 商品类型控制器部分

商品类型只是首页【/Home/Index】的一小部分,首页的控制器获取到商品类型信息,然后传递到视图层即可。如下所示:

public IActionResult Index()
{
    CategoryDal categoryDal = new CategoryDal();
    SubCategoryDal subCategoryDal = new SubCategoryDal();
    var categories = categoryDal.GetCategories();
    var subCategories = subCategoryDal.GetSubCategories();
    ViewData["Categories"] = categories;
    ViewData["SubCategories"] = subCategories;
    return View();
}

5. 商品类型视图部分

商品类型视图在首页【/Home/Index.cshtml】中,如下所示:

<div mxs="x30_:_" class="left-nav" data-spm="1998549605" style="width: 280px;height: 280px;position: absolute;left: 0px;top: 0;z-index: 2;">
	<div class="chanel-list-wrap" id="J_MAIN_CHANEL" style="background-color: #F8F8F8;border: 1px solid #eee;border-radius: 12px;font: 12px/1.5 tahoma, arial;height: 100%;">
		@foreach(var category in ViewData["Categories"] as List<Category>)
		{
			var id = category.Id;
 
			var subCategories = ViewData["SubCategories"] as List<SubCategory>;
 
			var subCategoriesById = subCategories.Where(r => r.CategoryId == id);
			<div class="chanel-container">
				<div class="chanel-container-inner clearfix" style="border-radius: 12px 12px 0 0;">
					<div class="chanel-tags-wrap">
						<div class="chanel-title">
							<a href="" class="atbfont" target="_blank">ↂ</a>
							<a href="" class="title" target="_blank">@category.CategoryName</a>
						</div>
						<div class="chanel-tags clearfix">
							@foreach(var subCategory in subCategoriesById)
							{
								<a href="/Product/Index/?CategoryId=@(id)&subCategoryId=@(subCategory.Id)" class="" target="_blank">@subCategory.SubCategoryName</a>
							}
						</div>
					</div>
				</div>
			</div>
		}
	</div>
</div>

6. 商品类型示例

商品类型示例效果图,如下所示:

banner条及友情链接

banner条主要用与广告位之类的显示,友情链接主要用于链接其他网站或者站内页面。目前banner条设计了两张静态图,友情链接参考了某宝内容,视图文件如下所示:

<div mxa="x30_:b" class="main-right clearfix">
	<div mxa="x30_:c" class="main-right-top" style="height: 280px;position: relative;z-index: 1;font-size: 0;">
		<div mxa="x30_:d" class="slide-container clearfix">
			<div mxa="x30_:e" class="slide-wrap swiper swiper-container-horizontal" id="index-mainSlide">
				<div mxa="x30_:f" class="slide-con swiper-wrapper" style="height:280px;position:relative;left:0px;display:flex">
					<div class="con-pannel swiper-slide swiper-slide-duplicate-active" data-swiper-slide-index="1">
						<a href="#" target="_blank">
							<img class="swiper-lazy swiper-lazy-loaded" src="~/imgs/001.jpg" width="730" height="280" />
						</a>
					</div>
					<div class="con-pannel swiper-slide swiper-slide-duplicate-active" data-swiper-slide-index="0">
						<a href="#" target="_blank">
							<img class="swiper-lazy swiper-lazy-loaded" src="~/imgs/002.jpg" width="730" height="280" />
						</a>
					</div>
					<div class="con-pannel swiper-slide swiper-slide-duplicate-active" data-swiper-slide-index="1">
						<a href="#" target="_blank">
							<img class="swiper-lazy swiper-lazy-loaded" src="~/imgs/001.jpg" width="730" height="280" />
						</a>
					</div>
					<div class="con-pannel swiper-slide swiper-slide-duplicate-active" data-swiper-slide-index="0">
						<a href="#" target="_blank">
							<img class="swiper-lazy swiper-lazy-loaded" src="~/imgs/002.jpg" width="730" height="280" />
						</a>
					</div>
				</div>
			</div>
		</div>
		<div mxa="x30_:g" class="bl-right-navigation">
			<div mxs="x30_:e" class="right-brands-title" data-spm="19985674830">
				<a target="_blank" href="/Home/Index" style="color:#ff0036;"><i class="atbfont">✮</i>我的商城</a>
			</div>
			<ul mxa="x30_:h" class="right-brands-list clearfix">
				<li data-spm="19985674831">
					<a target="_blank" href="/Home/Index" style="text-decoration: none!important;">
						<i class="atbfont" style="font-size: 22px;color:#c50a0a;">易购商城</i>
					</a>
				</li>
				<li data-spm="19985674832">
					<a target="_blank" href="">
						<img src="~/imgs/others/taobao.gif" width="119" height="61">
					</a>
				</li>
				<li data-spm="19985674833">
					<a target="_blank" href="">
						<img src="~/imgs/others/juhuasuan.gif" width="119" height="61">
					</a>
				</li>
				<li data-spm="19985674834">
					<a target="_blank" href="">
						<img src="~/imgs/others/chaojiyouxuan.png" width="119" height="61">
					</a>
				</li>
				<li data-spm="19985674835">
					<a target="_blank" href="" style="text-decoration: none!important;">
						<i class="atbfont" style="font-size: 22px;color:#ff4400;">九块九</i>
					</a>
				</li>
				<li data-spm="19985674836">
					<a target="_blank" href="">
						<img src="~/imgs/others/tianmaoguoji.png" width="119" height="61">
					</a>
				</li>
				<li data-spm="19985674837">
					<a target="_blank" href="">
						<img src="~/imgs/others/tianmaochaoshi.gif" width="119" height="61">
					</a>
				</li>
				<li data-spm="19985674838">
					<a target="_blank" href="">
						<img src="~/imgs/others/ailijiankang.png" width="119" height="61">
					</a>
				</li>
			</ul>
		</div>
	</div>
</div>

以上就是ASP.NET Core MVC开发实战之商城系统(一) 的全部内容,后续将继续介绍其他模块。

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

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

相关文章

Android使用Shape画格子图和圆形

觉得画来玩玩&#xff0c;比较有趣&#xff0c;记录一下。 1格子。 <?xml version"1.0" encoding"utf-8"?> <layer-list xmlns:android"http://schemas.android.com/apk/res/android"><item ><shape><solid andro…

性能测试-Jmeter之Linux下压力测试

我们在做测试的时候&#xff0c;有时候要运行很久&#xff0c;公司用的测试服务器一般都是linux&#xff0c;就可以运行在linux下面&#xff0c;linux下面不能像windows一样有图形化界面&#xff0c;那怎么运行脚本呢&#xff0c;就先在windows上把脚本做好&#xff0c;然后在l…

解决ORACLE PLSQL查询速度慢问题

在表内已建有索引情况下&#xff0c;查询速度有时快&#xff0c;有时慢的问题。 数据库&#xff1a;Oracle&#xff0c; 工具&#xff1a;PlsqlDev 不走索引的原因通常有以下几种&#xff1a; 1.索引失效或丢失&#xff1a;当数据库中的索引被减少、删除或者失效时&#xff0…

浅析JAVA虚拟机结构与机制

本文旨在给所有希望了解 可以看出&#xff0c;JVM主要由类加载器子系统、运行时数据区&#xff08;内存空间&#xff09;、执行引擎以及与本地方法接口等组成。其中运行时数据区又由方法区、堆、Java栈、PC寄存器、本地方法栈组成。 从上图中还可以看出&#xff0c;在内存空间…

Flask 创建文件目录,删除文件目录

项目结构 app.py from flask import Flask, render_template, request, redirect, url_for import osapp Flask(__name__) BASE_DIR os.path.abspath(os.path.dirname(__file__)) FILE_DIR os.path.join(BASE_DIR, testfile)app.route(/, methods[GET, POST]) def index():…

心海舟楫、三一重工面试(部分)

心海舟楫 一道算法题&#xff1a; 我开始给出的是暴力解法&#xff0c;时间复杂度O(n^2)。 在面试官的提示下&#xff0c;实现了时间复杂度为O(n)的解法。 三一重工 没啥特别的

【VTK】VTK 让小球动起来,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 版本环境A.uiA.hA.cppRef. 本文主要目的是在 Qt 界面中&#xff0c;显示出来使用 VTK 构建的小球&#xff0c;并让小球能够动起来。同时为了方便对比…

第2章 SparkSQL 核心编程

第2章 SparkSQL 核心编程 2.1 新的起点2.2 DataFrame2.2.1 创建 DataFrame2.2.2 SQL 语法2.2.3 DSL 语法2.2.4 RDD 转换为 DataFrame2.2.5 DataFrame 转换为 RDD 2.3 DataSet2.3.1 创建 DataSet2.3.2 RDD 转换为 DataSet2.3.3 DataSet 转换为 RDD 2.4 DataFrame 和 DataSet 转…

学习记录681@Gitlab升级实战

前言 我的Linux目前是centos8&#xff0c;目前使用的gitlab是从https://mirrors.tuna.tsinghua.edu.cn/ 下载下来的gitlab-ce-12.10.1-ce.0.el8.x86_64.rpm&#xff0c;然后安装的。 这里需要注意如果是centos8需要下载el8的gitlab&#xff0c;如果是centos7需要下载el7的git…

golang - 下载大文件,实时返回前端下载进度,实现下载进度条

示例&#xff1a; package mainimport ("fmt""io""net/http""os""path"//"github.com/kataras/iris""github.com/kataras/iris/v12""time" )func doSomething() {time.Sleep(time.Second * …

大数据学习04-Hbase分布式集群部署

系统环境&#xff1a;centos7 软件版本&#xff1a;jdk1.8、zookeeper3.4.8、hadoop2.8.5 一、下载 HBASE官网 cd /home/toolswget https://archive.apache.org/dist/hbase/2.2.4/hbase-2.2.4-bin.tar.gz二、解压 tar -zxvf hbase-2.2.4-bin.tar.gz -C /home/local/移动目…

【弹力设计篇】聊聊降级设计

我们知道在分布式系统中&#xff0c;故障是不可避免的&#xff0c;所以我们需要设计一个高可用的系统&#xff0c;对于接口层面除了幂等&重试机制&#xff0c;还需要保证接口高可用&#xff0c;因此 限流&排队&降级&熔断也需要考虑。本篇主要介绍下接口故障下降…

Qt 之 自定义json配置文件类,QJsonDocument应用

目录 一、前言 二、头文件代码 三、源文件代码 四、使用示例 五、使用效果 一、前言 Qt的配置类QSettings主要是键值结构的配置&#xff0c;若需要的配置项为树形结构&#xff0c;例如配置学校\学院\班级\学生这样&#xff0c;使用键值结构已经不满足我们的需求了&#xf…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 21 日论文合集)

文章目录 一、分割|语义相关(14篇)1.1 CNOS: A Strong Baseline for CAD-based Novel Object Segmentation1.2 Spinal nerve segmentation method and dataset construction in endoscopic surgical scenarios1.3 WeakPolyp: You Only Look Bounding Box for Polyp Segmentatio…

【unity】模型裁剪shader(建筑生长动画)

【unity】模型裁剪shader&#xff08;建筑生长动画&#xff09; 思路 使用的核心方法是clip,当传入正值时渲染&#xff0c;传入负值时不渲染。定义一个裁剪向量&#xff0c;使用裁剪向量和模型点点乘&#xff0c;如果模型点和裁剪向量是同一个方向&#xff0c;点乘为正&#…

代码随想录算法训练营第58天|739 496

739 用stack来写 stack里面发index 不要放数值 重点在于 1.填写result数组不需要按顺序填写 根据index就可以 2.遍历的值比top小的话就放入stack 这样stack里面是一个递减数组 遍历的值只需和top比 如果比他大就pop 一直到把stack里面比新加入的值小的都pop完为止 这样stack里…

vue项目的vue.config.js在打包过程中,并不会处理api请求。

主要处理打包选项和静态资源文件 请求是axios处理的

nonebot2聊天机器人插件12:stable_diffusion_webui_api

nonebot2聊天机器人插件12&#xff1a;stable_diffusion_webui_api 1. 插件用途2. 代码实现3. 实际效果 该插件涉及知识点&#xff1a;定时器&#xff0c;调用bot的api发送消息 插件合集&#xff1a;nonebot2聊天机器人插件 该系列为用于QQ群聊天机器人的nonebot2相关插件&…

IPO向上,大模型向下:中国企服寻找新「出口」

2023年&#xff0c;资本市场给企服行业带来的动荡&#xff0c;无疑是一次洗牌机会。只有当SaaS企业深耕产业侧&#xff0c;才能找到实现标准化的解法&#xff0c;才能在一波又一波的浪潮下抓住机遇。 作者|思杭 编辑|皮爷 出品|产业家 2023上半年&#xff0c;企服行业在…

MySQL存储过程——系统变量

1.存储过程中的变量 1.1 查看系统变量 查看所有的系统变量 show variables;查看会话级别的系统变量 show session variables&#xff1b;查看会话和auto相关的变量 show session variables like auto%;查看全局的和auto相关变量 show global variables like auto%;查看某一…