链表的回文结构OJ

链表的回文结构_牛客题霸_牛客网对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为。题目来自【牛客题霸】https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId=49&&tqId=29370&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking 题目 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->2->2->1 返回:true 本题用到了链表的逆转和链表的中间节点的应用 首先说一下链表的中间节点的查找 struct ListNode* midfind(struct ListNode* head) { struct ListNode*fast,*slow=head; while(fast&&fast->next) { fast=fast->next->next; slow=slow->next; } return slow; } 中间结点的查找主要运用到了快慢指针的遍历。快指针比慢指针多走一步,最后快指针走到NULL,或者快指针的next为NULL停止。 再来说一下链表的逆转 struct ListNode* reverselist(struct ListNode*head) { struct ListNode*prve= NULL; struct ListNode*cur=head; while(cur) { struct ListNode*next=cur->next; cur->next=prve; prve=cur; cur=next; } return prve; } 逆转的本质是要先定义一个空指针,如上代码的*prve,然后下一步就开始保存cur的下一个指针,防止cur被覆盖,导致下一个节点丢失。最后返回prve即可。原因是这是的cur已经指向NULL,所以无意义。 最后是实现链表回文(注意:C++兼容C语言) #include <algorithm> class PalindromeList { public: struct ListNode* midfind(struct ListNode* head) { struct ListNode*fast,*slow=head; while(fast&&fast->next) { fast=fast->next->next; slow=slow->next; } return slow; } struct ListNode* reverselist(struct ListNode*head) { struct ListNode*prve= NULL; struct ListNode*cur=head; while(cur) { struct ListNode*next=cur->next; cur->next=prve; prve=cur; cur=next; } return prve; } bool chkPalindrome(ListNode* A) { struct ListNode* mid=midfind(A); struct ListNode* revermid=reverselist(mid); while(revermid&&A) { if(revermid->val!

vscode 执行npm命令错误,node:internal/modules/cjs/loader:1148 throw err; ^Error: Cannot find module

错误源分析 更新了一下node的版本,然后再打开vscode发现npm命令用不了了一直显示这个Cannot find module 错误, 顺着这个路径确实没有这些文件,不明白为什么npm会找这个路径,因为这个AppData里面是空文件夹,没有东西, 又查了一变环境变量,也没有发现问题,只有更新了一些node,环境变量路径被调到最后了 然后再cmd命令 行试了一变发现,命令行可以正确执行npm指令,还能启动vue项目,所以这个错误应该是vscode内部错误 解决办法 网上查了好久,终于找到一个解决办法,在vscode终端输入这个命令, get-command npm 会得到一个表,然后把表中source下路径指向的文件删除就可以了,我的已经删完了,没有保存这个终端, 最终我删除的文件是这个npm.ps1,然后vscode终端就可以正常使用命令了 , 所以这个错误原因应该是vscode 终端npm命令这个源路径指向有错误

java版B/S架构UWB人员定位系统源码spring boot+vue技术架构uwb定位装置-工业级UWB室内定位系统源码

java版B/S架构UWB人员定位系统源码spring boot+vue技术架构uwb定位装置-工业级UWB室内定位系统源码 本套系统运用UWB定位技术,开发的高精度人员定位系统,通过独特的射频处理,配合先进的位置算法,可以有效计算复杂环境下的人员与物品的活动信息。 提供位置实时显示、历史轨迹回放、人员考勤、电子围栏、行为分析、智能巡检等功能。定位精度高达10cm,同时具备高动态、高容量、低功耗的优点。应用场景包括:隧道、化工、工厂、煤矿、工地、电厂、养老、展馆、机房、机场等。 UWB定位系统相关技术: 技术架构:单体服务 + 硬件(UWB定位基站、卡牌) 开发语言:java 开发工具:idea 、VS Code 前端框架:vue 后端框架:spring boot 数 据 库:mysql UWB定位系统人员实时定位 人员实时分布及统计:实时显示地图上的人员信息以及各个区域内人员的分布及数量情况。 厂内人员分类统计:分类显示各区域的人员类型、数量、个人信息等,可展现全部人员数据,也可选择指定人员展示。 视频画面实时查看:地图上可查看厂区内所有摄像头分布,点击摄像头快速查看某个区域的实时画面。 UWB定位系统人员轨迹回放 自定义查询时间:自由切换员工、时间,定点定向筛查员工运动轨迹,同时可以查看经过各个区域的时间。 视频画面动态播放:根据员工运动的轨迹,动态播放和切换视频画面,快速获取现场情况。 人员信息实时查看:精确显示人员的位置信息、个人信息。 UWB定位系统报警管理 静止报警:当员工处于静止状态超过一定时间,系统将判断人员可能在区域内发生危险,此时将发出预警信息。 超员报警:区域授权总人数若满员或未达标,系统发出预警信息,提醒管理人员及时予以干预。 越界报警:系统对不同区域进行权限划分,当人员或物品进入自己权限范围以外的区域时,系统进行报警。 一键SOS:当员工遭遇意外情况,可立即按压工牌上的求救键,后台可依据求救位置进行及时救援。 UWB定位系统视频监控(视频联动) 人员位置实时画面:可检索指定人员姓名,查看其当前的实时位置和活动轨迹,快速获取该人员实时状态。 轨迹回放视频画面:可输入指定人员姓名、时间段,查看该人员的历史活动轨迹和位置分布,一旦有异情可根据数据追溯事件过程。 监控视频联动:以上实时追踪和历史追踪的同时,皆可联动区域内的摄像头,获取视频画面,快速查看现场情况。 UWB定位系统设备及区域管理 卡牌管理:对卡牌进行增删改查等操作,同时,可对工牌进行权限的分配。授权卡牌可进入的区域。 基站管理:对现场的所有基站进行统一管理,在地图上可查看基站的坐标信息。 电子围栏管理:通过多个基站相连围成的一个电子围栏,通过自定义电子围栏区域,可判定人员是否存在违规行为并实现双向报警。 UWB定位系统巡检管理 巡检任务高效监管:可定位巡检人员实时位置,全面记录巡检时间、地点、耗时、作业顺序等数据;整个过程可追溯,防止伪造巡检记录。 巡检轨迹:可查看员工巡检任务的运动轨迹,员工在巡检点停留的时间以及经过的时间一目了然。 巡检工作智能考核:系统智能分析巡检路线的达标/异常情况,提供全方位多维度的报表和数据分析工具以及KPI,实现巡检工作的智能考核。 UWB精度定位管理系统源码,采用UWB定位技术,通过部署UWB定位设备实现人、车、物精确定位,打造可寻、可视、可防、可控的一体化管控平台。UWB定位系统具有容量大、稳定性强、精度高、安装便捷、易维护、操作简便等特点。

C语言详解(数据存储)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为一些学友们展示一下我的学习过程及理解。文笔、排版拙劣,望见谅。 1、大小端字节序和字节序判断 2、浮点数在内存中的存储 2.1浮点数存的过程 2.2浮点数取的过程 1、大小端字节序和字节序判断 在 C语言(操作符)1 中,我们介绍了整数在内存中的存储,但是我们只介绍了整数的存储形式,并没有介绍整数是如何存储的,那本节我们就来探讨一下整数在内存中究竟是怎么存储的。 当我们想把0x11223344这个数存到一个整型变量a中时,因为整型数据的大小是4个字节,以字节为单位存储,那么11占一个字节,22占一个字节,33占一个字节,44占一个字节,假设从低地址向高地址存储,那先存11还是先存44就是一个问题。其实超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储。 也就是说,大端字节序存储是地址由低到高依次存高位,小端字节序存储是地址由低到高依次存低位。 我们之前可能会疑惑VS中整数在内存中为什么是反着存的,那这里就给了我们解释,VS所在的当前计算机系统使用的是小端字节序存储,而大多数计算机架构使用的都是小端字节序存储。 如果我们想知道当前的机器使用的是哪种存储方式,可以写一个简单的判断小程序来实现。当我们在一个整型变量中存一个整数1时,如果当前机器是大端字节序存储,那么它存的就是 00 00 00 01,如果当前机器是小端字节序存储,那么它存的就是 01 00 00 00。既然如此,我们只需要将这个整型变量最小字节中的数据拿出来,看这个最小字节单元中存的数是0还是1,如果是0就是大端字节序存储,反之则为小端字节序存储。 了解了大小端存储,我们来做一些练习加深理解。 练习1 上面代码的输出结果是什么呢?(其实我们在C语言(操作符)2中的表达式求值部分已经学习过)我们来分析一下: 我们想将整数-1存入一个字符型变量a中,整型和字符型不兼容,通过C语言(操作符)2的学习我们知道要发生截断,所以只将-1的补码的后8位存到a中,我们又用%d(打印有符号整型)打印字符型变量a,那%d就认为它打印的数是整型,a不是整型所以要发生整型提升,a是char(signed char)类型,整型提升高位补符号位,补完后还是32个1,取反加一得原码又变为了-1,最终结果就打印出了-1,因为在VS中char和signed char是一样的,所以打印b也就同样的道理。 而我们将整数-1存入一个无符号字符型变量c中,截断只存入-1的补码的后8位,用%d打印需要整型提升,而c是无符号字符型,整型提升高位补0,补完后用%d打印时%d看它就是一个比较大的正数,原反补相同,00000000000000000000000011111111就是255。 练习2 将整数-128(补码:11111111111111111111111110000000)存入(signed)char类型a中,截断后a中存的是10000000,用%u(打印无符号整数)打印需要整型提升,a为signed char所以高位补符号位,补完就是11111111111111111111111110000000,目前还是补码,但是在%u眼中无符号整形原反补相同,所以%u再以原码打印出来就是4294967168。 将a改为128,结果还是一样的,因为它们截断的结果是一样的。 至于为什么对a存-128还是128结果是一样的,这里再做一个解释: 我们很早就知道,(signed)char类型的取值范围是:-128~127 ,但是为什么是这个范围并没有解释。char类型占一个字节也就是8个比特位,最高位当做符号位来看待,就剩下了7位存0、1值。 在C语言(操作符)2中,我们还画了这样一个图,并做了相应解释。 127+1在数学上是128,但在char类型中就是-128,因为char类型最大的正数就是127,所以给char类型存128和-128是一样的。其他的类型都是这样的道理。 练习3 创建一个字符数组大小1000,向数组中存入-1、-2、-3..,然后strlen求字符数组a的长度。我们知道strlen是求字符串的长度,统计的是\0之前的字符个数,那看来意思就是让我们找字符‘\0’了又因为a是字符数组所以-1、-2、..、-127、-128、127、126、...、2、1、0,0在字符眼中就是\0,所以求的是-1~0的长度,是255。 练习4 unsigned char的范围是0~255,所以上面的代码给我们的感觉就是打印255个hello world,但事实真是如此吗?当我们运行起来就会发现程序陷入了死循环。这是因为当i加到256时虽然此时不满足循环了,但是这时候的256只是数学上的256,而在unsigned char眼中255+1就变成了0,所以循环继续。 上面这个代码也是如此,当i为0时,0-1就变成了2^32-1,因为在unsigned int的世界里没有负数,所以程序陷入了死循环。 练习5 创建一个整型数组大小4,&a取出整个数组的地址再+1跳过整个数组指向数组末尾,此时指针(地址)的类型是int (*) [4],再强转为 int * 类型的指针赋给ptr1,ptr1[-1]( *(ptr -1) )就是int *类型的指针-1向后推4个字节指向数组最后一个元素4,再解引用用%x(打印16进制)打印出来就是4。 数组名a表示数组首元素的地址,强转为int类型的整数再+1,再强转为int *类型的指针,最终的结果就是数组首元素的地址+1(整数+1),注意ptr2是一个整型类型的指针,所以它访问的是4个字节的地址。 我们又知道小端字节序是反着存的,所以ptr2指向的数值就是02 00 00 00,打印出来就是2000000。 如果我们想把代表16进制的0x也打印出来,可以在%的后面加上#。 2、浮点数在内存中的存储 2.1浮点数存的过程 浮点数和整数在内存中的存储有什么区别吗?

kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群,一起学习,共同进步。文章底部关注我,公众号后台加我微信入群,备注kettle。 1、上一节课我们学习了MQTT producer 生产者步骤,MQTT consumer消费者步骤。该步骤可以从支持MRQTT协议的中间件获取数据,该步骤和kafka consumer 一样可以处理实时数据交互,如下图所示: 2、双击步骤打开MQTT consumer 配置窗口,如下图所示: Step name:自定义步骤名称。 Transformation:设置子转换,该子转换的作用是从中间件读取流数据,然后将字段返回给MQTT consumer步骤进行使用。 Connection:指定此步骤将连接的 MQTT 服务器的地址,如127.0.0.1:1883(注意这里的端口是1883,不是5672) Client ID:指定 MQTT 客户端的唯一 ID。MQTT 服务器使用此客户端 ID 来识别每个不同的客户端及其当前状态。 Topics name:在主题名称字段中,输入您希望订阅流数据(消息)的 MQTT 主题的名称。其实这里的topic是RabbitMQ中的routing key(另外这里的routing key 一定不要绑定队列,否则MQTT consumer步骤无法接收数据)。 Quality of Service:是消息传递的保证级别。选择以下选项之一。 至多一次(0),这是默认值 至少一次(1) 恰好一次(2) 3、安全验证设置,如下图所示: Username:MQTT服务器的用户名,如admin Password:MQTT服务器的密码。 Use secure protocol:选择此选项以定义连接的 SSL 属性,本次不做介绍。 3、批次设置,使用此选项卡来指定在处理之前要拉取多少消息。您可以指定消息数量和/或特定的时间量。 Duration(ms): 请指定一个以毫秒为单位的时间。此值表示在执行转换之前该步骤将花费多少时间来收集记录。 如果将此选项设置为0,则根据参数Number of records记录数触发消费。要运行转换,持续时间或记录数选项都必须包含一个大于0的值。 Number of records 指定一个数字。在每收集到‘X’条记录之后,指定的转换将被执行,并且这些‘X’条记录将被传递给转换过程。 如果将此选项设置为0,则将参数Duration按持续时间触发消费。为了运行转换,持续时间或记录数选项都必须包含一个大于0的值。 Maximum concurrent batches 指定用于同时收集记录的最大批次数。默认值为1,表示使用单个批次来收集记录。仅当您的消费者步骤无法跟上数据流的速度时,才应使用此选项。 您的计算环境必须具备足够的 CPU 和内存来进行此实现。如果您的环境无法处理指定的最大并发批次数,将会出现错误。 Message prefetch limit 请指定此步骤将排队等待处理的传入消息的限制,即从 kfakfa broker接收到的消息。

在 VSCode 中搭建 Flutter 开发环境并运行项目

要在 Visual Studio Code (VSCode) 中运行 Flutter 项目并启动虚拟机(例如 Android Emulator),可以按照以下步骤进行设置和操作: 一、安装 Flutter 和 Dart 插件 安装 Flutter SDK: 前往 Flutter 官网 下载并安装 Flutter SDK,按照操作系统的指引完成安装。将 Flutter SDK 的 bin 目录添加到系统的 PATH 环境变量中。 安装 Dart SDK: Dart SDK 通常包含在 Flutter SDK 中,因此安装 Flutter 后不需要单独安装 Dart SDK。 安装 VSCode 插件: 打开 VSCode,进入扩展市场(可以按 Ctrl+Shift+X)。搜索 Flutter 插件并安装。这将同时安装 Dart 插件,因为 Dart 插件是 Flutter 插件的依赖项。 二、安装 Android Studio 和配置 Android 模拟器 安装 Android Studio: 前往 Android Studio 官网 下载并安装 Android Studio。安装过程中勾选安装 Android SDK、Android SDK 命令行工具,以及相关的构建工具。 配置 Android 模拟器:

第二篇:MySQL安装与配置(基于小皮面板(phpstudy))

在第一篇中介绍了数据库的相关概念,了解到SQL是用来操作数据库管理系统的语言,因此要学习数据库技术,数据库管理系统的配备是必不可少的! 并且出于流行性与实惠性的双考量而选择MySQL这款数据库管理系统软件 一,工具推荐 在本系列中,博主极力推荐直接下载一款软件小皮面板(phpstudy) 通过此软件,能够轻松完成MySQL的安装与配置,甚至能实现多版本一机兼容、一键切换MySQL版本的强大功能 如下图:(再说下去博主自己都以为收了人家的广告费了。。😂) 如果你就是倔强地要拒绝这样优秀的工具,那我也为你指明官方下载的渠道和配置方式罢!mysql8.0.25安装配置教程(windows 64位)最详细_本地笔记本64位安装jdbc mysql-CSDN博客 本篇的余下内容则只介绍phpstudy将如何配置MySQL 二,配置流程 (一)下载压缩包 点击下面的链接跳转到官方下载页面后,按下图所示 ①->②->③(按理说大伙应该都是64位系统吧/(ㄒoㄒ)/~~)顺序点击下载压缩包 小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn) (二)解压压缩包 选中压缩包,右键唤出菜单,选择相应的解压操作 (三)启动安装程序 解压后获得如下文件,双击运行唯一一个.exe文件 选择想要的路径来存放软件后,可以勾选生成快捷方式,最后点击立即安装 (四)安装MySQL,配置环境变量 1.安装MySQL 到上一步我们已经完成了小皮面板(phpstudy)的安装,接下来才是配置MySQL的重头戏 打开小皮面板(phpstudy)->软件管理,可以看到有好几个版本的MySQL供安装, 现在主流的版本是5.6版本,5.7版本和8.0版本,博主要用的是8.0版本,点击对应的安装按钮,稍作等待即可完成安装 MySQL完成安装 2.配置环境变量 我们都知道,计算机操作系统中的特定对象如果不存在于环境变量中,是无法被系统识别的,这里的MySQL就是如此,现在虽然安装好了,但是你得“告诉”电脑有这个东西(配置环境变量),这样电脑才能找到并使用它 可以先做个测试,点击【首页】->找到刚安装的MySQL8.0.12,点击【启动】 启动MySQL后,【win+R】打开运行窗口,输入cmd,打开命令行窗口-> 输入命令【mysql -u root -p】登录root数据库,此时一定会得到如下无法识别命令的错误提示,因为还没配置环境变量呢,系统根本不认识mysql是什么东西 现在就来配置环境变量—— 首先我们得找到mysql的“家”(存放路径)在哪里,【网站】->【管理】->【打开根目录】 按如下图操作,把MySQL的bin文件夹所在目录复制下来 然后打开环境变量窗口进行变量添加,【win+i】快捷键打开设置->【系统】->【系统信息】->【高级系统设置】-> 【环境变量】->【Path】->【新建】->复制路径后,共打开三个窗口,依次点击三次【确定】!(如果没点确定就没保存配置,但也不必担心,重配一遍即可!) 到此就彻底完成MySQL的环境配置了! 3.测试 还是先确认一下MySQL是否启动嘿~ 点击【首页】->找到刚安装的MySQL8.0.12,点击【启动】 启动MySQL后,【win+R】打开运行窗口,输入cmd,打开命令行窗口-> 输入命令【mysql -u root -p】登录root用户 登录成功,可喜可贺,可喜可贺😀,下一篇就要正式进入SQL的语法学习嘞! 如果觉得对你有帮助,不妨点个关注、订阅专栏、收餐、赞之类的,么么~ 错误排查 phpsutdy无法启动mysql(一点启动立马又被关闭)说明你已经通过其它方式启动过mysql,如果需要使用phpsutdy启动,必须先去本地服务将mysql服务关闭 下滑找到MySQL服务,停止它,然后就能通过phpstudy启动了!

clickhouse学习笔记(三)常见表引擎

目录 一、 MergeTree系列引擎 1、MergeTree 数据TTL (1) 列级别 TTL (2) 表级别 TTL 存储策略 2、ReplacingMergeTree 3、CollapsingMergeTree 4、VersionedCollapsingMergeTree 5、SummingMergeTree 6、AggregatingMergeTree 二、 外部存储类引擎 1、HDFS表引擎 2、mysql表引擎 3、JDBC表引擎 4、Kafka 表引擎 5、File表引擎 三、内存类型引擎 1、memory表引擎 2、set表引擎 3、join表引擎 4、buffer表引擎 四、日志类型引擎 1、TinyLog表引擎 2、StripeLog 表引擎 3、Log表引擎 五、接口类型引擎 1、Merge 表引擎 2、Dictionary 表引擎 3、Distributed 表引擎 六、其他引擎 1、live view 2、Null 3、URL 在大数据分析领域,ClickHouse以其卓越的查询性能和高效的列式存储机制而著称。其背后的核心技术之一便是多样化的表引擎,它们针对不同的数据访问模式和存储需求进行了优化。本文旨在深入探讨ClickHouse中的各种表引擎,帮助你更好地理解它们的特性和应用场景 一、 MergeTree系列引擎 MergeTree系列是ClickHouse中最为强大和常用的引擎,适用于大规模数据的高效存储和查询,特别是时间序列数据。这类引擎的特点是支持高效的写入和合并操作,能够处理高吞吐量的数据插入和复杂查询。 1、MergeTree MergeTree 作为家族系列最基础的表引擎,提供了数据分区、一级索引和二级索引等功能。 数据TTL TTL 即 Time To Live,表示数据的存活时间,而在 MergeTree 中可以为某个列字段或整张表设置 TTL。当时间到达时,如果是列字段级别的 TTL,则会删除这一列的数据;如果是整张表级别的 TTL,则会删除整张表的数据;如果同时设置,则会以先到期的为主。 无论是列级别还是表级别的 TTL,都需要依托某个 DateTime 或 Date 类型的字段,通过对这个时间字段的 INTERVAL 操作来表述 TTL 的过期时间,下面我们看一下设置的方式。

C++ AVL树 详细讲解

目录 一、AVL树的概念 二、AVL树的实现 1.AVL树节点的定义 2.AVL树的插入 3.AVL树的旋转 4.AVL树的验证 三、AVL树的性能 四、完结撒❀ 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率,但 如果数据有序或接近有序二叉搜索树将退化为单支树,查 找元素相当于在顺序表中搜索元素,效率低下 。因此,两位俄罗斯的数学家 G.M.Adelson-Velskii 和 E.M.Landis 在 1962 年 发明了一种解决上述问题的方法: 当向二叉搜索树中插入新结点后,如果能保证每个结点的左右 子树高度之差的绝对值不超过 1( 需要对树中的结点进行调整 ) ,即可降低树的高度,从而减少平均 搜索长度。 一棵 AVL 树或者是空树,或者是具有以下性质的二叉搜索树: ● 它的左右子树都是 AVL 树 ● 左右子树高度之差 ( 简称平衡因子 ) 的绝对值不超过 1(-1/0/1) 如果一棵二叉搜索树是高度平衡的,它就是 AVL 树。如果它有 n 个结点,其高度可保持在 O(log2 n) ,搜索时间复杂度 O(log2 n) 。 二、AVL树的实现 1.AVL树节点的定义 AVL树节点的定义: template<class T> struct AVLTreeNode { AVLTreeNode(const T& data) : _pLeft(nullptr), _pRight(nullptr), _pParent(nullptr) , _data(data), _bf(0) {} AVLTreeNode<T>* _pLeft; // 该节点的左孩子 AVLTreeNode<T>* _pRight; // 该节点的右孩子 AVLTreeNode<T>* _pParent; // 该节点的双亲 T _data; int _bf; // 该节点的平衡因子 }; 2.

[word] word大括号怎么打两行 #其他#其他#微信

word大括号怎么打两行 Word给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。 一直以来,Microsoft Office Word 都是最流行的文字处理程序。 作为 Office 套件的核心程序, Word 提供了许多易于使用的文档创建工具,同时也提供了丰富的功能集供创建复杂的文档使用。哪怕只使用 Word 应用一点文本格式化操作或图片处理,也可以使简单的文档变得比只使用纯文本更具吸引力。 打开文档,输入大括号后,依次点击“开始”—“中文版式”—“双行合一” 在弹出框输入文字内容,点击确定即可实现

【香橙派】Orange Pi AIpro体验——国产AI赋能

文章目录 🍔开箱🛸烧录镜像⭐启动系统🎈本机登录🎈远程登陆 🎆AI功能体验🔎总结 🍔开箱 可以看到是很精美的开发组件 这里是香橙派官网 http://www.orangepi.cn/ 我们找到下面图片的内容,点击“查看详情” 可以看到Orange Pi AIpro的简述 OrangePi AIpro(8T)采用昇腾AI技术路线,具体为4核64位处理器+AI处理器,集成图形处理器,支持8TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出。 Orange Pi AIpro引用了相当丰富的接口,包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB(串口打印调试功能)、两个MIPI摄像头、一个MIPI屏等,预留电池接口,可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。 Orange Pi AIpro支持Ubuntu、openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求。 然后我们点击“下载” 在下面可以下载香橙派的用户手册 🛸烧录镜像 我们返回刚才的官方资料,选择官方工具,进行下载 然后我们向下看,找到官方镜像,下载Ubuntu镜像,进行烧录 下载完成后,安装烧录工具balenaEtcher,在电脑机上,双击balenaEtcher-Setup-1.18.4.exe,按照提示安装即可。 然后烧录ubuntu镜像到SD卡中,将SD卡插入读卡器,再将读卡器插入电脑中即可 我们打开刚才下载的烧录软件,选择刚刚下载的文件 然后 选择目标磁盘后,进行烧录 ⭐启动系统 我们把烧录好的sd卡插入板子中 我们插入电源和网口后,进行通电,看到指示灯变绿,表示启动正常 🎈本机登录 我们插入显示屏接口后,会在显示屏出现下面的状态 默认密码是 Mind@123 登录进去后,这是主界面 🎈远程登陆 登录开发板 当开发板通过以太网口和电脑连接时,先将电脑的IP地址修改为和开发板的IP地址在同一个网段(例如开发板eth1网口为192.168.137.100,电脑以太网口为192.168.137.101),再使用SSH工具远程登录开发板 我们找到以太网,点击属性 勾选“使用下面的 IP 地址”选项,填写IP地址(图示以192.168.137.101为例)和子网掩码,默认网关与DNS服务器地址为空,单击“确定”保存。 然后使用SSH工具远程登录开发板,我这里使用的是xshell 🎆AI功能体验 我们采用主机模式登录进行测试 从官方文档中可以知道 镜像中预装了JupyterLab软件。JupyterLab软件是一个基于web的交互式开发环境,集成了代码编辑器、终端、文件管理器等功能,使得开发者可以在一个界面中完成各种任务。并且我们在镜像中也预置了一些可以在JupyterLab软件中运行的AI应用样例。这些样例都是使用Python编写的,并调用了Python版本的AscendCL编程接口。下面将介绍如何登录jupyterlab并在jupyterlab中运行这些预置的AI应用样例。 首先是登录juypterlab 使用命令如下 cd samples/notebooks/ 在当前目录下有9个文件夹和1个shell文件,分别对应9个AI应用样例和JupyterLab启动脚本如下 start_notebook.sh 在执行该脚本后,终端会出现打印信息,在打印信息中会有登录Jupyter Lab的网址链接,我们把网站链接通过系统内置的火狐浏览器进行打开,就可以打开juypterlab 下面运行目标检测样例 我们使用的是YOLOv5,它是一种单阶段目标检测器算法,在这个样例中,我们选取了YOLOv5s,它是YOLOv5系列中较为轻量的网络模型,适合在边缘设备部署,进行实时目标检测。在样例中已经包含转换后的om模型和测试视频、图片,可以按照以下流程在JupyterLab中运行该样例。 首先在jupyterlab界面双击“01-yolov5”,进入到该目录下

如何用android studio实现底部导航,AndroidStudio制作底部导航栏以及用Fragment实现切换功能...

前言 大家好,我是 波士顿木木,今天给大家带来AndroidStudio制作底部导航栏以及用Fragment实现切换功能的概述,希望你们喜欢 学习目标 AndroidStudio制作底部导航栏以及用Fragment实现切换功能,用户点击底部导航栏可以实现三个模块的跳转。 拿QQ界面举例,我们不难发现,点击下面状态栏,除当前界面下的状态栏以外的上面部分界面会跳转到相应的另一个页面。我们今天就来实现这种效果。 一、前期准备 创建一个新的模块,将其命名为fragment:再创建三个后面要实现相互切换的fragment:创建好后的项目结构如下: 二、编写activity_main.xml 在页面底部添加三个约束布局做点击事件,再在上方添加一个id为layout的约束布局。代码如下: <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="70dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/constraintLayout2" android:layout_width="0dp" android:layout_height="match_parent" android:background="#69F0AE" app:layout_constraintEnd_toStartOf="@+id/constraintLayout" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/constraintLayout" android:layout_width="0dp" android:layout_height="match_parent" android:background="#448AFF" app:layout_constraintEnd_toStartOf="@+id/constraintLayout3" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/constraintLayout2" app:layout_constraintTop_toTopOf="parent"> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/constraintLayout3" android:layout_width="0dp" android:layout_height="match_parent" android:background="#FA9F9F" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/constraintLayout" app:layout_constraintTop_toTopOf="parent"> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="659dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> 三、在MainActivity.java中添加逻辑代码 初始化三个fragment页面: MessageFragment messageFragment = new MessageFragment(); ContactFragment contactFragment = new ContactFragment(); DynamicFragment dynamicFragment = new DynamicFragment(); 在onCreat方法中将layout替换成fragment: getSupportFragmentManager().

SOCKS5代理与其他代理(HTTP代理、HTTPS代理、SOCKS4代理)协议相比,有何不同?

一、协议支持与兼容性 1.支持的协议: 1.SOCKS5:支持TCP和UDP两种传输协议,可以处理各种类型的数据流。 2.HTTP代理:主要支持HTTP和HTTPS协议,适用于网页浏览等HTTP流量。 3.SOCKS4:仅支持TCP协议,功能相对受限。 2.平台兼容性: 1.SOCKS5:具有广泛的平台兼容性,能够在Windows、Mac OS、Linux、Android和iOS等多种操作系统上运行。 2.HTTP代理和SOCKS4:通常也支持多种平台,但SOCKS5的兼容性更为广泛。 二、安全性与隐私保护 1.身份验证: 1.SOCKS5:提供身份验证机制,确保只有授权用户才能访问代理服务器,加强了安全性。 2.HTTP代理和SOCKS4:通常不提供或仅提供有限的身份验证功能。 2.加密传输: 1.SOCKS5:支持加密传输,可以保护用户数据在传输过程中的安全。 2.HTTP代理:虽然可以通过SSL/TLS协议进行加密,但主要关注于HTTP协议的传输。 3.SOCKS4:不提供加密传输功能。 太阳HTTP(新用户 可领5000IP试用) 三、速度与性能 1.传输速度: 1.SOCKS5:不会重写数据包头,因此传输速度较快且不容易出错。 2.HTTP代理:可能需要进行额外的处理,如缓存、重定向等,可能会影响传输速度。 3.SOCKS4:速度快,但受限于其协议支持范围。 2.可选路由规则: 1.SOCKS5:支持可选路由规则控制数据传输路径,可以根据需要选择最优的传输路径。 2.HTTP代理和SOCKS4:通常不提供此类功能。 四、灵活性与可定制性 1.流量类型选择: 1.SOCKS5:用户可以根据需要选择使用哪种类型的流量(TCP或UDP),并基于应用程序有选择地流量的特定部分。 2.HTTP代理和SOCKS4:通常不提供此类灵活性。 2.配置选项与参数设置: 1.SOCKS5:支持多种配置选项和参数设置,用户可以根据自身需求进行定制和优化。 2.HTTP代理和SOCKS4:虽然也提供配置选项,但可能相对较少且不如SOCKS5灵活。 总结:SOCKS5代理在协议支持与兼容性、安全性与隐私保护、速度与性能以及灵活性与可定制性等方面均表现出色,使其在众多网络应用中成为了一个强有力的工具。无论是需要保护隐私的匿名访问,还是大规模的数据采集开发,或是优化网络连接以提高访问速度,SOCKS5代理都能提供强大的支持和保障。

解决IDEA 社区版mybatis.xml文件sql关键字无法高亮的问题

目录 解决IDEA 社区版mybatis.xml文件sql关键字无法高亮的问题一、下载Database Navigator插件二、在idea添加一个xml文件配置项三、保存 解决IDEA 社区版mybatis.xml文件sql关键字无法高亮的问题 idea社区版阉割了mysql方言,无法直接同正式版一样简单设置。 一、下载Database Navigator插件 进入idea,打开Settings->Plugins,搜索database navigator插件,点击install,安装完成后重启idea。 二、在idea添加一个xml文件配置项 进入下面路径:Settings->Editor->Language Injections,点击左上角+,进入如下界面: Name:Mybatis sql|select|insert|update|delete,名字随意 ID:选择NYSQL-PSQL Local name:sql|select|insert|update|delete,顺序无所谓 Namespace:http://mybatis.org/dtd/mybatis-3-mapper.dtd 三、保存 全部输入完成后,点击ok,然后看到如下界面,再点击apply 到此就已经完成了,然后你就可以看到关键字高亮了

在Windows上用Llama Factory微调Llama 3的基本操作

这篇博客参考了一些文章,例如:教程:利用LLaMA_Factory微调llama3:8b大模型_llama3模型微调保存-CSDN博客 也可以参考Llama Factory的Readme:GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMsUnify Efficient Fine-Tuning of 100+ LLMs. Contribute to hiyouga/LLaMA-Factory development by creating an account on GitHub.https://github.com/hiyouga/LLaMA-Factory?tab=readme-ov-file#installation首先将Llama Factory clone到本地:GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs 其次创建一个conda环境: conda create -n llama_factory python=3.10 激活环境后首先安装pytorch,具体参考这个页面:Start Locally | PyTorch,例如: conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia 而后进入到LLaMA-Factory文件夹,参考其Readme,运行: pip install -e .[torch,metrics] 同时,按照其Readme,在Windows系统上还需要运行: pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl 具体原因我就不展开讲了。然后依次运行: Set CUDA_VISIBLE_DEVICES=0 Set GRADIO_SHARE=1 llamafactory-cli webui 就可以看到其webui了。不过这时候还没有模型参数文件,对于国内用户而言,可以在这里https://modelscope.

数据库中 Plugin ‘caching_sha2_password‘ /‘mysql_native_password‘ is not loaded.问题解决...

在数据库学习时,有时会遇到Plugin 'caching_sha2_password' /'mysql_native_password' is not loaded.的问题,这个是因为数据库系统中的认证插件和mysql的不一致; MySQL8.0之前一般用的认证插件是mysql_native_password; MySQL8.0之后用的认证插件是caching_sha2_password;(这里注意是caching,而不是cashing,这两个可不一样哦~,数据库里没有cashing_sha2_password这个插件,我就写错过,导致一直报错) 首先,可以先查看自己的数据库里有哪些认证插件,有没有报错时显示没有加载的插件,如果查询出来没有,那就是没有下载,需要在系统中下载插件重新试一下: sql语句:show plugins; /*查看数据库里所有的认证插件,我这里有好多,主要用的就是第2和第4*/ 第二步,使用如下语句查看数据中目前每个用户对应的认证插件是什么,找到自己登录数据库的用户名,一般都是root账户,其中3、4、5行是创建数据库时就会有的。 select user,plugin from user; 第三步,查看报错时的认证插件和上一步用户对应的认证插件是否一致,如果不一致,使用sql语句,改变成报错弹窗里的认证插件为caching_sha2_password或者mysql_native_password update user set plugin='mysql_native_password' where user='用户名(一般是root)'; update user set plugin='caching_sha2_password' where user='用户名(一般是root)'; 第四步,如果一致,使用第四步的代码将用户的认证插件改为别的,运行之后再改回来,重新尝试。 以上是我遇到此问题的解决方式,希望对各位有帮助!

10大AI搜索终极比拼,谁最强?超详细评测

在人工智能领域,AI搜索引擎的竞争愈发激烈。随着Perplexity等新兴搜索引擎的崛起,传统搜索引擎如谷歌面临前所未有的挑战。国内市场同样热闹非凡,各大科技公司纷纷推出自家的AI搜索产品。本文将对Perplexity、秘塔、百小应、360AI、天工、Thinkany、GPT-4o等10款AI搜索引擎进行全面评测,分析它们的优劣,帮助大家选择最适合自己的AI搜索工具。 引言 AI搜索引擎作为互联网信息获取的重要工具,其发展潜力巨大。通过大模型和智能算法,这些工具能够更精准地回答用户的问题。本文将通过实测四个具有代表性的问题,对各大AI搜索引擎的表现进行评分,并最终评选出最强的AI搜索工具。 测试方法 为了全面评估各AI搜索引擎的性能,我们设计了以下测试方法: 时效性问题:考察AI搜索工具能否检索到最新的信息。复杂性问题:需要多源信息检索,考察AI的综合信息处理能力。容错能力:在问题中添加错误信息,考察AI能否主动纠正。详细性问题:考察AI能否提供详细而准确的答案。 每个问题根据AI搜索工具的回答进行评分:正确答案记1分,部分正确记0.5分,错误答案记0分。 参赛选手 这次评测的AI搜索引擎包括两大类,共十个产品: 原生AI搜索引擎 Perplexity秘塔360AI天工AIThinkany 大模型厂商的AI搜索功能 ChatGPTKIMI百小应腾讯元宝MiniMax的海螺AI 问题一:中国用户有哪些低门槛的方式开通ChatGPT Plus会员? 测试结果 Perplexity:答案准确且全面,得分1分。秘塔:拒绝回答,得分0分。360AI:部分正确,但不全,得分0.5分。天工AI:答案部分正确,得分0.5分。Thinkany:回答不完整,得分0.5分。ChatGPT:部分正确,得分0.5分。KIMI:答案部分重复,得分0.5分。百小应:答案完整,得分1分。腾讯元宝:部分正确,得分0.5分。MiniMax的海螺AI:答非所问,得分0分。 问题二:GPT-5的上下文长度是200K吗? 测试结果 Perplexity:没有指出GPT-5未发布,得分0.5分。秘塔:同样没有指出GPT-5未发布,得分0.5分。360AI:未指出GPT-5未发布,得分0.5分。天工AI:未指出GPT-5未发布,得分0.5分。Thinkany:指出GPT-5未发布,得分1分。ChatGPT:指出GPT-5未发布,得分1分。KIMI:直接将错就错,得分0分。百小应:指出GPT-5未发布,得分1分。腾讯元宝:答案错误,得分0分。MiniMax的海螺AI:指出GPT-5未发布,得分1分。 问题三:按先后顺序排列以下大模型的发布时间,并标记具体时间 测试结果 Perplexity:大部分答案错误,得分0分。秘塔:答案正确,得分1分。360AI:部分答案正确,得分0.5分。天工AI:大部分答案错误,得分0分。Thinkany:大部分答案错误,得分0分。ChatGPT:大部分答案错误,得分0分。KIMI:部分答案正确,得分0.5分。百小应:部分答案正确,得分0.5分。腾讯元宝:大部分答案错误,得分0分。MiniMax的海螺AI:部分答案正确,得分0.5分。 最终评分 百小应:3.5分Perplexity:3分ChatGPT:3分秘塔:2分Thinkany:2分KIMI:2分360AI:1.5分天工AI:1.5分腾讯元宝:1分MiniMax的海螺AI:1分 总结与展望 在本次AI搜索引擎的评测中,百小应以3.5分的成绩荣获第一。Perplexity和ChatGPT紧随其后,各得3分。秘塔、Thinkany和KIMI表现中规中矩,而360AI、天工AI、腾讯元宝和MiniMax的海螺AI则有较大的改进空间。 AI搜索引擎的实用性已经显现,但也存在一些无法避免的问题,如对网络上的梗和反讽内容的识别能力不足,以及出现幻觉的现象。未来,随着技术的不断发展,这些问题有望得到进一步改善,为用户提供更加精准和可靠的信息服务。

使用CSS自定义浏览器滚动条 (webkit 已最新支持 scrollbar-width)

文章目录 1. 自定义浏览器滚动条CSS样式基于 WebKitFirefox 2.1 自定义CSS样式-webkit更新支持对比前提更新变化 (Chrome为例)使用自定义 2.2. 自定义问题 (页面滚动-步进抖动)问题描述问题定位折中处理 1. 自定义浏览器滚动条CSS样式 浏览器默认的滚动条样式简单醒目,而且不同的浏览器下滚动条的样式也不一样,为了美观和统一必须修改滚动条的样式。 从滚动条效率和兼容性上选择,可以直接在默认滚动条的基础上进行样式修改。现已有更多相关详细设置的文章、本标题内容仅作概述及引用 不再赘述,如对本标题内容已有了解可直接跳转标题2 “webkit更新支持” 至本文正文。 基于 WebKit MDN文档:::-webkit-scrollbar ::-webkit-scrollbar 仅在基于 Blink 或 WebKit 的浏览器(例如 Chrome、Edge、Opera、Safari、iOS 上所有的浏览器,以及其他基于 WebKit 的浏览器)上可用。 使用以下伪元素选择器去修改基于 webkit 的浏览器的滚动条样式: ::-webkit-scrollbar /* 整个滚动条 */ ::-webkit-scrollbar-thumb /* 滚动条上的滚动滑块 */ ::-webkit-scrollbar-button /* 滚动条上的两端按钮(上下箭头)*/ ::-webkit-scrollbar-track /* 滚动条轨道 */ ::-webkit-scrollbar-track-piece /* 滚动条没有滑块的轨道部分 */ ::-webkit-scrollbar-corner /* 右下角滚动条交汇处的拖动块(仅在同时有垂直和水平滚动条时)*/ ::-webkit-resizer /* 右下角可拖动调整大小的滑块 */ Firefox MDN文档:scrollbar-width、scrollbar-color 火狐浏览器目前只提供了部分自定义滚动条的属性: //定义滚动条的预定义宽度 scrollbar-width: auto; /* 默认值 */ scrollbar-width: thin; /* 比默认宽度更窄 */ scrollbar-width: none; /* 不显示滚动条,但是依然可以滚动 */ //定义滚动条的颜色 scrollbar-color: auto; /* 默认值 */ scrollbar-color: dark | light; /* 显示深色或浅色滚动条,但并未实现 */ scrollbar-color: red green; /* 第一个滚动滑块颜色,第二个滚动条轨道颜色 */ 详细设置参考文章:

Kafka的分区副本机制

目录 生产者的分区写入策略 轮询策略 随机策略 按key分配策略 乱序分区 自定义分区策略 实现步骤: 消费者组Rebalance机制 Rebalance触发时机 Rebalance的不良影响 消费者分区分配策略 Range范围分配策略 RoundRobin轮询策略 Stricky粘性分配策略 生产者的分区写入策略 轮询策略随机策略按key写入策略自定义分区策略 轮询策略 默认的策略,也是使用最多的策略,可以最大限度保证所有的消息平均分配到每一个分区。 如果在生产消息的时候,key为null,则使用轮询算法均衡的分配分区。 随机策略 随机策略,就是随机的将每条消息随机的分配到每个分区。 按key分配策略 按key分配策略,有可能会出现数据倾斜,例如:某个key包含了大量的数据,因为key的值所有的数据都分配到了一个分区,造成分区的消息数量远远大于其他分区。 乱序分区 轮询和随机策略都会导致一个问题,就是生产到kafka的数据都是乱序存储的,而按照key存储的也是一定程度上的有序,也是局部有序,但又有可能导致数据倾斜,所以要结合实际情况取舍。 在Kafka中生产者是有写入策略,如果topic有多个分区,就会将数据分散在不同的partition中存储 当partition数量大于1的时候,数据(消息)会打散分布在不同的partition中 如果只有一个分区,消息是有序的 自定义分区策略 实现步骤: 1.自定义分区器 public class KeyWithRandomPartitioner implements Partitioner { private Random r; @Override public void configure(Map<String, ?> configs) { r = new Random(); } @Override public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) { // cluster.

Vue3 + TS + Antd + Pinia 从零搭建后台系统(二) Ajax + Router

书接上回,接着填充。。。。 此篇包含Ajax请求及router路由填充 准备工作,在src文件夹下创建文件夹:api axios router 文章目录 axios填充router填充 axios填充 规范一点,我们使用interface规范数据,创建一个types文件 import type { InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig, AxiosInstance, AxiosRequestHeaders, AxiosError, } from "axios"; interface RequestInterceptors<T> { // 请求拦截 requestInterceptors?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig; requestInterceptorsCatch?: (err: any) => any; // 响应拦截 responseInterceptors?: (config: T) => T; responseInterceptorsCatch?: (err: any) => any; } interface RequestConfig<T = AxiosResponse> extends AxiosRequestConfig { interceptors?: RequestInterceptors<T>; } export { AxiosResponse, RequestInterceptors, RequestConfig, AxiosInstance, InternalAxiosRequestConfig, AxiosRequestHeaders, AxiosError, }; 在asios文件夹下创建 service.