git使用机制?

git(版本控制系统VCS之一)使用机制是什么? 前言:先介绍git基本命令 git clone, git branch, git checkout, (从远程仓库克隆全量代码到本地) git merge, git pull, (从远程拉取代码合并到本地仓库) git add, git commit, git push (把本地仓库增量代码,提交到远程仓库) 一、团队内协作图解 二、 跨团队协作图解

STM32CubeMX之外部中断检测按键

STM32CubeMX之外部中断检测按键 1.中断简介 中断,是指处理机处理程序运行中出现的紧急事件的整个过程。程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,处理机立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序中断。当处理机接受中断时,只需暂停一个或几个周期而不执行处理程序的中断,称为简单中断,中断又可分为屏蔽中断和非屏蔽中断两类。 STM32中断特性 ● 68个可屏蔽中断通道(不包含16个Cortex™-M3的中断线); ● 16个可编程的优先等级(使用了4位中断优先级); ● 低延迟的异常和中断处理; ● 电源管理控制; ● 系统控制寄存器的实现; 嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理晚到的中断。 Cortex‐M3 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。其中,编号为 1- 15 的对应系统异常,大于等于 16 的则全是外部中断。除了个别异常的优先级被定死外, 其它异常的优先级都是可编程的(所有能打断正常执行流的事件都称为异常)。 中断向量控制器, 简称 NVIC,是 Cortex‐M3 不可分离的一部分, 它与 CM3 内核的逻辑紧密耦合, 有一部分甚至水乳交融在一起。 NVIC 与 CM3 内核同声相应,同气相求,相辅相成,里应外合,共同完成对中断的响应。 NVIC 的寄存器以存储器映射的方式来访问, 除了包含控制寄存器和中断处理的控制逻辑之外, NVIC 还包含了 MPU的控制寄存器、 SysTick 定时器以及调试控制。 每个外部中断都有一个对应的优先级寄存器,每个寄存器占用 8 位,但是允许最少只使用最高 3 位。 4 个相临的优先级寄存器拼成一个 32 位寄存器。如前所述,根据优先级组设置,优先级可以被分为高低两个位段,分别是抢占优先级和亚优先级。优先级寄存器都可以按字节访问,当然也可以按半字/字来访问。有意义的优先级寄存器数目由芯片厂商实现的中断数目决定。 STM32F10xxx产品(小容量、中容量和大容量)的向量表 2.外部中断(EXTI) 对于互联型产品,外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,对于其它产品,则有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。 EXTI控制器的主要特性如下: ● 每个中断/事件都有独立的触发和屏蔽 ● 每个中断线都有专用的状态位 ● 支持多达20个软件的中断/事件请求 ● 检测脉冲宽度低于APB2时钟宽度的外部信号。 外部中断框图 要产生中断,必须先配置好并使能中断线。根据需要的边沿检测(上升沿、下降沿)设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写’1’允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置’1’。在挂起寄存器的对应位写’1’,将清除该中断请求。 3.硬件设计 根据硬件原理图特实物,Tout0 ~ Tout4对应的GPIO口为PA4 ~ PA7。采用外部中断方式实现触摸按键检测。其中中断线分别为:

k8s中Service ClusterIP ping不通?

一. Service的类型 先来看看《kubernetes权威指南》中对Service类型的介绍: ClusterIP:kubernetes默认会自动设置Service的虚拟IP地址,仅可被集群内部的客户端应用访问。NodePort:将Service的端口号映射到每个node的一个端口号上,这样集群中的任意Node都可以作为Service的访问入口地址,即:NodeIP:NodePort。LoadBalance:将Service映射到一个已存在的负载均衡器的IP地址上,通常在公有云环境中使用。ExternalName:将Service映射为一个外部域名地址,通过ExternalName字段进行设置。 在权威指南中介绍到ClusterIP是供集群内部访问的,但有天我发现我环境里的ServiceIP在服务器上是能ping通的,那这难道是书上面写的有问题? [root@k8s-master test-namespace]# kubectl get svc -n test NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-app-svc ClusterIP 10.96.240.115 <none> 8090/TCP 14d [root@k8s-master test-namespace]# ping 10.96.240.115 PING 10.96.240.115 (10.96.240.115) 56(84) bytes of data. 64 bytes from 10.96.240.115: icmp_seq=1 ttl=64 time=0.045 ms 64 bytes from 10.96.240.115: icmp_seq=2 ttl=64 time=0.035 ms ^C --- 10.96.240.115 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.

vue2创建项目

目录 1、检查环境,是否安装node 2、是否安装脚手架,查询脚手架vue-cli版本 3、创建项目vue2-admin 4、配置项目: 4.1、vue.config.js配置 4.2、修改package.json文件 4.3、创建环境变量文件(.env.dev、.env.prod、.env.test) 1、检查环境,是否安装node: node -v 2、是否安装脚手架,查询脚手架vue-cli版本 vue -V或vue --version 如果之前版本是2.x或者1.x,需要先卸载 //卸载脚手架命令 npm uninstall vue-cli -g //安装脚手架命令 npm install -g @vue/cli 3、创建项目vue2-admin vue create vue2-admin 可以按▽键选择第二个Default默认配置按enter键,生成项目 可以自定义配置,按▽键选择第三个选项:Manually select features 按enter键 按▽键,按空格键选中 按enter键 选择2.x版本 按enter键 路由采用history模式,直接输入y css编译器选择sass Eslient选择标准模式 代码检查,选择保存的时候 配置文件存放地选择In package.json 将此保存为未来项目的预设?输入n 按enter 键 自定义配置可以按个人实际需求配置 4、配置项目: 4.1、vue.config.js配置 //添加基本配置信息以及跨域配置 const path = require("path"); function resolve(dir) { return path.join(__dirname, dir); } module.exports = { publicPath: process.env.VUE_APP_BASE_URL, // 根地址,默认/ outputDir: "

windows改linux

使用旧的windows电脑改成linux机器,不使用双系统,直接格式化 本次需要两个U盘或者两台电脑。 制作WINPE启动盘 使用U深度制作启动盘,制作完成后进入PE系统,然后使用diskGenius删除所有电脑的分区进行快速分区,格式选择FAT32。选择多少个分区看个人需求 制作linux启动盘 使用新的U盘或者另一台电脑将之前的U盘改成linux启动盘 使用ultraiso制作linux启动盘。选择自己的linux系统,写入硬盘镜像,写入完成即可 安装linux系统 电脑开启重启,按esc,选择启动方式 U盘启动。进行linux安装。(install centos7)之后就是正常的centos7的安装流程了 遇到的问题 dracut-initqueue timeout 导致这个问题的原因是U盘的名称和install 步骤安装时U盘的名称对不上。 首先需要确认linux启动U盘的名称,然后在install xxx时按 E键,修改hd对应的U盘名称 linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=U盘名称 quiet linuxefi /images/pxeboot/initrd.img 注意,看自己的U盘名称是否带86_64,一般都是U盘没带,但是安装时默认有了导致的

Git使用教程

Git安装 Git - Downloads 创建本地仓库 git clone 克隆一个仓库 git init 初始化仓库 git add xx.txt 添加文件到暂存区 git commit -m “XX” 提交文件-m后面是描述 git status 查看文件状态 git push 上传推送文件 git pull 拉取代码 常用命令 git --version 查看是否安装成功 git config --global user.name “xxx” git config --global user.email “xxx@xx.com” git config --list git remote add origin url 关联远程仓库(这个origin是远程仓库的默认习惯命名,可以修改的) git push -u origin master 第一次推送master分支的内容 git push origin master url 推送(url后续可以省略) git pull origin master url 拉取代码

MySql常用函数总结

一.IF函数 IF(expr1,expr2,expr3) 用法:expr1是判断条件,expr2是符合条件后执行的结果,expr3是不符合条件执行的结果 例:select IF(1>0,'yes','no') 该查询结果为:yes 二.IFNUll函数 select IFNULL(expr1,expr2) 用法:该函数用来判断expr1是否为null,如果为null则返回expr2,反之返回expr1 例:第一条SQL返回mysql,第二条返回hello world select IFNULL(NULL,'mysql') select IFNULL('hello world', 'mysql') 三.COALESCE函数 select COALESCE(value,...) 用法:匹配到第一个不为null的值直接返回 例:第一条SQL返回null,第二条返回3 select COALESCE(null, null, 1, 2, 3) select COALESCE(3,null, 2, 1) 三.CASE...WHEN...函数 case '字段' when '匹配的条件' then '匹配条件成功后' else '没匹配成功' end 用法:相当于if...else if...else 或者 switch...case,用于条件判断。 例: SELECT CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '未知性别' END AS '性别' FROM test

在Access中出现“由于数据表***需要一个相关记录,不能添加或修改记录”如何解决?

修改ACCESS表某条记录的某个字段的值。如图,修改借书登记的一个书号。 出现“由于数据表***需要一个相关记录,不能添加或修改记录”的原因是什么?我不清楚。总之通过以下步骤成功了: 1.关闭所有表/查询 2.打开关系编辑界面(数据库工具-关系),右键“图书”和“借书登记”的关系线,点“编辑关系”,取消完整性 3.修改要改的值,保存,恢复两表关系

作业:单链表实现增删查改,以及链表数据的翻转

实现效果功能函数代码: #include<stdio.h> #include"listlink.h" #include"stdlib.h" //创建表 listlink *list_create() { //申请一个头结点 listlink *L=(listlink *)malloc(sizeof(listlink)); if(NULL==L) { printf("申请失败\n"); return NULL; } //结点初始化 L->len=0; L->next=NULL; printf("创建成功\n"); return L; } //判空 int list_empty(listlink *L) { return L->next==NULL?1:0; } //遍历 void list_show(listlink *L) { //判断逻辑 if(NULL==L||list_empty(L)) { printf("链表不合法或为空\n"); return; } //定义指针指向第一个结点开始遍历 printf("此时链表内的数据有>>>"); listlink *q=L->next; while(q!=NULL) { printf("%-4c",q->data); q=q->next; } printf("\n"); } //申请数据封装结点 listlink *list_buy_node(datatype e) { //申请一个结点 listlink *p=(listlink *)malloc(sizeof(listlink)); if(NULL==p) { printf("申请失败\n"); return NULL; } //申请成功,返回结点 p->data=e; p->next=NULL; return p; } //按位置查找返回结点 listlink *list_search_pos(listlink *L,int pos) { //判断逻辑 if(NULL==L||pos<0||pos>L->len) { printf("

ACCESS查询无重复数据

【Access入门】查询无重复,查询唯一值的示例【Access软件网】 这个网址上面有动画,网页是别人做的。关键步骤是在编辑查询的上半窗口空白处右键-属性-唯一值改为“是”。

【Python】记录从3.9升级到3.11踩的坑

写在前面的话:如果想体验python3.11,不推荐生产环境升级,可以现在测试环境试试看 环境变化 原始环境 Python3.9,有挺多安装的第三方库,有自己写的类和方法,程序一切运行正常 升级环境 Python3.11,考虑到第三方库可以重新安装,自己写的类和方法,用的都是比较常用的方法,不涉及到方法不支持的情况 升级方案 拷贝出自己写的类和方法文件,卸载Python3.9,清理环境变量下载Python3.11,直接安装,勾选添加环境变量安装完成后,吧自定义的类和方法放在Libs文件夹,然后安装第三方库 问题产升 1. lxml无法安装成功 众所周知,lxml是很多第三方库的依赖,安装不成功的话,严重影响当前业务的使用。经过多次查询,找到以下解决方案 直接从轮子构建轮子下载地址,这里有挺多常用的轮子,可以搜索下载需要的版本,根据自己的版本情况选择 前提,需要先安装wheel这个库,然后就可以从轮子构建了构建方法 pip install 轮子下载位置然后就大功告成了 2. connectorx 无法引用 这是一个比较优秀的数据库读取的第三方库,可以直接把数据读取为pandas.Dataframe 格式,读取速度一般是比较快的(部分情况下会慢一些),数据量大的情况下,可以替代 pandas.read_sql()。我日常处理的数据在十万到百万级别,用的比较多 github地址 安装是正常的,但是只要引用,就报错。虽然告诉我哪里错了,但是我依旧无从下手 查询了版本,最新版是0.3.1,但是我安装的是0.2.3。看到作者更新比较频繁,就在想,是不是我版本没更新上去开始尝试各种更新方法 请原谅我,3.11无法安装最新版 不死心的我,继续探索,找轮子,结果发现打包环境没有3.11,最终放弃 3. ddddocr 这是一个非常不错的验证码识别库,github地址 无论怎么安装,就是失败 直到我翻到了底,我大彻大悟了,竟然不支持 最终我还是放弃了 结尾 可能还有一些我位置的坑,以及当前遇到的问题的其他解决方案,期待大家的留言反馈

Java8:流式编程

编写:HorinJsor 文章目录 前言一、流式编程二、实例1.基础三剑客 2.映射转换【 map() 】3.排序[ sorted((T, T) -> int) ] 总结 前言 本文介绍Java8的特性之【流式编程】。 提示:以下是本篇文章正文内容,下面案例可供参考 一、流式编程 流式编程是Java8的特性,可以替换传统的代码编写方式,提升可读性。 可以理解为梭哈(搞怪)。 Lambda: ( 参数 -> 执行方法 ) 二、实例 1.基础三剑客 @SpringBootTest public class StreamTeat { /** 创建List<Apple>对象,以此示例展示流的操作 **/ public List<Apple> b(){ Apple apple1 = new Apple("red",200,"cq"); Apple apple2 = new Apple("red", 300, "cd"); Apple apple3 = new Apple("white", 900, "gx"); List<Apple> all = new ArrayList<>(); all.add(apple1);all.add(apple2);all.add(apple3); return all; } @Test public void a(){ //获取对象 List<Apple> all = b(); all.

MySQL 数据库时间相差8小时

方法一:通过mysql命令行模式下动态修改(重新mysql后可能会失效) -- 查询MySQL数据库时间 select Now(); show variables like '%time_zone'; --查看当前时区 -- time_zone | SYSTEM 需要修改 -- time_zone | +08:00 不需要修改 set global time_zone='+8:00'; -- 设置全局时区为东八区 set time_zone = '+8:00'; -- 设置当前会话为东八区 flush privileges; -- 刷新权限 方法二:通过修改my.cnf配置文件来修改时区 # vim /etc/my.cnf ##在[mysqld]区域中加上 default-time_zone = '+8:00' # /etc/init.d/mysqld restart #重启mysql使新时区生效

Yolov5算法解读

yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不断进行升级迭代。 Yolov5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中,这几个模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。 yolov5主要分为输入端,backbone,Neck,和head(prediction)。backbone是New CSP-Darknet53。Neck层为SPFF和New CSP-PAN。Head层为Yolov3 head。 yolov5 6.0版本的主要架构如下图所示: 从整体结构图中,我们可以看到Backbone,neck和head由不同的blocks构成,下面是对于这三个部分,逐一介绍各个blocks。 1. 输入端: YOLOv5在输入端采用了Mosaic数据增强,参考了CutMix数据增强的方法,Mosaic数据增强由原来的两张图像提高到四张图像进行拼接,并对图像进行随机缩放,随机裁剪和随机排列。使用数据增强可以改善数据集中,小、中、大目标数据不均衡的问题。 Mosaic数据增强的主要步骤为:1. Mosaic 2.Copy paste 3.Random affine(Scale, Translation and Shear) 4.Mixup 5.Albumentations 6. Augment HSV(Hue, Saturation, Value) 7. Random horizontal flip. 采用Mosaic数据增强的方式有几个优点:1.丰富数据集:随机使用4张图像,随机缩放后随机拼接,增加很多小目标,大大丰富了数据集,提高了网络的鲁棒性。2.减少GPU占用:随机拼接的方式让一张图像可以计算四张图像的数据,减少每个batch的数量,即使只有一个GPU,也能得到较好的结果。3.同时通过对识别物体的裁剪,使模型根据局部特征识别物体,有助于被遮挡物体的检测,从而提升了模型的检测能力。 2.backbone 在Backbone中,有conv,C3,SPFF是我们需要阐明的。 2.1.Conv模块 Conv卷积层由卷积,batch normalization和SiLu激活层组成。batch normalization具有防止过拟合,加速收敛的作用。SiLu激活函数是Sigmoid 加权线性组合,SiLU 函数也称为 swish 函数。 公式:silu(x)=x∗σ(x),where σ(x) is the logistic sigmoid. Silu函数处处可导,且连续光滑。Silu并非一个单调的函数,最大的缺点是计算量大。 2.2 C3模块 C3其结构作用基本相同均为CSP架构,只是在修正单元的选择上有所不同,其包含了3个标准卷积层,数量由配置文件yaml的n和depth_multiple参数乘积决定。该模块是对残差特征进行学习的主要模块,其结构分为两支,一支使用了上述指定多个Bottleneck堆叠,另一支仅经过一个基本卷积模块,最后将两支进行concat操作。 这个模块相对于之前版本BottleneckCSP模块不同的是,经历过残差输出后的卷积模块被去掉了,concat后的标准卷积模块中的激活函数也为SiLU。 Bottleneck模块借鉴了ResNet的残差结构,其中一路先进行1 ×1卷积将特征图的通道数减小一半,从而减少计算量,再通过3 ×3卷积提取特征,并且将通道数加倍,其输入与输出的通道数是不发生改变的。而另外一路通过shortcut进行残差连接,与第一路的输出特征图相加,从而实现特征融合。 在YOLOv5的Backbone中的Bottleneck都默认使shortcut为True,而在Head中的Bottleneck都不使用shortcut。 2.3. SPPF模块 SPPF由SPP改进而来,SPP先通过一个标准卷积模块将输入通道减半,然后分别做kernel-size为5,9,13的max pooling(对于不同的核大小,padding是自适应的)。对三次最大池化的结果与未进行池化操作的数据进行concat,最终合并后channel数是原来的2倍。 yolo的SPP借鉴了空间金字塔的思想,通过SPP模块实现了局部特征和全部特征。经过局部特征与全矩特征相融合后,丰富了特征图的表达能力,有利于待检测图像中目标大小差异较大的情况,对yolo这种复杂的多目标检测的精度有很大的提升。 SPPF(Spatial Pyramid Pooling - Fast )使用3个5×5的最大池化,代替原来的5×5、9×9、13×13最大池化,多个小尺寸池化核级联代替SPP模块中单个大尺寸池化核,从而在保留原有功能,即融合不同感受野的特征图,丰富特征图的表达能力的情况下,进一步提高了运行速度。

电脑上怎么录屏并保存?进来学习一下小技巧

随着现在互联网飞速发展,我们在日常办公中经常需要电脑录屏的操作。电脑录屏就是需要把屏幕录下来保存在电脑上,然后进行分享查阅或者保存下来。然而最近有小伙伴在咨询使用系统自带的录制功能但是不知道文件会保存到哪里。那么电脑上怎么录屏并保存呢?下面就来唠一唠。 ①.系统自带录制功能 想必小伙伴咨询的自带录制功能就是win+G的操作了,可以先点击win+I打开控制面板,在游戏板块中进入,开启系统录制的权限。 开启录制权限之后,我们就可以在需要录制屏幕的时候按下快捷键“win+alt+G”开始录屏,需要结束录制是按下快捷键“win+alt+R”结束后会弹出下载录制文件即可,但是系统自带的录屏不能设置录制文件的清晰度等属性,默认占用内存会比较大,电脑内存不大的小伙伴们还是不建议常用这种方法。 ②.使用录屏工具 首先打开这款录屏工具,这里可以先预设需要录制的范围是全屏还是区域录制,免了后期再进行裁剪剪辑,接着点击面板右上角的“设置”按钮。 进入设置界面,在左侧列表中点击“输出目录”可以看到在输出目录后方点击“更改目录”按钮,在弹窗中选择需要保存的位置即可。设置好指定位置之后,再回到首页,就可以进行录制操作了,结束录制之后文件会自动保存在指定位置。 好啦,看到这里小伙伴们知道电脑上怎么录屏并保存了吗?经常需要录制屏幕的小伙伴们如果还有其他好用的方法的话也欢迎在评论区留言分享哦~

对于xshell连接不上虚拟机的一些解答

如果你发现你可以在虚拟机内ping通 之后,在你电脑dos下也可以ping通。 然而,还是发现你的xshell连接不上虚拟机。 这里使用ifconfig 我发现这个地址是在变化的,之前是129,现在是131,所以这样再到xshell,在连接属性那里,把地址改了就可以了,再重新连接,OK了。 本文操作环境:Windows7系统,xshell 5版本,Dell G3电脑。 xshell连接不上虚拟机的解决办法: 1、测试网络是否能够正常连接: 测试网络连接方式: (1)使用xshell连接远程虚拟机,也无法连接; (2)本地ping远程虚拟机ip地址,连接超时; (3) 没有开启SSHD服务可以通过系统,在命令行中输入:service sshd status命令来查看该服务的状态 (4)在虚拟机中在命令行中输入:curl www.baidu.com 命令,可以访问外网地址 (5)检查虚拟机的防火墙是否开启,在虚拟机中在命令行中输入:systemctl status firewalld 命令查看防火墙的状态 2、如果sshd服务和防火墙都正常运行打开虚拟机管理界面,点击【管理】,选择【主机网络管理器】 3、查看网络IP设置,如果和远程主机里的IP地址配置一直,则将【手动配置网卡】改为【自动配置网卡】 4、此时再用xshell连接远程主机,可以正常访问,MySQL服务也可以正常访问了

数学建模与谈恋爱

我们提前了17小时提交了亚太数模的论文。 总结一下我在这次比赛的感受: 1. 我和现任打了四次数模,这次是第一次他写代码。与蓝桥杯时隔七个月,我第一次感受到自己对python的无力感。 2.因为代码是他写的,所以模型是他建的。写代码和用工具是经济基础,建模是上层建筑。没有经济基础,何来上层建筑?不明白为何各大学习媒体上网友和UP主都推荐一人建模一人编程。事实上,不会编程的人建模容易高估实现的能力,不会有比亲手编程的人更明白模型怎么建立的人了。 3.不会编程的人参加数模只能混。比如我这次花了大量时间纠正语法错误,最后还是被男友用curve fitting解决;因为我本人没学过数字图像处理,所以大部分模型只能由男友写。因为模型原理一旦复杂,就不是业余人士在赛期内能搞清楚的了。 4.为什么提前结束比赛? 因为我们三个编程能力太弱了。除了已经实现的,什么都实现不了。我还想改语言,但是男友把它提交了,我没劝阻他,因为我在担心期末考,他也担心。我的好女队友向来很听“使唤”,她总是问我们“我该做什么”…但是我们三个的编程能力让我们什么也做不了 最后,希望各位想打数模的女孩子好好学习,自己能有拿的出手的编程本领,见到别人有男友不要觉得自己失败,见到男友比自己厉害不要觉得自己失败,更不用担心自己被甩了会有多惨。 也许希望你变强的人很多,但是希望你变得比自己强的人很少, 对现在的我来说,也许还是愿意没参加过那么多次比赛,这些参加了都用来认识自己确实啥也不会的比赛着实对成长没多大意义 为什么没多大意义? 因为知道自己废也不会继续学。而是等到下一次比赛前不得不假装很努力地看课。 为什么不继续学? 因为我们的利益驱动里面没有这个。 不要绑定一个人,因为你不知道你跟他合得来是不是只是因为目前路合得来, 不要绑定一个人,因为他会让你不做出对自己最有利的选择 不要绑定一个人,你以为他懂你但是你也会变他也会变。

论文写作步骤和技巧梳理

目录 一、选题:坚持“四有”原则 二、开题:良好的开始是成功的一半 三、摘要:简洁有力,直奔主题 ​四、关键词:以小见大 五、正文:论文最最最核心部分 六、参考文献:格式正确很重要 七、致谢:画上完美句号 你的论文怎么写的? 优秀论文都有哪些亮点? 怎么才能写一篇得分高的论文? …… 相信很多被论文搞得一筹莫展的学子都会有类似的疑问。论文是每个大学生的必经之路,想要拿到最后的毕业证书,还得历经九九八十一难的论文才可。想要写出一篇优秀的论文,不是一件简单的事,那么论文到底……应该怎么写呢? 探究这个问题之前,我们先来梳理一下,论文都由哪些部分来组成,然后再由我们的架构,来开始撰写我们的论文。论文的基本结构如下:选题、开题、摘要、目录、关键词、正文、参考文献、致谢等。了解完论文的结构之后,我们再一步步循序渐进,慢慢来完成,在询问了多位优秀毕业生的论文写作技巧后,总结成文来和大家分享,接下来就来说一说关于论文的写作步骤和技巧,满满干货,希望可以给莘莘学子一些新的建议与启发。 一、选题:坚持“四有”原则 论文的选题是最重要也是最基础的核心结构,俗话说,好的开始是成功的一半。所以制定好的选题也显得至关重要。我们可以通过阅读书籍了解信息,从而来思考自己的选题,突破自己学科的一些“空白处”去研究,综合比较和社会的调查,从而找到自己适合的选题。值得注意的四个原则是【“四有”】:有价值、有兴趣、有可操作性、有创新主体。 二、开题:良好的开始是成功的一半 选题决定好了之后,就要开始写开题报告了,撰写开题报告时,要先阐明选题的目的和意义,接着选题的基本内容确定下来,并且适当了解国内外的研究状况,拟定自己的写作计划和提纲,为后面撰写论文的正文打好坚实的基础。 注意文献综述部分,需要阅读大量而全面的资料,分收集、阅读、筛选、整理四个部分来展开,围绕自己的论文主题和相关领域,来探究好国内外的研究现状。 三、摘要:简洁有力,直奔主题 摘要部分主要针对你的论文,主要阐述从事这一研究的目的和重要性,从而指出自己研究的主要内容,获得的基本结论和研究成果,突出论文的新见解。注意文字要简明扼要,不要太啰嗦,减少不必要的文字修饰,用最少的文字来撰写出最大的信息量。字数一般是在400-500字为佳,为论文字数的5%。 总的来说,好的摘要需要具备以下几点: 1.开门见山,迅速进入主题! 2.语言简洁有力,内容清晰明了! 3.引人入胜,对论文整体有基本了解! 四、关键词:以小见大 撰写摘要之后就要提取论文的主要关键词,一般是3-5个关键词,注意紧扣文章内的重要概念及提现创新型的概念,注重研究对象及其上下平行的概念。怎么去提取重要的关键词呢?可以从三方面来考虑,一是根据你论文的标题来提取关键词,二是根据论文的主题来提炼出精准的关键词,三是文章的关键词提取要根据关键的程度来进行提取,但切忌不要过于集中。 接着就是目录部分,目录部分就是排版技巧,这里就不一一赘述了,将会在下一期跟大家分享如何生成目录的技巧,记得持续关注哦! 五、正文:论文最最最核心部分 正文就是论文的主体部分,所以这部分的撰写显得尤为重要,因此要注意结构完整、逻辑清晰、中心突出,论点正确,论据充分,论证严密,同时注意语句通顺,格式准确,保证文章的完整性。 我们的论文内容主要是通过提出问题论点、分析和探究,对提出的结果进行解释以及论证,一般会先把自己重要的论点放在正文的前面部分,后面再着重论证和分析论点,最后证明论点的可靠性。在撰写的过程中,一般会结合图表等来分析和进一步论证。 六、参考文献:格式正确很重要 我们撰写论文过程中,可以需要参考一些其他人的优秀论文、期刊等文献内容,这一部分也是要在正文的后面当附录加进去的,但很多人对参考文献的了解比较少,一般来说,参考文献的类型有以下这几种,具体如下:M-专著、C-论文集、N-报纸文章、J-期刊、D-学位论文、R-报告、Z-其他等。 我们在撰写参考文献内容的时候,注意要作者、文献名、杂志或书名; 卷号/期刊号、出版时间、页数等元素即可。 七、致谢:画上完美句号 写到致谢这里证明离你的论文结束已经胜利在望了~致谢是对本次撰写论文过程的总结,可以对指导老师、身边同学表示感谢,也可以回顾自己大学生活的点点滴滴,阐述自己在本次写作论文中的收获,表达对自己未来的展望和勉励。注意用词要得当,情感真挚即可。

【python】使用VSCode搭建flask环境

一、开始 安装Python 及vscode 二、新建文件夹 例如:flask-11.27 三、创建python虚拟环境 vscode:点击文件-打开文件夹-选择新建的文件夹 vscode:信任此作者 vscode:终端-新建终端-执行:python -m venv env,flask-11.27文件夹中产生 env 文件夹 四、选择解析器 vscode:查看-命令面板-输入选择:Python: Select Interpreter 并回车 vscode:选择其中带有“env”的Python解析器 vscode:新建终端窗口,此时终端目录前带有“env” 五、安装flask vscode:执行:pip install flask vscode:提示需要更新“pip”,直接复制提示中的语句即可 六、测试 在新建立的文件“flask-11.27”中 建立 app.py 文件 文件中输入内容: from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello!" 七、运行测试 vscode:直接在终端中执行:python -m flask run vscode:command+单击http://127.0.0.1:5000/连接或打开浏览器输入地址:http://127.0.0.1:5000/ 网页中显示Hello!表示成功。

十大最佳虚拟化软件

正如该术语在计算术语中暗示的那样,虚拟化涉及到创建虚拟操作系统、网络平台和存储设备。当今世界,需要复杂的计算机系统来帮助管理大型企业。虚拟化帮助计算机系统和网络管理员使用相同的硬件运行并行操作系统进程。这意味着硬件和软件集成的有效使用。它还意味着可以通过虚拟化网络安全高效地共享文件。目前市场上有几种虚拟化软件。 本文介绍了目前最好的10个虚拟化软件。 最佳虚拟化软件 \ 比较(全部) 根据您的需要详细检查所有的服务,并明智地选择服务-到最后,您将确切地知道哪一个是适合您的选择。 1。思杰公司 Citrix是目前最好的虚拟化软件之一。它使用企业移动管理(emm)技术向客户提供数据和管理数据的应用程序之间的安全和优化的集成。 以下是它的一些最强大的功能: 企业移动管理(EMM)–Citrix提供一整套EMM服务,包括网络安全网关、移动应用程序管理和移动内容管理。 文件共享和同步——通过Citrix,企业可以轻松地共享文件,而不会出现延迟或冗余问题。 高效的网络——Citrix允许数据和应用程序安全、快速地共享给网络的所有用户。对于网络中的许多用户,有必要获得一个安全的虚拟网络。Citrix提供了这个功能。 citrix在全球拥有数百万用户,是一款强大可靠的虚拟化软件。它提供安全的网络和最佳的虚拟化服务。emm服务尤其使citrix成为非常理想的虚拟化软件。 2。平行线 Parallels可以帮助您从任何设备访问Office工作桌面,并从世界任何地方运行应用程序。 以下是它的一些最佳功能: 应用程序远程控制–您实际上可以从工作桌面外部控制所有桌面应用程序。最棒的是,Parallels可以在任何设备上工作,这样你离开办公室时就不用担心了。 外设重定向–Parallels允许重定向连接到工作机器或网络的USB和其他外设设备。 在大多数操作系统上运行-您不必更改操作系统以使用并行程序。它运行在所有常见的操作系统上,如windows、linux、android、ios。 Parallels是一个强大的虚拟化软件,运行在大多数设备上,并得到大多数操作系统的支持。不必安装当前操作系统即可使用并行程序。 三. 睿拓 Virtuozzo为一些最大的在线托管公司和服务提供商提供托管服务。 它具有以下显著特征: 系统容器——这个独特的特性允许一个独立的内核同时管理其他几个独立的虚拟进程。 加密容器–此功能允许交换数据的最大安全性。你永远不用担心有人解密你的信息时,使用技巧。 完全在Linux和其他发行版上运行—如果您使用的是任何流行的OS发行版,特别是Linux,那么Virtuozzo就是一个不错的选择。 大师自2001年起开始使用。对于任何虚拟化软件来说,它都有一些最好管理、安全和弹性的基础设施。 4。Xen项目 xen项目为许多商业组织提供虚拟化服务。例如,amazon web服务是使用xen项目管理的。 以下是它的一些最强大的功能: 它是开源的——Xen项目是Linux操作系统的一部分。因此,它是开源的,感兴趣的用户可以很容易地访问它。小企业或个人用户可以利用这一点并虚拟化其计算机操作。 基于云的解决方案–开放堆栈是xen项目虚拟化软件提供的基于云的解决方案的最佳示例。 范围广泛的服务器产品——Xen项目拥有范围广泛的服务器产品,包括华为UVP和Oracle虚拟机。 Xen项目从2003年开始上市。它为任何虚拟化软件提供了一些最全面的服务。 5. Virtual Iron Virtual Iron 于2009年被甲骨文公司收购。它提供了高质量的服务器虚拟化和基础设施管理。 以下是它的一些最佳功能: 全面的虚拟化服务—此软件允许单服务器和多服务器分区。这提供了足够的高可用性恢复选项以及对虚拟化数据的访问。 减少错误和劳动—VirtualIron通过自动化流程管理虚拟化的数据和应用程序。这有助于减少由人工输入引起的冗余错误。 virtual iron是当今市场上最好的虚拟化软件之一。自从被甲骨文收购以来,virtual iron有了很大的改进。 6. ManageEngine ManageEngine 提供广泛的监控服务,使用简单友好。你不必浪费很多时间去弄清楚它的一些功能是如何工作的。它还提供了一个监测支持系统。 以下是它的一些理想功能: 服务器虚拟化-使用manageengine,您可以在同一台计算机上运行尽可能多的虚拟操作系统。它有助于最大化生产和降低运营成本。 应用程序管理——manageengine提供应用程序管理服务,监控关键应用程序,如收入收集应用程序。 manageengine使您的应用程序和所有虚拟化进程都得到管理和主动监视。使用manageengine时,您将对虚拟化需求进行排序。 7。VMware vmware包含一整套虚拟化软件所需的特性。它目前被许多组织用来管理他们的云服务和虚拟化。 以下是它最理想的一些特性: 数据和云中心基础设施–通过vmware虚拟化,您将拥有最好的数据和流量。最棒的是,所有数据都将虚拟地存储在云中,您可以随时访问它。 安全网络–vmware提供安全的网络通道。您不必担心不完整的数据位或解密的通信线路。 数字工作区—VMWare提供对网络虚拟环境中任何应用程序或设备的访问。您可以远程访问最终用户计算服务,所有这些服务都托管在虚拟化平台上。 8。虚拟机 VirtualBox是Oracle的一款产品,它诠释了卓越的服务和可靠性。它功能强大,既可以用于企业,也可以用于个人。虚拟盒子是当今市场上最著名、应用最广泛的虚拟化软件之一。 其最理想的特征包括: 开源——VirtualBox是根据通用公共许可证第2版提供的条款开发的开源虚拟化软件。这使得许多感兴趣的用户可以使用它,而不必付出很多成本。 灵活性——虚拟盒子运行的操作系统列表是无止境的。从windows 2000到10,linux,opensolaris;从根本上说,virtual box是最灵活的虚拟化软件之一。

Pytorch中CrossEntropyLoss()详解

一、损失函数 nn.CrossEntropyLoss() 交叉熵损失函数 nn.CrossEntropyLoss() ,结合了 nn.LogSoftmax() 和 nn.NLLLoss() 两个函数。 它在做分类(具体几类)训练的时候是非常有用的。 二. 什么是交叉熵 交叉熵主要是用来判定实际的输出与期望的输出的接近程度。举个例子:在做分类训练的时候,如果一个样本属于第 K 类,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0,即 [0,0,1,0,….0,0] ,这个数组也就是样本的 Label,是神经网络最期望的输出结果。我们用交叉熵损失函数来衡量网络的实际输出与正确标签的差异,利用这种差异经过反向传播去更新网络参数。 交叉熵:它主要刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,则交叉熵定义为: 那么该公式如何表示,举个例子,假设N=3,期望输出为p = (1,0,0),实际输出q1 = (0.5,0.2,0.3),q2 = (0.8,0.1,0.1),那么: 通过上面可以看出,q2与p更为接近,它的交叉熵也更小。 三. Pytorch中的CrossEntropyLoss()函数 Pytorch中计算的交叉熵并不是采用 这种方式计算得到的,而是交叉熵的另外一种方式计算得到的,如下公式所示,它是交叉熵的另外一种方式。 Pytorch中CrossEntropyLoss()函数的主要是将softmax-log-NLLLoss合并到一块得到的结果。 Softmax后的数值都在0~1之间,所以ln之后值域是负无穷到0。然后将Softmax之后的结果取log,将乘法改成加法减少计算量,同时保障函数的单调性 。NLLLoss的结果就是把上面的输出与Label对应的那个值拿出来(下面例子中就是:将log_output\logsoftmax_output中与y_target对应的值拿出来),去掉负号,再求均值。 举例 : import torch import torch.nn as nn x_input=torch.randn(3,3)#随机生成输入 print('x_input:\n',x_input) y_target=torch.tensor([1,2,0])#设置输出具体值 print('y_target\n',y_target) #计算输入softmax,此时可以看到每一行加到一起结果都是1 softmax_func=nn.Softmax(dim=1) soft_output=softmax_func(x_input) print('soft_output:\n',soft_output) #在softmax的基础上取log log_output=torch.log(soft_output) print('log_output:\n',log_output) #对比softmax与log的结合与nn.LogSoftmaxloss(负对数似然损失)的输出结果,发现两者是一致的。 logsoftmax_func=nn.LogSoftmax(dim=1) logsoftmax_output=logsoftmax_func(x_input) print('logsoftmax_output:\n',logsoftmax_output) #pytorch中关于NLLLoss的默认参数配置为:reducetion=True、size_average=True nllloss_func=nn.NLLLoss() nlloss_output=nllloss_func(logsoftmax_output,y_target) print('nlloss_output:\n',nlloss_output) #直接使用pytorch中的loss_func=nn.CrossEntropyLoss()看与经过NLLLoss的计算是不是一样 crossentropyloss=nn.CrossEntropyLoss() crossentropyloss_output=crossentropyloss(x_input,y_target) print('crossentropyloss_output:\n',crossentropyloss_output) 最后计算得到的结果为: x_input: tensor([[ 2.8883, 0.

修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像

大家斗志到Maven默认连接的仓库位置https://repo .maven.apache.org/maven2访问国外镜像下载东西时相对较慢,所以多数朋友想切换到国内镜像,国内阿里已经给大家提供了一套完整的镜像供大家使用。 Maven默认连接的仓库位置 <repositories> <repository> <id>central</id> <name>Central Repository</name> <ur1>https://repo .maven.apache.org/maven2</ur1> <layout>default</layout> <snapshots> <enabled*false</enabled></snapshots> </repository> </repositories> 下面给大家讲一下修改maven镜像仓库位置,将maven镜像更换成阿里镜像具体操作步骤 第一步:打开Maven安装位置的 settings.xml(settings.xml所在位置:Maven安装路径\conf\settings.xml) 第二步:搜索代码 <mirrors> 默认在146行左右 第三步:将下面代码粘到内 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</ur1> </mirror> 粘贴代码详解 id:此镜像的唯一标识符,用来区分不同的mirror元素mirrorOf:对哪种仓库进行像,简单说就是替代哪个仓库name:镜像名称url:镜像URL

mac 安装完anaconda后找不到tensorflow包,pip install 无效

一、问题 重新安装完anaconda后 在jupyter里安装tensorflow包出现错误: pip install tensorflow Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow 二、解决方案 1.更新pip 没用 2.conda 安装tensorflow包 在anaconda-navigator启动页,environment查找"tensorflow"相关包,发现居然没有! 参考博文:解决anaconda安装tensorflow的“no module named tensorflow”问题 看完这篇博文后我才反应过来,需要先安装tensorflow包. 终端输入: conda install tensorflow # 我这里是创建了一个tensorflow环境,再安装的 好的又报错了: 3.解决服务器问题 然后我又找到这篇文章 参考博文:PackagesNotFoundError: The following packages are not available from current channels的解决办法 ①将conda-forge添加到搜索路径上 使用以下命令将conda-forge channel添加到channel列表中: conda config --append channels conda-forge ② 尝试再次安装tensorflow conda install tensorflow # 我这里是在tensorflow环境安装的 虽然前面failed,但是最后还是成功了!

Mac zsh: command not found: conda 报错

最近升级了macos系统,想要卸载anaconda,输入conda出现错误,搞了好久才解决这个问题,特此记录一下,尽量详细记录一下每一个步骤,或许以后还用得上TAT… 一、报错 conda --version zsh: command not found: conda 二、解决方法 1.切换用户 目的是临时提供超级管理员权限,否则权限不够,修改文件后无法保存 在终端输入 sudo su 输入电脑的登录密码后回车,如图: 2.查看文件 输入 ls 输入ls后可以看到有一个" .zshrc"的文件: 3.修改文件 输入 vim .zshrc #注意有空格 3.1 修改文件出错 这里因为我之前按照其他博客操作的时候没有正常保存,所以出现了提示信息: ...... ...... (1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution. (2) An edit session for this file crashed.

Apache 初学者教程

Apache 是一款了不起的应用软件。它是世界上使用最广泛的 Web 服务器应用程序,在商业 Web 服务器市场中占有超过 50% 的份额。Apache 是类 Unix 操作系统中使用最广泛的 Web 服务器应用程序,但几乎可以在所有平台上使用,例如 Windows、OS X、OS/2 等。Apache 这个词取自 Native 的名称美国部落“阿帕奇”,以其在战争和战略制定方面的技能而闻名。 它是一个模块化的、基于进程的 Web 服务器应用程序,它为每个并发连接创建一个新线程。它支持许多功能;其中许多被编译为单独的模块并扩展其核心功能,并且可以提供从服务器端编程语言支持到身份验证机制的一切。虚拟主机就是这样一种功能,它允许单个 Apache Web 服务器为多个不同的网站提供服务。 Apache 初学者教程 你将学到什么: 如何安装阿帕奇 有多种安装包或应用程序的方法。有以下入伍 - 这个开源 Web 应用程序的特点之一是任何人都可以根据自己的环境制作安装程序。这允许各种供应商(如 Debian、Red Hat、FreeBSD、Suse 等)考虑到其他已安装的应用程序和基本操作系统来自定义 apache 的文件位置和配置。 除了从基于供应商的安装程序安装它之外,始终可以选择从源代码构建和安装它。从源文件安装 Apache 是独立于平台的,适用于所有操作系统。 Apache Web 服务器是一个模块化应用程序,管理员可以在其中选择所需的功能并根据他/她的要求安装不同的模块。 所有模块都可以编译为动态共享对象(DSO 是一个对象文件,可以在多个应用程序执行时共享),与主 apache 文件分开存在。强烈推荐 DSO 方法,它使从服务器配置中添加/删除/更新模块的任务变得非常简单。 安装 Apache:Linux 平台 在 Red Hat 或基于 rpm 的系统上 跳过 Ad 探索更多 通过初学者教程学习 Java 编程 08:32 Linux 初学者教程:Linux 操作简介.

MAC 虚拟机配置静态IP

MAC 虚拟机配置静态IP 1、通过nat.conf查看mac本地网关和子网掩码,我本地网关为172.16.130.2,子网掩码为255.255.255.0,做好记录,后面配置需要填写 more /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf 2、通过dhcpd.conf文件,查看range区间,我本地是172.16.130.128 ~ 172.16.130.254,表示虚拟机静态ip可选范围 more /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf 3、本地DNS获取,系统偏好设置 ---> 网络 ---> 高级 ---> DNS 4、配置linux虚拟机网络配置,具体修改配置文件为/etc/sysconfig/network-scripts目录下的 ifcfg-en 开头的文件,修改主要内容如下 BOOTPROTO=static ONBOOT=yes IPADDR=172.16.130.130 // 静态ip地址,可在如上第2步range范围中任意选择 GATEWAY=172.16.130.2 // 第1步查询到的网关ip,我的是172.16.130.2 NETMASK=255.255.255.0 // 第1步查询到的子网掩码 上面第二步获取的 DNS,这里可以配置多个 DNS,比如下面在加个 DNS2 DNS1=192.168.0.1 // 第3步查询到的DNS DNS2=114.114.114.114 // 可以配置多个DNS,我这里防止部分域名解析问题加了114DNS解析 5、如果是通过克隆模式而来的虚拟机,需要一起修改虚拟机uuid [root@node01 ~]# uuidgen fa688596-b7aa-491b-b6f0-4b0cffc1079d [root@node01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 6、重启linux虚拟机网络服务 systemctl restart network 到此,虚拟机静态IP设置成功,即可通过xshell等连接工具进行连接测试 参考博客 https://www.jb51.net/article/250202.htm Mac 上 VmwareFusion配置静态 IP_因我你好久不见的博客-CSDN博客_mac vmware设置静态ip

一个useState学会React的主要思想

正经学徒,佛系记录,不搞事情 皮毛React开发者:一个useState有什么好学的,hook那么多,哪个不比useState难 自身React开发者:学的不是如何使用,而是为什么会这样 直接进入主题,对React文档案例进行分析,可以先给出点击按钮后numebr的值再看解释 import { useState } from 'react'; export default function Counter() { const [number, setNumber] = useState(0); return ( <> <h1>{number}</h1> <button onClick={() => { setNumber(number + 1); console.log(number) setNumber(number + 1); console.log(number) setNumber(number + 1); console.log(number) }}>+3</button> </> ) } 反正肯定不是3,是3还有什么好学的,理解这个问题首先要知道React的渲染机制,React为了能够更快的渲染,会挣对state的值的变化去渲染对应的组件,而不是整个页面重新渲染,并且会自动渲染全部相关嵌套的组件。 对于普通的JavaScript的变量 let number = 0; 即使是对number的值进行操作,也是不会重新渲染组件,这是因为React遵循两个基本原则 内存变量不会在每次重新渲染中保存下来改变内存变量不会触发重新渲染 因此引入了useState的hook,而上面例子useState的setNumber改变会触发重新渲染。React渲染的机制是等待整个event handler完成后才会触发渲染,它有一个队列的概念,而上面的例子就是将三个 setNumber(number + 1); 加入到Queue中后在一次性渲染,要问为什么,三次计算完成后渲染一次快,还是计算三次的同时渲染三次快呢,尤其是在如果三次计算都是操作同一个值的情况,多次渲染将会是非常浪费的一个动作。 有了这些概念,再来看例子,上面例子的解释就是useState setNumber在某个event hander中并不会改变变量number的值,numebr的值只在重新渲染后生效,即,整个onClick方法执行完才会渲染number的值,因此console.log的值全都是0,而Queue里是同时执行了三次setNumber(0 + 1);,最终的结果是 1 import { useState } from 'react'; export default function Counter() { const [number, setNumber] = useState(0); return ( <> <h1>{number}</h1> <button onClick={() => { setNumber(n => n + 1); setNumber(n => n + 1); setNumber(n => n + 1); }}>+3</button> </> ) } 这一个例子的关键点在于 n => n+1,这意味着每次setNumber的 n 都是用上一次的值,结果是3

UWB定位系统会存在定位误差吗?

UWB定位系统会存在定位误差吗?UWB定位同样会存在误差,而与其他定位技术不同,UWB定位系统与生俱来的独特优势:定位精度高、功耗低、抗干扰能力强、穿透性强等等,使UWB定位系统成为了室内定位行业最重要的一部分。 一、UWB定位系统的主要误差来源 1、时钟同步精度:TOA定位算法需要目标节点与参考节点之间的精确的时间同步,TDOA定位算法需要参考节点之间精确时钟同步,因此,非精确的时间同步将导致UWB系统的定位误差。但由于硬件的局限,完全精确的时钟同步是不可能的。 2、多径传播:TOA估计算法中,经常用匹配滤波器输出最大值的时刻或相关最大值的时刻作为估计值。由于多径的存在,使相关峰值的位置有了漂移,从而估计值与实际值之间存在很大误差。 3、非视距传播:视距传播是得到准确的信号特征测量值的必要条件,当两个点之间不存在直接传播路径时,只有信号的反射和衍生成分能够达到接收端,此时第一个到达的脉冲的时间不能代表TOA的真实值,存在非视距误差。 4、多址干扰:在多用户环境下,其他用户的信号会干扰目标信号,从而降低了估计的准确性。减小这种干扰的一种方法就是把来自不同用户的信号从时间上分开,也即对不同节点使用不同的时隙进行传输。 二、云酷科技UWB人员定位系统如何精确定位? 云酷科技UWB定位系统采用了宽带窄脉冲通讯技术(时间分辨率极高,使定位误差减小)、多源数据融合(有效提升定位系统的抗干扰能力)以及时间序列信号处理技术(在强多径复杂环境中,提取出首达路径信号),因此可以实现对定位目标的精准定位。 同时,云酷科技采用的是无线同步方法,无线同步就是各个基站通过不断与其他基站交换本队时钟信息,最终达到并且保持全局时间协调一致。无线同步方法依赖于UWB的测量时间精度,时间精度越高,两个基站之间的时间误差越小,那么它们的时间同步程度越高。无线同步方式的优势在于基站与基站之间不需要有线连接,因此部署难度较低,成本也低。

STM32常用数据类型 u8、u16、u32

个人学习笔记 不做交流 stdint.h 这里放着C语言的标准表达方式//第36行开始 typedef signed char int8_t; // 标准表达方式 signed char 被等同于 int8_t; typedef signed short int int16_t; typedef signed int int32_t;//在32位环境里,int代表4个字节32位!! typedef signed __int64 int64_t; typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; typedef unsigned __int64 uint64_t; stm32f10x.h 这个文件主要是为了兼容旧版本吧 typedef uint32_t u32;///32位 typedef uint16_t u16;///16位 typedef uint8_t u8;///8位 STM32中数据类型定义 U8 U16 32解释说明

Mybatis-Plus中getOne方法获取最新一条数据

Mybatis-Plus中getOne方法获取最新一条数据 一、代码1、Controller2、Service3、效果 一、代码 1、Controller @GetMapping("/queryNewProduct") public ProductDTO queryNewProduct(@RequestParam("type") String type) { return opProductService.queryNewProduct(type); } 2、Service @Override public ProductDTO queryNewProduct(String type) { //以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中, // 例如:query.like(StringUtils.isNotBlank(name), Entity::getName, name) // .eq(age!=null && age >= 0, Entity::getAge, age) OpProduct one = this.getOne(new LambdaQueryWrapper<OpProduct>() .eq(OpProduct::getType, type) .orderBy(true, false, OpProduct::getId) .last("limit 1") ); ProductDTO productDTO = BeanUtil.copyProperties(one, ProductDTO.class); return productDTO; } 3、效果 平平安安就是福,平平静静就是顺,平平稳稳就是赢,平平淡淡就是真,平平常常就是情,今天不平常,更显情,平安夜,愿朋友一生安康,快乐!秋风习习:秋天的风一阵一阵的吹过来。寒露说:“哈哈,我来了!”太阳说:“大家别慌,有我呢!”人们说:“虽有阳光,但还得加衣!”看来对寒露不能大意,立即送出祝福:愿你和亲友注意身体!然万物好像逝去了,但是,你瞧!那火红的枫叶在树枝上摇摆着,就像是一大群顽皮的孩子在手拉手一起跳着欢快的舞蹈呢。有些枫叶因跳舞不慎,从树枝上跌了下来,瞬间化作了一只只飞舞的蝴蝶,在空中飞来飞去。平安夜,报平安!今夜如果祥和的旋律从你的梦中流过,那么你要知道,那是我送给你我最真挚的祝福!祝你平安夜幸福,圣诞节快乐!不冷不热的天,不骄不躁的你,还有个没羞没躁的我,这一切在这秋日,都恰似刚好的完美。当人们想着如何度过一个快乐幸福的平安夜之际,我首先祝福我的父母——身体健康,每日每夜平安幸福!同时也祝福我的兄弟姐妹,出入平安,事业有成!寒气中弥漫着真情,露华里升腾起友情。在这个特别的日子,为你送上祝福,愿你平安在手好运常有。寒露快乐!

手写instanceof

instanceof可以用来检测引用类型 检测基本数据类型较麻烦,需要准确对应相应的数据类型,否则无法正确检测 instanceof可以检测某个对象是不是另一个对象的实例; 它是原理是判断left的__proto__原型链是否在right的prototype上 // 声明myInstanceof函数,接受两个参数left, right function myInstanceOf(left, right) { // 1:声明rightval变量,来得到传入的对象的原型对象 let rightVal = right.prototype // 2:声明leftval变量,来得到传入的对象的原型对象 let leftVal = left.__proto__ // 3:循环遍历左边变量的原型链,查找,如果找不到就到一直循环到父类型或祖类型 while (true) { if (leftVal === null) { return false } if (leftVal === rightVal) { return true } leftVal = leftVal.__proto__ // 获取祖类型的__proto__ } } // 测试用例: function Test() { } let test = new Test(); console.log(myInstanceOf(test, Test));//true console.log(myInstanceOf(test, 2));//false

栈和队列---

栈 栈的概念及结构 栈: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除 操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守 后进先出 LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 栈的实现(动态) 首先,这是一个线性表实现的,所以我们有两个选择:顺序表,也就是数组实现;或者链表实现。 栈的实现 —— 数组好还是链表好? 其实我们栈的插入和删除相当于尾插尾删用数组的唯一缺陷就是不够的时候要增容 用单链表就不太好了:尾插尾删要找尾如果不找尾,用尾指针记录尾结点。但是即便这样,我们也要找到前一个,所以要不就使用双链表实现。如果一定想使用单链表,把把栈顶栈底反一下,用头插,不要用尾插即可 所以用单链表也是ok的 如果用尾作栈顶,那么用双链表好 如果要用单链表实现,那么就用让头作栈顶 总和各方面的要素,使用数组(顺序表)实现是最合适的。 队列 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有 先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列:进行删除操作的一端称为 队头。只一端入数据,没必要用双向循环链表,使用单链表。 队列的应用场景 1、排队,保持绝对的公平性 2、广度优先遍历 BFS ———————————————— 版权声明:本文为CSDN博主「裙下的霸气」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:栈和队列_裙下的霸气的博客-CSDN博客————————————————

简易计算器

简易计算器设计。 输入格式: 输入两个非零整数,并在4 行中按顺序输出两个数的加、减、乘、除的计算结果。 输出格式: 要求输出格式如下,符号前后各有一个空格,具体参考输出样例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬: 整数1 + 整数2 = 和 整数1 - 整数2 = 差 整数1 * 整数2 = 积 整数1 / 整数2 = 商 输入样例: 在这里给出一组输入。例如: 1 2 输出样例: 在这里给出相应的输出。例如: 1 + 2 = 3 1 - 2 = -1 1 * 2 = 2 1 / 2 = 0.5 代码长度限制 16 KB Python (python2) 时间限制 400 ms 内存限制 64 MB Python (python3) 时间限制 400 ms 内存限制 64 MB

基础算法-双指针算法

一、双指针算法详解 1. 双指针算法介绍 双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行扫描,从而达到相应的目的。在前文所介绍的快速排序和归并排序也是双指针算法的一种。每当遇到双指针问题时,都可以先通过暴力方法尝试解决问题,然后发现其中存在的一些性质,再用双指针算法进行优化。 2. 双指针算法常见套路 双指针的初始位置。根据双指针的分类,有两种可能。双指针的移动方法。根据双指针的分类,有两种可能。遍历的结束条件。根据双指针的分类,有两种可能。 3. 双指针算法作用 朴素算法每次在第二层遍历的时候,是会从新开始( j 会回溯到初始位置),然后再遍历下去。(假设i是终点, j 是起点)双指针算法:由于具有某种单调性,每次在第二层遍历的时候,不需要回溯到初始位置(单调性),而是在满足要求的位置继续走下去或者更新掉。因此,双指针算法主要起优化的功能,例如当我们使用朴素方法即暴力枚举每一个可能的情况时,时间复杂度为 O(n*n) 。 此时,我们使用双指针算法利用就可以将 O(n*n) 优化为 O(n) 。 4. 具体应用 4.1 数组里的双指针 用暴力解法一定可解,双重循环得出结果。使用双指针的方法,可以借助一个额外变量,实现降维优化。 (1)相反方向运动 两个指针在数组的头和尾,都往中间移动,直到相遇。两个指针在数组的中间,往数组的两端移动,直到到达边界。每次循环时,我们值比较当前的两个元素,在这两个元素当中,求出对应的结果。 (2)相同方向运动 两个指针均在数组的一端,都往另一端移动,直到满足条件为止。两个指针的移动速度不同,类似于滑动窗口问题,快指针一直往前遍历,走到尾部则循环结束,慢指针视条件进行移动。每次循环时,看子区间是否满足某个条件,子区间是由双指针框起来, 输出的是子区间的变形。 4.2 双指针算法与前缀和 二者均是对子区间进行操作,因此有一定的结合可能。前缀和是需要用到子区间和时,通过借助一个数组,去存储前缀和。 4.3 链表里的双指针 以快慢指针为主,快指针一次 2 步,慢指针一次 1 步等等。典型例题:在链表当中找一个环,有环的话,快慢指针必定会相遇,若无环的话,则快指针就直接走到结尾。 5. 举例说明 关于具体算法应用大家可以看我的快速排序和归并排序,都是非常典型的双指针问题。 快速排序归并排序 二、双指针算法例题 1. 最长连续不重复子序列 题目描述 给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。 输入格式 输入共两行。 第一行包含整数 n。 第二行包含 n 个整数(均在 0∼1e5 范围内),表示整数序列。 输出格式 共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。 数据范围 1≤n≤100000 输入样例 5 1 2 2 3 5

Java高级阶段考试题库

Java高级阶段考试题库 1.Maven中A依赖B,B依赖C,那么A可以使用C中的类吗? 答案: 此时要看B依赖C时的范围(scope),如果是compile范围则A可以使用C,如果test或provided范围则A不能使用C. 2.SpringBoot中有一个类标记了@Controller注解,现在想要通过自动包扫描机制把这个类的对象加入IOC容器,那么这个类应该放在拿? 答案: 方案A:将标记了@Controller注解的类放在主启动类所在包的子包下。 方案B:在主启动类上使用@ComponentScan注解 3.Git 在向远程origin推送dev分支的代码时失败,需要解决冲突,如何操作 答案: (1)先运行 git pull orgin dev (2)发现有冲突后,修改冲突文件 (3)运行git add 文件名;git commit “注释” (4)运行git push origin dev 4.下面依赖信息对应的jar包在Maven仓库根目录下的路径是什么? <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.1</version> </dependency> 答案:Maven本地库根目录/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar 5.项目的单一架构和分布式架构有什么本质区别? 答案: 单一架构应用打包后是一个war包,在一个台Tomcat上运行。分布式架构应用打包后有很多的war包,分别在不同Tomcat上运行。 6.分布式架构有什么好处? 答案: 1.模块化、组件化程度高。项目容易开发、维护、分工。 2.高内聚、低耦合 3.既可以单独部署到Tomcat上,又可以将某一组件配置集群。所以分布式架构可以提升性能。 7.分布式和集群这两个概念有什么区别? 答案: 分布式系统在多台服务器上运行不同模块,集群在多台服务器上运行相同模块。 8.什么是方法的远程调用? 答案: 服务提供方将方法暴露在网络上,消费方通过网络调用目标方法。这个过程中底层需要消费方发送请求,接收响应。 9.在分布式架构应用中注册中心起到了什么作用? 答案: 注册中心中存储服务提供方所暴露的服务的详细信息,借助注册中心中存储的信息就能通过远程方法调用框架实现声明式调用(像调用本地方法一样调用远程方法)。 10.你如何理解负载均衡? 答案: 在负载沉重时由多台服务器分担负载。具体工作时由负载均衡服务器基于特定算法将每一个具体请求分配到具体服务器上。 11.Redis有哪些常用的数据类型? 答案: string、list、set、hash、zset 12.在Linux中如何通过命令查看指定进程信息?(比如查看mysql进程) 答案: ps -ef | grep mysql 13.Redis是单线程还是多线程?为什么能支持访问量和高并发? 答案: 单线程 1)完全基于内存,绝大部分请求为纯内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度 都是O(1) 2)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多进程导致的切换二小号CPU,不用考虑各种锁的问题,不存在加锁和放锁操作,没有因为可能出现死锁而导致的性能消耗。

【Arcgis for js api 4.22本地部署详细指南】

Arcgis for js api 4.22本地部署详细指南 目录​​​​​​​ 1.在Arcgis for js api官网下载Arcgis for js api 4.22压缩包 2.解压刚下载的Arcgis for js api 4.22压缩包 3.解压后的文件 ​4.把解压后的文件夹放到iis服务器的C:\inetpub\wwwroot目录下 ​5.进入arcgis_js_v422_api文件夹,把install.html重命名为index.html ​6.在iis上新建网站,配置如图所示: ​7.打开iis的默认文档配置,把index.html上移到第一位置 ​8.配置默认文档如图所示: ​9.重启网站,预览arcgis_js_v422_api 安装文档页面 ​10.浏览器打开arcgis_js_v422_api 安装文档页面 11.打开iis服务器HTTP响应标头配置 ​12.iis服务器HTTP响应标头配置如图所示:添加如下配置信息: 13.浏览器预览C:\inetpub\wwwroot\arcgis_js_v422_api\arcgis_js_api\javascript\4.22\init.js目录下的init.js文件,浏览器访问地址为:http://localhost:8899/arcgis_js_api/javascript/4.22/init.js​编辑14.在代码中测试刚在iis服务器上配置的Arcgis for js api​编辑 15.测试页面效果如图: 16.打开浏览器控制台查看 注意:Arcgis for js api 4.22本地部署,不用修改init.js和dojo.js中的[HOSTNAME_AND_PATH_TO_JSAPI],直接发布即可! 1.在Arcgis for js api官网下载Arcgis for js api 4.22压缩包 2.解压刚下载的Arcgis for js api 4.22压缩包 3.解压后的文件 4.把解压后的文件夹放到iis服务器的C:\inetpub\wwwroot目录下 5.进入arcgis_js_v422_api文件夹,把install.html重命名为index.html 6.在iis上新建网站,配置如图所示: 7.打开iis的默认文档配置,把index.html上移到第一位置 8.配置默认文档如图所示: 9.重启网站,预览arcgis_js_v422_api 安装文档页面 10.浏览器打开arcgis_js_v422_api 安装文档页面 11.打开iis服务器HTTP响应标头配置 12.iis服务器HTTP响应标头配置如图所示: 添加如下配置信息: 1.Access-Control-Allow-Methods : GET,POST,PUT,DELETE,HEAD,OPTIONS

Java下载文件的四种方式详细代码

第一种:以流的方式下载 public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 取得文件的后缀名。 String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase(); // 以流的形式下载文件。 InputStream fis = new BufferedInputStream(new FileInputStream(path)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes())); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException ex) { ex.

怎么可以在电脑上录屏

不管是在学校还是在职场的小伙伴应该都接触过使用录屏吧?当需要做一些操作演示分享或者游戏高光时刻或者一些线上会议基本都会需要录屏。不管是后面用来剪辑发布还是分享给别人学习都需要先进行录屏才可以,那么有些小伙伴们就不太熟悉该怎么来操作,那么怎么可以在电脑上录屏呢?今天就分享两个好用的录屏方法。 方法一:使用聊天工具录屏 提到截图肯定小伙伴都使用过QQ自带的截屏功能,简单又好用功能还丰富,但是很多小伙伴未必知道QQ其实还有录屏的功能。QQ录屏操作步骤是Ctrl键+Alt键+S键。在登录QQ的状态下点击这个快捷操作就能拉起QQ截图的功能了,我们可以选中需要录制的范围,接着点击工作框中的录制即可开始录屏。 方法二:使用录屏工具录屏 ①.今天就分享一款比较好用的录屏工具,打开这款录屏工具进入界面后,在左侧先选择需要【全屏录制】还是【区域录制】,如果需要录制区域的话在点击后可以自由拉取录屏的范围。 ②.设置好录屏的范围后,点击【设置】按钮,在【录制】处选择是否需要录制时隐藏录屏操作界面以及是否需要录制鼠标按键的轨迹,设置完成后点击右下角的【确定】按钮。 ③.设置好录制属性后,回到录制操作页面,设置是否需要开启摄像头以及录制声音的选择,完成之后点击圆形录制按钮或者点击小状态栏中的【开始录制】就可以了。 以上内容就是对怎么可以在电脑上录屏的两种方法分享,小伙伴们不管是在打游戏或者会议以及其他需要进行录屏操作的时候都可以尝试一下这些方法哦。

使用EasyExcel完成导出导入功能

前言 最近的项目中模块需要用到Excel的导入,在同事的建议下选择了EasyExcel。看了一下EasyExcel的介绍,其是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。那废话不多说,直接上手试试,用代码试试EasyExcel是否真的那么好用。 一.主要实现步骤 1.@ExcelProperty注解 我们需要导入的类的字段需要用到注解@ExcelProperty("列名"),这里特别注意的是一定得跟对应的导入模板里的表头保持一致,不然导入的时候匹配不上。 //导出导入类使用注解 @ExcelProperty("表头对应的中文列名") private String data; 复制代码 2.导入模板 public void exportTemplate(HttpServletResponse response, HttpServletRequest request) throws UnsupportedEncodingException { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String fileName="数据模板"; fileName = URLEncoder.encode(fileName, "UTF-8"); fileName = new String(fileName.getBytes("utf-8"),"ISO-8859-1"); String filePath = new ClassPathResource("docs/other/".concat(fileName).concat(dateFormat.format(new Date())).concat(".xlsx")).getPath(); //导出模板表头 List<String> headers = Arrays.asList("列名"); List list = new ArrayList(); PoiUtil.exportTemplateData(filePath,headers,list); //获取文件流返回给客户端 DownloadFileUtil.downloadFile(response, request, filePath); } 复制代码 //构造模板基础数据,比如下拉列表及其校验规则 public static void exportTemplateData(String filePath, List<String> headers, List list) { //证件类型 下拉 List<String> certificationTypeAttributeList = new ArrayList<String>(); certificationTypeAttributeList.

几种常见的长连接实现方案

一、什么是长连接? 长连接可以指 HTTP 持久连接 (persistent connection),也可以指基于 TCP / UDP / QUIC / WebSocket 等一个或多个协议建立后可以持续收发消息的数据通路。本文主要介绍的是后者,其中以微信2017年初开源的 Mars 被大家熟知。从 Mars 的 issue 中我们可以看到 Longlink 这个国内长连接的直译,目前还没有特别好的英文术语。实际上 Mars 只是长链接架构中的客户端,还需要一个服务端来配合。 二、国内长连接现状 目前国内的大厂基本上都有自己的网关团队,长连接服务是网关中的子服务,客户端团队负责端上的网络库(如 Mars),网关相关的公开资料可以查询到的如阿里的 ACCS ,美团的 Shark 等 提供了诸如 消息推送,消息广播,多协议切换,HTTP代理,多接入点容灾等功能。可覆盖 即时通讯,弹幕,互动游戏,竞拍等多个业务。 三、长连接解决的问题 总的来说主要解决的数据实效性的问题: 1、数据推送 最常见的案例就是消息通知。 最简单的做法是启动一个计时器,周期性轮询(polling )一个接口。这种方案常见于早期基于浏览器的项目。坏处是间隔设置的太长用户体验不好,设置间隔太短后端服务会进行大量的无效查询。 稍好一点的做法是使用长轮询(long polling),发送 HTTP 请求后,如果没有新数据,服务端就一直不返回 HTTP 的 response。这种方式减少了大量无效的查询,但是如果新数据频繁,会进行大量的连接建立和关闭。常见于早期浏览器 WebSocket 协议支持不完整的时候。 目前主流的方案是浏览器基于 WebSocket,移动端基于 TCP / UDP/ QUIC 的全双工数据通道的方案。一次连接建立,服务端维护连接和业务的对应关系(如用户id),当用户有新数据时,找到对应的连接,将数据发送出去,浏览器或者移动端就可以立刻收到消息,返回给上层。 可以推测手机厂商给 APP 提供的离线消息推送的通道,如果想做到最好的实时性,也需要维护一个手机和厂商服务的连接,在 APP 后端发送推送后,厂商转发给手机,展示给用户。 2、请求优化 大多数业务的API请求还是基于 HTTP(S) 的,在大多数情况下,国内网络质量良好。少部分的网络优化场景可以代理 HTTP(S) 的请求将会是更具有性价比的方案。 常见的方案是移动端的网络库代码中,添加一个拦截逻辑,把请求的参数重新封装成底层报文,通过全双工的数据通路发送给网关,网关组装成 HTTP 的请求,在内网发送给对应的业务服务器,再把返回封装后发送给对应的数据通道。

Word处理控件Aspose.Words功能演示:使用 Java 将文本转换为 PDF

TXT格式的文本文档包含行形式的纯文本。TXT 文件是存储没有任何格式的纯文本的最简单和最简单的方法。我们可以在任何文本编辑器或文字处理应用程序中轻松创建、打开和编辑 TXT 文件。在某些情况下,我们可能需要将文本转换为只读格式,例如PDF。在本文中,我们将学习如何使用 Java 以编程方式将文本转换为 PDF。 Aspose.Words for . java 最新下载(qun:761297826)https://www.evget.com/product/564/download 文本到 PDF 转换器 - Java API 为了将文本转换为 PDF,我们将使用Aspose.Words for Java API。它允许创建和操作 MS Word 文档。此外,它还允许您将 MS Word 和文本文档转换为各种其他文件格式。 API的Document类表示以定义格式加载的文档。它是包含文档所有其他节点的树的根节点。该类的 save() 方法以指定的文件格式保存文档。API的TxtLoadOptions类允许在将文本文档加载到 Document 对象时指定其他选项。 请下载API 的 JAR 或在基于 Maven 的 Java 应用程序中添加以下 pom.xml 配置。 <repository> <id>AsposeJavaAPI</id> <name>Aspose Java API</name> <url>https://repository.aspose.com/repo/</url> </repository> <dependency> <groupId>com.aspose</groupId> <artifactId>aspose-words</artifactId> <version>22.5</version> <type>pom</type> </dependency> 在 Java 中将文本转换为 PDF 我们可以按照以下步骤将任何文本文档转换为 PDF 文件: 使用Document类加载文本文件。使用Document.save()方法另存为 PDF 。它将输出文件路径作为参数。 在 Java 中修剪空格并将文本转换为 PDF

二、Notepad++ 配置C\C++运行

1. 更改中文 【seeting】-> 【apparence】-> 【简体中文】 1.安装插件“NppExec” 1))【插件】——>【plugin manager】——>【show plugin manager】 如下图所示: 2))【NppExec】——>【install】 3 下载编译和运行软件gcc和g++,免安装MinGW, 64bit 免安装下载 MinGW-w64官方网站首页: https://www.mingw-w64.org/ 百度网盘下载链接 参考:https://blog.csdn.net/XQC_KKK/article/details/124611111 环境配置 参考: https://www2.jianshu.com/p/9617c942f9d7 https://blog.csdn.net/Javin_L/article/details/83928072 运行命令: cmd /k gcc "$(FULL_CURRENT_PATH)" -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" &PAUSE &"$(CURRENT_DIRECTORY)\$(NAME_PART).exe" & PAUSE & EXIT

matlab常用代码(读取文件、批量导入数据、与或非)

学习matlab使用过程中遇到的各种常见小操作,放在这里权当记录,持续更新中。包括批量导入数据、读取/写入不同类型的文件、与或非、cell、randperm的使用等 一、常见函数或小技巧 1. 记录程序运行时间: 函数tic、toc。 tic放在要记录时间的程序的开头,toc放在末尾 2. 常见函数 1) mean用法: 默认是对每一列求平均值,mean(x,2)是对每一行求平均值。很多函数都是同理,size(x,1)就是求矩阵x的行数,size(x,2)就是求列数;在一个数据文件中,提取矩阵第一列是 x(:,1),提取第一行x(1,:); sum(x,1) 将矩阵按列求和,sum(x,2) 按行求和 2) ceil:朝正无穷大四舍五入 round(x) :将 x 的每个元素四舍五入为最近的整数。 >> ceil(2.5) ans = 3 3) flipud:实现矩阵的上下翻转 如果 A 是一个列向量,则 flipud(A) 返回一个相同长度的向量,其元素的顺序颠倒。如果 A 是一个行向量,则 flipud(A) 只返回 A。 >> A=(1:3)' >> B = flipud(A) B = 3 2 1 fliplr 沿垂轴翻转矩阵 transpose 沿主对角线翻转矩阵 4) horcat 和vercat horcat(A,B) % 水平串联数组,即X=[A,B],等同于cat(1,A,B) vercat(A,B) % 垂直聚合数组, 即X=[A;B],等同于cat(2,A,B) 5) qr 矩阵正交分解 6) snapnow 拍摄最近生成的图像或绘图的快照,以包括在发布文件中。快照显示在包含 snapnow 命令的代码节的末尾。

万万没想到,除了香农计划,Python3.11竟还有这么多性能提升!

众所周知,Python 3.11 版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的“香农计划”外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟! 作者:Beshr Kayali 译者:豌豆花下猫@Python猫 英文:https://log.beshr.com/python-311-speedup-part-1 转载请保留作者及译者信息! Python 3.11 在几天前发布了,它照例带来了很多新特性,例如异常组、细粒度的错误位置与堆栈回溯、标准库对 TOML 的解析支持,当然,还有备受大家期待的由 faster CPython 项目带来的速度提升。 根据 pyperformance 的基准测试,CPython 3.11 比 CPython 3.10 平均快 25%。这项改进的原因之一是 Guido 命名的“香农计划”(即 faster CPython)。对于 3.11 版本,这个计划在两个主要方向进行了大量优化:启动时和运行时。 除此之外,Python 3.11 还包含有其它的优化,这些优化不属于香农计划。 在本文中,我将详细介绍 3.11.0 稳定版中常规优化的细节(即非 faster CPython 项目的改进)。 (译注:作者表示将另写一篇文章介绍 faster CPython 的改进细节,届时,我也将继续翻译,敬请期待!) 目录 优化了一些 printf 风格 % 的格式化代码优化了 Python 大整数的除法优化了数字 PyLongs 求和精简列表的扩容操作,提升了 list.append 性能减少了全 unicode 键的字典的内存占用提升了使用asyncio.DatagramProtocol 传输大文件的速度对于 math 库:优化了 comb(n, k) 与 perm(n, k=None)对于 statistics 库:优化了 mean(data)、variance(data, xbar=None) 与 stdev(data, xbar=None)纯 ASCII 字符串的 unicodedata.

vi 查找关键字

vi打开一个文件后命令模式下敲斜杆( / ),这时在状态栏(也就是屏幕左下脚)就出现了 “/”然后输入你要查找的关键字敲回车就可以了。如果你要继续查找此关键字,敲字符 n 就可以继续查找了。敲字符N(大写N)就会向前查询; PS: 命令行下 冒号(:)加数字就会跳到number 行

JPA 使用过程中问题汇总(持续更新...)

文章目录 有事务时,JPA save方法无法捕获异常JPA引起cpu过高,转换成entity时太慢,使用原生JDBC查询JPA将已持久化的对象在开启事务时调用set方法重新设置某些属性字段值时,库里数据会发生改变使用jpa自动生成表jpa.generate-ddl和jpa.hibernate.ddl-autoJPA save数据时,如果数据没有赋值,即使数据库层面设置了default值,但仍然会插入nullJPA的save和saveAndFlush可以返回存储的实例,以获得存入数据的主键Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1javax.persistence.TransactionRequiredException: Executing an update/delete queryJPA修改属性后再查询未生效问题JPA使用find自定义方法时,只能查出entity,不能查指定字段 有事务时,JPA save方法无法捕获异常 问题: 在类上有事务注解,在该类中,有一个方法中调用JPA save方法,但因为各种原因save应该报错,此时想捕获该异常,并不进行回滚和向上层抛出异常,但发现异常无法被捕获 情景再现: entity实体类如下: @Entity @Data @AllArgsConstructor @NoArgsConstructor @Builder @Table(name = "employee", uniqueConstraints = {@UniqueConstraint(columnNames={"department_id","company_id"})}) public class Employee { @Id @Column(name = "id", columnDefinition = "varchar(64)") @GenericGenerator(name="idGenerator", strategy="uuid") @GeneratedValue(generator = "idGenerator") private String id; @Column(name = "name", columnDefinition = "varchar(128) default null") private String name; @Column(name = "

Free.Spire.Office 发布bug解决

Free.Spire.Office 发布bug解决 在 Program.cs 文件Main 方法 添加 重新加载dll 文件地址xls,word 转换方法 官网很详细,这里附上两个简单的 本地使用 nuget 下包 本地测试 word 转 pdf .doc 转 pdf 没有问题,发布到IIS 上测试程序报错 “无法找到 Spire.Xls.dll …” ,解决 在 Program.cs 文件Main 方法 添加 重新加载dll 文件地址 // An highlighted block public static void Main(string[] args) { #region 加载spire.office.dll 文件(服务器必须重新加载一遍,不然dll文件无法访问) Assembly entry = Assembly.GetEntryAssembly(); string dir = Path.GetDirectoryName(entry.Location);//获取网站根目录,我把dll文件放在了根目录 var filePath = Path.Combine(dir, "Spire.Presentation.dll"); AssemblyLoadContext.Default.LoadFromAssemblyPath(filePath); var filePath2 = Path.Combine(dir, "Spire.Pdf.dll"); AssemblyLoadContext.Default.LoadFromAssemblyPath(filePath2); var filePath3 = Path.

CCF推荐+SCI二区期刊征收AI方向特刊|确定3个月出录用结果

点击文末卡片, 关注“计算机会议投稿”公众号 期刊名:NEUROCOMPUTING 中科院SCI分区:2区 CCF等级:人工智能目录下C类 官网: http://www.elsevier.com/wps/find/journaldescription.cws_home/505628/description Neurocomputing目前正在面向Vision Transformers and Graph-based Models for Human Activity Understanding特刊进行征稿,感兴趣的朋友可以关注一下。 (特刊也是正刊,只是某个主题的专辑,不影响SCI检索!) 该特刊截稿日期为2022年12月14日,录用通知日期为2023年3月1日。 For a wide array of computer vision tasks, such as image recognition, object detection, segmentation and image captioning, Vision Transformers and graph models have achieved excellent performance. This special issue seeks original contributions to advance the theory and algorithmic design of vision transformers and graph models for human activity understanding. In this special issue, we aim to present state-of-the-art vision transforms and graph models based human activity understanding techniques that are developed to solve problems related to (and not restricted to) activity modelling, action/activity recognition, prediction, etc.

数据分析之路的尽头是创业?

一年多没有更新csdn了,一转眼2022年即将接近尾声。 关注我的很多小伙伴很好奇,这一年博主都去干了些啥?是否还在数据之路继续前行?是卷的飞起,卷出新境界了?还是早已被岁月磨平,随波逐流? 对博主来说这一年多的每一天都很平凡,有时候日子也会很煎熬;这一年又是酝酿美好的一年,是收获的一年;这一年是人生中的一个转折点,是结束,亦是开始。 博主想做一个好的品牌,想为客户创造价值这个种子真是由来已久了。计算机专业出身的我,回想整个大学四年课程,唯一留下深刻印象的依旧是那门选修课——《客户关系管理》。这门课讲了个什么事呢,总结一下就4个字:“跪舔客户”。哈哈哈,没错儿这就是我想要做的。这么多年过去了,初心未改。 时间过的真快,掐指一算,已经从学校里出来有7个年头儿了。这7年里做了半年的管培生,接着自学转行,继而是4年数据分析师的工作,近2半的时间主要做管理。这一路走来,无论是基层技术工,还是基层管理,我一直以主人翁的心态在做数据,做业务。对数据价值化、数据驱动业务增长的理解一天天加深,让我对做业务有了更强烈的“冲动”。终于,博主还是迈出了这一步。 创业。 有小伙伴知道我这个搞技术的人去创业,第一反应就问我,“难道数据分析之路的尽头,就是创业吗”? 有多大能量,做多大点事。我们都只能在自己的能量范围内做一些力所能及的事,我相信未来的每一天,我必然还在数据之路上,践行数据价值化、数据驱动业务增长的大道。 我想说,我只是遵从了我自己的内心,去做自己想要做的事。 每个人都应该这样,静下心来,与自己的灵魂对话。遵从更好的自己,绽放每个生命的奇迹,这个世界,将会因为有我们一个个精彩的生命,变的更加美好。