自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

记录大学四年代码

记录大学四年代码。。。。

  • 博客(57)
  • 收藏
  • 关注

原创 RabbitMQ 快速入门

生产者”想要将不同的消息分发给不同的 Queue(甚至广播给所有的 Queue),就需要可以定义消息路由分发的组件“交换机 (Exchange)”,将 Exchange 和 Queue 通过。为了更好的管理不同种类的消息,可以创建多个类型的队列,生产者可以自定义 Queue 的名字,并且根据需要,将消息投递到不同的 Queue 中。“优先级队列(Priority Queue)”是一种特殊的消息队列,它允许消息按照优先级进行排序,高优先级的消息会被优先消费,而。,将消息投递到绑定键完全匹配的队列。

2025-03-24 15:23:21 833

原创 深入理解ThreadLocal:线程安全的“独享空间”

ThreadLocal是 Java 提供的一种用于线程本地存储的工具类,它可以为每个线程提供独立的变量副本,从而实现线程隔离。主要用于在多线程环境下存储线程独有的数据,避免多个线程间共享变量带来的数据一致性问题。

2025-03-20 21:09:15 1084

原创 对象引用类型

引用类型GC 何时回收是否影响 GC常见应用强引用(StrongReference)永不回收(除非手动置null是普通对象、业务逻辑软引用(SoftReference)内存不足时回收否缓存(图片、数据)弱引用(WeakReference)发现后立即回收否虚引用(PhantomReference)对象被回收后通知否监控回收、清理资源强引用:普通对象,GC 不会自动回收,可能导致内存泄漏。软引用:用于缓存,GC 只有在内存不足时才会回收。弱引用随时可能被 GC 回收,用于等。虚引用。

2025-03-20 02:02:56 1019

原创 线程池-抢票系统性能优化

Java线程池是一种用于优化线程使用和管理的工具,它通过复用一定数量的线程来执行多个任务,从而减少了创建和销毁线程的开销,提高了程序的性能和响应速度。在前面,我们通过创建多个线程模拟抢票场景,并且使用加锁的方式解决了车票超卖的问题。‼️当用户量较大时,就需要频繁的创建线程对象、释放线程对象,十分麻烦。池化后,性能得到了质的飞跃🚀。Java中的线程池是通过。接口及其子类来实现的。

2025-02-11 14:22:24 593

原创 Java多线程模拟售票超卖问题-解决方法

多个线程各自占有一些共享的资源,并且相互等待其他线程占有的资源才能运行,从而导致两个线程都在等待对象释放资源。上述情况明确指向了线程同步机制的重要性。在并发编程中,为确保操作的正确性和数据的一致性,必须采取有效的。:Thread 类是通过继承实现,但是一个类只能继承一个父类,所以具有一定的局限性。多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低。这种基于随机选择而非严格遵循请求顺序的锁称为非公平锁。访问资源时在空闲等待时同时访问其他资源,措施来避免竞态条件的发生。Java 的线程池(如。

2025-02-10 16:07:12 1100

原创 ConcurrentHashMap

是 Java 并发包()中提供的一种线程安全的哈希表实现,其主要目标是在多线程环境下提供高效的并发访问和更新能力,同时尽量减少锁竞争,从而达到较高的性能。线程安全允许多线程并发地进行读写操作,无需对整个数据结构进行全局加锁,它通过细粒度的同步机制确保线程安全。高并发性能: 在高并发场景下,相比于传统的Hashtable或者对HashMap,ConcurrentHashMap 对全部方法进行同步包装,提供了更高的吞吐量和更低的锁竞争。不允许 null: 与HashMap不同,不允许存储null键或。

2025-02-10 10:30:32 833

原创 手写Spring IOC-简易版

我们可以使用 Java 中的反射。对象,这会导致资源浪费,在严重情况下可能会引发。假设 Web 应用程序现在运行正常。实例作为 value 存储在一个。方法,说明依赖注入成功。接口时,都会创建一个。

2024-10-17 17:23:14 783 1

原创 Java-反射机制

反射机制允许程序在执行期借助于 ReflectionAPI 取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到。加载完类之后,在堆中就产生了一个 Class 类型的对象(一个类只有一个 Class 对象),这个对象包含了类的完整结构信息。通过这个对象得到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,形象的称之为反射。

2024-10-16 14:24:30 692

原创 HashMap源码解读

HashMap 是 Map 集合体系中最常用的集合类,以下是其主要的特点:键值对存储:HashMap存储数据的形式是键值对,你可以通过键来获取、更新或删除对应的值。快速访问:HashMap提供了快速的访问能力,其时间复杂度接近 O(1),这是因为 HashMap 通过计算键的哈希码来直接定位数据的存储位置。无序集合:HashMap不保证元素的顺序,也就是说,遍历HashMap时元素的顺序与插入顺序无关。允许一个null键和多个null值:HashMap允许使用一个null键和多个null值。

2024-10-12 15:15:56 804

原创 LinkedList源码解读

LinkedList 是对 Java 集合框架中 List 接口的一种具体实现,归属于线性数据结构的范畴。其核心内部结构是通过双向链表(double-linked list)来实现的,这使得它在元素插入、删除操作上具备较高的效率,尤其是在列表的首尾进行操作时。相较于数组实现的列表,如 ArrayList,LinkedList 在非索引访问或遍历操作上可能效率较低。LinkedList 类继承自 AbstractList 抽象类,并且实现了 List 接口以及标记接口 Serializable。

2024-10-11 11:00:10 504

原创 ArrayList源码解读

ArrayList 是对List接口的一种具体实现,属于单列集合类型。其内部数据结构基于动态数组实现,允许在运行时根据需要自动调整容量,从而实现了对元素的高效存储与访问。ArrayList 类继承自 AbstractList 抽象类,并且实现了 List 接口以及标记接口 Serializable。通过实现 Serializable 接口,ArrayList 集合的实例能够支持序列化过程,从而允许对象的状态被转换成可以存储或传输的形式,用于网络传输或保存到文件等。

2024-10-11 10:16:00 1047

原创 Ubuntu设置国内镜像(阿里云、华为云)

国内有很多 Ubuntu 的镜像源,包括阿里的、网易的,还有很多教育网的源,比如:清华源、中科大源等。通过以下地址可以看到阿里云 Ubuntu 各个版本的镜像地址,从中选择自己的系统版本就好,一定要选择。,Ubuntu每一个版本都有一个代号,这个一定要跟国内源对应,否则会出问题。可以看到系统的版本号是。

2024-08-08 10:59:30 2455 2

原创 MYSQL-性能分析工具

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。通过分析慢查询日志,可以找到数据库性能的瓶颈,并进行优化。上述四种方法均以执行时间作为衡量SQL性能的标准,但这种方法仅能提供大致的评估,并非精确衡量SQL语句性能的手段。慢查询记录的是执行耗时时间超过预设值 2 秒的查询记录,假设现在需要优化 1 秒以内的 SQL 查询,如何定位这条记录呢?:查询中每个表的顺序编号,标识查询执行的顺序。的需要读取的数据行数,影响性能的一个重要因素。

2024-07-30 16:52:57 1061

原创 MYSQL-存储引擎

InnoDB 是 MySQL 的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。支持事务行级锁定外键约束、MVCC(多版本并发控制)除了增加和查询外,还需要更新、删除操作,那么,应优先选择 InnoDB 存储引擎。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑 InnoDB 引擎。数据文件结构:(在《第02章_MySQL 数据目录》章节已讲)

2024-07-30 09:13:52 437

原创 MYSQL-初级-事务篇

事务是一组操作集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起想系统提交或撤销请求,这么操作要么全部执行成功,要么全部失效。

2024-07-30 09:08:55 1000

原创 MYSQL-索引

在MySql数据库中,索引适用于加快数据检索操作的数据结构,索引帮我数据管理系统快速定位到数据所在行,而无需扫描整个表。

2023-10-14 20:43:40 370

原创 Java-集合框架

Java的集合框架提供了一组用于存储、管理和操作数据的类和接口。这个框架提供了各种数据结构,如列表、集合、队列和映射,以满足不同的数据处理需求。CollectionMap两大类。

2023-10-11 23:56:02 260

原创 Java-多线程

多线程编程是现代软件开发不可或缺的一部分,但也存在复杂性和挑战。通过深入理解多线程的原理和最佳实践,开发人员可以更好地利用多核处理器,提高程序性能和响应性,同时避免潜在的线程安全问题。本博客提供了一个较为基础的多线程编程指南,帮助开发人员入门这一重要领域的技能。

2023-10-08 08:27:27 200

原创 Java-包装类

通过这种方式,您可以更清晰地呈现每个注解的信息和源码分析,使读者更容易理解和学习Java常用包装类的使用。在父类中,AbstractStringBuilder有属性char[] value,用于存储字符,不是final修饰;字符序列存放AbstractStringBuilder的char[] value数组,因此存放在堆中。装箱是将基本数据类型转为对应的包装类对象的过程,可以直接通过赋值或者方法调用。拆箱是将包装类对象转为基本数据类型的过程,它可以直接通过赋值或者方法调用完成。一个可变的字符序列。

2023-10-08 08:07:24 111

原创 Java-Exception

当程序中出现了某些“错误”,但该类错误信息并没有在Throwable子类中描述处理,这个时候可以自定义异常类,用于描述该错误信息自定义异常步骤自定义异常类;如果继承Exception,属于编译类型异常;如果继承RuntimeException,属于运行时异常(通过继承RuntimeException)super();通过自定义异常类提供多个构造函数,以便能够传递异常消息和可能的原因(Throwable这样可以让您的异常提供更多信息,以便于调试和理解问题。

2023-10-08 08:03:08 294

原创 Java-Annotation(注解)

Java注解(Annotation)是Java编程语言中的一个重要特性,它们提供了一种在源代码中添加元数据信息的方式,以便在编译、运行时或工具处理时使用。本文将深入探讨Java注解的核心概念和用途。

2023-10-08 08:01:36 130

原创 排序算法-选择排序(Java)

选择排序 (selection sort)的工作原理非常直接:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。

2023-08-28 21:54:10 589

原创 图的基本操作(C语言)

图的基本操作图无向图编译器:VS Code语言:C语言图无向图算法思想:待更新。。。/*算法思想*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define maxvertnum 100 //最大的顶点个数typedef enum{DG,UDG,DN,UDN} graghkind; //图的类型(保存的是常量)typedef struct{ int adj;

2021-12-11 23:10:12 2759

原创 数组-稀疏矩阵的基本操作(C语言)

稀疏矩阵的基本操作数组稀疏矩阵代码结果编译器:VS Code语言:C语言数组稀疏矩阵稀疏矩阵的基本操作主要有:创建稀疏矩阵、还原稀疏矩阵、复制稀疏矩阵、销毁稀疏矩阵、稀疏矩阵的转置。。。代码#include<stdio.h>#include<stdlib.h>#define maxsize 100//Ternary structuretypedef struct { int i,j; //line,colums int v; //non-ze

2021-12-09 13:24:43 1608

原创 如何将代码上传之Github上托管

将自己的代码托管至Github上。

2021-12-07 11:38:10 185

原创 打开 截图和草图 应用,点击新建,提示 “需要使用新应用以打开此ms-screenclip链接”

问题:当打开”截图和草图“应用时,点击新建,提示 “需要使用新应用以打开此ms-screenclip链接”。解决办法:cmd管理员模式输入:*DISM /Online /Add-Capability/CapabilityName:Windows.Client.ShellComponents~~~~0.0.1.0*等待几分钟下载完成即可。...

2021-12-07 11:17:49 8978 7

原创 栈和队列的基本操作 (C语言)

栈的基本操作,初始化、删除、插入、判断。。

2021-12-07 11:07:45 521 1

原创 线性表及其应用 (C语言)

线性表及其应用实验内容实验一实验内容实验一根据给定的整型数组,以尾插法建立一个单链表,并实现以下操作:① 查找:输入一个欲查找的整数,找到则显示第一个相匹配的整数在单链表中所处的位置,若不存在,则显示提示信息。② 删除:输入一个欲删除的整数e ,若存在则在单链表中删除第一个值为e 的元素。③ 插入:输入一个欲插入位置i 和欲插入元素e,将e 插入到第i 个整数之前(注意i 的合法性)。```#include <stdio.h>#include <stdlib.h&gt

2021-12-05 21:39:07 531

原创 《机器学习实战》 K-近邻算法(第2章)

运行平台: WindowsPython版本: Python3.9IDE: VS code文章目录前言2.1 K-近邻算法概述前言  随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的K-近邻算法(KNN)。提示:以下是本篇文章正文内容,下面案例可供参考2.1 K-近邻算法概述优点:精度高、对异常值不敏感、无数据输入假定缺点:计算复杂度高、空间复杂度高使用数据范围:数值型、标称型  它的工作原理是:存在一个样本数据集合,也称.

2021-09-16 11:38:24 284

原创 《机器学习实战》机器学习概述

标题机器学习的简单概述例如,对于垃圾邮件的检测,侦测一个单词是否存在并没有太大的作用,然而当某几个特定的单词同时出现时,再辅以考察邮件长度及其它因素,人们就课更准确地判定该邮件是否位垃圾邮件。 简单地说,机器学习是把无序的数 换成有用的信息 。表1-1是我们用区不同类需用的个不同鸟类需要使用的四个不同的属性值,我们选用体重、翼展、有脚蹼、背后颜色为评测基准 。现实中,可能会测量多的值 。通常的做法是测量所有 可测属性, 而后再挑选出重要部分。 下面测量的这四种值称之为特征,也可以称作属性, 但本书一律将

2021-09-15 22:52:16 595

原创 python递归求阶层

#python递归求阶层#求阶层def add(n): if n > 0: return n*add(n-1) else: return 1n=int(input("请输入要求的阶层:"))print(add(n))码片请输入要求的阶层:9362880

2021-04-14 16:08:32 811

原创 指针访问数组的几种方法

#指针访问数组的几种方法地址法、指针变量法、指针变量下标法#include<stdio.h>int main(){ int a[5], i, * p; p = a; printf("enter five numbers\n"); for(i=0;i<5;i++) { scanf_s("%d", &a[i]); } for (i = 0; i < 5; i++) { printf("%3d", *(a + i)); /*地址法*/ }

2021-02-03 11:20:58 2432

原创 手把手教你解决ssh无法连接树莓派3b的问题(没有显示器)

废话不多,直接上步骤1、在boot目录中,cmdline.txt中添加ip=192.168.137.2地址2、设置有线网卡3、设置以太网的ip=192.168.137.1地址(如果出现一下问题,不慌!点设置,重启电脑,再将以太网的ip地址设置为192.168.137.1就可以了)4、建立ssh空文件,因为当前树莓派3b默认没开启ssh服务,需要在boot目录下新建5、再新建一个空文件wpa_supplicant.conf ,添加下面的代码country=CNctrl_inter

2021-01-23 17:18:45 3852 3

原创 =对成绩升降序排列(swich语句,结构体

#对成绩升降序排列(swich语句,结构体)有没有大佬看看能不能改进的,谢谢了#include<stdio.h>struct student{ char name[20]; float score;};int low(struct student stu[]){ struct student t; int i,j,k; printf("原来的成绩顺序\n"); printf("姓名 成绩\n"); for(i=0;i<3;i++) { printf

2021-01-10 20:29:58 239 2

原创 利用switch语句,求最大值最小值

#利用switch语句,求最大值最小值#include<stdio.h>int max(int x,int y){ int z=0; z=x>y?x:y; return(z);}int min(int x,int y){ int z=0; z=x>y?y:x; return(z);}int main(){ int button,t,x,y; printf("求最大数请按1,求最小数请按2\n"); scanf("%d",&button);

2021-01-09 23:49:12 2467 2

原创 输入十个整数,通过调用函数从大到小排序

#输入是个整数,通过调用函数从大到小排序#include<stdio.h>int sort(int b[],int n){ int i,j,k; for(i=0;i<n;i++) { for(j=i;j<n;j++) { if(b[i]<b[j]) { k=b[i]; b[i]=b[j]; b[j]=k; } } }}int main(){ int a[10],*p,i; printf("请输入十个

2021-01-06 14:28:47 5622 3

原创 二维数组指针

#二维数组指针对于新手来说,不花时间练练真的不行,眼睛都花了#include<stdio.h>int main(){ int a[3][4]={{1,2,4,5},{6,7,8,9},{10,33,32,4}}; printf("%d,%d\n",a,*a); /*0行首地址和0行0列地址*/ printf("%d,%d\n",a+1,*a+1); /*1行首地址和0行1列地址*/ printf("%d,%d\n",a,&a[0]); /*0行首地址*/ printf

2021-01-05 17:01:01 145 1

原创 利用数组实现行列数值交换

#利用数组实现行列数值交换只要将a[i][j]的数值转换为b[j][i]#include<stdio.h>int main(){ int a[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf("%4d",a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("b数组\n");

2021-01-04 16:59:10 450

原创 打印菱形

#打印菱形#include<stdio.h>int main(){ int i,j,k; for(i=0;i<=4;i++) { for(j=0;j<=3-i;j++) { printf(" "); } for(k=0;k<=2*i;k++) { printf("*"); } printf("\n"); } for(i=3;i>=0;i--) { for(j=0;j<=3-i;j++) { print

2021-01-02 19:56:52 110

原创 判断100~200之间的素数

#判断100~200之间的素数1、先判断是否为质数2、输入n,如果n都不能被能被2~n-1整除,则为素数。#include<stdio.h>int main(){ int i,num; for(num=100;num<=200;num++) { for(i=2;i<=num-1;i++) { if(num%i==0) break; } if(i<num) continue; else if(i>=num) prin

2020-12-30 22:28:15 898

空空如也

空空如也

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

TA关注的人

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