自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 01.08 Java基础篇|设计模式深度解析

Java设计模式深度解析 本文系统讲解了Java设计模式的核心内容,重点分析了创建型模式的实现与应用: 设计原则:SOLID原则(单一职责、开闭原则等) 单例模式: 4种实现方式:饿汉式、懒汉式(双重检查)、静态内部类、枚举 枚举方式最优,防止反射和序列化破坏 应用场景:配置类、连接池、线程池等 工厂模式: 简单工厂、工厂方法、抽象工厂 示例展示了支付策略的工厂实现 建造者模式: 通过链式调用构建复杂对象 示例演示了Computer类的建造过程 这些模式在代码重构、架构设计和面试准备中都有重要应用价值。

2025-12-23 01:28:47 416

原创 01.07 Java基础篇|函数式编程与语言新特性总览

本文系统梳理了Java 8+函数式编程核心特性和JDK 8-25版本演进路线。主要内容包括: 函数式编程基础:Lambda表达式、函数式接口、方法引用、Optional和Stream API等核心概念 JDK版本特性演进:从JDK 8的Lambda到JDK 25计划中的新特性,详细介绍了各版本的语言和平台改进 源码示例解析:通过Stream Pipeline示例深入讲解惰性求值、无状态/有状态操作等实现原理 平台层增强:包括垃圾收集器演进、类加载机制改进和本地互操作API等底层优化 文章为开发者提供了从基础

2025-12-23 01:22:55 166

原创 01.06 Java基础篇|网络编程与协议实践

协议格式设计[魔数(4字节)][版本(1字节)][类型(1字节)][长度(4字节)][数据(N字节)][校验和(4字节)]编解码实现// 编码// 魔数// 版本// 类型// 长度// 数据// 计算校验和// 解码// 数据不完整if (magic!= MAGIC) {throw new IllegalArgumentException("无效的魔数");// 回退// 数据不完整// 验证校验和。

2025-12-22 01:52:11 502

原创 01.05 Java基础篇|I/O、NIO 与序列化实战

摘要 本文深入讲解Java I/O模型(BIO/NIO/AIO)与序列化技术。BIO采用"一连接一线程"模型,存在线程开销大的问题;NIO通过Selector、Channel和Buffer实现非阻塞I/O,底层依赖epoll/kqueue等系统调用实现高效事件驱动。文章对比了不同I/O模型的性能特点,并展示了NIO服务器实现示例。此外,还建立了I/O模型与网络编程(如HTTP/WebSocket实现)和并发编程(如Netty/响应式框架)的关联知识图谱,为后续深入学习高性能网络和并发编程

2025-12-22 01:43:16 204

原创 01.04 Java基础篇|泛型、注解与反射实战

Java泛型、注解与反射实战摘要 本文深入解析Java三大核心特性:泛型、注解与反射。泛型部分详细剖析类型擦除机制,展示编译后类型参数被擦除为Object或上界类型的过程,并指出由此带来的限制。通配符章节重点讲解<? extends T>和<? super T>的特性差异:前者支持安全读取但限制写入,后者允许安全写入但读取受限。通过类型关系图和代码示例,阐明上界通配符适合只读场景,下界通配符适用于写入操作。反射部分虽未展开,但暗示其与注解共同构成运行时动态扩展的基础。全文采用理论解析

2025-12-21 01:26:32 597

原创 01.03 Java基础篇|面向对象核心与设计实践

摘要 本文深入解析Java面向对象编程(OOP)的核心特性,重点探讨封装与不可变对象设计。通过代码示例详细展示了访问控制符的使用、final关键字的三种用法及其重要性。特别强调不可变类必须使用final修饰的原因:防止子类破坏不可变性、避免添加可变状态、提升性能、保证线程安全以及明确设计意图。文章还提供了完整的不可变类设计原则,包括字段final修饰、防御性拷贝和只读访问器等最佳实践。这些知识对于构建安全、高效的Java应用程序至关重要。

2025-12-20 15:19:57 969

原创 01.02 Java基础篇|核心数据结构速查

树类型查找插入/删除适用场景典型应用BSTO(log n) 平均,O(n) 最坏O(log n) 平均,O(n) 最坏教学、简单场景AVLO(log n) 严格O(log n),可能多次旋转查找为主红黑树O(log n) 平均O(log n),最多 3 次旋转插入删除频繁B 树O(log n),树高低O(log n)文件系统ext3、ext4B+ 树O(log n),树高低O(log n)数据库索引选型建议内存数据结构:红黑树(JDK 集合框架)文件系统:B 树。

2025-12-19 23:52:24 555

原创 01.01 Java基础篇|语言基础与开发环境速成

本文是Java基础篇的速成指南,主要面向初学者或需要系统梳理知识的开发者。文章首先解析了JDK/JRE/JVM的层次关系,详细介绍了开发环境配置的最佳实践,包括多版本管理工具SDKMAN!的使用和环境变量设置。随后讲解了Maven项目结构和核心配置,并深入剖析了Java数据类型体系,包括基本类型与包装类型的对比及Integer缓存机制。最后通过String类源码分析了字符串不可变性的设计原理及其优势,并对比了StringBuilder和StringBuffer的线程安全性差异。全文强调理论与实践结合,建议读

2025-12-19 23:41:27 850

原创 FeignClient支持运行时动态指定URL

FeignClient支持运行时动态指定URL

2023-12-28 14:45:10 6808

原创 Linux系统搭建FTP服务器

linux 系统 ftp服务器搭建全过程

2023-03-13 18:18:15 1716

原创 Redis与Spring Cache使用简介

展示了Spring Cache与Redis的使用

2023-01-16 15:08:14 1627 1

原创 Spring事务实践

spring 事务 传播机制

2023-01-11 18:15:39 669

原创 spring-amqp

对spring amqp的一些常用的只是做了简单的介绍如容器、消息转换等

2022-05-13 15:11:42 928

原创 com.rabbitmq:amqp-client

com.rabbitmq:amqp-client开发包的相关说明,涉及到AMQP协议、队列等函数、队列结构、队列设计等内容

2022-04-20 17:33:07 5783

原创 Redis 与 Java API 学习与应用(一)

Redis基本介绍Redis简介高性能键值缓存服务器memcached也经常被拿来与Redis进行比较:这两者都可用于存储键值映射,性能也相差无几,但是Redis能够自动以两种不同的方式将数据写入硬盘,并且Redis除了能存储普通的字符串键 之外,还可以存储其他4种数据结构,而memcached只能存储普通的字符串键。这些不同之处使得Redis可以用于解决更为广泛的问题,并且既可以用作主数据库( primary database)使用,又可以作为其他存储系统的 辅助数据库( auxiliary da

2020-11-24 00:07:41 236

原创 Spring Batch学习与实践(三)

扩展与并行处理多线程Step并行Step远程分块分区健壮的Job重复执行重试

2020-11-22 13:44:08 1225 2

原创 Spring Batch学习与实践(二)

批处理通过Tasklet完成具体的任务,Chunk类型的Tasklet定义了标准的读、处理、写步骤。

2020-11-07 15:51:21 1231

原创 Spring Batch学习与实践(一)

简单介绍核心架构如下所示为Spring Batch的三层架构:应用层、核心层、基础架构层。应用层:包含所有批处理作业,通过Spring框架管理程序员自定义的代码; 核心层:包含Spring Batch启动和控制所需的核心类,如:JobLauncher、Job、Step等。 基础架构层:提供通用的读、写和服务处理。应用场景基本概念Job配置Step配置ItemReader、ItemWriter与ItemProcessorStep FlowJob健壮性并行.

2020-11-01 22:36:09 1226

原创 Easy Rules core包 规则引擎

概述:1、依赖:可以只引入core包即可使用规则引擎;以引入easy-rules-support。支持XOR logic、json描述规则、yaml描述规则。如果要使用SpEL(Spring Expression Language)、MVEL(表达式解析器)则还需要引入easy-rules-spel[4.1.0开始引入]、easy-rules-mvel <dependency> <groupId>org.jeasy</groupId>

2020-09-04 00:03:24 1985

原创 责任链模式-优化系统元数据特殊处理

最近在工作中,涉及到元数据的特殊处理,由于系统需要兼容多级经销商和多组织模式;对于不同的租户类型、不同的业务控制方式、不同的登录用户,同一模块的元数据存在差异。注:此处的【元数据】用于构建前端界面的基本元素,前端调用服务获取元数据后构建界面...

2020-08-25 18:27:14 288

原创 数据库版本管理:springboot + flyway 、shell脚本维护

最近在公司项目中,随着产品的迭代,需要维护数据库表结构、数据升级等问题。最初采用了平台数据库版本维护框架,需要写shell脚本,然后配置rundeck节点实现数据库一键升级。简单的介绍下shell脚本编写思路:首先数据库中,维护一张表history记录数据库版本,类似于flyway的flyway_schema_history表。在history中记录几个关键数据:ex、git-commit-id,DEMO连接:https://github.com/wanghowie/flywaydemo.gi

2020-08-14 00:37:03 932

原创 JAVA程序性能优化--笔记2、设计模式:单例与代理

单例模式单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。Java语言中,这样的行为能带来两大好处:(1)对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。(2)由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。最简单的单例实现:public class Singleton { private Sin...

2020-07-23 20:10:30 215

原创 JAVA程序性能优化--笔记1、Java性能调优的相关知识概述

程序的性能通过以下几个方面来表现:执行速度:程序的反映是否迅速,响应时间是否足够短。 内存分配:内存分配是否合理,是否过多地消耗内存或者存在泄漏。 启动时间:程序从运行到可以正常处理业务需要花费多长时间。 负载承受能力:当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓。可以用于定量评测的性能指标有:执行时间:一段代码从开始运行到运行结束,所使用的时间。 CPU时间:函数或者线程占用CPU的时间。 内存分配:程序在运行时占用的内存空间。 磁盘吞吐量:描述I/O的使用情.

2020-07-10 13:59:16 222

原创 SPRING实战(3)、超媒体与Spring HATEOAS之一

超媒体作为应用状态引擎(Hypermedia as the Engine of Application State,HATEOAS)是一种创建自描述API的方式。API所返回的资源中会包含相关资源的链接,客户端只需要了解最少的API URL信息就能导航整个API。如果API启用了超媒体功能,那么API将会描述自己的URL,从而减轻客户端对其进行硬编码的痛苦。这种特殊风格的HATEOAS被称为HAL(超文本应用语言,Hypertext Application Language),这是一种在JSON响应中嵌入超

2020-06-23 23:00:01 1246

原创 Linux学习-1、系统目录结构

目录的解释: /bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev : dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。 /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。 /home: 用户的主目录,在Linux中,每个用户..

2020-06-18 22:45:32 246

原创 SPRING实战(2)、Spring基础之配置

在Spring的XML方式和基于Java的配置中,这两种类型的配置通常会在同一个地方显示声明。在基于Java的配置中,带有@Bean注解的方法一会同事初始化话bean并立即为它的属性设置值。Spring的环境抽象是各种配置属性的一站式服务。它抽取了原始的属性,这样需要这些属性的bean就可以从Spring本身中获取了。Spring环境会拉取多个属性源,包括: JVM系统属性; 操作系统环境变量; 命令行参数; 应用属性配置文件。Spring Boot自动配置的bean都可以通过Spring环境提取的属性进行

2020-06-16 21:19:59 233

原创 SPRING实战(1)、Spring基础

Spring的核心是提供了一个 容器(container),通常称为Spring应用上下文(Spring application context),它们会创建和管理应用组件。将bean装配在一起的行为是通过一种基于 依赖注入(dependency injection,DI) 的模式实现的。Spring通过配置文件或者基于java配置将bean装配在一起。@Configuration注解会告知Spring这是一个配置类,会为Spring应用上下文提供bean。这个配置类的方法使用@Bean注解进行了标注,

2020-06-11 21:00:58 351

原创 Java并发编程学习-日记12、Redis 和 Java

Redis的配置项清单如下:(1)port:端口配置项,查看和设置Redis监听端口,默认端口为6379。(2)bind:主机地址配置项,查看和绑定的主机地址,默认地址的值为127.0.0.1。(3)timeout:连接空闲多长要关闭连接,表示客户端闲置一段时间后,要关闭连接。如果指定为0,表示时长不限制。这个选项的默认值为0,表示默认不限制连接的空闲时长。(4)dbfilename:指定保存缓存数据库的本地文件名,默认值为dump.rdb。(5)dir:指定保存缓存数据的本地文件所存放

2020-06-01 00:05:05 269

原创 Java并发编程学习-日记11、ZooKeeper实现分布式命名服务器

命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 分布式命名服务器应用场景:分布式API目录:为分布式系统中各种API接口服务的名称、链接地址,提供类似JNDI(Java命名和目录接口)中的文件系统的功能。借助于ZooKeeper的树形分层结构就能提供分布式的API调用功能。著名的Dubbo分布式框架就是应用了ZooKeeper的分布式的JNDI功能。在Dubbo中,使用ZooKeepe.

2020-05-31 23:40:46 357

原创 Java并发编程学习-日记10、ZooKeeper

连接假死什么是连接假死呢?如果底层的TCP连接已经断开,但是服务器端并没有正常地关闭套接字,服务器端认为这条TCP连接仍然是存在。连接假死的具体表现如下:(1)在服务器端,会有一些处于TCP_ESTABLISHED状态的“正常”连接。(2)但在客户端,TCP客户端已经显示连接已经断开。(3)客户端此时虽然可以进行断线重连操作,但是上一次的连接状态依然被服务器端认为有效,并且服务器端的资源得不到正确释放,包括套接字上下文以及接收/发送缓冲区。连接假死通常是由以下多个原因造

2020-05-24 16:18:23 325

原创 Java并发编程学习-日记9、JSON 与 Protobuf

1、JSON:Jackson开源库的优点是:所依赖的jar包较少、简单易用、性能也还不错,另外Jackson社区相对比较活跃。 Jackson开源库的缺点是:对于复杂POJO类型、复杂的集合Map、List的转换结果,不是标准的JSON格式,或者会出现一些问题。 Gson可以完成复杂类型的POJO和JSON字符串的相互转换,转换的能力非常强。 从性能上说,FastJson库采用独创的算法,将JSON转成POJO的速度提升到极致,超过其他JSON开源库。在POJO序列化成JSON字符串的应用场景

2020-05-24 15:46:28 376

原创 Java并发编程学习-日记8、netty的编码和解码

Netty解码器ByteToMessageDecoder一个标准的解码器将输入类型为ByteBuf缓冲区的数据进行解码,输出一个一个的Java POJO对象。Netty内置了这个解码器,叫作ByteToMessageDecoder,位在Netty的io.netty.handler.codec包中。所有的Netty中的解码器,都是Inbound入站处理器类型,都直接或者间接地实现了ChannelInboundHandler接口。ByteToMessageDecoder解码的流程,大致具体可以描述

2020-05-24 15:22:39 689

原创 Java并发编程学习-日记7、第二个netty程序回显服务器

代码示例: public class NettyEchoServer { private final int serverPort; ServerBootstrap b = new ServerBootstrap(); public NettyEchoServer(int port) { this.serverPort = port; } public void runServer() { ...

2020-05-24 14:39:36 376

原创 Java并发编程学习-日记6、Netty基础知识点

Netty的服务启动类ServerBootstrap:Bootstrap类是Netty提供的一个便利的工厂类,可以通过它来完成Netty的客户端或服务器端的Netty组件的组装,以及Netty程序的初始化。它的职责是一个组装和集成器,将不同的Netty组件组装在一起。另外,ServerBootstrap能够按照应用场景的需要,为组件设置好对应的参数,最后实现Netty服务器的监听和启动。Netty中的各种组件:服务器启动器、缓冲区、反应器、Handler业务处理器、Future异步任务监听、数据传输通道。

2020-05-23 21:52:19 765

原创 Java并发编程学习-日记5、Netty从DiscardServer实践开始

DiscardServer所示,创建netty服务端,一共有8步,重点在:监控事件的线程组、通道及通道参数、出入站的处理器(绑定在流水线上)、异步监控事件处理 public class NettyDiscardServer { private final int serverPort; /* Netty的服务启动类ServerBootstrap,它的职责是一个组装和集成器,将不同的Netty组件组装在一起。另外,ServerBootstrap能够按照应用场景...

2020-05-22 23:33:22 276

原创 Java并发编程学习-日记4、 Future异步回调

JION join操作的原理是:阻塞当前的线程,直到准备合并的目标线程的执行。在Java中,线程(Thread)的合并流程是:假设线程A调用了线程B的B.join方法,合并B线程。那么,线程A进入阻塞状态,直到B线程执行完成。(1)join是实例方法,不是静态方法,需要使用线程对象去调用,如thread.join()。(2)join调用时,不是线程所指向的目标线程阻塞,而是当前线程阻塞。(3)只有等到当前线程所指向的线程执行完成,或者超时,当前线程才能重新恢复执行。(4)join有...

2020-05-20 20:51:49 758

原创 Java并发编程学习-日记3、Reactor反应器模式

本博文记录了学习Reactor反应器模式的一些笔记。java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章——《Scalable IO in Java》,在文章中Doug Lea通过各个角度,循序渐进的梳理了服务开发中的相关问题,以及在解决问题的过程中服务模型的演变与进化,文章中基于Reactor反应器模式的几种服务模型架构,也被Netty、Mina等大多数高性能IO服务框架所采用。所以可以仔细拼读一下《Scalable IO...

2020-05-19 22:17:34 373

原创 Java并发编程学习-日记2、NIO实现Discard服务器实践

源码分析: ServerSocketChannel是一个可以监听新进来的TCP连接的通道,就像标准IO中的ServerSocket一样。 通过ServerSocketChannel.accept()方法监听新进来的连接。当accept()方法返回的时候,它返回一个包含新进来的连接的SocketChannel。 ServerSocketChannel可以设置成非阻塞模式:serverSocketChannel.configureBlocking(false);在非阻塞模式下,accept(...

2020-05-18 21:56:08 331

原创 Java并发编程学习-日记1、常见的IO模型、NIO、OIO

常见的IO模型:1、同步阻塞IO(Blocking IO): 在Java中,默认创建的socket都是阻塞。同步IO,是一种用户空间与内核空间的IO发起方式。同步IO是指用户空间的线程是主动发起IO请求的一方,内核空间是被动接受方。异步IO则反过来,是指系统内核是主动发起IO请求的一方,用户空间的线程是被动接受。阻塞IO的特点及优缺点:阻塞IO的特点是:在内核进行IO执行的两个阶段,用户线程都被阻塞。 阻塞IO的优点:应用的程序开发非常简单;在阻塞等待数据期间,用户线程挂起。在阻塞期间,用户线程

2020-05-18 21:17:33 719

原创 常用的排序算法实现(2)-堆排序

堆排序相对来说比较复杂。这里使用了两种是实现方案,方案1,heapSort1()需要借助于二叉堆类,这个算是一个入门;有助于理解堆排序。方案2,heapSort2()将数组看成是一棵二叉树,首先要对树转换,使其变成大顶堆。然后再进行排序。这里需要注意1.数组索引从0开始。所以计算元素索引的时候要转换,而且要注意越界问题。2.大顶堆和堆排序都只用了下沉操作;2.1在构建大顶堆的时候,要从...

2020-04-15 22:04:40 179

pdfbox实现打印功能

这个代码是前段时间要做一个打印功能时,研究了一下pdfbox。发现pdfbox给的demo有很多是可以稍作修改直接拿过来用的。

2016-10-25

scikit-learn学习代码

机器学习python算法库:常用的算法及代码实践,K邻近算法、逻辑回归算法、线性回归算法、决策树、支持向量机、朴素贝叶斯算法、PCA、K-均值算法

2020-11-30

ERmaster_eclipse

ERmaster这是一个好用的eclipse插件对我们数据库的设计很有帮助。详细软件下载可以google收索ermaster下载安装

2013-04-22

powerdesigner16破解文件

直接替换安装目录下的pdflm16.dll即可。本人亲测,没问题。

2017-10-22

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

TA关注的人

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