IntelliJ 负责人 Kirill Skrygan 成为 JetBrains 新任 CEO

JetBrains 公司正式对外宣布了最新人事任命:原负责领导 IntelliJ 部门的 Kirill Skrygan 将于 2024 年 2 月 1 日起担任首席执行官。 JetBrains 在公告写道: 在我们迈向人工智能发挥变革作用的新时代之际,公司已经建立了一个良好的底层基础,并且可以在此基础上继续推动公司向前发展。 作为新阶段的一部分,Kirill Skrygan 自 2010 年加入 JetBrains,并在过去几年里一直领导 IntelliJ 部门,他将于 2024 年 2 月 1 日担任首席执行官一职。

Spring的事件监听机制

这里写自定义目录标题 1. 概述(重点)2. ApplicationEventMulticaster2.1 SimpleApplicationEventMulticaster2.2 AbstractApplicationEventMulticaster 3. ApplicationListener3.1 注册监听器3.2 自定义 4. SpringApplicationRunListeners 1. 概述(重点) 事件监听机制是观察者模式的一种,Spring的事件监听机制有几个重要的顶层接口,分别是: ApplicationEventMulticaster 主要看 AbstractApplicationEventMulticasterApplicationListenerApplicationEvent 它们三哥们的关系可以用下面的图来概括 AbstractApplicationEventMulticaster维护了 源类型和事件类型 作为KEY 跟 监听器的关系,在下面 2.1 SimpleApplicationEventMulticaster有代码的实现解读。 2. ApplicationEventMulticaster AbstractApplicationEventMulticaster «Interface» ApplicationEventMulticaster «Interface» Aware «Interface» BeanClassLoaderAware «Interface» BeanFactoryAware SimpleApplicationEventMulticaster 目前就只有一个实现类SimpleApplicationEventMulticaster和一个抽象类AbstractApplicationEventMulticaster。 2.1 SimpleApplicationEventMulticaster 发布和广播事件,主要注意一下getApplicationListeners方法就行了,会根据事件类型和源类型找监听器。 @Override public void multicastEvent(ApplicationEvent event) { multicastEvent(event, resolveDefaultEventType(event)); } @Override public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) { ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event)); Executor executor = getTaskExecutor(); for (ApplicationListener<?

Typora导出word

Typora导出word Typora是一款简洁易用的Markdown编辑器, Pandoc是一个文档转换工具,可以将Markdown格式的文档转换为其他格式,如HTML、PDF等. linux下安装 Pandoc : sudo apt install -y pandoc 安装成功后,typora 会自动监测到. 然后 点击文件->导出->Word(.docx)即可.

基于低代码的管理系统模板库的设计与实现

近年来,随着企业管理需求的不断增长,传统的软件开发方式显得过于繁琐,低代码开发平台应运而生。本文基于低代码开发理念,探讨了管理系统模板库的设计与实现,旨在提高开发效率、降低系统维护成本,并使管理系统的搭建更加简便和灵活。 随着信息技术的迅猛发展,各类企业对管理系统的需求也越来越高。传统的软件开发方式需要编写大量的代码,耗费大量的时间和人力资源,且不易维护和升级。低代码开发平台的出现,为企业提供了一种快速构建和定制化管理系统的方式。 低代码开发平台简介 低代码开发平台是一种快速应用开发平台,通过使用高度抽象的组件和模块,最大限度地减少了代码编写的工作量。开发者可以使用图形化界面来进行系统的搭建和定制,从而节省了开发周期和成本。 管理系统模板库的设计 在当今信息化时代,企业管理系统的需求日益增长,而低代码的管理系统模板库因其高效、便捷的特性,受到了越来越多企业的青睐。为了满足不同企业的多样化需求,基于低代码的管理系统模板库需要提供一系列常见的管理系统模板,这些模板包括但不限于用户管理、权限管理、数据管理等。每个模板通过可视化界面进行配置,将大部分的业务逻辑封装在模板中,从而降低开发者的技术门槛,使定制化开发变得更加简单快捷。 用户管理模板 用户管理模板是企业管理系统的核心组成部分,它主要负责处理用户注册、登录、信息维护等功能。该模板应包含以下功能模块: 用户注册:提供注册表单,验证用户输入的信息,如用户名、密码、邮箱等,确保用户信息的准确性。 用户登录:验证用户输入的用户名和密码,成功登录后,为用户分配相应的权限。 用户信息管理:提供可视化界面,使管理员可以方便地查看和维护用户的基本信息,如姓名、联系方式、角色等。 用户权限管理:根据用户的角色,分配不同的操作权限,确保用户在系统中只能执行有权限的操作。 权限管理模板 权限管理模板主要负责对企业资源的访问权限进行控制。主要包括以下功能模块: 权限分配:根据用户的角色,为用户分配相应的操作权限,如查看、编辑、删除等。 资源管理:对企业各类资源(如菜单、页面、数据等)进行管理,为开发者提供统一的资源管理界面。 权限检查:在用户执行操作时,检查用户是否具有相应权限,如有权限不足,则提示用户无权操作。 权限控制:对未经授权的用户操作进行拦截,确保系统安全。 数据管理模板 数据管理模板负责对企业数据进行增、删、改、查等操作。主要包括以下功能模块: 数据展示:提供可视化界面,使管理员可以方便地查看和分析数据。 数据录入:提供录入表单,支持批量或单条数据录入。 数据修改:提供可视化界面,使管理员可以方便地修改数据。 数据删除:提供删除功能,支持批量或单条数据删除。 数据查询:提供多种查询条件,支持模糊查询、条件筛选等,帮助管理员快速定位所需数据。 通过以上三个核心模板,低代码的管理系统模板库可以为企业提供一套完善的管理系统解决方案。同时,开发者可以根据实际需求,对模板进行定制化开发,以满足企业的特定需求。在实现高效管理的同时,降低开发成本,提升企业竞争力。更多模板体验引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构 管理系统模板库的实现 管理系统模板库的实现需要充分利用低代码开发平台的功能和特性。首先,需要基于抽象的组件和模块来构建通用的模板。其次,要提供灵活的参数配置和数据绑定功能,以满足不同场景下的需求。最后,要保持模板库的持续更新和优化,以适应不断变化的管理需求。 实践案例与效果分析 模板库的实现不仅能够提高开发效率,而且能够保证系统的灵活性和可扩展性。为实现这一目标,我们需要从两个关键方面进行考虑:一是模板的设计,包括界面、功能和流程等;二是模板的封装和复用性,通过合理的组件设计和可配置的参数,使得模板能够适应不同的业务需求。 模板设计:注重用户体验与功能完备 界面设计:简洁明了,易于操作 在模板设计过程中,界面设计是至关重要的第一步。一个好的界面应该简洁明了,让用户能够一目了然地了解模板的功能和操作方法。此外,界面设计还应注重美观性和一致性,使用户在操作过程中享受到更好的用户体验。 功能设计:多样化,实用性强 模板库的核心价值在于其功能丰富且实用。在功能设计过程中,我们需要充分了解业务需求,为用户提供多样化、实用性强的小工具。这些功能应能满足用户在日常工作中的需求,如数据处理、分析、展示等,从而提高用户的工作效率。 流程设计:逻辑清晰,易于跟随 一个优质的模板应具有清晰的流程设计,让用户能够轻松地跟随模板完成任务。在流程设计中,我们需要考虑任务的顺序、步骤和交互方式,确保用户在操作过程中能够顺畅地进行。 模板封装与复用性:提高开发效率,降低维护成本 组件设计:模块化,可扩展 组件设计是提高模板复用性的关键。通过将常用功能封装为独立的组件,我们可以降低开发成本,提高开发效率。同时,组件的设计应具备良好的可扩展性,便于后期根据业务需求进行调整和优化。 参数配置:灵活多变,满足不同需求 为使模板能够适应各种业务场景,我们需要为模板提供丰富的参数配置。通过调整参数,用户可以根据实际需求定制模板的样式、功能和流程。这种灵活的配置方式有助于提高模板的复用性和适应性。 技术支持:易用性强,降低学习成本 为实现模板的易用性,我们需要提供详细的技术文档和教程,帮助用户快速上手。此外,技术支持还应包括完善的故障排查和解决方案,确保用户在遇到问题时能够及时得到帮助。 模板库的实现是一项系统工程,涉及多个方面的考量。只有做好模板设计、提高复用性,才能真正实现提高开发效率、降低维护成本的目标。在实际开发过程中,我们需要不断总结经验,优化模板库,为用户提供更加优质的服务。 总结与展望 管理系统模板库的设计与实现为企业提供了一种全新的开发模式,使管理系统的搭建更加简单高效。然而,目前的低代码开发平台还存在一些局限性,如性能问题和定制化程度的限制。未来的发展可以进一步解决这些问题,并在更多领域推广低代码开发的理念。

PalWolrd容器部署及第三方调优(手动操作替代OOS)

服务器优惠购买链接 【腾讯云】年度爆款2核2G4M云服务器118元/年,新老用户同享 https://cloud.tencent.com/act/cps/redirect?redirect=5695&cps_key=bb2b280efefd60e6475043027c2a05af&from=console 容器部署引导 Docker安装(中国大陆外区域用户) sudo apt update sudo apt upgrade -y sudo apt install lsb-release ca-certificates apt-transport-https software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt -y install docker.io sudo systemctl enable docker --now 拉取镜像运行PalServer(中国大陆外区域用户) sudo docker pull thijsvanloef/palworld-server-docker:latest # 创建 /palworld 用于在 ECS 上存储服务器配置和存档 sudo groupadd steam && sudo useradd steam|| echo "

mac 10.15.7 & Unity 2021.3.14 & XCode 12.4 -> Unity IOS 自动安装 Cocoapods 失败解决方法

这篇文章是针对Cocoapods失败的解决方法,但是编译出来的App是上架不了Appstore,如果想再看一下能上架到Appstore的方法,请看我的另一篇文章 mac 12.7.3 & Unity 2021.3.14 & XCode 14.2 成功将unity游戏编译到IPhone中,并上架appstore-CSDN博客 自己这两天在用Unity开发IOS时,遇到了安装Cocoapods失败的问题,记录一下问题及解决方法,便于自己后续查看,以及有相同遭遇的人查看 发生场景:打开 unity,触发自动安装 Cocoapods -> 安装失败(各种失败情况在【问题及解决】中都有记录及有解决方法) 原因分析:mac 10.15 自带的 ruby 为 2.6.3,这个版本太低,会导致安装 Cocoapods 出错,及后续 pod 会有问题,我们只需安装新的ruby版本即可 解决流程:安装 rvm -> 安装 ruby-2.7.2 & 启用 -> 安装 Cocoapods 具体解决步骤如下(如安装过程中遇到问题,请查看【问题及解决】): 1. 安装多ruby管理工具rvm 》curl -L https://get.rvm.io | bash -s stable # 查看rvm已安装的版本 》rvm -v 2. 安装 ruby-2.7.2 》rvm install ruby-2.7.2 # 查看已安装的ruby 》rvm list # 查看当前系统使用的ruby版本 》ruby -v # 使用新的ruby版本(如果上面显示版本是旧的2.6的话,请运行下面,让其使用2.7.2) 》rvm use 2.7.2

关于谷歌新版调试用具(Chrome Dev Tool ),网络选项(chrome-network)默认开启下拉模式的设置

今天在使用谷歌浏览器进行调试的时候,打开调试工具网络选项发现过滤不同模式的选项卡不见了,转而变成一个下拉式选项,如下图 这样一来使得切换不同类型查看的时候变得非常不方便,然后网上查了一下发现这个功能谷歌在很早版本就已经有了,只是当时一直是关闭状态,在这次新版本下默认处于了打卡该模式的状态,我们如果需要切换就需要到工具设置里边进行取消勾选的设置具体流程是: 第一单击工具上的设置: 第二:切换到实验选项卡 第三:在输入框中输入“net”会自动检索到 “Redesign of the filter bar in the Network Panel” 最后把该选项取消勾选,然后"f12"重新打开调试工具 就会变成选项卡形式的过滤了

每日算法打卡:动态求连续区间和 day 31

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例:输出样例: 题目分析示例代码树状数组线段树 原题链接 1264. 动态求连续区间和 题目难度:简单 题目来源:《信息学奥赛一本通》 题目描述 给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和。 输入格式 第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。 第二行包含 n 个整数,表示完整数列。 接下来 m 行,每行包含三个整数 k,a,b (k = 0,表示求子数列[a,b]的和;k=1,表示第 a 个数加 b)。 数列从 1 开始计数。 输出格式 输出若干行数字,表示 k = 0 时,对应的子数列 [a,b] 的连续和。 数据范围 1≤n≤100000, 1≤m≤100000, 1≤a≤b≤n, 数据保证在任何时候,数列中所有元素之和均在 int 范围内。 输入样例: 10 5 1 2 3 4 5 6 7 8 9 10 1 1 5 0 1 3 0 4 8 1 7 5 0 4 8 输出样例: 11 30 35 题目分析 这道题的意思就是单点操作,区间查询

每日一练 | 华为认证真题练习Day43

Day43 华为认证中级考试真题 1、MPLS 技术以标签交换代替IP转发,当MPAS运行在以太网中时,它使用哪种封装模式? A.包模式 B.帧模式 C.传输模式 D.信道模式 E.通道模式 2、SDN 和 NFV 本质上是一个概念,都是关于网络功能虚拟化的描述。 A.正确 B.错误 3、假设出端口流量发生拥塞,报文A与报文B被缓存在各自的队列中,报文B属于PQ队列,报文A属于WFQ队伍我,那么哪种报文会优先调度出去? A.报文A优先 B.报文B优先 C.同时出去 D.都被丢弃 4、下面是对于MPLS的转发过程的描述,错误的是: A.在 MPLS 中,如果LSP转发数据失败,负责建立LSP 的 MPLS控制平面能够检测到这种错误。 B.MPSL的转发平面的主要功能是对IP包进行标签添加和删除,同时依据标签转发,对收到的分组进行转发,是面向连接的 C.IP包进入 MPLS 网络时,MPLS入口的LER 会分析IP包的内容并未这些IP包添加合适的标签 D.MPLS 依然可以使用ping或者traceroute来发现 LSP 错误、并及时定位失效节点 5、在状态检测防火墙中,开启状态检测机制时,三次握手的第二个报文(SYN+ACK)到达防火墙的时候,如果防火墙上还没有对应的会话表,则下面说法正确的是? A.如果防火墙安全策略允许报文通过,则报文可以通过防火墙 B.如果防火墙安全策略允许报文通过,则创建会话表 C.缺省状态下,关闭状态功能后,并配置了允许策略即可通过 D.报文一定通过防火墙,并建立会花边 点击 IT运维大本营 公众号,在对话框回复“20240121”,即可获得正确答案~

STM32——SPI

STM32——SPI 1.SPI介绍 SPI是什么? SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如 AT91RM9200 。 SPI 物理架构 SPI 包含 4 条总线,SPI 总线包含 4 条总线,分别为SS、SCK、MOSI、MISO。它们的作用介绍如下 : (1) MISO – Master Input Slave Output,主设备数据输入,从设备数据输出 (2) MOSI – Master Output Slave Input,主设备数据输出,从设备数据输入 (3) SCK – Serial Clock,时钟信号,由主设备产生 (4) CS – Chip Select,片选信号,由主设备控制 SPI 工作原理 SPI 工作模式 时钟极性(CPOL): 没有数据传输时时钟线的空闲状态电平 0:SCK在空闲状态保持低电平 1:SCK在空闲状态保持高电平 时钟相位(CPHA): 时钟线在第几个时钟边沿采样数据 0:SCK的第一(奇数)边沿进行数据位采样,数据在第一个时钟边沿被锁存 1:SCK的第二(偶数)边沿进行数据位采样,数据在第二个时钟边沿被锁存 模式 0 和模式 3 最常用。 模式 0 时序图: 模式 3 时序图: 2.W25Q128 介绍 什么是 W25Q128 ?

学网络,这5个基础概念这样解释,有意思!

5G技术的更新,推动了新一代的网络通信发展,家庭宽带上网也从最初的十几K的速度,提升到了现在动则上百上千兆的速度,很多有部署了家庭NAS的用户,甚至都已经更新到了10G级别的内部局域网了。 在这个信息互联的时代,虽然不需要人人都学习网络技术,但是还是应该掌握一点网络的基础知识,关键时刻能够自助,现在就从有趣的讲解一点网络基础概念,力求简单易懂,不做专业技术性讲解。 说到网络,有五大基础概念是不得不提的,IP地址,子网掩码、网关、DHCP服务和PPPoE拨号,这些都是日常做电脑或路由器网络配置经常用到的,相信很多人都听过这些概念念,也知道都是一串串数字,但具体是什么,有什么用就不清楚了,我们接下来就来讲解一下这五大网络基础概念。 什么是IP地址? 首先来问大家一个问题,假如有一群人在一个密闭房间里面,用什么方式能够快速的叫到某一个人呢?相信大家第一反应肯定是叫名字,对的!同时也还有一个简单的方式,就是每个人编一个号码,例如,叫到一号,就知道是谁了。 在网络世界中也是一样的,要想快速访问某一台设备,就需要每台设备有一个编号,而这个编号就是网络设备的IP地址。在这个房间里面,如果有两个人的编号相同,那么会怎么样,肯定就是当叫到这个编号的时候,不知道叫的是谁,所以一个房间里面不允许有两个编号相同的人,在一个局域网里面不允许有两个IP地址相同的设备,如果有就被称为IP冲突,会严重危害到网络的稳定。 我们再来扩展一下,在一栋大楼里面,有好多个这样的密闭房间,每个密闭的房间也都有一群人,那么要怎么定位到某一个房间里面的一个人呢? 答案肯定也还是编号,给每个房间编号,例如1号房间里面的1号,这样就能定位到特定的那一个人了,这时候我们把房间号也加入到人的编号当中去,房间号和人的编号用一个"."间隔开来,例如1.1号,说明就这个人就是1号房间里面的1号人。 网络设备中的IP地址也是如此,例如192.168.1.100,我们可以这样理解,192.168.1号房间,也就是我们会提到的网段,100就是在这个网段里面的编号100的设备。 什么是子网掩码? 根据上面提出的编号:192.168.1.100,会引发一个新的疑问,为什么房间号是:192.168.1,而人的编号是100,可不可以把房间号设置成为192.168,人的编号设置成为1.100呢? 答案当然是可以的,但是这样设置会引发一个问题,同样192.168.1.100这个编号就会有歧义,可以表示192.168.1房间里面的100号人,也可以表示192.168号房间里面的1.100号人,这时候就要引入另外一个规则,告诉人们多少就是房间编号,多少就是人的编号,而这个规则就是子网掩码。 都知道网络时间就是数字世界,所以这个规则设计得很讨巧,长度设置和编号一样长,通过和编号的于运算,最后告诉人们那些是房间号,那些事是人的编号。 具体运算太复杂,这里用最简单那的方式说明,举个例子:子网掩码是255.255.255.0这个最常用的规则意思是255.255.255这前三位是房间号,后面0那一位是人编号,再比如192.168.1.100这个IP地址和255.255.0.0这个子网掩码,说明192.168是房间号,也就是网段,而1.100是人的编号,也就是设备在这个网段的编号。 什么是网关? 接着上面的问题,一群人在一个密闭房间里面,已经每一个人都有了一个编号,就是网络设备中的IP地址,那么这时候需求升级了,房间里面的人需要和房间外面的人们进行沟通对话,这时候怎么办呢,就需要一个会穿墙术的超能力者当传话筒,在这个房间里面穿梭,把房间里面的人的话传到外面去,把外面的人回应传回给房间里面的人。 这个有超能力的人就是网络世界中的网关,他负责把内部网络的讯息传递到外网, 把外网信息传递回来,对于一个家庭网络而言,这个角色不正是我们的路由器吗? 路由器是唯一一个和宽带连接的设备,家里所有的设备都要经过路由器才能连接到宽带,进行上网冲浪。所以网关也就是我们家庭宽带网络中的路由器,如果网关设置错误,就好像你把要传递出去的话语传给了一个没有超能力的人,自然也就无法把话语传达到房间外面。 什么是DHCP服务? 经过前面的了解,我们可以知道一个人的编号是多么的重要,如果是几个人的房间,那么编编号还是很轻松的,每个人自己选一个号码就好了,试想一下如果是几百人的大房间,如果让每个人自己想一个编号,那么肯定是会有选到同号的,引起冲突! 所以这时候需要有一个有话语权的人站出来,所有的编号由他来安排,不用自己选号码,这样就不会引发编号相同的冲突,这个人提供的这项服务可以起个名称就叫做DHCP服务。 有句话叫能者多劳,能力越强也就更有话语权,还记得我们上面说到的那位超能力人物吗,让他开安排每个人的编号,相信就能够让大家心悦诚服,所以在家庭宽带网络中,DHCP服务一般是有网关来提供,他为网络里面的每个设备分配一个IP地址。 什么是PPPoE拨号? 接着上面的话题,每个密闭房间里面的超能力者成为了网关,能够穿过密闭的房间成为了密闭房间人们和外界沟通的桥梁,但是这也仅仅作为一栋房子里面的房间互相沟通,如何能够把信息传递到其他房子里面的某个房间某个人呢? 这时候就需要一个管理一栋一栋房子的上帝出现了,他能够帮忙传递信息到每一栋房子,也就是每个密闭房间内的超能力者把沟通信息都交给这个上帝,又上帝负责传递到各个房间,上帝提供的这个服务就是类似电信运营商提供的家庭宽带服务,通过家庭宽带服务才能够和外面的大千世界联系,也就是常说的广域网或互联网。 当然,要想和上帝对话也不是这么容易的,要有专属的通道才行,建立这个专属通道的方式就是PPPoE点对点通信,这是每个超能力者和上帝对话的专属通道,所以肯定不能告诉其他人,要进行加密处理,不然就天下大乱,所以在每次对话都需要通过信息认证开启这个通道,这个就是我们家庭宽带PPPoE拨号上网。 到这里,五大网络基础概念讲解就已经完结。大家都明白了吗? 关注 工 仲 好:IT运维大本营,获取60个G的《网工系统大礼包》

第二章 数据结构 (二)(并查集、Trie树)

一、Trie树(用来高效存储和查找字符串集合的数据结构) 1、 用二维数组来构建一个树,第一维为结点下标,第二维为子节点,单个二维数组的值为子节点下标。构建字典树用于查询和插入。 #include<bits/stdc++.h> //835 存储查询字符串 using namespace std; const int N=1e5+10; int son[N][26],cnt[N],idx; char str[N]; //下标是0的节点既是根节点,又是空节点 //son数组第一维为父节点的下标,第二维度为某一个儿子的字母,其值为其这个儿子的下标 void insert(char str[]) { int p=0;//都是从0号位置开始 for(int i=0;str[i];i++) { int u=str[i]-'a';//儿子映射为数字 if(!son[p][u]) son[p][u]=++idx; //为父节点添加儿子 p=son[p][u]; //更新父节点 } cnt[p]++;//最后一个p即为一个字符串的尾结点,记录这个结点出现的次数 } int query(char str[]) { int p=0; for(int i=0;str[i];i++) { int u=str[i]-'a'; if(!son[p][u])return 0; p=son[p][u]; } return cnt[p]; } int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) { char op[2]; scanf("%s%s",op,str); //两个字符串输入的时候中间要有空格 if(*op=='I')insert(str); else cout<<query(str)<<endl; } } 二、并查集 1、并查集可以非常快速地执行将两个集合合并,或询问两个元素是否在同一个集合中两个操作

【全csdn最前沿LVGL9】基础对象lv_obj

文章目录 前言一、LVGL9的下载二、基础对象lv_obj2.1 概述2.2 布局2.3 lv_obj的使用创建一个lv_obj设置大小设置位置设置对齐父对象与子对象事件 总结 前言 LVGL(LittlevGL)是一个开源的嵌入式图形库,用于在嵌入式系统中创建用户界面。LVGL提供了一系列丰富而灵活的功能,使得开发者能够轻松创建漂亮、交互性强的用户界面。其中,lv_obj是LVGL中的基础对象,为整个图形库的构建提供了坚实的基础。 本文将深入探讨LVGL的基础对象lv_obj,解释其在嵌入式界面开发中的关键作用。我们将介绍lv_obj的基本概念、用法和一些常见的应用场景,以帮助开发者更好地理解和利用LVGL进行嵌入式图形界面开发。 一、LVGL9的下载 这里我们使用百问网提供的CodeBlocks提供给我们的lvgl模拟器 百问网团队已经将LVGL windows模拟器(CodeBlocks)已更新到V9.0.0版本,支持更多特性! 视频效果: 视频效果 项目获取地址: 获取地址 对于LVGL9的文档:文档地址里面为英文文档 二、基础对象lv_obj 2.1 概述 基础要素定义:'基础对象’的属性 坐标: 定义屏幕上的位置,这些坐标决定了小部件的显示位置。 父对象: 建立了一个层次结构,父对象表示对象树中的直接上级。 子对象: 采用嵌套结构,'基础对象’可以包含其他对象作为其子对象,形成有序的组织结构。 样式: 在美学领域发挥着关键作用,'基础对象’包含了这些样式,允许开发人员定制小部件的外观。 属性,如 Clickable、Scrollable 等。 面向对象范式中的继承 在面向对象编程的精神中,“基础对象”扮演了基类的角色。LVGL中的所有其他对象都继承自这个基础类,从而实现了一种系统化和一致的对象设计方法。 灵活多变的功能:超越基础功能 “基础对象”的力量不仅仅限于其基本属性。其函数和功能不仅仅局限于自身;它们可以与其他小部件一起使用。一个具体的例子是使用lv_obj_set_width(slider, 100),展示了“基础对象”的方法的多功能性。 独立简洁:基础对象作为小部件 有趣的是,“基础对象”不仅仅是幕后的设计师,还可以独立成为一个小部件。在其最简单的形式中,它表现为一个矩形。类比HTML,将其想象成一个<div>——在Web开发中的基本容器。 总体而言,“基础对象”是LVGL的关键组成部分,指挥着屏幕上小部件的交响曲。它提供了一个统一的基础,确保设计界面的一致性、多功能性,并能够创建复杂的图形界面。无论是作为继承的基石还是作为小部件的焦点,基础对象都体现了LVGL设计哲学中简单和强大的本质。 2.2 布局 Similarly to many other parts of LVGL, the concept of setting the coordinates was inspired by CSS. LVGL has by no means a complete implementation of CSS but a comparable subset is implemented (sometimes with minor adjustments).

软考(高级)在犹豫是否需要报班,不知大家有什么建议?

据我观察,软考是一门可以通过自学掌握的考试,并不争议。然而,尽管如此,我还是不建议大部分同学选择自学,因为相比报班而言,自学的成本反而较高。软考的难度并不低,往年的总体通过率仅为20%+,而高级考试的通过率更低,这主要是因为论文是一座不可忽视的难关。软考之所以难以通过,主要是因为考试内容广泛而庞杂,如果无法准确把握重点,自学复习会变得困难重重。另外,2023年还进行了教材的改版,下半年将改为机考,考试内容也发生了变化,不能仅仅依赖于往年的资料来复习。接下来,我将分别对自学和报班进行分析,以供大家参考。 一、自学和报班的优劣分析 (一)自学 自学具有以下优势和劣势。 优势: 省钱:自学可以通过免费获取资料,考试费用相对较低。 劣势: 精力消耗大:自学需要自行寻找资料、题库、购买教材,并制定学习计划,这需要花费很多精力。 难度较高:自学容易因为找不到重点而浪费时间,复习难度增加,考试通过率较低。 学习能力要求高:软考范围广泛,对学生的理解能力、归纳总结能力和联想分析能力要求较高。软考高级还需要写论文,要求文字表达能力、逻辑思维和记忆能力较强。 如何判断自己是否适合自学呢? 学习能力:自我评估学习能力是否足够,之前的学习成绩是否优秀? 自制力:自学需要自我计划、安排时间和监督自己学习,对自制力要求较高。 时间和精力:考虑自己是否有足够的时间和精力来进行自学备考。自学需要投入更多的时间和精力,抓住重点复习。 取证紧迫性:如果急着取得证书,自学可能不是最好的选择,因为自学的通过率较低。 预算限制:如果预算允许,可以考虑报班参加培训。 衡量以上因素后,你可以综合考虑是否适合自学软考。如果预算充足、对自学有信心,并且有足够的时间和精力投入,那么自学软考是一个经济高效的选择。如果自学条件不足,考虑报班参加培训可能更适合你的情况。 自学注意事项: 针对自学的劣势,需要注意以下几个点: 多关注考试信息:自学的过程中,需要自己主动关注考试相关的信息,及时了解政策情况,例如考试教材、大纲、形式是否有变化。没有机构或老师帮忙提醒,自己要保持注意。 制定复习规划和时间表:根据个人的时间情况,提前制定复习规划和时间表。在排计划时,尽量留出一些余量,适当拉长复习战线,力争一次通过。可以参考一些复习攻略来安排复习时间。 选择高质量的资料:在寻找课程资料、购买书籍和使用题库时,要选择质量较高的资源。适当花费一些金钱是值得的,对于免费的资料要持谨慎态度。 稳扎稳打,下苦功:复习过程中要持续、稳定地进行,肯下苦功。扎实的基础复习比依赖押题更值得信赖,不要指望碰运气取胜。 (二)报班 1、优劣分析 报班除了需要花一笔钱之外,好处非常多。如果选择一家可靠的培训机构,报班后他们会帮助制定复习计划,并提供全套复习教材、资料和题库。他们会及时解读政策,为你提供一个更适合复习的环境。总之,你可以放心地按照机构的指导专心复习,其他杂务都由机构老师负责。按照机构的复习安排上课,复习效率更高,难度更低,通过率更高。对于学习能力和自律性较弱、时间和精力有限、急需取得证书的同学来说,这些好处非常有帮助。 2、如何选择合适靠谱的机构? 市面上有很多软考培训机构,如何选择适合自己的可靠机构呢?在选择机构时,需要注意以下几点: 老师要专业 价格要合理 机构要权威 课程安排要合理 资料要齐全 服务要到位 口碑要良好 对学员的态度要认真用心 综合考虑以上因素,选择一家合适的机构能够为你的软考备考提供良好的支持和保障。 报班是一个重要的决策,确保选择适合自己的培训机构和课程非常重要。以下是报班的注意事项和综合建议: 注意事项: 询问服务内容: 在报班前,要仔细了解培训机构提供的服务内容。例如,了解费用包含哪些服务、提供的资料、授课教师是谁、课程安排如何等。确保这些服务内容与你的需求相匹配。 个性化需求的确认: 如果你有一些特殊的需求,例如关注论文辅导、希望与授课教师互动、希望在考试后有交流平台等,要与机构确认并确保满足你的个性化需求。 试听课程: 在报班之前,建议获取一些老师的录播视频或参加他们的直播试听课程,以了解老师的讲课风格是否符合你的喜好。只有确保没有问题后才可以放心报班。 综合建议: 总体而言,考虑到自学的难度、时间成本、教材和考试形式的变化等因素,我强烈建议如果预算允许的话尽量选择报班,特别是对于软考高级考试,自学的通过率非常低。 如果你仍然想自学,可以根据以下几点来评估自己是否适合自学: 自学能力:评估自己的自学能力和纪律性,是否有足够的耐心和毅力完成学习。 学习资源:了解自己是否能够获取到高质量的学习资源,例如教材、习题和参考资料等。 时间安排:考虑到工作或其他事务,自学是否能够合理安排时间,并保证有足够的学习时间。 如果决定报班,也要注意辨别机构的质量,选择适合自己、值得信赖的培训机构。保持综合性思考,做出符合个人情况的决策。希望对你有所帮助! 备考资料分享如下:

软考正式改为机考,对于考生有哪些影响?

1、报名费用可能会涨价 考虑到报名费用问题,软考初级考生可能会担心费用是否会涨价。需要指出的是,并非所有地区都会涨价,只有部分地区有可能涨价。 2、机考考试难度会降低吗? 如果实施机考,将是一次重大改革,必然需要适应和磨合的过程。随着时间的推移,难度可能会增加,题库也会不断扩充。初次机考的难度预计不会太大,这可能是一个适应新形式的机会。 3、考试时长可能会有调整 由于机考的原因,考试时长可能会进行调整。例如,在选择题方面,不再需要填涂答题卡,因此考试时间可能会减少。然而,案例分析和论文写作部分的时间可能不会有太大变动。具体的调整要等待软考办发布机考实施方案后才能确定。 4、机考对考生备考有什么影响? 机考可能导致每个人的试题不一样,因此需要更加扎实地掌握基础知识。市面上所有的押题和包过材料将变得无效。考生需要认真备考每个知识点,符合考纲要求。机考可能会重组核心知识点的分值分布,不能再依赖以往刷重点的方式进行突击学习。因此,备考策略需要做出相应调整。 5、备考计划需要做出调整吗? 备考仍然应该按照循序渐进的考纲和教程进行,不论考试形式如何变化,只有通过扎实的学习,才能保证顺利通关。 6、机考对软考高级科目的影响更大吗?论文也是机考吗? 对于高级科目的学员来说,机考是一个好消息。论文的写作对于有限时间内完成近3000字是有困难的,但对于许多从事IT行业的人来说,在2小时内打字近3000字是相对轻松的任务。关于论文的机考,初步预测是随机选题,对于高级科目的论文来说,需要掌握更多的方向,不再像以前机构准备1-2个方向然后去考试,而是需要全面准备,遵循考纲的要求。 7、题型预计会有哪些调整? 很多人担心计算和画图这两个机考项目的完成,现在已经有了手写板,所以这方面应该没有问题。但初级和中级科目的题型预计会参考经济师考试,包括单选、多选、判断等方式出题。当然,所有的调整还需要以官方通告为准。 8、对于打字速度较慢的考生,有必要练习速度吗? 软考不限制考生的专业、工作经验和年龄。有些考生可能平时不怎么需要打字,速度较慢。如果是这种情况,那么确实需要练习提高打字速度。 9、机考将会减少泄题和作弊现象吗? 这一点可能会成为改革的催化剂!虽然官方在2022年上半年已经通报了一起考试作弊案,但实际上软考近几年一直存在考生讨论泄题和作弊现象,特别是在2023年上半年更为严重。如果引入机考,将能够有效避免这些问题的发生。 10、以后出成绩会更快吗? 每年考完之后,最难熬的就是等待成绩的日子,不断刷新软考办官网,频繁打电话咨询。如果引入软考机考,就不再需要试卷的运输和扫描等流程,评阅工作量也会减少,因此出成绩可能会比以前更快。 备考资料分享如下:

基于Kubernetes的微服务架构,你学会了吗?

2017年,这一年在容器技术发展史上具有重要的分水岭意义,标志着“后微服务时代”的开始。这一年,发生了几件重大事件,彻底改变了容器管理领域的格局。 首先是 CoreOS,一直以来与 Docker 竞争的 RKT 容器技术的领头羊,宣布放弃其容器管理系统 Fleet,转而支持 Kubernetes。接着,容器管理行业的领头羊 Rancher Labs 也放弃了自家多年开发的 Cattle 系统,采纳“All-in-Kubernetes”的策略,从此 Rancher 2.0 版本起只支持 Kubernetes。 同年,Kubernetes 的主要对手 Apache Mesos 宣布了与 Kubernetes 的集成计划,“Kubernetes on Mesos”,这标志着他们从竞争对手转变为支持者,让 Kubernetes 能够与 Mesos 的其他顶级框架(例如 HDFS、Spark 和 Chronos 等)实现资源的动态共享和隔离。 此外,2017年10月,Docker 的母公司,也是 Kubernetes 最大的竞争对手之一,宣布 Docker 将同时支持 Swarm 和 Kubernetes,这在事实上承认了 Kubernetes 的领导地位。 这些事件标志着长达三至四年的容器技术竞争战争,主要围绕 Docker Swarm、Apache Mesos 和 Kubernetes,最终以 Kubernetes 的胜利告终。Kubernetes 的崛起不仅是容器技术发展的一个重要里程碑,也预示着软件架构发展新纪元的到来。 需求场景 在采用了基于 Spring Cloud 的微服务架构之后,小书店 Fenix's Bookstore(虚拟) 成功地应对了伸缩性、独立部署、运维管理等方面的挑战,以及产品经理提出的日益增长的复杂业务需求。然而,对于团队中的开发者、设计师和架构师来说,工作并没有变得更加轻松。微服务所涉及的新技术术语,如配置中心、服务发现、网关、熔断、负载均衡等,对新手来说学习曲线陡峭。而从产品的角度看,Spring Cloud 的各种组件,如 Config、Eureka、Zuul、Hystrix、Ribbon、Feign 等,也构成了产品编译后代码的主要部分。 微服务架构选择在应用层面解决分布式问题,而不是在基础设施层面,主要是因为软件的应用服务比硬件基础设施更加灵活,而后者难以跟上前者的步伐。但是,随着 Kubernetes 在容器编排管理方面的统一,这些技术性的底层问题开始在基础设施层面找到了广泛认可的解决方案。因此,Fenix's Bookstore 开始了它在“后微服务时代”的又一次架构升级,此次升级主要集中在两个目标上。

单片机驱动多个ds18b20

目录 1设计内容 2ds18b20介绍 2.1传感器引脚及原理图 2.2寄存器配置 3程序实现 3.1配置初始化 3.2配置寄存器 3.3ROM读取 3.4温度读取 1设计内容 通过51单片机,读取总线上挂载的多个ds18b20的温度信息。 如下图,成功读取到3路温度数据。 2ds18b20介绍 2.1传感器引脚及原理图 DS18B20传感器的引脚及封装图如下: DS18B20一共有三个引脚,分别是: GND:电源地线 DQ:数字信号输入/输出端。 VDD:外接供电电源输入端。 单个DS18B20接线方式: VDD接到电源,DQ接单片机引脚,同时外加上拉电阻,GND接地 注意这个上拉电阻是必须的,就是DQ引脚必须要一个上拉电阻. 2.2寄存器配置 DS18B20写入的功能命令: ROM指令: 采用多个DS18B20时,需要写ROM指令来控制总线上的某个DS18B20 如果是单个DS18B20,直接写跳过ROM指令0xCC即可 RAM指令,DS18B20的一些功能指令 常用的是: 温度转换 0x44 开启温度读取转换,读取好的温度会存储在高速暂存器的第0个和第一个字节中 读取温度 0xBE 读取高速暂存器存储的数据 3程序实现 3.1配置初始化 /**初始化DS18B20**/ bit InitDS18B20ACK(){ bit ACK;//用来判断DS18B20是否初始化成功 EA = 0; DS18B20_IO = 0; DS18B20_delayms(1); DS18B20_IO = 1; DS18B20_delayms(1); DS18B20_IO = 0; DS18B20_delayms(1); ACK = DS18B20_IO; DS18B20_IO = 1; DS18B20_delayms(1); while(!DS18B20_IO);//等待脉冲结束 EA = 1; return ACK; } 3.

MySQL之DML操作

DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的记录进行更新。 有关数据表的DML操作: INSERT INTO DELETE、TRUNCATE UPDATE SELECT 条件查询 查询排序 聚合函数 分组查询 1.1 INSERT语句 INSERT INTO 表名 [字段列表] VALUES (值列表); 默认情况下,一次插入操作只插入一行 一次性插入多条记录: INSERT INTO table [(column [, column...])] VALUES(value [, value...]),(value [, value...]) 如果为每列都指定值,则表名后不需列出插入的列名 如果不想在表名后列出列名,可以为那些无法指定的值插入null 可以使用如下方式一次插入多行 INSERT INTO 表名 [字段列表] SELECT 值列表 UNION 值列表 UNION 值列表....; 语句——可以非常复杂。 如果需要插入其他特殊字符,应该采用\转义字符做前缀 1.2 REPLACE语句 replace语句的语法格式有三种语法格式。 语法格式1:replace into 表名 [(字段列表)] values (值列表) 语法格式2: replace [into] 目标表名[(字段列表1) select (字段列表2) from 源表 where 条件表达式 语法格式3: replace [into] 表名 set 字段1=值1, 字段2=值2 REPLACE与INSERT语句区别: replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。

BEV感知(1)--BEV感知算法

目录 一、BEV感知算法 1、BEV感知 2、BEV算法数据形式 二、BEV开源数据集 1、KITTI 2、nuScenes 三、BEV感知方法 1、BEV LiDAR 2、BEV Camera 3、BEV Fusion 四、BEV感知算法优劣 一、BEV感知算法 BEV(Bird's Eye View)即鸟瞰图,通过使用摄像头,雷达,激光雷达等收集数据,通过计算机视觉、深度学习、机器学习等技术对数据进行处理和分析,从而实现对交通、障碍物、道路条件等信息的感知和识别,主要应用于自动驾驶领域。 1、BEV感知 BEV感知是一个建立在众多子任务上的一个概念,包括分类、检测、分割、跟踪、预测、规划等,通过使用鸟瞰图来进行各项计算机视觉相关任务。 BEV感知输入:毫米波雷达(Radar)、激光雷达点云(LiDAR)、相机图像等,依据输入的不同,BEV感知算法有进一步的划分。 对于BEV感知任务中一般有BEV Camera(图像),BEV Fusion(图像和点云融合),BEV LiDAR(点云)三种方式。 2、BEV算法数据形式 BEV算法数据形式一般有纯图像、点云、图像点云融合三种形式。 (1)纯图像 纯图像的输入一般就是BEVCamera感知模型,是完全基于车载摄像机的图像进行提取特征,感知当前场景的车辆、行人等任务的。其中介绍一个最为典型的BEVCamera——BEVFormer。 BEVFormer利用了基于transformer的Encoder,通过网格形式的BEV queries来利用空间和时间进行交互,从而设计可学习的BEV和注意力模块,在nuScenes测试集上对3D目标检测和地图分割任务中实现最优性能。 下图为BEVFormer的完整网络结构,输入多视角图像,经过backbone(一般为Resnet)之后,经过提取网络(前馈网络+时空注意力机制模块)得到BEV特征,最后接一个图像分割或检测的头组成完整的网络输出。 (2)点云 点云就是场景中若干点的组成集合,具有稀疏性、无序性,是一种3D表征,一般来说,点云是通过激光雷达对场景扫描得到的,下图为一个场景的点云图。 对于点云问题,由于点过于稀疏,数量巨大,一般有两种处理方法(聚合方法),分别是Point-based和Voxel-based。 Point-based处理点云数据,可以处理高密度的点云数据,更加灵活,但计算复杂度高,不规则性高。 Voxel-based处理体素数据,使数据结构更加规则,更好的表示体积信息,但收到网格限制,会丢失部分信息。 (3)图像和点云融合 下图为纯图像提取特征和Fusion形式的提取特征的比较,BEVFusion的特征是将Camera格式和LiDAR格式分别提取得到BEV特征后再进行融合。 二、BEV开源数据集 1、KITTI KITTI数据集通过车载相机、激光雷达等传感器进行采集,采集自德国卡尔斯鲁厄街道,数据规模为14999张图像及其对应点云,其中7481张训练集,7518张测试集,KITTI数据集标注了车、行人、骑车的人三类,共计80256个标注对象,下图为标注平台。 在官方论文中可以了解到,标注平台的传感器并不是统一坐标系的,存在R、T关系,另外对于摄像机的外参数做了统一。 KITTI数据表示法: (1)第1字节 Pedestrian代表行人 (2)第2字节 “0.00” 表示是否被截断,处于0~1范围内,越大被截断遮挡的程度越大 (3)第3字节 “0” 表示行人不存在遮挡,离散值0(不存在遮挡),1(部分遮挡),2(严重遮挡),3(不确定) (4)第4字节 “-0.20” 角度信息 (4)第5-8字节 “712.40, 143.00” 2D平面左上角坐标,“810.73 307.92”2D平面右下角坐标 (5)第9-11字节 “1.89 0.48 1.20” 3D平面上的高宽长(h,w,l),单位m (6)第12-14字节 “1.84 1.47 8.

Windows11通过Hyper-V创建VM,然后通过vscode连接vm进行开发

这边需要在win11上建立vm来部署docker(这边不能用windows版本的docker destop),学习了下,记录。 下载系统镜像 首先下载系统镜像:https://releases.ubuntu.com/focal/ 这边使用的是ubuntu20.04.6 LTS (Focal Fossa) ,Server install image (无桌面版本) 启用hyper-v 在control-panel里面的 Programs and Features 里面的 Turn Windows features on or off里面,找到hyper-v,打开它,然后重启机器 使用hyper-v创建VM 重启之后找到hyper-v Manager 打开之后我们先新建Switch Manager 选择Exteral,然后选择create 然后自定义你的名字,网络类型根据你宿主机使用的网络类型来进行选择,使用网线就选择第二个,使用wifi的话就选择第一个wifi6。选择完成之后直接确定就行了 然后开始新建VM,点击new,选择vm 这里自定义你的vm名字,下面的check box一定要勾上,自定义vm创建的位置,避免默认创建到C盘,之后占用C太多空间。尽量选择到其他盘去。 然后第一代还是第二代,看你个人需求进行选择 第一代虚拟机是基于传统的 BIOS 和 IDE 控制器的虚拟机,支持大多数来宾操作系统,包括 32 位和 64 位的 Windows 和 Linux。第一代虚拟机可以使用旧版网络适配器来通过 PXE 启动,也可以从 IDE 控制器的虚拟硬盘或虚拟 DVD 启动。第一代虚拟机还支持软盘控制器和 COM 端口等设备。 第二代虚拟机是基于 UEFI 和 SCSI 控制器的虚拟机,支持大多数 64 位版本的 Windows 和较新版本的 Linux 和 FreeBSD 操作系统。第二代虚拟机可以使用标准网络适配器来通过 PXE 启动,也可以从 SCSI 控制器的虚拟硬盘或虚拟 DVD 启动。第二代虚拟机还支持安全启动、动态内存和在线调整大小等功能。