自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员三木的博客

闲来无事,敲三分代码,送七分与你

  • 博客(465)
  • 资源 (1)
  • 收藏
  • 关注

原创 说一下 SpringBoot 的自动装配原理

Spring Boot 通过@EnableAutoConfiguration开启自动装配,通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配,自动配置类其实就是通过@Conditional按需加载的配置类,想要其生效必须引入spring-boot-starter-xxx包实现起步依赖。springboot 的自动装配的起点是。

2024-04-24 10:00:00 44

原创 请解释自动装配模式的区别?

在 Spring 框架中共有 5 种自动装配。

2024-04-23 23:20:30 35

原创 怎样用注解的方式配置 Spring?

Spring 在 2.5 版本以后开始支持用注解的方式来配置依赖注入。可以用注解的方式来替代 XML 方式的 bean 描述,可以将 bean 描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即可。在 标签配置完成以后,就可以用注解的方式在 Spring 中向属性、 方法和构造方法中自动装配变量。注解注入将会被容器在 XML 注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。如果你想要在你的应用程序中使用关于注解的方法的话,请参考如下的配置。

2024-04-23 23:19:36 174

原创 如何用基于 Java 配置的方式配置 Spring?

在上面的例子中,com.acme 包首先会被扫到,然后再容器内查找被 @Component 声明的类,找到后将这些类按照 Sring bean 定义进行注册。上述配置方式的实例化方式如下:利用 AnnotationConfigApplicationContext 类进行实例化。Spring 对 Java 配置的支持是由。

2024-04-23 23:19:01 124

原创 Spring 相关的几道简单但不好达的面试题

控制反转,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通俗地讲,IOC 就是把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转。“依赖”是指接收方所需的对象。“注入”是指将“依赖”传递给接收方的过程。在“注入”之后,接收方才会调用该“依赖”。

2024-04-22 23:13:29 406 1

原创 [JVM 面试题] 类的加载过程

。通过全限定名来加载生成 class 对象到内存中,然后进行验证这个 class 文件,包括文件格式校验、元数据验证,字节码校验等。准备是对这个对象分配内存。解析是将符号引用转化为直接引用(指针引用),初始化就是开始执行构造器的代码。

2024-04-22 23:11:34 199

原创 JVM 数据区域

Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。这些区域有不同的用途。

2024-04-21 23:00:11 675 1

原创 JVM 垃圾回收算法(重要)

标记—清除算法是最基础的垃圾回收算法,后续的垃圾收集算法都是基于标记—清除算法进行改进而得到的。标记—清除算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。标记过程与标记—清除算法一样,但后续步骤不是直接回收被标记的对象,而是让所有存活的对象都向一端移动,然后清除边界以外的内存。复制算法是将可用内存分成大小相等的两块,每次只使用其中的一块,当用完一块内存时,将还存活着的对象复制到另外一块内存,然后把已使用过的内存空间一次清理掉。复制算法解决了效率问题。

2024-04-21 22:57:13 576

原创 JVM 引用的分类

JDK1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。在 JDK 1.2 之后,Java 将引用分成四种,按照引用强度从高到低的顺序依次是:强引用、软引用、弱引用、虚引用。引用计数算法和根搜索算法都需要通过判断引用的方式判断对象是否可回收。

2024-04-21 22:54:42 455

原创 JVM 如何判断对象是否可回收

垃圾回收器在对堆进行回收之前,首先需要确定哪些对象是可回收的。常用的算法有两种,引用计数算法和根搜索算法。

2024-04-21 22:54:08 361

原创 Java 与垃圾回收有关的方法

该方法在 Object 类中被定义,在释放对象占用的内存之前会调用该方法。该方法的默认实现不做任何事,如果必要,子类应该重写该方法,一般建议在该方法中释放对象持有的资源。方法 gc 的作用是提示 Java 虚拟机进行垃圾回收,该方法由系统自动调用,不需要人为调用。其实,java.lang.System.gc 等价于 java.lang.Runtime.getRuntime.gc 的简写,都是调用垃圾回收器。调用垃圾回收器的方法是 gc,该方法在 System 类和 Runtime 类中都存在。

2024-04-21 22:53:23 130 1

原创 Java 内存分配原则

主要有一下 3 条原则。

2024-04-21 22:52:49 171

原创 JVM 的常用调优参数

【代码】JVM 的常用调优参数。

2024-04-21 22:52:15 82

原创 [Java基础面试题] volatie 与 synchronized

否则,该线程就会阻塞等待,直到获得锁为止。当一个线程执行完 synchronized 代码块或方法后,它会释放锁,这样其他线程才有机会获取锁并执行相应的操作。需要注意的是,使用synchronized关键字会对程序性能产生一定影响,因为每次进入synchronized代码块或方法都需要获得锁,这可能导致线程之间的竞争和等待。需要注意的是,虽然 volatile 变量保证了它们的读写操作是原子性的,但它并不保证多个操作的组合是原子性的。关键字用于修饰变量,表示该变量是易变的,其值可能会被不同的线程修改。

2024-04-21 22:51:42 247

原创 [Java 基础面试题] IO相关

IO 即,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在 Java 中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

2024-04-21 22:50:41 437

原创 [Java基础面试题] Map 接口相关

② 创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为 2 的幂次方大小(HashMap 中的tableSizeFor()方法保证,下面给出了源代码)。也就是说 HashMap 总是使用 2 的幂作为哈希表的大小,后面会介绍到为什么是 2 的幂次方。① 创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。下面这个方法保证了 HashMap 总是使用 2 的幂作为哈希表的大小。

2024-04-21 22:49:11 423

原创 [Java 面试题] ArrayList篇

ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。但是它们都会把相应位置的元素设置为null,以便垃圾收集器回收掉不使用的元素,节省内存。一般情况下,如果扩容1.5倍后就大于期望容量,那就返回这个1.5倍旧容量的值。因为 Java 中,数组操作不能越界,所以我们必须要保证在插入操作的时候,不会抛出数组越界异常。ArrayList有三个构造方法,不同的构造方法的容量是不一样的,具体可以查看JDK 源码。则表示的“存放的元素的个数”。里面有两个概念,一个是。

2024-04-16 22:43:09 506 1

原创 [leetcode] 快乐数 E

链接:https://leetcode.cn/problems/happy-number。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 n 是 快乐数 就返回 true;不是,则返回 false。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。如果这个过程 结果为 1,那么这个数就是快乐数。编写一个算法来判断一个数 n 是不是快乐数。来源:力扣(LeetCode)

2024-04-16 22:41:25 223

原创 [leetcode 链表] 反转链表 vs 链表相交

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。

2024-04-14 23:04:14 759 1

原创 [leetcode] 705. 设计哈希集合

void remove(key) 将给定值 key 从哈希集合中删除。// 返回 False ,(未找到)myHashSet.contains(2);// 返回 False ,(已移除)bool contains(key) 返回哈希集合中是否存在这个值 key。// 返回 True。// 返回 True。void add(key) 向哈希集合中插入值 key。

2024-04-14 23:00:49 554

原创 [尚硅谷flink] 检查点笔记

Barrier对齐: 一个Task 收到 所有上游 同一个编号的 barrier之后,才会对自己的本地状态做备份精准一次:在barrier对齐过程中,barrier后面的数据 阻塞等待(不会越过barrier)至少一次:在barrier对齐过程中,先到的barrier,其后面的数据 不阻塞 接着计算非Barrier 对齐:一个Task 收到 第一个 barrier时,就开始 执行备份,能保证 精准一次(fhink 1.11出的新算法)

2024-04-14 22:53:26 1056

原创 [尚硅谷 flink] 状态管理 笔记

Flink的状态有两种:托管状态(Managed State)和原始状态(Raw State)。托管状态就是由Flink统一管理的,状态的存储访问、故障恢复和重组等一系列问题都由Flink实现,我们只要调接口就可以;而原始状态则是自定义的,相当于就是开辟了一块内存,需要我们自己管理,实现状态的序列化和故障恢复。通常我们采用Flink托管状态来实现需求。

2024-04-13 17:37:46 1416 1

原创 [AIGC] `InitializingBean`接口 的使用场景

接口通常用于在Spring Bean的所有属性设置完后执行特定的初始化操作。这在某些特定场景下非常有用,并且被广泛使用。接口在Spring管理的Bean创建完成后执行一些初始化的工作。接口常见的使用情景。根据你的需求,你可以灵活运用。

2024-04-11 22:10:25 354 1

原创 [AIGC] Spring中的SPI机制详解

SPI (Service Provider Interface)是Java中服务提供者接口的缩写,它是Java提供的一种用于被第三方实现或扩展的接口,SPI的作用就是为这些被扩展的API寻找服务实现的过程。SPI本质是面向接口编程思想的具体应用,它降低了模块之间的耦合度,提高了系统的可扩展性。

2024-04-11 21:45:37 650

原创 [AIGC] Java List和Map常用API以及其Python实现方式对照介绍

Java和Python作为当今非常浅显易懂的编程语言,其数据结构中对于List和Map(Java)或List和Dict(Python)的操作无疑是每个程序员都非常必需的知识。本文将介绍在Java中对List和Map常用的一些操作,并给出在Python中对应的实现方式。

2024-04-10 22:57:51 479 1

原创 [AIGC] Python列表([])和字典({})常用API介绍

Python的列表(list)和字典(dict)是两种常用的数据结构,在编程任务中经常会使用到。下面为你介绍一下他们的常用API。

2024-04-10 22:52:59 512

原创 [AIGC] Python字符串常用API介绍

在Python编程中,常常需要处理字符串,如拼接、切割、替换等操作。Python提供了大量处理字符串的API,以下将介绍一下最常用的一些。

2024-04-09 23:12:47 289 1

原创 [尚硅谷flink学习笔记] 实战案例TopN 问题

基于窗口的结束时间来设定延迟,其实并不需要等太久——因为我们是靠水位线的推进来触发定时器,而水位线的含义就是“之前的数据都到齐了”。而在等待过程中,之前已经到达的数据应该缓存起来,我们这里用一个自定义的HashMap来进行存储,key为窗口的标记,value为List。由于最后的排序还是基于每个时间窗口的,输出的统计结果中要包含窗口信息,我们可以输出包含了vc、出现次数(count)以及窗口结束时间的Tuple3。基于这样的想法,我们可以从两个方面去做优化:一是对数据进行按键分区,分别统计vc的出现次数;

2024-04-09 23:10:39 560

原创 [AIGC] 使用Python刷LeetCode:常用API及技巧指南

在刷LeetCode题目时,Python提供了一些非常实用的内建函数和语法特性,理解和掌握这些API不仅可以帮助我们提高解题效率,而且有助于我们编写出更加优雅、易读的代码。在本文中,我们将介绍一些在解决LeetCode问题时常用的Python API。

2024-04-08 23:34:56 276 2

原创 [AIGC] 分布式锁及其实现方式详解与Python代码示例

在简单的理解中, 分布式锁就是一个能在分布式系统中多个节点间同步的锁。分布式锁的功能就像传统的单节点锁一样,但是它可以帮助你在网络的多个节点中对资源进行同步。

2024-04-08 22:35:29 654

原创 [AIGC] 实现博客平台的推荐排行榜

实现推荐排行榜可能需要一些时间和工作,但它能显著提升用户的体验和网站的价值。通过精心选择指标、收集数据、设计算法和显示排行榜,你可以使你的网站更具吸引力,吸引更多的用户。

2024-04-07 22:49:47 623 1

原创 [AIGC] MySQL连接查询全面解析

连接查询是SQL的一个重要特性,它允许我们将多个表中的数据按照特定的关联条件进行组合,从而获取更为复杂的查询结果。连接操作的基础是两个表之间存在某种关联关系,也就是某个表的某个字段的值和另一个表的某个字段的值存在某种对应关系。// 作者表// 书籍表若我们要查询每本书对应的作者名字,那么就需要用到连接查询。

2024-04-07 22:42:08 263

原创 [AIGC] Spring Interceptor 的执行顺序是怎样的?

方法将会被执行,但这两个方法的执行顺序是与注册顺序恰恰相反的。也就是说,先注册的Interceptor的这两个方法会后执行,后注册的Interceptor的这两个方法会先执行。这种设计允许我们在Interceptor中实现一些类似于前置检查和后置处理的功能,同时也需要我们注意控制Interceptor的注册顺序以保证其正确执行。,则请求处理立即终止,后续的Interceptor以及实际的请求处理方法都不会被执行。方法会按照注册的顺序依次被执行。请求处理完毕后,Interceptor的。

2024-04-07 22:37:53 556

原创 [AIGC] Spring 获取前端请求参数的全面指南

在Spring框架中,我们有多种方式可以获取前端发来的请求参数。

2024-04-07 22:34:35 772

原创 [每天一道面试题] HTTP,FTP,TFTP的底层实现协议是什么

TFTP: 与 HTTP 和 FTP 不同,简单文件传输协议(TFTP)实际上是基于UDP的。TFTP是为了简化传输而设计的,常用于设备的初始引导和将文件传输到有限功能的设备,因此选择使用无连接的UDP协议。它们的底层实现主要依赖于传输层的两种协议—— TCP(传输控制协议) 和 UDP(用户数据报协议)。FTP用于在网络上进行文件的传输,它也使用了TCP的可靠性,以确保文件不会在传输过程中丢失或出错。所以,说到底层实现协议,HTTP 和 FTP 是基于TCP,而TFTP 是基于 UDP。

2024-04-07 22:26:21 297

原创 [尚硅谷 flink] 基于时间的合流——双流联结(Join)

于是对于一条流(不妨叫作A)中的任意一个数据元素a,就可以开辟一段时间间隔:[a.timestamp + lowerBound, a.timestamp + upperBound],即以a的时间戳为中心,下至下界点、上至上界点的一个闭区间:我们就把这段时间作为可以匹配另一条流数据的“窗口”范围。于是对于时间戳为2的A中元素,它的可匹配区间就是[0, 3],流B中有时间戳为0、1的两个元素落在这个范围内,所以就可以得到匹配数据对(2, 0)和(2, 1)。而且流B中的数据可以不只在一个区间内被匹配。

2024-04-07 22:23:03 1024

原创 [尚硅谷flink] 水位线

在事件时间语义窗口下,标记当前时间之前的数据全部到达的一个逻辑标记时间戳。

2024-04-07 22:21:35 517

原创 [AIGC] Spring Interceptor 拦截器详解

Interceptor(拦截器)是Spring MVC框架中的一种特性,类似于Servlet开发中的Filter(过滤器),用于对处理器(handler)的请求进行拦截和处理。然而,与Filter不同的是,Interceptor是完全运行在Spring MVC框架的上下文中的,因此,它能够访问到Spring MVC的控制器(Controller)中的ModelAndView对象,可以更好地与Spring MVC的其他部分集成。

2024-04-06 19:25:39 615 1

原创 [AIGC] Spring Filter 过滤器详解

在Web应用中,Filter(过滤器)是在Java Servlet规范中的一种组件,它的主要目的是对HTTP请求或者响应进行处理。Spring Filter则是Spring框架对Java原生Filter的封装版本和扩展。简单来说,Spring Filter就是拦截进入Spring应用的HTTP请求,并在Spring框架处理请求之前先进行任意的处理,例如权限验证、数据编码转换、防止跨站点请求伪造等。

2024-04-06 19:07:42 668

原创 [AIGC] SpringMVC, Filter, Interceptor之间关系详解

SpringMVC是基于Java的一个用于创建Web应用的框架。它跟随的是基于模型-视图-控制器(MVC)的设计模式。

2024-04-06 18:59:27 673 1

python完整.png

2018年-python学习笔记的分享,从linuix、python基础 ,到python提高,re, SQL

2020-03-26

空空如也

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

TA关注的人

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