
Java研发
文章平均质量分 73
Java开发及研发需要掌握的相关技术及其底层原理。
从流域到海域
此人不懒,但他除了干货什么都没有留下。
展开
-
竞态条件及其解决方法
竞态条件(race condition)竞态条件(race condition)指的是两个或者以上进程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序。竞争条件会产生超出预期的情况,一般情况下我们都希望程序执行的结果是符合预期的,因此竞争条件是一种需要被避免的情形。竞争条件分为两类:Mutex(互斥):两个或多个进程彼此之间没有内在的制约关系,但是由于要抢占使用某个临界资源(不能被多个进程同时使用的资源,如打印机,变量)而产生制约关系。Synchronization(同步):两原创 2021-10-04 17:13:42 · 1893 阅读 · 0 评论 -
Spring AOP
Spring框架的一个关键特性是支持面向方面的编程(Aspect Oriented Progrmming,AOP)框架。面向方面的编程需要把程序逻辑分解成不同的部分,称为所谓的关注点。跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样的常见的很好的例子,如日志记录、审计、声明式事务、安全性和缓存。面向切面编程(AOP)在软件开发中,散布于应用中多处的功能被称为横切关注点(crosscutting concern)。通常来讲,这些横切关注点从概念上.原创 2020-12-03 11:37:47 · 222 阅读 · 0 评论 -
Spring boot框架快速入门
Spring Boot是又Pivotal 团队提供的全新框架,其设计的目的是用来简化新Spring的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使得开发人员不在需要定义模板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者 - 《百度百科:Spring Boot》Spring Boot是所有基于Spring Framework 5.0开发的项目的起点。Spring Boot的设计是为了让你尽可能快的跑起来Spring应用程序并且尽可能减少你的配.原创 2020-10-12 21:17:02 · 335 阅读 · 0 评论 -
Redis常用数据类型及其对应的底层数据结构
Redis数据库Redis是一种键值(Key-Value)数据库。相较于MySQL之类的关系型数据库,Redis是一种非关系型数据库。Redis存储的数据只包含键和值两部分,只能通过键来查询值。这样简单的存储结构,能让Redis的读写效率非常高(HashMap读写效率都是O(1))。除此之外,Redis主要作为内存型数据库来使用。也即是说,Redis的数据存储在内存中。尽管如此,它也支持通过持久化机制将内存中的数据保存在硬盘中。作为一种键值数据库,Redis键的数据类型一般是字符串,值的类型则有很多中原创 2020-10-08 22:03:38 · 2087 阅读 · 0 评论 -
Java MySQL数据库专题
MySQL是一种关系型数据库,它开源免费(GPL),扩展方便,稳定性也有保障,因此在企业级开发中常常使用。MySQL默认端口号是3306。查看MySQL提供的所有存储引擎:mysql> show enginesMySQL的默认存储引擎是InnoDB,并且在5.7版本的所有存储引擎知识InnoDB是事务性存储引擎,也就是说只有InnoDB支持事务。MySQL索引MySQL索引使用的数据结构主要有BTree索引和哈希索引。哈希索引底层数据结构就是哈希表,因此绝大多数需求为单条记录查询时,可.原创 2020-09-24 09:55:26 · 256 阅读 · 0 评论 -
Java 类加载机制及双亲委派模型
Java虚拟机类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类,这就是虚拟机的类加载机制。在Java语言里面,类型加载、连接和初始化过程都是在程序运行期间完成。类的整个生命周期:即 加载→\rightarrow→连接→\rightarrow→初始化→\rightarrow→使用→\rightarrow→卸载其中 连接包括:验证→\rightarrow→准备→\rightarrow→解析类加载器Java原创 2020-10-04 14:33:10 · 255 阅读 · 0 评论 -
Spring框架专题
Spring是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。我们一般说的Spring框架指的都是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container中的Core组件是Spring所有组件的核心,Beans组件是实现IOC和依赖注入的基础,AOP组件用来实现面向切面编程。Spring官网列出的Spring的6个特.原创 2020-09-24 09:56:50 · 394 阅读 · 0 评论 -
Redis数据库 专题
Redis是一种内存型数据库。传统的数据库储存在硬盘中,而Redis数据库存在内存中,所以读写速度非常快。因此redis广泛用于缓存方向,除此之外也经常用于实现分布式锁。redis提供了多种数据类型来支持不同的业务场景。除此之外,redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。......原创 2020-09-24 09:55:43 · 631 阅读 · 0 评论 -
Java 线程池专题
池化技术是一种广泛应用的技术。线程池、数据库连接池、Http连接池都是这种技术的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池提供了一种限制和管理资源(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如已完成的任务数量。使用线程池可以带来以下好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗.原创 2020-09-24 09:55:34 · 271 阅读 · 1 评论 -
Java垃圾回收(GC)机制专题
Java创建对象的过程①类加载检查→\rightarrow→②分配内存→\rightarrow→③初始化零值→\rightarrow→④设置对象头→\rightarrow→⑤执行init()方法内存分配的两种方式:指针碰撞、空闲列表。堆内存对象分配的基本策略堆空间的基本结构:上图所示的eden区、s0区、s1区都属于新生代,tentired区属于老年代。大部分情况,对象都首先在eden区分配,在一次新生代垃圾回收之后,如果对象依然存活,则会进入s0或者s1,并且对象年龄还会加1(Eden区-&g原创 2020-09-24 09:55:17 · 376 阅读 · 0 评论 -
JVM专题
JVM,Java虚拟机,是Java实现跨平台运行的核心组件,也是面试必考的知识点,本篇博文全篇默认标记为重要。介绍下Java内存区域(运行时数据区) / 介绍下JVM内存模型Java虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK1.8和之前的版本有所不同。JDK1.8之前:JDK1.8之后:(即原方法区从运行时数据区移到直接内存中的元空间)。线程私有的:程序计数器虚拟机栈本地方法栈线程共享的:堆方法区直接内存(非允许时数据区的一部分).原创 2020-09-24 09:54:56 · 241 阅读 · 0 评论 -
Java 锁专题
可重入锁(递归锁)广义上可重入锁,也叫做递归锁,指的是同一线程,外层函数获得锁之后,内层函是仍有获得该锁的代码,但不受影响。Java的ReentrantLock和synchronized都是可重入锁。公平锁和非公平锁公平锁(Fair)加锁前检查是否有排队等待的线程,优先排队等待的线程,先到先得。非公平锁(Nonfair)加锁时不考虑排队等待问题,直接尝试获取锁,获取不到自动到队尾等待。非公平锁性能比公平锁高5~10倍,因为公平锁需要在多核的情况下维护一个队列。Java中的synchroni原创 2020-09-24 09:54:26 · 223 阅读 · 0 评论 -
Java I/O专题
Java中的I/O模型在JDK1.4之前,基于Java的所有socket都是使用阻塞I/O(BIO),JDK1.4提供了非阻塞I/O(NIO)功能,虽然称为NIO但实际上底层模型是I/O多路复用,JDK1.7提出了异步I/O(AIO)功能。BIO/NIO/AIO区别概述:BIO(Blocking I/O):同步阻塞I/O模式,数据的读写必须在一个线程内等待其完成。NIO(Non-blocking/New I/O):同步非阻塞I/O模型。在Java1.4中引入了NIO框架,对应java.nio包.原创 2020-09-24 09:54:05 · 169 阅读 · 0 评论