【复现笔记】clean-pvnet复现

源代码链接:GitHub - zju3dv/clean-pvnet: Code for "PVNet: Pixel-wise Voting Network for 6DoF Pose Estimation" CVPR 2019 oral 目录 1、下载代码 2、配置环境 3、Compile cuda extensions under lib/csrc 4、Set up datasets: (1)数据集 (2)训练好的权重文件 (3)测试成功 (4)虽然在data文件夹中新出现一个result文件夹,但里面没有结果文件? 5、可视化成功 1、下载代码 ​git clone https://github.com/zju3dv/clean-pvnet.git 2、配置环境 conda create -n pvnet python=3.7 conda activate pvnet conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.2 -c pytorch pip install Cython==0.28.2 sudo apt-get install libglfw3-dev libglfw3 pip install -r requirements.txt 注意: 我的gpu是rtx2060,cuda版本是10.2,所以改了一下(如果按照给的torch网址安装了cuda9.2的1.1版本,后续测试的时候会报错) conda install pytorch==1.5.0 torchvision==0.

【nio】ByteBuffer与String转换

1.String转ByteBuffer // 方式一 ByteBuffer byteBuffer = ByteBuffer.allocate(16); byteBuffer.put("hello".getBytes()); // 方式二 byteBuffer = StandardCharsets.UTF_8.encode("hello"); // 方式三 byteBuffer = ByteBuffer.wrap("hello".getBytes()); 2.ByteBuffer转String String str = StandardCharsets.UTF_8.decode(byteBuffer).toString(); byteBuffer.flip();

Java 两种zero-copy零拷贝技术mmap和sendfile的介绍

详细介绍了两种zero-copy零拷贝技术mmap和sendfile的概念和基本原理。 目录 1 标准IO 2 零拷贝 2.1 sendfile调用 2.1 mmap调用 2.2 MQ中的应用 1 标准IO 很多软件是基于server-client模式的,最常见的下载功能需要从Server端的磁盘中将文件通过网络发送到客户端中去。如果采用传统标准IO的方式(基于数据拷贝),那么需要如下步骤。 传统标准IO通过网络传输数据,需要进行如下调用: buffer = File.read Socket.send(buffer) 总共需要四步: 1. read(): 涉及到两次上下文切换以及两次数据拷贝; 1.1 读取磁盘文件,将数据DMA Copy到操作系统内核缓冲区Page Cache; 1.2 将内核缓冲区Page Cache的数据,CPU Copy到应用程序缓存; 2. send(): 涉及到两次上下文切换以及两次数据拷贝; 2.1 将应用程序缓存中的数据,CPU Copy到socket网络发送缓冲区,即Socket Cache; 2.2 将Socket Cache的数据, DMA Copy到网络,由网卡进行网络传输。 可以发现,完成一次读写操作,需要4次上下文切换,2次DMA数据拷贝,2次CPU数据拷贝,实际上,如果仅仅是数据传输,那么数据根本不会经过这么多次的拷贝。 DMA: Driect Memory Access, 它可以独立的直接读取系统内存,不需要CPU介入,像显卡,网卡之类都会用DMA。 2 零拷贝 零拷贝(Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输数据时节省CPU周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效的提高数据传输效率。而且,零拷贝技术减少了用户进程地址空间和内核地址空间因为上下文切换而带来的开销。 常见的零拷贝技术分类: 1. 直接I/O:数据直接跨过内核缓冲区,在用户地址空间与I/O设备之间传递,内核只是进行必要的虚拟存储配置等辅助工作。 2. 数据传输不经过用户空间:当应用程序在数据传输过程中不需要对数据进行访问时,则可以避免将数据从内核空间到用户空间之间的拷贝,传输的数据在页缓存中就可以得到处理;Linux中提供类似的系统调用主要有mmap(),sendfile()以及splice(). 3. 写时复制:数据不需要提前拷贝,而是当需要修改的时候再进行部分拷贝。COW是对数据在Linux的页缓存和用户进程的缓冲区之间的传输过程进行优化手段。 下面是介绍数据传输不经过用户空间的零拷贝技术:mmap和sendfilr,这也是Netty、Kafka、RocketMQ等矿界所使用的底层技术。 2.1 sendfile调用 Linux 在版本 2.1 中引入了 sendfile() 这个系统调用,sendfile()是一种零拷贝的实现。Java对sendfile的支持就是NIO中的FileChannel.transferTo()或者transferFrom()。

ENSP端口绑定,MAC转发表以及学习限制

目录 端口绑定 MAC转发表 MAC学习限制 接口限制: VLAN限制: 端口绑定 首先进入端口中启动安全端口模式,默认是关闭的 [Huawei]interface GigabitEthernet0/0/1 [Huawei-GigabitEthernet0/0/1]port-security enable [Huawei-GigabitEthernet0/0/1]port-security mac-address sticky [Huawei-GigabitEthernet0/0/1]quit [Huawei]interface GigabitEthernet0/0/2 [Huawei-GigabitEthernet0/0/2]port-security enable [Huawei-GigabitEthernet0/0/2]port-security mac-address sticky [Huawei-GigabitEthernet0/0/2]quit 然后再全局模式下做端口绑定 [Huawei]user-bind static ip-address 192.168.1.10 mac-address 5489-98E3-765E interface GigabitEthernet 0/0/1 [Huawei]user-bind static ip-address 192.168.1.20 mac-address 5489-9861-65ED interface GigabitEthernet 0/0/2 以下就是我归纳的端口绑定所需要的代码 port-security enable port-security mac-address sticky开启安全端口模式 user-bind static ip-address IP地址 mac-address mac地址 interface 接口名称 IP地址,mac地址和接口绑定 他的mac地址 可以更换pc与交换机之间的线,在这不做测试了 MAC转发表 配置指令mac-address static 例如:mac-address static MAC地址 接口 vlan号 查看命令dis mac-address

IDEA报错之【无效的源发行版】

目录 1.症状:启动springboot项目的时候报错,如下图所示 2.原因分析 3.解决措施 3.1 查看项目的运行环境,确保项目SDK和LanguageLevel一致 3.2 查看modules中的SDK版本 3.3 查看java complier 1.症状:启动springboot项目的时候报错,如下图所示 2.原因分析 JDK的版本环境不一致造成的,需要修改为统一的版本 3.解决措施 3.1 查看项目的运行环境,确保项目SDK和LanguageLevel一致 如果还没解决,可以参考3.2 3.2 查看modules中的SDK版本 仍未解决,可以参考3.3 3.3 查看java complier 如图所示,此处我有一个模块版本是java17【使用了SpringBoot3.0导致的】 springboot 3.0 需要JDK17支持,如果没有安装JDK 17,我们需要降低springboot的版本,或者再安装JDK17

muduo网络库使用入门

muduo网络库介绍 muduo网络库是陈硕大神开发的基于主从Reactor模式的,事件驱动的高性能网络库。 网络编程中有很多是事务性的工作,使用muduo网络库,用户只需要填上关键的业务逻辑代码,并将回调注册到框架中,就可以实现完整的网络服务。 muduo网络库的核心是one loop per thread + thread pool,有一个main Reactor负责accept连接,然后将连接挂在某个sub Reactor中(muduo通过round-robin算法选择一个sub Reactor)。这样该连接的所有操作都由该sub Reactor进行处理,多个连接可能被分派到多个线程中,以充分利用CPU。 muduo采用的是固定大小的Reactor poll,池的大小由用户进行设置,通常所有Reactor的个数应该等于CPU的数目。这样程序的总体处理能力不会随连接数增加而下降。由于一个连接完全由一个线程管理,那么请求的顺序性有保证,突发请求也不会占满所有CPU。把IO分配个多给线程,防止出现一个Reactor的处理能力饱和。 小规模计算可以在当前IO线程完成并发回结果,从而降低响应的延迟。如果需要大规模计算,可以再交给一个线程池让其进行处理,从而防止阻塞当前sub Reactor导致响应变慢。 如果TCP连接有优先级之分,可以将高优先级的连接放在一个单独的sub Reactor来处理,从而避免优先级反转。 muduo网络库环境搭建 参考博客:C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装 使用muduo实现echo服务器 由于网络库封装了网络IO代码,所以不同的服务器的区别主要在于业务逻辑代码的不同。echo服务器简单地将来自客户端的数据回发给客户端,应该是业务逻辑最简单的服务器了,通过了解如何使用muduo网络库实现echo服务器有助于我们了解使用muduo网络库的基本方法,如果需要对网络部分进行优化就需要深入源码了解muduo网络库的实现原理,本文不详细涉及这部分(以后可能会更新关于muduo源码剖析的博客)。 使用muduo网络库我们需要组合TcpServer类,一般还需要保存EventLoop指针。EventLoop负责管理事件循环(epoll),TcpServer负责管理主Reactor(Acceptor管理连接socket)和从Reactors(EventLoopThreadPool管理客户端socket)以及对于每种事件的回调,这些回调会被合适的地方调用(对应事件发生的时候)。我们需要给TcpServer传入base loop、监听端口(和IP地址,一般是0.0.0.0)、服务器名称(打印日志),并且设置各种事件的回调,也就是在这里我们填入业务逻辑。 头文件EchoServer.h // Copyright(C), Edward-Elric233 // Author: Edward-Elric233 // Version: 1.0 // Date: 2022/7/11 // Description: #ifndef CHATSERVER_ECHOSERVER_H #define CHATSERVER_ECHOSERVER_H #include "muduo/net/TcpServer.h" #include "muduo/net/EventLoop.h" #include "muduo/net/InetAddress.h" #include "muduo/net/TcpConnection.h" #include <string> namespace edward { class EchoServer { using TcpServer = muduo::net::TcpServer; using EventLoop = muduo::net::EventLoop; using InetAddress = muduo::net::InetAddress; using TcpConnectionPtr = muduo::net::TcpConnectionPtr; using Buffer = muduo::net::Buffer; using Timestamp = muduo::Timestamp; TcpServer tcpServer_; EventLoop *loop_; void onConnectionCallback(const TcpConnectionPtr& conn); void onMessageCallback(const TcpConnectionPtr& conn, Buffer* buffer, Timestamp timestamp); public: EchoServer(EventLoop *loop, const InetAddress& address, const std::string &name); void start(); }; } #endif //CHATSERVER_ECHOSERVER_H 实现文件EchoServer.

ubuntu开机出现initramfs该如何解决

今天在进行操作的时候遇到了这个问题,找了蛮多资料,出现原因我暂时还没有完全明白。但是这个解决方法非常有效。 我的电脑是联想小新pro16 2021版,在出现这个问题时 1.输入 fsck /dev/sda5 -y 这里要注意一下:fsck后面的空格与-y前面的空格需要存在,两者之间的命令参照倒数第三行。 这里等到出现file system was modified,即可开始进行第二步 2.输入 exit 退出界面,等待片刻。 就能解决,以上。

MacbookPro 2019 安装tensorflow GPU加速版

苹果没有N卡但有AMD,用苹果系统优雅的玩tensorflow就需要利用起来这块显卡 参考网站: https://developer.apple.com/metal/tensorflow-plugin/ 注意:安装前卸载tensorflow,没安装不用管 指定版本: tensorflow-macos:2.9.0 tensorflow-metal:0.5.0 MacOS:12+ 1.命令行安装环境 bash ~/miniconda.sh -b -p $HOME/miniconda source ~/miniconda/bin/activate conda install -c apple tensorflow-deps 2.安装TensorFlow python -m pip install tensorflow-macos==2.9.0 3.安装tensorflow-metal插件 python -m pip install tensorflow-metal==0.5.0 测试是否能利用上GPU:运行脚本后出现“GPU:0”字样就是成功了 import os import tensorflow as tf from tensorflow.python.client import device_lib os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' print("GPU: ", tf.config.list_physical_devices('GPU')) print(device_lib.list_local_devices())

还不会用Yakit&Bp?来,我教你

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:被吉师散养的职业混子 🍂相应专栏:CTF专栏 Yakit介绍 好兄弟,你听说过yakit吗?一看你就没见识 我也没听说过 感谢我寄师傅,跟我说过几回,后来发现这玩意比我之前用的抓包软件Charles都好用 不说废话了 先来介绍下 Yakit: 集成化单兵安全能力平台 Yakit 是一个高度集成化的 Yak 语言安全能力的输出平台,使用 Yakit,我们可以做到: 类 Burpsuite 的 MITM 劫持操作台查看所有劫持到的请求的历史记录以及分析请求的参数全球第一个可视化的 Web 模糊测试工具:Web FuzzerYak Cloud IDE:内置智能提示的 Yak 语言云 IDEShellReceiver:开启 TCP 服务器接收反弹交互式 Shell 的反连第三方 Yak 模块商店:社区主导的第三方 Yak 模块插件,你想要的应有尽有... 看上去贼nb,实际上它也确实很牛 作为一个单兵库,他集成了许多的功能/模块 但因为我个人技术有限,不能够向大家展示其全貌,所以只能简单介绍下其抓包功能 首先呢在我们第一次打开时,需要选择连接模式 分别有以上三种,我们自然选择管理员权限,同时软件将会自动配置核心引擎,我们只需要静待一会即可进入 如何抓包 咱啥也不用管,进去直接莽 找到MITM:中间人代理与劫持 直接进入他下方的“劫持启动” 进来之后,可能会一脸懵,但别慌 先把证书配一下 下载到本地之后,进入浏览器设置(默认Chorme 在搜索栏中搜索”证书“,可以看到”安全“->“管理设备证书” 点击->“导入” 导入完成之后,回到我们的Yakit 选择免配置启动旁的“系统代理” 配置完之后,我们随便打开一个网站,发现在“自动放行”模式下抓包成功 那么我们如何才能拦截请求/响应,从而进行一些更改/查看数据捏 在右上角的地方,我们从“自动放行”模式转换到“手动劫持”模式 在这个模式下,打开我们要劫持的网站请求,进行拦截 可以看到请求头,也可以随意更改信息,如果还要劫持响应的话,点击左上角/右上角的”劫持响应“ 再提交数据,我们就可以得到网站返回的信息了 那么在结束的时候不要忘记关掉代理奥 还有一件事 Yakit之所以nb,在于其多于Bp的拓展插件,我们可以去内置的插件商店进行下载 再刷新一波 舒服 Bp 关于Bp,没啥好说的,推荐在kali里面跑 方便 直接说说Bp的核心功能:Proxy(代理

【复现笔记】Iterative Corresponding Geometry

文献: M. Stoiber, M. Sundermeyer and R. Triebel, "Iterative Corresponding Geometry: Fusing Region and Depth for Highly Efficient 3D Tracking of Textureless Objects," 2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 2022, pp. 6845-6855, doi: 10.1109/CVPR52688.2022.00673. 论文网址: Iterative Corresponding Geometry: Fusing Region and Depth for Highly Efficient 3D Tracking of Textureless Objects | IEEE Conference Publication | IEEE Xplore 作者提供代码: 3DObjectTracking/ICG at master · DLR-RM/3DObjectTracking · GitHub

Zabbix监控服务详解+实战

目录 一、监控体系概述 1. 为什么需要监控 2. 监控目标与流程 (1)监控的目标 (2) 监控的流程 3. 监控的对象 (1)CPU监控 (2)磁盘监控 (3)内存监控 (4)网络监控 (5) 系统重要进程监控 (6)应用服务监控 (7)硬件设备监控 (8)安全监控 (9)API接口监控 (10)业务监控 二、Zabbix 简介 1. 概述 2. Zabbix 的功能 (1)数据收集 (2)数据存储 (3)灵活的阈值定义 (4)可配置的报警 (5)实时的而可视化图形展示 3. Zabbix 的工作原理 三、Zabbix 服务的部署与配置 1. 安装基础环境 (1)安装MySQL (2)安装 Apache (3)安装 PHP 2. 部署 Zabbix (1)安装 Zabbix 存储库 (2)安装Zabbix服务器,前端,代理 (3)安装 Zabbix 前端 (4)编辑文件 /etc/yum.repos.d/zabbix.repo (5)安装 Zabbix 前端包 (6)初始化数据库 (7)导入sql数据 (8)导入数据库架构后禁用log_bin_trust_function_creators选项 (9)为 Zabbix 服务器配置数据库 (10)为 Zabbix 前端配置 PHP

自定义启动器

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉SpringBoot专栏 🔥欢迎大佬指正,一起学习!一起加油! 目录 🍁开发步骤🍁测试🍁自定义启动器🍁启动器支持多Druid和C3P0 🍁开发步骤 1.创建启动器项目 添加启动器相关依赖创建属性配置类创建自动配置类编写自动配置文件(spring.factories)使用自定义的启动器 🍁测试 创建个SpringBoot项目,导入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--引入spring‐boot‐starter;所有starter的基本配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--自动配置连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> 创建属性配置类 @Component @ConfigurationProperties(prefix = "spring.jdbc.datasource") public class DataSourceProperties { private String driverClassName ; private String url; private String username; private String password; public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.

【每日挠头算法题】Acwing 756. 蛇形矩阵 —— 巧妙解法

👑作者主页:@进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:每日挠头算法题 文章目录 一、题目描述二、思路讲解三、代码实现 如果无聊的话,就来逛逛 我的博客栈 吧! 🌹 一、题目描述 链接:756. 蛇形矩阵 输入两个整数 n 和 m ,输出一个 n 行 m 列的矩阵,将数字 1 到 n × m 按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。 输入格式: 输入共一行,包含两个整数 n 和 m 。 输出格式: 输出满足要求的矩阵。 矩阵占 n 行,每行包含 m 个空格隔开的整数。 数据范围: 1 ≤ n, m ≤ 100 输入样例: 3 3 输出样例: 1 2 3 8 9 4 7 6 5 二、思路讲解 蛇形矩阵,就是将数字以 回字形 填充到 二维数组 中,比如这样: 我们把 二维数组的行 看做 x轴,二维数组的列 看做 y轴。

nodejs下如何获取系统temp目录

在 Node.js 中,可以使用 os 模块来获取系统的临时目录。具体方法是调用 os.tmpdir() 函数,该函数会返回系统的临时目录的路径。 代码示例: const os = require('os'); const tempDir = os.tmpdir(); console.log(tempDir); 在这个例子中,我们首先引入了 os 模块,然后调用 os.tmpdir() 函数获取系统的临时目录路径,最后使用 console.log() 函数输出该路径。 注意,获取的这个temp目录是操作系统的临时目录,对于不同的操作系统,temp目录的位置可能不同,在 Windows 上它可能是 C:\Users\username\AppData\Local\Temp,在 Linux 上它可能是 /tmp 或者 /var/tmp。

softmax

1. softmax简介 softmax一般用于多分类任务中,将输出总和归一化,从而成为预测类别的概率分布,通常后面可以接交叉熵损失函数(CrossEntropyLoss)。对于一个向量例如[x1,x2,x3,x4,x5],做Softmax运算:​ sum = e ** (x1) + e ** (x2) + e ** (x3) + e ** (x4) + e ** (x5) softmax(x1) = e ** (x1) / sum softmax(x2) = e ** (x2) / sum softmax(x3) = e ** (x3) / sum softmax(x4) = e ** (x4) / sum softmax(x5) = e ** (x5) / sum 我们可以看到经过softmax之后,输出值加和为1,且每个值都处于0~1之间,这样就符合概率的定义了。 下图展示了softmax函数对[2,-1,3,0,1]做的变换。 2. softmax是激活函数 softmax通常来讲是激活函数,但是softmax函数要与交叉熵损失函数一起使用来避免数值溢出的问题。所以,在我们的深度学习框架中,在网络构造时通常是看不见softmax函数的,而在我们使用交叉熵损失函数时(CrossEntropyLoss)其内部会自动加上Sofrmax层。

人生

莫言亲手写下的人生毒言,句句精辟,绝了! 莫言——现年68岁, 2012年诺贝尔文学奖得主, 为中国人首开记录第一人。 他曾经解释过关于「我」这个字。 【我】 字丟了一撇, 成了 【找】字, 为找回那一撇, 【我】 问了很多人, 那一撇代表什么? 图片 商人说是金钱, 政客说是权力, 明星说是名气 军人说是荣誉 学生说是分数… 最后: 《生活》告诉《我》 那一撇是: 【健康和快乐】 没有健康和快乐, 什么都是浮云一片! 莫言自嘲说: 他年轻时怕多言, 易于得罪別人, 所以笔名《莫言》 结果是他言(写)了许多的话, 一直言到拿诺贝尔文学奖。 下面是他的精言, 是他的人生哲理: 01 人生的四个境界:不想上学,不想上班,不想上医院,不想上西天。 02 希望你想吃什么马上去吃,想做什么马上去做。毕竟岁数大了,记性不好! 03 不要指望谁陪你一辈子,没光的时候连影子都会离开你。 04 人生就是:一吃了之、一睡了之、一骂了之、一笑了之、一走了之、一死了之、一埋了之。 05 金钱就像水一样,缺水,渴死;贪多,淹死。 06 一个人心理衰老有两个标志:抱怨和后悔越来越多;把希望寄托在下一代。 07 到了这个年纪,重要的人越来越少,但留下的人越来越重要。 08 聪明的人想得通、精明的人看得准、高明的人看的远。你是哪种人? 09 年轻时,不拖累生你的人,年老时,不拖累你生的人。 10 千里纵横,你总得有个家,万众首领,你也得有个妈。 11 满桌佳肴,你得有好牙;腰缠万贯,你得有命花。 12 赏一路风光,你得走得动;拣一座金山,你得能够拿。 13 酷毙了靓绝了,你要有人爱,摔倒了失足了,你得有人拉。 14 结怨不如结缘,栽刺不如栽花;富贵不如福态,高寿不如高兴。 15 垄沟里刨食的是条好汉子,病床上数钱的是个傻瓜。 16 人在的时候,以为来日方长什么都有机会,其实人生是减法,见一面,少一面。 17 不要的东西,再好也是垃圾。 最近被一段话刷屏了——人生三大桌:出生时摆一桌,结婚时摆一桌,死的时候摆一桌。第一桌不会吃,第二桌没空吃,第三桌别人吃。 真的,一桌也没吃到。好好珍惜现在拥有的生活,该吃吃,该喝喝,遇事别往心里搁!健康最重要!

MATLAB-二维线性插值运算

二维插值在图像处理和数据可视化方面得到了大量的应用,二维插值的基本原理与一维插值一样,但二维插值是对两个变量进行函数的插值。在MATLAB中,主要使用interp2()函数进行二维插值的实现,其调用格式如下, zi =interp2(z,xi,yi) %表示若 z=mxn,则x=1,y=1:m zi = interp2(z, ntimes) % 在两点之间递归地插值ntimes次 zi=interp2(x,y,z,xi,yi) % 对原始数据x,y ,决定插值函数,返回值z为(x;,y)在函数f(x,y)上的值 zi= interp2(x,y ,z,xi,yi ,method) % 采用的不同的插值方法进行插值 zi= interp2( method,extrapval) % 若数据超过原始数据的范围时,则输入“extrapval”来指定种 %外推方法 在二维插值中,“mtethod”为选取插值的方法。插值的方法有以下4种:邻近插值、双线性插值、样条插值和立方插值。二维插值方法对比见表。 例:不同二维插值方法的结果图。 1)创建M文件,输人以下代码,实现原始数据图和二维插值4种 方法的结果图,所示。 [x.y] = meshgrid( -2:0.4:2); %原始数据 z= peaks(x,y); [xi,yi] =meshgrid( -2:0.2:2); %设置插值点 zl = interp2(x,y,z,xi,yi, ' nearest '); %邻近插值 z2= interp2(x,y,z,xi,yi); %双线性插值 z3= interp2(x,y,z,xi,yi, 'spline'); %样条插值 z4= interp2(x,y,z,xi,yi, ' cubic '); %立方插值 hold on; subplot(2,3,1); surf(x,y,z); title( '原始数据); subplot(2,3,2);

Mybatis 插入数据后返回自增主键ID失败总结

问题代码如下 void insert(@param("user")User user); <!-- 插入数据:返回记录主键id值 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into t_user (name,age) values (#{user.name},#{user.age}) </insert> 执行sql后,user.getId()并没有返回自增ID,自以为自增配置也没问题 useGeneratedKeys为true,用来设置返回主键id的值,keyProperty 代表 java对象成员属性名keyColumn 代表数据库记录主键字段 最后实践发现因为insert方法钟使用了@param注解,keyProperty 应该设置为user.id r如下 <!-- 插入数据:返回记录主键id值 --> <insert id="insert" useGeneratedKeys="true" keyProperty="user.id" keyColumn="id"> insert into t_user (name,age) values (#{user.name},#{user.age}) </insert> 或者修改方法和sql void insert(User user); <!-- 插入数据:返回记录主键id值 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into t_user (name,age) values (#{name},#{age}) </insert>

mac M1 brew services报错

今天使用brew services指令启动nginx服务的时候,发现报错了,大概的内容如下: [xxxxx-xxxxx ~]$ brew services Error: undefined method `launchd_service_path' for #<Formulary::FormulaNamespace1db1b67abc150bcac6739031eda6c7db::Tree:0x00007fa9a693d8c8> /opt/homebrew/Library/Taps/homebrew/homebrew-services/lib/service/formula_wrapper.rb:58:in `service_file' /opt/homebrew/Library/Taps/homebrew/homebrew-services/lib/service/formula_wrapper.rb:92:in `plist?' /opt/homebrew/Library/Taps/homebrew/homebrew-services/lib/service/formulae.rb:12:in `select' /opt/homebrew/Library/Taps/homebrew/homebrew-services/lib/service/formulae.rb:12:in `available_services' /opt/homebrew/Library/Taps/homebrew/homebrew-services/lib/service/formulae.rb:17:in `services_list' /opt/homebrew/Library/Taps/homebrew/homebrew-services/lib/service/commands/list.rb:13:in `run' /opt/homebrew/Library/Taps/homebrew/homebrew-services/cmd/services.rb:102:in `services' /opt/homebrew/Library/Homebrew/brew.rb:93:in `<main>' 环境:Mac M1 MacOS Ventura 13.1 之前使用brew services指令的时候一切正常,可以正常使用,前段时间提示系统升级,对系统进行了升级,升级之后应该是没有使用过brew services指令。 但是系统升级后git的使用报过错,具体错误内容忘记了,当时解决好了,今天在使用brew services的时候出现了错误,刚开始对这个错误一头雾水,不知道具体是什么原因,百度了一下也没有查到一些相关的信息。 后来使用绝招:谁出错就删掉了重新安装。 因为我是在使用brew services指令时出的问题,那么我就删除掉brew的services指令相关服务、文件。 rm -rf homebrew-services 提醒:homebrew-services在/opt/homebrew/Library/Taps/homebrew目录下 然后通过brew tap指令更新homebrew-services brew tap homebrew/services 更新完成之后,再使用brew services指令,一切正常了,问题解决。

SpringBoot配置文件

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉SpringBoot专栏 🔥欢迎大佬指正,一起学习!一起加油! 目录 🍁介绍🍁属性配置文件🍁YAML配置文件🍁多环境profile切换配置🍁@ConfigurationProperties批量注入 🍁介绍 springboot支持二种类型的配置文件 • properties属性配置文件 • yaml配置文件配置文件必须放置在项目的类加载目录下, 并且名字必须是applicationspringboot项目在运行的时候会自动加载这些配置文件 🍁属性配置文件 使用配置文件配置连接池信息,并将配置文件中的内容读取到对象中编写配值文件,在 resource 文件夹下面新建 application.properties 配置文件 spring.jdbc.datasource.driverClassName=com.mysql.jdbc.driver spring.jdbc.datasource.url=jdbc:mysql:///springboot spring.jdbc.datasource.username=root spring.jdbc.datasource.password=root 新建 properties 包,创建类 DataSourceProperties @Component public class DataSourceProperties { @Value("${spring.jdbc.datasource.driverClassName}") private String driverClassName; @Value("${spring.jdbc.datasource.url}") private String url; @Value("${spring.jdbc.datasource.username}") private String username; @Value("${spring.jdbc.datasource.password}") private String password; public String getDriverClassName() { return driverClassName; } public String getUrl() { return url; } public String getUsername() { return username; } public String getPassword() { return password; } @Override public String toString() { return "