代码编织梦想

java基础篇:static关键字-爱代码爱编程

        Java中的static关键字表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以修饰代码块。         当JVM加载一个类的时候,如果该类存在static修饰的成员变量和成员方法,就会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域;同时被static修饰的成员变量和成员方法是被该类的所有实例共享的

java基础篇:回调机制详解_public void solve()-爱代码爱编程

一、什么是回调: 回调是一种双向的调用模式,程序模块之间通过这样的接口调用完成通信联系,回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后再告诉回调方它想要知道的信息。 回调函数用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本

java基础篇:四种代码块详解-爱代码爱编程

所谓代码块,就是用大括号{}将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法。一般来说,代码块是不能单独运行的,它必须有运行主体。在Java中代码块主要分为四种:普通代码块、静态代码块、同步代码块、构造代码块。 一、普通代码块: 普通代码块就是类中方法的方法体;普通代码块是不能够单独存在的,他必须紧跟在方法名后面,同时也必须使用方法名

java基础篇:封装、继承、多态三大特性-爱代码爱编程

目录: 一、Java三大特性之:封装 二、Java三大特性之:继承 三、Java三大特性之:多态 一、Java三大特性之:封装 1、什么是封装:         封装,就是将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过

Java IO篇:什么是零拷贝?-爱代码爱编程

一、传统的IO模式: (1)用户空间的应用程序发出read系统调用,会导致用户空间到内核空间的上下文切换,然后再通过 DMA 将磁盘文件中的数据读取到内核空间缓冲区(2)接着将内核空间缓冲区的数据拷贝到用户空间的数据缓冲区,然后read系统调用返回,而系统调用的返回又会导致一次内核空间到用户空间的上下文切换(3)write系统调用,用户空间到内核

Java IO篇:什么是 Reactor 网络模型?-爱代码爱编程

一、什么是 Reactor 模型: The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The

Java IO篇:序列化与反序列化-爱代码爱编程

1、什么是序列化:         两个服务之间要传输一个数据对象,就需要将对象转换成二进制流,通过网络传输到对方服务,再转换成对象,供服务方法调用。这个编码和解码的过程称之为序列化和反序列化。所以序列化就是把 Java 对象变成二进制形式,本质上就是一个byte[]数组。将对象序列化之后,就可以写入磁盘进行保存或者通过网络中输出给远程服务了。反之,反序

Java IO篇:什么是 Proactor 网络模型?-爱代码爱编程

一、Proactor出现的背景:         前面我们介绍了 Reactor 网络模型(文章地址:https://blog.csdn.net/a745233700/article/details/122660246),知道了 Reactor 是非阻塞同步网络模型,而 Proactor 是异步网络模型。 (1)对于阻塞IO,当用户程序执行 read,

JUC多线程:系统调用、进程、线程的上下文切换-爱代码爱编程

一、什么是上下文切换: 1、内核空间的用户空间:         讲上下文切换前我们先了解下什么是内核空间和用户空间,程序运行在内核空间的状态称为内核态,运行在用户空间的状态称为用户态,用户态和内核态是操作系统的两种运行状态,划分为这两种空间状态主要是为了对应用程序的访问能力进行限制,防止应用程序随意进行一些危险的操作导致系统崩溃,比如设置时钟、内存清

JUC多线程:阻塞队列ArrayBlockingQueue与LinkedBlockingQueue-爱代码爱编程

一、什么是阻塞队列: 阻塞队列最大的特性在于支持阻塞添加和阻塞删除方法: 阻塞添加:当阻塞队列已满时,队列会阻塞加入元素的线程,直到队列元素不满时才重新唤醒线程执行加入元素操作。 阻塞删除:但阻塞队列元素为空时,删除队列元素的线程将被阻塞,直到队列不为空再执行删除操作 Java 中的阻塞队列接口 BlockingQueue 继承自 Queue 接口

JUC多线程:Atomic原子类与CAS原理-爱代码爱编程

一、Atomic 原子类的原理:         Atomic 原子操作类是基于无锁 CAS + volatile 实现的,并且类中的所有方法都使用 final 修饰,进一步保证线程安全。而 CAS 算法的具体实现方式在于 Unsafe 类中,Unsafe 类的所有方法都是 native 修饰的,也就是说所有方法都是直接调用操作系统底层资源进行执行相应任

JUC多线程:ThreadLocal 原理总结-爱代码爱编程

1、什么是 ThreadLocal:         ThreadLocal 提供了线程内部的局部变量,当在多线程环境中使用 ThreadLocal 维护变量时,会为每个线程生成该变量的副本,每个线程只操作自己线程中的变量副本,不同线程间的数据相互隔离、互不影响,从而保证了线程的安全。         ThreadLocal 适用于无状态,副本变量独立

JUC多线程:CountDownLatch、CyclicBarrier、Semaphore同步器原理总结-爱代码爱编程

一、CountDownLatch: 1、什么是 CountDownLatch:         CountDownLatch,闭锁,就是一个基于 AQS 共享模式的同步计数器,它内部的方法都是围绕 AQS 实现的。主要作用是使一个或一组线程在其他线程执行完毕之前,一直处于等待状态,直到其他线程执行完成后再继续执行。         CountDown

JUC多线程:AQS抽象队列同步器原理-爱代码爱编程

一、AQS 的工作原理: 1.1、什么是 AQS:         AQS,Abstract Queued Synchronizer,抽象队列同步器,是 J.U.C 中实现锁及同步组件的基础。工作原理就是如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就将获取不到锁的线

JUC多线程:JMM内存模型与volatile内存语义-爱代码爱编程

一、JMM 内存模型: 1、什么是 JMM 内存模型:         Java 内存模型是 Java 虚拟机定义的一种多线程访问 Java 内存各个变量的访问规范,主要围绕如何解决并发过程中的原子性、可见性、有序性这三个问题来解决线程的安全问题。         Java 内存模型将内存分为了主内存和工作内存(也称为栈空间)。主内存存放所有的共

JUC多线程:synchronized锁机制原理 与 Lock锁机制-爱代码爱编程

前言:         线程安全是并发编程中的重要关注点,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式叫互斥锁,即能达到互

Java集合篇:HashMap 与 ConcurrentHashMap 原理总结-爱代码爱编程

一、HashMap原理总结: 1、什么是HashMap: (1)HashMap 是基于 Map 接口的非同步实现,线程不安全,是为了快速存取而设计的;它采用 key-value 键值对的形式存放元素(并封装成 Node 对象),允许使用 null 键和 null 值,但只允许存在一个键为 null,并且存放在 Node[0] 的位置,不过允许存在多

Java核心编程技术_JAVA核心编程技术-爱代码爱编程

软件工程类 JAVA核心编程技术 作者:张屹, 蔡木生 所属类别:新世纪应用型高等教育软件专业系列规划教材 出版时间:2010年9月 ISBN:978-7-5611-5767-1前 言 1995年5月23日Java语言诞生,1996年1月JDK 1.0发布,屈指算来,Java尚属“少年”。由于Java语言具有面向对象、跨平台、分布式、安

JUC多线程:线程池的创建及工作原理 和 Executor 框架-爱代码爱编程

一、什么是线程池: 线程池主要是为了解决 新任务执行时,应用程序为任务创建一个新线程 以及 任务执行完毕时,销毁线程所带来的开销。通过线程池,可以在项目初始化时就创建一个线程集合,然后在需要执行新任务时重用这些线程而不是每次都新建一个线程,一旦任务已经完成了,线程回到线程池中并等待下一次分配任务,达到资源复用的效果。 1、线程池的主要优势有:

juc多线程:创建线程的四种方式_张维鹏的博客-爱代码爱编程

在 Java 中,实现多线程的主要有以下四种: (1)继承 Thread 类,重写 run() 方法; (2)实现 Runnable 接口,实现 run() 方法,并将 Runnable 实现类的实例作为 Thread 构造函数的参数 target; (3)实现 Callable 接口,实现 call() 方法,然后通过 FutureTask 包装器