Python进行数据分析(详细教程)

1.为什么选择Python进行数据分析? Python是一门动态的、面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言。Python入门简单,代码可读性强,一段好的Python代码,阅读起来像是在读一篇外语文章。Python这种特性称为“伪代码”,它可以使你只关心完成什么样的工作任务,而不是纠结于Python的语法。 另外,Python是开源的,它拥有非常多优秀的库,可以用于数据分析及其他领域。更重要的是,Python与最受欢迎的开源大数据平台Hadoop具有很好的兼容性。因此,学习Python对于有志于向大数据分析岗位发展的数据分析师来说,是一件非常节省学习成本的事。 Python的众多优点让它成为最受欢迎的程序设计语言之一,国内外许多公司也已经在使用Python,例YouTube,Google,阿里云等等。 2.编程基础 要学习如何用Python进行数据分析, CDA数据分析师建议第一步是要了解一些Python的编程基础,知道Python的数据结构,什么是向量、列表、数组、字典等等;了解Python的各种函数及模块。下图整理了这一阶段要掌握的知识点: 3.数据分析流程 Python是数据分析利器,掌握了Python的编程基础后,就可以逐渐进入数据分析的奇妙世界。CDA数据分析师认为一个完整的数据分析项目大致可分为以下五个流程: 1)数据获取 一般有数据分析师岗位需求的公司都会有自己的数据库,数据分析师可以通过SQL查询语句来获取数据库中想要数据。Python已经具有连接sql server、mysql、orcale等主流数据库的接口包,比如pymssql、pymysql、cx_Oracle等。 而获取外部数据主要有两种获取方式,一种是获取国内一些网站上公开的数据资料,例如国家统计局;一种是通过编写爬虫代码自动爬取数据。如果希望使用Python爬虫来获取数据,我们可以使用以下Python工具: Requests-主要用于爬取数据时发出请求操作。 BeautifulSoup-用于爬取数据时读取XML和HTML类型的数据,解析为对象进而处理。 Scapy-一个处理交互式数据的包,可以解码大部分网络协议的数据包 2)数据存储 对于数据量不大的项目,可以使用excel来进行存储和处理,但对于数据量过万的项目,使用数据库来存储与管理会更高效便捷。 3)数据预处理 数据预处理也称数据清洗。大多数情况下,我们拿到手的数据是格式不一致,存在异常值、缺失值等问题的,而不同项目数据预处理步骤的方法也不一样。CDA数据分析师认为数据分析有80%的工作都在处理数据。如果选择Python作为数据清洗的工具的话,我们可以使用Numpy和Pandas这两个工具库: Numpy - 用于Python中的科学计算。它非常适用于与线性代数,傅里叶变换和随机数相关的运算。它可以很好地处理多维数据,并兼容各种数据库。 Pandas –Pandas是基于Numpy扩展而来的,可以提供一系列函数来处理数据结构和运算,如时间序列等。 4)建模与分析 这一阶段首先要清楚数据的结构,结合项目需求来选取模型。 常见的数据挖掘模型有: 在这一阶段,Python也具有很好的工具库支持我们的建模工作: scikit-learn-适用Python实现的机器学习算法库。scikit-learn可以实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法。 Tensorflow-适用于深度学习且数据处理需求不高的项目。这类项目往往数据量较大,且最终需要的精度更高。 5)可视化分析 数据分析最后一步是撰写数据分析报告,这也是数据可视化的一个过程。在数据可视化方面,Python目前主流的可视化工具有: Matplotlib-主要用于二维绘图,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。 Seaborn-是基于matplotlib产生的一个模块,专攻于统计可视化,可以和Pandas进行无缝链接。 按照这个流程,每个阶段所涉及的知识点可以细分如下: 从上图我们也可以得知,在整个数据分析流程,无论是数据提取、数据预处理、数据建模和分析,还是数据可视化,Python目前已经可以很好地支持我们的数据分析工作。 关于Python学习指南 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助! 包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python! 👉Python所有方向的学习路线👈 Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取) 👉Python学习视频600合集👈 观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 温馨提示:篇幅有限,已打包文件夹,获取方式在:文末 👉Python70个实战练手案例&源码👈 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 👉Python大厂面试资料👈 我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 👉Python副业兼职路线&方法👈 学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。 👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】 点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

H3C 服务器巡检工具FIST

FIST是快速智能可扩展工具集(Fast Intelligence Scalable Toolkit)的英文缩写,是面向新华三服务器集群的管理系统,提供对服务器集群的统一的,可扩展的,模板化的管理,是服务器集群高效运维的利器。 视图统一:整个数据中心的状态一手掌控:化繁为简降低运维成本是管理软件的灵魂,FIST的出现更大程度上解决了数据中心的基础设施的管理孤岛化和分散化的问题,FIST向下集成了各种协议来对接数据中心的机架服务器,存储服务器,刀片服务器,甚至是交换设备,消除了设备管理关键之间的孤岛,完成对接之后,可以在一个页面中对整个数据中心当前和以往有记录的生命周期状态进行统一的掌控; 灵活易扩展:批量分发各种配置进一步降低运维成本:彻底的可扩展是降低运维成本最有效的手段,从设备的发现开始,到设备的监视,管理和控制整个过程无不从HDM的单台单个操作,到现在的多台批量操作,用户不用再关心基础设施的物理分布,只要在同一个网络内的设备都按照逻辑上的关联灵活控制,拜托复杂的运维脚本,让数据中心的管理更加轻松; 无状态计算:数据中心资源池化资源流动分配:无差别的使用数据中心的资源是高效数据中心最朴素的追求,使用FIST可以实现真正意义上的无状态计算,通过将数据中心基础设施内部特定的配置文件例如HDM,BIOS,网络配置,存储配置等等模板化,加上操作系统和其他驱动软件的克隆安装能够更大程度将硬件裸金属化,实现以配置文件组成的模板文件为中心的无状态计算。

【React系列】ES6学习笔记(三)Class

本文参考自电子书《ECMAScript 6 入门》:https://es6.ruanyifeng.com/ Class 的基本语法 1. 类的由来 JavaScript 语言中,生成实例对象的传统方法是通过构造函数。下面是一个例子。 function Point(x, y) { this.x = x; this.y = y; } Point.prototype.toString = function () { return '(' + this.x + ', ' + this.y + ')'; }; var p = new Point(1, 2); 上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。 基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用 ES6 的class改写,就是下面这样。 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.

HarmonyOS应用开发之ArkTS语言学习记录

1、ArkTS介绍 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用。具体介绍可查看官方文档:ArkTS 语言 | 华为开发者联盟 2、初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。 当前,ArkTS在TS的基础上主要扩展了如下能力: 基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。状态管理:ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。另外,从数据的传递形式来看,可分为只读的单向传递和可变更的双向传递。开发者可以灵活的利用这些能力来实现数据和UI的联动。渲染控制:ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件。数据懒加载从数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。 3、基础语法概述 在初步了解了ArkTS语言之后,我们以一个具体的示例来说明ArkTS的基本组成。如下图所示,当点击按钮时,文本内容从“Hello World”变为“Hello ArkUI”。 图1 示例效果图 本示例中,ArkTS的基本组成如下所示。 图2 ArkTS的基本组成 装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry、@Component和@State都是装饰器,@Component表示自定义组件,@Entry表示该自定义组件为入口组件,@State表示组件中的状态变量,状态变量变化会触发UI刷新。UI描述:以声明式的方式来描述UI的结构,例如build()方法中的代码块。自定义组件:可复用的UI单元,可组合其他组件,如上述被@Component装饰的struct Hello。系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用,比如示例中的Column、Text、Divider、Button。属性方法:组件可以通过链式调用配置多项属性,如fontSize()、width()、height()、backgroundColor()等。事件方法:组件可以通过链式调用设置多个事件的响应逻辑,如跟随在Button后面的onClick()。 除此之外,ArkTS扩展了多种语法范式来使开发更加便捷: @Builder/@BuilderParam:特殊的封装UI描述的方法,细粒度的封装和复用UI描述。@Extend/@Style:扩展内置组件和封装属性样式,更灵活地组合内置组件。stateStyles:多态样式,可以依据组件的内部状态的不同,设置不同样式。 4、声明式UI描述 ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。 创建组件:根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。配置属性:属性方法以“.”链式调用的方式配置系统组件的样式和其他属性,建议每个属性方法单独写一行。配置事件:事件方法以“.”链式调用的方式配置系统组件支持的事件,建议每个事件方法单独写一行。 使用lambda表达式配置组件的事件方法。使用匿名函数表达式配置组件的事件方法,要求使用bind,以确保函数体中的this指向当前组件。使用组件的成员函数配置组件的事件方法。 配置子组件:如果组件支持子组件配置,则需在尾随闭包"{...}"中为组件添加子组件的UI描述。Column、Row、Stack、Grid、List等组件都是容器组件。(容器组件即支持嵌套子组件) 5、自定义组件 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。 自定义组件具有以下特点: 可组合:允许开发者组合使用系统组件、及其属性和方法。可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用。数据驱动UI更新:通过状态变量的改变,来驱动UI的刷新。

走向云原生 破局数字化

近年来,随着云计算概念和技术的普及,云原生一词也越来越热门,云原生成为云计算领域的新变量。行业内,华为、阿里巴巴、字节跳动等各个大厂都在“抢滩”云原生市场。行业外,云原生也逐渐出圈,出现在大众视野。可以说,我们正处在一个云原生的时代。 随着云计算技术的发展,企业上云已成为趋势,越来越多的企业都已将应用部署到了云上,但应用上云并不意味着这就是云平台的全部优势。 云原生是一个组合词,“云”表示应用程序运行于分布式云环境中,“原生”表示应用程序在设计之初就充分考虑到了云平台的弹性和分布式特性,就是为云设计的。 可见,云原生并不是简单地使用云平台运行现有的应用程序,它是一种能充分利用云计算优势对应用程序进行设计、实现、部署、交付和操作的应用架构方法。 云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。 传统的软件开发模式,在使用云计算平台时和使用物理机时没有什么大的区别,那么就没有将云平台的能力利用充分,在一定程度上导致了资源的浪费。云原生就是用来解决这一类的问题,将云计算平台的优势发挥到极致。 云原生计算加速了应用与基础设施资源之间的解耦,通过定义开放标准,向下封装资源,将复杂性下沉到基础设施层;向上支撑应用,让开发者更关注业务价值。此外,云原生计算提供统一的技术栈,动态、混合、分布式的云原生环境将成为新常态。 让企业应用能够利用云平台实现资源的按需分配和弹性伸缩,是云原生应用重点关注的地方。它要求云原生应用具备可用性和伸缩性,以及自动化部署和管理能力,可随处运行,并且能够通过持续集成、持续交付提升研发、测试与发布的效率。云原生应用并未完全颠覆传统的应用,采用云原生的设计模式可以优化和改进传统应用模式,使应用更加适合在云平台上运行。 简单来说,云原生就是利用云的优势来更快地处理企业业务并降低IT成本,目标就是根据需求快速、敏捷地向用户交付软件产品。基于云原生技术带给企业的应用开发的技术价值,可以大幅降低企业IT开发和运维成本,从而提升企业业务的创新效率和产业价值。 作为企业技术中台的重要支撑和关键组成部分,云原生将有望带来由下至上的创新。而随着越来越多的企业和组织关注云原生的能力,社会数字化转型也将进入到一个新的阶段。眼下,“上云用数赋智,推进数字化转型”已成为企业共识。 云原生虽然是一个技术的架构理念,但是企业转型的数字化能力需要通过软件化的工具去实现,是将业务和技术匹配在一起,所以云原生和数字化转型的目标和能力是统一的。 在全球化竞争激烈以及疫情等不确定背景下,企业需要保持一种高速迭代、持续创新的能力,以便在不同环境中都能够保持竞争力。从企业的组织架构到文化,再到技术架构都要求是分布式、高敏捷、可再生,云原生也是分布式、松耦合与高韧性,内涵是完全一致的。 可以预料的是,面对云原生技术所释放出的巨大红利,一定会重塑中国企业IT的各个环节,让企业IT能够更好地去利用云上的各种设施和服务,从而在效率和成本上更具竞争力,并进一步构建业务智能。 在后疫情时代,企业如何应对困境,如何转型升级成为了一个亟待解决的命题。中国企业将面临着众多不确定的挑战,亟待增强企业的灵活和适应性,云原生所具备的技术价值和业务价值,是中国企业应对不确定性的最佳选择。只有将云原生的思想、技术以及形成的能力,真正融入到企业数字化转型中,才能更好地推动千行百业的数字化升级。 文.Anlen

Spring框架概述

一、介绍: 1、Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。 2、特点:Spring框架是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系。 IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。 IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。 二、体系结构:结构图: Spring框架至今已集成了20多个模块,这些模块分布在以下模块中: 1、核心容器(Core Container):Spring的核心容器是其他模块建立的基础,有Spring-core、Spring-beans、Spring-context、Spring-context-support和Spring-expression(String表达式语言)等模块组成。 Spring-core模块:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。Spring-beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。Spring-context模块:建立在Core和Beans模块的基础之上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。Spring-context-support模块:支持整合第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCache、JCache)和任务调度(CommonJ、Quartz)的支持。Spring-expression模块:提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP2.1规范中规定的统一表达式语言(Unified EL)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量命名以及从Spring的IOC容器中以名称检索对象。它还支持列表投影、选择以及常用的列表聚合。 2、数据访问/集成(Data Access/Integration)层:数据访问/集成层由JDBC、ORM、OXM、JMS和事务模块组成。 Spring-jdbc模块:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析。Spring-orm模块:为流行的对象关系映射(Object-Relational Mapping)API提供集成层,包括JPA和Hibernate。使用Spring-orm模块可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,例如声明式事务管理功能。Spring-oxm模块:提供了一个支持对象/XML映射的抽象层实现,例如JAXB、Castor、JiBX和XStream。Spring-jms模块(Java Messaging Service):指Java消息传递服务,包含用于生产和使用消息的功能。自Spring4.1以后,提供了与Spring-messaging模块的集成。Spring-tx模块(事务模块):支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理。 3、WEB层:Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成。 Spring-web模块:提供了基本的Web开发集成功能,例如多文件上传功能、使用Servlet监听器初始化一个IOC容器以及Web应用上下文。Spring-webmvc模块:也称为Web-Servlet模块,包含用于web应用程序的Spring MVC和REST Web Services实现。Spring MVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成。Spring-websocket模块:Spring4.0以后新增的模块,它提供了WebSocket和SocketJS的实现。Portlet模块:类似于Servlet模块的功能,提供了Portlet环境下的MVC实现。 4、AOP(Aspect Oriented Programming)模块和植入(Instrumentation)模块 Spring-aop模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。Spring-aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。Spring-instrument模块:提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用。 5、消息传输(Messaging):Spring4.0以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。 6、测试(Test)模块 Spring-test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。 三、spring大家庭: 常用框架: 1.spring framework 也就是我们经常说的spring框架,包括了ioc依赖注入,Context上下文、bean管理、springmvc等众多功能模块,其它spring项目比如spring boot也会依赖spring框架。 2、springboot:它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。 3、spring Data:是一个数据访问及操作的工具集,封装了多种数据源的操作能力,包括:jdbc、Redis、MongoDB等。 4、spring cloud:是一套完整的微服务解决方案,是一系列不同功能的微服务框架的集合。Spring Cloud基于Spring Boot,简化了分布式系统的开发,集成了服务发现、配置管理、消息总线、负载均衡、断路器、数据监控等各种服务治理能力。比如sleuth提供了全链路追踪能力,Netflix套件提供了hystrix熔断器、zuul网关等众多的治理组件。config组件提供了动态配置能力,bus组件支持使用RabbitMQ、kafka、Activemq等消息队列,实现分布式服务之间的事件通信。 5、Spring Security:主要用于快速构建安全的应用程序和服务,在Spring Boot和Spring Security OAuth2的基础上,可以快速实现常见安全模型,如单点登录,令牌中继和令牌交换。可以了解一下oauth2授权机制和jwt认证方式。oauth2是一种授权机制,规定了完备的授权、认证流程。JWT全称是JSON Web Token,是一种把认证信息包含在token中的认证实现,oauth2授权机制中就可以应用jwt来作为认证的具体实现方法。 6、struts:是曾经非常火爆的web组合ssh中的控制层。我们知道web服务一般都采用MVC分层模型构建,就是model层负责内部数据模型,controller负责请求的分发控制,view层负责返回给用户展示的视图。struts实现的就是其中控制层的角色。 Struts采用Filter实现,针对类进行拦截,每次请求就会创建一个Action。使用struts的SSH组合已经逐渐被使用springMVC的SSM组合代替,也就是Spring-MVC+Spring+MyBatis的组合,一方面原因是由于struts对几次安全漏洞的处理,让大家对struts的信心受到影响;另一方面,springmvc更加的灵活,不需要额外配置,不存在和spring整合等问题,使用更加方便,所以建议以SSM框架的学习为主。 7、ORM:ORM就是对象关系匹配,是为了解决面向对象与关系数据库存在的互不匹配的问题。简单来说,就是把关系数据库中的数据转换成面向对象程序中的对象。常用的ORM框架有Hibernate和MyBatis,也就是ssh组合和ssm组合中的h与m。 四、

代码review

1.必填示例 屎山: if(!values.username){ this.$message.error("用户名不能为空") } else if(!values.password){ this.$message.error("密码不能为空") } else if(!values.phoneNumber){ this.$message.error("手机号不能为空") } else { this.submit(); } 作者:蚂小蚁 链接:https://juejin.cn/post/7246686667750785083 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 正确 const validators = [ { message: "用户名不能为空", required: true, key: "username" }, { message: "密码不能为空", required: true, key: "password" }, { message: "手机号不能为空", required: true, key: "phoneNumber" } ]; export default { methods: { validator(values) { const result = validators.some(el => { if (el.required && !values[el.key]) { this.

MySQL运维实战(2.4) SSL认证在MySQL中的应用

作者:俊达 引言 MySQL支持使用TLS协议进行通信,该协议在数据库通信中具有关键作用。首先,TLS能够加密客户端与服务端之间的通信数据,涵盖了客户端发送至服务端的SQL请求以及服务端返回给客户端的数据,从而确保敏感信息的保密性和完整性。除此之外,TLS还允许客户端验证服务端的身份,确保安全连接。同时,TLS还使得服务端能够验证客户端的身份,实现双向认证,从而进一步增强了通信安全性和互信性。这些TLS功能在MySQL通信中发挥着重要作用,为数据传输提供了必要的保护和验证机制。 1 Server端开启SSL 服务端默认已经开启SSL,可以通过如下命令查看是否支持SSL: 参数have_ssl为 YES | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | 参数说明: 参数说明have_openssl和have_ssl一样have_sslYES: 启用SSLDISABLED: 已经编译了SSL功能,但是没有开启ssl_caCA文件,默认是ca.pemssl_capathCA文件路径,默认为空。mysqld会从datadir查找ca.pemssl_cert服务端证书,默认server-cert.pem.ssl_cipherSSL加密方式,默认为空ssl_crlcertificate revocation lists文件,默认为空ssl_crlpathcertificate revocation lists文件路径,默认为空ssl_key服务端证书私钥,默认server-key.pem. server端启用SSL,需要ca.pem, server-cert.pem, server-key.pem 3个文件。 客户端需要有ca.pem, client-cert.pem, client-key.pem 3个文件。 2 客户端SSL 使用mysql客户端连接到服务端时,默认会使用加密通信, 登陆后输入 \s, 或者show status like ‘ssl_cipher’,如果看Cipher信息,说明连接已经开启加密通信

解锁测试性能瓶颈:深度探讨JMeter分布式性能测试!

在做后端服务器性能测试中,我们会经常听到'分布式'。但你是否了解分布式呢?今天,我们就来给大家讲讲,在企业实战中,如何使用分布式进行性能测试,实战过程中,又有哪些地方要特别注意? 01、为什么要使用分布式 做性能测试时,如果被测系统性能比较好,或者系统项目比较大,那么一般都会要求能支持比较高的并发用户数。而我们做性能测试时,发起请求的机器,硬件资源是一定的,不可能配置无限大。 所以,它能发起的并发用户数是有限的,而当我们发起方一台电脑能发起的并发用户数小于我们性能测试期望的并发用户数时,我们就会自然而然想到增加发起方的电脑。增加发起方电脑数量,那么,发起的并发用户数累加,就增大了。 发起方一台电脑,不管是 windows 系统还是 Linux 系统,一般而言,大概能支持 1.5k 左右并发用户,更多并发用户就要采用分布式。 那么,接下来的问题就是如何配置分布式? 02、如何配置分布式 助攻机配置,修改 jmeter.properties 文件 首先,我们准备多台机器,作为助攻机器; 然后,检查每台机器上是否安装了 JDK,并且 JDK 版本是否都一致; 然后,在助攻机器上放置相同版本的 jmeter; 接下来,配置 jmeter.properties 文件, 修改 server_port 端口,自定义一个端口 修改 server.rmi.ssl.disable=true 修改 server.rmi.port 端口 ---- 可选 启动服务:jmeter-server -Djava.rmi.server.hostname=ip_address 检查防火墙,关闭或开放 自定义的 server_port 端口 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛 分享他们的经验,还会分享很多直播讲座和技术沙龙 可以免费学习!划重点!开源的!!! qq群号:691998057【暗号:csdn999】 主控机器配置,修改 jmeter.properties 文件 修改 remote_hosts,值为助攻机器 ip 修改,server.rmi.ssl.disable=true 修改, mode=Standard 03、分布式机配置有哪些注意事项 分布式的配置,是不是很简单呢? 是的,这个配置实际上一点都不难,如果你要自己练手,按照上面的操作,就能很简单配置成功。但是,当你在企业项目中实战时,还会这么简单吗?如果你企业的项目,需要支持大几万的并发,要使用几十台助攻机器,是不是就简单重复上面的操作就可以了呢? 答案是否定的。 现在有几十台 Linux 机器,放在你面前,供你去配置为助攻机。数量比较大,完全无法保证每一台都一模一样,所以,我们先要检查机器配置。 1、硬件资源 CPU、内存是一台电脑的核心, 几十台机器,我们完全无法保证每一台都一样,在助攻机的要求中,虽然,没有对 CPU 和内存做要求,但是,如果每台机器能提供的资源不一样,那么能产生的并发用户数量肯定也会不相等。

Qt学习大全

写了很多博客,有时候自己都忘了写了啥,所以做一个目录进行查找。 ★QGraphicsItem实现不随场景缩放而缩放,支持任意图片,图形,文字。 ★Qt提升绘制效率,绘制加速。 ★Qt触摸屏双指缩放和单指移动界面(支持嵌入式设备) ★Qt判断一个点在多边形内还是外(支持凸边形和凹变形) ★Qt求多边形重心 ★QT实现凸凹边形等距缩放 ★Qt5和Qt6的区别 ★Qt自定义QSlider(支持水平垂直) ★Qt绘制自定义表盘 ★QListView的使用(正逆序插入) ★QT实现中英文键盘 ★QTableWidget逆序插入(高性能插入) ★QT之自定义表格控件 ★QT日志调试系统(前台、后台、文件查看调试信息) ★Qt 蓝牙实现连接 ★QT中代码设计和.ui文件设计的区别 ★QSS QCalendarWidget ★Qt绘制圆环(渐变圆环) ★sqlite3内存一直增长解决方法 ★QSS QTableWidget样式设置 ★QT自定义控件折线图、趋势图。 ★两种QGraphicsItem方式实现橡皮擦功能(矩形选中框) ★configure: error: cannot run C compiled programs ★linux交叉编译configure生成动态库失败 ★QT通过pro文件一键切换版本 ★QGraphicsItem设置不可被移动和指定鼠标可以点击按键 ★两点经纬度计算距离 ★Linux Qt cannot find -lGL错误完美解决方案 ★Qt中英文切换(涉及多种场景) ★获取U盘盘符名称(U盘设备名) ★Qt中的QTcpSocket、QWebSocket和QLocalSocket ★Qt获取本机电脑IP ★QString转为2进制,8进制,10进制,16进制介绍 ★Qt下的8字节转6字节,转4字节,2字节。 ★Qt任何位置获取启动参数 ★Qt进程通信之共享内存(QSharedMemory) ★xdotool按键模拟(linux) ★Qt模拟键盘单击、组合键、鼠标移动的多种实现方式 ★QDateTime的11种显示方式 ★QMap的升序排序,巧妙避开默认排序规则。 ★Qt BCC异或校验、LRC纵向冗余校验、CRC循环冗余校验 ★linux下qt无法使用fcix输入中文 ★Qt opencv编译详细教程 ★ubuntu下使用QMediaPlayer闪退。 ★QGroupBox超简洁实现自动收缩 ★QT实现窗口大小随分辨率变化而变化 ★QString自动补全 ★QT数据库的插入、更新、删除、查看的五种写法 ★去掉libpng warning: iCCP: known incorrect sRGB profile

用C语言采集游戏平台数据并做行业分析

目录 一、数据采集方法 日志采集 API采集 二、数据采集流程 确定采集目标 选择采集方法 编写采集程序 数据清洗和整理 三、行业分析方法 对比分析 趋势分析 分类分析 四、案例分析:基于C语言的实时游戏平台数据采集与行业分析系统实现 五、结论 随着游戏行业的快速发展,游戏平台数据的重要性日益凸显。通过数据,我们可以了解玩家的行为习惯、优化游戏体验,以及制定更有针对性的市场策略。本文将探讨如何使用C语言采集游戏平台数据,并基于这些数据进行行业分析。 一、数据采集方法 数据采集是数据分析的基础。对于游戏平台,我们需要采集多种类型的数据,如玩家行为数据、游戏内消费数据等。采集方法一般可分为两类:日志采集和API采集。 日志采集 日志采集是通过读取和分析服务器上的日志文件来获取数据。这些日志文件记录了游戏的各种活动,如玩家登录、购买物品等。使用C语言,我们可以编写程序定时读取这些日志文件,提取所需的数据。 API采集 API(应用程序编程接口)是一种规范,允许两个应用程序进行数据交换。许多游戏平台提供了API接口,允许开发者获取游戏数据。使用C语言,我们可以编写程序调用这些API接口,获取实时数据。 二、数据采集流程 确定采集目标 在采集数据之前,我们需要明确采集的目标。例如,我们可能想要了解玩家的活跃度、游戏内消费情况等。 选择采集方法 根据目标选择合适的采集方法。例如,对于玩家行为数据,我们可以使用日志采集;对于实时数据,我们可以使用API采集。 编写采集程序 使用C语言编写采集程序。如果是日志采集,程序需要定时读取日志文件;如果是API采集,程序需要调用API接口。 数据清洗和整理 采集到的原始数据可能存在异常值、缺失值等问题,需要进行清洗和整理。在C语言中,我们可以使用字符串处理函数、数组操作等对数据进行处理。 三、行业分析方法 完成数据采集后,我们需要对数据进行行业分析。常用的行业分析方法包括: 对比分析 对比分析是将不同时期、不同地区或不同指标进行比较,以发现数据的变化趋势。在C语言中,我们可以使用数组操作来实现对比分析。 趋势分析 趋势分析是通过数学模型对数据进行拟合,预测未来的发展趋势。在C语言中,我们可以使用线性回归、指数回归等数学模型进行趋势分析。 分类分析 分类分析是根据数据的特征将其分为不同的类别。在C语言中,我们可以使用聚类算法进行分类分析。常用的聚类算法有K-means、层次聚类等。 四、案例分析:基于C语言的实时游戏平台数据采集与行业分析系统实现 假设我们要实现一个基于C语言的实时游戏平台数据采集与行业分析系统。该系统需要从游戏服务器获取实时数据,进行行业分析,并输出分析结果。以下是一个简单的实现方案: 数据采集:使用C语言编写程序调用游戏平台的API接口,获取实时游戏数据。为了提高效率,可以使用多线程或异步I/O等技术。同时,需要处理网络通信、数据解析等问题。在C语言中,可以使用socket编程进行网络通信,使用字符串处理函数进行数据解析。 数据存储:将采集到的实时数据存储到数据库中。可以使用C语言中的数据库连接库(如MySQL Connector/C)进行数据库操作。同时需要考虑数据的存储效率和查询性能问题。在C语言中,可以使用数据库查询语句对数据进行筛选、排序等操作。 行业分析:根据存储在数据库中的历史数据和实时数据,使用C语言编写程序进行行业分析。可以采用对比分析、趋势分析和分类分析等方法。在C语言中,可以使用数组操作、数学函数和算法实现各种分析方法。同时需要考虑算法的效率和准确性问题。在C语言中,可以使用优化算法和数学库来提高效率和准确性。 结果输出:将分析结果以可视化的方式展示给用户。可以使用图表、表格等形式。在C语言中,可以使用第三方库(如Graphviz)生成图表。同时需要考虑结果的实时性和交互性问题。在C语言中,可以使用多线程或异步I/O等技术提高实时性,使用事件驱动编程实现交互性。 代码示例: #include <stdio.h> #include <string.h> #include <mysql/mysql.h> // 假设游戏平台提供了API接口,返回指定玩家的等级信息 int getPlayerLevel(const char* playerName) { // 这里是调用游戏平台API的代码 // ... // 假设返回值为30 return 30; } void storeData(const char* playerName, int level) { MYSQL *conn; char *server = "

Maple 2023下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

软件介绍 Maple是一个通用型的商用计算机代数系统,让数学问题的分析、探索、可视化及求解变得更为简便。包含高级数学计算功能、可视化、专业应用领域等众多新功能,对于数学家、教育工作者、工程师和科学家非常有用。 安装步骤 1.鼠标右击【Maple 2023】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Maple 2023】。 2.打开解压后的文件夹,鼠标右击【Setup】选择【以管理员身份运行】。 3.点击【OK】。 4.点击【Next】。 5.选择【I accept……】,点击【Next】。 6.修改路径地址中的第一个字符C可更改安装位置(如:把C改为D软件将安装到D盘),点击【Next】。 7.选择【Yes】,点击【Next】。 8.选择【single user……】,点击【Next】。 9.取消勾选【Enable periodic……】和【Check for ……】,点击【Next】。 10.点击【Next】。 11.安装中…… 12.取消勾选【Activate……】,点击【Finish】。 13.打开安装包解压后的【Maple 2023】文件夹,双击打开【Crack】文件夹。 14.选中该文件夹在的两个文件,鼠标右击选择【复制】。 15.鼠标右击桌面【Maple 2023】图标选择【打开文件所在的位置】。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9C0cNTka-1691748211325)(https://mmbiz.qpic.cn/mmbiz_png/mWLribm6sbwJF1HLrNfM2EarfP3wtkN7KfPZV2Pbnv9lugiaYQ6ML0yiaJXCWmicunn8tjwQGXZNrfF0lkRD92LLrA/640?wx_fmt=png)] 16.点击路径地址中的【Maple 2023】。 17.鼠标右击空白处选择【粘贴】。 18.点击【替换替换目标中的文件】。 19.双击桌面【Maple 2023】图标启动软件。 20.安装成功! 关于Python学习指南 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助! 包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python! 👉Python所有方向的学习路线👈 Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取) 👉Python学习视频600合集👈 观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 温馨提示:篇幅有限,已打包文件夹,获取方式在:文末 👉Python70个实战练手案例&源码👈 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 👉Python大厂面试资料👈 我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 👉Python副业兼职路线&方法👈 学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。 👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】 点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

4个原创技术文档,从Excel到MySQL到Python

2023马上就要结束了,回首这一年的工作和努力,我感到非常欣慰和自豪。在这段时间里,我专注于撰写原创技术文档,致力于为大家提供有价值的内容。 这四篇原创技术文档是我精心编写的,每一篇都经过了深入研究和详尽的实践。我希望通过这些文档能够以更通俗易懂的方式解释复杂的技术概念和原理,让读者能够轻松理解和应用。我深信,技术知识应该是开放和共享的,通过分享我的文档,我希望能够帮助更多人进一步拓展他们的技术能力和视野。 《Excel数据透视表大全手册》 《数据透视表大全》非常实用,不管你是人力资源专员、数据专员还是数据分析师,只要你与数据打交道,都会经常用到数据透视表。这份文档总共有136页,分为26个章节,使用图文教学的方式,帮助你逐步了解数据透视表的各个方面。只要你愿意阅读这份文档,相信你一定能够轻松掌握数据透视表的技巧。 《Mysql基础查询手册》 《Mysql基础查询手册》也非常强大,对于数据分析师来说是必备技能(超过80%的数据分析师都需要用到)。这份文档包含了MySQL基础的所有知识点,并且以通俗易懂的方式编写,使得学习更加轻松。文档共有51页,并且附带了方便查询和使用的目录页,非常实用。你一定值得拥有这份文档。 《Python基础查询手册》 《Python最强基础学习文档》真的太厉害了!不管你是学习Python数据分析、Python爬虫,还是Python开发,这份文档都比很多书籍写得更好。它是一份绝佳的Python基础入门文档,同时也是一本Python基础查询手册。文档共有66页,分为10个章节,采用图文教学的方式,帮助你逐步理解Python基础的各个知识点。只要你敢看这份文档,相信你一定能够轻松掌握Python,没有什么是学不会的! 《Python自动化办公手册》 《Python自动化办公系列文章》简直太棒了!总共有97页,分为6个章节。这些文章不仅提供了详细的代码解释,还用通俗易懂的图文说明,帮助你轻松完成办公自动化任务。无论你是想自动处理电子表格、发送电子邮件还是进行其他办公任务,这些文章都会给你带来很大的帮助。只要你按照文章中的指导,相信你一定能够轻松掌握Python自动化办公技巧! python使用openpyxl操作excel;python使用PyPDF2和pdfplumber操作pdf;python使用python-docx操作word;python使用python-pptx操作PPT;python如何自动收发邮件;python制作电话号码归属地查询工具;

记一次RabbitMQ服务器异常断电之后,服务重启异常的处理过程

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 机房突然停电,rabbitmq的主机异常断电,集群服务全部需要重启。但是在执行service rabbitmq-server start 启动主节点服务的时候,没有反应,服务没有启动,命令也执行卡住了。必须Ctrl+C结束进程: [root@master-2 rabbitmq]# service rabbitmq-server start Starting rabbitmq-server (via systemctl): ^C [root@master-2 rabbitmq]# 查看/var/log/rabbitmq/startup_log 发现有如下报错信息: [root@master-2 rabbitmq]# tail -1000 startup_log BOOT FAILED =========== Timeout contacting cluster nodes: ['rabbit@s1-1','rabbit@slave-2']. BACKGROUND ========== This cluster node was shut down while other nodes were still running. To avoid losing data, you should start the other nodes first, then start this one. To force this node to start, first invoke "

Wargames与bash知识09

Wargames与bash知识09 Bandit Level 16 关卡提示: 扫描服务器localhost(本地主机上)31000到32000范围内的端口,找出使用SSL唯一端口,将本级密码发送给这个端口获取下一级凭据。只有一个端口会提供下一个凭据,其他服务器只需将您发送给它的任何内容发送回您。 推荐命令: ssh, telnet, nc, openssl, s_client, nmap nc和nmap都可以扫描端口,前面已经谈过nc命令,让我们看看大名鼎鼎nmap命令: Nmap简介 Nmap,也就是Network Mapper,是Linux下的网络扫描和嗅探工具包。它由Fyodor编写并维护。由于Nmap品质卓越,使用灵活,它已经是渗透测试人员必备的工具。 其基本功能有三个: (1)是扫描主机端口,嗅探所提供的网络服务 (2)是探测一组主机是否在线 (3)还可以推断主机所用的操作系统,到达主机经过的路由,系统已开放端口的软件版本 Nmap命令常用格式 Nmap常用参数 1.执行快速扫描 使用以下参数可加快扫描速度: -sS:TCP SYN 扫描; -sT:TCP Connect 扫描; -sU:UDP 扫描; -T0~T5:设置不同级别的时间延迟。 2.隐藏IP地址 使用以下参数可隐藏源IP地址: -S:指定源IP地址; -D:伪装成其他IP地址。 l 3.指定端口范围 使用以下参数可指定端口范围: -p:指定单个端口或端口范围; –top-ports:指定前n个常见端口。 4.指定输出格式 使用以下参数可指定输出格式: -oA:同时输出到三个文件(XML、nmap、grepable)中; -oX:XML 格式输出; -oG:grepable 格式输出; -oN:普通文本格式输出。 Nmap演示 尝试使用本地端机扫描失败: gyj@guyanjun:~$ nmap bandit.labs.overthewire.org Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-05 09:38 CST Note: Host seems down.

copilot插件使用介绍

Copilot 是一款由 GitHub 和 OpenAI 共同开发的智能编程助手,可以根据您的输入快速生成代码片段。下面是 Copilot 插件的使用介绍: 1.安装插件: • 打开 Visual Studio Code(VS Code)编辑器。 • 进入扩展面板,搜索 Copilot 并安装。 2.配置 API 密钥: • 在 VS Code 编辑器中,使用快捷键 Ctrl + Shift + P 打开命令面板。 • 输入 Open Copilot Settings 并选择该选项。 • 在弹出的设置面板中,点击 Add Personal Access Token 按钮。 • 在打开的浏览器页面中,登录您的 GitHub 账号并授权 Copilot。 • 返回 VS Code 编辑器,将刚刚生成的 API 密钥粘贴到设置面板中。 3.使用 Copilot: • 在 VS Code 编辑器中打开一个代码文件。 • 在需要生成代码的位置输入代码片段的描述,例如 sort an array in ascending order。 • 在输入结束后,按下 Tab 键或点击弹出的提示框中的建议即可生成代码片段。 • Copilot 会根据您的描述自动推断代码的实现方式,并生成相应的代码。 4.

苹果Mac电脑PDF优化压缩推荐 Recompress中文 for Mac

Recompress采用了先进的压缩技术,能够智能地分析PDF文件并确定哪些内容可以进一步压缩以节省存储空间。中文界面:Recompress Mac版提供了符合国人浏览习惯的中文界面,使得用户在使用时更加方便。批量压缩:Recompress支持批量压缩PDF文件,能够同时压缩多个PDF文件,提高工作效率。自定义压缩选项:用户可以根据自己的需求自定义压缩选项,如压缩质量、输出格式等,以满足不同的需求。兼容性强:Recompress生成的PDF文件与各种应用程序兼容,能够满足用户的不同需求。 Recompress中文 for Mac下载

嵌入式Linux之MX6ULL裸机开发学习笔记(汇编LED灯点亮)

汇编LED驱动实验 1.驱动编写 首先创建在vscode上创建工作区,创建led.s汇编文件,然后编写以下程序 .global _start @全局标号 _start: /* 使能所有外设时钟 */ ldr r0,=0x020c4068 @CCGR0 ldr r1,=0xffffffff @要向CCGR0写入的数据 str r1,[r0] @将0xffffffff写入CCGR0中 ldr r0,=0x020c406c @CCGR1 str r1,[r0] ldr r0,=0x020c4070 @CCGR2 str r1,[r0] ldr r0,=0x020c4074 @CCGR3 str r1,[r0] ldr r0,=0x020c4078 @CCGR4 str r1,[r0] ldr r0,=0x020c407c @CCGR5 str r1,[r0] ldr r0,=0x020c4080 @CCGR6 str r1,[r0] /* 配置GPIO1_IO03 PIN的复用为GPIO,也就是设置 * IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 = 5 * IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03寄存器地址为 0x020e0068 */ ldr r0,=0x020e0068 @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 ldr r1,=0x5 @要写入的数据 str r1,[r0] @将0x5写入IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03中

autohotkey 改typora文本颜色

1,autohotkey 改typora文本颜色, 看到有的人失败了, 估计失败原因是,没回车, <font color='red'>改颜色</font>

千元成本搞定专业大模型,系统优化+开源大模型是关键 | 潞晨卞正达@MEET2024

编辑部 整理自 MEET2024 量子位 | 公众号 QbitAI 大模型元年里,哪怕是跑在趋势最前沿的基座模型厂商,都难逃算力焦虑。 一方面,大模型本身由于技术特性,算力需求翻倍增长;另一方面,算力供应紧张,“一卡难求”一度成为行业普遍现象。 但与此同时,趋势不等人。 所以如何高效利用好现有算力资源,成为许多厂商选择的路线,由此也带动AI加速方案、AI Infra成为业内热议话题。 那么专门提供加速方案的玩家,洞察到了哪些趋势?提出了哪些解决方案?就非常关键了。 比如潞晨科技CTO卞正达提到: 低成本迁移方案能利用开源模型快速打造垂类专业大模型。 潞晨科技通过打造分布式AI开发和部署平台,帮助企业降低大模型的落地成本,提升训练、推理效率,公司成立24个月内完成四轮融资,最近一笔为近亿元A+轮融资。 为了完整体现卞正达对大模型加速的思考,在不改变原意的基础上,量子位对他的演讲内容进行了编辑整理。希望也能给你带来新的启发。 关于MEET 智能未来大会:MEET大会是由量子位主办的智能科技领域顶级商业峰会,致力于探讨前沿科技技术的落地与行业应用。今年共有数十家主流媒体及直播平台报道直播了MEET2024大会,吸引了超过300万行业用户线上参会,全网总曝光量累积超过2000万。 演讲要点 大模型训练成本高,原因在于数据量大、部署难度高。 Colossal-AI的核心目标是最大限度帮助不同用户实现AI大模型应用落地,同时降本增效。 低成本迁移方案能利用开源模型快速打造垂类专业大模型。 利用分布式算法降低大模型落地门槛 各位好,我是潞晨科技的CTO卞正达,非常荣幸能来本次大会跟大家针对AI大模型的挑战与系统优化的问题来做一个交流。 我们公司的创立时间不是很长,团队也比较年轻。我们在尤洋教授(新加坡国立大学校长青年教授),以及伯克利的James Demmel教授的带领下,推出了Colossal-AI大模型的分布式的部署优化系统,目标是降低AI大模型具体落地的门槛和成本。 首先介绍一下大模型时代的一些背景,以及我们当初研发Colossal-AI系统的初衷。 回顾AI发展的历史,比如2016年当时火热的AI模型ResNet,只要花一张显卡几个小时就能把ResNet训练完。到了后来,BERT也是花一两天可以训练完。 但是今天,我们最近都被不同大模型刷屏,它们的研发成本已经在数量级上不可同日而语了。 比如谷歌的PaLM模型,如果用一张A100的显卡去训练,需要花费300年的时间,同时要花费超过900万刀的成本。 成本如此高是因为我们想要去训练一个高质量的大模型,首先训练的数据量非常多,其次想要部署大模型的训练、推理系统时,需要由上百张、上千张显卡组成的庞大集群,这个成本也非常可观。 因此我们推出了Colossal-AI这个系统,想要利用高效的分布式算法尽可能降低AI大模型的开发部署门槛,以及超高的成本。 我们框桥接上层AI应用,例如PyTorch、HuggingFace、Lightning,同时兼容底层的不同硬件的部署,比如说GPU、TPU、NPU等不同硬件,帮助用户完成部署。 Colossal-AI的核心目标是最大限度帮助不同企业、不同用户实现AI大模型应用的落地,同时帮助他们降本增效。 核心技术包括三个层面,分别是: 高效内存管理系统 N维并行管理系统 低延迟推理系统。 Colossal-AI目前在社区以及在学术界有一定影响力,并获得了一定的认可。我们GitHub上推出一年多时间收获了三万五千+star,我们核心工作也是被NeurIPS、SC、PPoPP等等顶尖的学术会议所接收。 下面我会具体介绍一下核心设计思路,解释Colossal-AI怎么实现降本增效。 如何高效训练和利用内存空间 第一个来看N维并行系统。 在开发Colossal-AI系统之前,市面上已经有各种场景下的并行技术,包括张量并行、流水线并行、数据并行等。 我们发现更多普通用户拿到实际需求以后,他很难去选择真正合适的并行方案,去转化成实际落地的解决方案。我们系统的核心思路就是,把目前最高效的并行技术整合到一套系统里,根据我们长期做系统优化的经验去帮助不同的用户选择合适的并行方案,同时提供最高效的落地实现。 比如说一维数据并行方面,我们成功利用LARS、LAMB优化技术,把batch size扩大到34k、64k。 要知道平常训练,batch size不会超过8k,它有一个泛化的门槛,如果batch size太大的话会导致最终泛化性不是特别理想。 我们通过LARS、LAMB这样的优化器更加细粒度地逐层微调学习率,就能实现将batch size扩展到更大的维度,也就是说只要有足够的显卡就可以尽可能缩短训练时间,例如当时尤洋教授成功把BERT训练时间压缩到一个多小时的程度,这个优秀的结果也是被非常多的企业所采纳,比如谷歌、Facebook、英伟达。 除此以外,我们还可以对大模型进行模型并行,包括张量并行,流水线并行等。 而对于长序列,还可以使用序列并行优化,不仅能够均匀地切分庞大的显存开销,同时也能实现高效的计算和通信。我特别提一下,像序列并行,我们也知道DeepSpeed里面有序列并行的思想。但如果仔细阅读过他们代码的话,会发现他们在计算Attention的时候,实际上序列这一维并不会切的。 在我们系统里,我们成功把序列这一维从始至终做一个切分的计算,这里面最重要的一点,Attention计算是需要对完整序列上进行操作的,我们通过环行算法成功把不同卡上的子序列完成Attention同步。经过这样的切分,只要我们的卡足够多的话,训练序列也是可以无限长,非常契合目前业界不断推出更长序列模型的趋势。 第二个高效的内存管理系统。 在深度学习的训练过程中,会发现计算比较重的部分集中于存储开销比较少的部分,反而存储开销比较大的部分都集中在优化器的参数更新上。 我们的思路把一些比较冗余的存储开销,放在比较便宜的存储设备上,比如说CPU存储设备上做一个缓存,GPU上放集中于计算的存储,成功降低大模型存储门槛。 在我们系统里,通过自适应管理系统实现更高效的参数存放。如果把所有的冗余存储都放到CPU上,会带来CPU和GPU之间频繁的数据移动,目前不同层级存储间的带宽还是存在瓶颈的,所以我们尽可能把存储放在GPU上,把超出上限这一部分放到CPU上做缓存,这样尽量减少数据移动,达到更加高效效果。 除此以外,我们实现了Chunk的管理系统。这里借鉴了一些思路,比如说PyTorchDDP里面,通过Bucket去释放一些通信的存储,让通信效率尽可能提高。同样思路我们可以应用在像Zero并行或者张量并行上面,通过Chunk把不同的Tensor聚合起来,对于异构存储也能够更加灵活管理。 下面可以看到通过上述系统优化,我们成功实现了训练推理加速,同时也降低了训练大模型硬件的门槛。 我们系统凭借低门槛、高效率特点,可以帮助我们快速跟进目前AI领域内一些比较热门的场景。比如在年初开源了ChatGPT RLHF完整方案,推出Colossal-Chat产品多轮对话功能。 同时我们在算法上也有丰富积累,不仅能复现,更能利用好目前丰富的开源大模型。 以增强英文基础模型LLaMA 2的中文能力为例,我们仅使用不超过8.5B token的数据量、千元的算力,就成功显著提升了LLaMA 2的中英能力。并且在效果上可以媲美和其他成本高昂的从头预训练中文大模型。 更重要的是,这套低成本方案可以以非常低的开发门槛,将开源大模型迁移到任意垂直领域中,带来低成本定制化高质量专业大模型。

斯坦福为懒人献上大礼!机器人洗衣做饭逗猫看呆网友,成本3万美元自己也能DIY...

克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 起床叠不叠被子的世纪之争,终于要有解了? 爆火的斯坦福全能家务机器人,那真是把网(lan)友(ren)们激动坏了。 不仅自己就能熟练做饭: 还会自己刷锅、收拾椅子: 在人类指导下,煮咖啡: 叠衣服: 连整理床铺、套枕套都能精准搞定: 浇花、拖地板、开瓶盖,甚至逗猫猫,只要人类能比出相应的动作,对Ta来说都不在话下…… 在这么一只“田螺机械臂”的背后,是斯坦福团队升级版机器人控制方案Mobile ALOHA。 上一代的ALOHA控制的还只有一组机械臂,只能在固定的位置做一些相对简单的工作。 现在它的协调性强到令人发指,网友们不禁感叹,机器人进化的速度实在是太快了! 在𝕏上,也有专业人士说,去年他曾认为这样的机器人会在3-5年内出现,这次的成果实在是难以置信。 PyTorch之父Soumith Chintala也称赞,这是一项很酷的新成果。 有人迫不及待地表示,自己的厨房里急需一个这样的机器人,求助哪里能买到。 对此,传奇程序员卡马克认为,人们可能有些过度乐观了,广泛通用型的机器人可能不会在AGI出现之前落地,但同时也表示自己愿意“被打脸”。 虽然量产可能还要等待些时日,但是作者给出了DIY教程,总成本大概只有32000美元,控制程序只要一台3070Ti的笔记本就能运行。 作者提供的装配方案使用了机械臂、移动平台等成品模块,如果能对这些组件进一步DIY,成本还能再降低不少。 △关于组装成本,官方清单显示为32000美元 支持自主学习,还能DIY ALOHA支持真人遥控操作和全自动两种工作模式。 只要我们不时对机器人进行训练,然后等Ta彻底学会,就可以连比划的过程都一起省了。 研究人员就发现,在堆满家具的复杂环境中,机器人系统仅通过少量的人类示教,就学会了各种复杂移动操纵任务,如叫电梯、开柜门、擦桌子等。 学习过程中,移动底座的速度与双手的14自由度等操纵信息,一同作为示范算法的输入,和ALOHA静态数据一起对系统进行联合训练。 而且该系统不仅兼容多种示教学习算法,而且对于用户而言,掌握教学的方法也十分容易。 而如果采用真人操作,Ta可以做出更为复杂的菜色。 只见Ta在操控之下,一气呵成地打鸡蛋、焯虾仁,翻炒,然后出锅装盘,熟练得和经验丰富的大厨毫无二致…… 新一代ALOHA在原有的机械手臂基础上,增加了一个差分驱动的移动底座。 这款底座是专为物流环境所设计的,移动速度为1.6米每秒,和人类的步行速度接近,可以承载100公斤的重物。 操控者的腰部与底座连接,可以直接反馈驱动轮子,实现移动控制;同时两只手控制机械手臂,完成全身协调操作。 自动模式下,这些操作则是由计算机完成。 此外,研究团队开源了全部的软硬件设计,包括机械结构、电路,以及训练所用的代码和数据,还有详细的DIY教程。 按照作者的教程,搭建这样一个机器人平台大概需要32000美元,大约相对于23万人民币,其中成本最高的是移动平台和机械臂,还有用于自动控制的电脑。 不过这些组件的价格变化也比较快,比如作者花了9000美元的移动平台现价降低了1000美元,机械臂的价格则涨了500多。 至于其他部件,除了电池贵一些需要699美元外,其余组件的美元价格均不超过三位数。 未来,研究者计划缩小机器人的体积,并提高手臂的自由度,软件层面也将让机器人学会自主探索…… 那么朋友,你心动了吗?(手动狗头) 官网地址(含论文、代码、教程): https://mobile-aloha.github.io/ 参考链接: https://twitter.com/zipengfu/status/1742602881390477771/

雷军说好的百万美金大奖双倍发放:造车与造OS,都离不开AI了

梦晨 发自 凹非寺 量子位 | 公众号 QbitAI 小米说好的年度百万美金技术大奖,今年雷军发了两百万。 造车与造操作系统两大难题双双突破,评委们都感觉压力很大,最后“一体化大压铸技术”团队与“小米澎湃OS新架构”团队共同领走奖金。 虽然两项大奖看似和AI没啥关系,但背后都有小米AI实验室的深度参与。 在颁奖后的交流环节中,获奖的工程师们透露: 无论搞硬件还是软件都离不开AI了,传统研发与AI深度融合的时代正式开启。 小米自研材料泰坦合金就用到了AI材料预测,才把研发时间大大缩短。 澎湃OS中的核心模块HyperMind,也是借助AI实现主动智能,学习用户习惯自动规划任务。 没有AI帮助不可能短时间做成汽车 一体化大压铸是推动汽车生产效率提升的一次制造革命。 通过巨型大吨位压铸机,将车身单独、分散的零部件多合一的集成化生产工艺。 小米超级大压铸全栈自研,不仅自研了材料,还自研了设备集群系统,几乎完成了大压铸产业链里所有环节的自研。 在材料方面,小米汽车大压铸团队与国家级的重点实验室一起合作,自研了多元材料性能AI仿真系统, 进行了1016万次模拟仿真实验,选出兼顾强度韧性和稳定性的最优合金配方小米泰坦合金。 在制造方面,小米超级压铸技术核心是一台拥有9100吨锁模力、重达718吨的大压铸机,相当于4台波音747的重量,围绕它的是超过60个设备,占地840平方米的大压铸设备集群。 除此之外,小米还自建了大压铸工厂,并且完成了大压铸产业链里几乎所有环节的自主开发。 小米集团汽车部副总裁于立国介绍,整个压铸的关键流程可以分解成4步: 首先融化原材料,保持温度的情况下取出。 高速把原材料推进模具,9100吨的压铸机保证材料充填 铝液从700度左右迅速凝固,100秒左右完成生产 最后对生产出来的部件做质检。 其中质检部分也离不开AI,压铸件如果有质量问题都是“内伤”,人肉眼是看不到的,需要做X光再借助AI迅速检测,保证良品率。 整个过程中AI团队遇到了很多从没遇到的问题。 以往图像识别算法学习人脸、动物等日常物体都是常规技术了。 学习金属的微观金相组织,铸造过程中气孔、缩孔的识别等,都是完全不同的新问题。 如果依靠用过去的方法,如果今天没有人工智能的帮助,是不可能在这么短时间算出来的。 AI给操作系统带来什么变化? 小米澎湃OS去年底随小米汽车一起亮相,也标志着从「手机xAIoT」战略升级来的「人车家全生态」战略正式完整闭环。 澎湃OS打通了小米汽车在内的200多个品类 ,能覆盖用户95%以上的生活场景。 操作系统与AI深入结合,可以充分调动身边设备的多模态感知能力,主动感知和学习人的日常习惯,主动提供自动化建议,让设备更懂人。 比如学习到用户在不同季节习惯将空调开到什么温度,系统就能自动调整,不用再去手动设置。 小米集团手机部软件部副总经理张国全介绍,在小米澎湃OS里重新设计AI技术架构,能够把大模型方便快捷部署在端侧。‍ 端云结合后,大模型在隐私、成本、效率上其实都能做到最优。 大模型加入后,对未来的人机交互带来什么变化?小米做出这样的预测: 原子化操作。手机端的细分功能以及海量IoT设备的操控,结合AI能力做到方便、快捷、主动操控。 复杂任务规划。手机和IoT设备带来多模态数据输入,依靠大模型为复杂任务提供精准规划。 更多的端侧大模型。手机已经是最了解人们自己的设备,在隐私数据不上传到云端的前提下,端侧大模型最终能成为最贴心的个人助理。 — 完 — 点这里👇关注我,记得标星哦~

安卓多用户管理之IUserManager.AIDL

目录 前言一、API接口功能简介1.1 创建用户1.1.1 创建一个新的用户1.1.2 预创建一个新的用户,但不立即激活 1.2 创建用户配置文件1.2.1 创建一个配置文件1.2.2 创建一个受限配置文件1.2.3 即使被禁止也为用户创建配置文件 1.3 指定、设置用户信息1.3.1 设置用户的名称1.3.2 设置用户的图标1.3.3 设置指定用户的用户账户名称1.3.4 设置指定用户的用户限制1.3.5 设置指定应用程序的限制1.3.6 启用指定用户1.3.7 将指定用户设置为管理员用户1.3.9 清除指定用户的凭证加密密钥1.3.10 移除指定用户1.3.11 即使被禁止,也移除指定用户1.3.12 添加用户限制监听器1.3.13 设置默认访客用户的限制1.3.14 标记访客用户以便删除1.3.15 请求启用/禁用静默模式 1.4 获取用户信息1.4.1 获取用户的图标1.4.2 获取主用户的信息1.4.3 获取用户列表1.4.4 获取用户的配置文件列表1.4.5 获取用户的配置文件 ID 列表1.4.6 获取用户的配置文件的父用户信息1.4.7 获取用户的创建时间1.4.8 获取指定用户的信息1.4.9 获取指定用户的序列号1.4.10 获取指定应用程序的限制1.4.11 获取指定用户的指定应用程序的限制1.4.12 根据用户序列号获取用户 ID1.4.13 获取指定用户的用户账户名称1.4.14 获取指定用户受限制的限制源1.4.15 获取指定用户受限制的限制源列表1.4.16 获取指定用户的限制1.4.17 获取当前用户的用户名1.4.18 获取默认访客用户的限制1.4.19 获取用户启动的实时时间1.4.20 获取用户解锁的实时时间 1.5 检查用户相关信息1.5.1 检查是否可以向指定用户添加更多配置文件1.5.2 检查是否可以向指定用户添加更多受管理的配置文件1.5.3 检查两个用户是否属于同一个配置文件组1.5.4 检查指定用户是否具有基本用户限制1.5.5 检查指定用户是否属于指定的用户类型1.5.6 检查指定用户是否具有用户限制1.5.7 检查任何用户是否具有指定的用户限制1.5.8 检查当前用户是否受到限制1.5.9 检查指定用户对于指定设置是否受限制1.5.10 查指定用户是否可以拥有受限制的配置文件1.5.11 检查指定用户是否为演示用户1.5.12 检查指定用户是否为托管配置文件用户1.5.13 检查指定用户是否为预创建用户1.5.14 检查指定用户是否启用了安静模式1.5.15 检查指定用户是否正在解锁或已解锁1.5.16 检查指定用户是否为配置文件用户1.5.17 检查指定用户是否已解锁1.

限制选中指定个数CheckBox控件(1/2)

限制选中指定个数CheckBox控件(1/2) 实例需求:工作表中有8个CheckBox控件(下文中简称为控件),现在需要实现限制用户最多只能勾选4个控件。 Dim OnDic As Object Sub CheckboxeEvent() Dim oCB As CheckBox, OnCol As Collection Dim oSht As Worksheet Const MAX_CHECKED As Long = 4 Set OnCol = New Collection Set oSht = Worksheets("Sheet1") If OnDic Is Nothing Then Set OnDic = CreateObject("scripting.dictionary") For Each oCB In oSht.CheckBoxes If oCB.Value = xlOn Then OnDic(oCB.Name) = "" Next End If For Each oCB In oSht.CheckBoxes If oCB.Value = xlOn Then OnCol.

HPE惠普巡检工具OneView试玩

安装 使用PVE虚拟机(Exsi也可以)安装 ,下载ova文件 下载地址:https://www.hpe.com/us/en/resources/integrated-systems/oneview-trial.html 这里如果是KVM就下载KVM版本的 安装过程就不展示了 ,正常导入镜像就可以,这里磁盘要选IDE模式的,其他会找不到磁盘。 注意: 保证 网卡信息无误,再开机,如果没有网卡无法开机 开机: 进入系统,自动初始化 系统准备 (这里要等很长很长很长时间。。。看网络波动应该是下载了一些东西 ) 启动资源管理器 接受协议 启动什么什么官方服务来着,接受 选择中文,登录初始的账号是Administrator 密码:admin 修改新密码 7. 配置新的网络地址和主机名即可进入 在浏览器直接输入主机ip,即可进入管理页面 打开引导设置,可以说非常全了 添加ioL

Unity 0GC或者最大限度降低GC方案

文章目录 GC带来的问题性能瓶颈玩家体验受损 优化关键点1. **对象池技术**:2. **内存管理优化**:3. **UGUI优化**:4. **ECS架构下的优化**:5. **资源管理**:6. **自定义数据结构与算法**:7. **开启增量GC(Incremental GC)**:8. **代码审查与性能分析**:9. **重用组件与MonoBehaviour实例**:10. **静态化与缓存**:11. **资源预加载**:12. **避免大型集合的操作**:13. **使用StructLayout.Pack / StructLayout.Explicit**:14. **弱引用与事件处理**:15. **自定义内存管理**: Unity中垃圾回收(GC)频繁发生,会给游戏带来以下显著问题: GC带来的问题 性能瓶颈 GC暂停主线程执行:当.NET的垃圾回收器开始工作时,它会暂时挂起所有程序执行以进行内存清理和整理。这意味着游戏逻辑、物理计算、渲染等都会被迫暂停,这会导致帧率下降或卡顿,影响游戏流畅度。 帧时间不一致: 由于GC的发生不可预知,其带来的延迟可能导致每一帧的时间长度不稳定,这对于实时交互的游戏体验尤其不利,特别是在需要保持稳定刷新率(如60fps)的场景。 玩家体验受损 突然的卡顿会影响玩家沉浸感,并可能导致在关键的游戏时刻出现响应延迟,比如战斗中的操作反馈或者复杂场景加载时的视觉表现。 资源浪费: 频繁的内存分配与回收也会增加系统的内存管理开销,导致整体系统效率降低,可能消耗更多的CPU周期和其他系统资源。 潜在的内存泄漏: 如果因为编程习惯不良而导致大量短生命周期对象不断产生并触发GC,则可能存在未被正确释放的内存,久而久之可能会引发内存泄漏,使得可用内存逐渐减少,最终导致游戏崩溃或其他严重问题。 因此,在Unity开发中,开发者需要密切关注代码设计,采用合适的数据结构、内存管理和对象池技术来最小化临时对象的创建和销毁,从而最大限度地减少对GC的依赖。 在Unity中实现0GC(零垃圾回收)的目标,主要是为了避免频繁触发.NET的垃圾回收机制,因为垃圾回收会导致短暂的帧率下降和性能波动。 优化关键点 1. 对象池技术: 对于生命周期短但创建销毁频繁的对象,如子弹、特效等,可以使用对象池来复用这些对象而不是每次需要时都创建新的实例。 2. 内存管理优化: 避免临时字符串或数组的频繁拼接,可使用预分配缓冲区或者专门设计用于无GC操作的字符串库(例如zstring或OneString)。长期使用的数据结构尽可能预先分配足够的空间,并避免动态扩容导致的内存碎片和GC压力。 3. UGUI优化: 在Unity UGUI开发中,确保对UI组件进行适当的缓存和重用,减少动态创建和销毁GameObject的行为。使用容器组件(比如CanvasScaler, LayoutGroup)时注意它们可能引发的不必要的布局计算和重建,采用UpdatePanelZeroAlloc这样的工具或方法来避免更新视图过程中的临时对象生成。 4. ECS架构下的优化: 使用Entity Component System (ECS) 架构,如Unity DOTS,通过实体和组件的集合式处理来降低GC负担。在ECS框架下,避免使用托管引用类型作为组件内容,转而使用值类型或结构体以保持堆栈分配。 5. 资源管理: 合理加载和卸载资源,利用AssetBundle和对象池策略减少运行时资源加载带来的内存分配。尽量避免大量小型纹理合并为 atlases 或使用Texture Atlas来减少内存碎片和GC调用。 6. 自定义数据结构与算法: 有时需要设计特定的数据结构和算法,使得它们在执行过程中不产生中间临时对象,从而避免GC。 7. 开启增量GC(Incremental GC): Unity引擎支持开启增量GC模式,在某些情况下可以将垃圾回收的工作分散到多个帧上,减轻单次回收带来的卡顿感。 8. 代码审查与性能分析: 使用Unity Profiler或其他性能分析工具追踪内存分配情况,定位并修复内存泄漏问题以及不必要的内存分配来源。 总之,实现0GC是一个持续性的性能优化过程,需要结合具体项目情况进行细致的设计和调整。同时,虽然追求0GC是提升性能的一个手段,但在实际开发中往往难以完全避免GC,关键是合理管理和控制GC的影响范围及频率。

聊一聊 C# 线程切换后上下文都去了哪里

一:背景 1. 讲故事 总会有一些朋友问一个问题,在 Windows 中线程做了上下文切换,请问被切的线程他的寄存器上下文都去了哪里?能不能给我挖出来?这个问题其实比较底层,如果对操作系统没有个体系层面的理解以及做过源码分析,其实很难说明白,这篇我们就从.NET高级调试的角度试着分析一下吧。 二:寄存器上下文去哪了 1. 用户线程的两态空间 用C#代码创建的线程在操作系统层面上来说属于 用户态线程,这种线程拥有两个线程栈,哈哈,是不是打破了一些朋友的三观。分别为 用户态栈 和 内核态栈。 为了方便讲解,写一段简单的测试代码,不断的调用 Sleep(1) 让代码在用户态和内核态不断的切换,也就能观察得到这两套栈空间,参考代码如下: static void Main(string[] args) { for (int i = 0; i < int.MaxValue; i++) { Thread.Sleep(1); Console.WriteLine($"i={i}"); } } 将程序跑起来后我们用 windbg 附加,观察这个程序的上下文,参考如下: 0: kd> !process 0 2 ConsoleApp7.exe PROCESS ffffe00185e33440 SessionId: 2 Cid: 0f4c Peb: 7ff73b7a8000 ParentCid: 15f4 DirBase: 1573c1000 ObjectTable: ffffc00165357840 HandleCount: <Data Not Accessible> Image: ConsoleApp7.exe THREAD ffffe0018917a080 Cid 0f4c.0f50 Teb: 00007ff73b7ae000 Win32Thread: ffffe00185e3db20 WAIT: (DelayExecution) UserMode Alertable ffffffffffffffff NotificationEvent .

IOS:Safari无法播放MP4(H.264编码)

一、问题描述 MP4使用H.264编码通常具有良好的兼容性,因为H.264是一种广泛支持的视频编码标准。它可以在许多设备和平台上播放,包括电脑、移动设备和流媒体设备。 使用caniuse查询H.264兼容性,看似确实具有良好的兼容性: 然而,今天的前端小伙伴报告IOS上遇到MP4无法播放,而Android上能正常播放。 二、问题调查 考虑一下方面(相关信息可参阅Why and How to Solve MP4 not Playing on iPhone Error?): MP4 中的编解码器不兼容。MP4 是一种容器格式,可以包含各种视频和音频编解码器。如果 MP4 文件使用 iPhone 不支持的编码格式,iPhone 将无法播放该 MP4 文件。MP4 文件已损坏。在 MP4 视频录制、传输或下载过程中,文件可能会损坏或损坏。在这种情况下,MP4 文件将无法在 iPhone 以及其他媒体播放器上播放。MP4 视频分辨率、FPS 或比特率太高。有时,您可以在 iPhone 上播放 MP4,但播放时出现断断续续的情况。这是因为您的 MP4 视频为 4K/8K 分辨率,并且具有高 FPS 或比特率。 4.您使用的是旧iPhone。iPhone 7 之前的旧版 iPhone 手机无法播放使用 HEVC 编码的 MP4。本机视频或电视应用程序不支持 MP4。iPhone 上的本机视频或电视应用程序不支持 MP4 播放。在这种情况下,建议您下载第三方媒体播放器。 确定文件没问题,可以排除MP4文件损坏,那么可以排除以下几点: 1.MP4文件的编码 确认文件编码格式是否为H.264(目前H.265有比较大的兼容问题),那么如何确定文件的编码格式呢? (1)mp4box.js查看MIME 测试网址:https://gpac.github.io/mp4box.js/test/filereader.html 如果一个MP4视频文件的编码格式为H.264,则其MIME是会包括avc这个字符串的,因此我们可以通过判断MIME中是否包含"avc"从而进行H.264视频编码格式的判断。例如: 不能在线播放的:audio/mp4; codecs="mp4v,mp4a.40.2,tmcd"; profiles="isom,iso2,mp41" 能在线播放的:video/mp4; codecs="avc1.640028,mp4a.40.2,tmcd"; profiles="isom,iso2,avc1,mp41" (2)利用视频播放软件查看 ①PotPlayer

【本科生通信原理】【实验报告】【北京航空航天大学】实验一:通信原理初步

一、实验目的: 熟悉 MATLAB开发环境、掌握 MATLAB基本运算操作;熟悉和了解 MATLAB图形绘制基本指令;熟悉使用 MATLAB分析信号频谱的过程;掌握加性白高斯噪声信道模型 二、实验内容: 三、实验程序: 1、 function q1() x = 0 : 0.0001 : 2 * pi; y1 = 2 * exp(-0.5 * x); y2 = cos(4 * pi * x); figure; plot(x, y1); hold; plot(x, y2); xlabel("x", "FontName", "Times New Roman", "FontSize", 12); ylabel("y", "FontName", "Times New Roman", "FontSize", 12); legend("FontName","Times New Roman", "FontSize", 10, "LineWidth", 1.5); legend("y1", "y2"); title("q1"); axis([0 2 * pi -1.1 2.

Codeforces Round 911 C. Anji‘s Binary Tree

原题: C. Anji’s Binary Tree time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output Keksic keeps getting left on seen by Anji. Through a mutual friend, he’s figured out that Anji really likes binary trees and decided to solve her problem in order to get her attention. Anji has given Keksic a binary tree with n vertices. Vertex 1 is the root and does not have a parent.

书生·浦语大模型实战1

书生·浦语大模型全链路开源体系 视频链接:书生·浦语大模型全链路开源体系_哔哩哔哩_bilibili 大模型之所以能收到这么高的关注度,一个重要原因是大模型是发展通用人工智能的重要途径 深度信念网络: (1)又被称为贝叶斯网络,是一种有向无环图 (2)可以在任意叶子节点生成无偏的样本集合 (3)通过不断积累RBM(受限玻尔兹曼机)形成。每当一个RBM被训练完成时,其隐藏单元又可以作为后一层RBM的输入 (4)DBN的基本思想是允许每一次RBM模型接收数据的不同表示 书生 · 浦语大模型开源历程 书生 · 浦语大模型系列 已经完成了覆盖轻量级、中量级、重量级的一套系列 InternLM-7B:方便部署,社区低成本可用最佳模型规模 InternLM-20B:商业场景可开发定制高精度,较小模型规模 InternLM-123B:通用大语言模型能力全面覆盖,千亿模型规模 书生 · 浦语20B开源大模型性能 在综合考试、知识问答、阅读理解、推理、编程等任务中展现的能力都要超过相近量级的其他模型 值得一提的是InternLM-20B以不到三分之一的参数量,达到了Llama2-70B的水平,在很多数据集上能够接近甚至超越 从模型到应用 这是一个比较典型的例子: 我们从开源社区提供的开源模型中关注模型的能力,比如在不同维度上的的能力、针对应用场景比较相关的能力 如果业务场景比较复杂,直接用开源模型可能没法满足需求,需要微调;如果业务场景比较简单,我们可以通过一些prompt engineering的方式,把模型接入到业务场景 在某些业务场景中需要与外界环境交互,比如需要调用外部的一些API或者和已有的业务数据库进行交互,这时构建一个Agent在业务场景会有更好的表现 书生·浦语大模型全链路开源体系 针对模型到应用的过程,开源了书生·浦语大模型全链路开源体系 Lagent是一个轻量级的Agent搭建框架 AgentLego提供了供大模型调用的工具箱 数据 预训练 微调 评测 部署 智能体

git 使用场景 本地分支 关联 远程分支

本地分支关联远程分支 # 同名时 git push --set-upstream origin release 将本地分支 与 远程同名分支 相关联 git push -u origin release (git push --set-upstream origin release 缩写版本) # 不同名时 git branch --set-upstream-to=origin/release2 release3 本地release3分支 和 远程origin/release2分支 建立关联 git push origin HEAD:release2 分支名不同名时 push代码的方式 建立起联系后 1. .git/config配置文件 会追加 如下关联关系,故后续可以直接执行 git push [branch "release"] remote = origin merge = refs/heads/release 2. .git\refs\remotes\origin 里会追加文件 release [Ref] git push -u origin master 与git push --set-upstream origin master

Linux上搭建YApi

YApi是http接口管理和测试的重要工具,其作用相当于原来用的postman,但是比postman有更多的功能,本篇文章主要介绍如何在linux环境中快速的安装(利用yum命令安装)和部署YApi 一、nodejs 安装 1.1 下载nodejs包 yum install -y nodejs yum install -y npm 安装完成后可以用 node -v命令查看安装是否成功 二、安装MongoDB 2.1、添加mongodb源文件,在/etc/yum.repos.d 创建一个 mongodb-org.repo 文件 touch /etc/yum.repos.d/mongodb-org.repo 2.2、在mongodb源文件中添加镜像地址 vim /etc/yum.repos.d/mongodb-org.repo 内容如下: [mongodb-org] name=MongoDB Repository baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/3.2/x86_64/ gpgcheck=0 enabled=1 2.3、使用yum安装MongoDB yum install -y mongodb-org 2.4、验证 执行如下命令,验证是否安装成功 rpm -qa |grep mongodb rpm -ql mongodb-org-server 执行如下结果代表安装成功,这里也可以看到安装的位置 2.5、启动MongoDB service mongod start 如果出现以下错误 解决方法如下: 1、首先将mongo设置为服务 编辑/usr/lib/systemd/system/mongod.service文件, vim /usr/lib/systemd/system/mongod.service 在文件中添加如下内容 [Unit] Description=mongodb database [Service] User=mongod Group=mongod Environment="OPTIONS=--quiet -f /etc/mongod.conf" ExecStart=/usr/bin/mongod $OPTIONS run PIDFile=/var/run/mongodb/mongod.

kubernetes(一)概述与架构

云原生实战 · 语雀 官网 Kubernetes 文档 | Kubernetes 更新:移除 Dockershim 的常见问题 | Kubernetes B站课程:https://www.bilibili.com/video/BV13Q4y1C7hS/?p=26 1.概述 概述 | Kubernetes 大规模容器编排系统 kubernetes具有以下特性: 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。存储编排 Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。自动部署和回滚 你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。自动完成装箱计算 Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。自我修复 Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。密钥与配置管理 Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。 Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary 部署。 2.架构 2.1 工作方式 Kubernetes Cluster = N Master Node + N Worker Node

kubernetes(二)创建集群

kubernetes(一)概述与架构 云原生实战 · 语雀 官网 Kubernetes 文档 | Kubernetes 更新:移除 Dockershim 的常见问题 | Kubernetes B站课程:https://www.bilibili.com/video/BV13Q4y1C7hS/?p=26 安装版本说明: 视频教程安装Docker指定版本20.10.7(我实际安装24.0.7,并装了cri-dockerd版本v0.3.8) 视频教程安装kubelet、kubeadm、kubectl指定版本1.20.9(我实际安装1.28.2) 视频教程安装网络组件为calico版本v3.20(我实际安装kube-flannel版本v0.22.0) 视频教程安装dashboard指定版本v2.3.1(我实际安装v2.7.0) 3.kubernetes创建集群 弹幕:想省钱的可以看看阿里云的抢占式实例,选性能突发实例t6,2核4G一个小时0.04元,花几块钱够玩好几天 3.1 安装Docker 请参照以前Docker安装。先提前为所有机器安装Docker 本视频教程安装Docker指定版本20.10.7(而我实际安装24.0.7) yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6 3.2 安装cri-dockerd 若Kubernetes版本在v1.24及以上,想使用Docker,所有机器需额外安装cri-dockerd。 cri-dockerd 是一种基于 Docker 的容器运行时实现,它通过实现 CRI 接口,使 Kubernetes 能够与 Docker 进行交互,创建和管理容器 将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd | Kubernetes 容器运行时 | Kubernetes 按照源代码仓库中的说明安装 cri-dockerd。 对于 cri-dockerd,默认情况下,CRI 套接字是 /run/cri-dockerd.sock 下载安装并启动 # 直接点击下载丢到服务器,网络好的话可以直接服务器执行以下命令下载 sudo wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8-3.el7.x86_64.rpm # 通过rpm安装 -i安装软件包 -v显示详细的安装过程 -h显示进度条 sudo rpm -ivh cri-dockerd-0.

【MyBatis】MyBatis基础操作

文章目录 前言注解方式书写 MyBatis打印 MyBatis 日志参数传递MyBatis 增加操作返回主键 MyBatis 删除操作MyBatis 修改操作MyBatis 查找操作1. 对查询结果进行别名2. @Results注解3. 开启驼峰命名(推荐) XML 配置文件方法书写 MyBatis配置数据库的相关配置指定XML的文件路径xml 实现增加操作删除操作修改操作查找操作1. 别名2. 定义 result3. 开启驼峰命名 前言 前面我们学习了什么是 MyBatis,为什么要使用 MyBatis,如何创建 MyBatis 环境,并且了解了使用单元测试对代码功能进行测试。那么今天这篇文章将为大家分享关于 MyBatis 的基础操作。 书写 MyBatis 的方法有两种:注解和XML的方法,这里我们两种方法都是给大家写到。 注解方式书写 MyBatis 打印 MyBatis 日志 前面文章中也提到了日志对于我们开发人员的重要性,在使用 MyBatis 框架的过程中,我们同样也可以看到执行 MyBatis 代码的过程中产生的日志。 那么如何打印出 MyBatis 日志呢?我们需要在配置文件中添加配置项来告知 Spring,我们需要知道 MyBatis 代码执行过程中产生的日志。 mybatis: configuration: # 配置打印 MyBatis⽇志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 添加这个配置了之后,我们在启动项目就会发现,MyBatis 执行过程中的日志就可以看到了。 参数传递 假设我们需要查询 id 为 4 的用户的信息的时候,对应的 SQL 语句就是 select * from userinfo where id=4;,对应到我们的 MyBatis 就是这样的。

分享一份适合单片机工程师的嵌入式 Linux 学习计划!

俗话说万事开头难,刚开始的时候,你是否根本就不知如何开始,上网查资料被一堆堆新名词搞的找不到北,去图书馆看书也是找不到方向?又是arm,又是linux,又是uboot头都大了,不知道自己究竟从哪里开始? 下面就跟着我学习设计嵌入式工程师的修炼日记吧! 简单说,从arm基础知识到裸机编程,从uCOSII到linux,从linux基础的命令到shell编程,从u-boot到文件系统,最后到现在的linux驱动程序。从简单到复杂,从基础到高级基本是按照这个来的。 01 第一阶段:嵌入式硬件基础以及裸机程序开发 1.知识点: (1) arm处理器基础知识,工作模式,寄存器,中断与异常,寻址方式,汇编指令集 (2) 熟悉ADS集成开发环境为裸机程序开发做准备 (3)裸机程序开发:LED,串口,LCD,触摸屏,NANDFLASH,IIC,IIS,DMA等 2.过程以及目的: 这一阶段的学习主要是熟悉嵌入式的硬件,为以后的linux驱动打基础。因为嵌入式主打处理器架构就是arm,所以针对arm来学习。首先学习基础知识,然后通过在开发板上的练习来掌握。这一阶段所用的资料主要有: (1) 《ARM嵌入式基础教程》 这本书主要看arm基础的知识。这本书是讲arm7的,但是arm的基础的指令集以及模型是一样的。 (2) 《嵌入式linux应用开发完全手册》 这本书主要看介绍s3c2410接口模块的部分,实验裸机的时候需要硬件的知识。 3.所用时间:大约两个月。 02 第二阶段:linux基础以及shell编程 1.知识点: (1) linux基础知识 (2) linux安装与使用 (3) linux常用命令 (4) vi使用 (5) 简单shell编程 2.过程以及目的: 这一阶段的学习主要是熟悉linux,会安装linux,了解Linux的基础知识,会简单的操作。刚开始安装linux还是在虚拟机上安装比较好,安装开发板推荐的Fedora9,按照开发板配套的说明一步一步的安装,然后在上面练习各种命令。 这一阶段主要要看《鸟哥的linux私房菜基础学习篇》,这个书有电子版,也不用全看,主要是看前面对Linux基础知识的描述,以及基本的命令。命令只是了解,那么多记也记不下来,以后用时再查阅。这一阶段主要目的是对linux有一个整体的了解,最起码要知道基础的一些概念,还有会一些基本的操作。 3.时间:大约一个月。 03 第三阶段:linux应用程序基础开发 1.知识点: (1) GCC,GDB,Make 基础 (2) 文件,时间编程 (3) 多进程,多线程程序设计 (4) 进程间通信 2. 过程以及目的: 这一阶段的学习主要是了解linux应用程序的编写调试,也都是基础知识,主要目的还是熟悉Linux。熟悉其中应用程序有关的一些概念,为以后打基础。这一阶段主要看了《嵌入式Linux应用程序开发标准教程》,这本书对linux上应用程序编写讲的很详细,而且不是很难,那本最经典的《UNIX高级环境编程》讲的比较深入,刚开始看有点难,万事开头难还是从简单的开始。学习应用编程以后也不一定搞应用,从事嵌入式linux行业的人,这是必须的基本技能。 3. 时间:大约一个月 04 第四阶段:uCOSII操作系统学习 1.知识点: (1)嵌入式实时操作系统的概念以及基础知识 (2)uCOSII操作系统源代码阅读 (3)移植uCOSII (4)uCOSII操作系统应用编程 2.过程以及目的: 这一阶段的学习主要是了解嵌入式实时操作系统的基础,因为uCOSII是开源的,可以研究他的代码。对操作系统的任务调度以及资源管理有直观的认识。并且阅读他的源码能够提高自己的编程能力,规范自己的编程习惯。虽然提供了uCOSII的移植版本,但是自己实际移植一次能够有更深刻的认识。 这个操作系统比较简单,所以应用程序的编写就很重要,在上面实现几个功能还是有助于对系统的理解。这一阶段主要看的就是邵贝贝翻译的uCOSII作者所著的《嵌入式实时操作系统uCOS-II》,里面对操作系统的源码有详细的分析。看透这本书后就会对uCOSII有一个深入的了解。 这一阶段的主要目的是了解操作系统的知识,比如任务调度,并发与竞态。还有一个目的就是锻炼自己的编程能力。因为如果看介绍操作系统原理的书会比较枯燥,我感觉阅读一个操作系统的源码比看一千本介绍原理的书来的实惠的多。 3.时间:大约一个月 05 第五阶段:bootloader学习 1.知识点:

FreeRTOS——软件定时器知识总结及其实战

1.软件定时器概念 是指具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息。 2 软件定时器使用特点 1)如果要使能软件定时器,需将configUSE_TIMERS 配置项配置成 1 2)软件定时器支持设置成:单次定时器或周期定时器 3)软件定时器的超时回调函数是由软件定时器服务任务调用的,软件定时器的超时回调函数本身不是任务,因此不能在该回调函数中使用可能会导致任务阻塞的 API 函数。 3 软件定时器服务任务 在调用函数 vTaskStartScheduler()开启任务调度器的时候,会创建一个用于管理软件定时器的任务,这个任务就叫做软件定时器服务任务。 其作用: 1、负责软件定时器超时的逻辑判断 2、调用超时软件定时器的超时回调函数 3、处理软件定时器命令队列 4软件定时器相关配置 1)当FreeRTOS 的配置项 configUSE_TIMERS 设置为1,在启动任务调度器时,会自动创建软件定时器的服务/守护任务prvTimerTask( ) ; 2)软件定时器服务任务的优先级为 configTIMER_TASK_PRIORITY = 31; 3)定时器的命令队列长度为 configTIMER_QUEUE_LENGTH = 5 ; 注意事项:软件定时器的超时回调函数是在软件定时器服务任务中被调用的,服务任务不是专为某个定时器服务的,它还要处理其他定时器。因此调用的回调函数不能被阻塞,要求如下: 1、回调函数要尽快实行,不能进入阻塞状态,即不能调用那些会阻塞任务的 API 函数,如:vTaskDelay() 2、访问队列或者信号量的非零阻塞时间的 API 函数也不能调用。 5软件定时器的状态 休眠态:当指定时间到达之后,但因为没有运行,所以其定时超时回调函数不会被执行。 运行态:运行态的定时器,当指定时间到达之后,它的超时回调函数会被调用。 注意: 刚创建的软件定时器处于休眠态 6 软件定时器的状态转换 7 软件定时器结构体 typedef struct { const char * pcTimerName /* 软件定时器名字 */ ListItem_t xTimerListItem /* 软件定时器列表项 */ TickType_t xTimerPeriodInTicks; /* 软件定时器的周期 */ void * pvTimerID /* 软件定时器的ID */ TimerCallbackFunction_t pxCallbackFunction; /* 软件定时器的回调函数 */ #if ( configUSE_TRACE_FACILITY == 1 ) UBaseType_t uxTimerNumber /* 软件定时器的编号,调试用 */ #endif uint8_t ucStatus; /* 软件定时器的状态 */ } xTIMER; 8软件定时器API函数 1)创建软件定时器

基于albert的汽车评论情感分析【含代码】

汽车评论情感分析 汽车评论情感数据集代码加载库与参数设置数据集的读取超参数设置与数据集的构建模型的训练与验证 汽车评论情感数据集 链接:https://pan.baidu.com/s/1K5TWrXbXBRXkCUpMbZq2XA 提取码:9mt9 代码 加载库与参数设置 首先先把一些基础的库进行加载 import random import torch from torch.utils.data import DataLoader from transformers import AdamW, BertTokenizerFast, AutoModelForSequenceClassification from sklearn.metrics import classification_report, accuracy_score, recall_score, f1_score from tqdm import tqdm # Set seed for reproducibility import pandas as pd import os from sklearn.model_selection import train_test_split import numpy as np 做实验时需要固定随机种子,方便实验的可重复性 # 设置种子 seed = 42 random.seed(seed) torch.manual_seed(seed) os.environ["CUDA_VISIBLE_DEVICES"] = '0' # 设置GPU型号 # 设置训练装置为GPU或CPU device = torch.

长文详解!最全Jupyter安装使用详解

本篇文章我们主要介绍Jupyter的使用与配置,本篇文章的主要内容如下: 什么是Jupyter notebookJupyter notebook的安装使用Jupyter notebook 什么是Jupyter notebook? Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,方程,可视化和说明文本的文档。通俗来讲,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示的程序。 如果大家使用过IPython就会知道,Ipython是一个加强版的交互式 Shell,使用IPython运行程序会比在terminal里运行更方便,界面更友好,功能也更强大,而Jupyter Notebook又比Ipython更加强大。 具体可以参看官方简介: Jupyter Notebook官方介绍 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等。 建议tips:对于新手而言,更应该注重的是对编程基本功的练习,多敲代码。而pycharm与vscode具有自动联想的功能,前期可能使用起来比较方便,但是对知识和代码的运用上欠佳。此时使用Jupyter notebook就是最好的选择。 简单介绍下组成: Jupyter是基于网页形式的、结合了编写说明文档、数学公式、交互计算和其他富媒体形式的工具等,基本常用的开发工具里面都包含了。Jupyter里面编写的内容都可以以文档形式输出,默认保存的后缀名为.ipynb的JSON格式文件,还可以导出为:HTML、PDF、MarkDown、Python等格式。 Jupyter notebook的安装 Jupyter notebook的安装可以分为两种: Python环境下安装(没有安装Anaconda只是安装了Python)Anaconda下安装 Python环境下安装 如果没有安装Python直接安装Jupyter notebook是不可以的,前提是要安装好Python,安装教程请参看:—————— 如果安装好了Python3(注意必须是Python),保证pip升级到最新版本。 注意:老版本的pip在安装Jupyter Notebook过程中或面临依赖项无法同步安装的问题。因此强烈建议先把pip升级到最新版本 pip3 install --upgrade pip 无论是Windows操作系统还是MacOS系统,打开终端(Windows下cmd打开的命令行窗口,MacOS直接打开终端)输入如下命令。 pip install Jupyter notebook 测试是否安装成功,在命令行窗口继续输入:jupyter notebook 可以发现Jupyter 的启动目录是在: C:\WINDOWS\system32下,所以创建的文档也是在这个目录下的。我们可以修改配置设置默认的存储路径(后面会讲)。 MacOS下安装也是类似的 启动测试 Anaconda下安装 常规来说,安装了Anaconda发行版时已经自动为你安装了Jupyter Notebook的,但如果没有自动安装,那么就在终端(Linux或macOS的“终端”,Windows的“Anaconda Prompt”,以下均简称“终端”)中输入以下命令安装: conda install jupyter notebook 安装完成之后,使用方式同上。下面介绍一下启动notebook的路径配置。 配置notebook的启动路径 如果你不想在Jupyter Notebook中编写的所有文档都直接保存启动目录下,则需要修改Jupyter Notebook的文件存放路径。可以按照如下步骤完成: 创建文件夹 Windows用户在想要存放Jupyter Notebook文件的磁盘中**新建文件夹最好为该文件夹起个便于识别的名字;双击进入该文件夹,然后复制地址栏中的路径。Linux/macOS用户在想要存放Jupyter Notebook文件的位置创建目录并为目录命名,新建目录的命令为:mkdir directory_name;通过命令:cd directory_name进入目录,输入命令pwd查看目录的路径。配置文件路径 便捷获取配置文件所在路径的命令:jupyter notebook --generate-config ​​Windows和Linux/macOS的配置文件所在路径和配置文件名如上图修改和保存配置文件可以使用文档编辑工具或IDE打开“jupyter_notebook_config.

2023 波卡年度报告选读:Polkadot SDK 与开发者社区

原文:https://dashboards.data.paritytech.io/reports/2023/index.html#section6 编译:OneBlock 编者注:Parity 数据团队发布的 2023 年 Polkadot 年度数据报告,对推动生态系统的关键数据进行了深入分析。报告全文较长,本文是该报告的第六部分,主要介绍 Polkadot SDK 和开发者社区的数据情况。 波卡开发者社区现状 Polkadot 的开发者社区是区块链领域的重要力量,因其实力和积极参与而脱颖而出。据 Electric Capital 报道,Polkadot 是区块链世界中领先的开发生态系统之一,排名连续仅次于以太坊。 仅在 3.6 年内,Polkadot 的全职开发者(在一个月内贡献代码超过 10 天的开发者)数量就达到了 500 人,是任何区块链生态系统增长最快的。这种认可证明了生态系统内不懈的贡献以及大量积极参与其中的开发者。 Polkadot Blockchain Academy(PBA)提供了一个独特的区块链技术教育体验,以 Polkadot 和 Substrate 为基础。该项目旨在面向开发者和 Polkadot 项目创始人,由 Polkadot 生态系统、Parity Technologies 和 Web3 Foundation 的专家领导。课程包括关于经济学、治理、博弈论、密码学的理论模块,以及 Polkadot 特定技术的实际应用。该学院旨在为参与者提供构建区块链并为 Polkadot 生态系统做出重大贡献的知识和技能。欢迎对 Web3 和区块链技术充满热情的新手和经验丰富的个人参与。 🔍 你可以在这里查看 PBA 详情: https://polkadot.network/development/blockchain-academy/ 截至 2023 年 9 月,经过一年的开发和完善,PBA 已将其课程资料公开发布。这一举措是他们持续努力的一部分,旨在加强课程内容和学习体验,致力于为在 Polkadot 生态系统中茁壮成长的开发者提供必要的技能。 🔍 你可以在这里查看公开课程资料: https://polkadot-blockchain-academy.github.io/pba-book/ Polkadot 开发者英雄计划是一个面向活跃参与 Polkadot 生态系统的开发者的社区倡议。它面向各级开发者,鼓励技术贡献、参与讨论以及创作与 Polkadot 相关的技术内容。该计划提供各种福利,包括专门的教育空间、独家内容、导师辅导会、社交活动、职业机会等。旨在连接、培养和激励 Polkadot 开发者社区,为知识分享和职业发展提供平台。计划包括新手(Polkadot 开发初学者)和英雄(Polkadot 技术倡导者)两个类别。活动包括导师辅导、为 Polkadot 堆栈做出贡献、内容创作以及参与活动发言。有兴趣的参与者可以注册并自荐加入该计划。

【EI会议征稿通知】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)

2024年第九届智能计算与信号处理国际学术会议(ICSP 2024) 2024年第八届智能计算与信号处理国际学术会议(ICSP 2024)将在西安举行, 会期是2024年4月19-21日, 为期三天, 会议由西安科技大学主办。 欢迎参会! 大会安排主旨报告,特邀报告,以及数个专题讨论会(形式包括口头报告,海报展示,视频报告等),将在会上共同探讨智能计算与信号处理及相关研究领域各方向的学术动态及发展趋势,就目前的热点问题展开研讨,共享研究成果,推动相关研究与应用的发展与进步,推进学科的发展和促进人才培养。 为保证学术质量,吸引更多的原创高水平学术论文,现公开征稿,欢迎广大从事智能计算、信号处理与计算技术的新理论及其应用教学的科研人员和学生踊跃投稿! 所有文章将由程序委员会严格审核,文章作者将被邀请到会参会展示研究报告。 重要信息 大会官网:WWW.IC-ICSP.ORG(点击参会/投稿/了解会议详情) 大会时间:2024年4月19-21日 大会地点:中国·西安 会议收录检索:IEEE Xplore、EI、SCOPUS 主办单位: 承办单位: 联合承办单位: 征稿主题 智能计算与信号处理 娱乐与游戏 硬件和软件系统 智能城市和5G 智能手机和移动设备技术 医疗保健和福利消费者系统 机器学习,深度学习和AI 硬件和软件系统的能源管理 计算机与网络信息安全 信息系统 互联网和边缘计算 区块链协议的安全性 计算机的安全性和隐私 人工智能与机器学习 人工智能 人机交互和用户体验 虚拟现实,增强现实和显示 计算机视觉与图像处理 物联网与传感器技术 物联网 传感器和执行器系统 音频/视频系统和信号处理 射频,无线和网络技术 其他相关主题见官网 投稿须知 - 只接受英文论文,投稿者务必用英语撰写论文。文章长度不得少于4页,被录取的文章,须在截止日前完成缴费注册。

MobaXterm SSH 免密登录配置

文章目录 1.简介2.SSH 免密登录配置第一步:点击 Session第二步:选择 SSH第三步:输入服务器地址与用户名第四步:设置会话名称第五步:点击 OK 并输入密码 3.密码管理4.小结参考文献 1.简介 MobaXterm 是一个功能强大的终端模拟器和远程访问工具,特别适用于 Windows 操作系统。它集成了多种网络工具和支持多种远程协议,提供了一个统一的界面,简化了对远程服务器和网络设备的管理和访问。 MobaXterm 由总部位于法国图卢兹的软件公司 Mobatek 开发运营。 以下是 MobaXterm 的一些主要特点和功能: 终端模拟器: MobaXterm 提供了先进的终端模拟功能,支持多标签页,可以同时连接多个远程主机。远程访问: 支持 SSH、Telnet、RDP、VNC 等常见的远程协议,使用户可以方便地连接到远程服务器和计算机。X11 服务器: MobaXterm 集成了 X11 服务器,允许用户在 Windows 上运行图形化的 Linux 应用程序。文件传输: 内置的 SFTP 和 SCP 客户端使得文件在本地系统和远程服务器之间的传输变得简便。网络工具: 集成了一系列网络工具,包括 ping、traceroute、Nmap、FTP 客户端等,方便网络故障排查和管理。会话管理: MobaXterm 允许用户保存和管理远程会话,以便快速连接到常用主机。插件支持: 支持插件系统,用户可以安装和使用各种插件来扩展工具的功能。端口转发: 支持本地和远程端口转发,使得可以安全地访问远程服务。集成的命令: 提供了许多常用的 Linux 命令,可以在 Windows 系统上直接执行。多语言支持: MobaXterm 提供了多语言界面,方便全球用户使用。 2.SSH 免密登录配置 第一步:点击 Session 点击左上角的 Session 按钮,进入会话配置。 第二步:选择 SSH 第三步:输入服务器地址与用户名 第四步:设置会话名称 会话名称缺省为 HOST(USERNAME),比如主机为 116.205.232.86,用户名为 lvlv,那么缺省会话名称为 116.

RFID标签在汽车监管方面的应用与实施方案

RFID技术在汽车工业领域得到了广泛应用,主要体现在汽车资质证书远程监管系统的普及化,系统包括OBD接口监视器、车证监管箱、超高频读写设备、应用系统软件以及大数据采集与处理等组成部分。 在汽车物流监管方面,系统利用OBD接口监控车辆并实时上报位置信息,实现对运输过程中的实时跟踪,同时,RFID技术用于库存查询,通过在凭证上贴附RFID电子标签的方式,实现对汽车凭证的实时监控,所有监控数据通过无线网络传输到后台,服务器对数据进行分析和挖掘,及时预警和控制风险行为。 该系统能够提供车辆监管、实物核查、车辆盘点、风险报警、车辆售后维修、数据智能分析等一系列服务,通过各种数学模型分析库存数据,并生成风险评估报告,不同类型和级别的风险将进入相应的风险管理流程,从而彻底解决现行车辆合格证监管模式存在的问题,显著提高工作效率,降低各方的运营成本。 解决方案 1、嵌入式RFID读写器实现证件RFID电子标签识别 该解决方案将RFID读写器嵌入监管箱中,实现对证件RFID电子标签的自动识别,监管箱内置主控单板电脑,通过与柜门感应数字信号、无线通讯设备和RFID设备的连接,实现数据采集、存储和传输的一体化处理。 2、远程监控文件技术 通过在监管箱内嵌入无线通讯模块,并通过软件控制,将数据实时发送至数据中心,实现文件的远程监控。 3、优化RFID标签防碰撞算法,提高读卡速度 针对RFID系统中RFID标签冲突的问题,优化了RFID标签防碰撞算法,以提高读卡速度,通过对常用的标签冲突解决方法和二叉树防冲突算法进行研究,对算法进行优化,提升了读卡效率。 4、通过监管箱控制面板快速查找文件 通过设计监管箱控制面板,实现显示监管箱的工作状态,并提供文件号输入功能,方便用户快速查找存放文件的网格。 5、内置监管箱状态感应系统 内置监管箱状态感应系统,监控柜门、电源等状态,柜门开关通过数字I/O信号输入控制单板机,实现柜门的实时监控。在机柜断电后,备用电池会自动启动,并向监控中心发送停电信息。 6、建立基于RFID技术的统一监管业务平台 基于RFID技术,建立一套全新的监管业务平台,取代传统的人工监管业务,通过对监管业务和信息系统建设的全新探索和研究,实现对企业管理的全面监管。 7、海量数据处理技术 引入成熟的网站负载均衡技术,对高并发TCP/IP客户端(文件柜)进行海量数据并行传输处理,采用数据读写分离技术和分区技术,对数据存储和处理进行优化,提高系统的存储和处理能力。 建立独立的数据分析服务软件,根据预设的分析模型,定期对海量数据进行风险分析,并生成完整的风险分析报告,以多种文件格式输出。 8、使用数据压缩算法增加存储容量,降低数据传输压力 当前 RFID UHF 标准,通过数据压缩算法,将18字节的数据压缩成12字节,存储在EPC区。在传输过程中,只传输压缩后的数据,减轻了数据传输的压力,同时增加了EPC区的存储容量。 9、智能分析算法,转化为业务数据 通过智能分析算法,将监管箱上传的单标签数据转化为可人工识别的业务数据,例如,分析进出柜的合法性,通过历史记录分析出柜加班时间等,实现对基础数据的利用。

2019数据结构----单链表真题

思路: (1)找到中间节点,将原链表一分为二 (2)后半段链表原地逆置 (3)合并链表 #include <stdio.h> #include <stdlib.h> //定义节点类型 typedef struct LNode { int data;//数据域 struct LNode *next;//指针域 } LNode, *LinkList; void tailList(LinkList &l) { l = (LinkList) malloc(sizeof(LNode)); l->next = NULL; int x; scanf("%d", &x);//s指向新节点,r指向链表尾 LinkList s, r = l; while (x != 9999) { s = (LinkList) malloc(sizeof(LNode));//s存储了这个节点的起始地址.s指向此节点 s->data = x; r->next = s;//新节点给尾节点next指针 r = s;//r指向新的尾部 scanf("%d", &x); } r->next = NULL; } void printList(LinkList L) { L = L->next; while (L !

通过cpolar在公网访问本地网站

通过cpolar可以轻松将本地网址映射到公网进行访问,下面简要介绍一下实现步骤。 目录 一、cpolar下载 二、安装 三、使用 3.1 登录 3.2 创建隧道 一、cpolar下载 cpolar官网地址:cpolar - secure introspectable tunnels to localhost 通过QQ邮箱注册、登录,进行访问。 二、安装 在官网下载下载适用于Windows平台的zip压缩包,解压后得到cpolar安装包,然后双击安装包一路默认安装即可。 三、使用 3.1 登录 cpolar本地安装成功后,可通过浏览器访问cpolar web UI管理界面,以【 http://本地ip地址:9200 】形式访问,如 http://127.0.0.1:9200/或http://localhost:9200/ 均可访问到cpolar web ui管理界面【也可在同个局域网下不同的设备上进行访问】,如下图所示,使用cpolar账号登录即可: cpolar web UI界面登录成功后,自动转入仪表盘界面。我们可以在这里创建隧道、编辑隧道、查看隧道信息、查看所生成的公网地址,查看系统状态等信息。 cpolar默认会安装两个样例隧道,可直接使用,或者编辑、删减: 一个是Website隧道指向http 8080端口一个是ssh隧道,指向tcp 22端口(如为windows系统,则为remoteDesktop隧道,指向tcp 3389端口) 3.2 创建隧道 点击左侧仪表盘的隧道管理——创建隧道,填写隧道信息 隧道名称:可自定义,注意不要与现有隧道名称重复即可协议:选择http本地地址:填写所要映射的端口号,如8080域名类型:免费套餐选择随机域名地区:可自由选择服务器地区(注意China NAS地区仅供NAS套餐用户使用) 点击创建(注意:本地地址改为自己本地部署且需要外网访问的地址) 隧道创建成功后,页面会自动跳转到隧道列表页面,可以看到所有数据隧道,包含刚刚创建成功的tunnel-1隧道(注意:点击启动) 点击左侧仪表盘的状态——在线隧道列表,可以查看到本地所有在线隧道,以及所生成的公网地址。 可以看到刚刚所创建成功的tunnel-1隧道,已经有生成了相应的公网地址,复制到浏览器访问即可: 一个http协议地址一个https协议地址(省去申请/配置证书的繁琐步骤) 通过上述操作步骤,其他用户可以通过互联网浏览器,访问公网地址。

UE5 C++(十二)— 委托(代理)、多播委托

这里写目录标题 介绍定义声明委托绑定委托执行委托 单播委托多播委托动态多播代理 介绍 这个官网上有很详细介绍,这里介绍几个点 定义 委托 是一种泛型但类型安全的方式,可在C++对象上调用成员函数。可使用委托动态绑定到任意对象的成员函数,之后在该对象上调用函数,即使调用程序不知对象类型也可进行操作。复制委托对象很安全。你也可以利用值传递委托,但这样操作需要在堆上分配内存,因此通常并不推荐。请尽量通过引用传递委托。 声明委托 UDELEGATE(BlueprintAuthorityOnly) DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FInstigatedAnyDamageSignature, float, Damage, const UDamageType*, DamageType, AActor*, DamagedActor, AActor*, DamageCauser); 绑定委托 MyDelegate.BindRaw( &MyFunction, true, 20 ); 执行委托 WriteToLogDelegate.Execute(TEXT("Delegates are great!")); 单播委托 单播委托 只能绑定一个函数 创建一个C++类 MyDelegateActor MyDelegateActor.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyDelegateActor.generated.h" DECLARE_DELEGATE(NoParamDelegate);//声明一个无参委托 DECLARE_DELEGATE_OneParam(OneParamDelegate, int32);//声明一个有一个int32参数的委托 DECLARE_DELEGATE_TwoParams(TwoParamsDelegate, int32, FString);//声明一个有一个int32参数和一个FString参数的委托 DECLARE_DELEGATE_RetVal(int32, RetValDelegate);//声明一个有返回值的委托 UCLASS() class DEMO_API AMyDelegateActor : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties AMyDelegateActor(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; NoParamDelegate NoParamDelegate;//声明一个无参委托 OneParamDelegate OneParamDelegate;//声明一个有一个int32参数的委托 TwoParamsDelegate TwoParamsDelegate;//声明一个有一个int32参数和一个FString参数的委托 RetValDelegate RetValDelegate;//声明一个有返回值的委托 void NoParamDelegateFunc();//无参委托函数 void OneParamDelegateFunc(int32 Param);//有一个int32参数的委托函数 void TwoParamsDelegateFunc(int32 Param1, FString Param2);//有一个int32参数和一个FString参数的委托函数 int32 RetValDelegateFunc();//有返回值的委托函数 }; MyDelegateActor.

COMP9517 Computer Vision

COMP9517: Computer Vision 2023 T3 Lab 1 Specification Maximum Marks Achievable: 2.5 This lab is worth 2.5% of the total course mark . Objectives: This lab revisits important concepts covered in the Week 1 and Week 2 lectures and aims to make you familiar with implementing specific algorithms. Preliminaries: As mentioned in the first lecture, we assume you are familiar with programming in Python or are willing to learn it independently.

大一,如何成为一名fpga工程师?

​ 1、数电(必须掌握的基础),然后进阶学模电(选学), 2、掌握HDL(HDL=verilog+VHDL)可以选择verilog或者VHDL,建议verilog就行。 3、掌握FPGA设计流程/原理(推荐教材:FPGA权威指南、Altera FPGA/CPLD设计、IP核芯志-数字逻辑设计思想、静态时序分析、嵌入式逻辑分析仪等), 4、常用的协议(ARP协议、udp协议、SPI、AXI总线等等)够用就行, 5、独立的做些中小规模的设计,比如:像交通灯、电子琴、DDS等...... 书籍推荐4本就够: 1、Verilog数字系统设计教程 ​ 这本书Verilog HDL语法讲的比较完整,适合作为语法工具书使用,第一部分讲述了Verilog HDL的基本语法,Verilog HDL运算符大部分与C语言是相同的,需要注意的有拼接符和缩减符。选择语句与C含义基本一致,Verilog HDL含有四种循环语句,但是只有for循环可以综合成电路,for循环的含义与C语言有本质区别,具体可以查看之前写的一篇文章去理解Verilog中for循环的含义。而always,assign,begin…end这些是Verilog最常用的,也是比较简单的。对于系统函数只需要有印象即可,因为这些都只能用于测试文件的编写,都是不可以综合成电路的。 第二部分主讲数字电路中加法器,数据选择器,状态机等常用器件Verilog HDL的描述方法,以及对阻塞赋值与非阻塞赋值这些概念进行更加详细的讲解。最后会有对risc的CPU进行设计的介绍。 2、手把手教你学FPGA设计:基于大道至简的至简设计法 这本书是潘老师进行编写的,主要通过讲解以计数器,状态机,FIFO为架构去实现uart,SCCB,SPI,SDRAM,UDP等模块的设计,以及模块接口设计。 做过FPGA的都知道,80%左右的设计都可以通过计数器、状态机、FIFO或者RAM去实现,讲解这几种结构的设计的书有很多,之所以推荐这一本是因为本书的设计思想以及计数器和状态机与其他书都有所区别。关注计数器无非在于其初始值是多少,什么时候加一,什么时候计数结束这三个问题。状态机很多书上也都只是对传统的一段式,二段式,三段式进行对比讲解,而本书总结出四段式。后面两章通过从模块划分,到各个模块内部实现,调试,最终实现两个案例。 注意计数器,状态机,FIFO并不是我们最终目的,架构都是为输出信号服务。实现同一种功能往往可以使用不同架构,根据难度选择合适的架构,这是需要多加练习的。 3、FPGA原理和结构 前面两本一本讲语法,一本讲计数器,状态机,FIFO这些架构的应用,这本书就是用来讲解FPGA的结构以及组成的,全书很少有代码,。 这本书更像一本介绍FPGA原理的科普书,读着就像读小说,写的很好,而且与现在主流的FPGA技术有结合,非常适合初学者。对FPGA的基本结构详细了解是很有必要的,前期不想直接看数据手册时,可以看看这本书,这本书还对altera和xilinx设计流程,工具以及原理进行了介绍。 4、FPGA设计实战演练(高级技巧篇) 本书建议在进阶时使用,主要以quartus讲解时序约束,快慢时钟域下数据传输,全局复位,面积与速度优化,可综合设计讲解。 现代FPGA的结构越来越复杂,多时钟域的设计现在已是常态。对于功能电路来说,复位结构都必不可少。在同步逻辑设计中如何很好地处理异步复位,甚至在多时钟域之间传递(异步)复位信号也是逻辑工程师经常面临的挑战。本书除专门介绍了上述电路的设计方法外,还介绍了状态机的设计。在介绍这些通用电路结构的基础上,还介绍了代码优化以及如何对设计进行综合与布局布线优化方面的相关内容。但是不建议初学者阅读。 当然这些只能自己摸索着学习,难度可能比较大,但题主毕竟才大一,也不着急,先学好数电模电,然后学好verilog,等到大三,或者研究生后在考虑其他的。 ​ ​ 这里有一个入口:​FPGA学习资料免费领!