【Ubuntu】Ubuntu arm64 部署 Blazor Server 应用

部署步骤

  1. 发布
  2. 安装运行环境:dotnet-sdk(必装)、aspnetcore-runtimedotnet-runtime
  3. 安装证书
  4. 设置环境变量:临时变量当前用户永久变量所有用户的永久变量
  5. 运行:终端运行后台运行
    在这里插入图片描述

基本情况

开发系统环境

  • 系统:Windows 10 专业版 22H2 19045.3693
  • 开发软件IDE:Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.6.5
  • 项目框架:Blazor Server 应用
  • 目标框架:.NET 6.0
  • 系统架构:x64
    在这里插入图片描述

发布系统环境

  • 系统:Ubuntu 20.04.6 LTS focal
  • 架构:arm64

系统信息

lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

查看架构

sudo dpkg  --print-architecture

arm64

二、部署

2.1 准备部署文件

2.1.1 发布

  • 配置: Release
  • 目标框架(F): net6.0
  • 部署模式(M): 框架依赖
  • 目标运行时(U): 可移植
    在这里插入图片描述

2.1.2 打包文件 - 压缩zip

如:RSS_NCD_MINI_BlazorServer.zip

2.1.3 将打包文件从Windows拷贝到Ubuntu系统

推荐将文件放在/home/<用户>/<新建公司名/产品名>/<项目名>目录下
如:/home/signway/rsszy/webapp3/

2.1.4 释放文件 - 解压zip

  1. 打开Ubuntu终端
  2. 跳转到RSS_NCD_MINI_BlazorServer.zip所在目录
cd /home/signway/rsszy/webapp3/
  1. 使用unzip指令解压RSS_NCD_MINI_BlazorServer.zip文件
unzip RSS_NCD_MINI_BlazorServer.zip

Archive:  RSS_NCD_MINI_BlazorServer.zipinflating: Microsoft.IdentityModel.Protocols.OpenIdConnect.dll  inflating: Microsoft.IdentityModel.Tokens.dll  inflating: RSS_NCD(MINI)_BlazorServer.deps.json  inflating: RSS_NCD(MINI)_BlazorServer.dll  inflating: RSS_NCD(MINI)_BlazorServer.exe  inflating: RSS_NCD(MINI)_BlazorServer.pdb  inflating: RSS_NCD(MINI)_BlazorServer.runtimeconfig.json  inflating: System.IdentityModel.Tokens.Jwt.dll  inflating: web.config              creating: wwwroot/creating: wwwroot/css/creating: wwwroot/css/bootstrap/inflating: wwwroot/css/bootstrap/bootstrap.min.css  inflating: wwwroot/css/bootstrap/bootstrap.min.css.map  creating: wwwroot/css/open-iconic/creating: wwwroot/css/open-iconic/font/creating: wwwroot/css/open-iconic/font/css/inflating: wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css  creating: wwwroot/css/open-iconic/font/fonts/inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.eot  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.otf  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.svg  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.ttf  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.woff  inflating: wwwroot/css/open-iconic/FONT-LICENSE  inflating: wwwroot/css/open-iconic/ICON-LICENSE  inflating: wwwroot/css/open-iconic/README.md  inflating: wwwroot/css/site.css    inflating: wwwroot/favicon.ico     inflating: wwwroot/RSS_NCD(MINI)_BlazorServer.styles.css  inflating: appsettings.Development.json  inflating: appsettings.json        inflating: Microsoft.AspNetCore.Authentication.JwtBearer.dll  inflating: Microsoft.IdentityModel.JsonWebTokens.dll  inflating: Microsoft.IdentityModel.Logging.dll  inflating: Microsoft.IdentityModel.Protocols.dll 

2.2 安装框架

2.2.1 下载框架

.NET 6.0下载地址

  • dotnet-runtime-6.0.25-linux-arm64.tar.gz
    在这里插入图片描述

  • dotnet-sdk-6.0.417-linux-arm64.tar.gz

在这里插入图片描述

  • aspnetcore-runtime-6.0.25-linux-arm64.tar.gz
    在这里插入图片描述

注意: 必须安装SDK,才能使用dotnet指令运行程序。

2.2.2 安装dotnet-sdk

  1. 将下载的文件拷贝到Ubuntu系统目录
    推荐将文件放在/home/<用户>/<功能>/<框架名>目录下
    如:/home/signway/install/dotnet/
  2. 打开终端跳转到文件目录
cd /home/signway/install/dotnet/
  1. 安装dotnet-sdkdotnet-runtimeaspnetcore-runtime
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-6.0.417-linux-arm64.tar.gz -C $HOME/dotnet
mkdir -p $HOME/dotnet && tar zxf dotnet-runtime-6.0.25-linux-arm64.tar.gz -C $HOME/dotnet
mkdir -p $HOME/dotnet && tar zxf aspnetcore-runtime-6.0.25-linux-arm64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

上述指令只会在运行它的终端生效。
你可以编辑shell配置文件以永久添加命令。Linux有几个不同的shell,每个shell都有不同的配置文件。例如:

  • Bash Shell: ~/.bash_profile~/.bashrc
  • Korn Shell: ~/.kshrc.profile
  • Z Shell: ~/.zshrc.zprofile

编辑shell的相应源文件,并在现有PATH语句的末尾添加:$HOME/dotnet。如果没有包含PATH语句,则添加一个新行,export DOTNET_ROOT=$HOME/dotnet。同时将export PATH=$PATH:$HOME/dotnet添加到文件末尾。

# ...
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

2.3 安装证书

2.3.1 安装证书

dotnet dev-certs https --trust
dotnet dev-certs https -t

signway@RK3588:~/rsszy/webapp2$ dotnet dev-certs https --trust
Trusting the HTTPS development certificate was requested. Trusting the certificate
on Linux distributions automatically is not supported. For instructions on how to
manually trust the certificate on your Linux distribution, go to
https://aka.ms/dev-certs-trust
A valid HTTPS certificate is already present.

2.3.2 未安装会出现什么情况?

The command could not be loaded, possibly because:* You intended to execute a .NET application:The application 'dev-certs' does not exist.* You intended to execute a .NET SDK command:No .NET SDKs were found.Download a .NET SDK:
https://aka.ms/dotnet-downloadLearn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found
Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.Unhandled exception. System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Reload()at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load()at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)at Microsoft.AspNetCore.Builder.WebApplication.Run(String url)at Program.<Main>$(String[] args) in E:\SVN\RCSoft1\RSS_NCD(MINI)\RSS_NCD(MINI)_BlazorServer\RSS_NCD(MINI)_BlazorServerAPI\Program.cs:line 85
已放弃 (核心已转储)

2.4 添加环境变量

2.4.1 临时运行

每次打开终端运行以下命令来设置临时变量

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

2.4.2 永久添加 - 当前登录用户

1. 打开 ~/.bashrc文件
vi  ~/.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples# If not running interactively, don't do anything
case $- in*i*) ;;*) return;;
esac# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth# append to the history file, don't overwrite it
shopt -s histappend# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; thendebian_chroot=$(cat /etc/debian_chroot)
fi# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" inxterm-color|*-256color) color_prompt=yes;;
esac# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yesif [ -n "$force_color_prompt" ]; thenif [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then# We have color support; assume it's compliant with Ecma-48# (ISO/IEC-6429). (Lack of such support is extremely rare, and such# a case would tend to support setf rather than setaf.)color_prompt=yeselsecolor_prompt=fi
fiif [ "$color_prompt" = yes ]; thenPS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
elsePS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1";;
*);;esac# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; thentest -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"alias ls='ls --color=auto'#alias dir='dir --color=auto'#alias vdir='vdir --color=auto'alias grep='grep --color=auto'alias fgrep='fgrep --color=auto'alias egrep='egrep --color=auto'
fi# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.if [ -f ~/.bash_aliases ]; then. ~/.bash_aliases
fi# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; thenif [ -f /usr/share/bash-completion/bash_completion ]; then. /usr/share/bash-completion/bash_completionelif [ -f /etc/bash_completion ]; then. /etc/bash_completionfi
fiexport PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet

2. 设置环境变量

I键,退出命令模式进入编辑模式, ~/.bashrc文件末尾添加以下内容设置环境变量。

export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
3. 保存退出

Esc键,退出编辑模式进入命令模式,输入以下指令保存。

:wq!

2.4.3 永久添加 - 所有用户

1. 打开 /etc/profile文件
sudo vim /etc/profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).if [ "${PS1-}" ]; thenif [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then# The file bash.bashrc already sets the default PS1.# PS1='\h:\w\$ 'if [ -f /etc/bash.bashrc ]; then. /etc/bash.bashrcfielseif [ "`id -u`" -eq 0 ]; thenPS1='# 'elsePS1='$ 'fifi
fiif [ -d /etc/profile.d ]; thenfor i in /etc/profile.d/*.sh; doif [ -r $i ]; then. $ifidoneunset i
fi
2. 设置环境变量

I键,退出命令模式进入编辑模式, ~/.bashrc文件末尾添加以下内容设置环境变量。

export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
3. 保存退出

Esc键,退出编辑模式进入命令模式,输入以下指令保存。

:wq!
4. 重新加载

执行以下指令生效

source /etc/profile

2.4.4 查看设置的环境变量

1 只看PATH变量
echo $PATH

/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin:/home/signway/dotnet

2 查看所有环境变量
env

SHELL=/bin/bash
SESSION_MANAGER=local/RK3588:@/tmp/.ICE-unix/20779,unix/RK3588:/tmp/.ICE-unix/20779
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_KEYRING_CONTROL=/home/signway/.cache/keyring-ZRVEE2
DOTNET_ROOT=/home/signway/dotnet
SSH_AUTH_SOCK=/home/signway/.cache/keyring-ZRVEE2/ssh
XMODIFIERS=@im=ibus
SSH_AGENT_PID=20915
GTK_MODULES=gail:atk-bridge
PWD=/home/signway
LOGNAME=signway
XDG_SESSION_TYPE=x11
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
HOME=/home/signway
LANG=zh_CN.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XDG_CURRENT_DESKTOP=GNOME
VTE_VERSION=6003
XRDP_SOCKET_PATH=/run/xrdp/sockdir
XRDP_PULSE_SOURCE_SOCKET=xrdp_chansrv_audio_in_socket_10
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/af8cf72d_9406_4502_87df_7737e813f8a2
LESSCLOSE=/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /bin/lesspipe %s
USER=signway
GNOME_TERMINAL_SERVICE=:1.393
XRDP_SESSION=1
DISPLAY=:10.0
XRDP_PULSE_SINK_SOCKET=xrdp_chansrv_audio_out_socket_10
SHLVL=1
QT_IM_MODULE=ibus
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin:/home/signway/dotnet
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-LY2CUzKESO,guid=88d0510cbc94cdf2015ed92765542918
UID=1000
_=/bin/env

2.5 运行

**注意:一定要到根目录下运行,不要使用全路径,不然一些资源加载不了导致页面显示不正常**

2.5.1 临时变量运行程序

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
cd /home/signway/rsszy/webapp2/
dotnet 'RSS_NCD(MINI)_BlazorServer.dll'

2.5.2 永久变量运行程序

cd /home/signway/rsszy/webapp2/
dotnet 'RSS_NCD(MINI)_BlazorServer.dll'

signway@RK3588:~$ cd /home/signway/rsszy/webapp2/
signway@RK3588:~/rsszy/webapp2$ 
signway@RK3588:~/rsszy/webapp2$ dotnet 'RSS_NCD(MINI)_BlazorServer.dll'
info: Microsoft.Hosting.Lifetime[14]Now listening on: http://[::]:9002
info: Microsoft.Hosting.Lifetime[14]Now listening on: https://[::]:9003
info: Microsoft.Hosting.Lifetime[0]Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]Content root path: /home/signway/rsszy/webapp2/

2.5.3 永久变量静默运行(后台运行)

cd /home/signway/rsszy/webapp2/
nohup dotnet 'RSS_NCD(MINI)_BlazorServer.dll' > /dev/null 2>&1 &

signway@RK3588:~/rsszy/webapp2$ cd /home/signway/rsszy/webapp2/
signway@RK3588:~/rsszy/webapp2$ 
signway@RK3588:~/rsszy/webapp2$ nohup dotnet 'RSS_NCD(MINI)_BlazorServer.dll' > /dev/null 2>&1 &
[1] 70286
signway@RK3588:~/rsszy/webapp2$ 

2.5.4 查看后台运行

ps aux | grep <运行程序名称>

ps aux | grep BlazorServer

signway@RK3588:~/rsszy/webapp2$ ps aux | grep BlazorServer
signway    70286  0.6  2.2 24527624 90396 pts/2  Sl   17:59   0:01 dotnet RSS_NCD(MINI)_BlazorServer.dll
signway    70327  0.0  0.0  11664   664 pts/2    S+   18:03   0:00 grep --color=auto BlazorServer

2.5.5 终止运行程序

kill <PID>

kill 70286

signway@RK3588:~/rsszy/webapp2$ kill 70286
signway@RK3588:~/rsszy/webapp2$ 

2.5.6 强制终止运行程序

kill -9 <PID>

kill -9 70286

signway@RK3588:~/rsszy/webapp2$ kill -9 70336
signway@RK3588:~/rsszy/webapp2$ 

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

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

相关文章

使用sonar对webgoat进行静态扫描

安装sonar并配置 docker安装sonarqube&#xff0c;sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com) 对webgoat进行sonar扫描 扫描结果 bugs Change this condition so that it does not always evaluate to "false" 意思是这里的else if语句不会执行…

OpenShift 4 - 部署 RHODS 环境,运行 AI/ML 应用(视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.14 RHODS 1.33 的环境中验证 文章目录 RHODS 简介安装 RHODS 环境运行环境说明用 RHODS Operator 安装环境创建 Jupyter Notebook 运行环境 开发调式 AI/ML 应用部署运行 AI/ML 应用视频参…

2024湖南师范大学计算机考研分析

24计算机考研|上岸指南 湖南师范大学 湖南师范大学创建于1938年&#xff0c;位于历史文化名城长沙&#xff0c;是国家“211工程”重点建设大学、国家“双一流”建设高校、教育部普通高等学校本科教学工作水平评估优秀高校。学校拥有6个“十二五”国家重点学科、21个博士学位授…

MySQL 的执行原理(五)

5.6 再深入查询优化 5.6.1. 全局考虑性能优化 5.6.3.1. 为什么查询速度会慢 在尝试编写快速的查询之前&#xff0c;需要清楚一点&#xff0c;真正重要是响应时间。如果把查询看作是一个任务&#xff0c;那么它由一系列子任务组成&#xff0c;每个子任务都会消耗一定的时间。…

深度学习入门:自建数据集完成花鸟二分类任务

自建数据集完成二分类任务&#xff08;参考文章&#xff09; 1 图片预处理 1 .1 统一图片格式 找到的图片需要首先做相同尺寸的裁剪&#xff0c;归一化&#xff0c;否则会因为图片大小不同报错 RuntimeError: stack expects each tensor to be equal size, but got [3, 667…

【OpenCV实现图像:在Python中使用OpenCV进行直线检测】

文章目录 概要霍夫变换举个栗子执行边缘检测进行霍夫变换小结 概要 图像处理作为计算机视觉领域的重要分支&#xff0c;广泛应用于图像识别、模式识别以及计算机视觉任务中。在图像处理的众多算法中&#xff0c;直线检测是一项关键而常见的任务。该任务的核心目标是从图像中提…

bitmap基础介绍+holo实现离线UV计算

bitmap 基础介绍bitmaping 数据结构bitmap计算算子集成二阶段分布式计算&#xff1a;RoaringBitmap构造方案分桶方案建序方案 holo官网 离线UV计算创建用户映射表创建聚合结果表更新用户映射表和聚合结果表更新聚合结果表UV、PV查询 基础介绍 RoaringBitmap主要为了解决UV指标…

第十一章 目标检测中的NMS

精度提升 众所周知&#xff0c;非极大值抑制NMS是目标检测常用的后处理算法&#xff0c;用于剔除冗余检测框&#xff0c;本文将对可以提升精度的各种NMS方法及其变体进行阶段性总结。 总体概要&#xff1a; 对NMS进行分类&#xff0c;大致可分为以下六种&#xff0c;这里是依…

手机弱网测试工具:Charles

我们在测试app的时候&#xff0c;需要测试弱网情况下的一些场景&#xff0c;那么使用Charles如何设置弱网呢&#xff0c;请看以下步骤&#xff1a; 前提条件&#xff1a; 手机和电脑要在同一局域网内 Charles连接手机抓包 一、打开Charles&#xff0c;点击代理&#xff0c;…

如何搭建测试环境?一文解决你所有疑惑!

什么是测试环境 测试环境&#xff0c;指为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据的总称&#xff0c;简而言之&#xff0c;测试环境硬件软件网络数据准备测试工具。 硬件&#xff1a;指测试必需的服务器、客户端、网络连接等辅助设备。 软件&#…

Java 省考试院自学考试考籍管理系统

1) 项目简介 考籍管理系统是省考试院自学考试管理系统的一部分&#xff0c;包括考生考籍档案管理、考生免考管理、课程顶替、考籍转入转出管理、毕业管理和日志管理等功能模块。该项目的建设方便和加强了省考试院对自学考试考籍的一系列管理操作&#xff0c;社会效应明显。…

React函数组件状态Hook—useState《进阶-对象数组》

React函数组件状态-state 对象 state state 中可以保存任意类型的 JavaScript 值&#xff0c;包括对象。但是&#xff0c;你不应该直接修改存放在 React state 中的对象。相反&#xff0c;当你想要更新⼀个对象时&#xff0c;你需要创建⼀个新的对象&#xff08;或者将其拷⻉⼀…

股票指标信息(六)

6-指标信息 文章目录 6-指标信息一. 展示股票的K线图数据,用于数据统计二. 展示股票指标数据,使用Java处理,集合形式展示三. 展示股票目前的最新的指标数据信息四. 展示股票指标数据,某一个属性使用Java处理五. 展示股票的指标数据,用于 Echarts 页面数据统计六. 展示股票指标数…

MAX/MSP SDK学习05:A_GIMME方法

今天终于将A_GIMME方法部分的描述看懂了&#xff0c;上周因为太赶时间加上这文档很抽象一直没看懂。也就那么一回事&#xff0c;记录一下。 A_GIMME方法用于接收多个参数&#xff1a; #include "ext.h" // standard Max include, always required #include "…

RedisConnectionFactory is required已解决!!!!

1.起因&#x1f936;&#x1f936;&#x1f936;&#x1f936; redis搭建完成后&#xff0c;准备启动主程序&#xff0c;异常兴奋&#xff0c;结果报错了&#xff01;&#xff01;&#xff01;&#xff01; 2.究竟是何原因 &#x1f62d;&#x1f62d;&#x1f62d;&#x1f…

关于在3dsmax中制作的模型导入UE后尺寸大小不对的问题

现象 在3dsmax中的基本单位为毫米 在UE中基本单位是厘米 我在3dsmax中创建一个长宽高均为1000mm的方块 然后导入到UE中的世界坐标原点 方块向X轴正方向移动100个单位100cm1000mm&#xff0c;按理来说&#xff0c;新方块的此时应该和旧方块是贴着的&#xff0c;但是现象确是两者…

力扣 2. 两数相加

Problem: 2. 两数相加 思路与算法 Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this…

NSSCTF web刷题记录6

文章目录 [HZNUCTF 2023 final]eznode[MoeCTF 2021]地狱通讯-改[红明谷CTF 2022] Smarty Calculator方法一 CVE-2021-26120方法二 CVE-2021-29454方法三 写马蚁剑连接 [HZNUCTF 2023 final]eznode 考点&#xff1a;vm2沙箱逃逸、原型链污染 打开题目&#xff0c;提示找找源码 …

QT打包圆心识别

圆心点识别QT界面封装 最近在练习QT相关内容&#xff0c;找了个相关功能集成了下&#xff0c;主要是为了熟悉各个组件&#xff0c;功能主要是进行圆心识别。 主要涉及的QT功能点&#xff1a; 1.日志可视化 2.按钮及各类参数添加组件 3.水印添加及图片可视化 4.许可添加 5.主线…