- 博客(91)
- 收藏
- 关注
原创 C语言高效内存管理:对齐、缓存与位域
内存对齐(Memory Alignment)是指数据在内存中存储时,其起始地址遵循特定的规则,使得数据能够被高效地访问。CPU通常以固定的字节数(对齐边界)读取内存数据,未对齐的数据访问可能导致性能下降或硬件异常。对齐边界:数据类型的大小通常决定了其对齐边界。例如,4字节(32位)的`float`通常要求4字节对齐,8字节(64位)的`double`要求8字节对齐。
2024-10-16 20:05:07 1359 1
原创 C语言深度剖析:数据在内存中的存储
在C语言中,float和double类型用于表示带小数点的数值。它们通常遵循IEEE 754标准,这是一种广泛应用的浮点数表示规范。理解浮点数的存储方式对于数值计算的准确性和性能优化至关重要。IEEE 754标准定义了浮点数的表示和运算方式,旨在提供一种统一且高效的浮点数处理方法。该标准主要包括单精度和双精度两种格式,分别对应C语言中的float和double类型。
2024-10-16 19:33:14 645
原创 C语言中缓冲区底层实现以及数据输入的处理
在C语言的标准输入输出操作中,缓冲区(Buffer) 扮演着至关重要的角色。在计算机系统中,缓冲区是一块用于暂存数据的内存区域。在输入输出(I/O)操作中,缓冲区的作用是提高效率,减少系统调用的次数。C语言的标准I/O库为每个打开的流(对象)都分配了一个缓冲区,用于暂存输入或输出的数据。
2024-10-12 19:36:28 1430
原创 C语言语法练习20题(变量、输入输出、表达式与顺序语句)
在本篇博客中,我们将逐步解析20个经典的C语言编程练习题,帮助初学者巩固基础编程技能。每道题目涵盖了不同的算法和逻辑,包括基本的输入输出、控制结构、数学运算、以及循环和条件判断等内容。这些题目旨在提升编程思维,增强对C语言基础概念的理解与应用。
2024-10-10 15:45:27 1688
原创 零基础轻松入门 C 语言核心语法
本篇文章系统介绍了C语言的基础语法,涵盖变量、数据类型、控制结构、函数、指针等核心概念。通过逐步解析每个知识点,读者可以清晰理解C语言的结构化编程方式和应用场景。文章适合初学者快速入门,也为有基础的读者提供了巩固知识的参考。阅读后,您将具备编写基础C语言程序的能力。
2024-10-09 00:06:05 1129
原创 第一讲:Go语言开发入门:环境搭建与基础语法
本文作为 Go 语言开发学习的第一步,将帮助你快速了解 Go 语言的基础语法,并带你完成开发环境的搭建。从变量、常量、运算符、条件表达式到简单的函数定义,我们将通过代码示例让你逐步掌握这些基本概念。你还将学习如何编写简单的程序,比如通过计算体脂率和判断两条直线是否平行的练习,帮助你夯实 Go 语言的基础,为后续的深入学习打下坚实的基础。
2024-10-08 04:07:28 1876
原创 考研数据结构——顺序表代码题
当计数器为零时,选择当前元素作为新的候选主元素,并将计数器重置为1。第一篇扫描中可能会出现误判,可能导致误判的情况主要发生在第一遍扫描中选择候选主元素的逻辑上。:因为数组是升序的,我们可以通过移动指向最小值的指针,使其增大,从而可能减小与其他两个值的差距。如果数组中根本就没有主元素,但由于计数器的逻辑,可能在最后返回一个看似有效的候选者。最小的那个,我们可以利用数组已按升序排列的特性,设计一个高效的算法。:遍历数组,统计候选主元素出现的次数,检查其是否满足主元素的条件
2024-10-01 17:00:01 1179
原创 考研数据结构考点——第二章线性表
选择顺序表:当需要频繁的随机访问,且插入删除操作较少。当数据量相对固定或变化不大,且内存连续性有利于性能优化。如实现数组、栈、队列、查找表等数据结构。选择链表:当需要频繁的插入和删除操作,且对随机访问要求不高。当数据量动态变化,且不希望频繁重新分配内存。如实现动态列表、图的邻接表、任务调度等应用。
2024-09-23 10:29:40 1136
原创 考研数据结构考点——第一章绪论
数据:能被输入到计算机并被程序识别和处理的符号集合,包括数值、字符及其他能表示信息的符号。数据元素:数据元素是数据的基本单位,通常作为一个整体考虑,如一个人的信息记录。数据项:数据项是构成数据元素的最小不可分割单位,反映了数据的基本属性。数据对象:具有相同性质的数据元素的集合,是数据的子集。
2024-09-14 09:12:14 740
原创 每日力扣刷题day06(滑动窗口专项)
滑动窗口算法是一种常用的算法技巧,适用于处理数组或字符串中的连续子序列问题。它通过动态调整窗口的大小和位置,能够在线性时间内解决许多复杂的子数组或子字符串问题。滑动窗口的核心思想是利用两个指针来表示窗口的左右边界,通过移动这两个指针来维护和调整窗口,使得窗口内的数据满足特定的条件。
2024-05-28 09:34:45 1108
原创 每日力扣刷题day05(小白简单题)
字符串合并问题:类型:字符串操作难度:简单描述:交替合并两个字符串,若一个字符串较长,追加剩余部分。字符串旋转问题:类型:字符串操作难度:中等描述:判断一个字符串是否可以通过若干次旋转操作变成另一个字符串。生成和为零的数组:类型:数组操作难度:简单描述:生成一个包含 n 个不同整数且总和为零的数组。这些题目主要涉及字符串和数组的基本操作
2024-05-26 11:02:53 743
原创 蓝桥杯第十五届抱佛脚(十)贪心算法
贪心算法是一种在算法设计中常用的方法,它在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。贪心算法与枚举法的不同之处在于每个子问题都选择最优的情况,然后向下继续进行,且不能回溯。枚举法是将所有情况都考虑然后选出最优的情况。贪心算法在解决问题时,不从整体考虑,而是采用一种一眼看到局部最优解的选择方式。并且,贪心算法没有固定的模板可以遵循,每个题目都有不同的贪心策略,所以算法设计的关键在于贪心策略的选择。
2024-04-07 15:37:56 5976 3
原创 蓝桥杯第十五届抱佛脚(九)动态规划
动态规划(Dynamic Programming, DP)是一种用于解决复杂问题的优化算法设计技术。它将原问题分解为若干相互重叠的子问题,通过记录子问题的解,避免重复计算,从而大大减少了计算量。动态规划典型的应用场景包括:最优化问题:如求最短路径、最小编辑距离等。计数问题:如有多少种方式走到终点、排列组合数量等。取值问题:如背包问题、切钢条问题等。
2024-04-01 11:44:47 1550 2
原创 蓝桥杯第十五届抱佛脚(八)并查集
并查集是一种数据结构,用于管理一系列不交集的元素集合,并支持两种操作:查找(Find):查找操作用于确定某个元素属于哪个集合,这通常通过追溯元素的父节点直到找到代表元素来完成。合并(Union):合并操作用于将两个不相交的集合合并为一个。合并可以通过将一个集合的代表元素的父节点指针指向另一个集合的代表元素来完成。具体实现时,并查集通过一个数组来维护每个元素的父指针,每个集合由一个根元素代表,该根元素的父指针指向自己,表明它是集合的代表。
2024-03-31 15:03:41 1157
原创 蓝桥杯第十五届抱佛脚(七)前缀和与差分
前缀和算法主要用于处理区间和的查询问题。构建前缀和数组:对于给定的数组arr,构建一个新的数组prefixSum,其中存储了从arr[0]到arr[i]的元素之和。区间和查询:如果需要频繁查询数组的任意子数组(区间)的和,前缀和算法是一个非常有效的方法。适用于静态数据:当原数组在多次查询之间不改变时尤其有效。快速查询:查询任意区间和的时间复杂度降低到 O(1)。更新困难:如果原数组频繁变化,需要重新计算前缀和,这可能很耗时。
2024-03-31 10:30:17 1323
原创 蓝桥杯第十五届抱佛脚(六)回溯与剪枝
回溯算法是一种解决问题的算法,它尝试解决问题的一个分支,如果发现当前分支不能得到有效的完整解决方案,就会消除(回溯)所做的一系列选择,并尝试另一个可能的分支。回溯算法通常用于解决组合问题,如排列、组合、选择和分割问题,它通过逐步构建解的候选项并在每个步骤中继续或放弃继续探索的决策,实现问题的穷举搜索。
2024-03-30 13:33:17 1213
原创 蓝桥杯第十五届抱佛脚(五)DFS、BFS及IDS
DFS(Depth-First Search)即深度优先搜索,是一种用于遍历或搜索树或图的算法。它从根节点开始,尽可能沿着每一条路径直到这条路径最后一个节点被访问了,然后回退,继续访问下一条路径。它的基本思想是尽可能深地搜索树的分支,直到达到叶子节点,然后回溯到上一个分支节点继续搜索。DFS通常使用递归或栈来实现。
2024-03-29 23:32:56 1326
原创 蓝桥杯第十五届抱佛脚(四)递归与分治
递归和分治是两种常见的问题解决方法,它们是不同的概念,但它们经常在一起使用,有时甚至是互相支持的。递归是一种解决问题的方法,其中一个函数通过不断调用自身来解决更小规模的子问题,直到达到基本情况为止。递归通常用于解决具有自相似性质的问题,例如树结构、图结构等。经典的递归算法包括斐波那契数列的计算、二叉树的遍历等。分治是一种算法设计策略,它将问题分解成若干个规模较小且相互独立的子问题,然后解决这些子问题,最后将子问题的解合并起来得到原问题的解。分治算法通常用于解决可以被分割成互相独立的子问题的问题。
2024-03-27 17:26:16 855
原创 蓝桥杯第十五届抱佛脚(三)枚举法与尺取法
很多人将蓝桥杯戏称为“暴力杯”,因为蓝桥杯采用了OI的赛制。在这种赛制下,即使对于某些大题答案不清楚的情况下,也可以通过暴力方法获得部分分数。一提到暴力,人们往往首先想到的是枚举。然而,实际上,枚举是一门需要技巧的技术,确保能够穷尽所有可能情况并不容易。因此,在本文中,我将详细介绍,以确保能够完整地列举出所有情况,不漏掉任何一种可能性。
2024-03-25 15:58:11 1130
原创 蓝桥杯第十五届抱佛脚(二)竞赛中的数据结构
在算法竞赛中,有一些常用的数据结构非常重要,熟练掌握它们有助于解决很多算法问题。以下是一些常见的数据结构:数组(Array)和链表(Linked List)基本的线性数据结构,支持随机访问(数组)和动态内存分配(链表)栈(Stack)和队列(Queue)基于先进后出(LIFO)和先进先出(FIFO)原理的线性数据结构集合(Set)无重复元素的集合,HashSet和TreeSet是常用实现掌握这些数据结构的实现原理、时间/空间复杂度、使用场景对于算法竞赛至关重要。
2024-03-24 13:47:47 1948 1
原创 蓝桥杯第十五届抱佛脚(一)手算和思维题
知识点梳理思维题(杂题):不需要算法和数据结构,只需要逻辑、推理的题目,难度可难可易。考察思维能力和编码能力,只能通过大量做题来提高。BFS 搜索和 DFS 搜索:也就是暴力搜索。这是非常基本的算法,是基础中的基础。动态规划:线性 DP,以及一些 DP 应用,例如状态压缩 DP、树形 DP 等。简单数学和简单数论。简单的字符串处理、输入输出,简单图论。基本算法:例如排序、排列、二分、倍增、差分、贪心。基本数据结构:队列、栈、链表、二叉树等。
2024-03-22 15:09:24 1612 3
原创 TypeScript面向对象
面向对象是程序中一个非常重要的思想,它被很多同学理解成了一个比较难,比较深奥的问题,其实不然。面向对象很简单,简而言之就是程序之中所有的操作都需要通过对象来完成。一切操作都要通过对象,也就是所谓的面向对象,那么对象到底是什么呢?这就要先说到程序是什么,计算机程序的本质就是对现实事物的抽象,抽象的反义词是具体,比如:照片是对一个具体的人的抽象,汽车模型是对具体汽车的抽象等等。程序也是对事物的抽象,在程序中我们可以表示一个人、一条狗、一把枪、一颗子弹等等所有的事物。一个事物到了程序中就变成了一个对象。
2023-12-31 20:29:34 1071
原创 TypeScript快速入门
TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,任何的JS代码都可以直接当成JS使用。相较于JS而言,TS拥有了静态类型,更加严格的语法,更强大的功能。TS可以在代码执行前就完成代码的检查,减小了运行时异常的出现的几率。TS代码可以编译为任意版本的JS代码,可有效解决不同JS运行环境的兼容问题。
2023-12-31 20:19:30 1103
原创 SpringMVC程序开发
Spring MVC(Model-View-Controller)是一种用于构建基于Java的Web应用程序的框架。它是Spring Framework的一部分,是一个经典的MVC设计模式的实现,旨在帮助开发人员更轻松地构建可维护和可扩展的Web应用程序。模型代表应用程序的数据和业务逻辑。它负责管理数据的状态和处理数据操作。通常,模型对象是用于封装和表示应用程序数据的Java类。视图负责显示模型的数据给用户。它们负责将数据以用户友好的方式呈现出来,通常是通过HTML模板或其他前端技术来实现的。
2023-10-24 23:51:23 243 1
原创 软件生命周期过程
按承担软件开发工作的主体,将软件生命周期过程分为三类: 1. 基本过程 是指哪些域软件生产直接相关的活动集2. 支持过程 是有关各方按其目标所从事的一系列支持活动集3. 组织过程 是指那些与软件生产组织有关的活动集
2023-10-11 11:44:36 635 2
原创 软件工程概论
软件工程时期可以追溯到上世纪80年代末至今。在这个时期,对软件开发过程进行了深入的研究和发展,出现了更多的开发方法和最佳实践。软件工程强调了系统化的方法,包括需求分析、系统设计、编码、测试、维护等方面的严格流程。这一时期还引入了面向对象编程、设计模式和软件开发生命周期等概念,旨在提高软件质量、可维护性和可重用性。软件工程方法也导致了更多的工程化和团队合作。
2023-10-09 16:01:59 1330 2
原创 Spring Boot的Lombok详解
Lombok是一个Java库,旨在通过自动生成样板代码来减少开发人员需要编写的冗余代码,从而提高代码的可读性和简洁性。它通过注解的方式,让开发人员能够在编写代码时自动产生一些常见的方法和字段,如getter、setter、构造函数、equalshashCode等,从而简化了Java类的创建和维护。Lombok使得你可以在代码中专注于核心逻辑,而不必担心冗长的样板代码。Lombok大大简化了Java开发过程中的样板代码编写,使开发人员能够专注于核心逻辑,提高代码的可维护性和可读性。
2023-08-21 08:56:25 1569
原创 SpringBoot ⽇志⽂件
在Spring Boot中,你可以通过自定义日志配置来定制日志的打印方式。通常,你可以通过创建一个日志配置文件(如或log4j2.xml)并在其中定义自定义的日志输出格式、日志级别、输出位置等来实现这一目标。下面是一个示例,展示如何自定义Logback日志的输出格式:在目录下创建一个文件(如果你使用Logback作为日志框架)。在文件中添加自定义的日志配置。
2023-08-21 06:59:56 352
原创 Spring Boot配置文件
当使用 Spring Boot 进行应用程序开发时,配置文件是至关重要的,它可以影响应用程序的行为、功能和性能。和.yml(YAML)。文件是基于键值对的简单格式,.yml文件是基于缩进和冒号的层级结构格式。默认情况下,Spring Boot 会自动加载名为或的配置文件。这些文件用于存放通用的配置项,适用于所有环境。为不同的环境(如开发、测试、生产)创建特定的配置文件,命名规则为或。通过属性来激活特定环境的配置。使用逗号分隔的方式,可以同时激活多个环境,根据需要加载多个配置文件。
2023-08-21 00:24:16 1231
原创 SpringBoot创建和使用
Spring Boot是一个用于简化Spring应用程序开发的框架。它通过提供一系列默认配置和预置的模板,使得构建、部署和运行基于Spring的应用程序变得更加容易。Spring Boot旨在减少开发人员在配置方面的繁琐工作,同时提供了快速开发应用程序的能力。
2023-08-20 10:54:41 541
原创 Bean 作用域、生命周期和Spring执行流程
限定程序中变量的可⽤范围叫做作⽤域,或者说在源代码中定义变量的某个区域就叫做作⽤域。⽽ Bean 的作⽤域是指 Bean 在 Spring 整个框架中的某种⾏为模式,⽐如 singleton 单例作⽤域,就表示 Bean 在整个 Spring 中只有⼀份,它是全局共享的,那么当其他⼈修改了这个值之后,那么另⼀个⼈读取到的就是被修改的值。
2023-08-19 05:26:01 614
原创 Spring依赖注入、对象装配
在这篇博客中,我们学习到了spring依赖注入的三种常见的方式,并且了解了它们的优缺点,还了解了依赖注入的两个重要的关键字:@Autowired、@Resource,并了解了两者的区别。还知道了如何解决同一类型Bean注入的报错问题和了解了软件设计中的单一设计原则。
2023-08-11 02:06:39 594 2
原创 Spring 使用注解储存对象
通过在 spring-config 中添加bean的注册内容,我们已经可以实现基本的Spring读取和存储对象的操作了,但在操作中我们发现读取和存储并没有那么简单,接下来我们来学习更加简单的操作Bean对象的方法。在Spring中想要更简单的存储和读取对象的核心是使用注解,接下来我们来了解一下Spring中的相关注解,来存储对象。
2023-08-10 03:45:18 951
原创 Spring 创建和使用
Spring 是一个广泛用于构建企业级 Java 应用程序的开源框架。它提供了许多功能和组件,用于简化开发、测试和部署过程。本文是一个简单的步骤指南,介绍如何创建和使用 Spring 框架。
2023-08-09 05:28:20 980 3
原创 SpringBoot 热部署
在日常开发中,我们需要经常修改 Java 代码,手动重启项目,查看修改后的效果。如果项目还比较小,重启速度比较快,等待的时间是较短的。但是随着项目逐渐变大,重启的速度变慢,等待时间越来越长,我们的效率就很低下。Spring Framework 提供了热部署(Hot Reload)功能,允许在开发过程中无需重启应用程序就能实时地修改代码并看到更改效果。这对于提高开发效率非常有帮助。以下是常见的几种热部署方式:
2023-08-08 22:26:10 2299
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人