Spring-SpringBoot-SpringMVC-MyBatis常见面试题

文章目录 Spring篇springbean是安全的的?什么是AOP你们工作中有用过AOP吗spring中的事务是如何实现的spring中事务失效场景Spring的生命周期spring中的循坏依赖springMVC的执行流程springboot的启动原理常用注解MyBatis执行流程Mybatis是否支持延迟加载?Mybatis的一级、二级缓存用过吗? Spring篇 springbean是安全的的? 不是线程安全的,他默认是单例的,如果有多个线程会并发执行该请求对应的逻辑,在处理过程中如果有对该单例状态修改,则需要考虑线程同步问题, 什么是AOP 他是面向编程的,用于与业务无关,可以抽取为公共模块,降低耦合,一般用于日志,事务 你们工作中有用过AOP吗 主要是使用AOP来记录操作日志,主要思路的使用AOP的环绕通知和切点表达式 spring中的事务是如何实现的 一种是编程式事务,另一只是声明式事务俩种方法 第一种是TransactionTemplate来实现的,对代码有侵入性第二种是通过AOP在方法前进行拦截,执行完之后是提交还是回滚 spring中事务失效场景 异常的捕获 -在catch块中添加throw new 异常(手动抛出运行时异常)抛出检查性异常 - 在Transaction属性中添加(Exception.class)不使用 public 方法 Spring的生命周期 通过BeanDefinition获取bean的定义信息调用构造函数实例化beanbean的依赖注入处理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware)Bean的后置处理器BeanPostProcessor-前置初始化方法(InitializingBean、init-method)Bean的后置处理器BeanPostProcessor-后置销毁bean spring中的循坏依赖 循环依赖其实就是A引用了B,B又引用了A一级缓存放入的完整的Bean对,二级缓存Bean的生命周期还没有走完,三级缓存:缓存的是ObjectFactory,用来创建某个对象(工厂)解决方法 先实例化A对象,同时会创建工程放入到三级缓存中,当A需要用到B的时候,B完成实例化完成时,放入到三级缓存中,B需要A的时候,通过三级缓存生产对象放入到二级缓存中,此时B创建成功后放入到一级缓存如果是构造方法出循环依赖时库使用懒在构造方法上添加@Lazy springMVC的执行流程 springboot的启动原理 @SpringBootConfiguration:该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。 @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。 @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。 1, 在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是: @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 2, 其中@EnableAutoConfiguration是实现自动化配置的核心注解。 该注解通过@Import注解导入对应的配置选择器。 内部就是读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。 在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。 3, 条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。 常用注解 MyBatis执行流程 Mybatis是否支持延迟加载? 支持,默认是关闭状态原理 使用cglib代理来实现的,他会进来拦截器invoke,如果是null时,执行sql,调用set方法. Mybatis的一级、二级缓存用过吗? 一级和二级缓存都是保存到本地,本质是一个hashmap,一级缓存的作用域是session级别的,二级缓存是namespace和mapper的作用域,不依赖于session(默认是打开一级缓存)开启二级缓存

Python大数据处理利器之Pyspark详解

摘要: 在现代信息时代,数据是最宝贵的财富之一,如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架,为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark的基本概念和使用方法,并给出实际案例。 什么是pyspark? pyspark是一个基于Python的Spark编程接口,可以用于大规模数据处理、机器学习和图形处理等各种场景。Spark是一个开源的大数据处理框架,它提供了一种高效的分布式计算方式。pyspark使得Python程序员可以轻松地利用Spark的功能,开发出分布式的数据处理程序。 pyspark的基本概念 在使用pyspark进行大数据处理之前,我们需要了解一些基本概念。 RDD RDD(Resilient Distributed Datasets)是pyspark的核心概念,是一种弹性分布式数据集。它是Spark中的基本数据结构,可以看做是一个分布式的未被修改的数据集合。RDD可以被分区和并行处理,支持容错和自动恢复,保证了数据的高可靠性和高可用性。 DataFrame DataFrame是一种类似于关系型数据库中的表格的数据结构。它提供了一种高级的抽象层次,可以将数据组织成一组命名的列。DataFrame支持类似于SQL的查询,可以很方便地进行数据筛选、过滤、排序和统计等操作。 SparkContext SparkContext是pyspark中的一个核心概念,是Spark应用程序的入口。它负责连接Spark集群,并与集群中的其他节点进行通信。SparkContext提供了许多Spark操作的入口点,如创建RDD、累加器和广播变量等。 pyspark的使用方法 了解了pyspark的基本概念之后,我们来看看如何使用pyspark进行分布式数据处理。 环境搭建 在使用pyspark之前,需要先安装Spark和Python环境。可以通过官方网站下载Spark和Python,然后按照官方文档进行安装配置。具体步骤可以参考下面的链接: Spark安装指南 Python安装指南 基本操作 在pyspark中,我们可以使用SparkContext创建RDD,并对其进行各种操作。 下面是一个简单的例子,展示了如何使用pyspark创建一个RDD,并对其进行map和reduce操作: from pyspark import SparkContext # 创建SparkContext sc = SparkContext("local", "pyspark app") # 创建一个RDD rdd = sc.parallelize([1, 2, 3, 4, 5]) # 对RDD进行map操作 rdd1 = rdd.map(lambda x: x * 2) # 对RDD进行reduce操作 result = rdd1.reduce(lambda x, y: x + y) print(result) 在这个例子中,我们首先创建了一个SparkContext,并指定其运行在本地模式下。然后,我们创建了一个包含5个元素的RDD,并使用map操作将每个元素乘以2。最后,我们使用reduce操作对RDD中的所有元素进行求和,并将结果打印出来。 除了上面的基本操作外,pyspark还提供了丰富的API,可以用于各种数据处理操作。例如,pyspark可以读取各种文件格式的数据,包括CSV、JSON、Parquet等,也可以连接各种数据源,如Hadoop、Hive等。 案例分析 下面我们来看一个实际案例,展示了如何使用pyspark进行大数据处理。 假设我们有一个包含100万条用户数据的CSV文件,每条数据包含用户ID、姓名、年龄、性别和所在城市等信息。现在我们需要统计各个城市的用户数,并按照用户数从高到低进行排序。 首先,我们可以使用pyspark读取CSV文件,并将其转换为DataFrame格式。具体代码如下:

【算法系列篇】位运算

文章目录 前言什么是位运算算法1.判断字符是否唯一1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 丢失的数字2.1 题目要求2.2 做题思路2.3 Java代码实现 3. 两数之和3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 只出现一次的数字4.1 题目要求4.2 做题思路4.3 Java代码实现 5. 消失的两个数字5.1 题目要求5.2 做题思路5.3 Java代码实现 总结 前言 位操作符想必大家都知道吧,&——按位与,|——按位或,^——按位异或,~——按位取法,位操作主要是用来操作二进制数的,就是因为它操作的是二进制,所以它的速度非常的快,那么既然他的速度很快,我们是否可以用位运算来解决一些实际问题呢?当然是可以的,这篇文章我将为大家分享如何使用位运算这种算法来解决一些问题。 什么是位运算算法 位运算算法是一组基于二进制位的操作符和操作方法的算法,用于在计算机中对二进制数字进行快速和高效的操作。位运算算法可以在二进制位级别上进行操作,包括位与(AND)、位或(OR)、位异或(XOR)、位取反(NOT)以及移位操作(左移和右移)等。 按位与(&):只有当两个比特位都为1的时候结果才为1,否则为0按位或(|):两个比特位中有一个1,结果就为1按位异或(^):两个比特位相同为0,相异为1按位取反(~):除符号位之外,其它的比特位取反,为0结果为1,为1结果为0 位运算算法常用于以下情况: 位操作:可以通过位与、位或、位异或等运算符来对二进制数字的每一位进行操作,实现快速的位级别操作。位掩码:可以使用位运算来创建和操作掩码,掩码经常用于标志位、权限控制和位字段的操作。整数运算优化:位运算算法可以实现某些整数运算的高效实现,如乘以2的幂次方、除以2的幂次方、判断奇偶性等。位图算法:位运算常用于位图算法,其中每个二进制位表示集合中的一个元素,可以进行高效的集合操作,如并集、交集、差集等。压缩算法:位运算可以在压缩算法中起到重要的作用,用于压缩和解压缩数据,常见的例子包括哈夫曼编码和算术编码。 位运算算法通常具有高效性、简洁性和可移植性的特点,可以提供快速的底层操作,特别适合某些特定的问题和应用领域。在编写低级别的系统程序、嵌入式系统、网络协议和算法优化等方面,位运算算法发挥着重要的作用。 1.判断字符是否唯一 https://leetcode.cn/problems/is-unique-lcci/ 1.1 题目要求 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 示例 1: 输入: s = "leetcode" 输出: false 示例 2: 输入: s = "abc" 输出: true 限制: 0 <= len(s) <= 100s[i]仅包含小写字母如果你不使用额外的数据结构,会很加分。 class Solution { public boolean isUnique(String astr) { } } 1.

Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program wi

win10安装java(jdk或jre) 环境报错: Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program wil 一,下包安装java二,解决报错大功告成 环境报错: Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program wil 一,下包安装java 在官网下载jdk包 官网地址 直接下载 .exe结尾的安装,下一步下一步全部默认选着 安装-结束。 运行windows+r输入cmd 执行java --version Error: Could not create the Java Virtual Machine Error: A fatal exception has occurred. Program wil 二,解决报错 1,右键我的电脑****–属性–高级系统设置–环境变量 2,在“用户变量” “新建”,输入变量名:JAVA_HOME 和变量值:C:\Program Files\Java\jdk-11.0.8 (自己JDK的安装路径) 3,在“用户变量中” 找到**“Path”变量,“编辑”。**

Stable Diffusion Web UI的原理与使用

Stable Diffusion是一套基于Diffusion扩散模型生成技术的图片生成方案,随着技术的不断发展以及工业界对这套工程细节的不断优化,使其终于能在个人电脑上运行,本文将从github下载开始讲一讲如何使用Stable Diffusion Web UI进行AI图像的生成。 1.聊聊Diffusion 1.1 概念简介 StableDiffusion是基于扩散模型的应用,那就先来讲一讲什么是扩散模型。 我们知道在扩散模型出现之前,比较火的是GAN(对抗生成网络),GAN由生成器和判别器组成,两者相互博弈训练,最终产生较理想的输出。 但是GAN也有缺点,首先生成器和判别器不断进化的中间N个步骤完全是黑盒,无法调试。其次还有难以训练、模式坍缩等许多问题。 Diffusion模型并非新技术,而是更像是在另一个技术方向上的不断前进,相比GAN,Diffusion会将生成的每一个步骤都拆解出来进行反复训练。 好比绘制一幅简笔画,GAN是生成器和判别器不断进化,最终绘制完成简笔画。而Diffusion是将绘画的每一步拆解出来不断训练,最后完整的将所有步骤绘制出来: 1.2 讲讲原理 Duffsion是一个在图像加噪去噪过程中进行生成的模型,假设一张完全没有噪点的图像到一张充满噪点无法辨认的图像会经过1000个步骤: 那么在训练阶段,Diffusion模型首先会在这1000个步骤中随机选一步,先加噪,再通过网络去噪,反向传播时用该阶段的原始图片作为Loss。而这个加噪去噪的具体步骤,也并非直接加减,需要通过网络求出噪声变化值再减回去等,这里不做过多讲解。 这个去噪声的操作通过的就是Unet网络,这是一个残差卷积网络,因为结构呈U形所以得名。而我们输入的提示词也会先通过CLIP模型再编码进噪声中。 再后来出现了Latent Diffusion Models,即通过VAE这样的压缩技术,将原图通过VAE网络编码成一张尺寸比较小、包含潜空间数据的图片,再进行扩散处理,最终图像再通过VAE网络解码成原始图片。这项技术大大降低了显存的占用,也为后来的Stable Diffusion打下了基础。 2.Stable Diffusion Web UI 接下来讲讲实用的,关于Stable Diffusion与第三方开源的Web UI仓库。 2.1 Web UI简介 在github上直接查找StableDiffusion可以看到排名最靠前的有3个仓库: 实际上Stable Diffusion 是由 CompVis、Stability AI 和 LAION一起开发的,因此CompVis和Stability-AI的仓库地址理论上都是官方仓库。 而stable diffusion web ui实际上是一个非官方开源项目,但这个才是我么一会要用的仓库,这个仓库真正做到了开箱即用,不需要配置Cuda、不会有奇怪的报错、连基础模型都会帮你自动下载好。 2.2下载与配置 2.2.1 启动Stable Diffusion 首先从AUTOMATIC1111仓库的Stable Diffusion Web UI进行下载,该仓库会自动下载StableDiffusion以及基础模型: https://github.com/AUTOMATIC1111/stable-diffusion-webui 根据该仓库的教程说明,最后运行webui-user.bat即可。 安装好并且webui-user.bat内的内容下载好后,在ip:127.0.0.1:7860可以打开StableDiffusion界面: 左上角显示的是基础模型。 2.2.2 安装大模型 像SDXL这类算作大模型,像Lora、ControlNet算小模型,小模型需要依赖大模型的版本,大模型版本改变的话小模型就会失效报错。 下载大模型需要去另外2个github仓库查找。 不想折腾,也可以在这里下载大模型: https://rentry.org/sdmodels https://civitai.pro/ 2.2.3 安装插件 使用Stable Diffusion web ui还可以进行插件的拓展,像较流行的Lora、Control Net这些最早都不是作为SD的插件开发的,而是有正经论文的学术内容,后来才拓展的StableDiffusion插件版本。

【SpringBoot】带你一文彻底搞懂RestController和Controller的关系与区别

目录 什么是@RestController,什么是@Controller 使用@ResponseBody注解让方法返回值作为响应内容是什么意思 举例说明 @RestController @Controller 什么时候需要返回的是视图,什么时候需要返回数据? 当设计 RESTful API 时,一般的原则是: 下面是一些示例情况: 再以实例说明,更通俗易懂的理解: 总结 什么是@RestController,什么是@Controller @RestController 和 @Controller 是 Spring Framework 中用于定义控制器的注解。 @RestController 是一个组合注解,它结合了 @Controller 和 @ResponseBody 注解的功能(就相当于把两个注解组合在一起)。在使用 @RestController 注解标记的类中,每个方法的返回值都会以 JSON 或 XML 的形式直接写入 HTTP 响应体中,相当于在每个方法上都添加了 @ResponseBody 注解。 @Controller 注解标记的类则是传统的控制器类。它用于处理客户端发起的请求,并负责返回适当的视图(View)作为响应。在使用 @Controller 注解的类中,通常需要在方法上使用 @ResponseBody 注解来指示该方法的返回值要作为响应的主体内容,而不是解析为视图。 简而言之,@RestController 适用于构建 RESTful 风格的 API,其中每个方法的返回值会直接序列化为 JSON 或 XML 数据并发送给客户端。而 @Controller 适用于传统的 MVC 架构,它负责处理请求并返回相应的视图。(@RestController下的方法默认返回的是数据格式,@Controller注解标注的类下面的方法默认返回的就是以视图为格式) 使用@ResponseBody注解让方法返回值作为响应内容是什么意思 在使用 @Controller 注解标记的类中,默认情况下,方法的返回值会被解析为一个视图名称,并寻找与该名称匹配的视图进行渲染。这意味着返回的结果会被解析为一个 HTML 页面或者模板引擎所需的数据。 但是有时候需要将方法的返回值直接作为响应的主体内容,而不是解析为视图。为了实现这个目的,我们可以在方法上使用 @ResponseBody 注解。 @ResponseBody 注解表示方法的返回值应该直接写入 HTTP 响应体中,而不是被解析为视图。它告诉 Spring MVC 框架将方法的返回值序列化为特定格式(如 JSON、XML 等)并作为响应的主体内容返回给客户端。

The injection point has the following annotations: - @org.springframework.beans.factory.annotation.

报错如下: 一般情况下都是因为找不到你要注册的bean造成 我遇到过两种情况 1、在单个项目中 这可能是由于实现类没加@Service或者你要注入的bean没加@Component注解 2、聚合项目中,你想要注入的bean和调用位置不在一个工程中 springboot启动,默认是扫描启动类同级和子级包下的类,但是由于你要注入的bean不在该项目中,导致无法注入,可以将扫描路径配置到启动类上 以上是我本人遇到过的情况以及解决思路,欢迎大家补充!!

redisson版本与springboot版本依赖关系

redisson版本 Redisson与Springboot集成【官方】3.18.0版本的redisson3.18.1版本的redisson 总结 关于reddison与springboot集成报错,日志如下: Caused by: java.lang.ClassNotFoundException: org.springframework.data.redis.connection.zset.Tuple 原因是版本对应有误。需要确保:使用与 Spring Data Redis 版本相对应的正确版本的 redisson-spring-data 模块 直接说结论,节约大家时间。SpringBoot版本为2.7.x,最高使用redisson版本如下: <!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter --> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.18.0</version> </dependency> SpringBoot版本为3.x.y,用最新的就好,具体参考官方 Redisson与Springboot集成【官方】 将 Redisson 与 Spring Boot 库集成。取决于 Spring Data Redis 模块。 支持 Spring Boot 1.3.x - 3.1.x。 点我跳转查看 这里可以看到,如果项目使用的Springboot版本低于3.x.y,那么你的redisson版本该考虑使用:redisson-spring-data-2x了。 3.18.0版本的redisson 在mvnrepository仓库可以看到,最低支持的版本是2.7.x,并且redisson-spring-data-27 3.18.1版本的redisson 在mvnrepository仓库可以看到,最低支持的版本是3.0.x,并且redisson-spring-data-30 总结 redisson-spring-data module nameSpring Boot versionredisson-spring-data-161.3.yredisson-spring-data-171.4.yredisson-spring-data-181.5.yredisson-spring-data-2x2.x.yredisson-spring-data-3x3.x.y 上述表格源自点我跳转 <dependency> <groupId>org.redisson</groupId> <!-- for Spring Data Redis v.1.6.x --> <artifactId>redisson-spring-data-16</artifactId> <!-- for Spring Data Redis v.

出现ZooKeeper JMX enabled by default这种错误的解决方法

系列文章专栏 学习以来遇到的bug/问题专栏 文章目录 系列文章专栏 前言 一 问题描述 二 解决方法 2.1 可能的原因分析 2.2 小编的问题解决方法 First:检查/etc/profile里面zookeeper的环境变量配置 Second:检查 zookeeper/conf/zoo.cfg里面的dataDir的路径 总结 前言 本文主要介绍出现ZooKeeper JMX enabled by defaultUsing config: /opt/software/zookeeper/bin/../conf/zoo.cfgError contacting service. It is probably not running.这种问题的解决方法。 一 问题描述 在安装zookeeper时,配置好了zookeeper的环境,但是启动zookeeper时出现错误,无法正常启动,出现启动错误的情况,使用jps命令检查,依旧无法查到zookeeper启动成功的标识。 [root@node01 software]# /opt/software/zookeeper/bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@node01 software]# jps 2105 Jps [root@node01 software]# /opt/software/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg Error contacting service.

JDK下载安装

一、下载JDK18 1.访问oracle官网下载JDK18 www.oracle.com 版本说明: x64 Compressed Archive:二进制包,已编译好的可直接使用的程序,解压缩后,点击bin目录下的.sh或者.bat执行文件即可使用。 https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.zip x64 Installer:安装程序,执行exe文件即可以安装。 https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.exe x64 MSI Installer:安装程序,执行安装。 https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.ms 二、 安装JDK18 1、双击打开下载的.exe文件,点击下一步 2、用户根据自己的需要选择是否需要增加以下功能,以及选择合适的安装位置 3、安装时间不长耐心等待即可,同时会提示安装jre:安装 jre,可以更改 jre 安装路径。注意:如果提示需要将 jre 安装在一个空目录下,那自己创建一个目录即可,这里建议jdk和jre放在同级目录下 4、安装完成 三、配置环境变量 在安装完jdk后,还需要对jdk的环境变量进行配置才能正常使用。下面教大家如何配置jdk环境变量: 1、右键选择 计算机→属性→高级系统设置→高级→环境变量 2、系统变量→新建 变量名:JAVA_HOME 变量值:(变量值填写你的jdk的安装目录,例如本人是 E:Javajdk1.7.0) 3、在系统变量中找到 Path 变量,选择编辑 在变量值最后输入 %JAVA_HOME%bin;%JAVA_HOME%jrebin; (注意如果原来Path的变量值末尾没有;号,就先输入;号再输入上面的代码) 4、系统变量→新建 变量名:CLASSPATH 变量值:.%JAVA_HOME%lib;%JAVA_HOME%libtools.jar(注意最前面有一点) 到这系统变量就配置完毕了。 四、验证是否配置成功 点击Win+R键打开运行窗口。在文本框中输入cmd后,点击确定按钮。 输入“java -version”命令查看执行程序的功能的版本号是否显示出来。 输入“javac.exe”命令查看将java转化成class的功能的版本号是否显示出来。 输入“java.exe”命令查看。

Llama模型结构解析(源码阅读)

目录 1. LlamaModel整体结构流程图2. LlamaRMSNorm3. LlamaMLP4. LlamaRotaryEmbedding 参考资料: https://zhuanlan.zhihu.com/p/636784644 https://spaces.ac.cn/archives/8265 ——《Transformer升级之路:2、博采众长的旋转式位置编码》 前言:本次阅读代码位置,在transformers库底下的modeling_llama.py,具体位置在:transformers/models/llama/modeling_llama.py,如下图所示: 1. LlamaModel整体结构流程图 2. LlamaRMSNorm 代码如下 class LlamaRMSNorm(nn.Module): def __init__(self, hidden_size, eps=1e-6): """ LlamaRMSNorm is equivalent to T5LayerNorm """ super().__init__() self.weight = nn.Parameter(torch.ones(hidden_size)) self.variance_epsilon = eps def forward(self, hidden_states): input_dtype = hidden_states.dtype variance = hidden_states.to(torch.float32).pow(2).mean(-1, keepdim=True) hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) return (self.weight * hidden_states).to(input_dtype) RMSNorm的公式如下所示: x i 1 n ∑ i = 1 n x i 2 + e p s ∗ w e i g h t i \frac{x_i}{\sqrt{\frac{1}{n}\sum\limits_{i=1}^{n}{x_i}^2 + eps}} * weight_i n1​i=1∑n​xi​2+eps ​xi​​∗weighti​

99个基于JAVA的管理系统(源码+论文)

做毕设定制多年,积累了大量毕设源码+论文,最近整理了一下分享出来,希望能够帮助到大家, 如有需要的直接文末lian系博主获取吧! 1、 基于java--绿色农场管理系统 (可运行源码+论文) 2、 基于java--学生宿舍管理系统 (可运行源码+论文) 3、 基于java--基于酒店管理系统 (可运行源码+论文) 4、 基于java--vue的校园失物招领系统 (可运行源码+论文) 5、 基于java--作业检查平台 (可运行源码+论文) 6、 基于java--疫情物资管理系统 (可运行源码+论文) 7、 基于java--济阳区垛石街道政府机关年度绩效考核系统 (可运行源码+论文) 8、 基于java--工程教育专业认证信息管理系统 (可运行源码+论文) 9、 基于java--留学服务管理平台 (可运行源码+论文) 10、 基于java--智慧养老院管理系统 (可运行源码+论文) 11、 基于java--食品质量安全追溯平台 (可运行源码+论文) 12、 基于java--面向大学校园的设备保修系统 (可运行源码+论文) 13、 基于java--健美健身房信息管理系统 (可运行源码+论文) 14、 基于java--健康体检管理系统 (可运行源码+论文) 15、 基于java--高校流浪动物领养网站 (可运行源码+论文) 16、 基于java--小型仓库管理系统的设计与实现 (可运行源码+论文) 17、 基于java--班级科创学分统计分析系统 (可运行源码+论文) 18、 基于java--健康管理信息系统 (可运行源码+论文) 19、 基于java--学生成绩管理系统 (可运行源码+论文) 20、 基于java--网站上订餐系统 (可运行源码+论文) 21、 基于java--大学生就业服务平台 (可运行源码+论文) 22、 基于java--水族馆观光网站 (可运行源码+论文) 23、 基于java--高校培养方案管理系统 (可运行源码+论文)

AI时代,程序员需要焦虑吗?

原文来自 微信公众号"互联网技术人进阶之路". 目录 前言一、程序员会被 AI 取代么?二、服务端开发尚难被 AI 取代三、服务端开发何去何从?四、业界首部体系化、全景式解读服务端开发的著作第一部分:服务端开发的技术和方法第二部分:服务端典型问题的解决方案 五、参与抽奖方式 前言 ChatGPT 横空出世后,“AI 即将取代程序员” 的观点一度引发热议,至今尚未完全冷却。 ChatGPT 是一种基于人工智能技术的对话生成系统,其受欢迎的程度在一定程度上说明了人们对于人工智能技术的兴趣和追求。但是,从目前的实际情况来看,人工智能技术还没有达到完全替代程序员的程度。 首先,AI 技术在程序员的工作中发挥的作用仅是提高了工作效率和准确性。例如,AI 可以帮助程序员完成代码的自动化测试、代码审查等重复的、容易出错的工作。但是,自动化测试和代码审查实际上只是程序员工作中的一小部分,大部分的工作仍需要程序员自己动手完成。 其次,AI 技术还无法完全取代程序员在创造性问题上的发挥作用。例如,在项目的需求分析、设计和策划过程中,需要程序员进行创造性思考和判断,AI 技术还没有完全达到这一点。 所以,可以说 ChatGPT 对话生成系统的出现并不会导致程序员的完全失业,而是在一定程度上提高了程序员工作的效率和准确性。程序员仍需要在许多方面进行思考和创新,以满足现代软件开发领域的需求。 2022 年 11 月 30 日,OpenAI 发布了一款名为 ChatGPT 的聊天机器人程序,旋即引爆网络,在全球范围内引起巨大反响。紧随其后,各种大语言模型如雨后春笋不断出现。国外如 Google 的 Bard、Anthropic 的 Claude,国内如百度文心一言、阿里通义千问、讯飞星火认知大模型、昆仑万维天工大模型等。 相较于之前的模型,以 ChatGPT 为代表的大语言模型在代码生成、代码解释能力方面有了质的飞跃,很多程序员已经开始借助大语言模型编写、优化代码,因此很多人认为 “程序员即将被 AI 所取代”。 一、程序员会被 AI 取代么? “AI 取代程序员” 并不是什么新鲜的话题,事实上,早在“低代码”概念出现时,人们就已经开始讨论程序员是否会被淘汰的话题了。在 ChatGPT 横空出世后,该话题被人们连夜从地里挖出,重新装扮后,紧急上线,再度推上了热搜。 目前,一些有条件的人已经开始借助 AI 来学习技术、编写代码和辅助解决问题等。AI 技术极大地缩短了掌握知识的路径,一些原本需要读很多书、看很多专栏才能搞懂的知识点,让 AI 工具给你举例子,并用通俗易懂的语言来解释,就可以快速地掌握。一些看似并不复杂的代码,如果你自己去写可能要写半小时, AI 则可能只需一两分钟就能产出,而且质量往往更高。有了 AI 的加持,那些编程经验并不丰富的初级工程师,也可以 “写出” 相对优秀的代码。 AI 给很多行业带来无限可能,在部分场景下,AI 可以大幅提高开发效率。在不久的将来,AI 有望取代一些低水平(比如仅会 CRUD)的程序员 。不过,就笔者使用 ChatGPT 辅助编程的经验来看,AI 目前生成代码的水平,要全面取代程序员还有很长的一段路要走。

前端将file文件传给后台,后台将文件传给前台(包含上传下载)

前端将file文件传给后台,后台将文件传给前台(包含上传下载) 在开发过程中,经常会遇见对文件的处理。 例如:在上传、下载文件时,需要在前端选完文件传到后台传到服务器;或者文件从后台,经过特定需求的处理在返回给前台。 中间处理过程各种各样,但有两个过程是固定的 前端传给后台后台返回给前端 经常用到的上传就是对应第一步,下载对应第二部。会在文章最后总结。 下面是示例代码 前台传给后台 界面采用el-upload组件,在选择文件时,将文件传给后台 <el-upload class="upload-demo" ref="upload" action="#" :on-change="changeFile" :file-list="fileList" :auto-upload="false" :limit="1"> <el-button slot="trigger" size="small" type="primary">选取文档</el-button> </el-upload> 选择完文件会走changeFile(file)方法,其中默认入参为选中的文件,如下图,真正的文件类型是File类型的raw变量 不能直接将File类型变量传输,要把File文件转成FormData类型,通过axios发送请求 用的组件不同可能返回的类型、变量名不一样,但最后要获取到File文件类型,通过FormData()进行转换传向后台。 需要配置的参数: method:posturl:自己的接口地址data:请求前转换类型的参数headers:credentials: ‘same-origin’responseType:‘blob’ //用于接收后台返回的文件所需类型 //el-upload文件上传事件 changeFile(file) { let formData = new FormData() formData.append('file', file.raw)// 传文件 axios({ method: 'post', url: url, //此处为往后台发送请求的地址 data: formData, headers: { // "Content-Type": "multipart/form-data" credentials: 'same-origin' }, timeout: 20000, //设置返回接受类型为blob responseType: 'blob' }).then(res => { //返回值转成Blob类型 let blob = new Blob([res.

【腾讯云 TDSQL-C Serverless 产品测评】- 云数据库之旅

“腾讯云 TDSQL-C 产品测评活动”是由腾讯云联合 CSDN 推出的针对数据库产品测评及产品体验活动,本次活动主要面向 TDSQL-C Serverless版。 本次参与活动可以涵盖不同技术层面的用户,可以针对TDSQL-C产品的自动弹性能力、自动启停能力、兼容性、安全、并发、可靠性等多方面进行产品的体验和测评,参与活动的同时既可以收获相关技术领域的实战经验同时也可获得丰厚的活动激励。 一、前言: 本人接触并从事互联网开发工作有近7年了,从最开始的PHP和Swoole,到后面逐渐接触到的语言,如java、go、python、Node等,一直是与数据库(如:Mysql、MariaDB、PostgreSQL)进行打交道,从事的行业最多的是与电商项目系统开发。 如上是公司从0到1电商系统的迭代演进过程,在考量自身的业务特性,以及所拥有或可调配的资源。只有明确了这些之后才能适度设计合适的架构,以确保可以为应用提供稳定的服务。从单机架构、动静分离架构、应用与数据分离架构、数据库主从架构、负载均衡架构都会大量使用到MySQL,无论是多复杂的架构,基本都会用到MySQL。 在一定程序上,SQL相关的知识储备和运用、优化,是衡量一个后端开发人员的重要指标。如果您现在还只是停留在CURD,只是觉得往数据库存点数据,修改、更新、删除一些数据。那可能需要更多学习一下SQL相关的知识、多接触一下更大、更广的场景。当然,这也是相对于某个阶段来讲,当然,本人也是在不断的保持学习,从而不断的总结与提升中。 最近通过CSDN的活动接触腾讯云的很多好用的产品,之前在工作中,一直是使用自搭数据库体系或者使用云数据库(如阿里云)进行系统开发,现在让我们来了解并动手实践腾讯云的TDSQL-C MySQL Serverless版本数据库。 二、TDSQL-C 简介: 因篇幅与精力有限,本文只对TDSQL-C MySQL Serverless版本数据库进行评测。 2.1 TDSQL-C 简介: TDSQL是腾讯云企业级分布式数据库,旗下涵盖金融级分布式、云原生、分析型等多引擎融合的完整数据库产品体系,提供业界领先的金融级高可用、计算存储分离、数据仓库、企业级安全等能力,同时具备智能运维平台、Serverless版本等完善的产品服务体系。 云原生数据库 TDSQL-C(Cloud Native Database TDSQL-C)简称 TDSQL-C。TDSQL-C 是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件技术的优势,100%兼容 MySQL 和 PostgreSQL,实现超百万级QPS的高吞吐,128TB海量分布式智能存储,保障数据安全可靠。 TDSQL-C MySQL Serverless版(TDSQL-C for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。 上述,对TDSQL-C MySQL从大到小的层面进行了一些介绍,下面来做一个简单的总结,先对TDSQL-C MySQL有一个大致的了解。 三、参加评测活动: 有幸有机会进行了数据库评测活动,活动的要求是各种手段消耗数据库的性能、存储等。 3.1 采购TDSQL-C MySQL数据库: 打开(TDSQL-C)[ https://cloud.tencent.com/product/cynosdb]产品链接,在“实例形态”一定要选择Serverless的版本,非常关键,“算力配置”选择的范围是32-64。 购买完数据库实例后,需要够买“存储资源包”,选择10TB的存储量。 在TDSQL-C MySQL Serverless数据库实例中的选项卡“资源包”中,进行刚刚购买的“存储资源包”即可。 3.2 使用mysql2扩展 + PM2进行Node服务多个进程写入数据: const mysql = require('mysql2/promise'); // 初始化数据库连接 let connection = null async function initDb () { connection = await mysql.

kafka下载与安装教程

一、下载安装zookeeper:https://downloads.apache.org/zookeeper 本次使用kafka_2.12-2.8.1.tgz内置zookeeper服务,以下zookeeper安装可以忽略!!! 解压: 修改配置文件: 修改zoo.cfg内容: 启动: 测试: 二.下载kafka安装包安装及配置kafka: kafka官网下载链接: https://kafka.apache.org/downloads.html 4.3.修改配置文件 4.3.1.kafka_2.12-3.2.1\config\zookeeper.propertis 4.3.2.kafka_2.12-3.2.1\config\server.properties 三.启动kafka服务 本次使用kafka_2.12-2.8.1.tgz内置zookeeper服务,kafka单机版服务,单独的zookeeper服务不需要启动,以上启动zookeeper服务的环节可以忽略。 先启动kafka内置的zookeeper服务!!!!! 在kafka根目录下打开cmd或者PowerShell输入命令 .\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties 成功页面 页面不要关!!! 再启动kafka服务!!! 在kafka根目录下打开cmd或者PowerShell输入命令 .\bin\windows\kafka-server-start.bat .\config\server.properties 成功页面 页面不要关!!! 4.6.创建一个名为 test3 的tiopic的测试主体 kafka 命令如下: .\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic test 3 成功页面 4.7.创建生产消息的生产者 命令如下: .\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test3 页面如下 不要关闭页面!!! 4.8.创建消息消费者接收消息 命令如下: .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test3 --from-beginning 发送端与接收端完整截图: 测试成功!!!

AI 绘画Stable Diffusion 研究(十七)SD lora 详解(上)

大家好,我是风雨无阻。 本期内容: Lora的原理是什么?Lora如何下载安装?Lora如何使用? 大家还记得 AI 绘画Stable Diffusion 研究(三)sd模型种类介绍及安装使用详解 这篇文章中,曾简单介绍了Lora的安装和使用吗 ? 但是我们并不清楚LORA 的原理是什么?以及使用过程中有什么技巧 ? 其实LORA 与 embedding 、Hypernetwork 在本质上类似,不过因为携带着大量的训练数据,所以 LORA 对人物和细节特征的复刻更加细腻(效果最好)、使用频率也是最高的。 因此我们在这里将重点介绍 LORA 模型相关的知识:包含LORA模型的原理、安装、使用、Lora模型的类型。 由于篇幅原因,这里将分为上、下两节进行详细讲解。 一、LORA 的原理 1、Lora是什么 ? LORA,英文全称Low-Rank Adaptation of LargeLanguage Models,直译为大语言模型的低阶适应。这是微软的研究人员为了解决大语言模型微调而开发的一项技术。 LORA是一种在消耗更少内存的情况下,加速大型模型训练的训练方法,在stable diffusion中它允许使用低阶适应技术来快速微调扩散模型。简而言之,LoRA训练模型可以更轻松地针对不同概念(例如角色或特定风格)进行模型训练。这些经过训练的模型可以被导出并供其他人使用。 LORA模型是小型的stable diffusion模型,对checkpoint模型 cross-attention layers(交叉注意力层)进行了较小的更改,但是它的体积只有checkpoint的1/100到1/10,文件大小一般在2-500MB之间。 从上图我们可以看到 LORA 对模型产生作用的环节是在 Noise predictor 。 下图是对上图放大以后的内部结构,LORA 是对 crossattention 进行更改。 在上一篇文章中,我们已经对比了三者的区别,感兴趣的朋友,请前往查看AI 绘画Stable Diffusion 研究(十六)SD Hypernetwork详解。 二、LORA 的下载安装 1、打开c站筛选LORA模型 点击右侧 ->漏斗图标 ,下拉菜单中选择 LORA 2、选择搜索结果中,喜欢的lora 模型进行下载 这里以 原神lora 模型为例进行演示: 下载完成后,会得到 Eula.safetensors 文件

自动驾驶算法/规划决策控制算法面经汇总、学习路线、面经心得

文章目录 1、秋招情况1、基本情况 2、备战秋招1、学习路线1、代码能力2、算法学习 2、提高优势1、大厂实习2、高水平论文3、比赛项目 3、面经总结4、自动驾驶预测规划决策控制算法付费咨询 1、秋招情况 1、基本情况 本人985硕,自动驾驶从业者,曾面试过大部分自动驾驶公司、一部分机器人公司以及一些主机厂,方向主要是规划算法、规控算法、规划决策算法等方向。算法的面试难度每年都在不断提高,网友调侃从诸神黄昏到黑夜,可见算法面试有一定难度。 首先要了解自动驾驶算法主要包括感知、预测、规划和控制模块。我主要集中在规划和控制部分,一般机械方向、计算机方向和控制科学与工程方向、机器人方向以及一些其他方向转自动驾驶的研究生或优秀本科生会投递这个岗位。常见的自动驾驶公司如下(来源网络,仅供参考): 可以选取自己感兴趣的赛道,提前关注公司招聘情况。 2、备战秋招 秋招提前批一般7月就陆续开始、在此之前要完成简历制作、和简历上项目比赛等内容的准备和大量刷题。基本包括:基础知识、计算机能力、比赛项目、实习论文这四个主要方面。 1、学习路线 1、代码能力 (1)基础知识 主要学习c++,对脚本语言如python也要了解一些。 c++:基本语法、三大特性:封装继承多态、泛型编程、stl、内存管理以及c++11新标准等。 推荐: b站上侯捷老师的课程。此外我还看了黑马程序员(时间充裕入门可以看、很基础) 推荐书籍: c++ Primer/STL源码解析/Effective c++/深度解析c++对象模型等。 数据结构算法:如堆、栈、链表、队列、树、图、时间空间复杂度计算,排序算法(快排、归并)、KMP算法等。其次要学会分析代码的时间复杂度和空间复杂度。 推荐书籍: 大话数据结构 设计模式:单例模式(手写单例代码、如何保证只有一个对象等)、工厂模式、模板等。 推荐推荐: 李建忠老师的设计模式课 数学基础:可以看一些概率论、计算机几何、非线性优化的书籍,夯实基础。 (2)高频面经题 面试前一个月重点复习高频的面试题,代码随想录以及一些网站都有整理。 一般虚函数、智能指针、指针和引用的区别和c++11标准是经常考察的。我也整理了一些资料,需要可以私聊。 关于算法的面经题集中在项目中涉及的算法原理、改进思路 (3)刷题路线 必刷:代码随想录 力扣hoot100、剑指offer 之后可以针对不足进行专题训练,如路径问题、dfs算法、二叉树等。 自动驾驶公司面试喜欢考察dfs\bfs、二叉树最大、最小路径问题以及一些岛屿和图的题目,可重点准备。 每次刷题要先思考,写出来。没思路、看答案,尽量理解不同题解,最后在白板写出,记住解题思路和核心步骤。 最后及时复习,一般都要二刷或者三刷。考前重点复习经典题型、薄弱环节、限时作答。 注意:很多面试笔试都是ACM模式,非力扣得核心代码模式,考前要学会自己写输入输出,以及一些需要建立链表、二叉树等。 ACM处理输入输出大全。 此外注意:自动驾驶算法应用中常常涉及一些处理几何的问题,一些自动驾驶公司面试也会重点考察几何题。遇到过:判断直线相交、点和三角形关系、三点求曲率、折线等分…。后期有时间会专门整理相关算法和代码。 2、算法学习 规划算法: 基于搜索、采样、优化和曲线拟合的路径规划算法,推荐我整理的一些路径规划算法博文,重点准备基于优化的规划算法(Em planer、Lattice planer、时空联合的优化算法等),在写写代码。 推荐:深蓝学院移动机器人课程,深入讲解了规划算法。 控制算法: 具备基础的控制理论基础(可控、可观)、主要是一些横纵向控制算法。经典的包括PID算法、LQR算法、MPC算法。还有一些轨迹预测的算法stanly也推荐看看。 推荐: B站Apollo课程、Apollo开源代码。 预测算法: 可以看看常用的预测网络densetnt、vetornet、lanegcn等。还有一些传统的预测方法。 决策算法 有限状态机、决策树、数据驱动和一些策略学习的方法(强化学习DQN等) 传统的预测规划控制算法实践推荐看Apollo项目,自己运行尝试实现不同城市交通场景的自动驾驶仿真(交通灯检测、行人过马路、超车、停车、无保护左转等场景),这部分我们也在做专栏学习,包括环境搭建、算法原理和代码解析,适合缺乏实习经验的同学或者增添简历项目的同学学习。Apollo项目是来自产业界的,推荐学习。 2、提高优势 1、大厂实习 关注一些大厂官网,一般研二寒假就要准备,实习面试更注重基础,因此重点提高基础,实习的几率还是很大的。最好问下是否可以转正。这样秋招可以先人一步。 如果大厂比较困难,一些独角兽车厂也是不错的选择。在实习时争取有产出,在面试会有很大的优势。 2、高水平论文 在研一发篇会议或者争取发篇自动驾驶相关的sci,会有很多加分。 一般9、10月开题确定好,利用好研二,争取发篇sci。 即便在投,有审稿意见不错的话,也是很有优势的。 面试更注重你论文的创新思路,解决什么样的技术,是否上实车或者距离落地还有哪些不足等 值得注意的是,面试前最好阅读一些自动驾驶的前沿论文,了解前沿技术的趋势。

【C语言】Sleep()函数----详解

💓 博客主页:江池俊的博客 ⏩ 收录专栏:C语言初阶之路 🎉如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 前言 📌C语言sleep函数 sleep 函数的基本语法: 注意 📌实例 编写代码,演示多个字符从两端移动,向中间汇聚。 不使用sleep函数的效果(while循环实现) 使用sleep函数的效果(while循环实现) for循环实现 while语句与for语句的转换: 前言 在C语言中,sleep函数是一个非常有用的函数,用于实现程序的延时功能。无论是在控制程序执行速度、模拟实时系统、或者创建交互式用户体验,sleep函数都能够发挥重要作用。它允许程序在指定的时间间隔内暂停执行,并在暂停期间使系统的处理器资源得到休息。 通过使用sleep函数,程序员可以轻松地控制程序的执行速度,以适应不同的场景和要求。它可以帮助程序实现精确的时间控制,例如在游戏开发中实现动画效果的流畅展示,或者在多线程编程中确保不同线程的协调运行。此外,sleep函数还可以用于模拟实时系统的行为,以便更好地理解和调试程序。 本文将详细介绍C语言中sleep函数的使用方法、注意事项和潜在应用场景,旨在帮助读者更好地掌握并灵活运用这个强大的函数。无论您是一位C语言初学者,还是具备一定编程经验的开发者,本文都将为您提供有关sleep函数的全面解析和实用技巧,助您成为更高效、更出色的C语言程序员。让我们一同进入C语言的延时世界,探索sleep函数的神奇魅力。 📌C语言sleep函数 语言中的 sleep 函数可以让当前线程暂停执行一段时间,通常用于模拟实际运行环境下的等待或延时操作。在 Windows 和 Linux 等主流操作系统中,sleep 函数的实现方式略有不同,但其基本原理都是通过让线程进入睡眠状态来实现等待或延时的效果。 sleep 函数的基本语法: unsigned int sleep(unsigned int seconds); 示例 #include<stdio.h> #include<windows.h> int main() { int a=100; Sleep(3000);// 滞停3s打印a printf("%d",a); return 0; } 运行结果: sleep函数示例 注意 需要注意的是,sleep 函数的参数类型为 unsigned int,而不是浮点数类型。如果需要暂停小于 1 秒的时间,可以使用 usleep 函数,它的参数类型为微秒(unsigned int),可以精确地控制线程的等待时间。 ❗️在VC中使用带上头文件#include <windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h> ❗️在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep

【数据结构】初识

💓 博客主页:江池俊的博客 ⏩ 收录专栏:数据结构探索 🎉如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 一、数据结构的基本认知 1.什么是数据结构 📌数据结构和数据库的区别 2.什么是算法 ? 3.数据结构和算法的重要性 4.如何学好数据结构和算法 二、算法的时间复杂度和空间复杂度 1.算法效率 1.1 如何衡量一个算法的好坏 1.2 算法的复杂度 2.时间复杂度 2.1 时间复杂度的概念 2.2大O的渐进表示法 2.3常见时间复杂度计算举例 3.空间复杂度 4. 常见复杂度对比 欢迎大家来到我的博客,今天我将用这篇文章来带你了解数据结构。 一、数据结构的基本认知 1.什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 📌数据结构和数据库的区别 数据结构 数据结构是指在计算机中组织和存储数据的方式和方法。它关注如何将数据组织成一种特定的形式,以便于操作和使用数据。常见的数据结构包括数组、链表、栈、队列、树和图等。数据结构可以用于解决各种问题,例如搜索、排序、插入和删除等操作。它是在内存中管理数据----增删查改。 数据库 数据库是指一个组织和管理数据的系统。它是一个存储和访问数据的集合,提供了一系列的操作和功能,如数据的增删改查、数据的安全性和完整性保证、数据的并发控制等。数据库用于持久地保存和管理大量的结构化数据,并提供了一种机制来处理数据之间的关系和依赖。它是在磁盘中管理数据----增删查改。 总结 数据结构关注的是如何组织和操作数据本身,而数据库关注的是如何管理和处理大量的数据,并提供了相关的查询和操作功能。数据结构可以用于在程序中临时存储和操作数据,而数据库则更适合于长期存储和管理大量的数据。在实际应用中,数据结构和数据库经常会结合使用,以实现高效的数据操作和管理。 2.什么是算法 ? 算法(Algorithm)就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出果。 3.数据结构和算法的重要性 🌴效率和性能:数据结构和算法直接影响程序的效率和性能。通过选择合适的数据结构和实现高效的算法,可以降低程序的时间和空间复杂度,提高程序的执行速度和资源利用率。 🌴问题解决能力:数据结构和算法是解决各种计算问题的基础。它们提供了一种通用的方法和框架来分析、设计和实现解决方案。掌握适当的数据结构和算法可以帮助学生更快、更准确地解决问题。 🌴设计和优化能力:数据结构和算法的理解有助于学生设计和优化复杂系统和软件。学习数据结构和算法可以培养学生的抽象思维能力和问题求解能力,帮助他们设计出结构良好、高效的软件系统。 🌴面试准备:数据结构和算法是计算机科学面试中常被问及的核心内容。对于求职和进入高级学术研究的学生来说,熟练掌握数据结构和算法可以增加他们在面试过程中的竞争力。 🌴扩展性和可维护性:合适的数据结构和算法可以提高系统的可扩展性和可维护性。通过选择适当的数据结构和算法,可以更容易地添加新功能、调整系统性能和处理大规模数据。 4.如何学好数据结构和算法 🌲死磕代码,熟练掌握敲代码,提高这方面的能力 🌲注意画图和思考,提高自己的思维能力 二、算法的时间复杂度和空间复杂度 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢?比如对于以下斐波那契数列: long long Fib(int N) { if(N < 3) return 1; return Fib(N-1) + Fib(N-2); } 斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何衡量其好与坏呢?