广电用户画像分析之根据客户消费内容添加标签

本篇博客将介绍如何添加用户消费标签和用户消费等级标签. 建议阅读之前先阅读数据预处理的博客再读本篇博客. 相关前提: https://blog.csdn.net/kilig_CSM/article/details/131299347?spm=1001.2014.3001.5501 根据客户消费内容添加标签 该类的目的是创建一个消费者标签(Consumer Label)。它通过读取名为mmconsume_billevents的表中的数据,根据字段"phone_no"和"fee_code"进行去重,然后使用自定义的函数consumerLabel为每个消费者分配一个标签,最后将结果保存到名为consumerLabel的表中。 思路: 首先,创建一个SparkSession对象,设置应用程序名称、Master地址,并启用Hive支持。 根据设定的日志级别,将SparkContext的日志级别设置为"WARN",以减少输出的日志信息。 从名为processData.mmconsume_billevents的表中选择"phone_no"和"fee_code"两列,并对其进行去重操作,得到一个新的DataFrame对象billevents。 定义了一个自定义函数consumerLabel,用于根据fee_code的不同值分配消费者标签。 使用consumerLabel函数,将billevents DataFrame中的"fee_code"列作为输入,通过withColumn方法添加名为"consumerLabel"的新列,该列的值通过应用consumerLabel函数来计算。 最后,将结果以"overwrite"模式保存到名为userPrint.consumerLabel的表中。 总体而言,该代码通过对mmconsume_billevents表的数据进行处理和转换,生成了一个包含消费者标签的新表consumerLabel,用于进一步分析和使用消费者数据。 完整代码 package code.userprint import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions._ object ConsumerLabel { def main(args: Array[String]): Unit = { System.setProperty("HADOOP_USER_NAME", "root") val spark = SparkSession.builder().appName("Process") .master("local[*]") .enableHiveSupport() .getOrCreate() // spark.sparkContext.setLogLevel("WARN") // 根据字段 "phone_no","fee_code" 去重 val billevents = spark.table("processData.mmconsume_billevents").select("phone_no", "fee_code").distinct() val consumerLabelUdf = udf((x: String) => consumerLabel(x)) billevents .withColumn("consumerLabel", consumerLabelUdf(col("fee_code"))) .write .mode("overwrite") .saveAsTable("userPrint.consumerLabel") } /** * 直播 0J 0B 0Y * 应用 0X * 付费频道 0T * 宽带 0W 0L 0Z 0K * 点播 0D * 回看 0H * 有线电视收视费 0U * */ def consumerLabel(fee_code: String):String = { if (fee_code == "

kafka的原理及集群部署详解

消息队列分类 点对点 组成:消息队列(Queue)、发送者(Sender)、接收者(Receiver) 特点:一个生产者生产的消息只能被一个接受者接收,消息一旦被消费,消息就不在消息队列中了 发布/订阅 组成:消息队列(Queue)、发布者(Publisher)、订阅者(Subscriber)、主题(Topic) 特点:每个消息可以有多个消费者,彼此互不影响,即发布到消息队列的消息能被多个接受者(订阅者)接收 常见的消息系统 ActiveMQ: 历史悠久,支持性较好,性能相对不高 RabbitMQ: 可靠性高、安全 Kafka: 分布式、高性能、高吞吐量、跨语言 RocketMQ: 阿里开源的消息中间件,纯Java实现 kafka架构 kafka介绍 Kafka是一个分布式的发布/订阅消息系统,最初由LinkedIn(领英)公司发布,使用Scala语言编写,后成为Apache的顶级项目。 kafka主要用于处理活跃的数据,如登录、浏览、点击、分享等用户行为产生的数据。 kafka架构组成 Broker broker表示kafka的节点,kafka集群包含多个kafka服务节点,每个kafka服务节点就称为一个broker Topic 主题,用来存储不同类别的消息(kafka的消息数据是分主题存储在硬盘上的) 存储消息时,需要指定存储在哪个主题下面,如发帖,发哪种类型的 Partition 分区,每个topic包含一个或多个partition,在创建topic时指定包含的partition数据(目的是为了进行分布式存储) 分区可以提高负载(每个分区是不同的磁盘,所以会提高负载) Replication 副本,每个partition分区可以有多个副本,分布在不同的Broker上 kafka会选出一个副本作为Leader,所有的读写请求都会通过Leader完成,Follower只负责备份数据 所有Follower会自动从Leader中复制数据,当Leader宕机后,会从Follower中选出一个新的Leader继续提供服务,实现故障自动转移 Message 消息,是通信数据的基本单位,每个消息都属于一个Partition,消息都是放在Partition里面的 Producer 消息的生产者,向kafka的一个topic发布消息,发布消息时,需要指定发布到哪个topic主题 Consumer 消息的消费者,订阅Topic并读取其发布的消息,消费或订阅哪个topic主题里的消息,可以订阅多个主题的消息(类似订阅多个微信公众号) Consumer Group 消费者组,每个Consumer属于一个特定的Consumer Group,多个Consumer可以属于同一个Consumer Group 各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。 ZooKeeper 协调Kafka的正常运行,kafka将元数据信息保存在ZooKeeper中,但发送给Topic本身的消息数据并不存储在ZK中,而是存储在磁盘文件中 元数据信息包括:kafka有多少个节点、有哪些主题,主题叫什么,有哪些分区的等(消息自身的数据不在ZK中,而是在磁盘上对应的分区中) kafka的工作流程 生产者向kafka发送数据的流程(六步) 一共六步: 生产者查询Leader:producer先从zookeeper的“/brokers/.../state”节点找到该partition的leader 找到Leader之后往Leader写数据:producer将消息发送给该leader Leader落盘:leader将消息写入本地log Leader通知Follower Follower从Leader中拉取数据:replication写入到Follower的本地log后,follower向leader发送ack Kafka向生产者回应ACK:leader收到所有的replication的ack之后,向producer发送ack Kafka选择分区的模式(三种) 直接指定往哪个分区写 指定key,然后kafka根据key做hash后决定写哪个分区 各个分区轮询 生产者往kafka发送数据的模式(三种) 把数据发送给Leader就认为成功,效率最高,安全性低 把数据发送给Leader,等待Leader回复Ack后则认为发送成功 把数据发送给Leader,确保Follower从Leader拉取数据回复Ack给Leader,Leader再向生产者回复Ack才认为发送成功,安全性最高 数据消费 多个消费者可以组成一个消费者组,并用一个标签来标识这个消费者组(一个消费者实例可以运行在不同的进程甚至不同的服务器上) 如果所有的消费者实例都在同一个消费者组中,那么消息记录会被很好的均衡发送到每个消费者实例 如果所有的消费者实例都在不同的消费者组,那么每一条消息记录会被广播到每一个消费者实例

基于STM32的环境监测系统设计与实现

摘 要 当今,环境问题成为我们最关注的问题之一,环境中的各项数据如温度、湿度、光照度、PM2.5等关乎着我们的生活品质。随着人类社会的蓬勃发展,在人的生活条件逐渐便利的同时,也对环境造成了一定程度上的影响,这就需要对环境进行检测和治理,通过根据各地的实际情况不断的调整发展方向。本次的设计就是基于单片机的检测系统,对检测环境与治理有着重大的作用和意义。 本设计以单片机为核心,实时监测温度、湿度、光照度、PM2.5的值是否超出规定范围。要实现以上要求,首先需要对系统的硬件电路进行设计,选用合适的单片机作为核心和特定的传感器来获取温度、湿度、光照度、PM2.5的数值,然后对硬件部分和软件部分进行调试,达到数据显示基本正常和具有实时性的目的。本设计选择STM32F103单片机作为核心控制元件, 包括以下模块:液晶显示屏、PM2.5检测部分、温湿度检测部分、光敏电阻部分、电源电路等。 通过各个模块之间的相互配合,能够实时监测温度、湿度、光照度、PM2.5的参数,并把数据实时显示在显示屏上。本次设计的优点有:①实时性方面比较的好,因为可以通过延时函数的设计来决定每次采样数据的间隔时间;②使用时比较的方便,随开所用,不用做复杂的前置工作;③比较经济实惠,材料钱不需要花费太多。 关键词 STM32F103单片机;DHT11温湿度传感器;激光粉尘传感器;光敏电阻 目 录 第一章 绪论 1.1 研究背景及意义 1.2 现状分析 1.3 主要研究的内容 第二章 硬件方案 2.1 总体设计 2.2 STM32F103芯片 2.3 TFTLCD液晶显示屏幕 2.4 光敏电阻 2.5 温湿度传感器 2.6 PM2.5传感器 第三章 设计原理 3.1 整体程序处理 3.2 温湿度传感器取值 3.3 光敏电阻取值 3.4 PM2.5取值 第四章 硬件调试 4.1硬件线路的连接 4.2 温湿度调试 4.3 光照度调试 4.4 PM2.5调试 第五章 项目整合 第六章 总结 参考文献 附录A 本次设计的硬件电路图 附录B main 中的主要程序 绪论 1.1 研究背景及意义 环境问题已然成为了我们生活中最重要的问题之一,世界在快速发展的同时,也对环境造成了一定的负面影响,如PM2.5的超标,因此造成的大雾天气等。因此环境的各项数据,如温度、光照度、大气压强、湿度、PM2.5等逐渐引起重视,这些数据对环境的治理有着非常重要的意义,通过对这些数据的分析,我们可以根据各地的实际情况对环境或政策进行治理,环境问题因此可以得到缓解。同时这些数据也关乎到我们的生活质量,只有在适宜的环境中,我们才能发展的更好,社会才会更加繁荣,人们的生活才会更加美好。 1.2 现状分析 我们国家建设了中国环境监测总站用于环境的监控,在各行业部门也已建立起初具规模的环境监测体系;较大规模的环境监控系统在我国已经非常成熟,但规模较大,应用并不广泛,小规模、智能化的环境监控系统有待开发。 现在,我们国家环境监测仪的生产厂家有一百五十多家,而且年产值高达5亿元[3]。但我们国家的环境监测仪还不能适应我国环境监测工作发展的需要。而且我们国家生产的档次不是太高,大部分都是中低档的环境监测仪器,主要表现为:技术的档次有待提高,大部分都是低水平、重复生产,规模效益比较的低;产品质量较低,性能一般不稳定,而且一致性不好,使用寿命不长,引发故障率高;研究开发能力较低,而且研究投入较少,在线监测仪器的系统配套生产的能力较低,不能适应市场的需要。

async/await 函数到底要不要加 try catch ?

写异步函数的时候,promise 和 async 两种方案都非常常见,甚至同一个项目里,不同的开发人员都使用不同的习惯, 不过关于两者的比较不是本文关注的重点,只总结为一句话:“async 是异步编程的终极解决方案”。 当使用 async 函数的时候,都说建议用 try catch 来捕获异常, 可是实际上我看了很多项目的代码,遵循的并不是严谨,很多都没有用,甚至 catch 函数都没写,这是为什么呢? 我们先看下使用 try catch 情况下的代码示例: 示例1 :使用 try catch function getUserInfo () { return new Promise((resolve, reject) => { setTimeout(() => { reject('请求异常') }, 1000) }) } async function logined () { try { let userInfo = await getUserInfo() // 执行中断 let pageInfo = await getPageInfo(userInfo?.userId) } catch(e) { console.warn(e) } } logined() 执行后会在 catch 里捕获 请求异常,然后 getUserInfo 函数中断执行,这是符合逻辑的,对于有依赖关系的接口,中断执行可以避免程序崩溃,这里唯一的问题是 try catch 貌似占据了太多行数,如果每个接口都写的话看起来略显冗余。

为什么会出现 SETTIMEOUT 倒计时误差

setTimeout 倒计时误差的出现主要与 JavaScript 的事件循环机制和计时器的执行方式有关。 在 JavaScript 中,事件循环是用于管理和调度代码执行的机制。setTimeout 用于设置一个定时器,在指定的延迟时间后执行回调函数。然而,由于事件循环的机制,setTimeout 并不能保证在准确的时间间隔后执行回调函数,而是将回调函数插入到事件队列中,等待当前代码执行完毕后再执行。 因此,setTimeout 的倒计时误差可能会受到以下因素的影响: 1. 延迟执行:setTimeout 设置的延迟时间并不是精确的时间点,而是一个最小延迟时间。如果事件循环中有其他代码正在执行,setTimeout 的回调函数可能会被推迟执行。 2. 系统负载:当系统负载较重时,事件循环可能会出现延迟。这可能导致 setTimeout 的回调函数执行的时间比预期的要晚。 3. 睡眠模式:在某些设备上,当设备进入睡眠模式时,定时器可能会暂停,直到设备被唤醒。这会导致 setTimeout 的回调函数执行时间延迟。 为了减少 setTimeout 倒计时误差,可以考虑以下方法: 1. 使用精确计时库:可以使用像 setInterval 或 requestAnimationFrame 这样的精确计时机制来实现准确的定时任务。 2. 手动调整:在每次定时器触发后,通过记录实际执行时间并与预期执行时间进行比较,计算误差并进行手动调整,以纠正误差。 3. 使用 Web Workers:将计时任务移至 Web Workers 中执行,这样可以避免与主线程的其他代码竞争,提高定时器的准确性。 4. 使用时间戳:而不是依赖定时器的延迟时间,使用时间戳来进行倒计时和计算,可以更精确地控制时间。 以下是一个使用高精度时间戳的示例,用于减少 setTimeout 倒计时误差: function countdown(duration, callback) { const startTime = performance.now(); function tick() { const currentTime = performance.now(); const elapsedTime = currentTime - startTime; const remainingTime = duration - elapsedTime; if (remainingTime <= 0) { callback(); } else { setTimeout(tick, Math.

音视频数据处理-H265/HEVC视频码流分析

一、H265概述 H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行了详细的分析,本文继续从数据处理的角度对H265/HEVC视频码流进行详细分析。 二、H265分层结构 H265的分层结构与H264类似,分为视频编码层(VCL:Video Code Layer)和网络抽象层(NAL:Network Abstract Layer)。 VCL层:对视频的原始数据进行压缩,包含原始的视频数据。 NAL层:将视频压缩数据根据内容不同划分成不同类型的NALU单元进行网络传输。 三、H265码流结构 H265原始码流(裸流)是由多个NAL单元组成的,具体如下图所示: NALU单元是由什么组成的呢?和H264的NALU单元组成一样,主要由三部分组成,具体如下图所示: 1.Start Code Start Code,即开始码,一般为4字节或3字节,必须是“0x00 0x00 0x00 0x01”或“0x00 0x00 0x01”,用来表示一个NALU单元的开始。 2.NALU Header NALU Header,占2个字节,由forbidden_bit(1bit),nal_unit_type(6bits),nuh_layer_id(6bit),nuh_temporal_id_plus1(3bit)四部分组成,具体如下图所示: (1)forbidden_bit(1bit) F禁止位,占用NALU Header的第一个字节的第一个位,值默认0,值为1时表示错误,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元。 (2)nal_unit_type(6bits) Type类型,占用NALU Header的第一个字节的第二到七位,用来表示NAL单元的类型,具体取值如下图所示: H265 NALU Type (3)nuh_layer_id(6bit) LayerId预留位,占用NALU Header的第一个字节的最后一位和第二个字节的前五位,默认全为0,用于未来扩展。 (4)nuh_temporal_id_plus1(3bit) TID时域层标号,占用NALU Header的第二个字节的最后三位,一般默认值为1,其值减1为该NALU时域层标号。 3.NALU Payload NALU Payload,即视频压缩数据RBSP,但是严格意义上来说,Payload数据应该是EBSP,接下来详细介绍一下H265码流数据中的相关概念,与H264类似。 SODB(String Of Data Bits):原始数据比特流 由VCL层产生的的原始数据流,由于数据长度不一定是8的倍数,为方便计算机进行处理,就用到了RBSP。 RBSP(Raw Byte Sequence Payload):原始字节序列载荷 即在SODB的后面添加了trailing bits,即一个bit 1和若干个bit 0,以便字节对齐。 EBSP (Encapsulated Byte Sequence Payload):扩展字节序列载荷 NALU单元是通过开始码“0x00 0x00 0x00 0x01”或者“0x00 0x00 0x01”来表示一个NALU单元的开始,同时H265规定,当检测到“0x00 0x00 0x00”时,也可以表示当前NALU的结束。那这样就会产生一个问题,就是如果在NALU的内部,出现了“0x00 0x00 0x01”或“0x00 0x00 0x00”时该怎么办?所以在h265码流中规定每有两个连续的“0x00 0x00”,就增加一个“0x03”,从而预防压缩后的数据与开始码产生冲突,防止竞争。

Python Anaconda创建虚拟环境及Pycharm使用虚拟环境

目录 前言 一、Anaconda与Pycharm 二、conda常用命令 三、Pycharm使用虚拟环境 总结 前言 我们在做开发任务时可能会创建多个项目,这些项目可能会依赖于不同的Python环境。比如有的用到Python3.6、有的用到Python3.7;有的用Pytorch开发、有的用TensorFlow开发。这时我们需要为不同的项目分别提供所需的版本和依赖项放到不同的虚拟环境中,这样可以将各项目所需环境隔离开,让项目之间不会起冲突。 本文介绍了使用conda方法创建虚拟环境的常用命令以及在Pycharm中使用该虚拟环境。 一、Anaconda与Pycharm Anaconda是Python开源的发行版本,其中包含了conda、Python等180多个科学包及其依赖项。使用conda创建虚拟环境,可以在电脑里配置多个Python环境并灵活切换。 Anaconda与Pycharm的区别:Anaconda是管理Python的软件,而Pycharm就像是一个高级记事本。因此博主在使用Python环境时通常是使用Anaconda创建虚拟环境,通过Pycharm使用虚拟环境和编辑程序代码。 二、conda常用命令 1.创建虚拟环境 conda create --name env_name python=3.7 -y 其中,env_name替换为自己想要的环境名字,python=3.7表示指定python版本为3.7,-y意味着遇到询问直接回复y(可不写该参数,后面自己选择输入),--name可以简写为-n 2.进入虚拟环境 conda activate env_name 3.退出虚拟环境 conda deactivate 4.查看当前虚拟环境列表 conda info -e 5.删除虚拟环境 conda remove --name env_name --all -y 6.克隆虚拟环境 conda create --name new_env_name--clone old_env_name # new_env_name 为新环境的名称 # old_env_name 为被克隆的环境名称 7.重命名虚拟环境 conda rename --name old_name new_name 8.查看安装的包 conda list 9.安装包 conda install 包名 当然,Python自带的pip安装包工具也可以使用 pip install 包名 10.更新已安装包 # 更新env_name下numpy和scipy conda update -n env_name numpy scipy # 更新env_name中所有包 conda update -n env_name --all 11.

脑机接口科普0022——黑门02:伦理道德问题

本文禁止转载!!!! 脑机接口这个技术,是属于黑科技技术中的一种。 现在已经有很多专家,以及机构,提出脑机接口的存在的一些问题。法律是一块的问题,伦理道德是另一块的问题。 虽然说,法律比伦理道德严苛,但是法律问题从来就不是一种问题。 任何问题,遇到法律方面的问题,不过就是一纸文书的问题。 没有相关的法律条文?不好意思,我明天就给你立法通过一个法律条文,来限制你的某种行为。 黑门动漫第一集里面,男主和他师傅,在开车的过程中,广播中就在播放关于对脑机接口这类人工智能的法律管理规定。 这里,我尽量少截图黑门中的动画片,免得到时被黑门或者B站告我侵权。 (希望黑门的所有者,或者B站不要给我发什么律师函啊~~~~~~我就是科普黑门动漫中出现的东西) 黑门动漫里面,给我们展示了第一个不好的伦理道德问题——特权! 在某个公交车上,出现了一个脑机接口的用户出现病状。需要及时赶到现场救治。 男主和他师傅,是个医生。系统通知他们去救援,要求5分钟内赶到现场。系统说,给你们开辟一个特权道路,让你们尽快到达。 这个特权就是——逆向行驶! QNMD! 这个动画片上,还特地标注了,危险动作,请勿模仿。 人工智能的发展,不是说为了让某些人享受特权——虽然你是医生,你是去救死扶伤的! 你享受了特权,就是挑战了法律!挑战法律的结果,就是伦理道德的沦丧。 既然可以有人凌驾于法律之上,法律这么严苛的东西都束缚不了,那么为什么要用伦理道德来束缚? 以下是脑机接口的一些伦理问题(可能伦理道德还有其他很多方面): 第一个伦理道德问题:谁有权控制你的大脑? 大家可能关注黑门动漫里面的标题“黑门”两个值,而没有关注“蜂群”这两个字。 蜂群后面有个故事,大概故事是,蜜蜂要搬家了,先派几个蜜蜂出去找新房子,有几个蜜蜂找到新的蜂巢了。然后所有的蜜蜂都乌泱泱的全部一起飞到新的蜂巢里面去。 有个叫凯文·凯利的人,写了一本书,叫做《失控》。这本书里面提到:蜂群思维是一种集体思维,没有强制的中心控制,次级单位具有自治的特质。 蜂群思维这句话怎么理解呢? 我个人的理解是,所以的蜜蜂都具有集体思维,即,所有的蜜蜂都朝着新的蜂巢方向飞去,搬到新的家,大家都朝着一个目的去就可以了。 关于这个蜂群思维,我后面会单独列一章,详细介绍蜂群思维。 很明显,蜂群思维有好处,也有坏处。 好处就是,大家都朝着同一个目的去努力,照着群体思维的方式去做,这样避免了内耗。 想想看,举个例子,我们人类,5个好朋友聚在一起,要吃个饭。能提出5种不同的饭店地点。这就是内耗。 如果,某个人提出去某个饭店,其他人都响应,就直接照着做,那么其他人避免了思考,也避免了争论,那么就减少了很多内耗。 蜂群思维的坏处是,它没有中心控制。万一所有的蜜蜂,都朝着死亡的地点飞去,那么整个群体就直接灭亡了。 同样类比,人是一个独立的个体,有独立的思维,不是想蜜蜂这种昆虫一样是群体思维的。回到第一个伦理道德问题:谁有权控制你的大脑? 如果有人控制了所有人的大脑,让人像蜜蜂一样,具有群体思维。那么这是非常恐怖的一件事。 军国主义的复苏会变得特别容易。 希特勒还演讲个屁! 日本天皇还宣传个屁的武士道精神! 直接脑机接口控制就可以了。 所以,伦理道德里面的第一个问题就是,谁有权控制你的大脑? 第二个伦理道德问题:谁有权享受大脑增强剂和调控手段? 如果,我们真的可以像《黑客帝国》中的雷欧一样,脑袋后面插一个东西,连接到服务器上面,就可以学会所有的中国功夫,就可以学会所有的枪械的使用。 、 那么,问题出现了,谁可以,或者谁有权利享受这个大脑增强剂? 如果某个人生病了,如黑门第一集里面描述的,乘客发生了癫痫,也在脑子里面植入了一个设备,专门治疗癫痫。 那么,问题出现了,谁可以,或者谁有权利享受大脑的神经调控? 是有钱的人可以享受大脑功能增强以及大脑神经调控?还是有权的人可以? 普通人,或者说,穷人,是否可以享受脑机接口技术带来的大脑功能增强以及大脑疾病治疗? 如果,脑机接口技术被有钱的人或者有权的人把控,只允许他们对大脑进行调控增强,那么,这个社会是不是回到了晋朝时期,上层社会被豪强门阀所把持?而普通的素族根本没有上升的渠道。 毕竟,如果上层有钱人或者有权人掌握了脑机接口技术,他们可以在1s钟内,像黑客帝国一样,掌握当前世界全部的高科技,而那些底层人民只能做体力劳动,沦为类似黑客帝国的人体电池。 第三个伦理道德问题:精神类脑疾病的定义和界限? 黑门里,公交车上那个发病的病人,是患有癫痫的。而因为这个癫痫,这个人,找工作也找不到。社会上还会受到各种歧视。虽然那时候2058年已经可以使用脑机接口治疗癫痫了。 那么,其他一些精神类的脑部疾病该怎么定义,有没有什么界限?有没有什么量化标准? 例如,有个小孩,患有精神分裂症,那么,谁可以给这个小孩定义他具有精神分裂症这个疾病?是医生?还是掌握脑机接口技术的公司?他们给小孩定义精神分裂症的界限是什么?有什么量化标准? 如果精神类的脑疾病没有明确的定义和界限,那么很容易就会造成一些误判,甚至会影响一个人一辈子的命运。 想想看,有些例子,有些人,被送到精神病医院,就永远出不来了。其实,有些人的精神疾病并不是一成不变的,可以通过一些方法去缓解或者根除的(如与大自然接触)。但是,如果精神类的疾病定义和界限不明显,这个人可能就会被误定义或者误判断。 第四个伦理道德问题:有精神类疾病的人如果犯罪是否应受到惩罚? 目前主流的观点好像是不需要受到惩罚。或者即使受到惩罚,也不是顶格处罚。 如,有个人,杀人了,那这个人基本上就是死刑。但是,如果这个人有精神疾病,可能会根据他杀人期间是否有自主意识,来减轻量刑,如死缓,而不是死刑。 这个里面同样存在一些伦理道德问题。就是凭什么A杀人就是死刑,B杀人就不是死刑。 有很多人就是钻了这块法律的漏洞,在审判的时候,就要求做精神类的鉴定。 第五个伦理道德问题:人工智能可以取代哪些职业? 这个问题,是所有研究人工智能的学者专家都不得不考虑的一个问题。 黑门里面,人工智能技术已经发展的那么先进了,都可以实现自动驾驶了。但是还是需要人的手指来操控触摸屏,在特殊情况下,还是需要人手动驾驶。 以目前的技术发展来看,人工智能要完全取代人类劳动,释放人的劳动生产力,还具有很大的一个距离。 但是随着技术的发展,人工智能代替人的职业,又是不得不考虑的一个问题。 人工智能可以取代哪些职业? 医生——人工智能看病 律师——人工智能打官司,写诉状 清洁工——人工智能打扫马路卫生 驾驶员——人工智能自动驾驶

Client not connected,current status:STARTING|Nacos cluster is running with 1.X mode, can‘t accept gR

以下所有的结论都是基于nacos2.0版本及以上 不包含1.x nacos报错Client not connected,current status:STARTING 一开始 我是在本地运行的nacos服务 没有报错 部署到服务器上 然后再本机进行注册 发现报了Client not connected,current status:STARTING 经过漫长的排查 发现Nacos2.0版本相比1.X新增了gRPC的通信方式 导致了一个问题 你需要再服务器防火墙多开两个端口 例如你部署的端口是8848 那还需要再开9848和9849来支持gRPC 端口 与主端口的偏移量 描述 9848 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 9849 1001 服务端gRPC请求服务端端口,用于服务间同步等 这也是为什么本地运行nacos可以而服务器上不行的原因 需要去防火墙打开这俩端口 当然降低版本也可以 以下是由于这个得到的启发 nacos集群时端口需要注意的点 我看动力节点springcloud的网课时发现 老师再进行集群时 他3个端口分别是8848、8849、8850 最后只有8848、8850开启成功 究其原因 无非就是9849端口被占用 导致8849没有开启成功 我测试过了 用以上三个端口 8849确实不行 但是把8849改成8852 就可以了 原因为什么很明白了吧 Nacos cluster is running with 1.X mode, can't accept gRPC request temporarily. 不保熟 可尝试 我一开始是8848、8849、8850进行集群 很显然8849启动不了 然后再nacos网页的集群选项里面 8849的状态是DOWN的 把它下线掉 客户端就可以注册上来了 谢谢观看

【微服务】在window下安装nacos以及可能遇到的问题

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力? 我见过最好的答案就是:因为我喜欢的东西都很贵,我想去的地方都很远,我爱的人超完美。因此,小编想说:共勉! 目录 一、官网下载 二、安装步骤 第一步:解压 第二步:在数据库中操作 1)create database nacos 2)将上图中的sql运行,就会出现下图中的表 第三步:jdk的环境配置进nacos 第四步:修改mysql数据库的配置 三、运行 1)当配置文件没有修改的时候,需使用单机模式,使用以下命令 2)当配置文件修改时,可直接点击startup.cmd文件启动 3)也可使用以下命令启动 4)访问nacos的控制台 四、启动时可能会出现的问题 1)出现请设置JAVA_HOME环境变量的配置 2)启动时提示:Unable to start embedded Tomcat. 3)出现此时不应有 \software\nacos"\logs\java_heapdump.hprof"。 一、官网下载 home (nacos.io) Release 2.2.3 (May 25th, 2023) · alibaba/nacos · GitHub 二、安装步骤 第一步:解压 注意:不要解压到中文目录,可能在后续会报错 ​ 第二步:在数据库中操作 1)create database nacos ​ 2)将上图中的sql运行,就会出现下图中的表 小编使用的图形化界面是Navicat ​ 第三步:jdk的环境配置进nacos bin目录下的startup.cmd 小编测试的时候使用单机模式,这个地方可以不更改,运行的时候加单机模式就行。(这个在下面的运行中会说到) ​ 第四步:修改mysql数据库的配置 ​ 按照以上步骤,nacos就配置完成了 三、运行 1)当配置文件没有修改的时候,需使用单机模式,使用以下命令 在bin目录下进入cmd命令行,并执行命令 startup.cmd -m standalone ​

Ansible部署和常用模块

一、 ansible 的概述 1、ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作。 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现 • Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作 • Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块, 比如copy模块用于拷贝文件到远程主机上,service模块用 于管理服务的启动、停止、重启等 2.、官方网站 Ansible is Simple IT Automation 3、 ansible 的特点 1、部署简单,没有客户端,只需在主控端部署Ansible环境,被控端无需做任何操作; 2、模块化:调用特定的模块,完成特定任务 3、默认使用SSH协议对设备进行管理; 4、主从集中化管理; 5、配置简单、功能强大、扩展性强; 6、支持API及自定义模块,可通过Python轻松扩展; 7、通过Playbooks来定制强大的配置、状态管理 8、对云计算平台、大数据都有很好的支持; 9、具有幂等性:一个操作在一个主机上执行一遍和执行N遍的结果是一样的 ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括: (1)、连接插件connection plugins:负责和被监控端实现通信; (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机; (3)、各种模块核心模块、command模块、自定义模块; (4)、借助于插件完成记录日志邮件等功能; (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务 Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样, 并非c/s软件,也只需在某个作为控制节点的主机上安装一次Ansible即可, 通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。 ansible的工作原理:使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除 • Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行systemctl stop xxx命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而systemctl restart xxx是非幂等的 • Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用 4. ansible的工作机制 Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排 5、ansible的组成模块 Ansible的组成由以下模块组成:

调试错误记录,关于默认网关的

遇到这样一种情况 A设备ip是192.168.100.100,掩码255.255.255.0 B设备ip是192.168.200.100,掩码255.255.255.0 此时,A想和B通,属于不通网段通信,我的做法事,直接配A和B的网关为对方ip即可, 此时异常出现了,如果是Windows 7,AB已经通了,如果是ubuntu,AB则通不起来,而且,linux不允许配置跨网段的网关,只能是子网内的某个ip才行。 这样的话,也就是说,Windows上的那种配置跨网段网关是非常规做法,不推荐,跨网段网关需要路由器来帮忙实现

脑机接口科普0021——黑门01

本文禁止转载!!!! 我会在接下来的一段时间内,花一些章节,专门科普介绍一下《黑门》这部国产动漫。 科普《黑门》,源自网友看了我的脑机接口科普文章后,介绍我看黑门这个脑机接口科普动画片。 确切的说,是动漫,而不是动画片。 动画片,一般意义上,我们指的是平面的二维动画。 动漫,一般意义上,是指的具有3D建模的立体动画。 黑门,这个动漫,可以在B站上看到。 黑门,这个动漫,是在去年2022年发行的。 但是,自这部动漫发行后,一直处于不温不火的状态,也只有少量群体观看,比较冷门。 这期科普,我就介绍一下,《黑门》这部动漫没有获得成功的原因。 我觉得这部动漫没有成功的原因有以下几点: 第一、科普是 永远不赚钱的。 第二、这部动漫科普了太多的概念。 第三、这部动漫选择了脑机接口这个很小众的类别进行科普。 第四、剧情有问题。 以上就是我暂时先总结的几个观点。后续我觉得有新的观点,我可以再更新补充进来。 首先,谈第一点,科普永远是不赚钱的。 大家要明白一点,科普的主体是谁? 科普的主体是国家,而不是个人。 这就意味着,个人,或者公司,想替代国家做一些科普的事情,注定是失败的。 我们国家最大的一个科普,就是九年制义务教育。这是最大的科普。 这个九年制义务教育科普,解除了古代封建社会对普通女性的思想束缚,解除了古代教育只局限于家境较好的个体。 这个九年制义务教育科普,就意味着,不管你是男的女的,不管你家有钱没钱,我都给你教育,我都让你开慧,我不会选择古代的愚民政策。 这个九年制义务教育科普,是让我们国家成为制造业大国的一个主要原因。想想看,那些接受过初中文化教育的人,到了工厂里,接受老师傅的教导,一点就通,就可以操控机器,而印度这个国家,制造业水平就一直局限于它的普通民众没有受过教育,你怎么教他也不理解为什么要这么操作这个机器。 其次,要明白的一点,科普必定是公益性的。 既然是科学普及,那必定是公益性的。没人要求你必须给我普及这个科学知识,我没有这个科学知识的储备,不影响我正常的学习,工作及生活。 国家进行的九年制义务教育科普,这些知识,已经足够满足大部分人的学习,工作及生活需求。你要给我科普脑机接口,要给我科普宇宙太空舱,要给我科普人类基因图谱。。。。。。对不起,我工作或者生活中用不到这些玩意。 当然了,我要是了解了上述这些玩意,我可以在茶余饭后,吹吹牛,让别人羡慕羡慕,羡慕我的知识储备,羡慕我的见闻广博,也是可以的。 有多少人会在接受这些科普知识后,长大后就投身从事这个行业?去为了这个理想,为了这个目标而终身奋斗? 有,肯定是有这类人。但是不多。 想想,你小时候的梦想是什么?当个科学家,当个宇航员,当个医生?你实现了没? 所以,你要给普通民众科普这些知识,必定是公益性的。你想盈利,太困难了。 诚然,有少部分人做科普,盈利了。比如,局座张召忠。 局座张召忠,给普通民众科普航空母舰,科普国际海洋法,科普核潜艇,科普武器装备,甚至还科普了海带缠潜艇,雾霾防激光。。。。。。 他是怎么盈利的?他是把他的学识,汇成了书籍,卖书赚钱的。 他的本意,就是科普国防知识,科普武器装备,并没有想着要卖书。他主要的目的,是为了把自己的研究成果汇总成书籍,做一个知识点的总结而已。 只是普通民众愿意购买这个书籍,愿意为此买单而已。 但是,有多少科普机构,能够有局座那样的知识储备?我们现在的知识储备都是碎片化的。 其次,你出了书了,有多少人愿意为此买单? 书,仅仅是一种传播媒介,仅仅是一种科普的传输媒介。另一种传播媒介,就是视频。也就是黑门这部动漫采用的科普方式。 现在再回过头来看看,有多少人,是受了局座的科普,后来去上了潜艇,后来去上了航空母舰,后来去做外交官从事海洋法相关的? 有,肯定是有。但是恐怕并不是如大家所愿。可能确实有些人受了局座的科普,去当了兵,只不过,去当了陆军,而不是被分配到海军。 大家可以去市面上调研一下,做科普的机构,大部分都是出书的,希望卖给中小学生的。有几个是真正的盈利的?或许赚了一点点钱,可以养活这个科普团队,但是希望以此赚大钱,上市,实现财务自由的,恐怕没太多吧。 再说了,现在的家长都是精明的,你给学生卖的这些科普书籍,考试又考不到,又没有证书,对升学也没有帮助,我还不如让小孩学奥数呢。 所以,总结下来,第一条,科普是永远不赚钱的。 悲催的是:我现在个人就是在写博客,从事着脑机接口的科普!一分钱没赚到!从来也没人私下联系我,让我把这个科普系列的文章出版,也没有任何人打赏过我! 现在谈第二点,这部动漫科普了太多的概念。 科普嘛,普及一些概念,肯定是很正常的。关键是你科普了太多的概念,这个信息量太大了。 一个概念需要科普,那么这个概念必定是晦涩难懂的,必须要以普通口语化的方式来向民众科普介绍。必要的时候需要做一些类比才可以让民众加深印象。 在这方面,我是深受局座的影响。局座就喜欢以幽默话的语言进行科普。 黑门这部动漫,总共也就才12集,每集去除掉前面的开头和结尾部分,大概也就是才30分钟,有些可能更短。你想想看,需要通过12集这么短的时间,向观众科普这么多大量的知识点,这个信息量太大,观众能接受的了才怪。 所以很多人都说,需要二刷才能看得懂黑门在讲什么。需要二刷,才能注意到里面的细节。 而这个12集的动漫里面,在B站上面,第一集是免费的,后面11集是需要会员才能看的。 很多人是因为朋友同事的介绍过来看的,但是并不是所有人都有B站的会员的,很多人看完第一集剧情后,又没有完全看懂,就直接被劝退了。 我不说黑门这个动漫里面,一共科普了多少概念,我就先说一点: 黑门,这个黑门是什么意思? 大家如果不百度,不上网搜索,大家先想一下,这个黑门是什么意思? 我想大家肯定会说,黑门,就是黑色的门。 在德国特里尔城北角有一个叫做尼格拉城门的地方(又名“黑门“),它建于公元2世纪约180年,当时是罗马人重要的防御城门。它又砂岩方形巨石建成,由于多年的风化,最后导致了外表成为黑色,黑门故此由来。 对,黑门,就是黑色的门,但是另外的引申含义是,黑门,就是地狱之门。 我相信,黑门这个动漫的出品商,肯定也是对脑机接口这个人工智能持有一定的谨慎态度,觉得脑机接口可能会像潘多拉的魔盒,这个技术打开之后,应用之后,会有各种各样的问题,是通向地狱之门。 但是,我TM怎么知道黑门是德国那个黑色的城门?我怎么知道黑门还有地狱之门的意思? 很遗憾的是,黑门第一集里面,都没有介绍黑门这个概念是什么意思。 第一集,就噼里啪啦讲故事情节了。 你至少在作品开头,用叙述的口吻说一下,脑机接口这个技术,万一被别人控制,会引发一场灾难,是一场通往地狱的大门(然后再配点黑色的色调,引诱读者理解黑门的概念)。 普通人看到这个作品,肯定会觉得云里雾里。 想想看,日本的动画片《七龙珠》,根据这个动画片的名字,大家看动画片的过程中,就知道要收集七颗龙珠。再想想看,《喜羊羊与灰太狼》,这个名字一听,就知道是狼和羊的故事。 好的动漫作品,不是刻意拉开做观众的距离,显得自己是多么的高大上,而是要接地气。

echarts柱状图数据太多设置滚动条

当你的项目中因数据量太大,导致柱状图数据全部叠在一起不便于看的时候,你们是怎么处理的? 大部分同学可能第一想法就是裁剪一部分数据,仅展示页面最大限度能够展示的数据,这确实是一个好办法,简单快速。但有时候怎么展示是要根据业务需求来定的,如果你的业务不能满足截取的需求,必须要展示超出这个范围的数据量,那应该怎么办呢? 此时还有一部分同学会提出使用滚动条,这样不就能够展示更多的数据了吗?但又面临一个问题,具体应该怎么使用呢? 接下来我就上面如何使用滚动条的问题贴一下自己的一点点配置技巧,希望对大家有所帮助。 //参考:http://chartlib.datains.cn/detail?id=0e2474b7044f44ff97b51d1d67450f15 var datas = [ { ranking: 1, station: '菱威有限公司', value: 16.74 }, { ranking: 2, station: '瑞缘诚有限公司', value: 14.97 }, { ranking: 3, station: '启蒙有限公司', value: 13.03 }, { ranking: 4, station: '盛唐艺有限公司', value: 12.48 }, { ranking: 5, station: '嘉宏有限公司', value: 11.20 }, { ranking: 6, station: '爱赛特有限公司', value: 10.00 }, { ranking: 7, station: '浩威有限公司', value: 8.20 }, { ranking: 8, station: '美威有限公司', value: 7.

Windows系统缺失api-ms-win-crt-runtime-l1-1-0.dll文件的完美解决方法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个api-ms-win-crt-runtime-l1-1-0.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了. 那么出现api-ms-win-crt-runtime-l1-1-0.dll丢失要怎么解决? 一、手动从网站下载单个dll文件 1、从下面列表下载api-ms-win-crt-runtime-l1-1-0.dll文件 32/64位 文件: api-ms-win-crt-runtime-l1-1-0.dll 2、将下载的文件放入到你要运行的软件或者游戏的安装所在文件夹之中,可以右键点击主执行程序.exe然后选择"打开文件所在的位置" 找到安装目录,将文件复制进去。 或者将文件复制到Windows系统目录,这个需要注意电脑的系统是32位还是64位,如果是32位的系统,那就将本站下载32位的dll文件放到“C:/Windows/System32”这个文件夹里面,如果是64位的系统,那就将本站下载的32位dll文件放到“C:/Windows/SysWOW64”这个文件夹里面,本站下载的64位文件放到“C:/Windows/System32”这个文件夹里面. 如果问题依然无法解决,值得注意的是此类文件的丢失有时候和杀毒软件的误报毒有关,所以请将此类dll文件添加到杀毒软件的信任列表当中. 二、使用DLLEscort软件进行自动修复 DLLEscort软件能够修复解决常见的Windows系统文件与系统所需的大部分运行库,它可以帮助您一键修复系统软件或游戏丢失的DLL运行库文件,节省您的宝贵时间。 如果是因为缺少了运行库 导致的提示文件找不到错误 通常当你单独下载了一个文件放入到目录后,程序可能还会立即提示又丢失了另外一个文件,所以建议大家使用DLLEscort软件一键修复解决系统缺少运行库的问题,软件可随Windows系统长久的使用,每次重新安装系统后也可以使用它修复一次,以保障各软件或游戏在此后的平稳运行. 软件能够修复常见的Windows系统dll文件; DirectX游戏运行库; Microsoft Visual C++运行库; 其它常用运行库等. DLLEscort软件支持32/64位 Windows XP,Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 操作系统,Windows 11 操作系统 下载地址:本站下载 | 百度网盘下载(提取码: 9999),下载完成后得到安装包文件运行后,点击Next下一步进行安装,安装完毕后会自动打开软件或手动执行桌面主程序(DLLEscort)即可打开软件, 桌面软件图标: 一、点击“PC Scan”或 “Click to Start Scan”开始对系统丢失文件扫描 二、扫描完成,扫描结果分成三部分,包括1,待修复的丢失文件。 2,待修复的注册表。 3.待清理的系统缓存文件。 三、点击”ALL Repair”修复开始,请保持网络通畅,直到所有问题修复完成。

Vue 点击添加className

例如如下dom <li class="del" @click="del($event)">删除</li> 因为js获取兄弟元素需要中转,所以先获取父元素,再获取子元素,移除className,再给当前dom添加className const siblings = e.currentTarget.parentNode.children; for (let i = 0; i < siblings.length; i++) { if (siblings[i].classList.contains('active')) { siblings[i].classList.remove('active'); } } e.currentTarget.classList.add('active')

Android 12系统源码_SystemUI(一)SystemUI的启动流程

前言 Android 的 SystemUI 其实就是 Android 的系统界面,它包括了界面上方的状态栏 status bar,下方的导航栏Navigation Bar,锁屏界面 Keyguard ,电源界面 PowerUI,近期任务界面 Recent Task 等等。在 Andorid 系统源码中,package/apps下放的是系统内置的一些 app,例如 settings,camera,Phone,Message 等等。而在 framework/base/package 下,它们也是系统的 app,SystemUI 就在此目录下。它控制着整个Android系统的界面,但其实他也是一个 app,不同于一般的 app,它不可卸载也不可以被第三方应用替换。对于用户而言,SystemUI 的改动是最能直观感受到的。因此,每个 Android 版本在 SystemUI 上都有比较大的改动。而对开发者而言,理解 Android SystemUI 对优化Android系统界面,改善用户体验十分重要。因为SystemUI 是系统应用,所以它也是一个 APK,有入口 Application,只不过它是由 SystemServer 进程进行启动的。 一、系统启动后在SystemServer进程中启动SystemUIService 1、在Android系统之后,系统首先会启动一个名为Zygote的进程,而Zygote进程又会启动SystemServer进程,SystemServer又会启动SystemUI,这里我们先来看SystemServer的main()方法,main 方法如下: frameworks/base/services/java/com/android/server/SystemServer.java public final class SystemServer implements Dumpable { public static void main(String[] args) { new SystemServer().run(); } } 2、main 方法里启动了 run() 方法,而在 run 方法中调用了startOtherServices() 方法: public final class SystemServer implements Dumpable { private void run(){ .

echarts折线图按阈值分段设置(颜色,节点图表等)

最近有个需求,是按照色标分段将echart折线图的折线部分进行区分。 在此之前,我们有进行过对折线节点按值配置(大小、图标、值都可以在对应的回调函数中判断区分),但线并未设置。 我查看对应的官方配置项,线的颜色只可以简单设置,或者按照固定规则进行渐变色设置,这并不符合需求。 在查找后发现echart有这么一个配置项:visualMap 官方介绍是:视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素(视觉通道) 我看了下,简单说就是设置类似大小,图案,颜色,亮度等能看到的样式的修改,而能设置的对象里,也包括线。 这里有几个需要注意的点,1.如果不设置seriesIndex的值,会默认覆盖所有series的数据样式。2.线与节点的颜色无法在再次区分(可能是我没找到)。3.样式优先级较高,会使series中对应的线,节点的样式设置失效。 附上代码: option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, visualMap:{ show: true, pieces: [ //进行分段设置,visualMap的type可以设置连续值Continuous跟分段值Piecewise两个值,这里需求需要,所以设置分段属性pieces { min: 0, max: 100, }, { min: 100, max:150, }, { min:150 } ], inRange:{ //定义 在选中范围中 的视觉元素 color: ['#ff1122','yellow','#00ff00'],//如果是分段则一一对应 symbol: ['diamond','rect'],//分段则一一对应 symbolSize: [25]//可设置两个值进行区间变动 }, seriesIndex:0 //只影响第一组数据 }, series: [ { data: [120, 200, 150, 80, 70, 110, 130], type: 'line', symbol: 'triangle', //被覆盖 symbolSize: 20, //被覆盖 lineStyle: { //被覆盖 width: 4, }, itemStyle: { color:(a)=>{ //被覆盖 if(a.

Docker安装与使用

一.安装Docker 企业部署一般都是采用Linux操作系统,而其中又数CentOS发行版占比最多,因此我们在CentOS下安装Docker 1 版本介绍 Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 2 卸载Docker(可选) 如果之前安装过旧版本的Docker,可以使用下面命令卸载: yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce 3 安装docker 首先需要大家虚拟机联网,安装yum工具 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken 然后更新本地镜像源 # 设置docker镜像源 yum-config-manager \ --add-repo \ https://mirrors.

模型不收敛是因为什么

模型不收敛,首先是看training loss下降与否,如果training loss并不能稳定下降,则可能: 数据集中signal和target是否按顺序匹配问题数据集是否进行了归一化或者标准化模型参数初始化问题你的计算图可能在训练前传入了与data无关的tensor 如果training loss下降,vallidation loss不稳定,则可能是: validation 数据集不匹配问题model.triain()和model.eval() with torch.no_grad()指定问题过拟合 解决方法: 多换几个模型;换个数据;分别从数据问题,模型问题进行逐步排查。

【Nginx和PHP教程(一)】安装、配置及初步使用

1. nginx基本介绍 2. nginx安装和环境配置 3. php基本介绍 4. php的安装和环境配置 5. JavaScript、php、html等的区别 6. ubuntu系统中php的安装和环境配置 1. nginx基本介绍 Nginx(发音为“engine X”)是一款高性能的、轻量级的Web服务器软件,同时也是一款反向代理服务器和负载均衡器。Nginx的主要优点包括高性能、低资源占用、可靠性和灵活性。它已经成为一个广泛使用的Web服务器和反向代理服务器。 下面是Nginx的一些主要特点和功能: 高性能:Nginx的核心设计原则是为了提高性能和并发连接数。它可以同时处理数千个并发连接,使用少量的内存,这使得Nginx非常适合作为高流量的Web服务器和反向代理服务器。 反向代理:Nginx支持反向代理,可以通过代理缓存来提高Web应用程序的性能,同时也可以提供更好的安全性。 负载均衡:Nginx可以作为负载均衡器,它可以将请求转发到多个Web服务器,并确保请求的平衡分配。 静态内容服务:Nginx可以高效地提供静态内容服务,它可以直接将静态内容从磁盘中读取并返回给客户端,这使得Nginx在提供静态内容方面非常快速和高效。 可扩展性:Nginx的设计可以轻松地进行扩展,支持使用模块添加新的功能。 安全性:Nginx具有高度的安全性,可以抵御各种攻击,包括DDoS攻击、SQL注入攻击等。 轻量级:Nginx非常轻量级,占用资源很少,可以在低端硬件上运行,因此非常适合用于较小的项目。 总之,Nginx是一款高性能、可靠性强、安全性高、轻量级和灵活的Web服务器和反向代理服务器,是Web服务器中的佼佼者。 Nginx的历史可以追溯到2002年,当时Igor Sysoev在俄罗斯工作的一家ISP公司使用Apache作为Web服务器,但在面对高流量和高负载的情况下,他发现Apache的性能和可扩展性都有限。因此,他决定创建自己的Web服务器,这就是Nginx的雏形。 最初,Nginx是Igor Sysoev自己开发的,并在2004年首次发布。2008年,他辞职并创建了自己的公司,专注于开发和支持Nginx。目前,Nginx Inc.是一家专注于Web基础架构的软件公司,其核心产品是Nginx Web服务器和Nginx Plus。 Nginx是用C语言开发的,它的设计目标是为了高性能和可扩展性。Nginx的源代码是开放的,它遵循BSD许可证,因此可以免费使用和修改。在全球范围内,Nginx已经成为一个非常流行的Web服务器和反向代理服务器,许多知名的网站和公司都在使用Nginx,例如Netflix、Pinterest、GitHub、WordPress等等。 对于一名初级使用Nginx的人员,需要掌握以下基本知识: Nginx的基本概念和特性:初学者需要了解Nginx的基本概念,例如反向代理、负载均衡、静态文件服务、动态内容处理等等。还需要了解Nginx的一些基本特性,例如高性能、低资源占用、可扩展性和灵活性等等。 Nginx的安装和配置:初学者需要了解如何安装Nginx,并进行基本的配置。这包括配置Nginx的服务器块、虚拟主机、SSL证书、反向代理等等。 Nginx的日志管理:初学者需要了解如何配置和管理Nginx的访问日志和错误日志。这将帮助他们更好地了解Nginx的运行情况和问题。 Nginx的性能优化:初学者需要了解如何通过调整Nginx的配置来提高其性能。这包括使用缓存、开启Gzip压缩、限制访问速率等等。 Nginx的安全配置:初学者需要了解如何通过配置Nginx来保护Web应用程序的安全。这包括使用SSL证书、限制访问权限、防止DDoS攻击等等。 Nginx的常用命令和工具:初学者需要了解如何使用常用的Nginx命令和工具来管理和调试Nginx,例如nginx -t、nginx -s reload、nginx -s stop、nginx -s quit等等。 总的来说,初学者需要了解Nginx的基本概念、安装和配置、日志管理、性能优化、安全配置以及常用命令和工具。这将帮助他们更好地使用和管理Nginx。 以下是与Nginx类似的一些软件: Apache:Apache是一个流行的开源Web服务器,也支持反向代理和负载平衡。与Nginx相比,Apache可以处理更多的并发请求,但它的性能通常比Nginx慢一些。 Lighttpd:Lighttpd是另一个轻量级的Web服务器,类似于Nginx,它也具有高性能和低资源占用的特点。与Nginx相比,Lighttpd的配置相对简单,但其性能也不如Nginx。 Caddy:Caddy是一个现代化的Web服务器和反向代理,类似于Nginx,它也具有高性能、低资源占用、可扩展性和灵活性等特点。与Nginx相比,Caddy的配置更加简单易用,但它的性能可能略低。 HAProxy:HAProxy是一款高性能的负载平衡器和反向代理服务器,类似于Nginx,它可以将请求转发到多个Web服务器,并确保请求的平衡分配。与Nginx相比,HAProxy的配置相对复杂,但它也具有更高的性能和更多的高级功能。 总的来说,与Nginx类似的软件有很多,每个软件都有其独特的优点和缺点。选择合适的Web服务器和反向代理服务器取决于具体的应用需求和环境。 2. nginx的Centos/Ubuntu系统安装和环境配置 (1)Centos系统安装Nginx sudo yum update # Update the package repository sudo yum install epel-release # 默认情况下,CentOS存储库中没有Nginx软件包,需要添加Nginx存储库。 sudo yum install nginx # Install Nginx sudo systemctl start nginx # Start the Nginx service nginx -v # 验证Nginx安装 sudo systemctl status nginx # Verify that Nginx is running sudo systemctl enable nginx # Enable Nginx to start at boot time (2)Ubuntu安装Nginx

物联网工程施工STM32

目录 STM32 1.硬件结构 2.单片机 3.USB接口 4.电源管理 5.无线模块 STM32开发板样貌具体如下 STM32开发板的心得体会 STM32源码 STM32 STM32系列芯片是美国 ST公司生产的一款低功耗32位单片机,是目前市面上性价比最高的一款单片机。它的最大特点就是功耗低,只有5W。此外,还具有丰富的外围接口、低成本、高性能的特点。它以其众多优点成为很多开发板厂家首选的单片机之一。 1.接口丰富:除了常用的 UART、 SPI、串口外,还有两个网口用于网络通信。 2.支持 WIFI模块:通过 wifi可以实现手机对设备的控制。 1.硬件结构 STM32系列的开发板一般包括电源电路、复位电路、 IO口电路、 JTAG调试接口电路等。下面简单介绍下这几个电路。 1.电源部分:它主要包括电源 IC (外部供电芯片)和电源滤波电容,用来给芯片供电。另外,还需要配置一个220V交流转直流的接口。 2.复位电路:在复位时,需要把复位脉冲输出到 IC (外部复位开关)上,然后再把复位脉冲输出到复位开关的管脚上。通过这个复位脉冲可以使芯片恢复正常工作状态。 3. IO口部分:该部分主要由3个 IO口组成,分别是 UART、 SPI、 UART串口。在 UART口上还需要配置一个5V的复位输出和一个5V的 JTAG调试接口,用来接收串口数据并显示出来。在 SPI口上则需要配置一个3线的 JTAG调试接口,用于接收和发送调试数据。 4. JTAG调试接口: JTAG接口用于调试单片机的功能,在该接口上还需要配置一个复位输入和 JTAG调试输出接口。在这两个接口上还需要配置一个 JTAG调试输出和一个 JTAG测试输出接口。 2.单片机 单片机(英语: CodeControlCenter,缩写为 CCC),又称微控制器,是一种微型计算机,内建执行机构与程序存储器。单片机的运算速度快、功能强,功耗低、体积小,并具有高度可靠性和完善的保护机制等优点。广泛应用于工业控制、消费电子、网络通信等领域。单片机在电子设备中的应用日益广泛,如智能手机、平板电脑、便携式电脑、电视机顶盒、车载电脑等。单片机具有高度的智能化和自动化,体积小、功能强。随着嵌入式技术的发展,单片机成为嵌入式系统的核心。 单片机(CCC)是一种微型计算机,它由中央处理器(CPU)和内部存储器(RAM)及程序存储器(ROM)组成,是一种可以对外部存储设备进行操作和控制的微处理 3.USB接口 USB是英文 Universal Serial Bus的简称,即通用串行总线,是一种连接计算机和外部设备的串行外设接口,通过它可以使计算机的端口扩展成为一个外部总线接口。USB接口一般分为 USB1.1、 USB2.0和 USB3.0,其中 USB1.1和 USB2.0均支持热插拔;而 USB3.0则支持热插拔,即在不需要使用数据线连接时可以将数据线拔掉。相比而言, USB3.0的速度比 USB1.1快得多。 STM32的外设主要有:两个 UART、一个 SPI、两个 IO口、两个 WiFi网卡、一个串口扩展卡。 使用STM32的 USB接口,可以方便地把外设连接到 PC机,实现电脑和手机之间的数据传输。虽然现在大部分手机都支持 WiFi,但在一些智能手机上,为了实现数据传输还是需要通过 USB接口来实现。

PHP 使用cURL 相关函数来设置代理、处理 SSL 证书

设置代理: 如果你需要通过代理服务器访问目标网址,你可以使用以下 cURL 相关函数来设置代理: curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com:8080');:设置代理服务器的地址和端口。curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password');:如果代理服务器需要身份验证,使用此函数设置用户名和密码。 例如,要设置代理服务器为 proxy.example.com,端口为 8080,并需要进行身份验证,可以这样设置: curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com:8080'); curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password'); 处理 SSL 证书: 当你使用 cURL 访问一个使用 SSL/TLS 加密的网址时,可能会遇到 SSL 证书验证的问题。以下是一些处理 SSL 证书的相关函数: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);:禁用对服务器 SSL 证书的验证。这在开发和测试阶段可能会使用,但在生产环境中不推荐。curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');:指定一个包含受信任 CA 证书的文件路径,用于验证服务器 SSL 证书。你需要将 /path/to/cacert.pem 替换为你实际的 CA 证书路径。curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);:设置主机验证级别,可选择值为 0、1 或 2,其中 2 是最严格的级别。 下面是一个例子,展示如何禁用对服务器 SSL 证书的验证: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 如果你有一个包含受信任 CA 证书的文件(通常是 PEM 格式),你可以使用以下方式来验证服务器 SSL 证书: curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem'); 对于主机验证级别,你可以将其设置为 2 来进行严格的验证:

PHP 使用curl_init()函数 访问API 获取数据

curl_init() 是 PHP 中用于初始化 cURL(Client URL)会话的函数。cURL 是一个功能强大的库,用于与各种服务进行网络通信,包括访问 API、发送 HTTP 请求等。 以下是使用 curl_init() 访问 API 获取数据的详细步骤: 安装和启用 cURL 扩展: 确保你的 PHP 环境已经安装了 cURL 扩展。你可以通过检查 phpinfo() 的输出来确认。如果未安装 cURL 扩展,请根据你的操作系统和 PHP 版本进行安装和配置。 创建 cURL 会话: 使用 curl_init() 函数创建一个 cURL 会话对象,并将其分配给一个变量,以便后续使用。 $ch = curl_init(); 设置 cURL 选项: 使用 curl_setopt() 函数设置各种 cURL 选项,以配置请求的行为。一些常见的选项包括: 设置请求的 URL:使用 CURLOPT_URL 选项设置请求的目标 URL。设置请求方法:使用 CURLOPT_CUSTOMREQUEST 选项设置请求的方法,如 GET、POST、PUT 等。设置请求头:使用 CURLOPT_HTTPHEADER 选项设置请求的头部信息,如认证、内容类型等。设置请求体数据:使用 CURLOPT_POSTFIELDS 选项设置请求的数据体内容,如表单数据、JSON 数据等。 curl_setopt($ch, CURLOPT_URL, "https://api.example.com/endpoint"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Bearer your_token', ]); 执行请求并获取响应: 使用 curl_exec() 函数执行 cURL 请求,并将响应结果保存到一个变量中。 $response = curl_exec($ch); 处理响应: 可以根据需要对响应进行处理,如解析 JSON 数据、提取所需字段等。 if ($response === false) { // 请求失败的处理逻辑 $error = curl_error($ch); } else { // 请求成功的处理逻辑 $data = json_decode($response, true); // 处理响应数据 } 6.

cdp hive3.1表为事务表和外部表的问题

参考文章 Apache Hive 3 tablesTable type definitions and a diagram of the relationship of table types to ACID properties clarifies Hive tables. The location of a table depends on the table type. You might choose a table type based on its supported storage format.https://docs.cloudera.com/cdp-private-cloud-base/latest/using-hiveql/topics/hive_hive_3_tables.htmlCDP中的Hive3系列之Hive3使用指南-阿里云开发者社区https://developer.aliyun.com/article/786518 注意 我的cdp配置 这个外表路径我修改过 最初好像是/warehoue/tablespace/external/hive 注意3.1的hive有如下默认参数 <property> <name>hive.default.fileformat</name> <value>TextFile</value> <description> Expects one of [textfile, sequencefile, rcfile, orc, parquet]. Default file format for CREATE TABLE statement. Users can explicitly override it by CREATE TABLE .

第二讲《k8s资源介绍:Namespace与Pod 》

一、namespace介绍 1.概念 在 Kubernetes 中,命名空间(Namespace) 提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一命名空间内的资源命名要唯一,但跨命名空间时没有这个要求。 命名空间作用域仅针对带有命名空间的对象,例如 Deployment、Service 等, 这种作用域对集群访问的对象不适用,例如 StorageClass、Node、PersistentVolume 等。 2.集群默认的namespace 命名空间查看 [root@k8s-master test-namespace]# kubectl get namespace NAME STATUS AGE default Active 1d kube-node-lease Active 1d kube-public Active 1d kube-system Active 1d default 没有指明使用其它命名空间的对象所使用的默认命名空间 kube-system Kubernetes系统创建对象所使用的命名空间 kube-public 这个命名空间是自动创建的,所有用户(包括未经过身份验证的用户)都可以读取它。这个命名空间主要用于集群使用,以防某些资源在整个集群中应该是可见和可读的。 这个命名空间的公共方面只是一种约定,而不是要求。 kube-node-lease 此命名空间用于与各个节点相关的 租约(Lease)对象。 节点租期允许 kubelet发送心跳,由此控制面能够检测到节点故障 3.创建命名空间 用apply创建 [root@k8s-master test-namespace]# cat test-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: test [root@k8s-master test-namespace]# kubectl apply -f test-namespace.yaml namespace/test created 用create创建的两种方式

Idea+maven+springboot项目搭建系列--3 整合阿里云Canal完成Mysql数据的监听

前言:在搭建canal 服务之后,项目中就可以连接canal ,完成对感兴趣的数据库及其表中数据的变动完成监听,本文依赖于你已经完成了对canal 服务的搭建工作; 1 Cannal 特点: Canal是阿里巴巴开源的一款基于MySQL数据库的增量数据订阅和消费组件,能够把MySQL的binlog日志解析,转换成多种类型的事件回调给应用消费或同步到数据存储或搜索引擎等其他数据终端。它提供了类似数据流的方式,对数据进行持续性同步和协作,大幅度提升了数据处理的效率。 Canal的主要特点包括: 支持多种数据存储形式,包括MySQL、Oracle等,其设计和性能都针对常见的数据存储场景进行了优化;Canal结构清晰、易于上手,并且提供了完善的API和文档,能够方便地实现对数据流的订阅、消费和处理;Canal采用微服务架构,支持高可用和集群部署,能够保证数据的持久性和一致性,同时能够支持分布式的数据处理和存储;. Canal具有良好的稳定性、可靠性和灵活性,在实现数据库变更的实时同步和数据处理等方面具有广泛的应用价值。 Canal是一款高效、可靠、易用的开源组件,在数据库的数据同步和处理方面具有广泛的应用价值,同时也为企业快速实现数据同步和大规模数据处理提供了有效的技术支持。 2 springBoot 集成: 2.1 先来看下 Canal 客户端的消费流程: canal server作为一个程序独立运行,在启动时会创建一个或多个线程来获取Binlog数据,同时监听与下游客户端的连接请求。 canal server连接MySQL主库或从库,并通过MySQL的binlog dump协议实现对Binlog数据的实时抓取。通过数据库相关API,canal server订阅mysql的binlog,并将获取到的Binlog写入内存或磁盘文件中。 当canal server捕获到新的Binlog数据时,会检测对应的数据源是否有相应的订阅(即canal.destinations参数配置),并将Binlog数据发送到对应的MQ Topic中。RocketMQ或其他MQ中间件将会缓存这些数据,等待下游的消费者来消费。 canal客户端作为消费者,通过订阅对应的MQ topic来获取Binlog数据,以实现对应用层的实时数据消费和处理。canal客户端在特定时刻发起订阅请求后,RocketMQ或其他MQ中间件会将缓存的数据推送给该客户端。 canal客户端在获取到Binlog数据后,会进行相应的处理和解析,并将结果写入配置的目标数据存储中(如MySQL、Redis等)。 canal server通过监听MySQL binlog dump协议,实现对Binlog实时抓取,并将数据推送到指定的MQ topic中。canal客户端可以通过订阅MQ topic得到实时的Binlog数据,以完成数据消费和处理,从而实现了MySQL数据的实时同步和处理。 通过canal 的消费流程我们可以知道: canal server 端,会获取到mysql 的数据变化时,将数据解析后,封装成MQ 消息,放入到对应的topic 中;canal client 端,会通过订阅canal server 端 感兴趣的topic 从而消费数据; canal 实际上就是一个生产者和消费者的模型;canal server在默认情况下使用了RocketMQ作为消息队列,用于将解析出的binlog数据发送到下游的消费端,实现数据的异步传输和消息的可靠投递。 2.2 客户端 pom 依赖引入:每项依赖都进行了标注 <!-- 提供http 访问--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 提供实体类的get ,set ,toString 简化代码使用 --> <dependency> <groupId>org.

【深度学习】2-3 神经网络-输出层设计

前馈神经网络(Feedforward Neural Network),之前介绍的单层感知机、多层感知机等都属于前馈神经网络,它之所以称为前馈(Feedforward),或许与其信息往前流有关:数据从输入开始,流过中间计算过程,最后达到输出层。 下面来看输出层如何设计 机器学习的问题大致可以分为分类问题和回归问题。 分类问题是数据属于哪一个类别的问题。例如区分图像中的人是男性还是女性 回归问题是根据某个输入预测一个(连续的)数值的问题,例如根据一个人的图像预测这个人的体重 分类和回归属于监督学习,之所以称之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息。 与监督学习相对应的是非监督学习,此时数据没有类别信息,也不会给定目标值。在非监督学习中,将数据集合分成由类似的对象组成的多个类的过程被称为聚类:将寻找描述数据统计值的过程称之为密度估计。此外,非监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。 恒等函数和sigmoid函数和softmax函数 恒等函数主要用于对回归问题的激活,这种问题中往往需要最大程度的保护最后的输出结果,因为回归问题往往最后计算的结果是一个具体的权重,也是最终答案,那当然是原封不动的输出是最好的。所以恒等函数简单点来说那就是什么都不做 恒等函数会将输人按原样输出 sigmoid函数由于其限制在[0,1]中,所以很适合二元分类。 softmax函数充分考虑每一个输出结点的权重影响,从而使概率的描述更加准确,适合多元分类。 softmax函数可以用下面的式子表示 softmax函数的分子是输人信号的指数函数,分母是所有输人信号的指函数的和。(softmax所有值加起来是1) 使用python来实现softmax def softmax(a): exp_a = np.exp(a) sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a return y softmax 的缺陷就是溢出问题,因为使用指数计算,值会变得非常大,改进的代码如下: def softmax(a): c = np.max(a) exp_a = np.exp(a - c) #溢出对策 sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a return y 通过减少输入信号中的最大值来解决溢出的问题 softmax函数的特征 softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。正是因为softmax函数的输出值的总和都是1,所以可以用概率(统计的)方法处理问题 关于理解机器学习的问题 机器学习的步骤可以分为“学习”和“推理”两个阶段 首先在学习阶段进行模型的学习,然后,在推理阶段,用学到的模型对未知的数据进行推理(分类)。 softmax函数用在学习不用在推理阶段 将softmax函数引入输出层 如下面例子: def forward_net(network,x): W1 = network['W1'] b1 = network['b1'] W2 = network['W2'] b2 = network['b2'] W3 = network['W3'] b3 = network['b3'] x = np.

使用Navicat Premium连接本地数据库

1.这是本地服务器项目 里面有config文件夹下有default.json文件,其中里面配置在连接数据库需要用到。 2.打开Navicat Premium,点击链接,选择mysql 3.连接名自定义,主机:因为后端的项目是本地的,所有这里用localhost或者127.0.0.1 都是表示本地的,密码是你一开始下载mysql设置的密码(同时要更改项目的密码,两者保持一致)填写完毕之后 可以先测试连接,连接成功就保存。 4.保存之后 ,双击你自定义的名字 就会高亮。 5.右击自定义的名字选择新建数据库,数据库名为项目配置里的database的,字符集utf8,排序规则utf8_general_ci 最后保存。 6.右击刚才创建的database,选择运行sql文件 会出现下面的弹框进行选择,最后点击开始 7. 以上操作就把本地数据库用navicat连接起来了,此时就可以到后端项目里安装node.js,并启动项目 安装环境:cnpm i 启动项目:node app.js 7.出现上面图,就表示你的后端项目跑了,可以访问了 

利用VUE3生成二维码(两种方式)

vue有两种生成二维码的方式,qrcode、vue-qr(有icon) 1、qrcode npm ``install` `--save qrcodejs2 //所需页面导入 import QRCode from 'qrcodejs2' <div ref="qrCodeUrl"></div> <script setup lang='ts'> import {onMounted,ref} from 'vue import QRCode from 'qrcodejs2' const qrCodeUrl=ref<any>(null) const creatQrCode=()=> { var qrcode = new QRCode(qrCodeUrl.value, { text: 'https://blog.csdn.net/weixin_42601136', // 需要转换为二维码的内容 width: 100, height: 100, colorDark: '#000000', colorLight: '#ffffff', correctLevel: QRCode.CorrectLevel.H }) }, } onMounted() { creatQrCode(); } </script> 2、vue-qr 可以增加icon npm install vue-qr --save import vueQr from 'vue-qr' <template> <div> <div class="

3-dubbo框架,应用程序,模块领域模型Model对象的初始化

在上一章中我们详细看了服务配置ServiceConfig类型的初始化,不过我们跳过了AbstractMethodConfig的构造器中创建模块模型对象的过程 那为什么会在Dubbo3的新版本中加入这个域模型呢,主要有如下原因 之前dubbo都是只有一个作用域的,通过静态类 属性共享 增加域模型是为了: 1.让Dubbo支持多应用的部署,这块一些大企业有诉求 2.从架构设计上,解决静态属性资源共享、清理的问题 3.分层模型将应用的管理和服务的管理分开 可能比较抽象,可以具体点来开Dubbo3中在启动时候需要启动配置中心,元数据中心 这个配置中心和元数据中心可以归应用模型来管理,Dubbo作为RPC框架有需要启动服务和引用服务,服务级别的管理就交给了这个模块模型来管理,分层次的管理方便我们理解和处理逻辑,父子级别的模型又方便了数据传递。 了解过JVM类加载机制的同学应该就比较清楚 JVM类加载过程中的数据访问模型,子类加载器先去父类加载器去找不到则从子类型加载器中查找类型,Dubbo的分层模型类似这样一种机制,这一章先来简单了解下后面用到时候具体细说。 模型对象的关系 看最新图 模型对象一共有4个,公共的属性和操作放在了域模型类型中,下面我们来详细说下这几个模型类型: ExtensionAccessor 扩展的统一访问器 用于获取扩展加载管理器ExtensionDirector对象获取扩展对象ExtensionLoader根据扩展名字获取具体扩展对象获取自适应扩展对象获取默认扩展对象 ScopeModel 模型对象的公共抽象父类型 内部id用于表示模型树的层次结构公共模型名称,可以被用户设置描述信息类加载器管理父模型管理parent当前模型的所属域ExtensionScope有:FRAMEWORK(框架),APPLICATION(应用),MODULE(模块),SELF(自给自足,为每个作用域创建一个实例,用于特殊的SPI扩展,如ExtensionInjector) 具体的扩展加载程序管理器对象的管理:ExtensionDirector域Bean工厂管理,一个内部共享的Bean工厂ScopeBeanFactory FrameworkModel dubbo框架模型,可与多个应用程序共享 FrameworkModel实例对象集合,allInstances所有ApplicationModel实例对象集合,applicationModels发布的ApplicationModel实例对象集合pubApplicationModels框架的服务存储库FrameworkServiceRepository类型对象(数据存储在内存中)内部的应用程序模型对象internalApplicationModel ApplicationModel 表示正在使用Dubbo的应用程序,并存储基本元数据信息,以便在RPC调用过程中使用。ApplicationModel包括许多关于发布服务的ProviderModel和许多关于订阅服务的Consumer Model。 ExtensionLoader、DubboBootstrap和这个类目前被设计为单例或静态(本身完全静态或使用一些静态字段)。因此,从它们返回的实例属于流程范围。如果想在一个进程中支持多个dubbo服务器,可能需要重构这三个类。所有ModuleModel实例对象集合moduleModels发布的ModuleModel实例对象集合pubModuleModels环境信息Environment实例对象environment配置管理ConfigManager实例对象configManager服务存储库ServiceRepository实例对象serviceRepository应用程序部署器ApplicationDeployer实例对象deployer所属框架FrameworkModel实例对象frameworkModel内部的模块模型ModuleModel实例对象internalModule默认的模块模型ModuleModel实例对象defaultModule ModuleModel 服务模块的模型 所属应用程序模型ApplicationModel实例对象applicationModel模块环境信息ModuleEnvironment实例对象moduleEnvironment模块服务存储库ModuleServiceRepository实例对象serviceRepository模块的服务配置管理ModuleConfigManager实例对象moduleConfigManager模块部署器ModuleDeployer实例对象deployer用于导出和引用服务 了解了这几个模型对象的关系我们可以了解到这几个模型对象的管理层级从框架到应用程序,然后到模块的管理(FrameworkModel->ApplicationModel->ModuleModel),他们主要用来针对框架,应用程序,模块的存储,发布管理,配置管理 ApplicationModel.defaultModel().getDefaultModule() 我们分析这一行做了哪些事情 使用双重校验锁获取框架模型对象 /** * During destroying the default FrameworkModel, the FrameworkModel.defaultModel() or ApplicationModel.defaultModel() * will return a broken model, maybe cause unpredictable problem. * Recommendation: Avoid using the default model as much as possible. * @return the global default FrameworkModel * * 在源码的注释上有这么一句话:在销毁默认的 FrameworkModel 时, FrameworkModel.

chatgpt赋能python:Python除法:介绍、使用方法和注意事项

Python除法: 介绍、使用方法和注意事项 Python是一门既简单又高效的编程语言,在数据科学、人工智能、Web应用等领域都有很广泛的应用。其中,Python的除法是编写代码时经常用到的一个基础运算符。本文将介绍Python中除法的使用方法、注意事项以及一些常见问题的解决方法。 什么是Python除法? 在Python中,除法是一种基本的算术操作,用于将一个数值除以另一个数值,并返回结果。Python中有两种不同的除法操作: /:普通除法,返回一个浮点数,即使是两个整数相除也是如此。//:整除法,返回一个整数,即忽略余数,只返回整数商。 使用方法 在Python中使用除法非常简单。我们可以使用除号(/)或双斜杠符号(//)来执行普通除法或整除法。 # 普通除法 result = 10 / 2 print(result) # 输出:5.0 # 整除法 result = 10 // 3 print(result) # 输出:3 需要注意的是,如果运算的两个数都是整数,那么使用普通除法 / 也会返回一个浮点数。这种情况下,如果想要返回一个整数商,应该使用整除法 //。 result = 10 / 3 print(result) # 输出:3.3333333333333335 result = 10 // 3 print(result) # 输出:3 注意事项 在使用Python除法时,需要注意以下几点: 除数不能为零 在任何编程语言中,除数不能为零。否则程序将会抛出 ZeroDivisionError 异常。因此,在编写代码时,需要确保输入数据中不包含除以零的情况。 result = 10 / 0 # 抛出 ZeroDivisionError 异常 浮点数精度问题 在Python中,浮点数的精度问题经常会导致意想不到的结果。例如,下面的代码执行的结果可能不是你期望的: result = 0.1 + 0.

Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index: 6, Size: 6

项目突然报这个错误,研究半天,找到解决办法。 项目请求获取token接口,如下提示。 查看后端报错详细信息。贴出一段比价有价值的报错信息 Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 ### The error may exist in file [D:\IDEAWORKSPACE\YJFDataPlatform\yjf-server\target\classes\mapper\TsysAccountMapper.xml] ### The error may involve com.cn.yjf.server.dao.TsysAccountMapper.selectByName ### The error occurred while handling results ### SQL: select account_id, user_id, username, password, status, active from t_sys_account WHERE username = ? limit 1 ### Cause: java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at org.

SyntaxError: The requested module ‘xxx‘ does not provide an export named ‘default‘ (at xxx)

使用export default时,对应的import语句不需要使用大括号; 不使用export default时,对应的import语句需要使用大括号。 export default命令用于指定模块的默认输出。显然,一个模块只能有一个默认输出,因此export default命令只能使用一次。所以,import命令后面才不用加大括号,因为只可能唯一对应export default命令

VM安装linux虚拟机宿主机连接不上虚拟机问题处理及静态ip设置

VM安装linux虚拟机宿主机连接不上虚拟机问题处理 用 vm安装linux虚拟机宿主机连不上虚拟机,ipconfig宿主机发现VMnet1以及VMnet8的Ip都变成了169.254开头的地址,网上各种方式都试了都不行,要么 是 虚拟机连不上网,要么 是宿主机连 不上虚拟机,通过以下方式还原为默认设置后 重启虚拟机竟然可以了。 虚拟机静态IP网络配置 一、VMware及本地网络设置 首先,打开VMware主界面,点击上方工具栏 编辑-虚拟网络编辑器,查看当前VMnet信息 在这里可以看到有三种类型,分别是桥接模式,仅主机模式和NAT模式。和上面讲的一样: 桥接模式:在当前网络分配一个独立的IP给虚拟机,可与其他终端直接通信 仅主机模式:虚拟机仅可与主机通信 NAT模式:由VMware创建一个虚拟的NAT网关,虚拟机与外网通信时会将IP地址转换为主机IP,其 他终端无法直接与虚拟机通信 1、由于此处我们设置的是NAT的网络类型,所以我们选择VMnet8网卡,点击更改设置。 2、 进入更改界面后再次选择VMnet8网卡,去掉"使用本地DHCP服务将IP地址分配给虚拟机"前面的勾,这个是动态分配IP的,子网IP和子网掩码保持不变,点击NAT设置 3、在这里我们可以看到三个重要的网络信息,分别是子网IP,子网掩码和网关IP: 子网IP:标识NAT模式下的所有子网,该模式下的所有子网地址需在此网段下 子网掩码:划分网络号与主机号 网关:虚拟NAT设备地址 我们需要记住这些信息!!!不需要改变!!! 4、打开本地电脑的网络设置,选择VMnet8网卡,右键属性,配置IPV4的的属性 选择使用下面的IP地址,IP地址填写和第三步中的子网IP同一网关的任意IP即可,子网掩码和默认网关为第三步中的子网掩码和网关IP,再配置静态的DNS,国内公网的都行 2、centos7中的网络设置 #虚拟机网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改完成后重启虚拟机网络 systemctl restart network 1 尝试连接百度看是否能ping通 至此网络配置全部完成,最后别忘了关闭防火墙 systemctl stop firewalld systemctl disable firewalld

【黑马头条】解决P11@EnableDiscoveryClient注解无法导入爆红、bootstrap.yml配置文件图标无法显示成带云朵的小绿叶图标

本期目录 1. 问题描述2. 问题原因3. 解决方法 1. 问题描述 如果按黑马老师给的 heima-leadnews-service 模块的 pom 文件所写的依赖,会发现有 2 个 Bug : 首先,启动类 UserApplication 上的服务发现开关注解 @EnableDiscoveryClient 不存在。 第二,resource 目录下创建的 bootstrap.yml 配置文件的图标无法正确显示成小绿叶图标,只是显示普通的 YAML 文件。 2. 问题原因 heima-leadnews-service 模块缺少依赖 spring-cloud-context 导致 bootstrap.yml 配置文件的图标无法正确显示成小绿叶图标;缺少依赖 spring-cloud-commons 导致服务发现开关注解 @EnableDiscoveryClient 不存在。 3. 解决方法 在 heima-leadnews-service 模块的 pom 文件中添加 OpenFeign 的依赖。因为 OpenFeign 依赖自带了上述所提到的 Spring Cloud 的依赖,如下图所示: <!-- Feign远程调用客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> heima-leadnews-service 模块完整的 pom 文件依赖如下: <!-- 引入依赖模块 --> <dependencies> <!-- 数据模型子模块 --> <dependency> <groupId>com.

iOS 集成Jenkins pipeline 自动打包并上传蒲公英

文章目录 1 创建一个Jenkins pipeline 项目Pipeline script打包和上传蒲公英脚本 1 创建一个Jenkins pipeline 项目 上面那几个配置项其实不用关心的,我们这里先实现一个简单的能够打包的流程 这里只配置Pipeline script Pipeline script 主要的流程都是有pipeline script 来完成的 pipeline { agent any environment { archivesh = "./archive.sh" } stages { stage('checkout') { steps { git branch: "master", url: "https://gitee.com/liuboliu/pengpailiubo.git" } } stage('build') { steps { sh """ chmod -R +x ${archivesh} ${archivesh} """ } } } } 注意,上面pipeline 命令中的 archivesh 脚本文件是在工程的根目录下,如图 打包和上传蒲公英脚本 #!/bin/bash -l # 设置utf8编码 export LANG=en_US.UTF-8 APP_NAME="ThePaperBase" #获取当前版本号 get_build_version=`xcodebuild -showBuildSettings -target ${APP_NAME} | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION = '` old_build_version=$get_build_version echo "

Shell 文件读取操作

test.sh version-list=[1.0,2.0,5.0] new-version=3.0 1、cat + grep value=`cat test.sh | grep new-version` version=${value#*=} 2、按行读取 三种方式 #!/bin/bash while read line do echo $line done < filename(待读取的文件) #!/bin/bash cat filename(待读取的文件) | while read line do echo $line done for line in `cat filename(待读取的文件)` do echo $line done 参考文档: 1、https://www.cnblogs.com/lovemakee/p/10930371.html 2、https://www.jb51.net/article/56563.htm

Mac下 对readonly类型文件或者目录操作方法

mac 环境对readonly类型文件修改、目录下创建文件正常操作都会失败,如下: vim /etc/hosts ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost # 100.81.197.201 hsp.aliyun-inc.com 11.164.61.51 hsp.aliyun-inc.com # Added by Docker Desktop # To allow the same kube context to work on the host and the container: 127.0.0.1 kubernetes.docker.internal # End of section ~ -- INSERT -- W10: Warning: Changing a readonly file # 使用 wq!

K8S之 metrics-server 组件(十八)

首先下载:K8S之 metrics-server 组件 metrics-server 是一个集群范围内的资源数据集和工具,同样的,metrics-server 也只是显示数据,并不提供数据存储服务,主要关注的是资源度量 API 的实现,比如 CPU、文件描述符、内存、请求延时等指标,metric-server 收集数据给 k8s 集群内使用,如 kubectl,hpa,scheduler 等 。 1、部署 metrics-server 组件 #把离线镜像压缩包上传到 k8s 的各个节点,按如下方法手动解压: [root@master1 ~]# ctr images import aliyun-metrics-server-amd64-0-3-6.tar.gz [root@master1 ~]# ctr images import aliyun-addon.tar.gz [root@node1 ~]# ctr images import aliyun-metrics-server-amd64-0-3-6.tar.gz [root@node1 ~]# ctr images import aliyun-addon.tar.gz [root@node2 ~]# ctr images import aliyun-metrics-server-amd64-0-3-6.tar.gz [root@node2 ~]# ctr images import aliyun-addon.tar.gz #部署 metrics-server 服务 #在/etc/kubernetes/manifests 里面改一下 apiserver 的配置 注意:这个是 k8s 在 1.17 的新特性,如果是 1.

msvcr110.dll丢失的解决方法-dll一键下载修复

我们在运行软件程序或者游戏的时候,如果程序提示“无法启动此程序,因为计算机中丢失msvcr110.dll。尝试重新安装该程序以解决此问题”,如果说明您电脑系统中缺少或者未注册msvcr110.dll这个运行库文件,那么我们要如何解决这个问题?下面分享一下无法启动此程序,因为计算机中丢失msvcr110.dll的解决方法。 计算机中丢失msvcr110.dll的解决方法介绍 下载电脑丢失的dll文件需要打开电脑浏览器在顶部网页输入【dll修复程序.site】进入点击安装下载文件压缩包(亲测有效,已经修复完成) 下载完成压缩包把压缩包解压,(解压完成右键打开文件)打开修复程序,然后点击下一步开始检测电脑计算机系统丢失的dll文件,检测过程需要几分钟,耐心等候安装修复安装完成,点击完成退出(dll文件是系统文件安装完成不会出现在电脑桌面) 修复安装完成,回到电脑桌面找到并且打开提示丢失dll文件的软件,就可以正常打开了。 很多小伙伴不知道什么是msvcr110dll,msvcr110dll是什么 “msvcr110.dll”是Windows操作系统中的一个动态链接库文件,它包含了许多常用的C运行库函数。在Windows系统中,如果用户需要运行一个编译好的程序,就需要先在系统中安装对应的运行库文件。 该文件是它是Microsoft公司专门为开发人员提供的软件开发工具。这个文件的作用是为编译好的程序提供必要的运行环境支持。 在使用Windows系统时,用户可能会遇到一些问题,比如出现“无法启动程序,缺少msvcr110.dll文件”等错误提示。这通常是因为用户的系统中缺少了这个文件,可以使用上面解决方法解决这个问题 总之,“msvcr110.dll”是一个非常重要的系统文件,它为开发人员提供了许多便利和支持,也为用户的系统正常运行提供了必要的安全保障。

whisperX 语音识别本地部署

WhisperX 是一个优秀的开源Python语音识别库。 下面记录Windows10系统下部署Whisper 1、在操作系统中安装 Python环境 2、安装 CUDA环境 3、安装Annaconda或Minconda环境 4、下载安装ffmpeg 下载release-builds包,如下图所示 将下载的包解压到你想要的路径,然后配置系统环境:我的电脑->高级系统设置->环境变量->Path 设置完成后打开cmd窗口输入 ffmpeg 5、conda环境安装指定位置的虚拟环境 conda create --prefix=D:\Projects\LiimouDemo\WhisperX\Code\whisperX\whisperXVenv python=3.10 6、激活虚拟环境 conda activate D:\Projects\LiimouDemo\WhisperX\Code\whisperX\whisperXVenv 7、安装WhisperX库 pip install git+https://github.com/m-bain/whisperx.git 8、更新WhisperX库 pip install git+https://github.com/m-bain/whisperx.git --upgrade 9、在Python中使用 import whisperx import time import zhconv device = "cuda" audio_file = "data/test.mp3" batch_size = 16 # reduce if low on GPU mem compute_type = "float16" # change to "int8" if low on GPU mem (may reduce accuracy) # compute_type = "

煮茶论互联网五大工种,究竟哪个更适合可爱的女孩子呢

临近毕业,马上要面临的毫无疑问就是实习、面试、工作等等等...在这之前啊,我们先慢下来一点,细细的聊一聊互联网,程序员!以后能做什么。当然对于大一新生,这篇文章也有非常大起到指引方向的作用。 闲话不多说~我们开始八 互联网五大工种🍉 首先,我们来聊聊或者说介绍一下我们的互联网五大工种八~ ①开发🎈 简而言之:开发主要工作就是通过编写代码,开发出硬件/软件产品。 开发岗位指的是从事软件开发工作的职业。开发人员通常涉及到编写、测试和维护各种类型的软件、应用程序和系统。开发岗位通常被分为前端开发、后端开发和全栈开发三类。 前端开发人员负责创建和维护用户界面,他们使用HTML、CSS和JavaScript等技术来开发网站和应用程序的用户界面。 后端开发人员负责设计和开发应用程序的后端,包括数据库和服务器端逻辑。他们使用各种编程语言和框架,如Java、Python、PHP和Ruby等。他们还负责确保应用程序在服务器上运行稳定,并与前端界面进行交互。 全栈开发人员则拥有前端开发和后端开发的技能,能够同时处理网站或应用程序的前端和后端。 开发岗位需要具备扎实的编程技能、解决问题的能力和团队合作能力。开发人员还应该关注技术发展和新兴技术的使用,以不断提升自己的技能水平。 开发岗推荐指数:★★★☆☆,熬夜指数:★★★☆☆。 推荐理由:企业里还是可以随处可见女孩子的,但是开发岗对代码能力要求很高,需要极高的兴趣和大量的时间钻研才能够胜任,女孩子可能需要把大部分时间放到提高自己的技术方面,减少花费在其他方面时间,如:打扮、旅游等。 ②运维🎈 简而言之:运维工作是保障公司软件运行的各个环境,确保生产环境的安全和稳定 运维(Operations and Maintenance,简称O&M)岗位是指负责维护和管理计算机系统、网络设备、服务器、数据库等信息技术基础设施的工作。运维工作内容包括系统监控、故障排除、安全管理、备份和恢复、性能优化、容量规划、版本控制、软硬件更新和升级等方面。运维人员需要具备扎实的计算机技术知识和实际操作经验,能够快速、准确地定位和解决各种技术问题,保障系统的稳定运行和高效性能。同时,运维人员还需要具备良好的沟通能力和团队合作精神,与其他部门的同事、供应商和客户保持良好的合作关系,共同推动业务发展和创造价值。 运维岗推荐指数:★★☆☆☆,熬夜指数:★★★★★。 推荐理由:1、运维岗一般需要7*24快速响应,尤其是一些单位基本上都有轮班,长期的话不合适女孩子,当然了,男孩子估计能多抗一段时间,得到提升以后一般无非是转岗提升或是转型到其他领域中去了。2、有的公司运维需要兼职部分网管职责,本身就是一个背锅的岗位加上还有其他的临时性工作,就应变突发情况来看别说女孩子,很多男孩子估计都够呛。3、其他不说,就仅仅工作强度来看,确实不适合长期做,尤其是女孩子。 ③测试👑 简而言之:测试主要是测试产品功能,也包括测试代码; 测试岗位通常是软件开发团队中的一个关键职位。测试人员的主要职责是测试软件应用程序或系统,以确保它们符合用户需求和规范,并且没有系统漏洞或错误。这个职位需要有系统性的思考和逻辑分析能力,以及对软件开发和测试技术的深刻理解。 测试人员通常需要执行以下任务: 编写测试计划和测试用例,以确保软件应用程序或系统的功能和性能符合设计要求。 进行手动和自动化测试,以检查软件应用程序或系统的正确性、可靠性和稳定性。 记录和跟踪软件应用程序或系统的缺陷,并协助开发人员修复错误。 协助开发人员进行集成测试和系统测试,并提供测试结果和建议。 与其他团队成员(如开发人员、项目经理和用户代表)合作,确保软件应用程序或系统的质量和用户满意度。 测试人员需要具备以下技能和能力: 对软件开发和测试流程有深刻的了解和理解。 熟悉测试工具和技术,包括手动测试、自动化测试、性能测试和安全测试。 具备良好的沟通和协作能力,能够与开发人员、项目经理和用户代表进行有效的沟通和合作。 具备分析和解决问题的能力,能够快速识别和解决缺陷和错误。 具备对细节的关注和耐心,能够仔细检查和测试软件应用程序或系统的各个方面。 测试岗位推荐指数:★★★★★,熬夜指数:★☆☆☆☆。 推荐原因:这岗位我十分推荐,从薪资、难度和工作时间稳定性各方面综合来看这个岗位应该是最适合女孩子来做的了。1、国内软件测试起步比较晚,这导致了市场上有十分多空缺的岗位。2、软件测试的薪资在行业内也是很可观的,在北上广等一线城市,有两三年工作功能测试经验可以拿到10K左右的月薪,有两三年自动化经验可以拿到17K左右的月薪,如果在安全、性能、可靠性测试方面有足够的经验,30K以上的月薪不是梦想。3、软件测试的职业寿命长,软件测试没有年龄的限制,细心耐心就能胜任,软件测试看重的是经验的积累,反而"越老越值钱",而且由于涉猎广泛,行业背景丰富的话,可以转行业专家或者产品专家等。 ④编程老师🎈 编程老师一般分为两类:编程幼师和编程讲师。 (4.1)编程幼师🍉 (教学对象:就读幼儿园和小学的幼儿。)🌹 简而言之:编程幼师一般是指通过趣味编程教会幼儿编写程序,并传授幼儿编程技能。 编程幼师需要具备以下特点: 1.熟悉编程语言和技术,了解幼儿的认知和学习规律。 2.具备良好的沟通和教学技能,善于与幼儿沟通,引导幼儿学习编程知识。 3.具有创新精神和教育思维,能够根据幼儿的学习情况进行相应的调整和改进,提高幼儿的学习效果。 编程幼师的主要职责包括: 1.为幼儿设计并编写编程课程,并根据幼儿的学习情况进行调整和改进。 2.与幼儿进行沟通,引导他们学习编程知识。 3.记录幼儿的学习情况和进展,及时反馈给家长和园所管理者。 4.组织和参与编程教育相关的活动和竞赛,提高幼儿的编程技能和兴趣。 总之,编程幼师是一种既有编程技能,又有教育经验的人才,他们致力于通过编程教育,帮助幼儿开发创新思维,提高综合素质。 (4.2)编程讲师🍉 ( 教学对象:初高中的青少年。)🌹 简而言之:编程讲师是主要负责教授编程技术和知识,培养学生的编程思维和通过编程解决问题的能力。 编程讲师是一位专业的教育工作者,主要负责教授编程技术和知识,帮助学生掌握编程语言和工具的使用方法,培养学生的编程思维和解决问题的能力。他们通常拥有丰富的编程经验和教学经验,能够根据学生的不同需求设计个性化的教学方案,指导学生进行编程实践,提高学生的编程水平。编程讲师还需要不断学习和更新自己的知识,跟进行业发展,以便更好地指导学生。他们可以在学校、培训机构、在线教育平台等多个领域从事教学工作。 推荐指数:★★★★☆,熬夜指数:★☆☆☆☆。 推荐原因:工作轻松,每周双休,薪资可观,幼师(5k-7k), 讲师(7k-13k)。对编程要求较低。 ⑤实施🎈 一言难尽的岗位,总之待遇也是很不错的,但是太累了,经常性的东跑西跑出差,而且可能经常熬夜,不适合美美的女孩子。 有效的结论🍉 以上工种, 按工资高低排序为:开发>测试=运维>=编程老师>实施👏 按辛苦程度排名:开发>测试=运维=实施>编程老师(各有各的辛苦)🎉 按编程技术难度排名:开发>运维≥ 测试>编程老师>实施🤳 所以综合来看,女孩子最合适的工种无非①测试岗位②编程老师。

微服务中常见问题

Spring Cloud 组件 Spring Cloud五大组件有哪些? Eureka:注册中心 Ribbon:负载均衡 Feign:远程调用 Hystrix:服务熔断 Zuul/Gateway:服务网关 随着SpringCloud Alibaba在国内兴起,我们项目中使用了阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 Sentinel 服务网关 Gateway 注册中心Eurake和注册中心Nacos Eurake工作原理 首先Eurake中会对所有的服务进行注册,在Eurake中保存服务提供者的基本信息服务消费者在需要调用的时候就从Eurake中拉取服务,然后在服务的消费者内部使用负载均衡的方式选取对应的服务然后直接去请求对应的服务Eurake与服务提供者通过心跳的方式保持监测,Eurake会定期监测服务的心跳是否存在,默认是30秒一次。一旦一个服务没有心跳,那么在Eurake中会将这些服务剔除掉。 服务注册和服务发现是什么意思?Spring Cloud如何实现服务注册发现的? 我们当时采用的是Eurake作为注册中心,这个是Spring Cloud体系中的一个核心的组件服务注册:服务提供者需要把自己的信息注册在Eurake,由Eurake来保存这些信息,比如服务的名称,ip,端口等等。服务发现:消费者向Eurake拉取服务列表信息,如果服务提供者有集群,则消费者利用负载均衡的算法,选择一个进行调用服务监控:服务提供者每隔30秒向Eurake发生心跳,报告健康状态,如果Eurake服务90秒没收到心跳,从Eurake剔除当前服务。 Nacos工作原理 Nacos和Eurake的区别 Nacos和Eurake的共同点(注册中心) 都支持服务的注册和服务的拉取都支持服务提供者心跳的方式做健康检测 Nacos和Eurake的区别 Nacos支持服务端主动监测提供者的状态:临时实例采用心跳模式,非临时实例采用主动检测模式临时实例心跳不正常会被剔除,非临时实例则不会剔除Nacos支持服务列表变更的消息推送模式,服务列表更新更及时Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式,Eurake采用AP模式 Nacos还支持配置中,Eurake则只是注册中心,也是选择使用Nacos的一个重要的原因 Ribbon负载均衡 负载均衡Ribbon,发起远程调用Feign就会使用RibbonRibbon的负载均衡策略有哪些?如果自定义负载均衡如何实现? 负载均衡流程 当一个服务需要调用另一个服务的时候,发起请求,进入Ribbon,Ribbon再去注册中心区获取调用服务列表,然后使用负载均衡的策略选取一个服务,然后调用对应的服务。 负载均衡的策略有哪些? RoundRobinRule:简单轮询服务列表选择服务器WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小RandomRule:随机选择一个可用服务器RestAvailableRule:忽略哪些短路的服务器,并选择并发数较低的服务器RetryRule:重试机制的选择逻辑AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较小的实例ZoneAvoidanceRule:以区域可用服务器为基础进行服务器的选择,使用Zone对服务器进行分类,这个Zone可以理解为一个机房,一个机架,而后再对Zone内的多个服务器做轮询。 如何自定义负载均衡策略? 可以自己创建Rule接口,然后通过配置类或者配置文件即可,通过自定义IRule可以实现修改负载均衡规则,有两种方式: 负载均衡如何实现的? 微服务中的负载均衡使用一个组件叫做Ribbon,比如,我们在使用Feign远程调用的过程,底层的负载均衡使用了Ribbon Ribbon负载均衡的策略有哪些? RoundRobbinRule:简单轮询服务器列表选择服务器WeightedResponseTimeRule:按照权重服务器,响应时间越长,权重越小RandomRule:随机选择一个可用的服务器ZoneAvoidanceRule:区域敏感策略,以区域可用的服务器为基础进行服务器的选择,使用Zone对服务进行分类,这个Zone可以理解为一个机房,一个机架等等,而后对Zone内的多个服务器做轮询(默认) Spring Cloud 服务雪崩 熔断降级 服务雪崩效应是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。 通俗的来说就是在微服务中一个服务提供方挂了之后,那么服务的调用者就会请求就会一直等待响应,然后与此同时别的消费者也同样的来请求这个服务,会导致服务的上游直接全部挂掉进而去影响服务的上上游造成雪崩的问题。 服务降级 服务降级是服务自我保护的一种方式,或者保护下游服务器的一种方式,用于确保服务不能受请求突增影响变得不可用,确保服务不会崩溃。 降级的逻辑,当前如果服务正常,那么就走服务接口去请求数据,如果服务不同的话,直接去对服务进行降级,访问自顶替的接口,提示“获取数据失败”。 服务熔断 Hystrix熔断机制,用于监控微服务调用的情况,默认是关闭的,如果开启需要再引导类上添加注解: @EnableCircuitBreaker如果检测到10秒内请求失败率超过50%,就会触发熔断机制,之后每隔5秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制,如果微服务可达,则关闭熔断机制,恢复正常请求。 什么是服务雪崩,怎么解决这个问题? 服务雪崩,一个服务失败,导致整条链路的服务都失败的情形服务降级:服务自我保护的一种方式,或者保护下游服务器的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般实际开发中与Feign接口整合,编写降级逻辑。服务熔断:默认关闭,需要手动打开,如果监测到10秒之内请求失败率超过百分之50%,就触发熔断机制,之后间隔每5秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制,如果微服务可达关闭熔断机制,恢复正常请求。 服务降级是针对某一个接口,并不是某一个服务,而服务熔断针对的是整个服务。 Spring Cloud微服务监控 第一个问题:问题定位,当spring cloud中某一个微服务挂了之后,我们如何才能快速的定位到是哪一个微服务出现了问题? 第二个问题:性能分析,假如某一条请求响应的异常的慢,那么我们如何可以快速的定位到时那一条服务出现了问题呢? 第三个问题:服务的关系,如果微服务中的服务量过小的话我们可能可以快速的梳理清楚服务之间的关系,但是一旦服务量过大,几百上千个微服务那么关系式很难梳理的

Java heap space 内存堆栈溢出 解决方法

因为程序要从2个多G的文件中解码读取数据,读取近10W行记录处理,然后就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误。 在网上一查可能是JAVA的堆栈设置太小的原因。 跟据网上的答案大致有这两种解决方法: 1、设置环境变量 set JAVA_OPTS= -Xms8192mm -Xmx10240m 可以根据自己机器的内存进行更改,但本人测试这种方法并没有解决问题。可能是还有哪里需要设置。 2、java -Xms8192m -Xmx10240m className 就是在执行JAVA类文件时加上这个参数,其中className是需要执行的确类名。(包括包名) 这个解决问题了。而且执行的速度比没有设置的时候快很多。 如果在测试的时候可以在iead启动类 设置Edit Configurations-> VM options , 中输入 -Xms8192mm -Xmx10240m这个参数就可以了。 java.lang.OutOfMemoryError: Java heap space ======================================================================= 对于垃圾回收的原理不太了解,就在网上查了一下,发现了几篇不错的文章。 http://java.ccidnet.com/art/3539/20060314/476073_1.html http://www.pconline.com.cn/pcedu/empolder/gj/java/0509/701281.html 还有:Java堆的管理—垃圾回收提到一下几点,很不错,或许可以作为写程序时候的准则: (1)不要试图去假定垃圾收集发生的时间,这一切都是未知的。比如,方法中的一个临时对象在方法调用完毕后就变成了无用对象,这个时候它的内存就可以被释放。 (2)Java中提供了一些和垃圾收集打交道的类,而且提供了一种强行执行垃圾收集的方法--调用System.gc(),但这同样是个不确定的方法。Java 中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。 (3)挑选适合自己的垃圾收集器。一般来说,如果系统没有特殊和苛刻的性能要求,可以采用JVM的缺省选项。否则可以考虑使用有针对性的垃圾收集器,比如增量收集器就比较适合实时性要求较高的系统之中。系统具有较高的配置,有比较多的闲置资源,可以考虑使用并行标记/清除收集器。 (4)关键的也是难把握的问题是内存泄漏。良好的编程习惯和严谨的编程态度永远是最重要的,不要让自己的一个小错误导致内存出现大漏洞。 (5)尽早释放无用对象的引用。 大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null,暗示垃圾收集器来收集该对象,还必须注意该引用的对象是否被监听,如果有,则要去掉监听器,然后再赋空值。 就是说,对于频繁申请内存和释放内存的操作,还是自己控制一下比较好,但是System.gc()的方法不一定适用,最好使用finallize强制执行或者写自己的finallize方法。 扩展: JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。在JVM启动时,JVM堆会自动设置heap size值。通常情况下,初始空间(即-Xms)默认值是物理内存的1/64,最大空间是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。这里对各个参数的意义解释一下: -Xms:初始值 -Xmx:最大值 -Xmn:最小值 Heap Size的设置不宜太小,也不宜太大。若设置太小程序的响应速度会变慢了,因为GC占用了更多的时间,而应用分配到的执行时间较少。太大也会造成空间的浪费,而且也会影响其他程序的正常运行。Heap Size 最大最好不要超过可用物理内存的80%。建议将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。 ================================================ 过多的知识点就不在此多哔哔了,以下有几条链接,兄弟们可以参考: JAVA HEAP SPACE解决方法和JVM参数设置_临风赏月的博客-CSDN博客

Linux下交叉编译opencv以及错误解决

Linux下交叉编译opencv 1、下载opencv源码 下载地址:https://opencv.org/releases/ 选择你需要的版本,点击Sources。 将源码放在ubuntu随便一个目录下并解压 进入解压好的opencv目录,创建两个文件夹build和install: 2、cmake-gui配置: 首先打开cmake-gui,若没有,请使用sudo apt-get install安装、 圆圈处填上opencv源码路径,矩形处填刚刚创建的build路径。 点击configure 这两个地方和我选一样的 Target System →Operating System 填写Linux (L大写,填入其他如:linux-arm,后面configure会出现错误); Compliers → C and Complier → C++填入对应交叉编译工具链gcc和g++路径; Target Root: 交叉编译工具链bin目录路径 Finish; 无报错 交叉编译工具自行下载,网上一堆教程。 配置结束就是这样 在cmake-gui中取消勾选WITH_1394 然后把这个位置换成刚刚创建的install目录: 3、开始编译 进入build目录,使用sudo make -j4开始编译,这个过程很漫长。。。 报错: 往上翻发现: 修改这个文件: 加上这一行,保存、退出, #define HAVE_PTHREAD make clean一下,再重新编译 新错误: 修改方法: 进入报错文件: 加上图中这一句: 加上这一行,保存、退出, make clean一下,再重新编译 新错误: 解决方法: 进入${HOME}/opencv-3.3.14/3rdparty/libpng/pngpriv.h 将这一段代码 # if (defined(ARM_NEON) || defined(__ARM_NEON)) && */ 改成 # if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) && \ 编译成功:

Python四则运算“计算器”——整数口算练习“小程序”

设定练习题目数量、最大取值整数数,即时判定,答对鼓励答错打印正确结果。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址:https://lqpybook.readthedocs.io/ 自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。 —— 华罗庚 My CSDN主页、My HOT博、My Python 学习个人备忘录好文力荐、 老齐教室 设定练习题数、最大取值数 整数口算练习“小程序” (即时判定,答对鼓励答错打印结果) 本文质量分: 【 90 】 本文地址: https://blog.csdn.net/m0_57158496/article/details/130876595 CSDN质量分查询入口:http://www.csdn.net/qc 目 录 ◆ 整数口算练习“小程序”1、本“项目”用到的“工具”2、四则运算“计算器”函数2.1 变量设置2.2 数据处理 3、“计算器”调用3.1 模块载入3.2 常量3.3 参数录入&“计算器”调用 4、代码运行效果截屏图片5、完整源码 ◆ 整数口算练习“小程序” 题目来源 (题目来源于 CSDN 问答社区提问“ Python 随机出题数四则运算”)。 1、本“项目”用到的“工具” 模块 1、random 用 random 模块的 randint() 方法产生两个随机整数,choice() 方法随机选择四则运算符 “+-*/” 。 2、time 用 time() 方法获取系统当前时间秒,以方便计算“练习计算”所用时长和平均解题用时。 内置函数 eval ,将“四则运算表达式”字符串转换成 Python 对象,得出结果(Python 对象如果是表达式,可以自动计算结果)。 回页目录 2、四则运算“计算器”函数 2.