自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ入门

服务异步/解耦 :服务之间通过RPC进行通信的方式是同步方式,服务消费方需要等到服务提供方相应结果后才可以继续执行,使用MQ之后的服务通信是异步的,服务之间没有直接的调用关系,而是通过队列进行服务通信, 应用程序解耦合 MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。消费者接收消息流程: 1、消费者和Broker建立TCP连接 2、消费者和Broker建立通道 3、消费者监听指定的Queue(队列) 4、当有消息到达Queue时Broker默认将消息推送给消费者。

2024-12-09 00:27:25 1095

原创 java内存模型

由于计算机的存储设备与处理器的运算速度有着几个数量级的差距,所以现代计算机不得不多加一层或者多层高速缓存来作为内存和处理器之间的缓冲,使读写速度尽可能接近处理器的运算速度。基于高速缓存的存储交互也带来了一个新的问题,缓存一致性,即当多个处理器的运算任务都涉及到同一块主内存区域时,将可能导致缓存数据不一致。在多路处理器系统中,每个处理器都有自己的高速缓存,而他们又共享同一主内存,这种系统称为内存多核系统为了解决这一问题,需要每个处理器访问缓存的时候都遵守一些协议。

2024-12-02 10:57:44 934

原创 CMS收集器和G1收集器

垃圾收集的目标范围要么是新生代,要么是老年代,再要么是整个Java堆。

2024-11-24 20:14:39 947

原创 内存分配与回收策略

对象在Survivor区中每熬过一次Minor Gc,年龄就增加1岁,当它的年龄增加到一定程度(默认为15),就会被晋升到老年代中。为了能更好地适应不同程序的内存状况,HotSpot虚拟机并不是永远要求对象的年龄必须达到-XX:MaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于 Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到-XX:MaxTenuringThreshold 中要求的年龄。

2024-11-24 20:10:28 839

原创 docker

restart 重启策略,定义是否重启容器1、no,默认策略,在容器退出时不重启容器2、on-failure,在容器非正常退出时(退出状态非0),才会重启容器3、on-failure:3 在容器非正常退出时,重启容器,最多重启3次4、always,在容器退出时总是重启容器,5、unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。docker-compose -f docker-compose.yaml up -d //-f调用文件。

2024-11-11 11:55:11 865

原创 StringTable

如果你通过字符串字面量来创建字符串(例如),并且这些字面量在编译时就能够确定,那么编译器会尝试将这些字符串放入类的常量池中。在运行时,如果两个字符串字面量具有相同的内容,并且它们都属于同一个类或同一个字符串常量池(在Java 7及更高版本中,字符串常量池是Java堆的一部分,但逻辑上仍然与类的常量池分开管理),那么它们会引用常量池中的同一个字符串对象。因此,在这种情况下,使用==来比较这两个字符串会返回true。new:每次你使用构造函数来创建一个新字符串时,无论内容是否相同,都会在堆上创建一个新的。

2024-11-03 19:54:52 592

原创 直接内存、死锁、方法句柄

当td1醒来兵尝试获取o2的锁时,它会被阻塞,因为o2的锁已经被td2持有,同样地,当td2醒来兵尝试获取o1的锁时,因为o1的锁已经被td1持有,这样,两个线程都陷入了等待状态,形成了死锁。7. 由于直接内存在Java堆外,因此它的大小不会直接受限于-Xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。当flag为1时,线程首选获取o1锁,休眠500毫秒,然后尝试获取o2的锁,如果成功过,则打印"1".不受JVM内存回收管理。

2024-10-28 16:43:18 387

原创 类文件结构和字节码指令

1、类型转换指令可以将两种不同的数值类型相互转换。这些转换操作一般用于实现用户代码中的显式类型转换操作,或者用来处理字节码指令集中数据类型相关指令无法与数据类型一一对应的问题。1、Java是面向对象的程序设计语言。虚拟机平台从字节码层面就对面向对象做了深层次的支持。有一系列指令专门用于对象操作,可进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令。1、操作数栈管理指令:如同操作一个普通数据结构中的堆栈那样,JVM提供的操作数栈管理指令,可以用于直接操作操作数栈的指令。pop、pop2。

2024-10-20 10:35:06 732 1

原创 虚拟机类加载机制

例如java.lang.Object类,无论哪个加载器想要加载此类,都最终会被委派给最顶端的启动类加载器进行加载,确保Object类在程序中的各个类加载器环境中都能保持是同一个类。双亲委派模型的第二次“被破坏”是由这个模型自身的缺陷导致的,双亲委派很好地解决了各个类加载器协作时基础类型的一致性问题(越基础的类由越上层的加载器进行加载),基础类型之所以被称为“基础”,是因为它们总是作为被用户代码继承、调用的API存在,但程序设计往往没有绝对不变的完美规则,如果有基础类型又要调用回用户的代码,那该怎么办呢?

2024-10-13 10:32:10 690

原创 垃圾收集器

标记-复制算法常被简称为复制算法。空闲列表:但如果Java 堆中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候它从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称多为“空闲列表”(Free List)。算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。

2024-10-07 08:15:08 1029

原创 集合Collection

put方法直接使用的HashMap中的put方法,但在LinkedHashMap类中,重写了afterNodeAccess(e)和 afterNodeInsertion(evict)方法,解决了LinkedHashMap中的after、before节点的问题。在容量上,hashTable默认为11,扩容为2n+1,而hashMap默认为16,扩容为2倍。HashSet存储的是对象本身,即它存储的是一个元素的集合,这些元素是唯一的。中,所有的值都被设置为一个固定的哑元素(TreeSet基于TreeMap。

2024-09-28 14:13:35 342

原创 HashMap

底层基于散列算法实现,它是一个key-value结构的容器。key不重复jdk8中的HashMap基于数组+链表+红黑树实现不保证键值的顺序可以存入null值非线程安全,多线程下可能存在问题。

2024-09-22 10:12:58 772

原创 HashMap

底层基于散列算法实现,它是一个key-value结构的容器。

2024-09-16 08:26:21 545 1

原创 jedis

/ 编写我们自己的redisTemplate@Bean// json序列化配置// String的序列化// key采用String的序列化方式// hash的key也采用String的序列化方式// value序列化采用jackon@Component@Data//在企业中,我们所有的pojo都会序列化@Autowired@Test// redisTemplate 操作不同的数据类型,api和我们的指令是一样的。

2024-06-01 20:13:53 229

原创 redis

应用:hash变更的数据user name age,尤其是用户信息之类的,经常变更的数据,hash更适合对象的存储,string更加适合字符串的存储。map集合,key—map时候这个值是一个map集合,本质上与string没有太大区别,本质上还是key—value。redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行。在redis中,我们可以把list当作一个栈,或者一个队列。如果移除所有的值,空链表,也代表不存在。如果key不存在,创建新的链表。

2024-05-25 20:54:01 300

原创 springboot

① 定义条件类:自定义类实现Condition接口,重写matches方法,在matches方法中进行逻辑判断,返回boolean值。matches方法两个参数:·context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等·metadata:元数据对象,用于获取注解属性。② 判断条件:在初始化Bean时,使用@conditiona1(条件类.class)注解。

2024-05-18 16:49:08 297

原创 Java Web

dataType:参数类型,默认String,其它值dataType="Integer"defaultvalue:参数的默认值@ApiResponses:用在请求的方法上,表示一组响应。@ApiMode1:用于响应类上,表示一个返回响应数据的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景请求参数无法使用。@ApiIplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面name:参数名。message:信息,例如"请求参数没填好’

2024-05-12 09:13:36 307

原创 log4j

Log4j有三个主要的组件/对象:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。每条日志语句都要设置一个等级(DEBUG、INFO、WARN、ERROR和FATAL)。其中DEBUG<INFO<WARN<ERROR<FATAL。fatal等级最高对应调试信息 一般信息 警告信息 错误信息 严重错误信息。

2024-04-21 10:02:07 1256 1

原创 Spring:

若没有出现Spring Config这一选项,可能是前面的导入 Spring开发的基本包坐标有问题。这周刚开始接触spring ,下周继续学spring。

2024-04-14 14:40:44 163 1

原创 第十一周周记

用String实现字符串拼接,会在方法区中占用大量内存,因为java中字符串是不可变的,每一次拼接都会产生新字符串,即要在字符串常量池中开辟新的空间存储它(产生新的对象)。前者的方法都有synchronized修饰,表示在多线程环境下运行时是安全的,后者没有,在多线程环境下运行是不安全的。3.你可以调用append方法,往里面添加字符串,底层数组满了,会自动进行扩容(底层调用了System.arraycopy()方法,对数组进行扩容,实质就是指向一个更大的数组,原来那个小的由垃圾回收器回收)。

2023-12-31 11:07:47 1757 1

原创 第十周周记

foreach语句与set()和get()方法连用可以用于循环数组列表,从而得到数组列表中的每一个对象。如果有了static,都推荐使用类名称进行调用。如果没有static关键字,必须首先创建对象,然后通过对象才能使用它。原因this代表当前对象,通过谁调用的方法,谁就是当前对象*成员变量:类名称.静态变量 静态方法:类名称.静态方法()原因:因为在内存当中是先有的静态内容,后有的非静态内容。get用于取得属性的值,set用于给属性赋值。静态方法不属于对象,而是属于类的。1.静态不能直接访问非静态。

2023-12-24 15:42:02 364 2

原创 第九周周记

其中Exception是可以抛出的基本类型,在Java类库、方法以及运行时故障中都可能抛出Exception型异常。Exception表示可以恢复的异常,是编译器可以捕捉到的;Error表示编译时和系统错误,表示系统在运行期间出现了严重的错误,属于不可恢复的错误,由于这属于JVM层次的严重错误,因此这种错误会导致程序终止执行。Exception又分为检查异常和运行时异常。注意:缓冲流属于包装流,只能对已有的流进行封装,不能直接关联文件进行操作!缓冲流是一个包装流,目的是缓存作用,加快读取和写入数据的速度。

2023-12-17 08:47:57 349 1

原创 第八周周记

传参,当你不知道要传什么类型的参数时,可以直接将参数定义成Object类型的,这样就可以接收任意类型的参数(JAVA中所有的类都继承自java.lang.Object),但使用时要转换回来。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象,这就是我们说的向上转型。会丢失子类特有的属性以及方法(如下),当父类对象 Animal 指向的是子类对象 Cat,调用子类 Cat 特有的方法 print 时,会报错。使用对象:变量、方法。使用对象:类、接口、变量、方法。

2023-12-10 09:07:26 531 1

原创 第七周周记

常见的行内元素:<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>importment > 行内 > ID选择器 > 类选择器 > 元素选择器 >通配选择器 > 继承。权重是指css选择器的优先级,优先级高的css样式会覆盖优先级底的css样式,优先级越高说明权重越高,反之亦然。常见的块级元素:<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>eg:D:/文件名/文件名/......优先级规则:行内样式>内部样式=外部样式。

2023-12-03 11:33:59 385 1

原创 第六周周记

让父元素的height = line-height,每个子元素都加上: vertical-align:middle;若子元素为块元素,给子元素加上: margin-top,值为:(父元素content-子元素盒子总高)/2。若子元素为行内元素、行内块元素,给父元素加上:text-align :center。若子元素为块元素,给父元素加上: margin : 0 auto;即:可以像处理文本对齐一样,去处理:行内、行内块在父元素中的对齐。1.行内元素、行内块元素,可以被父元素当做文本处理。

2023-11-26 15:32:20 330 1

原创 第五周周记

用于通信的端点是由Socket来定义的,而Socket是由IP地址和端口号组成的。本周学习了java的网络程序设计,有亿点难,根本什么都记不住,什么都不知道。TCP在通信的两端各建立了一个Socket对象,用Socket对象来代表两端的通信端口,并通过Socket产生的IO流来进行网络通信。TCP是通过在端点与端点之间建立持续的连接而通信的,并以字节流的方式发送出去。UDP是一种无连接的传输协议,传输是无序的,也不能确保绝对安全可靠。TCP/IP网络参考模型包括四个层次:应用层,传输层,网络层,链路层。

2023-11-18 22:17:45 41 1

原创 第四周周记

eg: class GeneralType T必须是Number类或是继承了Number类的子类或是实现了Number接口的类。当这种类型参数用在类,接口,以及方法的声明中时,则分别称为泛型类,泛型接口,泛型方法。”通配符,则默认是“?泛型类与泛型方法的区别:对于泛型方法,不需要吧实际类型传递给泛型方法;当需要在一个程序中使用同一个泛型对象名去引用不同的泛型对象时,就需要使用通配符“?类名对象名=new 类名 ([构造方法参数列表]))

2023-11-11 16:43:36 39 1

原创 第三周周记

求两个数的最大公约数:遍历字符串:判断字符类型:保留几位小数:递归: 重载是指同一个类中具有多个相同名称的多个方法。方法的重载中参数的类型是关键,仅仅是参数的变量名不同是不行的。也就是说,参数的列表必须不同:或者参数个数不同,或者参数类型不同,或者参数顺序不同。构造方法的名称必须与它所在的类名完全相同。构造方法不需要在程序中直接调用,而是在对象创建时自动调用并执行。构造方法没有返回值。,构造方法名前不能用修饰符void来修饰。构造方法的主要作用是完成对类对象的初始化工作。若在一个类中只定义了一个有参数的构造

2023-11-05 15:34:24 29

原创 第二周周记

先执行Test类,将Test类提到方法区,接着执行Test类中的main方法,接着创建对象,创建对象先引student类,所以将student类加载到方法区去,接着在student类中定义一个学生变量s1,因为变量是放在方法里面的,因此在栈内存中开辟一块变量空间,来代表s1变量。接着执行new Student这一行代码,然后在堆内存中开辟一块空间,来代表学生对象,同时产生一个学生对象地址,地址是十六进制形式。接着产生的学生对象地址交给栈内存中的s1变量,这样s1变量才能根据地址指向堆内存中的学生对象。

2023-10-29 17:52:56 37 1

原创 一周的总结

选中此电脑单击右键,选择属性,选择高级系统设置,选择高级,选择环境变量,选择系统变量,点击新建 ,变量名输入JAVA_HOME 变量值,同时也可以复制JDK的安装目录 ,返回选择path变量 ,点击编辑 ,点击新建 ,输入%JAVA_HOME%\bin,最后点击 3个确定。java的基本数据类型包括整数型,浮点型,字符型,布尔型。总而言之,这一周我过的很充实,学到了不少关于java的知识,同时也希望我以后能够更好的掌握java。把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。

2023-10-22 15:36:20 37 1

空空如也

空空如也

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

TA关注的人

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