自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 收藏
  • 关注

原创 【高频】redis快的原因

相关问题:1.为什么Redis能够如此快速地进行数据存储和检索?2.Redis作为内存数据库,其内存存储有什么优势吗?3.Redis的网络模型有何特点,如何帮助提升性能?

2024-05-29 22:11:47 1576

原创 get和post的区别,二者是幂等的吗?

所谓幂等性通俗的将就是一次请求和多次请求同一个资源产生相同的副作用。维基百科定义:幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。

2024-05-24 23:03:08 1286

原创 【高频】从输入URL到页面展示到底发生了什么?

浏览器输入美团网站,从回车到浏览器展示经历了哪些过程?http输入网页之后的流程?百度搜索页面,从点开搜索框,到显示搜索页面经历了什么?

2024-05-24 22:46:41 1193

原创 说说什么是AOP,以及AOP的具体实现场景(外卖中应用)

面向切面编程,是面向对象编程(OOP)的一种增强模式,可以将项目中与业务无关的,却为业务模块所共同调用的非核心代码封装成(比如事务管理、日志管理、权限控制等等)一个个切面,然后在运行的时候通过动态代理或者CGLib代理的方式织入到核心业务功能中。场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )【总结:AOP就是基础代码的增强,将非核心的代码抽取出来,封装成切面,进行复用】场景二: 监控方法运行时间 (监控性能)

2024-05-23 23:10:41 1293

原创 事务的ACID是什么及扁平化事务、链式事务

1.事务(Transaction)是区别于数据库文件系统的重要特性之一。事务会把数据库从一种一致状态转换为另一种一致状态。在数据库提交工作时,可以确保要么所有修改都已经保存,要么所有修改都不保存。2.InnoDB存储引擎中的事物完全符合ACID的特性。原子性(atomicity)一致性(consistency)隔离性(isolation)持久性(duration)3.事务是访问并更新数据库中各种数据项的一个程序执行单元。在事务中的操作,要么都做修改,要么都不做,这就是事物的目的。

2024-05-23 22:55:10 763

原创 缓存三问与缓存预热-如何预防缓存崩溃

缓存预热是一种在应用程序启动或缓存失效之后,主动将热点数据加载到缓存中的策略。时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是。,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没办法构建缓存数据,来服务后续的请求。了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是。

2024-05-21 16:04:28 983

原创 深入了解布隆过滤器:数据筛选的利器

布隆过滤器(英语:Bloom Filter)是1970年由伯顿·霍华德·布隆(Burton Howard Bloom)提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。如果布隆过滤器判断元素在集合中存在, 不一定存在.如果布隆过滤器判断不存在, 则一定不存在.

2024-05-21 15:16:37 731

原创 十大排序算法(java实现)

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。【冒泡、插入、选择、、归并排序面试中出现概率极高】

2024-05-10 21:51:01 1011

原创 Failed to load local image resource Xx the server responded with a status of of 500 (HTTP/1.1 500)

4.比如images是图片目录,必须把它放置在和pages(系统设定的页面目录)同级的位置;如果images和项目的根目录同级,就无法加载images中的图片。【其实看似是很小的问题,因为初学就会发生各种意想不到的错误,因此细心多检查就行】3.错误写法: imgSrc: 'img\首页1.png' ,正确写法:imgSrc: '/img/首页1.png'1.直接使用../lutos.jpg 在使用相对路径时,看似没有太大问题,但是文件夹层数过多,也会报错。

2024-04-20 17:37:33 626

原创 关于如何打开IIS管理器

在进行web实验时,通过“选择”——“控制面板”——“系统和安全”——“管理工具”——“Internet信息服务(IIS)管理器”命令,无法正确找到IIS管理器。

2024-04-19 13:09:25 1958

原创 java: 警告: 源发行版 17 需要目标发行版 17,java17 无效的目标发行

注:确定springboot版本和jdk版本是否匹配。使用的是jdk8就更改 SpringBoot依赖 版本为3.x.x以下,版本,idea用2022.1以上,才有JDK 17。:启动类是,无法启动,控制台报错:java: 警告: 源发行版 17 需要目标发行版 17。注:一定要先点右下角 Appaly 再点击 OK!注:因为我本地安装的是jdk8,因此所有都调整成8,也可以直接调整成jdk17。注:一定要先Apply!

2024-04-11 23:20:30 6454 2

原创 解决“hint: the same ref. If you want to integrate the remote changes, usehint: ‘git pull‘ before pus”

具体场景描述:之前已经建好了仓库,提交过基础代码,时隔很久,继续推送新代码时,出现了问题,报错信息如下。提示:在工作树中修复它们,然后使用'git add/rm <file>'提示:详见“git push—help”中的“关于快进的说明”。这通常是由于另一个存储库推送到完成。如果要集成远程更改,请使用。错误:无法提取,因为您有未合并的文件。原因总结:需要先pull 再push。返回如下信息,本地和远程仓库联系正常。致命的:因为未解决的冲突而退出。提示:适当标记解决并提交。提示:再推之前先拉一下。

2024-04-11 23:15:55 1092

原创 苍穹外卖亮点再梳理 ||

redis是用C语言开发的一个高性能键值对数据库,官方提供的数据可以达到100000+的QPS(每秒内查询次数);9.Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。11.Apache ECharts: 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。6.文件上传实现,有三种实现方法:①直接将图片保存到服务的硬盘②使用分布式文件系统进行存储③使用第三方的存储服务(OSS)这里采用阿里云的OSS。

2024-04-09 22:48:10 1684

原创 for循环和while循环

for循环和while循环时间和空间消耗的差异,更多地取决于循环体内部的代码逻辑而不是循环结构本身。在实际情况中,具体的时间和空间消耗可能会因为循环的结构、循环体内的代码逻辑、编译器优化等因素而有所不同。

2024-04-09 22:43:11 490

原创 常见的加密方式总结(哈希算法、对称、非对称)

哈希算法是一种用数学方法对数据生成一个固定长度的唯一标识的技术,可以用来验证数据的完整性和一致性,常见的哈希算法有 MD、SHA、MAC 等。对称加密算法是一种加密和解密使用同一个密钥的算法,可以用来保护数据的安全性和保密性,常见的对称加密算法有 DES、3DES、AES 等。非对称加密算法是一种加密和解密使用不同的密钥的算法,可以用来实现数据的安全传输和身份认证,常见的非对称加密算法有 RSA、DSA、ECC 等。

2024-04-06 21:52:52 5315

原创 如何解决“你的连接不是专用连接攻击者可能试图从 localhost 窃取你的信息(例如,密码、消息或信用卡)”

如果工作目录在IIS服务器主目录下,展开<默认网站>节点,选中工作目录,右键选择 属性菜单,在属性设置窗口的 目录 tab页中 创建应用程序,并设置相应的权限即可。解决方法:打开IIS服务器控制台,展开<应用程序池>节点,设置你的虚拟目录使用的应用程序池(在属性窗口的目录tab页上可以看到)。给当前应用程序池的属性的标识tab页中,预定义帐户改为使用配制项,在配置项中制定一个权限比较高的用户,启动该进程已进行调试。综上方法,均没有试过。1.原因:VS找不到浏览器的启动程序,重新设置默认浏览器即可。

2024-04-06 20:26:57 12942 1

原创 用python爬取CSDN博客的总字数

5、搜索需要的库,然后点击 "install package";除上述操作外,还可以将鼠标放在代码中的红色波浪线下,会弹出 install 的指令点击即可。print(f'博客字数:{get_csdn_blog_word_count(url)}')3、左侧选择 "project: ">"python interpreter";2、在菜单栏中,选择 "file">"settings";6、安装完成后,关闭对话框,点击 "ok" 保存设置即可。# 查找存放文章内容的标签。4、点击右上角的 "+" 按钮;

2024-03-22 20:47:57 944

原创 线程池相关详解

【如果核心或临时线程执行完成任务后会检查阻塞队列中是否有需要执行的线程,如果有,则使用非核心线程执行任务】执行的线程数量,达到限流的效果当一个线程执行时先通过其方法进行获取许可操作,获取到许可的线程继续执行业务逻辑,当线程执行完成后进行释放许可操作,未获取达到许可的线程进行等待或者直接结束。lsemaphore.acquire(): 请求一个信号量,这时候的信号量个数-1(一旦没有可使用的信号量,也即信号量个数变为负数时,再次请求的时候就会阻塞,直到其他线程释放了信号量)

2024-03-22 19:25:18 874

原创 Uncaught (in promise) Error: Request failed with status code 404 at createError (createError.js:

记录一个报错:Uncaught (in promise) Error: Request failed with status code 404 at createError (createError.js:16:1) at settle (settle.js:17:1) at XMLHttpRequest.onloadend (xhr.js:66:1)

2024-03-22 19:19:45 1645

原创 RentrantLock关键字详解

RenntrantLock实现了Lock接口,是一个可重入且独占式的锁。它更灵活、更强大,增加了轮询、超时、中断、公平锁和非公平锁等高级功能。ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似。构造方法接受一个可选的公平参数(默认非公平锁),当设置为true时,表示公平锁,否则为非公平锁。公平锁的效率往往没有非公平锁的效率高,在许多线程访问的情况下,公平锁表现出较低的吞吐量。

2024-03-21 20:57:29 852

原创 ConcurrentHashMap底层详解

在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于此产生了ConcurrentHashMap。

2024-03-21 20:53:32 882

原创 AOP切面编程

AOP(Aspect-Oriented Programming,面向切面编程),跟oop面向过程编程相对,AOP一般用于将公共逻辑和业务逻辑进行拆分,可以减少代码间的耦合性。

2024-03-21 20:51:24 511

原创 JWT令牌详解

JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。

2024-03-20 18:04:51 1122

原创 常见六大WEB安全问题

六大WEB安全问题

2024-03-20 17:59:36 1403

原创 @RequestBody、@RequestParm、@PathVariable三个注解的区别

1.requestParam(请求参数):使用@RequestParam注释将请求参数绑定到控制器中的方法参数。用于从请求访问查询参数值的@RequestParam注释。2.requestBody(请求体):使用@RequestBody方法参数注释表明方法参数应该绑定到HTTP请求体的值。3.PathVariable(路径变量):使用@PathVariable,URI模板可用于在@RequestMapping方法中方便地访问URL的选定部分。@PathVariable标识在传入请求的URI中使用的模式。

2024-03-20 17:52:35 713

原创 WebSocket相关知识

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。【应用场景:视频弹幕、网页聊天、体育实况更新、股票基金报价】

2024-03-20 17:48:59 890

原创 Knife4j的相关知识点!!

Knif4j(原名为 Swagger-Bootstrap-UI)是一款基于 Swagger 实现的文档管理工具,旨在简化接口文档的编写和管理。它提供了一套美观的界面,能够自动生成接口文档,并支持在线调试接口。Knif4j 是针对 Java 后端项目的接口文档管理工具,可以与 Spring Boot 等框架很好地集成使用。

2024-03-19 22:45:10 981

原创 权限设计种类【RBAC、ABAC】

ACL(Access Control List):每一个客体都有一个列表,列表中记录的是哪些主体可以对哪些客体做什么。缺点:当主体的数量较多时,配置和维护成本大,易出错。DAC(Discretionary Access control):是ACL的扩展,在其基础上,允许主体可以将自己拥有的 权限自主地授予其他主体,权限可以随意传递。缺点:权限控制比较分散,主体权限太大,有泄露信息的危险。 MAC(Mandatory Access Control):双向验证机制,常用于机密机构或

2024-03-19 22:41:34 2907

原创 Synchronized底层原理

synchronized 是 Java 中的一个关键字,用于控制多线程的访问,确保同一时刻只有一个线程可以进入临界区(被 synchronized 保护的代码块)。synchronized 的底层实现主要依赖于 JVM 中的 monitor 对象,它是通过对象监视器在对象头中的锁标志位实现的。当一个线程获取到了对象的监视器,那么这个线程就会处于锁定状态,其他尝试获取该监视器的线程将会被阻塞,直到当前线程释放锁。

2024-03-19 22:36:10 765

原创 出现文字:Stack Overflow requires cookies for authentication -- are your browser cookies enabled for this

出现文字:Stack Overflow requires cookies for authentication -- are your browser cookies enabled for this

2024-03-15 23:30:20 427

原创 深入理解JMM

JMM(java memory model)Java内存模型:是java虚拟机规范中定义的一组规范,用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让JAVA程序在各平台都能达到一致的并发结果。其主要规定了线程和内存之间的一些关系,并描述了和多线程相关的一组规范。它解决了CPU多级缓存、处理器优化、指令重排等导致的结果不可预期的问题。

2024-03-15 23:04:13 1072

原创 二叉树LC总结

/ 先序遍历中「从 左边界+1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素。// 先序遍历中「从 左边界+1+左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位+1 到 右边界」的元素。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出:[1,null,2,null,3,null,4,null,5,null,6]root = root.right;

2024-03-13 22:44:42 858

原创 JVM 重要知识梳理

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。(Mark-and-Compact)算法是根据老年代的特点提出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。,它同样是一个单线程收集器。2.元空间里面存放的是类的元数据,这样加载多少类的元数据不由MaxPermSize控制了,而由系统的实际可用空间来控制,这样能加载更多的类。

2024-03-13 16:04:40 1601

原创 出现“error: failed to push some refs to ‘https://github.com/****.git‘”,如何解决问题

经过不断查看别人的博客,分析问题:发现本地库确实与远程库内容不相符合。昨天在演示如何删除远程库中的文件时,采用的是直接在github仓库中,手动删除。因此本地库还未更新删除的操作,因此需要先“pull”使本地库与远程库内容一致,才可以继续推送。今天继续推送整理的知识点的时候,出现了一个报错。“error: failed to push some refs to 'https://github.com/.git'”,百思不得其解,之前推送的时候都可以轻松推送成功,如今却说本地库与远程库不一致。

2024-03-10 23:41:26 1057

原创 深入理解Debug断点调试技巧

在软件开发过程中,调试是一个非常重要的环节,而使用断点是提高调试效率的关键技巧之一。本文将深入探讨如何利用断点进行高效的调试,常用的快捷键以及一些常见的断点调试技巧。

2024-03-10 23:41:06 1957

原创 如何创建一个VUE3项目并使用Element UI插件

创建一个VUE3项目并使用Element UI插件

2024-03-05 22:32:30 500

原创 已经连接过github远程库,如何再次推送及删除远程库的内容

基于上次将文件推送到已经建好的github远程库上,此篇文章主要介绍如何再次推送文件去直接已经连接过的远程库,以此如何删除远程库中不想要的文件。

2024-03-05 22:31:29 796

原创 【最新】如何将idea上的项目推送到gitee

8.下拉“master”,点击“push”,点击“Define remote”,弹出提示框。5.点击Version Control--Gitee--"+" 添加自己的gitee账号。6.打开idea上的项目,旁边有分支master,拉开下拉框,点击“Commit”12.回到gitee上的仓库,刷新页面,就可以看到推送成功。3.下拉,点击“创建”,出现下方页面,证明仓库创建成功。1.打开Gitee,在首页,点击“+”,创建一个仓库。10.填入idea弹出的提示框中,点击“OK”2.填写仓库基本信息。

2024-02-28 14:27:45 2061

原创 idea如何建立一个springboot项目

5.调整此项目的maven配置。3.继续“Next”,勾选web中的springweb.和Tmeplate Engines中的Thymeleaf,以及SQL中。注:此时,第一次打开可能会报错,说版本不匹配。注意下方的两个红框,将Server URL的地址改为“6.点击"Apply",点击“OK”,此时创建成功。注:着重注意红框标记,改成自己Maven的配置。”即可,再刷新,就有了需要的java版本。

2024-02-28 14:06:06 655

原创 如何将本地项目上传到github上

将本地项目上传到github上有很多种方法,这里只讲述我认为最简单快捷的一种,先在github中创建一个仓库,接着在本地建文件夹,用命令行将项目推送到本地仓库,然后连接远程仓库,将本地项目推送到远程仓库上。要熟练掌握git的常用语法!!!!

2024-02-26 22:17:47 1722

人力资源管理系统(Vue、SpringBoot和MyBatis-Plus等)

人力资源管理是企业的核心要素之一,对于充分利用现有人力资源、降低成本、提高效率并创造更大价值至关重要。随着企业规模的扩大和业务范围的增加,不同部门之间的协作和沟通变得更加复杂,因此,设计一个规范化的管理系统至关重要。它不但能提供一个统一的平台,帮助部门之间实现信息共享、协作和沟通,同时也可以使企业更好地管理员工,确保员工信息的准确性和完整性。本次设计旨在开发一个轻量级人力资源管理系统,用来满足日益增长的人力资源管理需要,为企业提供一个便捷、可行的管理平台。 整个系统的研发遵循典型的软件开发流程。首先,阐述了当下的人力资源管理的现状,明确设计背景,介绍使用的相关技术和框架,包括Vue、SpringBoot和MyBatis-Plus等。其次,结合UML用例图,详细说明了系统的需求:需要一个可靠、高效的系统来管理员工的信息、薪酬福利、绩效评估等方面的事务。接着,用类图、时序图和ER图描述了系统的体系结构、业务模块和数据库设计,并将整个系统拆分成系统管理、薪资管理、权限管理、考勤管理等主要业务模块,以实现降低耦合度的目标。整个系统采用B/S结构,选择Java作为开发语言,前端使用Vue.js前

2024-02-04

可视化程序设计(内含源代码)

本篇文章介绍了8个实验,涵盖了C#语言基础、面向对象编程、Window应用程序开发、C#高级特性、线程技术和数据库应用。这些实验旨在帮助读者掌握C#编程的基本知识和技能,并为他们在软件开发领域中打下坚实的基础。 首先,C#语言基础实验旨在介绍C#语言的基本语法和编程环境,包括变量、运算符、流程控制语句、函数等。通过这些实验,读者将学习如何使用C#语言进行基本的编程工作。 其次,面向对象编程实验分为两部分,旨在介绍面向对象编程的基本概念和原则,并提供具体的实现方法和技巧。通过这些实验,读者将学习如何创建类和对象、使用继承和多态、设计和实现接口等。 第三,Window应用程序开发实验旨在介绍Windows应用程序开发的基本知识和技能,包括窗体设计、事件处理、图形用户界面等。通过这些实验,读者将学习如何使用Visual Studio创建Windows应用程序,并实现常见的功能和操作。 第四,C#高级特性实验介绍了一些C#语言的高级特性,包括属性、委托、事件、泛型等。通过这些实验,读者将了解如何使用这些特性来提高代码的可读性、可维护性和可重用性。 第五,C#线程技术实验介绍了C#语言

2024-02-04

单片机教程与设计(实验报告)

本篇文章将介绍四个实验,分别是多字节加法、循环与延时、数码管显示以及广告灯的设计与实现。这些实验涉及到嵌入式系统开发和数字电路设计的基本原理和技术,旨在帮助读者深入理解这些领域的知识和技巧,为他们打下坚实的基础。 实验一:多字节加法 在本实验中,我们将研究多字节加法的实现原理。通过学习多字节数据的存储方式和相加运算规则,我们将掌握计算机中进行多字节数据相加运算的方法和技巧。此外,我们还将了解如何使用汇编语言来实现多字节加法,在此过程中,需要掌握汇编语言的基本语法和指令集。 实验二:循环与延时 在本实验中,我们将学习循环结构和延时函数的应用。循环结构是程序中常用的一种控制结构,可以实现特定时间控制和任务调度。而延时函数则是一种常用的时间控制函数,可以实现在程序中等待一定的时间后再执行下一步操作。通过学习循环结构和延时函数的使用方法,我们将掌握特定时间控制和任务调度的技巧。 实验三:数码管显示 在本实验中,我们将介绍数码管的显示原理和编码方式。数码管是一种数字显示器件,可以用于显示数字和字符等信息。通过了解数码管的接口连接、编码方式以及显示程序的编写方法,我们将掌握如何通过编写

2024-02-04

客房订阅管理系统课程设计(内含源代码)

这是一个客房管理系统 系统功能的基本要求:客房各种信息,包括客房的类别、当前的状态、负责人等;客房信息的查询和修改,包括按房间号查询住宿情况、按客户信息查询房间状态等。以及退房、订房、换房等信息的修改。对查询、统计结果打印输出。 1.基本需求分析 (1)前台通过账号和密码登入系统进行客房管理,也可退出系统,负责人负责对应房间的客人; (2)客人根据相应证件登记入住,根据剩余房间及客人对客房的要求,进行客房安排并登记信息; (3)前台可以对客房按房间号查询住宿情况,对客房按客户信息查询房间状态,对客房按客房类别进行查询; (4)前台根据实际情况,对客房的订房、换房、退房等进行信息修改; (5)对查询结果、统计结果打印输出。

2024-02-04

编译原理教程的实验报告

这篇文章探讨了与编译器设计和实现有关的三个关键实验:词法分析程序设计、语法分析程序设计和中间代码生成程序设计。 词法分析是编译器中的第一个阶段,它负责将源代码转换为一系列词法单元。本实验旨在设计一个能够识别和提取关键字、标识符、运算符和常量等词法单元的程序。通过实现这样的程序,读者将学会如何构建一个强大的词法分析器来支持后续的编译过程。 语法分析是编译器的第二个阶段,它负责将词法单元转化为语法树。本实验旨在设计一个能够识别和解析程序语言的语法规则的程序。通过实现这样的程序,读者将学会如何处理不同的语法结构、解决语法歧义以及构建语法树。 中间代码生成是编译器的第三个阶段,它负责将语法树转换为中间表示形式,以便后续优化和目标代码生成。本实验旨在设计一个能够将语法树转换为中间代码的程序。通过实现这样的程序,读者将学会如何将高级语言转换为一种中间表示形式,这将提供给其他编译器后端组件使用。 通过完成这三个实验,读者将深入理解编译器的不同阶段,并掌握关键的编译器设计和实现技术。这些技术对于开发高效、可靠的编译器和解释器至关重要,并为其他相关领域如静态代码分析和程序分析提供了基础。

2024-02-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除