java
文章平均质量分 76
艳梓
平时学到的东西,怕忘记,所以写到这里可以随时复习很方便。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式——工厂模式
首先完成一个案例,点咖啡系统实现需求:设计一个咖啡店点餐系统设计一个咖啡类,并定义其两个子类(美式咖啡,拿铁咖啡);在设计一个咖啡店,咖啡店具有点咖啡功能。在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;...原创 2022-08-25 18:28:22 · 390 阅读 · 0 评论 -
设计模式——单例
双重检查锁模式是一种非常好的单例实现模式,解决了单例、性能、线程安全问题,上面的双重检测锁模式看上去完美无缺,其实是存在问题,在多线程的情况下,可能会出现空指针问题,出现问题的原因是Jg在实例化对象的时候会进行优化和指令重排序操作。由此也产生了一种新的实现模式:双重检查锁模式。枚举类实现单例模式是极力推荐的单例实现模式,因为枚举类型是线程安全的,并且只会装载一次,设计者充分的利用了枚举的这个特性来实现单例模式,枚举的写法非常简单,而且枚举类型是所用单例实现中唯一一种不会被破坏的单例实现模式。原创 2022-08-23 22:15:11 · 300 阅读 · 0 评论 -
JUC——AQS原理分析
AQS在java源码中主要是指AbstractQueuedSynchronizer(抽象队列同步器)抽象类。它整体就是一个抽象的FIFO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态。原创 2022-08-13 14:08:08 · 459 阅读 · 0 评论 -
ReentrantLock源码分析
Java中提供的锁:synchronized,lock锁ReentrantLock就是一个互斥锁,可以让多线程执行期间,只有一个线程在执行指定的一段代码。使用方式:我们要分析的是:为什么在多个线程进行竞争的时候lock()可以加锁,只让一个线程进入,为什么在线程执行完业务逻辑的时候释放锁时,别的线程才可以竞争锁资源。......原创 2022-08-08 22:42:23 · 238 阅读 · 0 评论 -
JVM——堆
1、堆内存(进程与线程角度)一个进程对应一个JVM实例一个JVM实例对应一个堆空间进程包含多个线程,所以线程之间共享同一个堆空间2、具体认识堆3、堆中内存的分区现代垃圾收集器大部分都基于分代收集理论设计,堆空间细分为:Java 7及之前堆内存逻辑上分为三部分:新生区 + 养老区 + 永久区,其中新生代又被划分为Eden(伊甸园区)+Survivor0(幸存者0区)+Survivor1(幸存者1区)。Java 8及之后堆内存逻辑上分为三部分:新生区 + 养老区 + 元空间:其中,新生区原创 2022-06-17 19:22:29 · 323 阅读 · 0 评论 -
jvm——类加载过程
一个类的完整的生命周期如下Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class文件呢?系统加载 Class 类型的文件主要三步:加载->链接->初始化。链接过程又可分为三步: 验证->准备->解析。类加载过程的第一步主要完成下面三件事情:虚拟机规范上面这 3 点并不具体,因此是非常灵活的。比如:“通过全类名获取定义此类的二进制字节流” 并没有指明具体从哪里获取、怎样获取。比如:比较常见的就是从ZIP 包中读取(日后出现的 JAR 、 EAR 、 WAR 格原创 2022-06-16 14:54:08 · 301 阅读 · 0 评论 -
JVM——程序计数器
下图为JVM运行时数据区的简图1.PC寄存器介绍①JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。②它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域原创 2022-06-14 16:38:38 · 213 阅读 · 0 评论 -
个人博客项目部署到服务器详细步骤
从无到有1、首先在本地将项目跑通2、将项目部署到服务器 ①此时的服务器什么都没有,首先应该在服务器中安装docker容器,这个容器不用我说简直太强大太好用了。https://blog.youkuaiyun.com/lovewangyihui/article/details/122311060 参考博客地址 ②docker安装mysql: ③docker安装redis④安装JDK1.8首先下载linux版本的JDK,通过文件上传软件Xftp将下载的jdk传到服务器/usr/local中解压完成以后,我们原创 2022-06-11 19:37:45 · 983 阅读 · 0 评论 -
JVM——01总结
1、JVM架构java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说:这两种架构之间的区别:基于栈式架构的特点设计和实现更简单,适用于资源受限的系统,避开了寄存器的分配难题:使用零地址指令方式分配,指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现不需要硬件支持,可移植性更好,更好实现跨平台基于寄存器架构的特点典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。指令集架构则原创 2022-06-08 20:11:47 · 179 阅读 · 0 评论 -
java反射机制介绍
1、反射机制介绍java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。2.获取Class对象的四种方式①知道具体类的情况下可以使用:但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此 方式获取Class对象不会进行初始化。②通过 Class.forName()传入类的路径获取:Class.forName(clas原创 2022-06-08 14:59:50 · 158 阅读 · 0 评论 -
java并发基础
什么是线程和进程?进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。2.程序计数器为什么是私有的?程序计.原创 2022-05-31 19:14:12 · 142 阅读 · 0 评论
分享