- 博客(20)
- 收藏
- 关注
原创 深入理解 Java - ThreadLocal
ThreadLocal听名知意,即是线程变量,主要作用是用来存储线程本地变量,适用于隔离线程间变量,而在方法或类间共享的场景。
2023-09-20 00:19:31 93
原创 深入理解Java 序列化(二)
我们知道,序列化提供了一种在JVM停机的情况下可以保存对象的方案。就像我们平常使用的U盘一样,把Java对象序列化成可传输的形式,如json、二进制流,比如保存在文件中,这样,我们再需要这个对象时,可以从文件中读取二进制流,再从二进制流中反序列化出对象。但是,**虚拟机是否允许序列化,不仅取决于类路径和功能代码是否一致,还有很重要的一点是两个类的序列化ID是否一致**,这个所谓的序列化ID,就是我们在代码中定义的`serialVersionUID`。
2023-05-21 23:50:46 455
原创 深入理解Java 序列化(一)
在Java中,我们可以通过多种方式来创建对象,只要对象没被JVM回收,我们都可以复用该对象。但是,创建出来的这些对象都是存在于JVM堆中,也就是内存当中,一旦JVM停止运行,这些对象也就随之丢失了。在真实的应用场景中,我们需要将这些对象持久化,并且在需要时重新读取对象,例如:数据库存储、网络传输(RMI和RPC都需要这样的操作)。序列化是将对象转换为可存储或传输的形式的过程,一般都是以字节码或者XML、JSON等格式传输对象的。而将这些格式还原为对象的过程成为反序列化。Java内置了对象序列化机
2023-05-21 18:32:50 512 2
原创 Java异常最佳实践
Java程序在运行过程中(不止Java),会出现各种各样的**超出正常范围**的情况,这种情况我们称之为 **程序异常**, 为了在程序出现异常时能够清晰的表示出这些 **“特殊情况”** ,Java定义了一套非常完善的异常体系。
2023-04-29 14:26:49 596
原创 深入理解 Java String
是一个本地native方法,它的作用是:如果中已经包含了一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用。在JDK 6 或者更早之前的HotSpot虚拟机中,常量池都是分配在永久代中,我们可以通过和限制永久代的大小,即可简介限制其中常量池的容量。我们在代码中创建字符串时,会涉及到方法,它的作用主要就是用来判断String Pool是否存在当前声明的字符串常量。
2023-04-22 22:05:53 534
原创 151. 反转字符串中的单词 (中等)
利用split(“ ”)根据空格分割字符串,后再循环分割结果,依次去除空格append到StringBuilder,再append空格即可。= ’ ’ 的下标 i,这里以第一个单词进行为演示:" eulb si yks eht" ==反转=> " blue si yks eht" ==移位=> “blue si yks eht”返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用 O(1) 额外空间复杂度的 原地 解法。
2023-04-13 22:12:45 61
原创 【字符串 + 双指针】剑指 Offer 05. 替换空格
字符串,判断每个字符是否 = ’ ',根据不同情况向StringBuilder中拼接即可,时间复杂度O(n),使用了额外空间StringBuilder,复杂度为O(n)3、利用双指针这里从后向前根据情况填充字符即可。占三个字符,而原字符串已经存在一个空格,再加上。就是返回字符串最终的长度,需要拼接的。中的每个空格替换成"%20"。指向最终字符串结尾,这样一来,的双空格,所以得出以上结论。请实现一个函数,把字符串。两个空格,最后得出的。
2023-04-12 16:42:21 91
原创 【字符串 + 双指针】541.反转字符串 II(简单)
与思路一相同,实现方式略微不同。,从字符串开头算起,每计数至。个,则将剩余字符全部反转。个字符,其余字符保持原样。
2023-04-12 09:51:32 100
原创 【字符串】344. 反转字符串(简单)
定义双指针left 和 right, left指向数组头部元素,right指向数组尾部,每次两两交换,同时将left-- , right++,注意:因为是两两相交换,所以循环s.length() / 2次。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组。输入数组、使用 O(1) 的额外空间解决这一问题。这样就可以实现使用O(1)的空间复杂度完成此题目。不要给另外的数组分配额外的空间,你必须。
2023-04-12 09:49:58 61
原创 【排序 + 快慢指针】18. 四数之和 (中等)
四数之和,和15.三数之和是一个思路,都是使用双指针法, 基本解法就是在15.三数之和的基础上再套一层for循环。使用双指针可以将原本O(n ^ 4) 降为 O(n ^ 3)感兴趣可以先去看 15.三数之和,上面有题目的链接。请你找出并返回满足下述全部条件且不重复的四元组。
2023-04-11 17:01:55 47
原创 【排序 + 快慢指针】15. 三数之和 (中等)
同时在循环体内定义快慢指针,left = i + 1;给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i! 如果nums[i] + nums[left] + nums[right] < 0,说明当前三数之和小了,将left++,向右移动一位,增加当前和。3、移动快慢指针的条件限制:如果nums[i] + nums[left] + nums[right] > 0 ,说明当前三数之和大了,将right–,向左移动一位,减小当前和。
2023-04-11 15:58:03 52
原创 【哈希表】242. 有效的字母异位词(简单)
利用数组hash,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25,创建一个长度为26的数组即可,将每一个英文字符作为下标在数组中标识出来,标识的办法是循环s将value++,再循环t将value–,最后ret数组中但凡有一个元素的value!= 0,则s和t不是有效的异位词。后再循环t的每个字符,get到相对应的value值,每次 - 1,最后判断map中是否有元素不等于0,如果有返回false,没有则代表s和t是有效的异位词。
2023-04-10 17:34:32 68
原创 【哈希表】1.两数之和 (简单)
利用hashmap解决,key存储数组元素值,value存储该元素下标。循环数组,利用target - nums[i]得出的结果值去map中get,如果get到,说明相加 == target的。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。条件符合,返回当前元素下标以及map的value所代表的下标。没什么好说的,比较简单,暴力循环的办法是下下策。**进阶:**你可以想出一个时间复杂度小于。
2023-04-10 17:21:01 60
原创 【哈希表】349.两个数组的交集(简单)
将nums1的元素一次add进set集合中,可以保证重复的元素在set集合中只出现一次,之后循环nums2的元素,判断如果当前元素在set集合中存在,则代表有交集,将当前元素add进retSet即可, 至于retSet,由于nums2中的元素很可能也存在重复,所以也要使用set存储结果集。将两个数组分别put进两个hashmap,因为hashmap天生key不存在重复,之后再循环第一个map,判断每个键在map2中是否存在,如果不存在则remove,存在则不需要操作,最后将map的key转为数组即可。
2023-04-10 17:04:11 433 1
原创 【稀疏数组】
1、先读取稀疏数组的第一行,这样就可以直接创建出一个二维数组,比如上面的 newArray[11] [11]当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,达到节省空间的目的。2)、把具有不同值的元素的行列及值记录在一个**小规模的数组(稀疏数组)**中,从而缩小程序的规模。2、根据sum就可以创建稀疏数组 array[sum + 1] [3]1、遍历原始的二维数组,找出有效值的个数 sum。3、将二维数组的有效值存入到稀疏数组中。1)、记录数组一共有。
2023-04-10 15:44:06 67
原创 详细讲解redis持久化机制
redis持久化机制本文会将此知识点分为四方面来具体详细讲解为什么要对redis进行持久化持久化方式及区别在什么情况下选择性的使用具体操作方法数据持久化何谓“持久化” ,就是把数据保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中。例如:你做的新用户注册功能,在前端拿到用户的个人信息=>通过代码=>存入关系型数据库,那这个过程我就可以看作是一个数据持久化的过程。同样的对于数据库来讲,我将sql文件存储
2020-11-18 11:55:27 481 1
原创 初步使用dubbo的自我理解
在springBoot下的dubbo框架理解首先,dubbo是一个微服务框架(RPC),RPC是指远程调用。在项目A中调用项目B的方法,使用dubbo可以实现两个不同项目之间(或者部署在不同服务器上的两个项目)的方法调用给微服务Docker打下基础,实现一个服务器中不同区域间的调用生产者和消费者概念:例如两个不同的项目A和B,可以使用dubbo去实现A项目调用B项目方法,此时,A项目就是消费者,B项目就是生产者,可以理解为B项目 ‘生产’ 方法,A项目去 ‘消费’ B项目的方法注册中心:注册中
2020-10-16 17:43:56 292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人