自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Lambda表达式&Stream流

Java 8函数式编程核心特性 Lambda表达式简化了匿名内部类的写法,基本格式为(参数)->{代码},具有参数类型省略、单行代码简化等特性。Stream流提供链式操作集合/数组的能力,包含创建流(集合.stream()/Arrays.stream())、中间操作(filter过滤、map转换)和终止操作(forEach遍历)三类核心操作。通过@Data等注解简化实体类定义,Stream配合Lambda可实现简洁高效的数据处理,如筛选年龄小于18的作者并去重打印。该编程范式更关注数据操作而非对象本身

2025-05-29 11:33:15 700

原创 Spring(8)——MyBatis入门(2)

上一篇博客介绍了用注解的方式操作数据库,这一篇介绍通过xml配置文件的方式操作数据库。

2025-03-19 15:54:46 725

原创 Spring(7)——MyBatis入门(1)

MyBatis是一款优秀的框架,用于简化JDBC的开发。

2025-03-18 23:31:21 709

原创 Spring(6)——Spring、Spring Boot 与 Spring MVC 的关系与区别

(内容来自DeepSeek)

2025-03-16 18:56:55 674

原创 Spring(5)——IoC & DI

在早期的开发中和对于初学者的学习过程中,整个项目中对象的数量不多,对象的属性不多,对象之间的依赖不强。但是随着技术的发展,一个项目中对象数量越来越多,属性越来越多,对象之间的依赖也越来越复杂。甚至于多个对象构成一个组件,组件之间的依赖也很复杂。此时我们就需要一个平台,平台负责对象的生成和装配。作为开发者我们只需要将对象的生产方法告诉平台,即更多的关注功能的实现。

2025-03-16 15:52:18 952

原创 Spring(4)——响应相关

既可以作为类注解也可以作为方法注解,如果标记在类上,那么表示该类中的所有方法都返回的是数据,如果一个类中既有返回视图的方法也有返回注解的方法,那么只用把**@ResponseBody**标注到对应方法上即可。SpringMVC会根据我们⽅法的返回结果⾃动设置响应状态码,程序员也可以⼿动指定状态码,通过SpringMVC的内置对象HttpServletResponse提供的⽅法来进⾏设置。如果我们依旧使用原来的**@RestController**@RestController**其实返回的是数据。

2025-03-11 18:36:57 424

原创 Spring(3)—— 获取http头部信息

HTTP头部信息是在客户端(如浏览器)和服务器之间传输的额外元数据,用于描述请求或响应的各种属性和特性。它由一系列键值对组成,可分为通用头部、请求头部、响应头部和实体头部。通用头部:既可以出现在请求中,也可以出现在响应中。:用于指定缓存策略,例如表示不使用缓存,需要先与服务器确认资源的有效性;表示资源在本地缓存的有效时间为 3600 秒。:管理持久连接,表示客户端和服务器之间保持连接,以便后续请求可以复用该连接,减少建立连接的开销;则表示请求完成后关闭连接。:表示消息产生的日期和时间。

2025-03-11 15:58:16 596

原创 Spring(2)——Cookie和Session

Cookie 是由 Web 服务器发送到用户浏览器并存储在用户计算机上的一小段文本数据。它就像是服务器给浏览器的一个 “便签”,用于在用户浏览网站的过程中记录一些信息,以便服务器能够识别用户身份、跟踪用户行为或存储用户偏好等。Session 是服务器端用于跟踪用户会话状态的一种机制。

2025-03-10 22:33:49 1048

原创 Spring(1)——mvc概念,部分常用注解

MVC是Model,View,Controller的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分。**View(视图):**指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.**Model(模型):**是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.**Controller(控制器):**可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型。

2025-03-09 13:27:16 1204

原创 web应用常见错误代码

表示临时的响应,通常用于和客户端进行信息交互,这类状态码在实际应用中比较少见。

2025-03-07 12:05:47 206

原创 Java集合体系结构

Java集合体系结构快速了解

2025-03-03 18:56:37 185

原创 Java-I/O流

文件是保存数据的地方,文件在程序中是以流的形式来操作的。

2025-03-01 16:15:57 822

原创 Java泛型

总的来讲泛型就是将数据类型参数化,在编写泛型类的时候使用符号占位,在实际使用泛型类的时候,传入需要的数据类型,这里的数据类型不能是基本数据类型,必须是包装类,编译时会自动进行类型的转换。

2025-02-28 23:24:33 432

原创 Java中的代码块

Java中的代码块。

2025-02-28 18:43:54 253

原创 Java多线程初阶

认识Java多线程

2024-12-18 10:55:13 700

原创 Java内部类

了解四种内部类

2024-12-04 11:14:45 497

原创 Java枚举

Java枚举的介绍以及基本方法的使用

2024-11-29 10:04:25 823

原创 Java反射入门

用具体例子入门反射

2024-11-28 10:45:43 267

原创 MySQL必知必会,我的MySql复习宝典

声明:本篇博客是学习B站韩顺平老师mysql课程的笔记目录数据库基础知识使用命令行窗口连接MySQL数据库数据库三层结构 - 破除MySQL神秘SQL语句SQL语句分类数据库相关操作查看、删除数据库备份恢复数据库创建和删除表MySQL常用数据类型(列类型)定义无符号的bit的使用小数的使用字符串的基本使用日期类型的基本使用创建练习表修改表数据库C(create)R(read)U(update)D(delete)Insert 语句update语句Delete 语句Select 语句使用表达式对查询的列进行计

2022-03-18 18:02:40 3134 6

原创 原码-补码-反码

二进制的最高位是符号位:0表示正数,1表示负数。正数的原码,反码,补码都一样。负数的反码 = 它的原码符号位不变,其他未取反。负数的补码 = 它的反码 + 1,即负数的反码 = 负数的补码 - 10的反码,补码都是0java没有无符号数,换言之,java中的数又是有符号的在计算机运算的时候,都是以补码的方式来运算的。当我们看运算结果的时候,要看他的原码。...

2022-03-10 19:31:35 350

原创 Java基本数据类型和String类型的转化

基本数据类型转String类型只需要 + ""即可,如下public static void main(String[] args) { int n1 = 100; float n2 = 1.1f; double n3 = 3.4; boolean b1 = true; String str1 = n1 + ""; String str2 = n2 + ""; String str3 = n3

2022-03-10 18:13:49 550 2

原创 异或的魅力

异或(^)作为一个位运算符,它的运算速度是很快的,它的运算规则是将两个数据的二进制数去一一比较,结果是当对应两个二进制位的数相同为0,不同为1,即:同时异或运算还满足交换律和结合律,这些就使得两个相同的数因为二进制每一位都对应一模一样,所以当两个相同的数在做异或运算时结果为0,即 a ^ a = 0;因为异或运算满足交换律,所以 a ^ b ^ a = a ^ a ^ b = 0 ^ b,因为b有1的位,而0全都是0位,所以 0 ^ b = b,即0异或任何数都等于这个数本身。当有一堆数在异或时:

2021-11-08 12:45:17 378 1

原创 更高效地刷OJ——Java中常用的排序方法,Array.sort(),Arrays.parallelSort(), Collections.sort()

对于几大传统的排序算法我在前面博客中已经介绍过了,如果有想要了解的同学可以去看这篇博客八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序但是我们在刷题过程中如果题目中没有对排序算法做特别要求,排序只是当前题目的一个小过程的话我们大可不必自己实现以便排序算法,因为Java中已经提供了几个对数据做排序的方法。文章目录用Array.sort()进行排序Arrays.parallelSort() 是什么 和 Array.sort()有什么区别用 Collections.sort()进行排

2021-09-12 17:47:10 1031 50

原创 模拟实现HashMap

为了方便实现,突出重点,将key指定为String类型,将Value指定位Integer类。在实际中,如果Key的类型为自己的实现类,那么必须重写该类的hashCode()和equals()两个方法,重写hashCode()方法是因为在找key对应的下标时需要调用hashCode()方法,重写equals()方法是因为两个相同对象的哈希值必须相同,程序怎么知道哪两个对象相同,就是通过equals方法。对于还不了解哈希表的同学建议先去看上一篇博客哈希表(HashTable),哈希冲突的避免、解决。下面开

2021-09-11 17:38:46 298 1

原创 哈希表(HashTable),哈希冲突的避免、解决

文章目录什么是哈希表哈希表概念哈希冲突哈希冲突概念解决冲突闭散列闭散列平均查找次数的问题开散列/哈希桶冲突严重时的解决办法避免冲突哈希函数设计常见的哈希函数负载因子调节什么是哈希表先举一个很常见的例子:我们有一个衣柜这是一个杂乱无章的衣柜,里面放了四季的衣服,每当要去找一件合适的衣服去穿的时候,要翻箱倒柜麻烦半天,为了解决这个问题,我们买了四个柜子,规定它们分别存放春夏秋冬四季的衣服:从此之后找衣服就方便了很多,什么季节去哪个衣柜找就能找到合适的衣服,这个例子背后就是哈希表的原理。哈希表概念

2021-09-11 12:13:45 2953 24

原创 Java中的Map

Map的介绍Map和Set一样是一种专门用来进行搜索的数据结构,和Set不同的是Map中存的是Key-Value键值对,什么是键值对呢?举两个例子:统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:这里的key就是单词,value就是出现的次数。词典中每个单词就是key,单词对应的意思是value。Java中的Map是一个接口,该类不同于Set,该类没有继承字Collection。Map中的key不能重复,value可以重复。Map的常用方法:返回值方法

2021-09-10 21:46:02 329 2

原创 Java中的Set

Set可以被认为是一个集合,集合内部是同类型的元素,他们之间没有先后顺序,但是不允许重复!!!Set中常用的方法有以下几个:返回值方法booleanadd( ) 向集合中添加元素无clear( ) 去掉集合中所有的元素booleancontains( ) 判断集合中是否包含某一个元素booleanisEmpty( ) 判断集合是否为空Iteratoriterator( ) 主要用于递归集合,返回一个It

2021-09-10 15:32:41 8279 16

原创 二叉搜索树的思想,以及增删查改的实现

目录搜索树的概念查找操作插入操作删除操作改的操作搜索树的概念二叉搜索树又被称为排序树,它或者是一颗空树,或者是一棵具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树下图就是一棵二叉搜索树,可以对应上面性质加深理解:查找操作实现思想:实现代码:// O(树的高度) public boolean find(int key) { Node curren

2021-09-07 22:48:38 880 21

原创 ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️

目录主要排序算法性能对比冒泡排序选择排序插入排序堆排序希尔排序快速排序Hoare版挖坑版前后指针法归并排序计数排序主要排序算法性能对比冒泡排序各位同学接触最早的排序算法应该就是冒泡排序了,他的过程如下图所示:拿图中升序举例他每次小循环都会从0开始在遍历的过程中将遇到的最大的数像冒泡泡一样一路冒到有序区间,一次大循环让有序区间增加一,大循环执行完毕全部区间就有序了。下面是它的代码:import java.util.Arrays;public class BubbleSort { //升

2021-09-06 17:15:49 684 21

原创 归并排序(Merge Sort)思想,代码实现

归并排序是分治算法一个非常典型的例子,归并排序的思想是将待排序序列递归分为左右两个子序列,递归到子序列只有一个数的时候,停下来,这就是分治算法的分的意思,将问题化简,当子序列只有一个元素的时候是不是可以认为这个序列为有序序列了,然后再将左右有序子序列通过递归合并起来,最终让整个序列有序,这是分治算法治的过程,下面我们通过图片来理解这个过程:通过动图理解就是:线面看代码:public class MergeSort { public static void mergeSort(long[]

2021-09-05 22:54:57 791 20

原创 快速排序思路(前后指针版),代码实现

快速排序的前后指针法相比于Hoare版和挖坑版在思路上有点不同,前后指针版的思路是引入两个指针cur和prev,在开始的时候先规定一个基准值val(一般为最右边或者最左边的那个数据),然后让两个指针指向基准值的下一个数,开始下面循环:若cur指向的内容小于key,则prev先向后移动一位,然后交换prev和cur指向的数,然后cur++;如果cur指向的内容大于val,则cur++。直到cur走完整个序列,此时为了让基准值在中间,只需val和prev交换单次排序就完成了。下面是单次排序的动图:在循环

2021-09-04 11:45:08 561 4

原创 快速排序思路(挖坑版),代码实现

挖坑版是在Hoare版的基础上做了改造,答题思路还是和Hoare版一样。挖坑版partition单次过程:选一个基准值,一般选最左或者最右面,把该基准值存在val变量中,因为值存到了变量里,所以可以视为这个位置能放其他值了。定义一个left和一个right引用,left从序列左向右走,right相反(如果基准值在左边则right先走,如果基准值在右边,left先走)走的过程中,如果right遇到小于val的数,则把个数放在坑中,并在次形成坑位,然后left向右走,如果遇到大于val的数,则将值填入

2021-09-03 23:04:31 700 10

原创 确定不进来看看?分享一个插件,让敲代码不再枯燥,activate-power-mode

已经支持很多IDE了:https://github.com/codeinthedark/awesome-power-mode因为我用的是IDEA,所以主要来介绍一下IDEA的安装流程:打开这个网址https://github.com/ViceFantasyPlace/activate-power-mode/releases,然后在IDEA中选Preferences -> Plugins -> Install pliugin form disk -> 找到刚才下载的jar包->.

2021-09-02 20:00:32 199 12

原创 快速排序思路(Hoare版),代码实现

快速排序是一种相对比较快的排序,它的思想为:选取待排序元素序列中的一个元素作为基准值,然后(以升序为例)比基准值小的元素放在基准值左边,比基准值大的元素放在基准值右边,这样的话,原先待排序序列就被分为了左子序列,右子序列,基准值,三个部分,,然后把左子序列看做新的待排序序列进行上述操作,左子序列又被分为新的左右子序列(递归的思想),当左子序列处理完之后再去处理右子序列,最后着呢个待排序序列就有序了。下面是动图演示过程:public static void quickSort(int[] array)

2021-09-01 23:18:39 409 13

原创 安居客西安房源爬取 + pyecharts 数据展示

第一步是数据爬取:import xlwtfrom bs4 import BeautifulSoupfrom selenium import webdriverimport time,randomfrom selenium.webdriver import ChromeOptionsdef main(): baseurl = "https://xa.fang.anjuke.com/loupan/all/p" datalist = getData(baseurl) sav

2021-08-31 16:39:25 925 15

原创 希尔排序(Shell Sort)

希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。上面的这段叙述来自百度百科,我们可以知道希尔排序是插入排序的改进版,如果插入排序还没有搞清楚的话,建议先去看这篇博客补一补:都是❤️两层循环❤️的冒泡排序,选择排序,插入排序该怎么区分。这里我们也大致在对插入排序做个复习。插入排序将第一个数(也可.

2021-08-30 23:41:03 648 8

原创 堆排序,为什么升序排列要建大堆,降序排列要建小堆

堆排序中用到了建立大小堆和向下调整的内容,对这些内容有些不了解的同学可以去补一补专门写堆的博客,方便更好的理解堆排序数据结构之堆(Heap),堆的相关操作,用堆模拟优先级队列。如果把待排序序列分为未排序区间和有序区间,堆排序大的思想是每次选一个数放到有序区间,没经历一个循环有序区间就会加一,无序区间减一,循环结束序列也就有序了,像这样:可以发现堆排序的思路和选择排序很像,没错,思路确实一样,只不过选择排序每次要遍历无序区间去找当前无序区间的最大值(升序找最大值,降序找最小值),而堆排序呢是吧无序区间

2021-08-30 20:26:16 4170 14

原创 都是❤️两层循环❤️的冒泡排序,选择排序,插入排序该怎么区分

目录冒泡排序选择排序插入排序这三个排序都有两层循环这是他们表面的特点,我把外部循环叫大循环,内部循环叫小循环,他们算法根本思想都有相同点,就是将待排序序列分为无序区间和有序区间,每过一次大循环都能让有序区间增加一个相应的无序区间减少一个:科普一下这种每次通过相同操作让问题规模减小的算法称为减治算法,现在我们清楚了他们的底层思想,再来分别讨论以作区分。冒泡排序各位同学接触最早的排序算法应该就是冒泡排序了,他的过程如下图所示:拿图中升序举例他每次小循环都会从0开始在遍历的过程中将遇到的最大的数像冒

2021-08-29 12:16:52 417 32

原创 建堆解决TopK问题

对于找海量的数据中最大(小)个数据的问题被称为TopK问题。解决这个问题的方法有很多比如排序然后相应的取前K个数据,排序的算法有很多种,其中不乏时间复杂度低的,可问题很多排序算法都需要将所有数据同时加载到内存中去处理,海量数据加载到内存中这无疑是一个很废内存空间的操作,而建堆解决TopK问题就可以解决这个问题。先将建堆操作的结论告诉大家:要TopK最大的就建小堆要TopK最小的就建大堆为什么要反着来呢?我们来讨论具体操作思路。拿TopK最大举例,要找K个最大数据就先建立一个能放K个数据的小堆

2021-08-28 16:36:03 190 1

原创 数据结构之堆(Heap),堆的相关操作,用堆模拟优先级队列

目录堆的概念堆的存储方式堆的相关操作堆的向下调整。堆的创建堆的插入和向上调整堆的删除用堆模拟优先级队列堆的概念堆是逻辑结构为二叉树存储结构为数组数组的一种数据结构,为什么这么说呢?因为我们就是把堆想象成一棵有特殊功能的二叉树,然后把它按照层序遍历的顺序放到数组中。堆有大堆小堆之分,大堆是指根节点为堆中最大值的堆,小堆是指根节点为堆中最小值的堆。堆中某个节点的值总是小于等于或大于等于其父亲节点的值,前者称为就是大堆,后者为小堆。堆总是一棵完全二叉树。小堆:大堆:可以看到小堆的父亲节点都小于

2021-08-27 23:55:40 367 2

空空如也

空空如也

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

TA关注的人

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