- 博客(55)
- 收藏
- 关注
原创 Spring复杂对象的3中创建方法
复杂对象是相对于简单对象可以直接 new 出的对象。这种对象在 Spring 中不可以通过简单对象的创建方式来创建。下面我们将通过实现 FactoryBean 接口、实例工厂、静态工厂三种方法来创建。
2023-09-17 10:36:52
335
原创 Spring工厂模式,模拟ApplicationContext实现
Spring 是一个轻量级的 Java 企业开发解决方案。它集合了众多优秀的设计模式如:单例、代理、工厂模式等。在这其中最基础的也就是工厂模式。在 Spring 问世之前 JavaEE 开发主流使用(EJB)来进行。但是这个框架是重量级的,扩展性以及移植性都是很大的问题并且运行环境苛刻。EJB 的运行依靠 EJB 容器并且 Tomcat 不支持。
2023-09-15 01:43:42
428
原创 Spring Bean的生命周期及三级缓存流程
Spring Bean 的生命周期说起来其实就三个大块:实例化Bean -> 设置属性(注入和装配) -> 初始化 -> 使用Bean -> 销毁Bean这个很好理解,但是内部是怎么样注入,初始化以及销毁?经历怎么样的过程呢?追随这些问题来参考这篇文章。我们先从 三级缓存 -> 实例化... 顺序逐步理解。
2023-09-09 10:41:17
1424
原创 Lock的公平锁与非公平锁
Lock是用于控制多线程访问共享资源的同步机制,Lock接口提供了对锁的操作,包括公平锁与非公平锁。ReentrantLock(可重入锁)是Lock的一个实现类,它提供了可重入的互斥锁。ReentrantLock 可以通过构造函数中传入参数来指定锁的实现类型,默认是非公平锁。。
2023-05-24 20:49:26
466
原创 排序 Comparable 和 Comparator 区别所在
他们都是最上层接口。看一下他们对应的接口关系以及所具有的方法吧!只有一个compareTo方法。我们关注一下compare方法。
2023-04-22 11:21:14
338
原创 哈希常见面试题(最全版本)
而hashCode()方法则需要确保相等的对象具有相等的哈希值,同时尽可能减少哈希冲突的概率,从而提高哈希表的效率。可以通过在对象的hashCode()方法中使用不同的算法,将对象的各个属性值映射为一个整数,从而计算出对象的哈希值。在重写hashCode()方法时,需要注意确保相等的对象具有相等的哈希值,同时不相等的对象尽可能分散在哈希表中。此外,需要确保哈希算法的高效性、正确性和可读性。为了避免哈希冲突,可以采用不同的哈希算法、增加哈希表的大小、调整哈希函数等方法来提高哈希值的唯一性和散列性。
2023-04-20 15:25:20
1493
原创 重写equlas时为什么一定要重写hashcode方法?
hashCode 和 equals 方法 结合一起使用来提高判断对象是否相等的效率因为 Set 集合通过 hashCode 和 equals 两个方法共同判断两个对象是否重复,所以要解决 Set 集合的异常,也需要重写这两种方法。
2023-04-20 09:29:38
1547
原创 面试官问我为什么Integer a = (128) != Integer b (128) 装箱拆箱及IntegerCache问题
在面试的时候面试官给我了几行代码如下:面试官: 下面输出的结果是什么?我: 第一个 true , 第二个 false;面试官: 为什么?我:???????// true// false接下来我们看着源码刨析下这个问题以及该从哪些方面回答。java中有八大数据类型:byte、sort、char、int、long、float、double、boolean。
2023-03-30 17:44:46
1098
原创 StringBuilder 和 StringBuffer 的初始容量及扩容机制
StringBuffer 和 StringBuilder 扩容机制相同,初始化容量机制相同。两者安全性不同,效率不同,更多可以参考String、StringBuilder、StringBuffer的四大区别解析_极品小學生的博客-优快云博客。
2023-03-29 18:56:50
1609
1
原创 面试官问我 String 为什么被 fianl 修饰
被 final 修饰的 char[]fianl 修饰变量表示改变量的值一旦被初始化后不可以修改。fianl 不论是修饰变量、参数、方法、类都表示其 是完美的不可以被修改,或者逻辑顺序不能改变是一个基本逻辑实现元素。
2023-03-29 11:24:28
809
原创 String源码深度刨析
String 实现了三个接口:Comparable: 说明 String 实现了比较功能,可以比较大小(按顺序比较单个字符的ASCII码)Serializable: 说明 String 可以实现序列化CharSequence: 表示是一个有序字符的序列,因为String的本质是一个char类型数组.
2023-03-29 11:20:30
985
原创 String、StringBuilder、StringBuffer的四大区别解析
StringBuilder是执行效率最高的,底层和StringBuffer一样通过char[]数组来实现,支持查询修改操作,效率高但是不安全不安全:在进行多线程处理的时候,多个线程对同一个变量进行修改查询操作的时候会出现数据的混乱,执行错误逻辑,它没有对线程安全进行考虑,是线程不安全的。
2023-03-28 19:12:50
2306
2
原创 final关键字是什么以及final的四种用法
final的作用和名字相似,是终止的意思。他存在的意义是防止逻辑被破坏或者数据篡改。final的四种用法:修饰变量、修饰参数、修饰方法、修饰类
2023-02-25 10:17:55
1407
原创 动态规划dp(三个案例详解)
dp(Dynamic programming)即动态规划的简写。动态规划的思想是找出大问题对应的子问题,通过若干子问题寻找解决这个大问题的递推公式或者方法的思想即大化小,小化更小。例如求第n个斐波那契数就需要求出n-1与n-2的斐波那契数字往前一步一步推导出第n个数。
2022-10-07 23:54:26
955
21
原创 根据前序遍历和[中序遍历]
1. 递归法:先序遍历:根节点→左子树→右子树。中序遍历:左子树→根节点→右子树。后续遍历:左子树→右子树→根节点。根据前序遍历和中序遍历建立二叉树,根据以上性质可知:
2022-10-06 23:40:15
708
4
原创 Java类&对象&封装
从认识论角度考虑是现有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象。从代码运行角度考虑是先有类后有对象。类是对象的模板。
2022-10-04 09:26:55
442
17
原创 哈希桶(详解&创建)
开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址(index = x % array.length()-1),具有相同地址的关键码归于同一子集合,每一个子集合称为一个哈希桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。
2022-10-03 09:39:55
5984
22
原创 了解IO,内外存,文件操作这一篇就够了
IO是input和output两个词的首写,也就是输入和输出,他描述的是计算机数据流动的过程。一台计算机必须有CPU,内存,主板,电源等。而外设如键盘,鼠标,显示器等是我们与计算机交流的媒介,这种将我们的操作给到计算机或者读取计算机的内容的过程正是输出与输入。从计算机架构上来讲,任何涉及计算机核心(CPU和内存)与其他设备进行数据转移的过程就是IO。例如从硬盘将数据放入内存的过程就是输入,将数据从内存放入硬盘的过程就是输出。这都是相对CPU以及内存来讲的。
2022-09-30 16:50:09
1351
2
原创 死锁的四个必要条件及避免策略
互斥条件:一个被加锁的资源一次只能被一个线程访问不可掠夺:当线程获取资源在未完成时其他线程不可以抢夺资源的锁。请求与等待:当资源被线程获取后其他线程想要请求这个资源只能阻塞等待。循环等待:若干个线程形成了一种头尾相接的情况,将所有的资源都占用导致整体死锁或者局部死锁。
2022-09-28 19:40:42
478
1
原创 Semaphore(信号量)介绍以及实例
Semaphore翻译过来是信号量的意思,它的作用是控制多个线程对同一个资源的访问线程数量。比如在停车场停车,里面有10个车位,当这10个车位被停满的时候其他的车只能等待(堵塞)里面有车驶出(release)然后再进入。
2022-09-28 17:29:41
903
2
原创 多线程(Thread类、线程创建、中断、等待、休眠)
全面概述了多线程Thread,线程创建,等待,休眠,堵塞,状态等概念,并用实例解释了线程的创建线程是轻量级进程,一个进程可能包含一个者多个线程。进程频繁的创建消耗的资源比创建线程大家更大,所以引入了线程的概念。
2022-09-02 09:35:08
849
原创 进程和线程的区别和联系
正在运行的程序的实例在操作系统没有引入进程的时候,CPU每次只能执行一个程序多个程序只能顺序执行,这样就造成了资源的浪费浪费了大量的时间,为了提高CPU的利用率于是操作系统引入了进程以及中断处理,这样就实现了通一时间内可以运行多个程序提高效率。.........
2022-09-01 09:57:58
418
原创 进程、进程调度、PCB(详解)
什么是进程?操作系统对进程的调度、进程的创建到销毁为管理进程,操作系统先会创建一个PCB具体内容:我们知道一个cpu核心可以运行一个进程,那为什么我们还可以开启那么多的应用一起使用呢?......
2022-08-31 13:03:17
1376
原创 Java之JDBC编程
JDBC(Java Datebase Connectivity)全名Java数据库连接,是一种通过使用Java与数据库约定风格的API来连接代码和数据库的编程方式,即可以用java代码来操作数据库。二、什么是API ?又为什么会有JDBC这个编程方式呢?它存在的意义是什么呢?API(Application Programming Interface)全名应用程序编程接口,就是我们了解到的函数 / 类 /方法,这样”连接“上就可以使用其中的接口,就像是充电线和手机,我们要充电就需要把可以充电的充...
2022-08-27 18:00:56
909
原创 线性表练习扑克牌游戏(炸金花)
我们需要先有个大概的框架进行起来才能更加高效有条理。要玩炸金花我们需要一副牌,有了牌我们需要将牌打乱,打乱了我们要发牌,好吧听起来很简单是不是突然感觉没那么难了确实是这样,不要急我们再来丰富一下细节,我们要一副牌就需要定义扑克牌是含有什么内容的,我们以哪种方式存放它?(看题目都知道肯定是线性表!!) 我们怎么洗牌呢,洗了牌怎么发牌???...
2022-06-13 18:49:13
1305
1
原创 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串提示:1 ...
2022-06-08 16:57:06
189
1
原创 简单的讲懂KMP算法(配图最细保姆级手把手教会!!)
KMP 算法(Knuth-Morris-Pratt 算法)是一种高效的字符串匹配算法,他比较BF算法复杂度更低但是也更难理解,它的算法非常精妙减少了BF算法(暴力算法,上一篇博客有讲解)的无用重复操作大大减少了循环次数,再加上限制条件使得它的效率更加高效,我有看到许多大神在讲KMP算法但是大部分都是理论性讲述,不易懂打退了许多学者的热情以及自信心,我将会保姆级和大家分析KMP算法的思想以及代码的实现!!!
2022-06-02 15:18:30
6091
10
原创 BF算法(字符串查找)
BF(Brute Force)算法和它的名字一样,就是暴力!没有什么技巧性,就是一个个进行比较得出最后的结论,这个方法也是最通俗易懂的,后面一篇我有写KMP算法是对BF算法的极大优化包括对next数组的优化。学完这个BF算法看看你是否对KMP算法感兴趣,如果有兴趣可以学习下我的下一篇KMP算法
2022-06-01 16:57:58
1175
原创 字符串中的第一个唯一字符&&有效的字母异位词(多思路)
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。示例 1:输入: s = "leetcode"输出: 0示例 2:输入: s = "loveleetcode"输出: 2示例 3:输入: s = "aabb"输出: -1 提示:1
2022-06-01 00:51:06
144
原创 整数反转问题(符号与越界问题)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231 <= x <= 231 - 1思路一:每次得到数字的个
2022-05-30 14:03:41
413
原创 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]
2022-05-30 13:54:33
133
原创 力扣LeetCode初级算法(旋转图像)
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。我们需要去观察这个数组的变化,这个题就是找规律的题,他实则是将数组每一行从最上面与最远处没有交换过的行先交换然后再进行对角交换
2022-05-29 23:43:12
237
原创 力扣LeetCode初级算法(两数之和,有效的数独)
请你判断一个9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)
2022-05-29 22:11:52
1186
原创 力扣LeetCode初级算法(加一,移动零)
坚持刷题的第五天力扣https://leetcode.cn/leetbook/detail/top-interview-questions-easy/数组给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。java方法加一初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台思路一:这个题的意思是把一个数的.
2022-05-27 16:11:47
1207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人