
Java
ZeroWdd
这个作者很懒,什么都没留下…
展开
-
Java设计模式 -- 门面模式
Java设计模式 – 门面模式概念外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。结构门面角色:客户端调用这个角色的方法。此角色知晓相关的子系统的功能和责任。正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去。子系统角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端原创 2020-09-01 10:18:52 · 543 阅读 · 0 评论 -
Java设计模式 -- 享元模式
Java设计模式 – 享元模式概念如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。在享元模式中,由于需要构造和维护这些可以共享的对象,因此,常会出现一个工厂类,用于维护和创建对象。结构享元工厂:用于创建具体享元类,维护相同的享元对象。它保证相同的享元对象可以被系统共享。即,其内部使用了类似单例模式的方法,当请求对象已经存在时,直接返回对象,不存在时,在创建对象。抽象享元:定义需要共享的对象业务接口。享元类被创建出来总是为了实现某些特定的业务逻辑原创 2020-08-25 15:56:12 · 315 阅读 · 0 评论 -
垃圾回收器之CMS和G1
垃圾回收器之CMS和G11. 什么是垃圾在介绍垃圾回收器之前,我们现需要明白什么是垃圾?其实很简单,即在堆内存中,没有被引用的对象即是垃圾,当JVM发生GC时就会把这些垃圾给清除,释放堆内存空间。即内存中不再使用的对象。那么JVM是如何找到内存中不再使用的对象呢?一般JVM提供了两种方法:引用计数法:堆中每创建一个对象,就都会为该对象创建一个计数器,默认初始值为1。当有其他变量被赋值为该对象的引用时,数值加1。当一个对象实例的引用死亡或被赋值新值时,计数器减1。当计数值为0时,则表示该对象没有原创 2020-08-09 16:20:01 · 361 阅读 · 0 评论 -
Java多线程--什么是ThreadLocal
Java多线程–什么是ThreadLocal1. ThreadLocal是什么首先看看官方文档给出的对ThreadLocal定义:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。官方文档给的定义相当明确:ThreadLocal的作用就是来提供线程内的局部变量,使得不同的线程之间不会相互干扰原创 2020-08-09 10:24:49 · 225 阅读 · 0 评论 -
理解Java的强引用、软引用、弱引用和虚引用
Java中的强引用、软引用、弱引用、虚引用前言学过Java的同学可定听说过Java中的强引用、软引用、弱引用、虚引用,那么这四种引用再Java开发中有什么作用呢?引用之间又有什么区别?正文1. 强引用(StrongReference)强引用是我们平常使用最多的引用,它的特性是如果一个对象具有强引用,那么垃圾回收器绝不会回收它。当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。Object o = n原创 2020-07-31 10:50:39 · 229 阅读 · 0 评论 -
什么是分布式事务?有哪些解决方案?
什么是分布式事务?有哪些解决方案?分布式事务提起事务,相信大家都还是有一定理解的,我们首先来看个简单的例子复习下我们常说的事务。相信大家都在网上购物过,那么我们购买物品时有那些流程呢:用户下单,查询库存是否充足,若充足则扣减库存生成订单列表用户付款后,扣减用户余额我们就拿上面这简化的流程来看看。如果在单机环境下,那么库存表、订单表、用户余额表都在一个数据库中,执行过程也在一个项目里,此时我们只需要加一个事务,就可以保证数据的一致性。(以下伪代码)@transactional // 加入事原创 2020-07-29 20:39:20 · 438 阅读 · 0 评论 -
适合Java初学者练习的项目
这里写自定义目录标题欢迎使用Markdown编辑器新的改变3. 学生管理系统4. 后台管理系统脚手架5. 仿小米商城6. 秒杀系统7. 小结欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界原创 2020-07-10 15:41:24 · 40454 阅读 · 7 评论 -
Java -- 什么是NIO
Java – 什么是NIO1. Java NIO 基本介绍Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的。NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。NIO...原创 2020-05-07 17:40:36 · 918 阅读 · 0 评论 -
Java -- 什么是BIO
Java – 什么是BIO1. Java BIO 基本介绍Java BIO 就是传统的java io编程, 其相关的类和接口在java.io。BIO:同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。BIO 方式适用于连接数目比较小且固定的架...原创 2020-05-04 18:06:17 · 2284 阅读 · 0 评论 -
Java设计模式 -- 观察者设计模式
观察者设计模式概念观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。应用场景相信很多人都用过拼多多,最近拼多多一直推送9.9抢购商品。当我们点击订阅后,在开始抢购的前10分钟,拼多多就会提醒你去抢购。你也可以点击取消订阅,那么拼多多将不会提醒你。这...原创 2020-04-18 17:40:06 · 177 阅读 · 0 评论 -
Java设计模式 -- 建造者设计模式
建造者设计模式概念将一个复杂的对象的构造与它的表示分离,使得同样的构造过程可以创建不同的表示。在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。用户只需要给出指定复杂对象的类型和内容,建造者设计模式负责按顺序创建对象(把内部的建造过程和细节隐藏起来)应用场景需要生成的产品对象有负责的内部结构,这些产品对象具备共性。隔离复杂对象的创建和使用,并使得相同的创建过程可以创...原创 2020-04-14 21:04:00 · 211 阅读 · 0 评论 -
Java类的加载过程
Java类的加载过程JVM类的加载过程分为五个部分:加载、验证、准备、解析、初始化。1. 加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文...原创 2020-04-11 10:16:21 · 314 阅读 · 0 评论 -
Java多线程 -- ReentrantLock原理
Java多线程 – ReentrantLock原理前因:学习黑马整理笔记所得1. 非公平锁实现原理加锁解锁流程先从构造器开始看,默认为非公平锁实现public ReentrantLock() { sync = new NonfairSync();}NonfairSync 继承自 AQS没有竞争时第一个竞争出现时Thread-1 执行了CAS 尝试将 state 由...原创 2020-03-15 11:44:07 · 360 阅读 · 0 评论 -
Java线程的生命周期
Java线程的生命周期起因当想了解Java生命周期时,发现网上有的博客介绍的是五种状态,有的介绍的是六种状态。因此,翻阅资料了解了下Java线程的生命周期Java线程生命周期那么Java线程的生命周期到底是分为五种还是六种呢?其实出现此情况的原因是根据不同的层面看,就有不同的结果。一般是分为操作系统和Java Api两个层面来分析Java线程生命周期。基于操作系统划分线程生命周期...原创 2020-03-12 21:20:24 · 315 阅读 · 0 评论 -
JVM相关知识点总结
JVM相关知识点总结1. JVM内存结构和管理机制程序计数器:每个线程拥有一个PC寄存器,在线程创建时创建。指向下一条指令的地址。执行本地方法时,PC值为undefined。方法区:保存装载类的信息;类型的常量池;字段,方法信息;方法字节码。堆内存:new的对象都保存在Java堆中;所有的线程共享Java堆;对分代GC来说,堆也是分代的;GC管理的主要区域。栈内存:线程私有,生命周期和...原创 2020-03-12 11:57:40 · 240 阅读 · 0 评论 -
Java多线程 -- 带你了解Java线程synchronized
带你了解Java线程synchronized0. 前言:Java对象头与Monitor概念0.1 首先了解下Java对象头:32位虚拟机普通对象Object Header (64 bits)Mark Word (32 bits) | Klass Word (32 bits)数组对象O...原创 2020-03-05 17:17:06 · 552 阅读 · 0 评论 -
Java多线程 -- 线程池参数和方法
Java线程池参数和方法1. 线程池状态ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量状态名高 3 位接收新任务处理阻塞队列任务说明RUNNING111YYSHUTDOWN000NY不会接收新任务,但会处理阻塞队列剩余 任务STOP001NN会中断正在执行的任务,并抛弃阻...原创 2020-03-03 21:54:53 · 346 阅读 · 0 评论 -
Java牛客 -- 专项练习(8)
前因:记录在牛客上刷题的错题记事本1. 以下哪项陈述是正确的?A : 垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收B : 垃圾收集允许程序开发者明确指定释放 哪一个对象C : 垃圾回收机制保证了JAVA程序不会出现 内存溢出D : 进入”Dead”状态的线程将被垃圾回收器回收E : 以上都不对答案选 E,A : 垃圾回收在jvm中优先级相当相当低。B:垃圾...原创 2020-02-29 11:47:34 · 919 阅读 · 0 评论 -
Java8新特性 -- Stream流
Java8新特性 – Stream流1. 什么是Stream流?Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性.2. Stream流的基本使用前提:学习Stream流需要了解Lambda表...原创 2020-02-26 19:28:44 · 1155 阅读 · 0 评论 -
Java多线程 -- 动手实现线程池
Java自定义线程池1. 什么是线程池线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。2. 线程池原理图Thread Pool : 存放线程的集合Blocking Queue : 任务队列3.手...原创 2020-02-23 11:15:58 · 816 阅读 · 0 评论 -
Java牛客 -- 专项练习(7)
前因:记录在牛客上刷题的错题记事本1. 以下JAVA程序代码的输出是public static void main(String args[]) { System.out.println(14^3);}A : 2744B : 13C : 17D : 11答案选C。与(&) 两个操作数中位都为1,结果才为1,否则结果为0 1010 &...原创 2020-02-21 10:53:50 · 359 阅读 · 0 评论 -
Java牛客 -- 专项练习(6)
前因:记录在牛客上刷题的错题记事本1. 下面关于volatile的功能说法正确的是哪个A : 原子性B : 有序性C : 可见性D : 持久性答案B,C。 synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性。2. 下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lan...原创 2020-02-18 20:39:02 · 699 阅读 · 0 评论 -
Java8新特性 -- Lambda表达式
Java8新特性 – Lambda表达式1. 什么是Lambda表达式?Lambda是一个匿名函数,可以理解为是一段可以传递的代码,可以将代码像传递参数、传递数据一样进行传输。使用Lambda表达式,可以写出更加紧凑、更加简洁、更加灵活的代码。2. 使用Lambda表达式的限制条件? Lambda并不是任何地方都可以使用,Lambda表达式需要“函数式接口”的支持。3. 什...原创 2020-02-16 21:50:44 · 762 阅读 · 0 评论 -
Java牛客 -- 专项练习(5)
前因:记录在牛客上刷题的错题记事本1.在java7中,下列哪个说法是正确的:A : ConcurrentHashMap使用synchronized关键字保证线程安全B : HashMap实现了Collection接口C : Arrays.asList方法返回java.util.ArrayList对象D : SimpleDateFormat对象是线程不安全的答案选D,A、Con...原创 2020-02-14 21:12:53 · 1356 阅读 · 0 评论 -
Java类的实例化顺序
Java类的实例化顺序1.父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行2.子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行3.父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行4.父类构造方法5.子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行6.子类构造方法注意 :类中的实例成员,等价于实例代码块(构造代码块)。也就是说实例代码块执行...原创 2020-02-13 17:34:10 · 988 阅读 · 0 评论 -
Java牛客 -- 专项练习(4)
前因:记录在牛客上刷题的错题记事本1. 下面属于java合法变量定义的是?A : finalB : 1var1C : _var2D : var3&答案选C, 标识符可以包括这4种字符:字母、下划线、$、数字;开头不能是数字;不能是关键字2. 默认类型等价表示是哪一项:public interface IService {String NAME="default";}...原创 2020-02-12 21:55:38 · 860 阅读 · 0 评论 -
Java牛客 -- 专项练习(3)
前因:记录在牛客上刷题的错题记事本1. 下面的方法,当输入为2的时候返回值是多少?public static int getValue(int i) { int result = 0; switch (i) { case 1: result = result + i; case 2: result = result + i * 2; case 3: resu...原创 2020-02-12 19:30:17 · 1038 阅读 · 0 评论 -
Java设计模式 -- 单例模式
单例设计模式概念:一个类只有一个实例,并向整个系统提供这个实例。优点:由于单例模式只生成一个实例,减少了系统性能开销。单例模式可以在系统设置全局的访问点,优化共享资源访问常见的五种单例模式实现方式:饿汉式 (线程安全,调用效率高,不能延时加载)懒汉式 (线程安全,调用效率不高,可以延时加载)DLC懒汉式 (由于JVM底层内部模型原因,偶尔会出现问题,不建议使用)饿汉式改进...原创 2020-02-12 13:12:12 · 332 阅读 · 0 评论 -
Java牛客 -- 专项练习(2)
前因:记录在牛客上刷题的错题记事本1. 有以下类定义: 运行后:正确的是class Foo { final int i; int j; public void doSomething() { System.out.println(++j + i); }}A : 0B : 1C : 2D : 不能执行,因为编译有错正确答案选D,...原创 2020-02-11 21:25:15 · 484 阅读 · 0 评论 -
Java牛客 -- 专项练习(1)
前因 :记录在牛客上刷题的错题记事本1. 有以下类定义: 运行后:正确的是abstract class Animal{ abstract void say();}public class Cat extends Animal{ public Cat(){ System.out.printf("I am a cat"); } public ...原创 2020-02-11 20:11:48 · 1028 阅读 · 0 评论