自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式之GoF设计模式(单例模式

这种单例模式会有线程安全问题,比如A线程和B线程同时第一次调用了getInstance时会new出多个实例,不符合原本的预期,等之后学到了线程再解决该问题,有兴趣可以去问问AI或者B站找视频解决。现在有一个这样的业务:一个大型应用(比如一个电商网站或后台服务)需要记录日志,日志对象需要统一管理,这样就不可能创建很多个日志对象,就需要用到单例模式。第一次调用getInstance才会创建对象。

2026-04-03 10:20:18 121

原创 JVM体系结构(运行时数据区)初解

而Java虚拟机规范也有许多的具体实现,其中最为出名的就是 HotSpot。我们主要要了解的是 JVM规范中的 运行时数据区。JVM是一个抽象的概念,它是一个规范。

2026-04-03 10:18:33 287

原创 Java(四)构造方法、this关键字、static关键字

摘要:构造方法是用于创建和初始化对象的特殊方法,通过new运算符调用。定义时需指定方法名和参数,系统默认提供无参构造方法(缺省构造器),但显式定义后缺省构造器将失效。this关键字指向当前对象,可用于访问实例变量和方法,还能通过this()调用其他构造方法。static关键字用于声明类级别的共享属性,当多个对象需要共享相同属性值时使用。例如国籍属性可用static修饰,作为所有Person对象的共同属性。

2026-04-02 12:59:44 165

原创 Javase(三)三大特性之封装

本文介绍了Java中封装的概念与实现。封装通过隐藏对象内部细节,只暴露必要接口来提高安全性和降低耦合度。文章以鼠标为例说明封装原理,并展示了Java中通过private修饰属性和提供public的setter/getter方法实现封装的具体代码。通过四个练习案例(汽车类、银行账户类、员工类和顾客类)演示了封装的实际应用,包括属性访问控制、数据合法性校验以及方法间的调用关系。这些案例涵盖了封装的核心要点:限制属性访问、数据有效性验证以及方法封装等面向对象编程的重要特性。

2026-04-02 12:47:14 165

原创 Javase(二)面向对象概述

摘要:本文介绍了面向对象编程(OOP)的概念及其优势。面向对象将业务分解为对象参与,具有解耦性和扩展性强的特点。文章详细说明了类的定义(包含属性和方法)、对象的创建与使用,并通过宠物类实例演示了具体实现。同时解释了this关键字的作用和空指针异常的产生原因。相较于面向过程编程,面向对象更适合复杂业务场景,通过对象间的交互实现功能,提高了代码的可维护性和复用性。

2026-04-02 12:40:25 346

原创 Javase(一) 基础语法篇

这里再补充一点,反码 的循环进位 问题,对于 1 + -1 没有循环进位所以没有问题,但如果是 3 + (-2)= 0000 0011 + 1111 1101 = 1 0000 0000 会丢失掉最高位,所以要 +1 到最低位,称为循环进位,补码 = 反码 + 1 就提前将这个坑给填了,所以底层才会采用补码来进行存储和计算,是非常精妙的。乱码是指在字符编码和解码的过程中,由于编码和解码所采用的字符集不一致,或者编码和解码所采用的字符集不支持某些字符,导致最终显示的字符与原始字符不一致。

2026-03-29 00:21:22 530

原创 JDBC快速上手入门

JDBC(Java database connectivity):即Java用来连接数据库的一套api(可以直接理解成一套类库),作用是使得调用者和实现者解耦合,提高扩展性。

2026-03-19 20:01:51 604

原创 MySQL (一):MySQL的安装与启动

本文介绍了MySQL数据库的安装与环境配置方法。主要内容包括:1)从MySQL官网下载社区版安装包(Windows系统推荐8.0.45版本);2)完成安装后配置系统环境变量,将bin目录路径添加到Path中;3)通过命令行启动和停止MySQL服务(使用net start/stop mysql命令)。文中提供了详细的图文指引,特别提醒安装时应注意选择无中文路径的目录。

2026-03-10 09:08:57 322

原创 非哨兵节点链表实现及链表变化练习题

本文介绍了链表的基本实现和两个常见算法:1)使用Java实现了链表数据结构,包含节点类、添加元素和获取元素等方法;2)提供了合并两个有序链表的解决方案,通过比较节点值逐步构建新链表;3)给出了两个链表相加的算法实现,模拟数字相加过程处理进位。代码示例展示了链表的基本操作和典型应用场景。

2026-03-08 16:52:09 313

原创 单链表的基本实现及解决leetcode 反转链表

本文介绍了单链表的基本实现和反转操作。单链表实现部分包含节点类定义、插入、查询、删除等核心方法,采用头节点方式管理链表。反转链表部分采用双指针法:pre指针初始为null,cur指针指向头节点,通过迭代方式逐个反转节点指向,最终返回反转后的链表头节点pre。代码示例展示了完整的链表反转实现过程,包括边界条件处理和节点指针操作。

2026-03-07 01:51:45 411

原创 解决MySQL登录时ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)问题

MySQL登录报错"Access denied for user 'ODBC'@'localhost'"的解决方案:该问题通常是由于缺少配置文件导致。解决方法是在隐藏目录ProgramData/MySQL/MySQL Server中找到my.ini文件,将其复制到MySQL安装目录的bin文件夹同级目录下。此操作适用于MySQL 8.0.45版本,其他版本可能有所不同。通过补充配置文件,可确保mysqld.exe程序正常读取启动参数,解决登录认证问题。

2026-03-06 00:16:37 400

原创 二分搜索算法

本文实现并验证了两种二分查找算法:1)在有序数组中查找大于给定数的最左侧位置;2)查找小于给定数的最右侧位置。通过随机生成有序数组和使用对数器进行50000次测试,验证了二分查找与遍历查找结果的一致性,确保算法正确性。核心方法包括binarySearchLeft()和binarySearchRight(),分别处理两种查找需求,并通过边界调整实现高效搜索。测试结果表明算法在各种情况下均能正确运行。

2026-02-11 19:10:46 629

原创 leetcode 162 寻找峰值(二分搜索法)

摘要:本文介绍了一个在数组中查找峰值元素的算法。峰值元素定义为严格大于相邻元素的数值。算法采用二分查找实现O(logn)时间复杂度,处理了数组边界情况,并通过比较中间元素与相邻元素来缩小搜索范围。对于长度为1的数组、首尾元素为峰值的情况,以及一般情况都进行了特殊处理,确保能正确返回任意一个峰值元素的索引。

2026-02-10 22:56:51 157

原创 二分搜索的思考

摘要:本文实现了一个在有序数组中判断元素是否存在的方法,采用二分查找算法。通过生成随机数组和测试数据,使用对数器验证了二分查找的正确性,并与遍历搜索方法进行对比测试。结果表明二分查找在有序数组中能正确判断元素是否存在,验证了算法的准确性。

2026-02-10 22:51:41 742

原创 三傻排序(选择,冒泡,插入)

该代码实现了三种基本排序算法:选择排序(selectionSort)、冒泡排序(bubbleSort)和插入排序(insertionSort)。程序对一个整数数组{1,3,7,9,2,5,4,8,6,0}进行排序,并打印结果。每种算法都通过比较相邻元素并交换位置来实现排序。swapNum方法用于交换数组中两个元素的位置。虽然main方法调用的是insertionSort,但代码中包含了完整的三种排序实现,展示了不同的排序策略。

2026-02-08 19:47:15 426

原创 (位运算)将十进制转换成二进制打印出来

这段Java代码实现了一个将整数转换为32位二进制表示的功能。主方法通过Scanner获取用户输入的整数,然后调用getBinary方法进行转换。getBinary方法通过位运算(右移和按位与)逐位检查整数的二进制值,并将结果以字符'0'或'1'形式输出,最终打印出完整的32位二进制表示。

2026-02-07 23:57:43 787

原创 社会学实验(基尼系数的计算)

摘要:基尼系数是衡量社会财富分配公平性的指标,0代表绝对平等,1代表绝对不平等。2022年全球平均基尼系数为0.44,超过0.5则可能引发社会危机。通过计算机模拟实验发现,即使在初始财富均等且交易规则公平的情况下(每人每轮随机给他人1元),经过多轮交易后,基尼系数仍会持续上升,最终导致贫富差距扩大。这一现象揭示了看似公平的系统也可能自发产生财富不平等。

2026-02-07 23:41:44 757

原创 leetcode 912 排序数组

摘要:本文实现了一个不使用内置函数的快速排序算法,用于对整数数组进行升序排列。算法通过递归分区的方式,选择中间元素作为基准值,将数组分为小于基准和大于基准的两部分。时间复杂度为O(nlog(n)),空间复杂度优化为O(1)。实现包括swapNum交换函数、quickSort递归排序函数和sortArray入口函数,通过内存分配返回排序后的新数组。示例展示了输入[5,2,3,1]排序为[1,2,3,5]的过程。

2026-02-03 23:20:27 591

原创 leetcode 合并两个有序数组

合并两个有序数组的算法解析:本文提出两种解决方案,要求将nums2合并到nums1中并保持非递减顺序。第一种暴力解法通过合并后快速排序,时间复杂度O((m+n)log(m+n)),但效率较低;第二种采用逆向归并法,从数组末尾开始比较填充,时间复杂度O(m+n),空间复杂度O(1),是更优解。示例演示了将[1,2,3]和[2,5,6]合并为[1,2,2,3,5,6]的过程。关键点在于利用nums1预留空间实现原地合并。

2026-02-02 21:02:13 632

原创 斐波那契数列(递归方法)

这段C语言代码实现了一个递归函数来计算斐波那契数列的第n项。当输入n为1或2时直接返回1,否则返回前两项之和。主函数通过scanf获取用户输入的n值,并调用fib函数计算结果后输出。该程序简洁地展示了递归算法在斐波那契数列计算中的应用,但存在递归效率低下的问题。

2026-02-01 02:26:08 356

原创 leetcode 零钱兑换

摘要:该算法解决硬币找零问题,使用动态规划计算凑成给定金额所需的最少硬币数。初始化dp数组为极大值后,通过遍历金额和硬币面额,递推求解每个子问题的最优解。若无法凑出目标金额则返回-1。示例输入coins=[1,2,5], amount=11时输出3,对应组合5+5+1。时间复杂度O(amount*coinsSize),空间复杂度O(amount)。

2026-02-01 01:38:46 524

原创 leetcode 打家劫舍问题

摘要:本文解决房屋偷窃问题,要求在不相邻房屋中获取最大金额。采用动态规划方法,定义dp[i]表示前i间房能偷取的最大值。状态转移方程为dp[i] = max(dp[i-1], dp[i-2] + nums[i]),即在当前房屋偷与不偷之间取最大值。初始化dp[0]=nums[0],dp[1]=max(nums[0],nums[1])。最终返回dp[n-1]即为结果。示例输入[1,2,3,1]输出4,[2,7,9,3,1]输出12。算法时间复杂度O(n),空间复杂度O(n)。

2026-01-31 23:49:23 540

原创 字符串匹配KMP算法

摘要:本文介绍了两种在字符串haystack中查找needle首次出现位置的算法。暴力解法通过双重循环逐一比较字符,时间复杂度较高;KMP算法利用部分匹配表优化搜索过程,先构建next数组记录模式串的自匹配信息,再通过主串和模式串的智能比对实现高效查找。两种方法均处理了空串、长度不匹配等边界情况,KMP算法在性能上更优但实现较复杂。示例表明算法能正确返回匹配下标或-1(未找到时)。

2026-01-24 23:54:47 825

原创 leetcode 打家劫舍问题

摘要:本文解决房屋抢劫问题,即在不相邻房屋中获取最大金额。采用动态规划方法,定义dp数组存储前i个房屋可抢最大金额。状态转移方程为dp[i] = max(dp[i-1], dp[i-2]+nums[i]),表示当前房屋抢或不抢的较优选择。例如[1,2,3,1]输出4(抢1、3号),[2,7,9,3,1]输出12(抢1、3、5号)。算法时间复杂度O(n),空间复杂度O(n)。

2026-01-23 17:11:03 328

原创 冒泡排序优化

这段C语言代码实现了一个优化的冒泡排序算法。程序首先定义一个包含10个整数的数组,然后通过嵌套循环进行排序:外层循环控制排序轮数,内层循环比较相邻元素并交换位置。当某一轮没有发生交换时,提前终止排序以提高效率。排序完成后,程序打印出排序后的数组。代码还包含一个swap函数,用于交换两个整数的值。最终输出结果为升序排列的数组元素。

2026-01-22 20:43:01 239

原创 算术运算符自增的用法

该Java程序演示了自增运算符(++i和i++)的区别。程序通过变量i的赋值操作展示了前置++(++i)和后置++(i++)的不同效果:前置++会先增加变量值再使用,而后置++会先使用变量值再增加。最终输出结果为2,验证了++i的操作顺序是先自增后赋值。代码注释详细解释了两种自增运算符的执行过程,帮助理解Java中自增运算的底层机制。

2026-01-12 20:45:24 383

原创 JDK,JRE,JVM的关系

JDK=JRE+java开发工具(如javac,java,javadoc)JVM,虚拟机,是java能够跨平台的根本原因。JRE=JVM+java核心类库。

2026-01-11 20:32:21 476

原创 找不到cmd命令提示符窗口属性怎么办?

在Windows 10/11中无法找到命令提示符属性时,通常是由于未以管理员身份运行。解决方法:右键点击命令提示符图标,选择"以管理员身份运行",即可正常访问属性设置。该问题常见于普通用户权限下运行cmd时。(98字)

2026-01-09 22:53:21 567

原创 整数扩展之编码

摘要:整数分为无符号和有符号两种。无符号整数直接二进制转十进制,如10101010=170;有符号整数采用补码形式,首位为负,如10101010=-86。两者编码方式不同导致数值表示差异。

2026-01-05 21:05:18 541

原创 输入输出模型

本文简要介绍了C语言中printf函数的格式化输出规则,重点解析了格式说明符%m.pX的组成和功能。其中,m表示最小字符宽度,不足时用空格填充;p为精度参数,其作用取决于转换说明符X:对于整数%d,p指定最少显示数字位数(不足补零);对于浮点数%f,p控制小数点后的位数。该说明为格式化输出提供了精确控制数值显示格式的方法。

2026-01-04 21:19:46 353

原创 如何打印指定大小菱形字符

本文介绍了两种打印菱形的C语言实现方法。第一种方法将菱形分为上下两个三角形分别处理,通过嵌套循环控制空格和星号的输出。第二种方法采用数学思路,利用绝对值函数计算每行与中心行的距离,从而确定空格和星号数量,代码更为简洁高效。两种方法都能实现菱形打印,但数学方法整体性更强,代码量更少,体现了算法优化的重要性。

2026-01-04 20:12:53 500

原创 进程的虚拟内存空间

2026-01-03 18:30:14 794

空空如也

空空如也

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

TA关注的人

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