自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 实现单例设计模式(懒汉,饿汉)

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。单例模式的几种实现方式:1. 懒汉式,线程不安全是否 L

2021-09-01 13:13:09 324

原创 BIO, NIO, AIO 的区别

BIO(Blocking I/O): 同步并阻塞,线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。NIO(New I/O):NIO基于Reactor,当socket有流可读或可写入socket时,操作系统会相应的通知应用程序进行处理,应用再将流读取到缓冲区或写入操作系统。 也就是说,这个时候,已经不是..

2021-08-25 02:57:39 178

原创 线程安全的 List 和 Map 版本

List:Vector:Vector 和 ArrayList 大同小异,底层都是用数组实现,只是在它的大部分方法(put、get、remover)上添加了 synchronized关键字,用来保证线程安全;另外,ArrayList 在扩容时是在原来的基础上扩展0.5倍,而 Vector是扩展1倍;此外Vector除了 iterator() 和 listIterator() (两个都支持 fail-fast机制)比 ArrayList 多一个支持fail-fast机制的迭代器:elements(),只

2021-08-17 12:40:17 710

原创 JVM内存是对应到操作系统内存

根据上面两个图可以看出,JVM内存模型是模仿操作系统内存模型构建的,JVM内存模型和操作系统内存模型是可以一一对应起来的,整个JVM内存模型存储在操作系统的堆中。JVM就是个操作系统,而JVM的方法区,也就相当于操作系统/主机的硬盘区,也叫永久区;而操作系统栈(本地方法栈)和JVM的栈也是一致的,无论是生长方向还是管理方式;JVM堆和操作系统堆在概念上和目标上是一致的,分配内存的方式也是一致的,但JVM堆管理垃圾的方式是GC回收,而操作系统堆则是需要程序员手动释放;至于PC寄存器,无论是在虚拟...

2021-08-16 03:58:59 1747

原创 Java中垃圾回收机制中如何判断对象需要回收?常见的 GC 回收算法有哪些?

判断对象是否需要回收:1. 引用计数算法(Reference Counting):在对象(对象头)中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一; 当引用失效时,计数器值就减一; 任何时刻计数器为零的对象就是不可能再被使用的。引用计数算法虽然占用了一些额外的内存空间来进行计数,但它的原理简单,判定效率也很高,在大多数情况下它都是一个不错的算法。这个看似简单的算法有很多例外情况要考虑,必须要配合大量额外处理才能保证正确地工作,譬如单纯的引用计数就很难解决对象之间相互循环引用的问题。

2021-08-11 02:24:36 1834

原创 String 类能不能被继承?为什么?

不能,因为String类是被final修饰的类型,final类是不能被继承的,String类是不可变类型(Immutable)类。至于为什么要加final或将String类设置成不可变类,主要是两点:第一个原因是线程安全:不可变对象始终是线程安全的,因为线程必须完全构建它们,然后才能将它们传递给其他人——并且在构建之后,它们不能再被更改。因为字符串是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享。这样便不用因为线程安全问题而使用同步。如果字符串是可变的,那么会引起很严重的安全问题。

2021-08-07 10:01:27 5371

原创 Synchronized 关键字底层是如何实现的?它与 Lock 相比优缺点分别是什么?

Synchronized关键字底层是使用monitor对象锁实现的,每一个对象关联一个monitor对象,而monitor对象可以看成是一个对象锁,它采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,其他线程再想获取这个对 象锁时会被阻塞住,这样就能保证拥有锁的线程可以安全的执行临界区的代码。Lock是一个接口,而synchronized是Java中的关键字,是内置的语言实现;Synchronized既可以加在方法上,也可以加在特定的代码块上,而Lock需要显示地指定起始位置和终止位置。Sync

2021-08-06 02:51:23 1187

原创 volatile 关键字解决了什么问题,它的实现原理是什么?

volatile关键字解决了变量的可见性和代码的有序性问题。可见性的实现原理:在Java内存模型中(JMM),除了主内存外,每个Java线程还拥有自己的工作内存,线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据(这样做是因为每次都读写主内存速度要慢很多,效率会降低,所以给每个JAVA线程加一个工作内存,相当于缓存的作用,来提高程序运行效率)。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值

2021-08-04 06:23:22 1179

原创 HashMap 与 ConcurrentHashMap 的实现原理是怎样的?ConcurrentHashMap 是如何保证线程安全的?

HashMap:JDK1.7中 HashMap的底层实现采用的是Entry的链表数组(哈希桶数组)。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对和一个指向下一个Entry的引用next。在常规构造器中,没有为数组table分配内存空间(有一个入参为指定Map的构造器例外),而是在执行put操作的时候才真正构建table数组(即哈希桶数组是懒惰初始化的)。在JDK 1.8里加入了红黑树的实现,当链表的长度大于8时,转换为红黑树的结构。..

2021-08-04 03:10:45 481

转载 Spring boot中的JPA快速入门

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/wujiaqi0921/article/details/78789087————————————————版权声明:本文为CSDN博主「深存少年梦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/wujiaqi0921/article/details/7878

2021-08-03 09:09:52 254

原创 HTTPS与HTTP

HTTPS和HTTP的区别:(1)HTTPS是密文传输,HTTP是明文传输;(2)默认连接的端口号是不同的,HTTPS是443端口,而HTTP是80端口;(3)HTTPS请求的过程需要CA证书要验证身份以保证客户端请求到服务器端之后,传回的响应是来自于服务器端,而HTTP则不需要CA证书;(4)HTTPS=HTTP+加密+认证+完整性保护。HTTPS的请求过程:(1)客户端向服务器发起HTTPS请求,连接到服务器的443端口;(2)服务器将非对称加密的公钥传递给第三方数字证书

2021-08-02 05:30:06 327

空空如也

空空如也

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

TA关注的人

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