LeetCode_栈和队列相关OJ

✨✨所属专栏:LeetCode刷题专栏✨✨ ✨✨作者主页:嶔某✨✨ 上一篇:数据结构_栈和队列(Stack & Queue)-CSDN博客 有效的括号 解析: 这里我们用数组实现的栈来解决这个问题,在有了栈的几个基础接口之后,我们运用这几个接口解决问题。 首先新建一个栈并初始化,进入循环如果当前指针指向的字符元素为左括号 {([ 就入栈,反之就出栈,之后判断指针指向的字符是否和出栈的字符左右括号相匹配。 ( (top == '{'&& *s != '}') || (top == '['&& *s != ']') || (top == '('&& *s !=')') ) 每次循环后s++,如果 *s != '\0' 就进行下一次循环。 写完后提交会发现当只有一个元素的时候这种写法是不能过的 这里我们在else里面做一个判空,因为如果进了else里面,就说明这是个右括号,那么栈里面一定有其所对应的左括号,如果这时后栈为空,那么显然括号之间是不匹配的。这样就很好的解决了诸如此类的问题。 if(STEmpty(&S)) { STDestroy(&S); return false; } 最后s遇到了 '\0' 循环结束,我们判断栈是否为空,如果为空返回true,否则栈中还有元素括号之间也是不匹配的。 return STEmpty(&S); 可以这么理解这两段代码:一个判断了左括号是否多了,一个判断了右括号是否多了。 示例代码: function/数据结构_栈 · 钦某/c-language-learning - 码云 - 开源中国 (gitee.com)https://gitee.com/wang-qin928/c-language-learning/tree/master/function/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84_%E6%A0%88 bool isValid(char* s) { ST S; STInit(&S); while(*s) { if(*s == '{' || *s == '[' || *s == '(') { STPush(&S,*s); } else { if(STEmpty(&S)) { STDestroy(&S); return false; } char top = STTop(&S); STPop(&S); if((top == '{'&& *s !

Springboot3 链接Redis遇到的报错(本文仅记录保存,优质文章移步springboot专栏)

出现的报错: cannot connect to Redisedis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is setredis wrong number of arguments for ‘auth’ command 其实上面的三个报错是不同界面显示的,后面两个是通过Idea上的数据库连接插件连接时出现的报错,第一个是控制台的日志。 首先怀疑是Redis的问题(因为是复制以前的配置) 通过Another Redis Desktop Manager链接Redis发现可以连接,那么说明Redis没有问题。 其次就是看自己配置,怀疑密码错了,运行之前的项目发现也链接不上了(现在看来也不是这个问题) 解决方案 出现问题后我在那一栏我填的root,然后发现一直报错: redis wrong number of arguments for 'auth' command 现在发现填不填没影响 下面是我现在的配置: 解决方案是: 找到Redis的redis.windows.conf文件,找到其中的requirepass参数,修改这个参数对应的数值(我的因为是通过命令行操作设置的密码,所以在配置文件里面发现这个参数是注释掉的,后来取消注释就好了),之后保存配置文件,然后重启即可。

初探前端世界:网页基本结构入门指南

个人主页:学习前端的小z 个人专栏:HTML5和<CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 👑认识前端和网页🍓1 什么是网页🍓2 什么是 HTML 文件🍓3 网页的开发流程🍓4 什么是浏览器🍓5 Web标准🍓6 网页代码最佳方案 👑网页的基本结构🍓1 文档版本🍓2 标签🍏2.1 单标签🍏2.2 双标签🍏2.3 双标签关系🍑2.3.1 包含关系🍑2.3.2 并列关系 🍏2.4 标签属性 🍓3 html 标签🍓4 head 标签🍓5 body 标签🍓6 网页三要素 👑认识前端和网页 前端开发是创建Web页面或app等前端界面呈现给用户的过程,通过HTML,CSS及javaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互。虽然现在前端技术栈百花齐放衍生出各种工具、概念、技术;在工程化与现代化的路上高歌猛进,但本质上还是做网页。 🍓1 什么是网页 网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页是构成网站的基本元素,它通常由图片、链接、文字、声音、视频等元素组成。通常我们看到的网页,常见以 .htm 或 .html 后缀结尾的文件,因此将其俗称为 HTML 文件。 🍓2 什么是 HTML 文件 HTML 指的是超文本标记语言 (Hyper Text Markup Language) ,它是用来描述网页的一种语言。 HTML 不是一种编程语言,而是一种标记语言 (markup language)。 标记语言是一套标记标签 (markup tag)。 什么是超文本? HTML 中可以加入图片、声音、动画、多媒体等内容(超越了文本限制 )。HTML 中还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接(超级链接文本 )。 🍓3 网页的开发流程 开发 运行 解析 前端开发 网页代码 浏览器 网页 🍓4 什么是浏览器 浏览器是网页显示、运行的平台。常用的浏览器有 IE、火狐(Firefox)、谷歌(Chrome)、Safari和Opera等。

搜索引擎的设计与实现(四)

目录 6 系统测试 6.1测试重要性 6.2测试用例 结 论 参 考 文 献 前面内容请移步 搜索引擎的设计与实现(三) 免费源代码&毕业设计论文 搜索引擎的设计与实现 6 系统测试 6.1测试重要性 该项目是在本地服务器上进行运行和调试,首先是对Java环境的安装及配置,以及对数据库环境的安装与配置,安装完毕后将文件导入根目录,以后才可以在浏览器上进行运行、测试。 在项目开发过程中,会遇到那种错综复杂的问题,所以,测试在软件开发过程中起到了至关重要的作用,它的影响力不比任何开发的环节低,因为软件的开发是一项巨大的工程,不仅耗时,而且开发人员也不可能会预料到所有可能出现的情况,这样就会导致每个时期都难免会产生一系列的错误,而测试人员的主要职责就是,检查与发现程序在运行的程中的错误;一个优异的测试用例,就说明这个测试用例可以有极大地概率找出系统中目前还没有被觉察到的错误;找出目前还没有觉察到的错误,这就是成功的测试的标准。本系统的测试和纠错信息流程如图6.1所示。 图6-1 测试和纠错信息流程图 软件测试,又称为多模块测试,一共有四个阶段: 表6-1 测试阶段的介绍表 单元测试 单元测试的用例从单元详细设计中导出。 功能性测试与结构性测试可用于单元测试。 集成、确认测试 这一阶段的任务,是通过把单元测试中的各个模块按要求整合到一起,通过调试等步骤,获得一套可以满足用户需求的软件。 系统测试 本阶段中所寻找的错误通常是与目标需求之间存在的差距。通常是属于功能性测试的。 图6-2 层次测试的信息流程图 6.2测试用例 通过输入关键字进行查询,然后根据搜索结果判断系统是否存在问题. 例:搜索“在”,反馈结果如图6-2所示: 图6-3 搜索结果图1 可见搜索结果是正确的,并且关键字都已高亮度显示。 结 论 本次设计主要就是通过利用Lucene技术,来实现搜索引擎的设计和实现的过程。其中用到了开源工具有MyEcipse(提供项目运行的Java环境,编写程序空间)、sql server2008(数据库,用户前端展示信息的支撑,是数据的存储地)、tomcat(服务器,用户提交检索请求,由它来进行接收、处理)他们分别管控的自身的部分,同时也相互协调配合,这一功能得以正常运行和实现,是缺一不可的。 本项目是对一个基于Lucene技术的搜索引擎设计与实现的过程,通过开源库Lucene的支持,快速地实现了海量信息的搜索功能,它不仅实现了文件快速查找的功能,而且还实现了全文搜索,还能实现类似百度的分词搜索效果,效果颇佳。同时加入了数据库处理。 该系统可以通过扩展或改造然后适用于站内搜索,这样可以使用户快速的找到自己想浏览的信息,提高用户体验和网站流量。 到此搜索引擎的基本功能都已基本完成,但是还有待改进或加强的地方,例如如果把分词做到最优最人性化,怎样分才是最合理,都需要进一步研究。 参 考 文 献 1.] 李刚,宋伟,邱哲.征服Ajax+Lucene构建搜索引擎.北京:人民邮电出版社,2006.2.] 邱哲,符滔滔.开发自己的搜索引擎-Lucene2.0+Heritrix.北京:人民邮电出版社,2007.3.] 孙承杰.基于统计的网页正文信息抽取方法的研究.中文信息学报,2004,18(5):17-22.4.] http://www.docin.com/p-1436638591.html基于Lucene全文检索引擎的应用研究与实现.5.] 朱明.数据挖掘.合肥:中国科学技术大学出版社,2002.6.] Hu Y H, Li H, Cao Y B et al. Automatic extraction of titles from general documents using machine learning.

【数据结构】栈和队列专题

前言 上篇博客我们讨论了栈和队列的有关结构,本篇博客我们继续来讨论有关栈和队列习题 这些题算是经典了 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 ​ 目录 1. 括号匹配问题 2.用队列实现栈 3.用栈实现队列 4.设计循环队列 1. 括号匹配问题 由题可知我们需要判断一对括号是否成立,成立的话,就返回true,失败的话就返回false,这道题乍一看不好判断,其实我们可以用栈来解决,栈是后进先出的原则,我们可以判断如果是左括号的话让这个括号进栈,如果是右括号的话,让栈里的括号出栈与右括号匹对,若匹对成功,则继续判断下一个括号,这里我们需要考虑极端情况,假如括号都遍历完了,栈内还有左括号,代表此时左括号多,不匹配,所以还需要判断栈是否为空,还有如果第一个入栈的括号若是右括号,必定不匹配,直接false。 思路已给出,代码如下 对于c语言来说,注意先把栈写好,写好后再调用栈的函数,后续c++就不用这么麻烦了 2.用队列实现栈 这道题就是给你两个队列,通过队列实现一个栈,我们都知道栈是后进先出的原则,而队列是先进先出的原则,那如何用两个队列实现栈那? 首先我们思考,假如现在有两个队列q1和q2,我们画图分析 根据图上操作要想实现栈的后进先出的原则,我们在入栈时先用一个队列q1来做入栈操作,若出栈,由于后进先出的原则,我们可以先把除最后一个元素,剩下的元素全部导入q2,然后再将还在q1的元素通过出队的方式实现出栈,若继续入栈,此刻元素都在q2那么就用q2实现入栈操作,然后出栈时,按照上面的操作来回导入就可以了。 所以出栈比较难,其他操作都是常规的,我们说一下出栈,我们可以用假设法,分为空的队列和非空的队列,非空的队列前size-1的元素,pop出来再push进空的队列,再pop最后一个元素 对了,判空条件是两个队里都没元素时,此刻栈为空 代码如下 3.用栈实现队列 两个队列可以实现栈,那两个栈如何实现队列那 队列是先进先出原则,那对于栈来说,后进先出,若两个栈,将第一个栈的所有元素全部导入第二个栈,此刻我们想想比如第一个栈原本1,2,3,4,现在导入第二个栈此刻是不是就是4,3,2,1,此刻第二个栈若出栈的话正好符合了队列的先进先出 我们可以在画图看一下 其实对于两个栈,将第一个栈导入另一个栈,原本第一个栈的元素是后进先出的原则,导入第二个栈就变成现进先出了 代码如下 4.设计循环队列 重头戏来了 循环队列,就是在一个有限空间里重复利用,如图 如图,我们用两个指针指向数组头,一个是队头指针head,一个是队尾指针tail,push数据时,tail++,相当于Tail指向的是最后一个元素的下一个位置·,这一点跟栈栈顶元素有点类似,当初始化为0时, 指针指向最后一个元素的下一个位置,pop的话移动头元素head就行了,不过上面的图不现实,因为队列空和满时对应的条件都一样,都是head=Tail,所以我们得找一个办法让这个条件不一样,才能判空 一种是用一个size变量加加,记录数据,这是一种方法。 其实还有另一种方法,我们可以多一个空间,开k+1个空间,但只能放k个元素 如图,此刻若放满正好是第四个图,相当于tail的下一个位置就是head,那么我们是不是可以根据取模得到关系(tail+1)%(k+1)==head达到这个条件就是满,空的条件就很简单,head==Tail 如果是返回尾元素,就是tail指针指向的上一个位置,tail-1,但是我们得考虑如上图这种情况,Tail回到前面,但是此刻tail-1越界了,所以这时我们可以根据取模,(Tail-1+k+1)%(k+1) 就得到了尾元素的位置 头元素就是head指向的元素 OK,剩下的操作就是常规操作,代码如下 结束语 栈与队列经典习题就结束了,有什么问题可私聊我,里面的满足条件多想一想就能想明白,特别是最后一道题 OK,本篇博客结束!!!

AI绘画Stable Diffusion基础教程!

Ai绘图真的太火了,挡都挡不住。本着“不断好奇,不停学习”的理念,我打算介绍下Stable Diffusion,有兴趣的小伙伴可以一起学习。 目前市面上比较权威,并能用于工作中的 AI 绘画软件其实就两款。一个叫 Midjourney(简称 MJ),另一个叫 Stable-Diffusion(简称 SD)。MJ 需要付费使用,而 SD 开源免费,我们可以通过一些操作进行离线免费使用,效果也不错并且可玩性更高一些,因此我的选择是Stable Diffusion。想要Stable diffusion安装包的小伙伴可以在文末扫码,我给大家免费安排! 另外使用SD对系统的硬件也有一定的要求: 1、内存至少16G,越大越好。 2、显卡最好是N卡,显存同样越大越好: 至少 4G,勉强能出图。 6G 稍微好一点,可能部分功能无法使用。 8G 除了大模型训练不行,其他功能都可以用。 12G 及以上则无任何限制。 3、A卡用户应该也能用,这个需要自行测试,但是出图可能会很慢。 安装方法 SD 开源地址: https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki 目前大家普遍采用的 Stable Diffusion Web UI 是发布于开源程序分享网站 Github 的 Python 项目,和平常软件安装方法有所不同,不是下载安装即可用的软件,需要准备执行环境、编译源码,针对不同操作系统(操作系统依赖)、不同电脑(硬件依赖)还有做些手工调整,这需要使用者拥有一定的程序开发经验。 但是不用担心,现在可以直接使用大佬们做的一键启动程序包,比如国内@秋葉 aaaki 大佬开发的整合包,极大的降低了安装门槛(强烈推荐!) 大家可以自行去B站关注一波下载安装即可,如果觉得去B站找太麻烦了,也可以文末扫码找我给你发。 文生图的界面概述 现在我们看到的SD界面就是刚入手最常见的界面了-文生图,顾名思义就是文字生成图片。 由于参数比较多,全部介绍完篇幅可能会很长,所以我们这里先简单介绍几个最容易影响绘画的板块。 页面的左上方我们前面已经介绍过了是选择主模型的地方,旁边是加载VAE的地方,至于VAE是什么我们以后再说,再接下来的Clip 跳过层我们暂时用不到,可以不管: 往下走是横向的功能模块包括文生图、图生图等,同样其他的功能我们以后再说。 下面两个大的框就是我们的提示词框了,分别是正向提词框和反向提词框,简单理解就是你想要什么和你不想要什么: 提词框内的内容需要输入英文,它本身支持自然语言的,但还是建议用逗号分隔的一个个的关键词来写。 例如一只狗站在草地上,我们可以写成:A dog standing on the grass: 但是建议写成1dog,stand,grass,主要是方便我们后期加入或修改提示词或者调整权重。 右侧的生成按钮就不用说了,下面的第一个小箭头鼠标停止在上面就会有功能提示。 可以将例如你在C站上复制的生成信息直接填写到对应的栏位包括采样等,如果当前你的提词框为空则填入上一次的内容。 这个我们后面再说,旁边的垃圾桶按钮就是清空这些信息: 有时候我们会有一些常用的提词,可以按箭头处的保存将它保存为模板方便再次使用,另外两个分别是选择模板和填写模板: 另外秋叶的这个整合包是自动帮我们添加了一个通用起手式模板的,正向词是杰作、高质量,反向词翻译一下大概是这些: 由于我们用的是中文版的界面,所以红色方框的内容大家基本看都能看明白,这里只说简单说几个点: 采样迭代步数越高图像生成时间越长越贴近你的提词描述,但是过高反而会出错,通常20-30得手动尝试。 采样方法也就是采样器的算法这个也需要手动尝试,不同的采样方式效果也会有差异,比较常用的是DPM++。 宽度和高度也就是分辨率的选择。大多数模型使用512*512的图片训练的,推荐大家生成512*768。 提示词相关性CFG数值越高越接近你的提词信息,但是数值过高也会出错,同样需要手动尝试。

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日,Meta在官网上公布了旗下最新大模型Llama 3。目前,Llama 3已经开放了80亿(8B)和700亿(70B)两个小参数版本,上下文窗口为8k,据称,通过使用更高质量的训练数据和指令微调,Llama 3接受了超过 15 万亿个标记数据的训练——比 Llama 2 模型使用的训练数据集大七倍,其中包含四倍于 Llama 2 的代码数据,支持 8K 的上下文长度,是 Llama 2 的两倍。 现在,Meta 的 Llama 3 模型已在 Amazon Bedrock 中正式可用,本篇文章将浅要分析Llama 3模型特点,然后在Amazon Bedrock上使用Meta Llama 3 模型进行实践。 一、关于 Llama 3 在人工智能领域,性能的提升往往意味着技术的巨大进步,Llama 3的推出,正是这种进步的一个生动例证。与它的前身Llama 2相比,Llama 3在性能上实现了“重大飞跃”,这不仅仅是一个简单的比较,而是在多个维度上的全面超越。 Meta公司在Llama 3的训练程序上做出了显著改进,这些改进直接反映在了模型的性能上。错误拒绝率的降低意味着模型更加可靠,对齐度的提升则表明模型对输入数据的理解更加深入,而响应多样性的增加则为模型的应用提供了更广阔的空间。这些改进共同作用,使得Llama 3在推理、代码生成和指令跟踪等关键能力上都有了显著提高,极大地增强了模型的可操控性。 在具体的参数数量上,Llama 3 8B和Llama 3 70B在两个定制的24,000个GPU集群上的训练,不仅展示了Meta在硬件资源上的雄厚实力,也体现了其在软件优化上的深厚功底。这样的训练规模,使得Llama 3成为了当今性能最好的生成人工智能模型之一。 将视角转向人工智能基准测试,Llama 3的表现同样令人瞩目。Llama 3 8B在至少九个基准测试中超越了其他开放模型,如Mistral 7B和Google的Gemma 7B,这一成就充分证明了其卓越的性能;Llama 3 70B虽然未能超越Anthropic性能最高的机型Claude 3 Opus,但在MMLU、HumanEval和GSM-8K等五个基准测试上,它的得分却高于Claude 3系列中第二弱的模型Claude 3 Sonnet。 从两个模型的特点来说: Llama 3 8B 适合有限的计算能力和资源以及边缘设备。该模型擅长文本摘要、文本分类、情感分析和语言翻译。Llama 3 70B 适合内容创作、对话式AI、语言理解、研发和企业应用。该模型擅长文本摘要和准确性、文本分类和细微差别、情感分析和细微推理、语言建模、对话系统、代码生成和遵循指令。 此外,Meta 目前也正在训练参数超过 400B 的其他 Llama 3 模型。这些 400B 模型将具有新的能力,包括多模态、多语言支持和更长的上下文窗口。

Android studio Gradle下载失败,如何手动配置解决该问题详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 今天在打开公司一个项目时,突然要重新下载相关的gradle,不知道Android studio抽了什么风哈哈哈,但是一直提示下载失败,把项目根目录下的.gradle缓存删除也无济于事。 并提示以下错误 与此同时gradle版本下载一直失败。 解决方法:从Gradle官网下载对应的.zip压缩包。下载后不要解压,在C盘的个人用户目录下找到.gradle文件 Gradle官网下载可能也较慢,可以用腾讯云gradle镜像下载地址 阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/ 本人下载发现腾讯云Gradle镜像下载更快,用哪个其实都可以,看个人。 通过Android studio加载任何项目后,都会自动下载gradle,找到项目对应的gradle版本进去。 以下就是一个gradle下载失败的一个情况,具体步骤已在图片中给出。 按照上述步骤弄好,退出Android studio,重新加载该项目即可。 项目加载后,我们可以看到gradle压缩包已经被正常解压,这便是成功了。

Java---类和对象第一节

目录 1.面向对象初步认识 1.1什么是面向对象 1.2面向对象和面向过程的区别 2.类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.4类和对象的说明 3.this关键字 3.1访问本类成员变量 3.2调用构造方法初始化成员变量 3.3this引用的特性 4.对象的构造以及初始化 4.1就地初始化与默认初始化 4.2构造方法 4.2.1默认构造方法 4.2.2构造方法的特性: 4.2.3构造方法中,通过this调用其他构造方法 1.面向对象初步认识 1.1什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。 1.2面向对象和面向过程的区别 传统洗衣服: 传统洗衣服注重的是面向过程,也就是按照步骤一步一步实现,少一个步骤都不行 每一种衣服鞋子清洗的方式都不同,处理起来就比较麻烦 如果我们按这种方式去写代码,后期对代码的扩展和维护就比较麻烦 现代洗衣服: 现代洗衣服方式中总共有4个对象:人,衣服,洗衣液,洗衣机 洗衣服的过程:人将衣服和洗衣液放进洗衣机,启动洗衣机 在整个洗衣服的过程中,人,衣服,洗衣液,洗衣机这4个对象交互完成了洗衣服这件事,而人并不需要关系衣服是怎么被搓干净和拧干净的 以面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。 注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。 2.类的定义和使用 2.1简单认识类 类是对一个实物(对象)的属性以及功能进行描述的 对比于现实生活中产品的说明书 在这个说明书里有产品的属性:产品名称,产品部件,型号等等 产品的功能:使用方法,安装,拆卸,清洁 2.2类的定义格式 java中定义一个类需要用到class关键字 class ClassName{ //ClassName为类名 field; // 字段(属性) 或者 成员变量 method; // 行为 或者 成员方法 } 类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类 具有哪些功能,称为类的成员方法。 定义一个洗衣机的类 class Washer{ public String name; //名称 public int size; //大小 public String model; //型号 public String color; //颜色 public void function1(){ //洗衣功能 System.

【学一点儿前端】vue3+vite不能使用require引入包的问题(require is not defined)

问题 今天本来想简单敲个码,结果遇到一个报错:require is not defined 原因 查了各方资料,原因如下: 前端有很多的工具包是commonjs的写法,只能用require引入,而vite+vue3构建的项目不能使用require,只能用import,为了能够方便地引入commonjs工具包,我们需要把这些工具包转为es module。 解决方案(vite2方案,下面有vite3方案) 使用 @rollup/plugin-commonjs 插件,用于将CommonJS模块转换为ES6模块的Rollup插件. 1、安装@rollup/plugin-commonis 插件 终端中输入 npm i @rollup/plugin-commonjs 2、在vite.config.ts配置中添加该插件,注意 commonjs0必须在vue()上面,否则不生效 import commonjs from '@rollup/plugin-commonjs'; const plugins = [ commonjs() as any,// 要放在第一行,否则不生效 ]; 3、随意导入commonjs工具包 import SoftAlgorithm from '../SDK/soft-algorithm-min.js'; console.log('🚀 ~ SoftAlgorithm1111:', SoftAlgorithm); 结果 引入成功 附加:vite3 方案 前面我们使用的方法仅适用于vite2版本,我们还有另外一个vite3项目,但在最新的vite3中由于vite底层有改变,导致rollup/plugin-commonjs 不能正常使用,vite3可使用以下方案。 直接使用 vite-plugin-commonjs 1、安装vite-plugin-commonjs 插件 终端中输入 npm i vite-plugin-commonjs 2、在vite.config.ts配置中添加该插件,注意 commonjs0必须在vue()上面,否则不生效 import commonjs from 'vite-plugin-commonjs'; const plugins = [ commonjs() as any,// 要放在第一行,否则不生效 ]; 参考资料 vite-plugin-commonjs 使用

spring boot3多模块项目工程搭建-下(团队开发模板)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 上文衔接 Common模块 DAO模块 Service模块 Web模块 API模块 写在最后 写在前面 本文介绍了springboot开发后端服务,多模块项目工程搭建,各模块的常用依赖整合以及目录结构创建。坚持看完相信对你有帮助。 同时欢迎订阅springboot系列专栏,持续分享spring boot的使用经验。 上文衔接 上文链接: ​​​​​​spring boot3多模块项目工程搭建-上(团队开发模板)_多个module的springboot3项目配置-CSDN博客https://blog.csdn.net/qq_62262918/article/details/138279618?spm=1001.2014.3001.5501https://blog.csdn.net/qq_62262918/article/details/138279618?spm=1001.2014.3001.5501上文已经初步搭建spring boot多模块聚合工程,并成功运行。下面开始各模块目录结构搭建,常用依赖整合。 Common模块 本模块主要放通用工具类和方法,通用配置,异常处理,常量定义,实体类,公共组件,自定义注解等。 目录结构示例: 常用依赖: <!-- 引入lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- 引入参数校验依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- 引入jwt依赖 --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <!-- 如果jdk大于1.8,则还需导入以下依赖 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> 具体依赖根据项目实际添加 DAO模块 本模块负责与数据库进行交互,执行数据访问操作,主要放mapper和实体类 目录结构示例: 常用依赖: <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.5</version> <exclusions> <exclusion> <groupId>org.

苹果将在iPhone上安装ChatGPT;中国大模型团队首登ICLR演讲 | AI 头条

整理 | 王轶群 出品 | AI 科技大本营(ID:rgznai100) 一分钟速览新闻点! OpenAl 开发 AI 语音助手以赶超 Google 和 Apple Apple 即将与 OpenAI 达成协议,在 iPhone 上安装 ChatGPT 中国大模型团队首度登上 ICLR 主旨演讲,智谱AI 分享面向 AGI 三大技术趋势 Debian Linux 取消人工智能贡献政策 云 GPU 提供商 CoreWeave 在伦敦开设了其欧洲总部,新一轮融资中估值达190亿美元 软银愿景基金的美国投资组合已缩水近290亿美元,孙正义计划进军人工智能和芯片领域 通义千问2.5已正式上线网页端,其开源大模型下载量已经超700万 全球 AI 要闻 OpenAl 开发 AI语音助手以赶超 Google 和 Apple OpenAI 宣布将于太平洋时间5月13日上午10点进行直播,演示“一些 ChatGPT 和 GPT-4 更新”,Sam Altman 称这些更新“不是GPT-5,不是搜索引擎”。 在人工智能交流领域的竞赛中,OpenAl正准备向公众展示一项新技术,这种技术能够通过声音及文字与人类交流,并能识别物体与图像。根据两位已经见过新版 Al 的人士透露,这家 ChatGPT 的开发者已向部分客户展示了其包括优于现产品的逻辑推理能力在内的多项新能力。 这项技术是 OpenAl 首席执行官 Sam Altman 旨在最终开发出类似于 Spike Jonze 电影《她》中虚拟助手那样的高度响应性 Al的重要一步,也是旨在让现有的语音助手,比如 Apple 的 Siri,变得更加实用的尝试。该公司有望在下周一的某个活动中首次公开展示这种升级后的 AI,此举有助于它在Google 下周晚些时候发布一系列 AI新闻之前抢得先机。(9to5google、The Information)

FloodFill算法---BFS

目录 一、前言 二、算法模板套路 2.1 创建所需的全局变量: 2.2 BFS模板: 2.3 细节处理: 三、例题练习 3.1 例题1:图像渲染 3.2 例题2:岛屿数量 3.3 例题3:岛屿的最大面积 3.4 例题4:被围绕的区域 一、前言 在这之前我们已经学习了如何使用 DFS 解决 FloodFill 算法,如果有友友对 FloodFill 算法不太熟悉的话可以先看看我之前写的文章:FloodFill算法---DFS。里面详细介绍了什么是FloodFill算法和如何使用DFS来解决。通常 FloodFill 算法使用 DFS 或者 BFS 都可以,DFS 的代码会简洁一些,但是 BFS 可以用来解决最短路问题和拓扑排序。所以本文章可以说是为了后续使用 BFS 解决最短路问题和拓扑排序打下基础。 • 关于BFS的遍历特性:若初始点为左上角,遍历特性如下图所示。 二、算法模板套路 2.1 创建所需的全局变量: 最好设置为静态,因为非静态只有在leetcode上才行,在竞赛中都是要我们自己写Main类的因为main是静态方法所以在方法外面的全局变量要设置为静态的才能被main方法调用。 static boolean[][] vis;//( 不一定要有) static int[ ] dx = {0 , 0 , 1 , -1 }; static int[ ] dy = {1 , -1 , 0 , 0 }; • vis这个布尔类型数组来标记我们已经走过的路,防止重复走导致死循环:

【MySQL数据库】初步认识数据库,实现基本操作

在信息爆炸的今天,数据无处不在,它们构成了互联网世界的基石。但数据本身若未经有效组织和管理,就如同散落在沙滩上的珍珠,难以发挥其真正的价值。这时,“数据库”这一概念便如同一根线,将这些珍珠串联起来,使之成为璀璨的项链。本文将带您初步认识数据库,了解其基本概念、发展历程、主要职能及重要作用。 ⚗️ 一.数据库 数据库(Database)是一种用于存储、管理和检索数据的系统,它允许用户以结构化方式组织、存储和检索大量信息。在数字时代,数据库是几乎所有软件应用和服务的基石,支撑着从简单的网站到复杂的业务系统和数据分析平台的数据管理需求。 🧪1.定义 数据库可以被形象地比喻为电子化的文件柜,但它远比传统文件管理更加高效和灵活。它不仅仅是一个存放数据的地方,更是一个包含了一系列规则、方法和程序的综合系统,用于确保数据的准确、安全、高效访问。 🧫2.特点 结构化: 数据库中的数据按照特定的结构(如表格、键值对等)组织,这有助于高效地存储和查询信息。最小冗余度: 通过规范化等手段减少数据重复,确保每个数据元素只存储一次,提高存储效率和数据一致性。数据独立性: 数据的存储方式与应用程序分离,这意味着数据结构的变化不会影响到应用程序的正常运行。共享性: 多个用户或应用程序可以同时访问数据库中的数据,支持协同工作和资源共享。安全性: 数据库管理系统(DBMS)提供访问控制、加密等手段,保护数据免受未经授权的访问和修改。 🧬3.数据库的组成部分 数据: 实际存储的信息。数据库管理系统(DBMS): 负责创建、维护和管理数据库的软件,如MySQL、Oracle、SQL Server等。(我们学习的主体)应用程序: 访问数据库并执行数据操作的前端软件。数据库管理员: 负责设计、监控和维护数据库的专业人员。 🔬4.数据库的历史(了解) 以下内容为拓展内容,不感兴趣可以直接跳过 数据库技术的发展历程是信息技术领域一个充满创新和变革的领域,它伴随着计算机科学的进步和数据管理需求的不断增长而演变。下面是一段详尽的数据库历史概述: 早期数据管理(1950s-1960s) 在数据库技术正式诞生之前,数据主要通过手工或简单的文件系统管理。20世纪50年代,随着计算机的商业化应用,数据处理开始自动化,但仍然是以文件形式存储,缺乏统一的管理标准和数据共享能力。 层次与网状模型(1960s) 1960年代见证了数据库技术的初步形成。IBM的IMS(Information Management System)是最早的商业数据库系统之一,它采用了层次模型,数据以树状结构组织,适合展现一对多关系。几乎同时,CODASYL(Conference on Data Systems Languages)委员会提出了网状模型,数据间的关系更为灵活,可以有多对多的关系,但两者都存在数据冗余和复杂性的问题。 关系模型的诞生(1970s) 1970年,埃德加·科德(Edgar F. Codd)在论文《大型共享数据库数据的关系模型》中首次提出了关系模型,这是数据库技术史上的一个里程碑。关系模型基于集合论和关系代数,将数据视为表的集合,强调数据的独立性、结构化查询语言(SQL)的使用,以及数据的一致性和完整性。随后,Oracle、IBM的DB2和Ingres等关系型数据库系统相继问世,标志着关系数据库时代的到来。 关系型数据库的黄金时期(1980s-1990s) 1980年代至1990年代,随着个人电脑和企业计算的普及,关系型数据库系统迅速发展,成为行业标准。SQL成为查询数据库的标准语言,数据库管理系统(DBMS)的性能和功能得到显著增强,支持了更多复杂的应用场景,如事务处理、数据仓库等。 面向对象数据库(1990s) 随着面向对象编程的兴起,面向对象数据库(OODBMS)试图将面向对象的特性与数据库技术结合,支持复杂对象的存储和继承关系,但未能广泛替代关系型数据库,主要因为性能和兼容性问题。 NoSQL与大数据时代(2000s至今) 进入21世纪,互联网和移动设备的爆炸性增长带来了数据量的激增,传统关系型数据库在处理大规模、高并发、非结构化数据时面临挑战。因此,一系列非关系型数据库(NoSQL)应运而生,如MongoDB、Cassandra、HBase等,它们放弃了严格的表结构,提供了更灵活的数据模型,支持水平扩展,能够更好地适应大数据和实时分析的场景。 新兴趋势(2010s-至今) NewSQL:为了解决关系型数据库扩展性问题,NewSQL数据库如Google的Spanner、Amazon Aurora等出现,旨在结合关系数据库的ACID属性和NoSQL的可扩展性。云数据库:随着云计算的普及,云数据库服务如AWS RDS、Azure SQL Database、Google Cloud SQL等提供托管的数据库解决方案,降低了运维成本,提高了灵活性。多模态数据库:为了应对复杂的数据处理需求,一些数据库系统开始支持多种数据模型,如文档、图形、键值等,以满足不同类型的应用场景。AI集成数据库:近年来,数据库与人工智能技术的融合成为趋势,通过机器学习算法优化查询性能、自动管理和调优数据库等。 数据库技术的发展是一个持续演进的过程,随着技术的不断进步和社会需求的不断变化,未来数据库领域预计将继续涌现更多创新技术和应用。 🔭5.数据库的作用 存储和管理数据: 集中存储数据,减少数据混乱和丢失的风险。数据访问和检索: 快速、准确地查找所需数据。数据共享: 支持多用户同时访问,促进信息交流与合作。数据安全与保护: 通过访问控制、备份与恢复等机制保障数据安全。业务支持与决策辅助: 为企业提供运营数据支持,辅助决策制定。数据分析与挖掘: 作为大数据分析的基石,支持复杂的数据处理和洞察发现。 总之,数据库是现代信息社会的基础设施之一,它使得数据能够被有效地组织、保护和利用,是推动技术创新和业务增长的关键因素。 📡二.认识MySQL 在当今这个数据驱动的时代,MySQL作为一款广泛使用的开源关系型数据库管理系统(RDBMS),在互联网应用、企业级系统以及大数据处理等多个领域扮演着至关重要的角色。本文将带领您深入了解MySQL的奥秘,从其起源、特点、核心优势,到应用场景及未来发展,全方位剖析这款数据库界的明星产品。 🍇1.起源与现状 MySQL的故事始于1995年,由Michael Widenius和David Axmark在瑞典共同开发。起初,它是为了解决两位创始人所在公司内部的数据库需求而诞生的。随着时间的推移,MySQL凭借其开源、免费、高性能和易用性,迅速在全球范围内获得了广泛的认可和应用。2008年,MySQL被Sun Microsystems收购,随后Sun又被甲骨文(Oracle)公司收购,但MySQL的开源精神一直得以延续。 🍈2.MySQL的核心特点 开源免费:MySQL遵循GPL协议,为用户提供了零成本获取和使用的可能性,这也是其迅速普及的重要原因之一。高性能:MySQL经过不断优化,能够在高并发环境下提供稳定的性能表现,支持大规模数据存储和快速查询。跨平台性:支持Windows、Linux、macOS等多种操作系统,便于在不同环境下的部署和迁移。丰富的数据类型与存储引擎:MySQL支持多种数据类型,满足不同场景的需求;同时,通过选择不同的存储引擎(如InnoDB、MyISAM),用户可以根据应用场景优化性能。安全性:提供强大的安全性特性,包括SSL连接、访问控制、数据加密等,确保数据的安全传输和存储。强大的社区支持:MySQL拥有庞大的用户和开发者社区,这意味着丰富的资源、教程、第三方工具以及及时的技术支持。 🍉3.

Java 【数据结构】 TreeSet&TreeMap(二叉搜索树详解)【神装】

登神长阶 第八神装 TreeSet 第九神装 TreeMap 目录 💉 一.二叉搜索树 🩸1. 定义 💊2. 基本操作 🩹3. 插入操作 🩼4. 查找操作 🩺5. 删除操作* 🩻6. 遍历操作 🪒7.性能分析 🪥二.TreeSet 🧽1. 定义 🧻 2.操作 🪣3. Set主要特性 🫧4. TreeSet的内部实现 🛒5. 应用场景 🧯三.TreeMap 🧹1.定义 🪤2.操作 🧷3.Map的主要特性 🧿4. TreeMap的内部实现 🪬5.应用场景 🗿四.总结与反思 💉 一.二叉搜索树 首先我们要知道TreeSet/TreeMap底层都采用的都是一种二叉搜索树(也叫自平衡二叉树),因此我们先来了解一下二叉搜索树。 对于他的学习若之前没有了解的可以参考:Java 【数据结构】 二叉树(Binary_Tree)【神装】 🩸1. 定义 二叉搜索树(Binary Search Tree,简称BST),是一种特殊的二叉树,它具有以下性质: 每个节点都有一个键(Key)和两个指向其他节点的指针(左子指针和右子指针)。任意节点的左子树中的所有键都小于该节点的键。任意节点的右子树中的所有键都大于该节点的键。左右子树也都是二叉搜索树。不存在键值相等的节点。 在Java中,我们可以这样定义一个二叉搜索树: public class BinarySearchTree { private class Node { int val; Node left; Node right; Node(int val) { this.

网上跳蚤市场|基于SSM+vue的网上跳蚤市场系统的设计与实现(源码+数据库+文档)

网上跳蚤市场系统 目录 基于SSM+vue的网上跳蚤市场系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台登录模块 5.2.1管理员功能 5.2.2会员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 基于SSM+vue的网上跳蚤市场系统的设计与实现 一、前言 网上跳蚤市场能够通过互联网得到广泛的、全面的宣传,让尽可能多的用户了解和熟知网上跳蚤市场的便捷高效,不仅为群众提供了服务,而且也推广了自己,让更多的群众了解自己。对于商品交易而言,若拥有自己的系统,通过系统得到更好的管理,同时提升了形象。 本系统设计的现状和趋势,从需求、结构、数据库等方面的设计到系统的实现,分别为管理员和会员的实现。论文的内容从系统的设计、描述、实现、分析、测试方面来表明开发的过程。本系统根据现实情况来选择一种可行的开发方案,借助java编程语言和MySQL数据库等实现系统的全部功能,接下来对系统进行测试,测试系统是否有漏洞和测试用户权限来完善系统,最终系统完成达到相关标准。 关键字:网上跳蚤市场;java;MySQL数据库 二、系统设计 系统功能结构如图 三、系统功能设计 1系统功能模块 基于HTML5的网上跳蚤市场系统,在系统首页可以查看首页,商品信息,求购信息,留言板,个人中心,后台管理,购物车,在线客服等内容,并进行详细操作;如图5-1所示。 图5-1系统首页界面图 2后台登录模块 后台登录,管理员和会员进入系统前在登录页面根据要求填写账号,密码和选择角色等信息,点击登录进行登录操作,如图5-5所示。 图5-5后台登录界面图 5.2.1管理员功能 管理员登陆系统后,可以查看首页,个人中心,会员管理,商品分类管理,商品信息管理,求购信息管理,留言板管理,系统管理,订单管理等功能,还能对每个功能逐一进行相应操作,如图5-6所示。 图5-6管理员功能界面图 5.2.2会员功能 会员登陆系统,可以查看首页,个人中心,求购信息管理,留言板管理等功能,还能对每个功能逐一进行相应操作,如图5-12所示。 图5-12会员功能界面图 四、数据库设计 (1) 用户注册E/R图如下所示: 图4-2用户注册E/R图 数据库表的设计,如下表: 4-1:订单 字段名称 类型 长度 字段说明 主键 默认值 id bigint 主键 主键 addtime timestamp 创建时间 CURRENT_TIMESTAMP orderid varchar 200 订单编号 tablename varchar 200 商品表名 shangpinxinxi userid bigint

【MySQL】sql表设计的注意事项

程序员的实用神器 文章目录 程序员的实用神器强烈推荐引言注意事项强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 推荐一个个人工作,日常中比较常用的人工智能工具,无需魔法,忍不住分享一下给大家。点击跳转到网站:人工智能工具 引言 在数据库设计中,表设计是至关重要的一环。 一个良好设计的数据库表结构能够有效地支持系统的功能需求,提高数据的存储效率和查询性能,确保数据的完整性和安全性。 然而,表设计并非一蹴而就,需要考虑诸多因素,包括数据类型选择、约束条件定义、索引设计等等。 本文将介绍表设计中需要注意的十八个关键点,并通过简单的例子加以说明,帮助读者深入理解数据库表设计的要点。 注意事项 1.确定表的目的: 确保表的设计符合系统需求,例如,设计一个学生信息表用于存储学生的基本信息。 -- 示例:创建一个学生信息表 CREATE TABLE Students ( StudentID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Age INT ); 2.选择适当的数据类型: 根据数据的性质选择合适的数据类型,例如,学生的年龄可以使用整数型数据类型。 -- 示例:选择适当的数据类型 CREATE TABLE Students ( StudentID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Age INT ); 3.唯一性约束: 确定需要唯一性约束的字段,例如,学生的学号应该是唯一的。 -- 示例:添加唯一性约束 CREATE TABLE Students ( StudentID INT PRIMARY KEY, Email VARCHAR(100) UNIQUE, FirstName VARCHAR(50), LastName VARCHAR(50) ); 4.

【Python】常见的第三方库及实例

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 库介绍 Python是通过模块来体现库,常见的有标准库和第三方库。 标准库是Python自带的库,在官方文档中可以查看第三方库是其他大佬做出来的。 库的优点: 降低程序员的学习成本提高程序的开发效率 常见库 datetime 我们放在日期管理器中为例: 根据日期构造出datetime类型变量把两个变量进行相减,得到的结果即为所求 datetime.datetime(年,月,日) 第1个datetime是模块,第2个是具体类型 但这样容易引起误会,可以直接导入模块中的类型吗? 可以的,只要在开头声明 from 模块 import 类型. 又或者直接将模块名改一下: import datetime as 改的变量名. 第2个常见的库,我们以字符串的转置字符为例,具体体现: 1.字符串split 的方法可以指定分隔符,把字符串分为多个部分放到一个list里2.针对逆序可以用reverse方法3.再把逆序的列表用join方法组合起来 例:" “(” "里面填入字符) 这个是字符串表示每次拼接后以什么结束.join(变量) 加大难度:查找是否前缀相同的字符串 遍历整个列表,取列表中每个字符串判断当前字符串是否是target的前缀就行了. 这里要用到startswitch方法,可以判断是不是相同开头的 endswitch方法可以判断是不是相同结尾,而in则可以查看这些这个target是不是在里面的. 加大难度: 很多目录很多文件,请实现一个文件管理器 这里要用到 Os.walk()Os是模块,操作系统的模块。 walk()表示是循环路径. Os walk每次调用都能自动的去针对子目录进行递归操作,只需要使用上述循环就可,已把所有路径找出来. 这里上述例子用到的都是标准库,然后第三方库备pypl官方网站集合了起来,相当于Python世界中的应用商店 而pip工具是 pypl的一个句柄,在Python安装的过程中就已经下载好了,成为了命令行程序. 点击控制台下方的terminal,使用命令pip install[库名] 安装后记得导入模块名哦 这里说着很空洞,直接举个例子生成二维码 本质就是字符串,而生活中的二维码更多的是一个URL网址 import qrcode strings = qrcode.make("你好呀!祝你好好学习,天天向上") strings.save("test.png") 当运行的时候发现它没有消息的时候,往往no news is good news,没有消息就是最好的消息。 对了,其实可以把博客的链接弄成二维码放在简历上,这样面试官可以拿手机扫一下,可以看出您很用心哦 心得感悟: 网址上的一些代码在自己的程序中不一定运行起来,可能是它代码本身就是错误的,因为没人验证,第2个可能是它的运行软件版本不同,也可能造成运行不成功。

【Spring Boot】 深入理解Spring Boot拦截器:自定义设计与实现全攻略

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】 深入理解Spring Boot拦截器:自定义设计与实现全攻略 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 SpringBoot统⼀功能处理一. 什么是拦截器?二. 拦截器执行流程三. 拦截器3.1 定义拦截器3.2 注册配置拦截器3.3 拦截路径的配置 SpringBoot统⼀功能处理 一. 什么是拦截器? 需要修改每个接口的处理逻辑需要修改每个接口的返回结果接口定义修改,前端代码也需要跟着修改 有没有更简单的办法,统⼀拦截所有的请求,并进行Session校验呢,这里我们学习⼀种新的解决办法:拦 截器 拦截器是Spring框架提供的核心功能之⼀,主要用来拦截用户的请求,在指定方法前后,根据业务需要执 行预先设定的代码.也就是说,允许开发⼈员提前预定义⼀些逻辑,在用户的请求响应前后执行.也可以在用户请求前阻止其执行. 在拦截器当中,开发⼈员可以在应用程序中做⼀些通用性的操作,比如通过拦截器来拦截前端发来的 请求,判断Session中是否有登录用户的信息.如果有就可以放行,如果没有就进行拦截. 二. 拦截器执行流程 正常的调用顺序: 有了拦截器之后,会在调用Controller之前进行相应的业务处理,执行的流程如下图 添加拦截器后,执行Controller的方法之前,请求会先被拦截器拦截住.执行 preHandle() 方法, 这个方法需要返回⼀个布尔类型的值.如果返回true,就表示放行本次操作,继续访问controller中的 方法.如果返回false,则不会放行(controller中的方法也不会执行). controller当中的方法执行完毕后,再回过来执行 postHandle() 这个方法以及 afterCompletion() 方法,执行完毕之后,最终给浏览器响应数据. 三. 拦截器 拦截器的基本使用. 拦截器的使用步骤分为两步: 定义拦截器注册配置拦截器拦截器的拦截路径配置 3.1 定义拦截器 自定义拦截器:实现HandlerInterceptor接口,并重写其所有方法 @Slf4j @Component public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler) throws Exception { log.info("LoginInterceptor 目标方法执行前执行.."); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndView modelAndView) throws Exception { log.

深度解析Nginx:高性能Web服务器的奥秘(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、Nginx概述 二、Nginx核心功能 1、URL重写与重定向 2、反向代理 3、负载均衡 4、访问控制 5、SSL/TLS配置 三、Nginx模块讲解 1、HTTP模块 2、Stream模块 四、Nginx实际应用 1、Nginx在Web开发中的应用 2、Nginx在CDN中的应用 一、前言 1、Nginx概述 Nginx("engine x"的发音类似于"引擎 X")是一款高性能的开源Web服务器和反向代理服务器,由Igor Sysoev创建,并于2004年首次公开发布。它以其卓越的性能、高度的可靠性、简单的配置和低资源消耗而闻名。 以下是Nginx的概述: 高性能:Nginx以其高效的事件驱动架构而闻名,能够处理大量并发连接和高流量。它使用异步非阻塞I/O模型,有效地处理客户端请求,并且在高负载下表现优异。反向代理:Nginx作为反向代理服务器时,可以接收客户端的请求并将其转发给后端服务器。它能够进行负载均衡、缓存静态内容、处理SSL终止等操作,提高了Web应用程序的性能和可靠性。负载均衡:Nginx可以将请求分发给多个后端服务器,以实现负载均衡。通过配置不同的负载均衡算法,例如轮询、IP哈希、最少连接等,可以根据不同的需求实现请求的合理分发。静态文件服务:Nginx非常擅长提供静态文件服务,能够高效地提供HTML、CSS、JavaScript、图像等静态内容,并且支持文件压缩和HTTP缓存等功能。反向代理缓存:Nginx可以缓存后端服务器返回的响应,以减轻后端服务器的负载并提高响应速度。它支持不同类型的缓存,包括文件缓存、内存缓存和代理缓存等。HTTPS支持:Nginx支持SSL/TLS协议,能够进行HTTPS加密通信,并且支持SSL终止、SSL重定向、证书验证等功能,保障了Web应用程序的安全性。简单配置:Nginx的配置文件采用简洁直观的语法,易于理解和维护。它支持模块化配置,可以通过加载不同的模块来扩展其功能,满足不同的需求。高度可扩展:Nginx是一个模块化的Web服务器,可以通过加载不同的模块来扩展其功能,例如HTTP反向代理、负载均衡、缓存、安全性等。这使得Nginx可以根据不同的需求进行定制和扩展,适用于各种规模和类型的Web应用程序。 二、Nginx核心功能 1、URL重写与重定向 在 Nginx 中,URL 重写和重定向是常见的任务,用于处理客户端请求并将其发送到适当的位置。它们经常用于修改 URL 结构、处理旧 URL、执行 URL 路由等。 下面是 Nginx 中的 URL 重写和重定向的概念和用法: URL 重写(URL Rewriting) URL 重写是指修改客户端请求的 URL 路径,而不改变客户端看到的 URL。这个过程通常在 Nginx 的配置文件中通过 rewrite 指令来完成。URL 重写可以用于修改 URL 结构、处理错误的 URL 请求等。 例如,假设想要将所有 /old-url 的请求重写到 /new-url,可以使用如下配置: location /old-url { rewrite ^/old-url/(.*)$ /new-url/$1 permanent; } 这个配置中的 rewrite 指令将匹配以 /old-url 开头的 URL,然后将其重写为以 /new-url 开头的 URL,并使用 permanent 关键字表示这是一个永久重定向。重定向后的 URL 将保留原始的查询参数。 URL 重定向(URL Redirection)