【git忽略提交指定文件】

在工作中,我们的package.json里的依赖版本可能和同事的不一致,为避免产生一些冲突,我们提交代码的时候,可以选择不提交package.json文件。以下分为两种情况对文件进行忽略提交: 一、未提交过的文件 从未提交过的文件,可以在.gitignore文件内添加想要忽略的文件。 # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules/ /.pnp .pnp.js # testing /coverage # production /build /deploy 二、已被推送过的文件 已经推送(push)过的文件,在.gitignore文件内添加是无效的。可以使用以下命令进行强制忽略。 git update-index --assume-unchanged 文件路径 取消强制忽略: git update-index --no-assume-unchanged 文件路径

MySql 关联查询时 on条件过滤和where条件过滤的区别

在学习mysql的连接查询时容易忽略的细节,当左连接时就以左表为主,有连接就以由表为主,但是过滤条件为on和where时时常被我们忽略。 首先建两张表并导入数据: -- ---------------------------- -- Table structure for sys_dept -- ---------------------------- DROP TABLE IF EXISTS `sys_dept`; CREATE TABLE `sys_dept` ( `dept_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id,自增', `dept_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门名称', PRIMARY KEY (`dept_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_dept -- ---------------------------- INSERT INTO `sys_dept` VALUES (1, '研发部'); INSERT INTO `sys_dept` VALUES (2, '测试部'); INSERT INTO `sys_dept` VALUES (3, '财务部'); INSERT INTO `sys_dept` VALUES (4, '人事部'); -- ---------------------------- -- Table structure for sys_user -- ---------------------------- DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id,自增', `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名', `dept_id` int(11) NULL DEFAULT NULL COMMENT '部门id', `is_disable` int(11) NULL DEFAULT NULL COMMENT '是否禁用:1-启用,0-禁用', PRIMARY KEY (`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_user -- ---------------------------- INSERT INTO `sys_user` VALUES (1, '张三', 1, 0); INSERT INTO `sys_user` VALUES (2, '李四', 4, 1); INSERT INTO `sys_user` VALUES (3, '王五', 1, 1); INSERT INTO `sys_user` VALUES (4, '赵六', 3, 1); INSERT INTO `sys_user` VALUES (5, '田七', 2, 1); INSERT INTO `sys_user` VALUES (6, '刘八', 4, 0); SET FOREIGN_KEY_CHECKS = 1; 一共两张表,用户表和部门表,用户表中的dept_id和部门表的dept_id关联,下面的对两表进行关联查询,查出用户名和用户对应的部门名称,分别采用 where 和 on 进行条件过滤。

Anaconda3 下载安装及不同python环境配置(Linux/Windows)

Anaconda3 下载安装及不同python环境配置(Linux/Windows) 一、Anaconda3安装WindowsLinux(以ubuntu18.04为例) 二、配置虚拟环境 一、Anaconda3安装 Windows 1、下载 直接在官网下载即可:https://www.anaconda.com/download/ 2、正常安装,路径最好不要出现中文、空格,下图选择All Users,path可以直接勾选,也可自行配置,一般勾选上即可 3、安装完后输入conda --version显示版本号即为安装成功 Linux(以ubuntu18.04为例) 1、下载安装包 除上述官网下载外还可以从清华镜像下载(速度更快) 下载地址 2、安装 将安装包放在自己想要安装的目录下,打开终端运行如下命令 # 中间版本号根据自己的下载进行替换 bash Anaconda3-2022.5-Linux-x86_64.sh 3、一路回车直到要输入yes,输入后再回车选择安装位置(自己手动输入,默认在/home/xxx/anaconda3) 3、安装完后重新打开一个新的终端,输入conda --version显示版本号即为安装成功 二、配置虚拟环境 Anaconda自带有一个默认的python环境,也可自行配制不同版本或者不同位数(32位或64位)的python环境,不需要额外在安装python,下面进行详细介绍 1、为加快下载速度,切换为清华镜像 ①TUNA 提供了 Anaconda 仓库与第三方源(conda-forge、msys2、pytorch等,查看完整列表)的镜像,各系统都可以通过修改用户目录下的 .condarc 文件。Windows 用户无法直接创建名为 .condarc 的文件,可先执行 conda config --set show_channel_urls yes 生成该文件之后再修改。linux执行sudo gedit ./.condarc命令 注:由于更新过快难以同步,我们不同步pytorch-nightly,ignite-nightly,pytorch-nightly-cpu这三个包。用下面代码替换.condarc文件中的内容 channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: https://mirrors.

Ubuntu使用mdadm工具创建RAID 0

目录 Ubuntu使用mdadm工具创建RAID 01. RAID 0 简介2. Ubuntu下mdadm工具安装3. 创建Raid1)查看系统磁盘2)创建RAID3)查看创建结果4)格式化RAID5)挂载RAID6)开机自动挂载RAID 4. 保存RAID信息到配置文件4. 磁盘损坏替换5. 数据恢复6. Raid磁盘迁移(从旧主机迁移到新主机)7. 删除Raid Ubuntu使用mdadm工具创建RAID 0 1. RAID 0 简介 创建RAID 0 至少需要两块以上的硬盘,它将两块以上的硬盘合并成一块,数据连续地分割在每块盘上。 因为带宽加倍,所以读/写速度加倍, 但RAID 0在提高性能的同时,并没有提供数据保护功能,只要任何一块硬盘损坏就会丢失所有数据。因此RAID 0 不可应用于需要数据高可用性的关键领域,只适用于需要提高磁盘读写性能的领域。 2. Ubuntu下mdadm工具安装 Linux下创建软RAID需要依赖工具mdadm,部分Ubuntu发行版系统默认没有自带mdadm工具,需要自行安装。 安装命令如下: sudo apt install mdadm 3. 创建Raid 1)查看系统磁盘 创建前可以通过如下命令查看可用的磁盘: sudo lsblk 运行结果(下面结果中的sdb和sdc两个磁盘是我们准备创建RAID 0的两块盘): NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 59.

python语言属于哪一种语言,python语言特点是什么

python语言是什么? Python是一种计算机程序设计语言,你可能已经听说过很多流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript等,Python就是其中之一。 相对于其他编程语言,Python具有自己独特的优势,它可以用极少的代码完成任务。 比如完成同一个任务,C语言要写1000行代码,Java需要100行,而Python可能只需要20行,所以说Python是一门非常高级的编程语言。 谷歌人工智能写作项目:小发猫 什么是Python编程语言 优点:Python是一种代表简单主义思想的语言,阅读一个良好的Python程序就感觉像是在读英语一样,使你能够专注于解决问题而不是去搞明白语言本身;Python底层是用C语言编写的,很多标准库和第三方库也都是用C写的,运行速度非常快;IPython Notebook使我们更容易使用Python进行数据工作,可以轻松地与同时共享Notebook,无需他们安装任何东西,大大减少组织代码,输出和注释文件的开销;Python是一种通用语言,容易和直观,在学习上会比较容易,可以加快你写一个程序的快速,此外Python测试框架是一个内置的,可以保证你的代码是可重复使用和可靠的;Python还是一个多用途语言,把不同背景的人结合在一起,作为一种常见的、容易理解,大部分程序员都懂,可以很容易地和统计学家沟通,你可以使用一个简单的工具就把你每一个工作伙伴整合起来学python需要什么基础知识。 由于它的开源本质,Python已经被移植在许多平台上,比如说:Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS等。 很多时候不能将程序连写成一行,如import sys;for i in :print i,而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件;Python语法独特,也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱;Python对比C、C++语言运行速度要慢一些。 python属于什么语言? python属于解释型语言。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。具有解释型语言的本质。 在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。 Python特点Python标准库很庞大。 它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。 这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。 python语言属于什么语言 Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 Python还是一门解释型的编程语言,Python也是面向对象的编程语言。对比其他编程语言来说,Python入门要简单很多,更接近自然语言和正常思维方法,可以直接应用到工作中。 同时当我们学习Python的时候非常容易上手,要比其他语言简单很多,几乎可以说是无所不能。 Python语言风格简介:Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。对于一个特定的问题,只要有一种最好的方法来解决就好。 这在由Tim Peters写的Python格言里面表述为:There should be one-- and preferably only one --obvious way to do it. 这正好和Perl语言的中心思想TMTOWTDI完全相反。 Python的作者有意的设计限制性很强的语法,使得不好的编程习惯都不能通过编译。其中很重要的一项就是Python的缩进规则。 python是什么语言 python的中文名称是蟒蛇。Python是一种计算机程序设计语言。 是一种动态的、面向对象的脚本语言,最初是用来编写自动化脚本的,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 Python特点主要有以下几个方面:1、简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。 2、易学:Python极其容易上手,因为Python有极其简单的说明文档。3、速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。 4、免费、开源:Python是FLOSS之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。 5、高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。6、可移植性:由于它的开源本质,Python已经被移植在许多平台上。 这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、以及Google等基于linux开发的android平台。 7、解释性:一个用编译性语言比如C或C++写的程序可以从源文件转换到一个你的计算机使用的语言。这个过程通过编译器和不同的标记、选项完成。 扩展资料:Python语言风格简介:Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。 对于一个特定的问题,只要有一种最好的方法来解决就好。 这在由Tim Peters写的Python格言里面表述为:There should be one-- and preferably only one --obvious way to do it.

C语言之开发工具:Visual Studio 2022安装教程

一,C 语言 C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。UNIX 操作系统,C编译器,和几乎所有的 UNIX 应用程序都是用 C 语言编写的。由于各种原因,C 语言现在已经成为一种广泛使用的专业语言。 二,软件介绍: 现在学习C语言编程软件有以下几种: 1.VC++ 6.0 是比较古老的C语言学习工具。现在的大学计算机二级等级考试依然用的是这个软件,它支持是编译标准是C98。 2.Code:Blocks 它是一个开放源码的全功能的跨平台C/C++集成开发环境,具有灵活而强大的配置功能,除支持自身的工程文件、C/C++文件外,还支持AngelScript、批处理、CSS文件、D语言文件、Diff/Patch文件、Fortan77文件等等。 3.Dev-C++ 它是一个Windows环境下C/C++的集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码。使用MingW64/TDM-GCC编译器,遵循C++ 11标准,同时兼容C++98标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,适合初学者与编程高手的不同需求 4.Visual Studio 是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。Visual Studio是目前最流行的Windows平台应用程序的集成开发环境。 5.C-Free 它是一款C/C++集成开发环境(IDE)。C-Free中集成了C/C++代码解析器,能够实时解析代码,并且在编写的过程中给出智能的提示。C-Free提供了对目前业界主流C/C++编译器的支持,完善的工程/工程组管理使你能够方便的管理自己的代码。简单灵活,具有良好的系统兼容性,不用担心在你的系统里面安装不了,同时它的提示功能也不错。 我自己学习C语言是使用Microsoft Visual Studio。 Microsoft Visual Studio(简称VS)是开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台。 三,软件安装 1.官网链接:https://soft.qmshengekj.cn/visual/index.html?source=360x&unitid=2733696884&unit=visual&e_creative=11995673794 需要注意的是,VS官网提供了三种版本,但是除了Community 2022(社区版)免费,其余两个版本不是免费的,对于我们学习C语言来说,只用到社区版就可以了。 1,选中安装包,以管理员身份运行 2,点击继续 3,等待下载 VS Installer 4,主安装界面,选择自己想要选择的选项,如果只是学习C语言的话,只需要勾选[使用C++的桌面开发],我这里选择两个选项。 安装位置默认不变(注意,如果自己的C盘控制不足,建议安装在其他磁盘) 5,点击 安装(由于安装包太大,建议网速好的地方下载)开始漫长等待

Quartus Prime以及Questa-Intel FPGA Edition的配置教程(Windows)

学习逻辑代数用到了Quartus II的9.0,软件比较旧,安装在xp虚拟机里。由于屏幕字体偏小,而且无法调节DPI,然后尝试在主机安装新版的Quartus Prime Lite Edition。 本人是新手,如有错误请指出,本文主要使用Quartus (Quartus Prime 21.1) Lite Edition,每个版本都会有所不同 一、安装Quartus Prime 1.三种Quartus Prime的区别和选择 Quartus Prime的区别 可以看到除了精简版都要收费所以选择精简版(Lite Edition),所以以Quartus Prime Lite Edition为例。 2.下载Quartus Prime Lite Edition 点击下载Windows版,或点击链接进入下载 ① 点击左边的Intel® Quartus® Prime Design Software ② 点击下方的Intel® Quartus® Prime Lite Edition ③ 点击Intel® Quartus® Prime Lite Edition Design Software Version 21.1.1 for Windows ④ 进入如图所示的页面 ⑤ 选择下载内容 Multiple Download: Individual Files: 各种东西所需的储存空间 可以看到,主要有Multiple Download和Individual Files两种方式。前者可以理解为下载所有文件(包含了Individual Files的所有东西,懒得选择的可以选这个),后者为单文件的方式下载,可以选择下载哪些器件(Devices)。 我的建议是选择Multiple Download,之后安装Questa-Intel FPGA Edition会更方便,而且安装时也可以选择安装哪些器件。当然,如果电脑的储存空间不是特别多,也可以选择Individual Files。

Mysql 列传行

数据库user表数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('kkl', 'name', 'kkl'); INSERT INTO `user` VALUES ('hsl', 'age', '12'); INSERT INTO `user` VALUES ('hsl', 'sex', 'boy'); INSERT INTO `user` VALUES ('hsl', 'name', 'hsl'); INSERT INTO `user` VALUES ('kkl', 'age', '27'); INSERT INTO `user` VALUES ('kkl', 'sex', 'boy'); SET FOREIGN_KEY_CHECKS = 1; 执行的SQL -- SELECT username,group_concat(`key`) AS `keys`,group_concat(`value`) AS `values` FROM `user` GROUP BY username -- SELECT DISTINCT `key` FROM `user` -- SELECT DISTINCT -- username, -- ( CASE WHEN `key` = "

Spring IOC 后置处理器

#博学谷IT学习技术支持# 文章目录 简介postProcessBeanFactory方法invokeBeanFactoryPostProcessors方法PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors registerBeanPostProcessors 简介 之前的章节,看了AbstractApplicationContext的refresh()中的beanDefinitions创建过程和beanFactory的准备工作。这一章节,我们一起来看下一些后置处理器。 后置处理器大家应该都听说过,Spring框架中,很多的自定义扩展都是使用后置处理器来实现的。 首先来看下后置处理有哪些: 重要分为两大类: 1.BeanFactoryPostProcessor:与BeanFactory相关的后置处理器。这个接口只有一个方法postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory),会传入beanFactory,可以针对于beanFactory做一些操作。下面会有BeanDefinitionRegistryPostProcessor,就是继承了BeanFactoryPostProcessor 2.BeanPostProcessor:与Bean相关的后置处理器。该接口有两个方法postProcessBeforeInitialization(Object bean, String beanName)和postProcessAfterInitialization(Object bean, String beanName)。 postProcessBeforeInitialization方法在创建Bean之前执行,postProcessAfterInitialization会在Bean创建后执行。实现这个接口的后置处理器,主要针对于Bean去做一些处理拓展工作。 postProcessBeanFactory方法 该方法在AbstractApplicationContext类型是空实现,交给子类来进行重写。该方法也是用于自定义处理BeanFactory的。 invokeBeanFactoryPostProcessors方法 调用BeanFactoryPostProcessor。看下代码 protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { // 调用BeanFactoryPostProcessor PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors()); // 以下代码主要是判断是否需要加载时织入,需要的话添加LoadTimeWeaverAwareProcessor后置处理器和临时类加载器,这块代码暂时不做介绍。有兴趣的可以去查找下资料 if (!NativeDetector.inNativeImage() && beanFactory.getTempClassLoader() == null && beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) { beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory)); beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader())); } } PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors 方法内部看着代码比较多,但是逻辑性对比较单一,还是比较好理解的 public static void invokeBeanFactoryPostProcessors( ConfigurableListableBeanFactory beanFactory, List<BeanFactoryPostProcessor> beanFactoryPostProcessors) { Set<String> processedBeans = new HashSet<>(); // 判断beanFactory是否为 BeanDefinitionRegistry子类 if (beanFactory instanceof BeanDefinitionRegistry) { // 强转为BeanDefinitionRegistry BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory; List<BeanFactoryPostProcessor> regularPostProcessors = new ArrayList<>(); List<BeanDefinitionRegistryPostProcessor> registryProcessors = new ArrayList<>(); // 遍历传递过来的beanFactoryPostProcessors for (BeanFactoryPostProcessor postProcessor : beanFactoryPostProcessors) { // 如果postProcessor是否BeanDefinitionRegistryPostProcessor接口子类的话 if (postProcessor instanceof BeanDefinitionRegistryPostProcessor) { // 强转为BeanDefinitionRegistryPostProcessor BeanDefinitionRegistryPostProcessor registryProcessor = (BeanDefinitionRegistryPostProcessor) postProcessor; // 调用 BeanDefinitionRegistryPostProcessor 后置处理器的postProcessBeanDefinitionRegistry方法 registryProcessor.

Cesium 车辆跟踪事件气泡弹窗追随

展示图: 功能思路: (1)设置创建时钟组件JulianDate,该时间组件很重要,不仅是用来追踪路线使用,还要监听每个时间点到达的坐标位置。 (2)气泡的实时根据坐标刷新,上一篇有说到,根据当前时间返回当前坐标值。 (3)鼠标左键监听事件换成了时钟帧数调用监听事件viewer.clock.onTick.addEventListener,根据路线图的每次的时间刻度调用实现气泡追踪。 部分代码: 创建path路线图 //路线参数 处理 var positionData = paramObj.data.Coordinates; Intervals = 0; //间隔时间 for (var i = 0; i < positionData.length; i++) { var time = Cesium.JulianDate.addSeconds(starttime, Intervals, new Cesium.JulianDate()); var data = positionData[i]; var position = Cesium.Cartesian3.fromDegrees(data.x, data.y, 20); property.addSample(time, position); Intervals += paramObj.setTime.multiplier; } var stoptime = Cesium.JulianDate.addSeconds(starttime, Intervals, new Cesium.JulianDate()); //总停止秒数 //时钟 设置 viewer.clock.startTime = starttime.clone(); viewer.clock.stopTime = stoptime.clone(); viewer.clock.currentTime = starttime.clone(); viewer.

SpringBoot 配置多数据源并支持事务及其原理

在项目中,有时会遇到使用多个数据源的情况,并且需要支持事务。解决方式可以有以下几种: 对每个数据源手动配置orm框架(mybatis、jpa等)及事务管理器使用 dynamic-datasource-spring-boot-starter 配置动态数据源 这里以同时使用jpa和mybatis-plus两种orm框架操作不同数据源为例,分别介绍两种实现方式。 首先了解一下 spring 事务实现的方式 以 @Transactional 注解为例 (也可以看 TransactionTemplate, 这个流程更简单一点)。 入口:ProxyTransactionManagementConfiguration (从 config 类入手,需要哪些bean一目了然,然后直接顺着看下去就可以了) 主要有以下3个bean TransactionAttributeSource:实现是 AnnotationTransactionAttributeSource, 提供从(存在 @Transactional 注解的)方法上读取事务的属性(注解的属性)的功能TransactionInterceptor:事务方法拦截器的bean,在执行事务方法时,转到 (TransactionAspectSupport#invokeWithinTransaction) 方法,即spring事务处理的主要逻辑。BeanFactoryTransactionAttributeSourceAdvisor:一个advisor(包含一个 Pointcut 切点和一个 Advice 通知),advice就是上面的事务拦截器,Pointcut 切点匹配能通过 TransactionAttributeSource 获取到事务信息的方法。 拦截器逻辑大概如下 在执行被拦截的事务方法中对数据进行crud时,orm框架会从 TransactionSynchronizationManager 中的 ThradLocal 获取 之前创建的 connection (DataSourceUtils); 多数据源实现事务 每个数据源手动配置orm框架 这种方式是通过手动声明创建orm框架对应的bean来实现多数据源的操作,即每个数据源都自己手动创建一套对用的bean。 (其实如果使用的spring而不是springboot的话,就不会有这种多数据源的疑问,因为本来就要自己声明bean。) 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 也可以直接依赖 mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> 复制代码 配置文件 datasource: test2: driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/test2?useSSL=true&maxAllowedPacket=16777216&pinGlobalTxToPhysicalConnection=true&nullNamePatternMatchesAll=true&autoReconnect=true&failOverReadOnly=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai username: password: poolName: test2 test: driverClassName: com.

力扣 第435题 无重叠区间

题目:给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 如果右区间大,整体区间个数加一 如果右区间小,整取区间个数不便,改区间被吃掉 最后的结果是输入的长度减去整体区间数 力扣 这里面有个图解不错

瘦客户机如何安装ubuntu-20.04-live-server-amd64

一、下载ubuntu-20.04-live-server-amd64光盘 Get Ubuntu Server | Download | Ubuntu 二、制作U盘安装盘 手把手教你使用U盘安装Ubuntu系统_shanql的博客-CSDN博客_pe装ubuntu系统 三、安装前准备 1、瘦客户机连接网线,确保安装的时候,安装盘可以从官网更新网卡驱动,避免安装完成后无法使用网络的问题 2、将瘦客户机设置为U盘启动,从U盘开始安装ubuntu 四、安装ubuntu 五、安装SSH 如何在 Ubuntu 20.04 启用 SSH_雪梦科技的博客-CSDN博客_ubuntu20.04开启ssh 后面就可以通过有线网络来远程登录和操作瘦客户机了 六、安装其他工具 1、ifconfig 七、安装无线WIFI 1、安装驱动 ubuntu20.04连接wifi_UchihaHanamichi的博客-CSDN博客_ubuntu20.04连接wifi Ubuntu 20.04 无线网配置 - 知*行 - 博客园 通过命令 sudo apt-get install bcmwl-kernel-source ,安装Broadcom的无线网卡驱动 2、安装WPA2加密 Ubuntu20.04服务器连接WIFI设置_wzp年轻人的博客-CSDN博客_ubuntu wifi设置 sudo apt-get install wpasupplicant -y sudo apt-get install network-manager -y 3、搜索wifi,并配置密码 sudo service network-manager restart sudo nmcli dev wifi sudo nmcli dev wifi connect '360WiFi-89D2D1' password '12345678'

快速排序算法C++实现(超详细解析!!!!)

目录 一、前言 (1)分治算法 (2)分治算法解题方法 1.分解: 2.治理: 3.合并: 二、快速排序 1.问题分析 2.算法设计 (1)分解: (2)治理 : (3)合并: (4)基准元素的选取: 3.算法分析 三、AC代码 四、共勉 一、前言 (1)分治算法 快速排序,其实是一种分治算法,那么在了解快速排序之前,我们先来看看什么是分治算法。在算法设计中,我们引入分而治之的策略,称为分治算法,其本质就是将一个大规模的问题分解为若干个规模较小的相同子问题,分而治之。 (2)分治算法解题方法 1.分解: 将要解决的问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题。 2.治理: 求解各个子问题。由于各个子问题与原问题形式相同,只是规模较小而已,而当子问题划分得足够小时,就可以用简单的方法解决。 3.合并: 按原问题的要求,将子问题的解逐层合并构成原问题的解。 二、快速排序 1.问题分析 快速排序是比较快的排序方法。它的基本思想是通过一组排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据进行快速排序,整个排序过程可以递归进行,以此使所有数据变成有序序列。 2.算法设计 (1)分解: 先从数列中取出一个元素作为基准元素。一基准元素为标准,将问题分解为两个子序列,使小于或者等于基准元素的子序列在左侧,使大于基准元素的子序列在右侧。 (2)治理 : 对两个子序列进行快速排序(递归快速排序)。 (3)合并: 将排好的两个子序列合并在一起,得到原问题的解。 (4)基准元素的选取: ①:取第一个元素。(通常选取第一个元素) ②:取最后一个元素 ③:取中间位置的元素 ④:取第一个、最后一个、中间位置元素三者之中位数 ⑤:取第一个和最后一个之间位置的随机数 k (low<=k<=hight) 3.算法分析 假设当前的待排序的序列为 R[low,hight] , 其中 low<=hight。同时选取首元素为基准元素。 步骤一:选取首元素的第一个元素作为基准元素 pivot=R[low] ,i=low ,j=hight。 步骤二:从右向左扫描,找到小于等于 pivot 的数,如果找到,R[i] 和 R[j] 交换 ,i++。 步骤三:从左向右扫描,找到大于 pivot 的数,如果找到,R[i] 和 R[j] 交换,j--。

C#基础入门教程-字符串(String)

目录 C#字符串(String) 创建 String 对象 实例练习 String 类的属性 String 类的方法 比较字符串实例练习 字符串包含字符串实例练习 获取子字符串实例练习 连接字符串实例练习 C#字符串(String) 在 C# 中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。string 关键字是 System.String类的别名。 创建 String 对象 您可以使用以下方法之一来创建 string 对象: 通过给 String 变量指定一个字符串通过使用 String 类构造函数通过使用字符串串联运算符( + )通过检索属性或调用一个返回字符串的方法通过格式化方法来转换一个值或对象为它的字符串表示形式 下面的实例演示了这点: 实例练习 using System; namespace StringApplication { class Program { static void Main(string[] args) { //字符串,字符串连接 string fname, lname; fname = "Rowan"; lname = "Atkinson"; string fullname = fname + lname; Console.WriteLine("Full Name: {0}", fullname); //通过使用 string 构造函数 char[] letters = { 'H', 'e', 'l', 'l','o' }; string greetings = new string(letters); Console.

vsftpd 服务配置

修改配置文件: /etc/vsftpd/vsftpd.conf 1.关闭匿名登录 anonymous_enable=YES 修改为: anonymous_enable=NO 2. 将此行放开 #nopriv_user=ftpsecure 修改为: #nopriv_user=ftpsecure 将ftpsecure 修改为系统中存在的用户 3. 在配置文件最后端口号等配置 listen_port=6000 connect_timeout=120 pasv_enable=YES pasv_min_port=20000 pasv_max_port=21000 reverse_lookup_enable=NO 4. 重启vsftp服务:service vsftpd restart 登录测试命令: ftp host_ip 6000

STM32下位机程序的逻辑写法思路

经过一段时间的学习,现在需要对具体的项目进行程序开发,程序东一下西一下的修改来修改去肯定是乱七八糟的,总结了下面的思维逻辑进行项目的开发,如有不正确的地方,欢迎指导讨论。 第一步,规划程序通讯协议。 第二步,构建标志位结构体 第三步,构建对象结构体 第四步,构建功能函数 第一步,规划程序通讯协议 对于所需要开发的项目,都是有需要具体实现的功能,这些功能在STM32中基本都使用各种通讯总线的方式被控制或去控制。 所以按照功能实现,首先规划通讯协议的功能指令,无论是串口,CAN,SPI,i2c等,应有一套常用的通讯协议架构来实现控制与数据传递。 我现在常用的结构如下: 帧头->功能码->控制码->数据长度->数据流->帧尾 以上结构并没有使用crc校验或者累加和校验,因为我感觉普通的项目应用已经足够,目前在用的程序中反复测试并没有问题。 所以关于这里哪些大佬有经验分享一下不使用校验会存在那些问题? 通讯协议的结构套用之后,对项目或设备所需要实现的哪些功能进行规划,假定为一个字节的控制码,比如: 0x01:功能A 0x02: 功能B 0x03: 功能C 0x04: 功能D 0x05: 功能E 随后在不同的功能码中,可以传递不同的控制码和数据流。 相对于下位机的上位机,只需要根据通讯协议就可以控制并且传递数据到下位机,如使用CAN总线甚至可以将硬件模块化,每一个硬件模块通过通讯协议可以独立工作,避免二次开发或移植。 第二步,构建运行标志位 将通讯协议中的功能运行的状态,使用标志位进行结构体封装,这样会有利于程序的逻辑与线程管理。 假设 功能A: A电机运行1分钟 功能B: 如A电机不在运行时,点亮led。 这个时候应该将电机的运行状态在状态结构体中进行定义,运行的时候为1,停止的时候为0。 这样我们在程序中的任何位置可以对标志位进行判断,从而实现其它功能或者逻辑执行。 第三步,构建对象结构体 我学写代码是从Python开始的,STM32我使用c开发,对我来说一下子上升了N个难度系数,相较而言这简直就是机器码。各种思维都是流程化的,不是对象化的。 面向对象和面向过程我就不说了,我都理解也很浅,Python的各种库各种类的那种代码思维在这里不管用。 直到我接触到了结构体,把需要功能的数据抽象化放到一个结构体里,可以有效的使得功能变得对象化,我也不知道怎么专业的形容,反正就是好用。 比如一个步进电机,我们需要的参数如下: 速度: 状态: 加速数组[]: 方向: 脉冲: 实际会比这里需要更多一些的变量,但意思就是这是些关于电机的结构体数据,他是抽象的,可复制的。我理解,这不就是对象么? 第四部:构建功能函数 接下来最难的地方我认为就是一个个功能函数,协议有了,标志位有了,结构体有了,然后就是实现了。 每一个对象功能封装到一个.c和.h文件中,将大问题拆散为一个个小问题,比如通讯协议其中一条命令,让步进电机转一圈,那么这个函数归类到电机的c文件中,使用gpio或者定时器等资源,外部调用进来。 最后,通讯协议中的功能码控制码引入调用这些函数,实现相应的功能。至于函数内的一些实现逻辑与算法,那就看各个不同的人的造化了。 欢迎交流,菜的一地,不喜勿喷。

【python文字识别OCR】

问题 python实现文字识别 方法 tesseract-OCR方法,没有环境限制,pytorch还是tensorflow都可以用 步骤 1. 下载 tesseract-ocr 的exe文件 文件名称:tesseract-ocr-w64-setup-v4.1.0.20190314.exe(根据自己电脑位数下载) 链接:https://digi.bib.uni-mannheim.de/tesseract/ 2. 双击安装 tesseract-ocr.exe 文件 中途安装需要在select components时,add language (最后一行小加号)中选中所有Chinese开头的四个中文包,然后一直点击确认安装 3. 安装需要的包 在python环境中安装两个包: pip install pytesseract pip install Pillow 4.识别代码 import pytesseract as pt from PIL import Image ''' 识别中文的代码 ''' # 刚才安装tesseract-ocr的tesseract.exe的路径 path = r'~/Tesseract-OCR/tesseract.exe' pt.pytesseract.tesseract_cmd = path img = Image.open('9999.png') text = pt.image_to_string(img, lang='chi_sim').strip() print(text) # =================================================== ''' 识别英文的代码 ''' path = r'~/Tesseract-OCR/tesseract.exe' pt.pytesseract.tesseract_cmd = path img = Image.

最新PHP开发H5即时TX源码+App封装

正文: 介绍图有点模糊,但是不影响, PHP开发H5即时TX源码+App封装,这是一款功能非常强大的TX系统,而且程序也比较轻量级,只有10多MB左右,关于功能方面大家自测吧,没有搭建教程。 下载方式: lanzou.com/in8fe03byr0b

Python 无法加载文件 E:\PythonPro\python-pyqt5\venv\Scripts\Activate.ps1

PyCharm 打开终端出现 无法加载文件 E:\PythonPro\python-pyqt5\venv\Scripts\Activate.ps1 错误信息(如下图所示) 【解决方案】 1、首先用管理员模式运行 Windows PowerShell , 然后输入get-ExecutionPolicy 取得shell的当前执行策略,看到返回了 Restricted 默认值 再执行 set-ExecutionPolicy RemoteSigned 进行重新设置 , 在询问栏填写 Y ,确定执行 在通过get-ExecutionPolicy 取得shell的当前执行策略,看到返回了RemoteSigned,说明配置OK了! PyCharm 再次打开终端,发现问题已经解决!~

c#:截取字符串长度

c#:截取字符串长度 方法一:利用数组方式进行截取 string str1 = “abcdefg”; string str2 = "" + str1[0] + str1[1];//获取前两位字符,并组成新的str2字符串 方法二:利用substringz字符串截取 str.substring(int startIndex,int length) //str是字符串变量名,substring是截取方法,startIndex截取的起始字符,length是截取长度 string str1="abcdegf"; string str2=str1.substring(0,2);//截取str1的1前两个字符 方法三:利用字符串取反remove,实现从后往前的获取字符串 string str1="abcdegf"; string str2=str1.remove(0,2);//先让字符串str1倒置,然后取前两位,相当于str1的后两位

[UVM]config_db机制(set和get函数)

uvm_config机制 在UVM中,参数的传递依赖于config_db机制以下两个函数 set函数是用来发送需要传递的参数get函数是用来接收需要传递的参数 针对uvm验证环境,一般使用uvm_config机制来传递的资源 uvm_config_db#(T)::set(cntxt,inst_name,field_name,value); uvm_config_db#(T)::get(cntxt,inst_name,field_name,value); uvm_config_db uvm_config_db#(T)::set(cntxt,inst_name,field_name,value); uvm_config_db#(T)::get(cntxt,inst_name,field_name,value); 参数T是指传递参数的类型,可以是vulture interface、sequencer等 get 函数 源码分析 static function void get( uvm_component cntxt, string inst_name, string field_name, T value ) 参数解析 获取 inst_name 中 field_name 的值,使用组件 cntxt 作为起始搜索点。 inst_name 是相对于 cntxt 的显式实例名称,如果 cntxt 是配置对象适用的实例,则可能是空字符串。 field_name 是要搜索的范围内的特定字段。 set 函数 源码 static function void set( uvm_component cntxt, string inst_name, string field_name, T value ) 参数解析 为 cntxt 中的 inst_name 中的 field_name 创建新的或更新现有的配置设置。 如源码所示,set函数具有四个参数: cntxt和inst_name一起定义了uvm_config_db中set或get函数的作用范围完整的范围为{cntxt,“.”,inst_name},如果cntxt是null,则inst_name需要提供完整范围信息field_name是目标字段

C#从入门到精通

C#从入门到精通 第一篇基础知识 第一章 初始C#及其开发环境 1.1 C#概述 1.1.1 C#语言及其特点 1.1.2 初始.Net Framwwork 1.1.3 C#与.NET框架 1.1.4 C#的应用领域 1.2 安装与卸载Visual studio 2017 1.2.1 安装Visual studio 2017必备条件 1.2.2 安装Visual studio 2017 1.2.3 卸载Visual studio 2017 1.3 熟悉Visual studio 2017开发环境 1.3.1 创建项目 1.3.2 菜单栏 1.3.3 工具栏 1.3.4 “解决方案资源管理器”窗口 1.3.5 “工具栏”窗口 1.3.6 “属性”窗口 1.3.7 “错误列表”窗口 1.4 小结 第二章 开始C#之旅 2.1 创建第一个C#程序 2.2 初始C#程序结构 2.2.1 命名空间 2.2.2 类 2.2.3 Main()方法 2.2.4 标识符及关键字 2.2.5 C#语句 2.3 程序编写规范

Required String parameter ‘xxx‘ is not present 错误解决

问题是这样的: 我和后端调接口,发现我传的参数和后端那边的是一样的,可是一直报错说参数不存在, CSDN找了好久,发现是我把headers写错了,虽然接口文档写的是 "application/json" 我想当然地写成了 headers: { 'content-type': 'application/json' }, 正确的写法是 headers: { 'content-type': 'application/x-www-form-urlencoded' }, 而且!!!data也需要设置一下stringfy!!! 最后的最后,成功了!写法是这样的 export function setIgnore(data) { return request({ url: '接口地址', headers: { 'content-type': 'application/x-www-form-urlencoded' }, method: 'post', data: qs.stringify(data) }) } 拜托了不要再踩坑了! 

python语言及其应用(赵广辉编)第三章基本数据类型运算练习(以下非标准答案,仅供参考)

1.用户在三行中分别输入一个字符串s和两个整数m,n,输出字符串s中位于m和n(包括m但不包括n)之间的子字符串。例如,输入“python programming”,2,5,输出tho。 print('please input a string and two integers:') s=input() m=eval(input()) n=eval(input()) print(s[m:n]) 运行结果如下: 2.用户输入一个字符串,在一行中连续输出其序号为奇数位置上的字符,例如输入python programming,输出yhnporming。 print('please input a sting:') s=input() for i in range(len(s)): if i%2!=0: print(s[i]) 运行结果如下: 3.编写程序,用户输入一个字符串,将其中小写字母全部转换成大写字母,把大写字母全部转换为小写字母,其他字符不变输出。 import string print('please input a string:') s=input() for ch in s: if ch in string.ascii_lowercase: print(ch.upper()) if ch in string.ascii_uppercase: print(ch.lower()) 运行结果如下: 4.编写程序,从用户给定字符串中查找某指定的字符。输入一个待查找的字符c和一个以回车结束的非空字符串s。如果字符c在字符串s中存在,按照格式“index=下标”输出该字符在字符串中所对应的最大下标(下标从0开始),否则输出Not Found。 print('please input a string:') s=input() print('please input the letter that you want to search:') c=input() if c not in s: print('Not Found') else: for i in range(len(s)): if c==s[i]: index=i print('index={}'.

vue项目实战-完成路由组件的搭建

vue项目实战-完成路由组件的搭建 1.安装vue-router npm i vue-router --save 分析结构可知,路由组件有四个:Home、Search、Login、Register 2.创建路由组件文件夹pages以及各路由组件 3.配置路由 项目中配置路由一般配置在router文件夹中,创建一个router文件夹,在其下新建index.js //配置路由的地方(index.js) import Vue from 'vue' import VueRouter from 'vue-router' //使用插件 Vue.use(VueRouter) //引入路由组件 import Home from '@/pages/Home' import Search from '@/pages/Search' import Login from '@/pages/Login' import Register from '@/pages/Register' //配置路由 export default new VueRouter({ routes:[ { path:'/home', component:Home }, { path:'/search', component:Search }, { path:'/login', component:Login }, { path:'/register', component:Register }, //重定向 { path:'*', redirect:'/home' } ] }) 4.在main.js中引入 5.在App.vue中配置路由组件出口 6.

ElasticSearch(六)【分词器】

六、分词器 6.1 分词器介绍 Analysis 和 Analyzer Analysis:文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer)。Analysis是通过Analyzer来实现的。分词就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档 Analyzer 组成 【注意】:在ES中默认使用标准分词器:StandardAnalyzer特点:中文单字分词/单词分词 我是中国人this is a good man---->analyzer—>我 是 中 国 人 this is a good man 分析器(analyzer)都由三种构件组成的:character filters,tokenizers,token filters Character Filter 字符过滤器 在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(hello–> hello),&–> and,(I&you–>I and you) Tokenizers 分词器 英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词 Token Filters Token过滤器 将切分的单词进行加工。大小写转换(例将"Quick"转为小写),去掉停用词(例如停用词像"a"、“and”、“the"等等),加入同义词(例如同义词像"jump"和"leap”) 【注意】 三者顺序:Character Filter—>Tokenizers—>Token Filter三者个数:Character Filter(0个或多个)+ Tokenizers + Token Filters(0个或多个) 内置分词器 Standard Analyzer:默认分词器,英文按单词切分,并小写处理Simple Analyzer:按照单词切分(符号被过滤),小写处理Stop Analyzer:小写处理,停用词过滤(the、a、is…)Whitespace Analyzer:按照空格切分,不转小写Keyword Analyzer:不分词,直接将输入当作输出 6.2 内置分词器测试 Standard Analyzer 标准分词器 特点:按照单词分词,英文统一转为小写,过滤标点符号,中文单子分词 POST /_analyze { "analyzer": "standard", "

MySQL事务隔离级别的实现原理

并发事务产生的问题 丢失更新(脏写):简单说就是两个事务并发修改同一行数据,没有加锁脏读:一个事务读取到另一个事务中没有提交的数据不可重复读:在同一个事务中两次读取相同数据得到的内容不同,不包括被事务本身所修改幻读:一个事务按照条件查询数据时,没有对应数据行,但是在插入数据时,又发现这行数据已经存在 以上事务并发问题严重程度:丢失更新 > 脏读 > 不可重复读 > 幻读 为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别 Read Uncommited(读未提交):解决脏写Read Committed(读已提交):解决脏读Repeatable Read(可重复读):解决不可重复读(MySQL在此隔离级别下就可以解决幻读)Serializable(串行化):解决幻读 从上到下安全性越来越高,但效率越来越低,要选择合适的隔离级别保证相对安全的同时效率较高 事务隔离级别的实现方式 事务隔离级别的实现基于 锁机制 和 MVCC,不同的隔离级别对锁的使用是不同的 select语句均是快照读(MVCC解决)delete / update / select ...for update 等语句是加锁实现的 读未提交 解决 脏写 解决方案:在开启事务后,如果是 写/读 操作,加一个行 写/读 锁,读/写 完后立马释放锁。这样之后,在一个事务修改某行数据时,不让其他事务对该行数据有任何操作(这种解决冲突的方案叫做读未提交,这就是事务的第一个隔离级别) 缺点:事务A未提交就释放了锁,事务B在事务A释放锁后读到的数据就是未提交的数据,如果事务A回滚,刚才读的数据就是无效数据,也就是脏数据(脏读) 读已提交 解决 脏读 解决方案:把释放锁的时机调整到事务提交之后,此时在事务提交前,其他事务是无法对该行数据进行任何操作(包括读),效率极低,于是MySQL使用了一个并发版本控制机制,叫做MVCC(这种解决方案叫做读已提交,这也是事务的第二个隔离级别) MVCC通俗的也就是说:MySQL为了提高系统的并发量,在事务未提交前,虽然事务内操作的数据是锁定状态,但是另一个事务仍然可以读取数据的 快照版本。 缺点:MySQL虽然锁住正在操作的数据行,但它不会阻止另一个事务往表的其他行插入数据。 不可重复读问题:在RC隔离级别由于每次执行快照读都会创建一个新的Read View,导致同一事务中两次读取数据不一致 。 可重复读 解决 不可重复度 解决方案:MySQL依然采取MVCC解决这个问题,具体是:在一个事务中第一次执行查询会创建一个Read View,之后的查询会复用之前的Read View。这样就保证了同一个事务多次读取数据时数据的一致性。(这种解决方案叫做可重复读,这就是事务的第三个隔离级别) MySQL在RR隔离级别下解决幻读 MySQL的默认隔离级别是RR,它默认开启了间隙锁(只有RR隔离级别下才有间隙锁),可以解决幻读问题。 InnoDB默认的事务隔离级别是RR,在此隔离级别下,使用临键锁(间隙锁 + 行锁)的方式来加锁,解决幻读。 样例 # 如果数据库表种数据的主键id有 1 3 8 11 13 15 17 # 事务1 begin; # 执行如下sql update tb set name = 'li' where id = 5; # 因为5不存在,此时会对3 - 8之间加间隙锁,不包括3和8 # 事务2 begin; insert into tb values(7, 'li'); # 阻塞 # 事务1提交事务(释放间隙锁),事务2才解除阻塞 InnoDB自动使用间隙锁的条件

python3.7安装、Anaconda安装、更新驱动CUDA11.7、安装GPU版本的pytorch

一、安装python3.7(安装其他版本的也可参考) 二、Anaconda安装 三、更新驱动 四、安装GPU版本的pytorch 一、安装python3.7(安装其他版本的也可参考) 1、进入python官网,https://www.python.org,进入首页,点击Downloads,选择Windows 如下图,就可以看到许多的Python版本,我们选择python3.7.9(想安装其他版本的自己对应找即可) 2、安装: 2.1、 2.2、 2.3、一般不改路径 2.4、 2.5、验证是否成功,按win+R,输入cmd ,输入Python回车 二、Anaconda安装 1、进入Anaconda官网,https://www.anaconda.com/,进入首页,选中“Products”,点击“Anaconda Distribution”选项。 2、拉到最底下,点击 一般我们不会安装最新版本,我们安装一个稳定的版本,往下拉,选择此版本 3、安装 3.1、 3.2、 3.3、 3.4、这个一般不放在c盘,建议放在d盘 3.5、 3.6、 3.7、 3.8、 添加环境变量此电脑——属性——高级系统设置——环境变量——path——编辑——新建 D:\Anaconda5.3.1 (Python需要) D:\Anaconda5.3.1\Scripts (conda自带脚本) D:\Anaconda5.3.1\Library\mingw-w64\bin (使用C with python的时候) D:\Anaconda5.3.1 \Library\bin(jupyter notebook动态库) 验证是否成功,按win+R,输入cmd , conda --version 回车! 三、更新驱动 进入https://www.nvidia.cn/Download/index.aspx?lang=cn#,选择自己的电脑的配置进行下载安装(注意一定要安装在c盘,为之后安装GPU版本的pythorch做准备,之前安装在d盘出错了) 验证是否成功,按win+R,输入cmd , nvidia-smi 回车! 四、安装GPU版本的pytorch(安装这个之前要安装pycharm、Anaconda、更新了驱动) 1、点击进入Anaconda3中的Anaconda Prompt(anaconda) 知识储备: 1.1、检验当前conda的版本 conda -V 1.2、查看已有的虚拟环境 conda env list 1.3、创建虚拟环境 conda create -n env_name python=x.x 1.4、删除虚拟环境

训练LPRNet遇到的问题

1.由于lprnet接收的是图片名称就是label的数据集,但是代码中读取数据部分,用cv2.imread读取不出中文字,导致报错“no module named shape” 解决方法:只需要将这行代码改为 Image = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), -1) 亲测有效。y 2.很火爆的acc一直为0问题,或者loss降不下去,这个一定要增大数据集,我从之前的五千增加到18w才出现很高的acc,而且因为loss的计算最后是要除以batchsize的,所以这个batchsize要适当调大,前提是数据集足够大。之前我训练的时候,只用了五六千的数据集,学习率调到0.0000001效果还是很差,但把数据集陡增到18w之后,lr调到0.0001,acc很快就升到了90%多。所以说,增大数据集才是王道。 3.出现除数为0的问题,解决方法简单粗暴:加大数据集,加大加大加大!!如果数据集已经很大了还是出现了除数为0的情况,应该就是batchsize有点太大了,导致某一批次没有被完整执行,有个叫什么来着的那个函数没有被调用,所以tn1 tn2一直是0,tn也是0,于是出现了除数为0的情况。 有什么问题欢迎补充,共同探讨互相学习。

python用minimize() 函数替代matlab的fmincon函数

文章目录 1. matlab 中的 fmincon() 函数2. python中的minimize()函数参考文献 1. matlab 中的 fmincon() 函数 matlab 求解非线性规划 在matlab中,fmincon函数可以用于求解带约束的非线性多变量函数的最小值,即可以用来求解非线性规划问题。 2. 基本语法 [x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options) x 的返回值是决策向量 x 的取值,fval 的返回值是目标函数 f(x) 的取值fun 是用 M 文件定义的函数 f(x) ,代表了(非)线性目标函数x0 是 x 的初始值A, b, Aeq, beq 定义了线性约束 ,如果没有线性约束,则 A=[], b=[], Aeq=[], beq=[]lb 和 ub 是变量 x 的下界和上界,如果下界和上界没有约束,则 lb=[], ub=[],也可以写成 lb 的各分量都为 -inf, ub 的各分量都为 infnonlcon 是用 M 文件定义的非线性向量函数约束。options 定义了优化参数,不填写表示使用 Matlab 默认的参数设置。 3.

每日算法之-哈夫曼树

概念: 哈夫曼树 (最优树) ---- 带权路径长度最短的树 “带权路径长度最短” 是在 "度相同"的树中比较而得的结果,因此有最优二叉树,最优三叉树之称等等。 哈夫曼算法口诀: 1.构造森林全是根; 2.选用两小造新树 3、删除两小添新人 4、重复2、3剩单根 例如 : 有4个节点 a,b,c,d 权值分别为7,5,2,4,构造哈夫曼树 1.构造森林全是根 以这4个节点建立一个森林,根节点为a,b,c,d ,权值为7,5,2,4 2.选用两小造新人 选择最小的权值的两个跟节点2,4构造一颗树 3.删除两小添新人 构造树的根节点为6,删除2,4,剩余的森林节点为7,5,6 4.重复2、3剩单根 继续重复2,3步骤,构造树

Java 异步编程 (5 种异步实现方式详解)

同步操作如果遇到一个耗时的方法,需要阻塞等待,那么我们有没有办法解决呢?让它异步执行,下面我会详解异步及实现 @mikechen 目录 什么是异步?一、线程异步二、Future异步三、CompletableFuture异步四、SpringBoot @Async异步五、Guava异步Java异步编程小结 什么是异步? 首先我们先来看看一个同步的用户注册例子,流程如下: 在同步操作中,我们执行到 插入数据库 的时候,我们必须等待这个方法彻底执行完才能执行“ 发送短信 ”这个操作,如果 插入数据库 这个动作执行时间较长,发送短信需要等待,这就是典型的同步场景。 于是聪明的人们开始思考,如果两者关联性不强,能不能将一些非核心业务从主流程中剥离出来,于是有了异步编程雏形,改进后的流程如下: 这就是异步编程,它是程序并发运行的一种手段,它允许多个事件同时发生,当程序调用需要长时间运行的方法时,它不会阻塞当前的执行流程,程序可以继续运行。 在聊完异步编程后,那么我们一起来看看Java里面实现异步编程究竟有哪些方式呢? 一、线程异步 在 Java 语言中最简单使用异步编程的方式就是创建一个 线程来实现,如果你使用的 JDK 版本是 8 以上的话,可以使用 Lambda 表达式 会更加简洁。 public class AsyncThread extends Thread{ @Override public void run() { System.out.println("当前线程名称:" + this.getName() + ", 执行线程名称:" + Thread.currentThread().getName() + "-hello"); } } public static void main(String[] args) { // 模拟业务流程 // ....... // 创建异步线程 AsyncThread asyncThread = new AsyncThread(); // 启动异步线程 asyncThread.

python入门教程(非常详细),python基础教程 入门教程

python入门教程(非常详细) python入门教程如下:准备材料:windows电脑、python1、这里简单告用python软件编写的一个关于货物售价折扣方面的一个计算程序,首先打开python软件。 2、进入python后,会出现如图所示界面,按照图中箭头指示,先选择File选项,然后在下拉菜单中选择New file选项。3、选择完毕后,会出现一个新的界面,如图箭头和红色框指示。 4、进入这个新的界面,在里面输入自己想编辑的程序,如图所示是编写的一个关于货物售价折扣方面的一个简单的计算程序。 5、程序输入完毕后,按照图中箭头和红色框指示,先选择Run选项,然后在下拉菜单中选择Run Module(注:除此方法外还可以点击键盘F5)。 6、此时会在原界面出现如图所示的字样,这是因为编写程序编辑好的,此时可以输入一个数字,然后回车,又会让输入一个折扣,输入完即可得出最后售价结果。 7、如图所示,这里输入的原价是10,折扣是0.2,故此系统根据编写的程序计算除了打折后的价格为2。 谷歌人工智能写作项目:小发猫 python入门教程(非常详细) python入门教程如下:准备材料:windows电脑、python1、这里简单告用python软件编写的一个关于货物售价折扣方面的一个计算程序,首先打开python软件typescript有哪些东西。 2、进入python后,会出现如图所示界面,按照图中箭头指示,先选择File选项,然后在下拉菜单中选择New file选项。3、选择完毕后,会出现一个新的界面,如图箭头和红色框指示。 4、进入这个新的界面,在里面输入自己想编辑的程序,如图所示是编写的一个关于货物售价折扣方面的一个简单的计算程序。 5、程序输入完毕后,按照图中箭头和红色框指示,先选择Run选项,然后在下拉菜单中选择Run Module(注:除此方法外还可以点击键盘F5)。 6、此时会在原界面出现如图所示的字样,这是因为编写程序编辑好的,此时可以输入一个数字,然后回车,又会让输入一个折扣,输入完即可得出最后售价结果。 7、如图所示,这里输入的原价是10,折扣是0.2,故此系统根据编写的程序计算除了打折后的价格为2。 python入门教程(非常详细) 新手入门需要掌握编程环境的安装与使用、输入及输出语句的应用、运算表达式的使用等。具体教程如下:1、编程环境的安装与使用。比如Python的学习一般推荐软件自带的IDLE,简单好用。 图一2、掌握输入、输入语句的使用。输入语句可以让计算机知道你通过键盘输入了什么,输出语句可以让你知道计算机执行的结果。以输出语句为例:其中“”里面的内容是原样输出,多个输出项之间用,隔开。 示例3、掌握运算(包含计算、逻辑)表达式使用。这个主要是用+、-、*、/、()、>、=、 毫无基础的人如何入门 Python ? Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。 那Python是一种什么语言?首先,我们普及一下编程语言的基础知识。 用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。 而不同的编程语言,干同一个活,编写的代码量,差距也很大。比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。所以Python是一种相当高级的语言。 你也许会问,代码少还不好?代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。那是不是越低级的程序越难学,越高级的程序越简单? 表面上来说,是的,但是,在非常高的抽象计算中,高级的Python程序设计也是非常难学的,所以,高级程序语言不等于简单。但是,对于初学者和完成普通任务,Python语言是非常简单易用的。 连Google都在大规模使用Python,你就不用担心学了会没用。用Python可以做什么? 可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。 Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。 如果你是小白用户,满足以下条件:会使用电脑,但从来没写过程序;还记得初中数学学的方程式和一点点代数知识;想从编程小白变成专业的软件架构师;每天能抽出一个半小时学习。可以看下面的代码。 中小学生如何学习Python编程? 一、中小学生接触电脑的时间很少,所以要经常操作电脑,熟悉电脑的操作,查资料,环境变量,命令行等等。二、编程需要一些英语基础,不用很厉害,但是至少要能看懂一些简单的互联网开发方面的英文单词。 三、python是胶水语言,本身语法很简单,大部分功能都是依赖框架,但是不要以为语法简单就忽视,基础非常非常重要。研究好python基础语法后,开始学习框架。 四、最好是选一个比较喜欢的框架去学习,一个一个学,贪多嚼不烂。 0基础自学python,有入门书籍推荐下么 AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言。 教育部考试中心近日发布了“关于全国计算机等级(NCRE)体系调整”的通知,决定自2018年3月起,在全国计算机二级考试中加入了“Python语言程序设计”科目。 9个月前,浙江省信息技术课程改革方案已经出台,Python确定进入浙江省信息技术教材,从2018年起浙江省信息技术教材编程语言将会从vb更换为Python。 小学生都开始学Python了,天呐撸,学习Python看完这些准没错。 安利一波书单Python入门《Python编程快速上手——让繁琐工作自动化》作者: 【美】Al Sweigart(斯维加特)Python3编程从入门到实践亚马逊畅销Python编程图书本书是一本面向实践的Python编程实用指南。 本书不仅介绍了Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。 本书的第一部分介绍了基本Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。第二部分的每一章都有一些项目程序,供读者学习。 每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识,附录部分提供了所有习题的解答。 《“笨办法”学Python(第3版)》作者: 【美】Zed A. Shaw《“笨办法”学Python(第3版)》是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。 这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。 《“笨办法”学Python(第3版)》结构非常简单,共包括52个习题,其中26个覆盖了输入/输出、变量和函数三个主题,另外26个覆盖了一些比较高级的话题,如条件判断、循环、类和对象、代码测试及项目的实现等。 每一章的格式基本相同,以代码习题开始,按照说明编写代码,运行并检查结果,然后再做附加练习。 《Python编程初学者指南》作者: 【美】Michael Dawson《Python编程初学者指南》尝试以轻松有趣的方式来帮助初学者掌握Python语言和编程技能。 全书共12章,每一章都会用一个完整的游戏来演示其中的关键知识点,并通过编写好玩的小软件这种方式来学习编程,引发读者的兴趣,降低学习的难度。 每章最后都会对该章的知识点进行小结,还会给出一些小练习让读者试试身手。作者很巧妙的将所有编程知识嵌入到了这些例子中,真正做到了寓教于乐。 《数据结构(Python语言描述)》作者: 【美】Kenneth A.

PID算法控制小车转向

1.平衡小车转向控制调试: 角加速度传感器线加速度计: 直立静止时:x和y轴输出为0,z轴为g 存在一定角度时:g会在x和y轴存在分量 Angle_Y表示角度β,弧度制 Accel_X表示重力加速度在x轴的分量 (1)平衡小车转向环使用P(比例控制器)或者PD控制器,转向环是一般 的控制系统,我们只使用P控制器。 (2)目标是配合直立环和速度换,使小车保持直线行驶。 (3)确定KP的极性,为了方便实验,我们关闭之前的直立环和速度环。 (4)我们得到MPU6050输出的陀螺仪的原始数据,觉得最大值不会很大,应该在0~2之间。 (5)我们先确定转向控制的极性: 先设置KP=-负0.6 . 我们把小车放在地上,按照顺时针的方向旋转小车,发现小车并没有阻止我们旋转,这并不是我们希望看到的效果。 (6)我们把KP值设置为正的+0.6 。我们按照顺时针去旋转小车,发现特别的困难, 所以我们确定KP的极性为-负的。 (7)我们打开之前设置好直立环和速度环。 先设置KP=0.2,看看小车走直线的效果,发现KP=0.2发现小车走直线的情况是非常不理想的。 (8) 我们把KP设置为0.6看看走直线的效果。 控制转向的效果有所好转,但是也不是很理想。 (9)我们把KP值设置为1.0看看走直线的效果。 我们看到小车走直线的效果已经很理想了 (10)我们把KP值设置为1.6我们再看看效果。 小车走直线的效果不错,但是会低频的抖动,所以我们 选择KP=1.0

【Spring】IOC容器-Bean管理

一、Spring5 框架概述 1、Spring 是轻量级的开源的 JavaEE 框架 2、Spring 可以解决企业应用开发的复杂性 3、Spring 有两个核心部分:IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给 Spring 进行管理 (2)Aop:面向切面,不修改源代码进行功能增强 4、Spring 特点 (1)方便解耦,简化开发 (2)Aop 编程支持 (3)方便程序测试 (4)方便和其他框架进行整合 (5)方便进行事务操作 (6)降低 API 开发难度 二、Spring5 入门案例 1、下载 Spring5 (1)使用 Spring 最新稳定版本 5.2.6 (2)下载地址 https://repo.spring.io/release/org/springframework/spring/ 2、导入spring5相关jar包 三、IOC(概念和原理) 1、什么是 IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低 (3)做入门案例就是 IOC 实现 2、IOC 底层原理 (1)xml 解析、工厂模式、反射 3、画图讲解 IOC 底层原理 IOC(BeanFactory 接口) 1、IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂 2、Spring 提供 IOC 容器实现两种方式:(两个接口) (1)BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用

计算机二级python考试题型和分值

计算机二级python 一、 题型及分值分布1. 单选题共40道,1到10题为公共基础知识,11到40题是python相关的知识,比如数据结构与算法、python基础知识。 每道题1分,共40分;2. 基础编程题共3道,题目会给一部分写好的代码,描述它的作用,然后填补空缺处的代码,使程序能正常运行。 每题5分,共15分;3. 简单应用题共2道,一道是利用turtle画出图形,一般以代码补全的方式出现,给出大部分代码,填写剩余的两三行。 另一道难度稍大些,也是填写代码,具体题目类型看情况而定,一般要填三四行。 前者10分,后者15分,共25分;4. 综合应用题共1道,一般是对分词排序、文件读写或管理,要求完整写出整个程序,并能够运行成功输出题目要求的结果。要步骤给分,共20分。 二、 考试内容1. python的基本语法与元素了解程序中的基本知识,比如引用、命名、变量、缩进、赋值语句等。掌握输入输出语句的用法,熟知关键保留字。 2. 基本数据类型熟知数字类型如何使用,其中有int、bool、float、complex。了解字符串类型的处理方法,如何切片以及格式化format()的使用。 知道数据类型间如何进行转化,会根据要求操作。了解有关数据类型的有关python函数,掌握并能运用。3. 程序的控制结构理解顺序结构、循环结构、分支结构的书写方法。 掌握分支结构中单分支、双分支以及多分支的结构,且会运用else以及elif。 熟悉循环结构中while、for、break以及continue的作用以及使用方式,知道如何用try——except处理异常。 4. 函数的编写与运用会编写def自定义函数,会用return返回值。知道函数的参数分类以及用法,并能区分局部变量与全局变量的作用范围。 5. 组合数据类型会运用列表,能对列表进行一些基础操作。了解元组、集合与字典,并会运用到程序中。熟知一些列表操作、集合操作或者字典操作的专用python函数。 6. 文件操作知道文件打开、关闭与读写的基本函数,掌握并会运用。能对一维、二维数据进行处理表达,会采用CSV格式对它们进行读写。 7. python库了解turtel库、random库、time库、jieba库、pyinstaller库以及一些第三方库的相关函数,会安装需要的库并运用到程序编写中。 谷歌人工智能写作项目:小发猫 计算机二级python好过吗 计算机二级考试中Python科目不难,下点功夫是容易过的typescript 子类必须实现的接口。 Python编程语言相较于其他编程语言更简单更容易理解,Python语言相当于是一种辅助语言,现在普遍使用的是Python3.10版本,属于进阶版,其更具兼容性,和方便性。 掌握Python编程的基础上加深了解,更有利于我们通过Python考试科目。可以将学习Python编程基础。 将其分作几个板块进行学习了解,例如了解基本的语法元素,了解编程基本数据类型,了解程序的控制结构,关于函数和代码运用,了解数据的类型等等。将Python基础区域化,更有利于我们掌握和记住编程的相关知识。 学习理论往往是不够的,更需要的是实际操作。从编写简单程序,例如建立一个文档在通过代码来执行,绘制一个小乌龟,这样更能让我们熟悉编写过程,能够增加熟练度。 灵活记忆和运用基础的语法要素,就能更好的巩固基础,避免一个小细节而导致的错误。 Python题型与分值的分布为,选择题一题一分总40题,基本操作题总18分,简单应用题总24分,综合题18分一般是两个题分值占比较高。 满分100及格分为60分,选择题和基本操作题比较容易拿分,比如多记忆知识点,多练练题,注意细节,就不会在容易拿分的题型上失分,达到及格就很容易。 多看一些编程案例,更有利于增强我们在答题过程中的题型印象减少错误。 例如常考点基本语法要素,大写字母,小写字母,数字,下划线,汉字组成;但首字符不能是数字,一个变量名中间不能出现空格,33个关键字不能作为变量名。几乎全部都会每个题都会用到。 计算机二级 Python 怎么考?考什么? 考试内容一、Python语言的基本语法元素1、程序的基本语法元素:程序的格式框架、缩进、注释、变量、命名、保留字、数据类型、赋值语句、引用;2、基本输入输出函数:input()、eval()、print();3、源程序的书写风格;4、Python语言的特点。 二、基本数据类型1、数字类型:整数类型、浮点数类型和复数类型;2、数字类型的运算:数值运算操作符、数值运算函数;3、字符串类型及格式化:索引、切片、基本的format()格式化方法;4、字符串类型的操作:字符串操作符、处理函数和处理方法;5、类型判断和类型间转换。 三、程序控制结构1、程序的三种控制结构;2、程序的分支结构:单分支结构、二分支结构、多分支结构;3、程序的循环结构:遍历循环、无限循环、break和continue循环控制。 4、程序的异常处理:try-except。四、函数和代码复用1、函数的定义和使用;2、函数的参数传递:可选参数传递、参数名称传递、函数的返回值;3、变量的作用域:局部变量和全局变量。 五、组合数据类型1、组合数据类型的基本概念;2、列表类型:定义、索引、切片;3、列表类型的操作:列表的操作函数、列表的操作方法;4、字典类型:定义、索引;5、字典类型的操作:字典的操作函数、字典的操作方法。 六、文件和数据格式化1、文件的使用:文件打开、读写和关闭;2、数据组织的维度:一维数据和二维数据;3、一维数据的处理:表示、存储和处理;4、二维数据的处理:表示、存储和处理;5、采用CSV格式对一二维数据文件的读写。 七、Python计算生态1、标准库:turtle库(必选)、random库(必选)、time库(可选);2、基本的Python内置函数;3、第三方库的获取和安装;4、脚本程序转变为可执行程序的第三方库:PyInstaller库(必选);5、第三方库:jieba库(必选)、wordcloud库(可选);6、更广泛的Python计算生态,只要求了解第三方库的名称,不限于以下领域:网络爬虫、数据分析、文本处理、数据可视化、用户图形界面、机器学习、Web开发、游戏开发等。 二级Python语言程序设计考试基本要求1、掌握Python语言的基本语法规则;2、掌握不少于2个基本的Python标准库;3、掌握不少于2个Python第三方库,掌握获取并安装第三方库的方法;4、能够阅读和分析Python程序;5、熟练使用IDLE开发环境,能够将脚本程序转变为可执行程序;6、了解Python计算生态在以下方面(不限于)的主要第三方库名称:网络爬虫、数据分析、数据可视化、机器学习、Web开发等。 计算机二级python考试内容 一、 Python 语言基本语法元素1.程序的基本语法元素:程序的格式框架、缩进、注释、变量、命名、保留字、数据类型、赋值 语句、引用。 2.基本输入输出函数:input()、eval()、print()。3.源程序的书写风格。4.Python 语言的特点。二、 基本数据类型1. 数字类型:整数类型、浮点数类型和复数类型。 2. 数字类型的运算:数值运算操作符、数值运算函数。3. 字符串类型及格式化:索引、切片、基本的 format()格式化方法。4. 字符串类型的操作:字符串操作符、处理函数和处理方法。 5. 类型判断和类型间转换。三、 程序的控制结构1. 程序的三种控制结构。2. 程序的分支结构:单分支结构、二分支结构、多分支结构。

用VirtualBox打开VMware创建的虚拟机的方法

用virtual box打开VMware虚拟机步骤 使用VMware创建的虚拟机文件如下: 我们现在用virtual box打开这个虚拟机。 打开virtual box,点击新建: 然后根据实际情况填写: 点击下一步后,设置内存大小,一般设置2G即可。如果宿主windows电脑物理内存4G,建议选择2G。如果物理内存有8G,可以选择4G。然后点击下一步。 点击“注册”: 点击选择,然后点击创建即可 要关机时,在virtual box的菜单栏中选择控制->正常关机,然后选择shut down关机即可。 网络配置 个人感觉virtualbox的网络配置比VMware好用,因为virtual box会直接在windows中安装一个虚拟网卡,专门用于连接虚拟机的eth0网卡,这样无论宿主机网络环境如何,都不会影响到宿主机连接Ubuntu的网络。我见过很多用VMware的,一旦宿主机断网了,或者切换了无线网,都会导致ping不通Ubuntu了。这种情况在使用virtual box的时候,基本不会出现。 要使用这张虚拟的网卡,首先要配置virtualbox,启用host-only网络: 注意:上述配置,要在虚拟机关闭的情况下才能配置,否则改不了。 virtualbox安装的虚拟网卡的ip默认为192.168.56.1,因此我们还需要把Ubuntu的eth0网卡的ip改为56网段: 修改ip的方法:通过修改/etc/network/interfaces来修改: 网卡配置/etc/network/interfaces中的内容解释 如此一来,在windows中ping虚拟机eth的ip,应该就能ping通了。

安鸾靶场之SSRF漏洞实操

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 攻击的目标是从外网无法访问的内部系统 ( 正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统 ) SSRF 成因是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制 (没有做合法性验证)。 出现场景 能够对外发起网络请求的地方,就可能存在 SSRF 漏洞。 在线识图,在线文档翻译,分享,订阅等,这些有的都会发起网络请求。 从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。 安鸾靶场实操 1、SSRF01 漏洞URL:http://47.103.94.191:8012/bug/ssrf/ssrf.php 提示:内网存在主机 dagebiedawo 首先访问漏洞url 输入http://www.baidu.com,发现能正常访问百度 现在我们再来访问dagebiedawo 在红框中提示了答案在这,点击跳转不能访问,所以我们在漏洞处来访问 2、SSRF02 题目URL:http://47.103.94.191:8090/ 和上题一样,首先我们先来访问百度http://www.baidu.com ![在这里插入图片描述](https://img-blog.csdnimg.cn/60b8e80afa564b278ce26701600ed4e9.png 能够正常访问,再来访问一下本地http://127.0.0.1,并不能成功访问 这里我们转变一下思路,可以对端口进行爆破,看看哪些端口被开放,使用burp suite抓包 爆破出7002端口,在漏洞处提交http://127.0.0.1:7002,能成功跳转,但是并未得到有用信息 接下来我们对目录进行扫描 发现网站存在robots.txt,访问一下 看到了好几个flag文件,我们再一个个访问之后,可以得到答案 http://127.0.0.1:7002/flag.txt http://127.0.0.1:7002/status http://127.0.0.1:7002/flag http://127.0.0.1:7002/hack 3、SSRF03 题目URL:http://47.103.94.191:2000/ 首先访问一下百度http://www.baidu.com,可以正常访问。 访问本地http://127.0.0.1,可以正常访问,但并不能得到有用信息 再来访问一下网站的robots.txt,出现404错误,网站并不存在robots.txt文件 接下来只能对端口进行扫描了 爆破出1998端口,在漏洞处访问一下http://127.0.0.1:1998 在红框中有提示,要使用此 API,请将X_SECRET_AUTH_KEY的值作为名为"auth"的GET参数传递。 接下来我们要想的是怎么能够获取到X_SECRET_AUTH_KEY的值。 在我们的vps上使用nc监听一个端口,然后让靶场服务器来访问,可以监听到请求头 最后我们将这个值作为auth的参数传递,http://127.0.0.1:1998?auth=f5ddb063e92808b472c31d82c887d791,成功获取到flag

Windows系统中安装子系统Ubuntu

部分软件需要在Linux系统中运行,故想在Windows系统中安装一个Linux的子系统。本文介绍的是在Win11系统中安装Ubuntu系统。具体过程如下: 1. 打开控制面板->程序->启用或关闭Windows功能。勾选“适用于Linux的Windows子系统”和“虚拟机平台”,如下图所示。 重启电脑。 2. 重启电脑后,进入微软商店(Microsoft Store),在搜索栏中输入“Ubuntu”搜索。选择相应的需要的版本,下载安装。如果安装失败,检查是否是关闭了windows系统的自动更新功能。打开即可。 3. 安装好后,在windows的搜索栏中即可找到安装好的ubuntu系统。打开即可进入。 4. 首次进入Ubuntu系统时,会提示新建用户和密码,输入相应的内容即可新建用户。 5. 配置root密码:在终端执行命令:sudo passwd root,接着输入密码和root密码,重复密码。这样就设置好了root密码 6. 为了能方便windows和ubuntu系统中的文件共享,可以在windows系统中,打开文件夹,在地址栏中输入:\\wsl$,即可进入ubuntu的文件系统中。如下图所示。双击进入,即可对复制文件。

PAT 1066 AVL树模板

题目链接 传送门 题面 题意 让你建立一棵AVL树,不断的插入n个数,输出最终的根的val 思路 注意旋转函数和Splay的区别,Splay中的旋转函数中的p是会被提高的,而这里代码中的旋转函数,提高的是p的儿子结点; 其实对于LR以及RL我们将其看成两步即可,比如对于LR来说,先左旋当前点的左子树,再右旋当前点即可; 对于RL同理; 注意一点,这里调整是需要逐个检查路径上的所有点的平衡因子,如下图所示; 对照代码就比较容易理解了,就是一个dfs的过程; Code #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 10; struct Tree{ int s[2]; int val; }tr[N]; #define lc (tr[p].s[0]) #define rc (tr[p].s[1]) int getH(int p){ if(!p) return 0; return max(getH(lc),getH(rc)) + 1; } int tot; void rotateR(int &p){ int ls = lc; tr[p].s[0] = tr[tr[p].s[0]].s[1]; tr[ls].s[1] = p; p = ls; } void rotateL(int &p){ int rs = rc; tr[p].

IO流(详解)+每种流(用法详解)+Lamda表达式(详解)+序列化,反序列化(理论)

1.IO流大全图解 /*应该把自己当做参考物:inputStream输入流(向自己输入数据,调用给自己看)*/ /*还是把自己当做参考物:outputStream输出流(由自己向数据库中写出数据)*/ 2.IO流分类 第一种:输入流和输出流 按照流的流向来分,可以分为输入流和输出流。输入,输出都是从程序运行所在内存的角度来划分的。 输入流:只能从中读取数据,而不能向其写入数据,由InputStream和Reader作为基类。 输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类 第二种:字节流和字符流 字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同。 字节流操作的数据单元是8位字节,由InputStream和OutputStream作为基类。 字符流操作的数据单元是16为的字符,由Reader和Writer作为基类 第三种:节点流和处理流 按照流的角色来分,可以分为节点流和处理流。 节点流:可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。也被称为低级流。节点流的另一端是明确的,是实际读写数据的流,读写一定是建立在节点流基础上进行的. 。 处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。也称为高级流。处理流不能独立存在,必须连接在其他流上,目的是当数据流经当前流时对数据进行加工处理来简化我们对数据的该操作.。 3.IO流操作代码的缩写(对比)+lamda表达式缩写 package demo; import java.io.*; import java.nio.charset.StandardCharsets; public class Demo3 { public static void main(String[] args) { /**各种流操作的融合与缩写*/ try {//捕获异常 //四种操作融缩为一句大代码 FileOutputStream fos = new FileOutputStream("fos.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos,StandardCharsets.UTF_8); BufferedWriter bw = new BufferedWriter(osw); PrintWriter pw =new PrintWriter(bw,true); pw.println("摩擦摩擦"); pw.println("我爱学习Java"); System.out.println("输出完毕"); } catch (FileNotFoundException e) { e.printStackTrace(); } --------------------------------------------------------------------------------- try {// PrintWriter pw =new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream("

优化算法使用总结——0.618法、梯度下降、牛顿法、共轭梯度、外罚、内罚

实用优化算法总结 实用优化算法的种类繁多,并且各自使用的领域有所区别,为此,设计有多种优化算法,本文着重介绍其中几种,见目录。 本篇中涉及到的实验代码已上传至GitHub 最优化问题,可以分为两大部分“无约束最优化问题”和“约束最优化问题”。 目录 实用优化算法总结无约束最优化问题黄金分割法最速下降法牛顿法基本牛顿法阻尼牛顿法LM方法:克服 G − 1 G^{-1} G−1奇异、非正定的问题拟牛顿法 共轭方向法共轭梯度法 约束最优化问题一般约束优化问题 无约束最优化问题 黄金分割法 黄金分割法,也叫0.618( τ = 0.618 τ=0.618 τ=0.618)法,这个方法可所谓足够简单,同时它适用的范围也就相对有限,需要给定单峰目标函数,以及代求区间[ a a a0, b b b0] 算法设计: 步骤1:给定 a a a0>0, b b b0>0,i=0,ε>0, τ = 0.618 τ=0.618 τ=0.618 步骤2:若 b b bi- a a ai<ε,则 α α α*= b i + a i 2 \frac{b_i+a_i}{2} 2bi​+ai​​,输出 α α α*,算法停止 步骤3:计算 α i l α^l_i αil​= a a a i + + +(1- τ τ τ) ( ( ( b b b i- a a a i ) ) ) α i r α^r_i αir​= a a a i + + + τ τ τ( b b b i- a a a i ) ) ) 步骤4:若 α i l α_i^l αil​< α i r α_i^r αir​,则 a a a i+1= a a a i, b b b i+1= α i r α^r_i αir​ ,否则 a a a i+1= α i l α^l_i αil​, b b b i+1= b b b i ,转步骤2 通过上述算法步骤,容易得知当 τ τ τ时,从区间[ a a a 0, b b b 0]开始迭代,经过m次迭代后,区间长度为 τ τ τ m( b b b 0- a a a 0).

(附源码)spring boot宠物医院管理系统 毕业设计 180923

Springboot宠物医院管理系统 摘 要 现如今生活质量提高,人们追求精神健康,与家中宠物朝夕相处,感情深厚,宠物渐渐成了我们身边的朋友。因而宠物生病了,需要去看病,自古医院救死扶伤,生命无贵贱,无论人类还是动物都需要合适而又方便的场所看病。同时智能化医院的普及,以往兽医站开始尝试改善自我经营的诊所,采用高效的新技术向正规化且办公化管理的医院转型,这样便可使管理高效,服务优质,方便快捷地对运营的各个部门得到全方位的改善。因而基于宠物医院的办公管理系统是宠物医院的重要工具,简单、实用、灵活,可以事半功倍。 本系统是基于浏览器与服务器架构平台,完整的办公信息处理的宠物医院管理系统。采用跨平台的JAVA语言开发,利用WEB浏览器就可以使工作人员操作本应用,实现对系统各方位信息的操作,无论大型宠物医院还是小型宠物诊所,均可自建局域网管理,方便办公,减少不必要的成本消耗。该系统沿用MVC思想,利用springboot类的封装进行逻辑控制,利用Java技术完成访问页面的展示,利用MySQL数据库存储数据,最后Tomcat服务器完成网站发布,系统可在多个环境下运行。 本课题在经过了宠物医院正常办公流程下的需求分析后,完成实现了系统用户、宠物信息、病例记录、线下预约、宠物寄养、客户评价等功能。 关键词:宠物医院管理,Springboot框架,MySQL数据库 Springboot pet hospital management system Abstract Nowadays, with the improvement of the quality of life, people pursue mental health, get along with their pets day and night, and have deep feelings. Pets have gradually become our friends. Therefore, pets are sick and need to see a doctor. Since ancient times, hospitals have saved the lives of the dead and healed the wounded. No matter human or animal, they need a suitable and convenient place to see a doctor.

用css设置锚点:点击一个元素会跳到相应的位置

先用代码实现相应的功能: 结果: 锚点的目的就是当我们点击导航栏时,页面会跳到相关内容部分,比如上面我们点击导航栏里的频道优选,这个时候界面就会跳到相关内容的部分。接下来是锚点的代码书写和运用: 结果: 设置锚点的代码,是通过a标签来实现的,a标签不仅能跳转到其他的网页,也能跳转到同一个网页的不同区域,这个锚点的功能是通过:给页面相应的区域加上id选择,然后给导航栏文字加上a标签,a标签的href属性值是“#+id选择器的值”,就能实现点击导航栏跳转到相应的区域。

【java】post请求参数全大写后台接不到参数

测试验证的时候发现,接收不到请求参数 驼峰正常 springMVC使用的是Jackson来解析json格式的请求报文, 所以可以使用@JsonProperty注解来实现强制要求接受字段 @JsonProperty("DCUser_mlts") private String DCUser_mlts;//用户数据 @JsonProperty("DCHero") private String DCHero;// 英雄数据 @JsonProperty("DCShard") private String DCShard;// 碎片数据