当前位置: 首页 > news >正文

WPF编写工业相机镜头选型程序

该程序满足面阵和线阵的要求。
在这里插入图片描述

前端代码

<Window x:Class="相机镜头选型.MainWindow" Loaded="Window_Loaded"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"xmlns:svgc = "http://sharpvectors.codeplex.com/svgc/"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:相机镜头选型"mc:Ignorable="d"Title="相机镜头选型工具" Height="500" Width="1000"><Window.Background><RadialGradientBrush GradientOrigin="0.5,-0.8" Center="0.5,0" RadiusX="0.7" RadiusY="0.7"><GradientStop Color="#A02B40" Offset="0"/><GradientStop Color="#08113c" Offset="1"/></RadialGradientBrush></Window.Background><Window.Resources><Style x:Key="myTextBlock" TargetType="TextBlock" ><Setter Property="Foreground" Value="White"></Setter></Style></Window.Resources><Grid><Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><Grid><Grid.RowDefinitions><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions></Grid><!--Canvas --><Grid  Grid.Column="1" ><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions><!--DataGrid --><DataGrid Grid.Row="0" x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" Height="Auto" Margin="5"><DataGrid.Columns><DataGridTextColumn Header="参数" Binding="{Binding Name}" Width="*"></DataGridTextColumn><DataGridTextColumn Header="数值" Binding="{Binding Value}" Width="*"></DataGridTextColumn></DataGrid.Columns></DataGrid><!-- --><Canvas  Grid.Row="1"  Width="Auto" Height="Auto" Margin="5"><svgc:SvgViewbox  IsHitTestVisible="False" Source="D:\02_Study\06_WPF\WpfApp1\相机镜头选型\Asset\Lens_Selector.svg" Height="240" Width="450" HorizontalAlignment="Center" VerticalAlignment="Top"  Canvas.ZIndex="1" Canvas.Left="10" Canvas.Top="-5"/><TextBox   Text="" Width="50" Height="18"  Canvas.ZIndex="2" Canvas.Left="410" Canvas.Top="31"  Background="White" x:Name="vof_w"></TextBox><TextBox   Text="{Binding Text,ElementName=vof_h,Mode=OneWay}" Width="50" Height="18"  Panel.ZIndex="2" Canvas.Left="440" Canvas.Top="141"  Background="White" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.487"/><TextBox   Text="{Binding Text,ElementName=d1,Mode=OneWay}"  Width="50" Height="18"  Panel.ZIndex="2" Canvas.Left="261" Canvas.Top="186"  Background="White" RenderTransformOrigin="0.433,0.521" HorizontalAlignment="Left" VerticalAlignment="Top"/><TextBox   Text=""  Width="50" Height="18"  Panel.ZIndex="2" Canvas.Left="94" Canvas.Top="212"  Background="White" RenderTransformOrigin="0.5,0.487" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="lens"/></Canvas></Grid><!-- --><!--ControlPanle --><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions><GroupBox Header="基本参数" Foreground="White" Margin="5"><Grid><Grid.ColumnDefinitions ><ColumnDefinition Width="80"></ColumnDefinition><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><StackPanel ><TextBlock Style="{StaticResource myTextBlock}" Height="17" Margin="5,5,5,5" >物距(mm):</TextBlock><TextBlock Style="{StaticResource myTextBlock}" Height="17" Margin="5,5,5,5">靶面短边(p):</TextBlock><TextBlock Style="{StaticResource myTextBlock}" Height="17" Margin="5,5,5,5">视野短边(mm):</TextBlock></StackPanel><StackPanel Grid.Column="1" VerticalAlignment="Top"   ><TextBox Height="17"  Margin="5,5,5,5" x:Name="d1" TextChanged="Calc" ></TextBox><TextBox Height="17"  Margin="5,5,5,5" x:Name="res_h" TextChanged="Calc"></TextBox><TextBox Height="17"  Margin="5,5,5,5" x:Name="vof_h" TextChanged="Calc" ></TextBox></StackPanel><StackPanel Grid.Column="2"><Slider Height="17" Margin="5,5,5,5"  Width="93"  Value="{Binding Text,ElementName=d1,Mode=TwoWay}" TickFrequency="1"  IsSnapToTickEnabled="True" x:Name="sld_wj"  Maximum="3000.0" ValueChanged="Slider_ValueChanged" /><Slider  Height="17" Margin="5,5,5,5"  Width="93"  Value="{Binding Text,ElementName=res_h,Mode=TwoWay}"  TickFrequency="1" IsSnapToTickEnabled="True" x:Name="sld_res_h"  Maximum="{Binding Text,ElementName=res_h,Mode=OneWay}" ValueChanged="Slider_ValueChanged" /><Slider Height="17" Margin="5,5,5,5" Width="93" Value="{Binding Text,ElementName=vof_h,Mode=TwoWay}"  TickFrequency="0.1" IsSnapToTickEnabled="True"   x:Name="sld_vof_h"  Maximum="1000" ValueChanged="Slider_ValueChanged" /></StackPanel></Grid></GroupBox><GroupBox Grid.Row="1" Header="其他参数" Foreground="White" Margin="5"><Grid ><Grid.ColumnDefinitions ><ColumnDefinition Width="80"></ColumnDefinition><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><StackPanel ><TextBlock Style="{StaticResource myTextBlock}" Height="17" Margin="5,5,5,5" >光圈(F):</TextBlock><TextBlock Style="{StaticResource myTextBlock}" Height="17" Margin="5,5,5,5">像元(mm):</TextBlock><TextBlock Style="{StaticResource myTextBlock}" Height="17" Margin="5,5,5,5">靶面长边(p):</TextBlock></StackPanel><StackPanel Grid.Column="1" VerticalAlignment="Top"   ><TextBox Height="17"  Margin="5,5,5,5" x:Name="gq" TextChanged="Calc" ></TextBox><TextBox Height="17"  Margin="5,5,5,5" x:Name="size" TextChanged="Calc"></TextBox><TextBox Height="17"  Margin="5,5,5,5" x:Name="res_w"  TextChanged="Calc"></TextBox></StackPanel><StackPanel Grid.Column="2"><Slider Height="17" Margin="5,5,5,5" Width="93" Value="{Binding Text,ElementName=gq,Mode=TwoWay}" TickFrequency="0.1" IsSnapToTickEnabled="True"    x:Name="sld_gq"  Maximum="6" ValueChanged="Slider_ValueChanged"/></StackPanel></Grid></GroupBox></Grid><!-- --></Grid>
</Window>

参数预加载

Loaded="Window_Loaded" 

数据绑定

 <Slider  Height="17" Margin="5,5,5,5"  Width="93"  Value="{Binding Text,ElementName=res_h,Mode=TwoWay}"  TickFrequency="1" IsSnapToTickEnabled="True" x:Name="sld_res_h"  Maximum="{Binding Text,ElementName=res_h,Mode=OneWay}" ValueChanged="Slider_ValueChanged" />

2.C#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using LiveCharts;
using LiveCharts.Wpf;namespace 相机镜头选型
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();dataGrid.DataContext = this;//BindSliderToTextBox(sld_wj, d1);//BindSliderToTextBox(sld_res_h, res_h);//BindSliderToTextBox(sld_vof_h, vof_h);SeriesCollection = new SeriesCollection{new LineSeries{Title = "Series 1",Values = new ChartValues<double> { 4, 6, 5, 2 ,4 }},new LineSeries{Title = "Series 2",Values = new ChartValues<double> { 6, 7, 3, 4 ,6 },},new LineSeries{Title = "Series 3",Values = new ChartValues<double> { 4,2,7,2,7 },}};Labels = new[] { "Jan", "Feb", "Mar", "Apr", "May" };//YFormatter = value => value.ToString("C");//modifying the series collection will animate and update the chart//SeriesCollection.Add(new LineSeries//{//    Title = "Series 4",//    Values = new ChartValues<double> { 5, 3, 2, 4 },//    LineSmoothness = 0, //0: straight lines, 1: really smooth lines//    PointGeometry = Geometry.Parse("m 25 70.36218 20 -28 -20 22 -8 -6 z"),//    PointGeometrySize = 50,//    PointForeground = Brushes.Gray//});//modifying any series values will also animate and update the chart//SeriesCollection[3].Values.Add(5d);DataContext = this;}public SeriesCollection SeriesCollection { get; set; }public string[] Labels { get; set; }//public Func<double, string> YFormatter { get; set; }private List<double> getData(){List<double> res = new List<double>();if (d1.Text != "" && size.Text != "" && vof_h.Text != "" && res_h.Text != "" && res_w.Text != "" && gq.Text != ""){double d_wj = double.Parse(d1.Text);double pixel_size = double.Parse(size.Text);double vof_height = double.Parse(vof_h.Text);double res_height = double.Parse(res_h.Text);double res_width = double.Parse(res_w.Text);double guangquan = double.Parse(gq.Text);res.Add(d_wj);res.Add(pixel_size);res.Add(vof_height);res.Add(res_height);res.Add(res_width);res.Add(guangquan);}else{res.Add(0.0);res.Add(0.0);res.Add(0.0);res.Add(0.0);res.Add(0.0);res.Add(0.0);}return res;}//double d_wj, double pixel_size, double vof_height,double res_height,double res_width,double guangquanprivate void Window_Loaded(object sender, RoutedEventArgs e){d1.Text = "2700";res_h.Text = "4096";vof_h.Text = "1000";res_w.Text = "1392";gq.Text = "2";size.Text = "0.00465";}private void Calc(object sender, RoutedEventArgs e){List<double> data =  getData();List<double> res = calcpara(data[0],data[1],data[2],data[3],data[4],data[5]);printres(res, data[2]);}//List<int> xaxisList = Enumerable.Range(1, 10).ToList();//d_jsj_list = new ChartValues<double> {  };//foreach (var x in xaxisList  )//{//    d_jsj_list.add(calc_d_jsj);//}private void printres(List<double> res, double vof_height){if (vof_w != null && lens != null && res != null){vof_w.Text = res[4].ToString();lens.Text = res[1].ToString();}else{// 处理 vof_w、lens 或 res 为 null 或索引越界的情况}ObservableCollection<Member> memberData = new ObservableCollection<Member>();memberData.Add(new Member(){Name = "放大倍率",Value = res[0].ToString(),});memberData.Add(new Member(){Name = "焦距",Value = Math.Round(res[1],2).ToString(),});memberData.Add(new Member(){Name = "景深近",Value = res[2].ToString(),});memberData.Add(new Member(){Name = "景深远",Value = res[3].ToString(),});memberData.Add(new Member(){Name = "视野大小",Value =Math.Round(res[4],1).ToString() + " X " + vof_height.ToString(),});memberData.Add(new Member(){Name = "mm/pixel",Value = res[5].ToString(),});dataGrid.DataContext = memberData;}//private void BindSliderToTextBox(Slider slider, TextBox textBox)//{//    slider.ValueChanged += (s, e) =>//    {//        textBox.Text = (slider.Value).ToString("0.00");//    };//}static List<double> calcpara(double d_wj, double pixel_size, double vof_height,double res_height,double res_width,double guangquan){double res_scale = Math.Round(vof_height / (res_height * pixel_size), 2);double res_diag = Math.Sqrt(res_width * res_width + res_height * res_height);double misanyuan = res_diag / 1730 * pixel_size;double d_lens = d_wj / res_scale;double d_xj = 1 / (1 / d_lens - 1 / d_wj);double d_djjl = d_xj + d_wj;double d_jsj = Math.Round(d_wj - guangquan * misanyuan * d_djjl * d_djjl / (d_lens * d_lens + guangquan * misanyuan * d_djjl), 2);double d_jsy = Math.Round(d_wj + guangquan * misanyuan * d_djjl * d_djjl / (d_lens * d_lens + guangquan * misanyuan * d_djjl), 2);double js = d_jsy - d_jsj;double vof_width = Math.Round(res_width * pixel_size * res_scale, 2);double resolution = Math.Round(vof_width / res_width, 2);List<double> res = new List<double> { res_scale, d_lens, d_jsj, d_jsy,vof_width,resolution };return res;}public class Member{public string Name { get; set; }public string Value { get; set; }}private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e){List<double> data = getData();List<double> res = calcpara(data[0], data[1], data[2], data[3], data[4], data[5]);printres(res, data[2]);}private void TextChanged(object sender, TextChangedEventArgs e){List<double> data = getData();List<double> res = calcpara(data[0], data[1], data[2], data[3], data[4], data[5]);printres(res, data[2]);}}
}

相关文章:

WPF编写工业相机镜头选型程序

该程序满足面阵和线阵的要求。 前端代码 <Window x:Class"相机镜头选型.MainWindow" Loaded"Window_Loaded"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml…...

网络安全内容整理二

网络嗅探技术 网络监听 网络监听&#xff0c;也称网络嗅探(Network Sniffing)&#xff1a;在他方未察觉的情况下捕获其通信报文、通信内容的技术 网卡的工作模式&#xff1a; 1.广播模式(Broadcast Mode)&#xff1a;网卡能够接收网络中的广播信息 2.组播模式(Multicast Mo…...

解决git did not exit cleanly (exit code 128)问题

解决 git did not exit cleanly &#xff08;exit code 128&#xff09;问题 1、错误描述2、解决方法2.1 方法一2.2 方法二 1、错误描述 使用TortoiseGit进行操作时&#xff0c;总是提示下述错误。 2、解决方法 2.1 方法一 打开 TortoiseGit -> Settings 点击 Network&…...

Linux入门攻坚——40、Linux集群系统入门-lvs(1)

Cluster&#xff0c;集群&#xff0c;为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展&#xff0c;系统扩展的方式&#xff1a;scale up&#xff0c;向上扩展&#xff0c;更换更好的主机&#xff1b;scale out&#xff0c;向外扩展&…...

momentum 和 weight_decay 的区别

momentum 和 weight_decay 的区别 两者在优化器中的作用不同,主要体现在优化的目的和机制上。 1. momentum(动量) 作用:加速收敛并减少优化过程中的震荡。 机制: momentum 是用于在梯度下降中积累动量的机制。它通过在每一步中综合之前的更新方向,帮助模型在陡峭区域加速…...

Vue 3 + TypeScript进阶用法

在掌握了 Vue 3 和 TypeScript 的基本使用后&#xff0c;你可以进一步探索一些进阶特性和最佳实践。这些包括更复杂的类型定义、自定义 hooks、全局状态管理等。下面是一些关键点&#xff1a; 1. 更复杂的类型定义 Props 和 Emits 的类型 对于组件的 props 和 emits&#xf…...

AbutionGraph-时序向量图谱数据库-快速安装部署

运行环境 1&#xff09;操作系统 最好是使用CentOS7或者Ubuntu18以上系统&#xff0c;不满足的话请升级系统内核gcc版本至8以上版本。 支持所有国产主流操作系统银河麒麟、统信OS、深度等等&#xff0c;均做过兼容性测试&#xff1b; 2&#xff09;CPU 为确保数据库每个进…...

Delphi-HTTP通讯及JSON解析

HTTP POST 请求函数 HttpPost 此函数用于发送带有JSON内容的POST请求到指定的URL&#xff0c;并接收服务器响应。它包括了必要的异常处理&#xff0c;确保在遇到错误时可以记录日志。 参数&#xff1a; sUrl&#xff1a;目标URL。sJson&#xff1a;要发送的JSON格式字符串。 返…...

Postgres 如何使事务原子化?

原子性&#xff08;“ACID”意义上的&#xff09;要求 对于对数据库执行的一系列操作&#xff0c;要么一起提交&#xff0c;要么全部回滚&#xff1b;不允许中间状态。对于现实世界的混乱的代码来说&#xff0c;这是天赐之物。 这些更改将被恢复&#xff0c;而不是导致生产环境…...

[Vue3]简易版Vue

简易版Vue 实现ref功能 ref功能主要是收集依赖和触发依赖的过程。 export class Dep { // 创建一个类&#xff0c;使用时使用new Depconstructor(value) { // 初始化可传入一个值this._val value;this.effects new Set(); //收集依赖的容器&#xff0c;使用set数据结构}…...

ElasticSearch学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次&#xff0…...

LabVIEW算法执行时间评估与Windows硬件支持

在设计和实现复杂系统时&#xff0c;准确估算算法的执行时间是关键步骤&#xff0c;尤其在实时性要求较高的应用中。这一评估有助于确定是否需要依赖硬件加速来满足性能需求。首先需要对算法进行时间复杂度分析并进行实验测试&#xff0c;了解其在Windows系统中的运行表现。根据…...

经验帖 | Matlab安装成功后打不开的解决方法

最近在安装Matlab2023时遇到了一个问题&#xff1a; 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下&#xff1a; matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…...

Ubuntu Linux 文件、目录权限问题

本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾&#xff1a;Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者&#xff08;属主&#xff09;所属组&#xff08;属组&#xff09;其他…...

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…...

yolo11经验教训----之一

一、格式转换 可以把python中的.pt文件&#xff0c;导出为libtorch识别的格式&#xff1a; model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中&#xff0c;我用qt&#xff0c;这样做的&#xff1a; #include "…...

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…...

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置

文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…...

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事&#xff0c;后文简称 云女士 &#xff0c;非说 Go 的 Gin 框架比 Springboot 更加的开箱即用&#xff0c;我心想在 Java 里面 Springboot 已经打遍天下无敌手&#xff0c;这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗&#xff0c;非我要…...

pickle常见Error解决

1. pickle OverflowError: cannot serialize a bytes object larger than 4 GiB 进行pickle.dump时出现上述错误&#xff0c;可以加上“protocol4”参数。依据&#xff1a;https://docs.python.org/3/library/pickle.html#data-stream-format 2. pickle EOFError: Ran out of…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...