Eureka入门指南:微服务注册与发现的基础概念

Eureka入门指南:微服务注册与发现的基础概念 引言 随着微服务架构的普及,微服务之间的高效通信和管理成为了开发和运维的核心挑战之一。为了解决服务发现和管理问题,Netflix推出了Eureka,一个功能强大的服务注册和发现工具。Eureka作为Spring Cloud体系的重要组成部分,能够帮助开发者有效地管理微服务的生命周期,使其在一个复杂的分布式系统中依旧能够保持高效运转。本指南将详细介绍Eureka的基础概念、核心功能、工作机制、配置与使用方法,以及在实际场景中的应用。 第一部分:Eureka的背景与作用 1.1 微服务架构的挑战 微服务架构是一种将应用拆分为多个小型、独立部署服务的设计模式。每个服务都有自己的职责和数据源,彼此独立运行,并通过网络进行通信。虽然这种架构带来了灵活性和可扩展性,但也引入了新的挑战,特别是服务的注册与发现问题。具体来说: 动态扩展和缩减:微服务实例的数量和位置可能会随着需求的变化而动态变化,如何有效地管理这些实例是个难题。服务发现:微服务通常需要互相调用,如何确保每个服务能够正确找到并调用其他服务,是一个复杂的问题。负载均衡:多个相同的服务实例同时存在时,如何将请求均衡分配给这些实例是关键。 1.2 Eureka的解决方案 Eureka的出现正是为了应对上述挑战。作为一个分布式系统的服务注册和发现工具,Eureka提供了以下核心功能: 服务注册:微服务启动后会将自己的信息(如IP地址、端口号等)注册到Eureka Server上,这样其他服务可以找到它。服务发现:微服务可以通过Eureka Client从Eureka Server获取其他服务的位置信息,并与之通信。健康检查与剔除:Eureka定期检查微服务的健康状态,如果某个服务无法正常响应,Eureka会将其从注册表中剔除,避免请求被路由到故障实例。高可用性和容错机制:Eureka Server可以以集群的方式部署,确保即使某些节点出现问题,服务发现依然能够正常进行。 第二部分:Eureka的基本架构 2.1 Eureka的组件 Eureka由两部分组成:Eureka Server和Eureka Client。Eureka Server是服务注册的中心,所有微服务都会将自己注册到这个中心。Eureka Client是集成在每个微服务中的客户端,用于向Eureka Server进行注册和查询其他服务的位置。 2.1.1 Eureka Server Eureka Server是整个服务注册和发现的核心。它提供了一个REST API,所有的Eureka Client都可以通过这个API与它通信。Eureka Server主要负责以下任务: 注册服务:接收微服务的注册请求,并将其加入到注册表中。健康检查:定期向注册的服务实例发送健康检查请求,确保服务的可用性。剔除无效实例:如果某个服务在多次健康检查中未能响应,Eureka Server会将其从注册表中移除。提供服务列表:向查询的微服务返回当前活跃的服务实例列表,帮助微服务进行服务发现。 Eureka Server通常会被部署成集群模式,以实现高可用性。集群中的各个Eureka Server节点会互相同步注册表数据,确保在某个节点出现故障时,其他节点依然可以提供服务。 2.1.2 Eureka Client Eureka Client是运行在微服务实例中的一个客户端。它的主要职责是: 向Eureka Server注册服务:当一个微服务启动时,Eureka Client会向Eureka Server发送注册请求,告知其位置信息(如IP、端口、状态等)。续约:微服务实例会定期向Eureka Server发送续约请求,表明该服务仍然处于活跃状态。获取服务列表:Eureka Client会定期从Eureka Server获取最新的服务列表,用于发现和调用其他微服务。负载均衡与重试:在调用其他微服务时,Eureka Client可以根据服务列表实现负载均衡,并在某个实例不可用时尝试其他实例。 2.2 Eureka的工作流程 Eureka的工作流程可以分为以下几个步骤: 服务注册:当一个微服务实例启动时,它的Eureka Client会向Eureka Server发送一个HTTP请求,携带该服务的基本信息(如服务名、IP、端口等)。Eureka Server会将这些信息存储在注册表中。服务续约:为了保持服务的可用性,微服务实例会定期向Eureka Server发送续约请求。如果Eureka Server在一定时间内没有收到续约请求,会将该服务标记为不可用,并在一段时间后将其剔除。服务发现:其他微服务可以通过Eureka Client向Eureka Server发送请求,获取目标服务的位置信息,并调用该服务的实例。健康检查与剔除:Eureka Server会定期检查已注册服务的健康状态,如果发现某个服务不可用,Eureka Server会将其从注册表中移除,以确保请求不会路由到故障实例。 第三部分:Eureka的配置与使用 3.1 搭建Eureka Server 首先,我们需要搭建一个Eureka Server来作为微服务的注册中心。下面是一个简单的Eureka Server的配置示例:

基于springboot的智能家居系统

@TOC springboot198基于springboot的智能家居系统 研究背景与现状 时代的进步使人们的生活实现了部分自动化,由最初的全手动办公已转向手动+自动相结合的方式。比如各种办公系统、智能电子电器的出现,都为人们生活的享受提供帮助。采用新型的自动化方式可以减少手动的办公时间,增加正确率从而增加人们的幸福指数。时代进步中计算机技术的发展尤为突出,渗透进生活的方方面面,各种App、 网站、管理系统、小程序迅速占领市场。 对于智能家居管理的现实问题,大多数家庭采用人工加办公辅助软件的方式进行管理,这类方式对于信息的发布和流程、后续的资料整理工作都是非常大的帮助。但一般都还是针对管理人员使用,如果用户想要操作需要一步一步进行批准,非常复杂。现实智能家居管理工作中缺少一种更为优质、简单的方法途径。 1.2课题实现目的和研究意义 时代的发展也为人们提出了更高的要求,只有不断的学习和发展才可以前进。目前我们正在科技和网络发展的关键点,网络已实现普及。然而还是有大量的企业、机构采用传统的办公方式进行处理事务,当然传统的方式对于小规模的企业、机构来说更为适合,但想要发展就需要以发展的目光来看待问题。如果可以采用更科学、省力的方式进行办公将会带来变革。 智能家居管理关系着家庭的服务享受。工作人员对家具的录入要严格把关,更要考虑到家具的修改、删除问题。以往都是由用户人工统计家具情况,工作人员审核力度不好把控,监督不了家具的实际情况。如果采用共享的平台,把智能家居的相关负责人员都结合到一起,起到共同监管的目的就可以解决这类问题。智能家居的所有信息都可以由管理员直接管理,用户的操作过程也可由相关管理员负责把控,把用户的管理工作实现流程化、清晰化,减少暗箱操作,提供更为透明的工作流程,实现智能家居管理的真正价值。 1.3课题研究内容 本系统从智能家居管理的工作出发,包括管理员和用户两种权限。管理员的功能为用户管理、家具管理、任务管理、基础数据管理、个人中心管理等,实现系统里信息的全面管控,用户的功能为发布任务和管理家具,两种权限的用户功能相辅相成,不可缺少,共同帮助智能家居管理。本系统实现“放手”、“透明化”管理,使智能家居的管理更加简单、轻松。 1.4论文结构安排 本篇论文的结构分为摘要、目录、正文部分、总结、致谢和参考文献。正文部分为核心。正文部分分为: 第1章绪论,从课题的开发背景、现状、目的意义等进行本课题的介绍; 第2章系统分析,从系统的开发技术、环境、可行性、操作流程等进行系统的详细分析; 第3章系统设计,从系统的功能图、数据库设计、ER图、数据库表进行系统的设计; 第4章系统实现,主要介绍系统的实现界面和实现内容; 第5章系统测试,讲解主要功能的测试过程以及测试结果。 第2章 系统分析 2.1系统开发中使用相关技术介绍 2.1.1Java介绍 Java语言是从C++进行衍生出来的一种新型编程语言,他保留了c++语言中很多核心技术,继承了他的面向对象的优点,而且舍弃了很多缺点,比如在Java语言中去掉了指针,这样可以减少很多错误,还去掉了运算符,这样提高了运行处理效率。还增加了很多优点,添加了垃圾回收功能,提高了代码的使用率,总体来说,Java语言是一个分布式的、高性能的、多线程的开发语言。Java从开发之初就是打算作为一个开放性的语言技术,这就要求需要有很高的兼容性,首先就需要同样的代码程序可以在不同的计算机上运行,还要支持不同的网络,同时还要注重安全性,方便用户使用。Java语言最突出的特点就是面向对象,可以把一个对象当成很多代码状态的物体,然后进行自定义类型进行关联操作,这样进行集合起来的代码就叫对象,面向对象的方法可以使设计根据的简单,方便管理,还可以减少失败。C++最大的一个缺点就是没有垃圾回收机制,通常在编程的过程中,初始化对象时候系统会自动分配一个内存地址,如果不需要这个对象的时候,系统不能进行自动删除和回收,这样造成了很大的内存浪费,导致系统卡顿,会让系统非常的不稳定,严重的话甚至会系统崩溃,而Java语言就是在这个基础上设置了垃圾回收机制,当一个使用过的对象没有引用的时候,系统可以自动删除,回收内存,这样就可以很好的避免了内存泄漏,保障了程序的安全,同时提高了运行效率。 2.1.2Mysql数据库介绍 Mysql数据库是目前比较流行的一种开源数据库,可以支持多种编译器进行在线测试,从而保证了代码的可移植性,而且支持多种操作系统有很好的跨平台性,为编程语言提供所需要的API,可以多线程同时运行,这样有效的减少了内存占用率,提高了使用效率。运行的过程中还能自动优化sql查询算法,这样使数据查询速度达到了显著的提高,而且Mysql数据库还可以作为一个独立的程序在客户端中单独使用,也可以嵌入到其他程序中搭配一起使用。Mysql数据库效率非常的高,可以处理上千万条数据,可以同时支持多种不同的数据引擎,而且是开源的软件,不需要支付任何费用,而且可以进行定制,使用GPL协议进行代码修改,开发属于自己的Mysql系统。综上所述,Mysql数据库是一个非常受欢迎的一个数据库,体积小,速度快,最重要的还是免费,非常适合中小型项目的开发使用。 2.1.3B/s架构介绍 B/s架构是随着网络快速发展而开发出来的一种网络框架,跟传统的cs框架最大的区别就是,直接把代码部署到网络服务器中,这样方便了系统的后期开发和维护,然后用户可以直接通过浏览器进行代码的访问,不需要额外安装任何的软件客户端,简化了用户的使用。B/s结构是指Browser/Server结构,意思就是只需要安装一个服务器就行了, 客户端方面主要就是采用浏览器进行访问,主要是对传统的c/s架构的一种改进,采用www浏览器技术和其他Script语言技术,把系统实现需要的代码全部部署到了服务器上面,是一种新型的架构技术,可以直接借助浏览器进行数据访问和数据交互。最大的优点就是,不需要安装客户端,不受环境影响,可以实时实地的进行访问,其次就是维护非常的方便。当然了有优点也有不可避免的缺点,首先是在访问速度方面,比较受网络的影响,不像C/s架构一样,处理速度非常的快,直接在本机就可以完成数据交互,而B/s需要借助网络才能进行服务器访问,必须保证有顺畅的网络,才能有好的使用体验,其次就是安全性,因为所有数据存储在网络服务器中,比较容易受到攻击,从而造成数据泄漏,这是目前B/s架构存在的最大的弊端。所以说B/s架构适合一些电子商务类的网站,适合比较有用户共享交互的,开放性的网站的设计与开发。所以我开发本系统采用B/s架构是非常适合的,可以达到多人同时登录系统,可以实现信息交互,而且方便随时随地的进行数据访问,而且我对B/s架构开发比较熟悉,所以本系统就采用B/s架构来进行开发设计。 2.1.4Vue技术介绍 Vue技术是主导开发的一种用来创建动态页面的技术。Vue技术通过服务器来响应要求,再根据要求生成Html、Xml来进行转换成Web页面。Vue技术也属于一种脚本语言,常用来搭配Java语言使用,可以和静态的页面一起使用,把静态的页面改成动态的页面。Vue技术在使用时可以转换成Servlet代码,然后再编译成二进制的机器码,当然也可以直接编译成二进制的机器码。Vue技术的特点为简单好用,可以快速的把静态页面变成动态的页面,它使用Javabean来把常用的代码来复制,可以减少编程人员的重复工作,同时Vue技术还拥有很多标签,可以支持更多的外在标签和内在的标签,还可以自定义标签,使编程人员在使用时更加的灵活,加快项目开发的速度。Vue技术的功能非常简单,只负责页面数据,负责页面的传输,所以更加的单纯,不容易出错。 2.1.5 Tomcat服务器介绍 Tomcat服务器属于Apache服务器的一部分。Tomcat服务器作为Java语言项目的运行条件非常受欢迎。因为Tomcat服务器非常小,可以内置到运行软件里使用,不需要单独安装,这样可以减少多种环境的安装,从而简化项目的调试。Tomcat服务器由Sun公司创立,可以处理Html页面,在运行中处理Vue和Servlet页面。 2.1.6Web技术介绍 Web程序一般可以分为静态网站和动态两种形式,前几年的时候一般用的都是静态的,就是网站直接通过Html进行编写出来的,直接放到服务器上,然后通过Http协议用户就可以直接访问网站,相对来说形式比较单一。但是随着技术的发展,很多业务都拓展到了线上进行,单纯的静态网站所保存的数据远远不能满足用户的需求,大多都需要根据用户的需求进行单独生成动态的页面进行反馈,然后根据需要的需求在进行脚本代码的加工处理,然后通过浏览器进行解析,最后反馈给客户,这种形式就是动态的网站。Web客户端的主要功能就是对信息进行展示,可以结合各种编程语言使用,比如像Jtml ,Css 脚本语言等各种技术,而其中最重要的就是Html语言,他是组成Web程序必不可少的一部分,而脚本程序可以嵌入到Html文本里,通过这个流程可以使Html静态网页转换成动态页面,可以很好的提高系统的可交互性。而编写脚本程序常用的就是JavaScript技术,他的突出特点就是变量非常的灵活,而且兼容性好,不需要在单独进行编译,非常方便使用,可以直接用来设计动态交互的网页,不光是可以用来对客户端部分的编写,而且也可以直接通过脚本程序进行服务端的编写,可以很好的解决Web服务端的执行问题。所以说Web服务器主要包含的技术有Java ,Asp,Jsp等,都可以直接通过Web服务端进行页面展现。 2.2系统可行性分析 系统的可行性关系着系统开发的成功和市场,没有经过详细可行性分析的系统开发过程会非常艰难。系统可行性从系统的经济方面、操作方面和技术方面进行分析。 2.2.1经济可行性分析 系统开发所需要的经济主要在系统的成本问题、运行问题和维护问题上。本系统在开发中不需要经济的支撑,所需要的开发软件和设备都是在已有条件上。本系统在运行里所需要的环境也都为免费就可以下载的。本系统在后期的维护上也只需要技术支持就可以完成。所以本系统在经济可行性上可以通过。 2.2.2操作可行性分析 本系统在开发中充分调查了所使用用户的操作习惯和风格,所有的操作流程也都为简单的流程,在操作中也设置了提醒。用户在使用本系统时只要按照提示就可以完成,非常简单。所以本系统在操作可行性上可以通过。 2.2.3技术可行性分析 本系统所需要的技术支持为Java语言,Mysql数据库,Vue技术和Springboot框架等。所使用的技术都为开源成熟的技术,也是目前流行的技术之一。使用这些技术开发的系统可以保证系统的前詹性和稳定性、安全性。所以本系统在技术可性性上可以通过。 2.3系统需求分析 目前计算机、网络技术已进入到各行各业。智能家居做为家庭的重要组成部分更应该身体力行,智能家居管理里的所有工作都是围绕家具而展开,每个家具的档案信息都非常多,如果采用传统的管理方式非常容易造成混乱,而且对于家具的信息查询非常不便。对于家具的性能、数据都需要额外的严谨,如果还是采用传统的管理方式对用户、[家具都做不到百分百的监管,用户的操作也实现不了透明。所以非常需要新的管理方式出现。 2.4系统性能分析 系统在设计时也需要注意系统的性能,一般系统的性能方面包括系统的稳定性、安全性、界面设计方面、操作方面、协调等方面。 本系统在界面设计方面尊重所有的使用权限,多方面参考不同使用权限的使用习惯以及风格,综合不同的情况整理出符合大众要求的系统界面。做到自己的最大能力;在系统的稳定性、安全性方面采用必要的登录验证,不同权限采用不同的账号和密码。为了使系统更为稳定采用成熟的开发环境和技术,在代码编写时尽可能的减少冗余,保证系统的运行效率;在系统的操作流程方面,尽可能的采用简单的流程来实现用户要求的反馈,当用户提出需求时,可以用最少的步骤进行提问操作;本系统采用数据库和功能界面分开设计,这样可以保证当系统的功能运行出错时不会影响系统里的数据,也就保证了数据的安全。 2.5系统功能分析 系统的功能分析决定了系统的功能设计,完整详细的系统功能分析可以使系统的开发事半功倍。本系统的功能围绕管理员、用户两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员可以管理所有内容,包括使用权限、家具信息、任务信息、基础数据信息等。本基于Springboot的智能家居系统管理员的用例图如下图2-1所示: 图2-1管理员用例图 用户用例为任务管理和家具管理、个人资料管理。用户用例图如下图2-2所示: 图2-2用户用例图 2.6系统操作流程分析 信息从如何产生到反馈结果的过程可以称为信息的流程。分析好系统的操作流程才可以使系统正确运行不会出现Bug。本系统的流程为管理员先进行登录,登录后管理用户的账号、密码等信息。用户使用注册时的账号密码进行登录,然后进行个人资料的修改、任务发布、家具管理等操作。当用户操作后,管理员可以在管理员界面立即收到操作后的信息,并且可以进行修改。本基于Springboot的智能家居系统的操作流程如下图2-3所示: 图2-3基于Springboot的智能家居系统操作流程图 第3章 系统设计 3.1系统功能结构设计 系统的功能结构是采用树形图来绘制功能设计。根据分析所得,本系统的功能设计为管理员和用户两部分。管理员为高级角色,可以管理系统里的所有信息,包括用户信息。用户功能为发布任务和管理家具。本基于Springboot的智能家居系统的功能结构设计图如下图3-1所示: 图3-1基于Springboot的智能家居系统功能结构图 3.2数据库设计 数据库为数据的仓库,决定了数据的保存和修改、删除、调用等。数据库的稳定决定了系统里数据的安全。本系统采用Mysql数据库,在建立数据库时采用Root用户名。数据库的建立过程为先进行数据的ER图设计然后进行数据库表的实现。 3.2.1数据ER图设计 数据ER图中记录了关系、实体、属性。实体与实体的关系决定了数据在调用时的正确与否,实体的属性决定了该实体的内容。数据ER图的设计同样重要,也是数据库建立的基础。 通过系统中的功能数据分析,本系统的实体主要有用户、管理员、家具信息、任务信息、类型信息等。

【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(二)

目录 1 -> 基础数据类型 1.1 -> 条件语句 1.1.1 if语句 1.2 -> 分支语句 1.2.1 -> switch语句 1.3 -> 循环语句 1.3.1 -> while循环 1.3.2 -> continue 1.3.3 -> break 1.3.4 -> for循环 1.4 -> 数组 1.4.1 -> 创建数组 1.4.2 -> 获取数组元素 1.4.3 -> 新增数组元素 1.4.4 -> 删除数组中的元素 2 -> 函数 2.1 -> 语法格式 2.2 -> 关于参数个数 2.3 -> 函数表达式 3 -> 作用域 4 -> 作用域链 5 -> 对象 5.1 -> 基本概念

云原生和安装Ubuntu 22系统

一.云原生简介 2004年开始,Google已在内部大规模地使用容器技术。 2008年,Google将 Cgroups合并进入了Linux内核。2013年,Docker项目正式发布。2014年,Kubernetes项目正式发布。2015年,由Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了CNCF(Cloud Native ComputingFoundation)云原生计算基金会。 https://landscape.cncf.io/2017年,CNCF达到170个成员和14个基金项目;2018年,CNCF成立三周年有了195个成员,19个基金会项目和11个孵化项目。2022年,全球187国家、820+企业成员、130+项目、16万以上开发者。 二. 云原生定义 云原生是一种提供了可应用于生产环境的方法论,方便企业快速运行应用程序,企业不需要将人效用于放在底层运行环境,而是主要聚焦在业务层功能开发,从而实现产品的快速交付、迭代及稳定性,从而整体降低成本支出并提高交付效率。 https://github.com/cncf/toc/blob/main/DEFINITION.md#%E4%B8%AD%E6%96%87%E7%89%88%E6%9C%AC 三. 云原生技术栈 容器化:以docker、containerd为代表的容器运行技术。 服务网格: 比如Service Mesh等。 微服务:在微服务体系结构中,一个项目是由多个松耦合且可独立部署的较小组件或服务组成。 不可变基础设施:不可变基础设施可以理解为一个应用运行所需要的基本运行需求,不可变最基本的就是指运行服务的服务器在完成部署后,就不在进行更改,比如镜像等。 声明式API:描述应用程序的运行状态,并且由系统来决定如何来创建这个环境,例如声明一个pod,会有k8s执行创建并维持副本。 什么是CNCF: CNCF(云原生计算基金会、Cloud Native Computing Foundation)是由Google牵头在2015年成立的一个开源基金会,主要目的为支持开源社区开发云原生组件,目前孵化出了kubernetes、Prometheus、containerd、Harbor等众多开源项目。 什么是云原生? 云原生是在云计算环境中构建、部署和管理现代应用程序的方法,云原生的宗旨是基于云原生基金会的项目可以帮助企业在公有云、私有云和混合云上构建和运行可扩展的应用,主要关注的是如何构建和交付应用,而不仅仅是在哪里部署应用 什么是云原生应用程序? 云原生应用程序是由多个称为微服务的相互依赖的小型服务组成的业务程序,相比较于传统的单体应用,开发人员将业务程序按照功能拆分为若干个更小的微服务,这使得云原生应用程序的开发和迭代更加敏捷,因为这些微服务可以独立部署、运行和工作,并且只需极少的计算资源即可运行。 什么是云计算? 云计算是指托管在专有数据中心并提供给企业客户、个人等按量付费的基础设施,使用云计算后企业前期不需要购买大量的硬件服务器、网络设备、存储设备及安全设备等,后期也不需要维护基础设施,企业可以使用云提供商提供的按需付费的服务,如云主机、RDS、ES、注册中心等。 四.安装Ubuntu系统 1.桥接模式安装Ubuntu系统 2.开启Ubuntu虚拟机 3.登录后进行优化 sudo -i #切换root用户 用户密码 修改sshd_config vim /etc/ssh/sshd_config 修改PermitRootLogin yes systemctl restart sshd 修改root密码 passwd root 以上实现ssh登录 修改时区 timedatectl set-timezone Asia/Shanghai timedatectl -a timedatectl show 设置域名 hostnamectl hostname DOMAIN bash 配置网络 network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no dhcp6: no addresses: [172.

深挖Redis分布式缓存:你还在为缓存架构感到困惑吗?灵办AI为你揭开文献背后的秘密!

文章目录 1 灵办AI插件2 翻译~外文文献3 解释~文献标题分析4 文档解析~文献总结5 搜索~全网搜索总结6 总体评价~文献代码分析总结 本文将引用 Research and Application of Distributed Cache Based on Redis [1] 外文文献解读为案例进行剥削,进而提高对 Redis的分布式缓存技术的认知,教你如何使用灵办AI插件来逐层剥削,从而揭开文献背后的秘密! 1 灵办AI插件 今天我要给大家分享一款超实用的神器——灵办AI!和那些专攻表格处理的 Chat Excel,或者生成酷炫图片的 Midjourney 不一样,灵办AI可是个全能小帮手。它不仅会智能聊天,还能帮你翻译网页、总结阅读、分析文档,甚至在各种场景下帮你搞定写作!是不是很不错?功能多到让人忍不住想要马上试一试! 体验链接:https://ilingban.com/browser_extension/?from=ysy 安装灵办的方式超级简单,目前它支持网页版、插件版和小程序版,云端还能无缝同步信息。日常工作习惯使用使用Edge浏览器,下方是安装方式,点击获取即可安装! 更妙的是,灵办AI就像个小精灵,安安静静地待在桌面的一角,随时等你召唤,轻轻一点就能用!功能丰富,用起来效果还挺不错,起初还会定制化给你设定模型角色,让AI生成的内容更加符合自身的职业定位,让内容显得更加专业,更符合我们的需求。 2 翻译~外文文献 对于想要解读外文文献,往往会因为英语不熟悉或者有些词语不记得了等问题,让阅读外文文献举步维艰。或者将内容copy拿去翻译,步骤较为繁琐,也有一些翻译插件,翻译出来的文章,效果很不理想。 但是现在需要翻译的文档,有很多快捷的方式,比如将文档拖进灵办,或者点击翻译的小组件,或者选中想要翻译的文字,再点击翻译功能,分分钟帮你搞定!灵办AI的翻译引擎是由顶尖大模型加持,翻译效果非常的精准地道,简直就是你的小翻译精灵,帮你轻松应对各种场合! 不过也遇到了点击翻译功能,只翻译了菜单和部分内容,应该是对一些有特殊设计的网站,内容抓取方式不同,导致有些内容没抓取到的原因,有待完善哦~ 不过呢~对于无法正确抓取的内容或者不需要全文翻译的场景,可以使用选中的方式进行抓取进行翻译,我比较喜欢这一种翻译的方式,既简单又高效,还能提高英语阅读能力,或者使用总结、搜索、解释、无格式复制等功能。 第一句翻译效果:作为传统的关系型数据库,MySQL提供完整的ACID操作,支持丰富的数据类型,强大的关联查询,where语句等,可以方便地建立查询索引,执行内部连接、外部连接、求和、排序、分组等复杂操作,并支持存储过程等功能。 3 解释~文献标题分析 当遇到一段不太明白的内容,选中它后,灵办马上会给我提供清晰的解释(还会使用比喻等手法,将内容简单化,易于理解)和简洁的总结,以及扩展内容,非常的贴心。 我对文献的标题进行选中,接着解释的内容也相当人性化,从标题就大致了解整篇文献的大致内容,给接下来的阅读文献提供了有力的知识支持。 4 文档解析~文献总结 对于想下载文献的uu们,可以看左下角有个[PDF],点击下载即可。接着可以将PDF上传给灵办,让它帮你总结文献的大致内容。 总结文献的效果: 总结 本文研究了基于Redis的分布式缓存系统及其在提升数据库性能方面的应用。文章首先指出了传统关系型数据库(如MySQL)在面临大规模数据访问时,磁盘I/O成为性能瓶颈的问题。特别是在复杂的电信业务场景中,高频次的数据访问会直接导致数据库负载增加和效率降低。为解决这一问题,文章提出了一种基于Redis的分布式缓存系统方案。 要点 问题背景: MySQL等传统关系型数据库在处理大规模数据和高并发访问时存在性能瓶颈。电信业务中的高频数据访问(如产品实例、销售产品实例、规格、账户等)直接导致数据库负载高和效率低。 解决方案: 提出了基于Redis的分布式缓存系统,旨在解决大规模和高并发数据库访问导致的磁盘I/O性能瓶颈。Redis是一个内存基础的、持久化、高性能、高可靠性和水平可扩展的分布式NoSQL内存数据库产品。 Redis特点: 支持子数据库和子表的内存管理。提供灾难恢、监控、迁移等能力。支持API透明访问。 系统优势: 低延迟、高性能、高可用性和高可扩展性。支持复杂业务对象的表示。 实验系统数据: 提供了实验系统中不同缓存实例的峰值、均值、占用空间等具体数据,展示了Redis在不同业务场景下的应用效果。 结论: 文章提出的基于Redis的分布式缓存系统是一个能够有效提升数据库性能的解决方案。该系统具有低延迟、高性能、高可用性和高可扩展性的特点,适用于复杂业务场景。 版权信息: 文章以开放获取形式发布,遵循Creative Commons Attribution License (CC BY 4.0),允许在正确引用原文的情况下自由使用、分发和再生产。 你可能还想问我:

每日一题-贪心算法

122. 买卖股票的最佳时机 II - 力扣(LeetCode) 55. 跳跃游戏 - 力扣(LeetCode) 这个题目一开始肯定是会懵,就比如说一开始先跳几步,之后再怎么跳,其实我们就可以用最大范围来算就行了,用局部最优推出全局最优 class Solution { public boolean canJump(int[] nums) { if(nums.length == 1){ return true; } int cun = 0; for(int i = 0;i <= cun;i++){ cun = Math.max(cun,i+nums[i]); if(cun>=nums.length-1){ return true; } } return false; } } 45. 跳跃游戏 II - 力扣(LeetCode) 这道题目比上一道难不少,主要就是你需要计算那个最少跳跃数, class Solution { public int jump(int[] nums) { int result = 0; // 当前覆盖的最远距离下标 int end = 0; // 下一步覆盖的最远距离下标 int temp = 0; for (int i = 0; i <= end && end < nums.

Linux---DHCP和FTP(原理+实操)

文章目录 DHCP和FTP(原理+实操)DHCP使用DHCP(自动分配IP)的好处分配方式租约过程第一次重新登录更新租约DHCP服务可分配的地址信息主要包括 DHCP安装和配置实验目的实验环境:网络环境:系统环境:具体操作实操注意一、将三台虚拟机网络连为vmnat2二、配置ens33三、重启网络四、查看网络信息五、配置yum源六、关闭防火墙、核心防护七、安装dhcp有关软件包八、编辑 dchp全局配置文件,设置好对应的网络池九、重启网卡,启用dhcp服务十、centos客户端配置ens33十一、关闭防火墙、核心防护十二、刷新网卡,通过DHCP获取IP十三、win 10 客户端关闭防火墙十四、ipv4改为自动获得IP地址和DNS服务器十五、禁用网络再启动十六、进入cmd,查询网络十七、完成 FTPftp的数据连接模式vsftpd的安装和配置实验环境:实操注意一、vsftpd安装二、备份vsftpd的配置文件三、vsftpd初始化全局配置四、让匿名用户拥有访问本机和各种权限五、重启vsftpd服务,关闭安全防护六、给匿名用户的默认根目录权限,做测试文件七、在Windows系统打开开始菜单,输入cmd 命令打开命令提示符,连接ftp 192.168.52.2八、测试九、创建用户,免交互设置密码十、配置本地用户验证访问ftp限制十一、在Windows系统打开开始菜单,输入cmd 命令打开命令提示符十二、添加、切换目录的限制配置 :十三、重启ftp服务十四、在Windows系统打开开始菜单,输入cmd 命令打开命令提示符十五、配置黑名单/白名单黑名单测试白名单测试 十六、windows输入文件同步:十七、完成 DHCP和FTP(原理+实操) DHCP 使用DHCP(自动分配IP)的好处 减少管理员的工作量避免输入错误的可能避免IP地址冲突当更改IP地址段时,不需要重新配置每个用户的IP地址提高了IP地址的利用率方便客户端的配置 分配方式 自动分配:分配到一个IP地址后永久使用(打印机)手动分配:由DHCP服务器管理员专门指定IP地址动态分配:使用完后释放该IP,供其它客户机使用(地址池) 租约过程 客户机从DHCP服务器获得IP地址的过程 第一次 客户端在网络中搜索服务器—discover服务器向客户端响应服务—offer客户端向目标服务器发出服务请求—request服务器向客户端提供服务—ack 重新登录 客户端向目标服务器发出服务请求—request 服务器向客户端提供服务—ack 更新租约 当DHCP服务器向客户机出租的IP地址租期达到50%时就需要更新租约客户机直接向提供租约的服务器发送DHCP Request包要求更新现有的地址租约 DHCP服务 为大量客户机自动分配地址,提供集中管理减轻管理和维护成本、提高网络配置效率 可分配的地址信息主要包括 网卡的IP地址、子网掩码对应的网络地址、广播地址默认网关地址DNS服务器地址 DHCP安装和配置 实验目的 在单位时,运用DHCP协议设置地址池,让公司员工的主机都能自动识别,并且分发范围内的IP地址 实验环境: 3台机器 centos 7-1 DHCP 服务端 192.168.65.2(为了实验方便,将此IP定义为该网段的网关) centos 7-2 DHCP 客户端 自动分配 windows 10 DHCP 客户端 自动分配 网络环境: ① Vmnet2(仅主机模式) ② vmware workstation 的虚拟网络编辑器中的DHCP功能必须关闭 ③ 确定好Vmnet2 仅主机模式的IP地址段是多少4 注意 DHCP服务端的网卡信息的配置(GATEWAY 不要写) 系统环境: ① 先安装好DHCP服务,再行修改网络配置(nat-》Vmnet2)

【数据结构】二叉树(二)遍历

上篇已经了解对二叉树有了大概了解,本篇学习二叉树的前序、中序、后序及层序遍历的递归与非递归共7种遍历方法,快收藏吧~ 目录 1、前序遍历 递归方式: 迭代方式: 2、中序遍历 递归方式: 迭代方式: 3、后序遍历: 递归方式 迭代方式: 4、层序遍历 递归方式 迭代方式: 二叉树的前序、中序、后序及层序遍历的递归与非递归遍历方法 遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结 点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如:打印节点内容、节点内容加 1)。 遍历是二叉树上最重要的操作之一,是二叉树上进行其它运算之基础。 二叉树的遍历方法有以下四种 : 先序遍历(根左右) 首先访问根结点,然后递归地遍历左子树,最后遍历右子树。例如对于二叉树:先序遍历的结果为:1->2->4->8->9->5->10->11->3->6->7。 中序遍历(左根右) 首先遍历左子树,然后访问根结点,最后遍历右子树。例如对于二叉树:中序遍历的结果为:8->4->9->2->10->5->11->1->6->3->7。 后序遍历(左右根) 首先遍历左子树,然后遍历右子树,最后访问根结点。例如对于二叉树:后序遍历的结果为:8->9->4->10->11->5->2->6->7->3->1。 层序遍历 自上而下,自左至右逐层访问树的结点的过程就是层序遍历。 它是按广度优先搜索的策略,从根结点出发,依次访问每一层上的节点。这种策略在实际应用中使用较多,如在计算机图形学中用于渲染场景图等。例如对于二叉树:层次遍历的结果为:1->2->3->4->5->6->7->8->9->10->11 下面讲解代码,前序遍历、中序遍历和后序遍历的简单递归方法不附图讲解,主要解释它们的迭代方式及层序遍历 1、前序遍历 递归方式: 定义 preorder(root) 表示当前遍历到 root 节点的答案。按照定义,我们只要首先将 root 节点的值加入答案,然后递归调用 preorder(root.left) 来遍历 root 节点的左子树,最后递归调用 preorder(root.right) 来遍历 root 节点的右子树即可,递归终止的条件为碰到空节点。 class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); preorder(root, res); return res; } public void preorder(TreeNode root, List<Integer> res) { if (root == null) { return; } res.

通过域名和HTTPS上线MSF

使用受信任证书的Meterpreter载荷 现在大多数安全解决方案还会通过分析进出目标机器的流量来进行网络入侵检测。在这种情况下,很可能即使使用编码器绕过了防病毒软件,但有效载荷也会在尝试连接到我们的侦听器时被捕获和拦截。 # 准备工作 首先需要准备一台云主机,和一个域名。并使用 Let's Encrypt 获取SSL证书。 # 怎么做 首先在域名管理商设置DNS域名指向(这里不做演示) tips:使用国内云主机/域名服务商,需要备案才能解析域名,可以使用香港或者国外云主机和域名服务商 1、在云服务器商安装letsencrypt apt install letsencrypt -y 2、接下来,生成证书,请运行letsencrypt 命令,并按照说明进行操作 letsencrypt certonly --manual -d gpt5.onl root@iZj6ccx9c36agbjm7ekf9mZ:~# letsencrypt certonly --manual -d gpt5.onl Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): gpt5@gpt5.onl //输入邮箱 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.

数据结构之AVL树

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 二叉搜索树的学习 我们在这篇文章中学习了二叉搜索树,知道了当插入的元素序列趋于有序时,将会导致 其效率变得十分底下。 今天,我们就来学习AVL树。 目录 AVL树的相关概念 AVL树的相关操作 AVL树的插入 右旋 左旋 左右双旋 右左双旋 证明一棵二叉树是AVL树 AVL树的性能分析 AVL树的相关概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过 1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。 一棵AVL树要么是空树,要么是具有以下性质的二叉搜索树: 它的左右子树都是AVL树 左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)。如下图所示: 如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有n个结点,其高度可保持在 log n,搜索时间复杂度O(log n)。 因此AVL树也叫平衡的二叉搜索树。 平衡因子的概念:一棵AVL树的右子树高度 减去 左子树的高度之差的结果。 AVL树的相关操作 首先,得定义一个树节点: class TreeNode { public int val; // 根结点的右子树高度-左子树的高度 public int balanceFactor; // 平衡因子 public TreeNode parent; // 父亲 public TreeNode left; // 左子树 public TreeNode right; // 右子树 public TreeNode(int val) { this.val = val; } } public TreeNode root; 注意:

Linux速成入门教程——从零基础开始快速入门,一文了解Linux

1.1 什么是Linux? Linux的起源与历史 Linux是一个开源的、基于UNIX操作系统的操作系统内核,由芬兰大学生林纳斯·托瓦兹(Linus Torvalds)于1991年首次发布。最初的Linux只是一个小型项目,旨在创建一个免费的UNIX替代品,但随着开源社区的广泛支持和参与,Linux逐渐发展成为当今最广泛使用的操作系统之一。 UNIX操作系统诞生于1969年,由贝尔实验室的肯·汤普逊(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)等人开发。UNIX因其稳定性、灵活性和多任务处理能力而受到广泛欢迎,但它的源代码属于专有软件,使用受到严格限制。相较之下,Linux完全免费,任何人都可以查看、修改和分发其代码,这使得Linux成为开源软件的象征。 开源软件的定义与重要性 开源软件是指其源代码对公众开放,允许任何人查看、修改和分发的软件。Linux之所以成功,很大程度上归功于开源模型。开源软件的几个关键特性包括: 自由使用与分发:用户可以免费获取软件,并根据需要自由地修改和分发。社区驱动的开发:开源软件通常由全球各地的开发者共同开发与维护,这使得软件能够快速迭代和修复漏洞。透明性与安全性:由于源代码公开,用户可以审查代码,确保其安全性和符合预期功能。 Linux内核就是这样一个开源项目,吸引了成千上万的开发者贡献代码,使其得以快速发展和改进。如今,Linux被广泛应用于服务器、桌面电脑、移动设备、嵌入式系统等多种环境中。 常见的Linux发行版简介 Linux并不是单一的操作系统,而是由内核和众多用户空间应用程序构成的一个“家族”,这些家族成员被称为“发行版”(Distributions,简称“发行版”)。以下是几种常见的Linux发行版: Ubuntu:基于Debian的发行版,是最流行的桌面Linux发行版之一。Ubuntu以其用户友好性和丰富的社区资源而闻名,非常适合Linux新手。 CentOS/RHEL:CentOS(Community ENTerprise Operating System)是Red Hat Enterprise Linux(RHEL)的社区版,广泛用于服务器和企业环境。它以稳定性和长生命周期著称。 Fedora:由Red Hat赞助的社区版发行版,通常被视为RHEL的新技术测试平台,提供最新的Linux技术和软件包。 Debian:一个历史悠久的发行版,以其稳定性和包管理系统(APT)闻名。Debian是许多其他发行版的基础,包括Ubuntu。 Arch Linux:一个滚动发布的发行版,注重简洁性和用户控制。它面向高级用户,提供最新的软件包,但需要用户更多的配置和管理。 1.2 Linux的安装 如何选择合适的Linux发行版 在安装Linux之前,首先需要选择一个适合自己需求的发行版。不同的发行版适用于不同的使用场景,因此选择合适的发行版至关重要。以下是一些选择依据: 桌面环境:如果你是桌面用户,Ubuntu或Linux Mint是很好的选择。它们都具有用户友好的界面,预装了许多常用的应用程序,并且社区支持丰富。 服务器环境:对于服务器应用,CentOS、RHEL或Debian是常见选择。它们提供长期支持和高稳定性,适合运行关键任务。 开发与测试:如果你需要一个用于开发或测试的系统,Fedora或Arch Linux可能更适合。它们提供最新的软件包和技术,让你体验到最前沿的Linux创新。 硬件要求:在旧电脑或资源有限的环境下,选择轻量级的发行版如Lubuntu或Xubuntu,这些发行版优化了系统资源的使用,适合配置较低的机器。 如何获取Linux发行版信息 Linux发行版信息大全 Distrowatch(http://distrowatch.com):这是一个知名的Linux发行版信息网站,提供了关于各种Linux发行版的最新新闻、下载链接、评分、评论和截图等信息。它是了解Linux发行版生态系统和选择适合自己需求的发行版的重要资源。具体Linux发行版官网 Ubuntu(http://www.ubuntu.com):Ubuntu是最流行的开源操作系统之一,其官网提供了最新版本的下载、文档、教程、社区支持和商业服务等。CentOS(https://www.centos.org):CentOS是一个基于Red Hat Enterprise Linux(RHEL)源代码构建的社区企业级操作系统,其官网提供了下载、文档、镜像和社区支持等。Fedora(https://getfedora.org):Fedora是另一个由Red Hat赞助的开源操作系统,注重创新和技术前沿。其官网提供了下载、文档、社区和新闻等信息。Debian(https://www.debian.org):Debian是社区驱动的自由操作系统,以其稳定性和广泛的软件包选择而闻名。其官网提供了下载、文档、新闻和社区支持等。Linux内核相关网站 Linux内核官网(https://www.kernel.org):这是Linux内核的官方网站,提供了内核的源代码、文档、新闻和发布信息等。对于想要深入了解Linux内核或参与内核开发的用户来说,这是一个重要的资源。其他Linux相关网站 Linux Tools快速教程(http://linuxtools-rst.readthedocs.org):这是一个提供Linux工具快速教程的网站,对于想要学习Linux命令行工具和实用程序的用户来说非常有用。VirtualBox(https://www.virtualbox.org)和VMware(http://www.vmware.com):这两个网站提供了虚拟化软件的下载和文档,允许用户在虚拟机中运行Linux系统。 安装Linux前的硬件要求与准备工作 在开始安装Linux之前,确保你的硬件满足以下基本要求: 处理器:大多数现代的Linux发行版支持x86_64架构,因此任何现代处理器都应该足够。内存:建议至少1GB RAM用于轻量级发行版,如Lubuntu;对于完整的桌面环境,如Ubuntu,建议至少2GB RAM。硬盘空间:典型的Linux安装至少需要10GB的硬盘空间,但为确保有足够的空间安装应用程序和存储数据,建议至少20GB。网络连接:大多数安装过程需要网络连接以下载软件包和更新,因此有稳定的网络连接是必要的。 在硬件准备就绪后,还需要准备一个Linux安装介质。你可以选择光盘、USB驱动器或虚拟机安装。以下是详细的准备步骤: 下载ISO镜像文件:从发行版的官方网站下载最新的ISO文件,这是系统的安装镜像。 创建启动盘:使用工具如Rufus(Windows上)或dd命令(Linux上)将ISO文件写入USB驱动器,制作启动盘。 备份数据:安装Linux将修改你的硬盘分区,可能会导致数据丢失。确保备份所有重要数据。 使用光盘、USB或者虚拟机安装Linux的详细步骤 光盘或USB安装 将启动介质(光盘或USB)插入计算机并重启。进入BIOS/UEFI设置,选择从光盘或USB启动。在启动菜单中选择“安装Linux”或“试用Linux”(试用模式可以在不安装的情况下体验Linux)。选择语言、键盘布局和时区。配置硬盘分区:你可以选择“全盘安装”,让系统自动配置,也可以手动分区。创建用户账户,设置密码。点击“安装”按钮,等待安装完成。之后,系统会提示重启并进入新安装的Linux系统。 虚拟机安装 下载并安装虚拟机软件,如VirtualBox或VMware。创建一个新的虚拟机,选择Linux作为操作系统类型,分配内存和硬盘空间。在虚拟机设置中,选择刚下载的ISO镜像文件作为光驱启动盘。启动虚拟机,跟随屏幕上的安装指导完成安装。虚拟机的安装过程与物理机类似,但所有操作都在虚拟环境中进行,不会影响主机系统。 安装后的初始配置 安装完成后,首次启动Linux系统时,通常需要进行一些初始配置: 用户创建:大多数发行版在安装过程中已创建了初始用户,但你可能需要创建其他用户账户来分配不同权限。 语言与键盘布局设置:如果在安装过程中未正确配置,可以在系统设置中重新配置。 时区与时间同步:检查系统的时区设置,确保系统时间准确。如果需要,可以配置NTP服务进行自动时间同步。 系统更新:建议首次启动后立即更新系统。使用包管理工具(如apt、yum)检查并安装所有可用更新,以确保系统安全性和稳定性。 本次演示直接Linux操作使用HoRain服务器,比较便宜、稳定:HoRain.nethttps://neo.horain.net/aff/MLCDRIEH

MySQL 常用 SQL 语句大全

1. 基本查询 查询所有记录和字段 SELECT * FROM table_name; 查询特定字段 SELECT column1, column2 FROM table_name; 查询并限制结果 SELECT column1, column2 FROM table_name LIMIT 10; 条件查询 SELECT column1, column2 FROM table_name WHERE condition; 模糊匹配 SELECT column1 FROM table_name WHERE column2 LIKE 'pattern%'; 匹配多个值 SELECT column1 FROM table_name WHERE column2 IN (value1, value2); 不匹配某些值 SELECT column1 FROM table_name WHERE column2 NOT IN (value1, value2); 2. 数据插入 插入单条记录 INSERT INTO table_name (column1, column2) VALUES (value1, value2); 插入多条记录

SpringBoot-03-整合Redis

文章目录 1.创建S2.配置yml文件3.创建RedisConfig4.编写test类 我是小周,一个怀揣梦想的年轻人,希望我的文章对你的学习能够有启发 用Java来操作Redis。 Jedis和Lettuce:这两个主要是提供了Redis命令对应的API,方便我们操作Redis,而SpringDataRedis又对这两种做了抽象和封装。在SpringBoot项目中使用SpringDataRedis来操作Redis,本质还是Jedis和Lettuce。 SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做 SpringDataRedis,官网地址:https://spring.io/projects/spring-data-redis 提供了对不同Redis客户端的整合(Lettuce和Jedis) 提供了RedisTemplate统一API来操作Redis 支持Redis的发布订阅模型 支持Redis哨兵和Redis集群 支持基于Lettuce的响应式编程 支持基于JDK.JSON.字符串.Spring对象的数据序列化及反序列化 支持基于Redis的JDKCollection实现 SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中 1.创建S pringBoot项目 选择SpringDataRedis的maven坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.配置yml文件 spring: redis: host: 192.168.150.101 port: 6379 password: 123321 lettuce: pool: max-active: 8 #最大连接 max-idle: 8 #最大空闲连接 min-idle: 0 #最小空闲连接 max-wait: 100ms #连接等待时间 3.创建RedisConfig /** * Redis配置类 */ @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 创建RedisTemplate对象 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); // 设置连接工厂 redisTemplate.

【C++】一文掌握C++的四种类型转换 --- static_cast、reinterpret_cast、const_cast、dynamic_cast

当面对两个选择时,抛硬币总能奏效。 并不是因为它总能给出对的答案, 而是在你把它抛在空中的那一秒里。 你突然就知道,你希望的结果是什么了。 --- 曾小贤 《爱情公寓》--- 一文掌握C++的四种类型转换 1 C++中的类型2 类型转换3 四种类型转换3.1 static_cast 静态转换3.2 reinterpret_cast 重新解释3.3 const_cast 去常转换3.4 dynamic_cast 动态转换3.5 RTTI(了解) 4 使用建议 1 C++中的类型 C++中类型分为两种:内置类型和自定义类型。内置类型中分为算术类型和空类型。其中算术类型包含字符,整型,布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时使用空类型作为返回类型。 类型含义尺寸bool布尔类型只有一位 1表示True 0表示False 有数据表示为True,0表示为Falsechar字符8 位wchar_t宽字符16位char16_tUnicode字符16位char32_tUnicode字符32位short短整型C++要求short类型不少于16位 ,一般为16位int整型C++要求int类型至少与short类型一样长,一般为32位long长整型C++要求long至少为32位,且至少与int一样长 , 一般为32位long long长整型C++要求long long至少为64位,且至少与long一样长,一般为64位float单精度浮点型C++要求至少为32位。后缀F or fdouble双精度浮点型C++要求至少为48位,且不少于floatlong double扩展精度浮点型C++要求为80,96,128位,至少和double类型位数一样多 对于这些内置类型,在使用时将一个类型赋值给另一个类型或者是在进行运算时,如果两个类型有关联就会发生隐式类型转换,这种转换不需要程序员介入,是自动执行的,这种转换是有可能造成数据丢失的! 2 类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。 隐式类型转化:编译器在编译阶段自动进行,能转就转(有关联才能转),不能转就编译失败。整型之间,浮点数和整型之间显式类型转化(强制类型转换):需要用户自己处理,各类指针是可以显式类型转换的! 在C++中同样支持C语言风格的类型转换,并且新增了内置类型向自定义类型的转换和自定义类型向内置类型的转换! 我们来写一个类来看看: class A { public: //explicit A(int a1) 这样不支持隐式类型转换! A(int a1) :_a1(a1) {} private: int _a1; int _a2; }; int main() { A aa1 = 1; return 0; } 像这样的单参数构造函数的类支持隐式类型转换!多参数的构造函数就需要使用{ } 来进行列表初始化,才可以做到类型转换!

RabbitMQ的消息确认机制Ack Mode

一、RabbitMQ的消息确认机制 RabbitMQ 提供了两种消息确认机制(Ack Mode):自动确认(auto-ack)和手动确认(manual ack)。 1.自动确认模式: 一旦消息被发送到消费者,RabbitMQ 认为这条消息已经被成功消费,会立即从内存中移除该消息。如果消费者在处理过程中崩溃或断开连接,那么这些消息将丢失。在自动确认模式下,RabbitMQ 通常不会等待当前消息被处理完毕再发送下一条消息给同一个消费者。 2.手动确认模式: 消费者需要告诉 RabbitMQ 某条消息已经被成功处理,这样 RabbitMQ 才会将其从内存中移除。如果消费者没有发送确认信号,RabbitMQ 会保留该消息,直到收到确认或者发生特定的超时情况。在手动确认模式下,RabbitMQ 会等待当前消息被处理完毕再发送下一条消息给同一个消费者。 二、使用@RabbitListener时的消息确认模式 在使用@RabbitListener监听消息时,通过设置ackMode属性即可设置消费者的消息确认模式。 ackMode有三个可选值:NONE、MANUAL、AUTO,来源于枚举AcknowledgeMode。 ackMode ="NONE",此时为自动确认模式。ackMode ="MANUAL",此时为手动确认模式,需要人为调用channel.basicAck方法表示确认消息,调用channel.basicNack或channel.basicReject方法表示消息未被确认。ackMode ="AUTO",此时为手动确认模式,由spring-rabbit依据消息处理中是否抛出异常,从而自动发送ack(无异常)或nack(异常)到rabbitmq。当不指定ackMode时,效果同ackMode="AUTO"。 @RabbitListener(queues = "testQueue", ackMode = "MANUAL") @RabbitHandler public void process(Map input, Channel channel, Message message){ long deliveryTag = message.getMessageProperties().getDeliveryTag(); try { log.info("重试中"); int a = 1/0; //手动ack 第二个参数为false表示仅确认当前消息,为true表示确认之前所有的消息 channel.basicAck(deliveryTag, false); }catch (Exception e) { //手动nack 告诉rabbitmq该消息消费失败 第三个参数:如果被拒绝的消息应该被重新请求,而不是被丢弃或变成死信,则为true try { channel.basicNack(deliveryTag, false, true); } catch (IOException ex) { ex.

OpenHarmony UI动画-recyclerview_animators

简介 带有添加删除动画效果以及整体动画效果的list组件库 下载安装 ohpm install @ohos/recyclerview-animators OpenHarmony ohpm 环境配置等更多内容,请参考如何安装OpenHarmony ohpm 包 使用说明 引入组件库 import { RecyclerView } from "@ohos/recyclerview-animators" 在代码中使用 @State controller: RecyclerView.Controller = new RecyclerView.Controller() private listDatas = ["A","B","C"] aboutToAppear() { this.controller.setAdapterAnimation(RecyclerView.AdapterAnimationType.AlphaIn) // 设置列表整体效果类型 this.controller.setFirstOnly(false) // 设置是否在item重复出现时显示动画效果 this.controller.setDuration(500) // 设置动画时长 } build() { Column() { RecyclerView({ array: this.listDatas, // 数据源 controller: this.controller, // 控制器 child: (itemData) => { this.SpecificChild(itemData) // 子布局 } }) } } @Builder SpecificChild(itemData) { Column() { Image($r("

电脑如何录屏?三款电脑录屏工具分享

电脑如何录屏?作为一个经常需要录制电脑屏幕大职场人,不是为了制作教程、记录会议,就是偶尔想自己做个游戏解说视频。市面上的录屏软件琳琅满目,经过一番尝试和比较,我选出了三款我个人认为表现不错的软件,和大家分享一下操作感受吧。 1.福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/ 这款软件给我的第一印象是界面简洁,操作直观。 它提供了全屏录制、区域录制、摄像头录制等多种模式,满足了我不同的录制需求。录制过程中,我可以自定义录制区域,调整帧率和画质,确保输出的视频既清晰又流畅。 最让我满意的是,福昕录屏大师的输出格式支持多种选择,包括常见的MP4、AVI等,这对于需要上传到不同平台的我来说非常方便。另外,它还支持后期编辑功能,虽然我不是专业剪辑师,但简单的剪切、添加文字和注释等功能已经足够我用了。 2.转转大师录屏 网址:https://screencap.55.la 这款软件的特色在于它强大的视频编辑功能。 录制完成后,我可以直接在软件内进行剪辑,添加转场效果、背景音乐等,让我的视频看起来更加专业。而且,转转大师录屏的录制质量也很高,支持高清录制,对于追求画质的我来说是个加分项。 不过,这款软件在录制过程中对电脑的性能要求相对较高,如果电脑配置不是特别好,可能会出现轻微的卡顿现象。 3.爱拍录屏 网址:https://www.aipai.com/XL/fx-lp/lpds.html 爱拍录屏给我的感觉是轻量级且易于上手。它同样提供了丰富的录制选项,包括声音来源选择、快捷键设置等,让我在录制时更加得心应手。 值得一提的是,爱拍录屏的云存储功能,让我可以将录制的视频直接上传到云端,节省了本地存储空间,这对于经常需要处理大量视频文件的我来说非常实用。不过,爱拍录屏在视频编辑方面相对简单,如果需要进行复杂的后期处理,可能还需要借助其他软件。 综合比较这三款录屏软件,我认为它们各有千秋。福昕录屏大师在操作简便性和格式支持上表现突出;转转大师录屏则在视频编辑功能上更为强大;爱拍录屏则以其轻量级和云存储功能赢得了我的青睐。对于不同需求的用户来说,这三款软件都有可能成为你的录屏神器。我个人更倾向于使用福昕录屏大师,因为它在满足我基本需求的同时,还提供了足够的灵活性和稳定性。

ES高级查询Query DSL查询详解、term术语级别查询、全文检索、highlight高亮

文章目录 ES高级查询Query DSLmatch_all返回源数据_source返回指定条数size分页查询from&size指定字段排序sort 术语级别查询term query术语查询terms query多术语查询range query范围查询exists queryids queryprefix query前缀查询wildcard query通配符查询fuzzy query模糊查询 全文检索match query匹配查询multi_match query 多字段查询match_phrase query短语查询query_string querysimple_query_string bool query布尔查询highlight高亮基本使用自定义高亮标签多字段高亮 ES高级查询Query DSL ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language 领域专用语言) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 官网 标准格式如下 GET /索引名/_doc/_search {JOSN请求体} # 也可以省略_doc 简写成下面这种方式 GET /索引名//_search {JOSN请求体} 案例 # 无条件查询,默认返回10条数据 GET /sys_user/_search { "query": { "match_all": {} } } 案例数据生成,接下来的案例很多都是操作改索引 # 删除现有索引 DELETE /sys_user # 重新创建索引 指定ik分词器 PUT /sys_user { "settings" : { "index" : { "

Linux 用户管理和权限分配

一、Linux 用户分类 超级管理员、普通用户、傀儡用户 1,root #皇帝用户,定制规则的用户,系统高级管理员;【0】 2,普通用户 #老百姓,官员;有特定的权限,权限是root授予的;【大于1000】 3,傀儡(虚拟)用户 #没有家目录,不能登录系统;sshd; 【0-999】 二、Linux 用户相关的配置文件 (一)每种类型用户信息的存储文件passwd [root@oldboy home]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin 解释说明:root:x:0:0:root:/root:/bin/bash root #用户名 x #以前6的时候,这个位置是密码,后来密码换到别的文件中存储了,这里就换成了x,占位符号; 0 #uid,用户id 0 #gid,用户组id root #用户的描述信息,注释、备注 /root #用户的家目录; /bin/bash #用户使用的解释器; #/bin/bash:用户能够登录操作系统 #/sbin/nologin:用户不能登录操作系统 (二)Linux release 6 以后密码存储文件 [root@root home]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@root home]# 密码存储文件:shadow [root@root home]# cat /etc/shadow root:$6$RLUDoFchgqxGoD8v$TtDAUzx3P8.e7t/puZJt47bOq6te6bIRvq8szaACh58E4uBlgcdwklNe/C2vYwLILY0J4V4WvTXsXLA9inpGZ/::0:99999:7::: bin:*:18353:0:99999:7::: daemon:*:18353:0:99999:7::: adm:*:18353:0:99999:7::: lp:*:18353:0:99999:7::: sync:*:18353:0:99999:7::: shutdown:*:18353:0:99999:7: 密码文件内容解释说明:bin:*:18353:0:99999:7::: bin: #用户名; *: #机密后的密码; ======================================== 18353: #最近修改密码的时间戳; 0: #禁止修改密码的天数; 99999: #用户必须修改密码的天数; 7: #修改密码提前警告的天数; : #密码过期后,彻底禁用用户的天数; : #失效时间; (三)Linux 用户组的存储文件 [root@root home]# cat /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: mem:x:8: kmem:x:9: (四)Linux 用户组的密码存储文件 [root@root home]# cat /etc/gshadow root::: bin::: daemon::: sys::: adm::: tty::: disk::: lp::: mem::: kmem::: wheel::: cdrom::: mail:::postfix man::: dialout::: floppy::: (五)Linux 用户备用目录(重点) 每一次创建新用户,系统会直接把/etc/skel/目录下的所有文件拷贝到新用户的家目录下。

电动汽车和混动汽车DC-DC转换器的创新设计与测试方法

汽车 DC-DC 转换器市场规模将达到187亿美元,年复合增长率为10%。 DC-DC 转换器是汽车的重要组成部分,它可以通过电压转换为各种车载系统供电,例如日益复杂的车载信息娱乐系统、使用驾驶辅助系统(ADAS)实现的增强安全功能等。 包括纯电动汽车和混合动力汽车(HEV)在内的电动汽车(EV)的日益普及也带动了整个市场对 DC-DC 转换器的需求。 下面,本文将介绍一些有助于开发更高效 DC-DC 转换器的行业趋势和技术。 混合动力汽车和电动汽车有多种架构变化。图 1和图2显示的是这些架构的简化框图。大容量电池提供的高压(HV)总线可驱动强混合动力或并联混合动力以及纯电动汽车的动力总成系统。 图 1. 强混合动力/全混合动力汽车的简化框图 图 2. 轻混合动力汽车的简化框图 DC-DC 转换器是这两种架构中的关键零部件,它将较高的总线电压(轻混合动力汽车为48 V;电动汽车/混合动力汽车为数百伏)转换为传统的12 V电源总线电压,以便为大多数电气负载供电。本文将重点探讨这种 DC-DC 转换器的模拟、设计、调试、验证和制造测试。 行业趋势如何影响电动汽车设计以及电动汽车 DC-DC 转换器测试 在整个 DC-DC 转换器开发周期中,设计和测试环节都面临着极大的降本增效压力。大多数 DC-DC 转换器采用基于水冷结构的硅基(Si)功率转换器设计。在设计和测试过程中需要使用蓄水池、泵和软管来冷却 DC-DC 转换器,这给设计和测试工程师转嫁了额外的冷却成本。 因此,为了地减少液冷模块的数量,制造商会将多个电源转换器应用集成到一个模块中(如 DC-DC 转换器和板载充电器等)。 另外,设计师已开始采用基于宽禁带(WBG)器件的新型功率半导体技术。与硅相比,碳化硅(SiC)和氮化镓(GaN)这两种技术具有一些显著的优势。 功率效率 WBG 器件的开关速度比硅器件快得多,因此能够地减少电源转换过程中的功率损耗(开关损耗)。另外,频率越高,磁性元器件的尺寸就越小,进一步降低了设计成本。 高压运行 与硅基器件相比,WBG 器件可在更高的电压(600 V以上)下工作。这样,高压总线架构就能以更少的电流(即小直径电线)为混动/电动汽车组件供电,减少了线束的重量。 高温运行 宽禁带器件的热传导性和熔点决定了它能够在 300°C 以上的高温运行。这种能力对于要求高温运行的混动/电动汽车应用来说,是更可靠的解决方案。 仿真宽禁带器件设计 在功率转换器设计中,宽禁带器件的出现让 DC-DC 转换器的仿真和设计变得更加复杂。GaN 和 SiC 器件制造商都有良好的工艺把控,因此不会对器件进行大量表征。但是用户却需要逐个测试,以确定宽禁带器件在其设计是否适用。另外,传统的“集中分析”式仿真器具有快速开关的特性,因而不能对宽禁带功率转换器的设计提供仿真(参见图 3)。 功率晶体管在进行开关转换时,传统模型/仿真显示的仿真结果(粗线)与测得结果(晕线)之间存在显著差别。效果不佳的仿真会导致设计延迟,增加成本,因为设计师需要不断地重复,以便下一个样本能够实现预期的工作效果。良好的仿真还有助于提高直流对直流转换器设计的可靠性! 双向测试 随着越来越多的 DC-DC 转换器变为双向,测量双方向的功率流时,需要测试设备有能力为 DC-DC 转换器供给功率和吸收功率。传统上,这是通过并联电源与电子负载来实现的。然而,外部电路(如阻止电流流入电源的二极管)和繁重的“双仪器”编程通常不支持在供给功率和吸收功率之间进行流畅的信号转换,从而导致对工作条件的仿真不够准确。 电子负载通常会消散从 DC-DC 转换器传输过来的功率。但消散的功率会逐渐累积热量,这在同步使用多个 DC-DC 转换器进行测试的应用中尤为明显。由于需要去掉电子负载中的热量, 它们通常尺寸很大,需要利用风扇强制冷却,或者用水冷却。