![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java
文章平均质量分 55
java
Knight_AL
这个作者很懒,什么都没留下…
展开
-
需求:JSON数据显示null值或者不显示null值
使用hutool的工具类。原创 2024-03-22 17:30:01 · 728 阅读 · 0 评论 -
日期时间格式化千万不要写YYYY
使用YYYY时,2023年变成了2024年,在正常情况下可能没问题,但是在跨年的时候大概率就会有问题了。原创 2024-01-24 15:31:41 · 398 阅读 · 0 评论 -
OutputStream转InputStream必会的三种方式
这种方式最为简单,但是要求执行byteArrayOutputStream.toByteArray();这个方法之前,需要的数据已经完全写入,即无法做到边写边读,另外其需要足够的内存来一次性的容纳这些数据。这种方法支持流式的方式,一端写一端读,向PipedOutputStream写入的数据可以从PipedInputStream读出,比方法一好一点。使用Circular Buffers。使用byteArray缓存转换。原创 2024-01-24 11:57:45 · 2674 阅读 · 0 评论 -
Java实现两个Ip相互跳转
需求:在请求HttpClient时,如果访问的http://127.0.0.1:5004/proxy/1为空或者为html(看自己的需求而定),那么就跳转到http://192.128.121.140:5004/proxy/1。原创 2024-01-24 09:58:32 · 536 阅读 · 0 评论 -
两个相同实体类进行合并数据
需求:将两个实体类进行合并例如:合并成。原创 2024-01-24 09:24:36 · 475 阅读 · 0 评论 -
Java新特性Opitional
创建Optional类对象的方法。使用Optional代码进行优化。以前写代码会出现空指针。原创 2024-01-19 14:59:30 · 358 阅读 · 0 评论 -
Linux shell中2>&1的含义解释
- 标准输入0:从键盘获得输入 /proc/self/fd/0 - p标准输出1:输出到屏幕(即控制台) /proc/self/fd/1 - p错误输出2:输出到屏幕(即控制台) /proc/self/fd/2原创 2023-11-09 15:41:46 · 156 阅读 · 0 评论 -
HttpClient快速入门
httpGet和httpPost。原创 2023-10-26 21:19:02 · 167 阅读 · 0 评论 -
volatile修饰数组
其实如果不给数组加volatile就永远不会打印“结束”,这种绝对的认为是错误的,volatile保证了其变量及时可见性而不会引起线程安全的问题,就算不加volatile,cpu在空闲的时候也会将array[0]的值从线程缓存刷新到主存,只是while(true)太快了,导致cpu一直没空。记得先去掉volatile修饰。当ThreadB读取array时,因为array的引用被volatile修饰,所以ThreadB对所有变量都会从主内存去获取,当然也就包括array[0]。由此可见打印不出来‘’结束‘’原创 2023-09-30 10:37:24 · 398 阅读 · 0 评论 -
java.lang.ClassCastException: java.lang.Object cannot be cast to com.donglin.gmall.model.product.Sku
解决方案:先向上转型,再向下转型。原创 2023-07-04 16:21:04 · 105 阅读 · 0 评论 -
for与foreach效率问题
LinkList:LinkList是将对象放在独立的空间中,而且每个空间中还保存下一个空间的索引,也就是数据结构中的链表结构,插入和删除比较方便,但是查找很麻烦,要从第一个开始遍历。原因:使用下标访问效率本身很高.foreach内部的循环直接封装下标,自己实现的for比foreach更直接,效率稍高些,但差别不会太大,仍然在一个数量级上。1、需要循环数组结构的数据时,建议使用普通for循环,因为for循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好。2、循环LinkList时。原创 2023-06-09 22:44:56 · 778 阅读 · 0 评论 -
进程的通信方式有哪些?
我们知道瀑布模型的软件开发模式是非常低下的,同理采用管道进行通信的效率也很低,因为假设现在有AB两个进程,A进程将数据写入管道,B进程需要等待A进程将信息写完以后才能读出来,所以这种方案不适合频繁的通信。那么问题来了,这么多进程都共享这块内存,如果同时都往里面写内容,难免会出现冲突的现象,比如A进程写了数字5,B进程同样的地址写了6就直接给覆盖了,这样就不友好了,怎么办?test即为管道的名称,在Linux中一切皆文件,管道也是以文件的方式存在,可以使用ls -l 查看下文件的属性,它会"p"标识。原创 2023-06-05 19:52:31 · 391 阅读 · 0 评论 -
try catch finally 里面有return的执行顺序
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;而且finally语句在return语句执行之后return返回之前执行的。我们可以得出以下结论: 如果try和catch的return是一个变量时且函数的是从其中一个返回时,后面finally中语句即使有对返回的变量进行赋值的操作时,也不会影响返回的值。原创 2023-05-16 20:54:12 · 414 阅读 · 0 评论 -
Collection线程不安全的举例
1、当我们执行下面语句的时候,底层进行了什么操作底层创建了一个空的数组,伴随着初始值为10当执行add方法后,如果超过了10,那么会进行扩容,扩容的大小为原值的一半,也就是5个,使用下列方法扩容。原创 2023-05-16 12:26:59 · 337 阅读 · 0 评论 -
Java中的SPI
简单一点来说,就是在 META-INF/services 下面定义个文件,然后通过一个特殊的类加载器,启动的时候加载你定义文件中的类,这样就能扩展原有框架的功能。2、在 resources 资源目录下创建 META-INF/services 文件夹。我们不得不说 java.util.ServiceLoader 这个类,我们先跑起来。3、在 services 文件夹中创建文件,以接口全名命名。1、创建一个接口,Message。原创 2023-05-14 19:11:03 · 115 阅读 · 0 评论 -
HashMap和HashTable的区别
3.(对null key和null value的支持不同).HashTable不允许null值(key和value都不可以),HashMap允许使用null值(key和value)都可以。拓展:Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。拓展:HashTable的所有方法都加了synchronize,同步的效率的比较低,我们会采用concurrenthashmap。HashMap允许key,value为null,如果key为null的话,会以0进行hash。原创 2023-04-11 19:05:41 · 508 阅读 · 0 评论 -
Java线程池如何合理配置核心线程数
这个是根据具体业务来配置的,分为CPU密集型和IO密集型。原创 2023-04-07 10:49:37 · 1428 阅读 · 1 评论 -
HashMap何时会链表转红黑树
通过查看源码可以发现,默认是链表长度达到 8 就转成红黑树,而当长度降到 6 就转换回去,这体现了时间和空间平衡的思想,最开始使用链表的时候,空间占用是比较少的,而且由于链表短,所以查询时间也没有太大的问题。可是当链表越来越长,需要用红黑树的形式来保证查询的效率。原创 2023-03-28 13:18:14 · 2073 阅读 · 1 评论 -
HashMap中put的实现原理
(1)先判断当前Node[]数组是不是为空,为空就新建,不为空就对hash值与容量-1做与运算得到数组下标(2)然后会判断当前数组位置有没有元素,没有的话就把值插到当前位置,有的话就说明遇到了哈希碰撞(3)遇到哈希碰撞后,如果Hash值相同且equals内容也相同,直接覆盖,就会看下当前链表是不是以红黑树的方式存储,是的话,就会遍历红黑树,看有没有相同key的元素,有就覆盖,没有就执行红黑树插入。原创 2023-03-26 11:08:12 · 267 阅读 · 0 评论 -
HashMap中HashCode的实现原理
但是如果我们将 hashCode 值右移 16 位,也就是取 int 类型的一半,刚好将该二进制数对半切开。并且使用位异或运算(如果两个数对应的位置相反,则结果为1,反之为0),这样的话,就能避免我们上面的情况的发生。如果数组长度是16,也就是 15 与运算这两个数, 你会发现结果都是0。这样的散列结果太让人失望了。对象 A 的 hashCode 为 1000010001110001000001111000000,这行代码就是为什么要让前面的 hash 方法移位并异或。首先,假设有一种情况,原创 2023-03-26 11:09:56 · 479 阅读 · 0 评论 -
HashMap核心参数
下次扩容的时候,就能够计算key在新key在新的table中index值。为啥需要key的hash值保存起来?原创 2023-03-25 19:52:52 · 100 阅读 · 0 评论 -
Exception in thread “main“ java.net.BindException: Address already in use: JVM_Bind
Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind。原创 2023-03-17 21:41:47 · 393 阅读 · 0 评论 -
volatile能否保证线程安全
volatile能否保证线程安全原创 2023-03-14 22:25:45 · 1710 阅读 · 0 评论 -
Method breakpoints may dramatically slow down debugging
Method breakpoints may dramatically slow down debugging原创 2023-03-11 21:33:29 · 69 阅读 · 0 评论 -
Java多态性
语句在堆内存中开辟了子类(Dog)的对象,并把栈内存中的父类(Animal)的引用指向了这个Cat对象。子类重写(override)了父类的两个成员方法eat(),sleep()。子类重写了父类(Animal)的静态成员方法animal.sleep();子类Dog重写了父类Animal的非静态成员方法animal.eat();未被子类(Dog)重写的父类(Animal)方法animal.run()输出结果为:animal奔跑。编译看左边(父类),运行看右边(子类)。编译看左边(父类),运行看左边(父类)。原创 2023-03-06 20:03:39 · 277 阅读 · 0 评论 -
HashMap的7种遍历方式
HashMap的7种遍历方式原创 2023-03-01 22:38:44 · 8635 阅读 · 0 评论 -
Java深拷贝和浅拷贝区别
Java深拷贝和浅拷贝区别原创 2023-03-01 13:40:59 · 418 阅读 · 0 评论 -
SpringBoot中@Autowired爆红的三种解决方案
SpringBoot中@Autowired爆红的三种解决方案原创 2023-02-25 22:39:30 · 1106 阅读 · 0 评论 -
LinkedHashMap实现LRU算法
LinkedHashMap实现LRU算法原创 2023-02-18 20:44:33 · 1027 阅读 · 0 评论 -
基于数组+链表简单实现HashMap
基于数组+链表简单实现HashMap原创 2023-02-16 23:07:48 · 110 阅读 · 0 评论 -
基于Arraylist集合实现HashMap
基于Arraylist集合实现HashMap原创 2023-02-16 22:24:49 · 50 阅读 · 0 评论 -
Java泛型的<? super T>,<? extend T>的区别
Java泛型的<? super T>,<? extend T>的区别原创 2023-02-16 22:13:27 · 986 阅读 · 0 评论 -
HashMap如何避免内存泄露问题
HashMap如何避免内存泄露问题原创 2023-02-15 23:30:41 · 823 阅读 · 0 评论 -
为什么重写equals还要重写hashcode方法
为什么重写equals还要重写hashcode方法原创 2023-02-14 12:19:38 · 1730 阅读 · 16 评论 -
简单哈希算法和一致性哈希算法和哈希槽对比
简单哈希算法和一致性哈希算法和哈希槽对比原创 2023-02-08 14:09:45 · 476 阅读 · 0 评论 -
单例模式的五种实现方式
单例模式的五种实现方式原创 2023-01-28 10:00:00 · 362 阅读 · 0 评论 -
分布式概念
分布式概念原创 2023-01-25 13:40:56 · 3282 阅读 · 2 评论 -
两分钟读懂什么是TPS和QPS
两分钟读懂什么是TPS和QPS原创 2023-01-24 19:18:04 · 3369 阅读 · 0 评论 -
Map<String,String[]>转换成<String,Object>
Map转换成原创 2023-01-16 10:00:00 · 74 阅读 · 0 评论 -
Nacos 启动报错: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later
Nacos 启动报错: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later原创 2022-12-22 16:09:13 · 402 阅读 · 0 评论