自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

byx的博客

程序设计

  • 博客(46)
  • 收藏
  • 关注

原创 加速Spring Boot单元测试的执行速度

加速Spring Boot单元测试的执行速度

2024-01-22 16:45:10 639

原创 二分查找模板及其应用

二分查找模板及其应用

2023-11-29 20:32:36 121

原创 CentOS安装Ruby环境

CentOS安装Ruby环境

2023-10-30 11:27:17 650

原创 Docker操作总结

Docker安装配置、常用命令、常用容器启动

2023-10-24 19:37:04 320

原创 Spring Boot复用yaml文件

如果Spring Boot项目的配置过多,可以把一些配置项放在单独的yaml文件中,并以。这些配置文件可以保存在当前项目的。目录中,也可以保存在maven依赖的。目录中,并在当前项目引入。

2023-09-03 12:07:04 595

原创 Spring Boot实现多数据源动态切换

Spring Boot实现多数据源动态切换

2023-05-09 19:55:28 999 2

原创 LeetCode题目分类

LeetCode题目分类

2023-04-09 10:51:21 454

原创 Spring Boot应用启动时自动建表和插入测试数据

Spring Boot应用启动时自动建表和插入测试数据

2023-03-12 17:20:43 619

原创 leetcode回文相关题目

本文汇总分析leetcode上与回文相关的题目

2022-06-11 19:55:18 151

原创 leetcode3.无重复字符的最长子串

leetcode3.无重复字符的最长子串

2022-06-03 10:40:27 89

原创 leetcode42.接雨水

题目链接:https://leetcode.cn/problems/trapping-rain-water/思路对于下标i,下雨后水能达到的最大高度等于height[i]左右两边最大值的最小值减去height[i]。设left[i]表示height[0~i]的最大值,有如下递推关系:left[i]={height[0],  i==0max(left[i−1],height[i]),  i>0left[i] = \begin{cases}height[0],\,\,i==0\\max(l

2022-05-24 10:51:51 131 1

原创 leetcode85.最大矩形

题目链接:https://leetcode.cn/problems/maximal-rectangle/思路将矩阵拆分成若干个柱状图,然后直接复用84.柱状图中最大的矩形的解法。假设有以下矩阵:矩阵前1行形成的柱状图:1 0 1 0 0矩阵前2行形成的柱状图:2 0 2 1 1矩阵前3行形成的柱状图:3 1 3 2 2矩阵前4行形成的柱状图:4 0 0 3 0对每个柱状图调用maxArea求最大矩形面积,取所有面积的最大值即为所求。Javaclass Solution {

2022-05-24 10:43:27 95

原创 leetcode84.柱状图中最大的矩形

题目链接:https://leetcode.cn/problems/largest-rectangle-in-histogram/思路对heights中每个柱子,求出以当前柱子为高的最大矩形面积。假设有以下柱状图:以第1个柱子为高的最大矩形:以第2个柱子为高的最大矩形:以第3个柱子为高的最大矩形:以第4个柱子为高的最大矩形:以第5个柱子为高的最大矩形:以第6个柱子为高的最大矩形:设left[i]left[i]left[i]表示第iii个柱子左边第一个比它矮的柱子下标,如果不

2022-05-23 19:20:32 144

原创 Java中将标准输入和输出重定向到字节流

在Java程序中,可以通过给System.in和System.out重新赋值来重定向标准输入和输出。在单元测试的时候,为了对涉及到标准输入和输出的程序进行测试,常用的做法是将标准输入和输出重定向到文件,这样就可以用程序实现自动化的比对。但是这样做会有文件读取的开销,可能会降低单元测试的运行效率。所以,更优的做法是将标准输入和输出重定向到字节流,这样就能避免文件读取的开销。为了实现以上的效果,可以封装一个叫做getOutput的工具函数,它以字符串的形式传递标准输入内容,并以字符串的形式返回标准输出的内

2022-05-03 10:21:44 674

原创 加速Java异常类的创建

大家都知道,Java在创建异常对象时会生成调用栈信息,这样当异常抛出时,开发者就能从报错信息中看到异常抛出的路径,非常有利于定位问题。但是,调用栈信息的生成是一件非常耗时的工作。在某些特殊情况下,我们需要用异常来实现控制流跳转(比如从多层递归中跳出),此时不需要生成调用栈信息。在这种情况下,关闭异常的调用栈信息生成将会极大地提升程序的运行效率。public class FastException extends RuntimeException { public FastException()

2022-04-26 21:30:14 412

原创 Java8 Stream的简易实现

前言Java8新增的Stream API是一个强大的特性,它可以简化集合中的常用操作,包括过滤、映射、分组等。下面就来实现一个简易版的Stream。从表面上看,流似乎和列表很接近,但实际上它们有着本质的区别。列表是多个元素的容器,当列表被创建出来时,它里面的每个元素也已经被创建出来了。流是一种计算结构,它封装了内部元素如何产生的计算过程,但是并没有包含实际的元素数据。换句话说,当一个流被创建出来时,它内部的元素并没有被创建,但是我们可以通过调用流的方法来按顺序生成每个元素。所以,流具有

2022-03-19 15:58:03 744

原创 Java中获取Lambda表达式的参数类型和返回值类型

Java 1.8之后,新增了一个叫做SerializedLambda的类,它用来保存Lambda表达式序列化之后的数据,通过SerializedLambda可以获取Lambda表达式的各种元信息,包括参数类型、返回值类型等。下面的代码可以获取一个Lambda表达式对应的SerializedLambda实例:interface Function2<R, T1, T2> extends Serializable { R apply(T1 t1, T2 t2);}try {

2022-02-21 21:12:02 2616

原创 Java中获取lambda表达式的泛型类型

假设有以下接口:public interface Factory<T> { T create();}这是一个泛型接口,在实现Factory的时候需要指定泛型参数:public class StringFactory implements Factory<String> { @Override public String create() { return "hello"; }}public class IntegerFa

2021-12-12 18:37:39 1319

原创 基于ParserCombinator的正则表达式引擎

这篇文章介绍如何用Parser Combinator实现一个简单的正则表达式引擎。CursorCursor封装了字符串的状态,表示一个光标位置。光标位置只能向后移动,可以方便地获取光标指向的字符,以及判断是否到达字符串末尾。public class Cursor { private final String input; private final int index; public Cursor(String input, int index) { this

2021-10-20 19:56:18 256

原创 Spring源码分析——Configuration配置类解析流程

示例工程引入Maven依赖:<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.5</version> </dependency></dep

2021-07-01 09:48:54 246

原创 Spring源码分析——AnnotationConfigApplicationContext组件注册流程

工程搭建Maven依赖:<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.5</version> </dependency></depen

2021-06-29 21:19:31 358

原创 在SpringBoot中优雅地实现策略模式

首先定义一个Strategy接口来表示一个策略:public interface Strategy { String flag(); void process();}其中flag方法返回当前策略的唯一标识,process则是该策略的具体执行逻辑。下面是Strategy接口的两个实现类:public class StrategyImpl1 implements Strategy { @Override public String flag() { r

2021-06-10 21:25:39 552

原创 ByxOrm——模仿MyBatis的轻量级ORM框架

ByxOrm是一个模仿MyBatis设计的轻量级ORM框架,支持以下特性:使用动态代理生成Dao接口的实现类使用注解配置Dao方法对应的SQL语句使用注解配置实体类字段与数据库列名的对应关系动态查询和动态更新项目地址:https://github.com/byx2000/byx-ormMaven引入<repositories> <repository> <id>byx-maven-repo</id> &

2021-05-13 21:09:07 193

原创 ByxContainerAnnotation——基于注解的轻量级IOC容器

ByxContainerAnnotation是一个模仿Spring IOC基于注解的轻量级IOC容器,支持构造函数注入和字段注入,支持循环依赖处理和检测,具有高可扩展的插件系统。项目地址:https://github.com/byx2000/byx-container-annotationMaven引入<repositories> <repository> <id>byx-maven-repo</id> <n

2021-05-13 14:19:36 258

原创 如何自定义一个spring-boot-starter

开发byx-spring-boot-starter项目首先创建一个Maven项目,名为byx-spring-boot-starter:<groupId>byx.spring</groupId><artifactId>byx-spring-boot-starter</artifactId><version>1.0.0</version>引入如下依赖:<dependency> <groupId>

2021-04-17 20:49:47 197

原创 用遗传算法解决VRP问题

车辆路径问题 (Vehicle Routing Problem,以下简称VRP问题)最早由Dantzig和Ramser于1959年首次提出,是运筹学中一个经典问题。VRP问题主要研究物流配送中的车辆路径规划问题,是当今物流行业中的基础问题。VRP问题的主要研究对象是以下问题:有一个配送中心,每天需要向若干配送点配送货物,配送中心有若干辆车可用于配送。已知配送中心和各配送点的位置,请问如何设计配送方案才能让配送效率尽可能高?该问题是一类物流配送优化问题的典型代表。对以上问题进行不同条件的约束,并设.

2021-03-15 08:55:17 19822 15

原创 leetcode1114.按序打印

题目链接:https://leetcode-cn.com/problems/print-in-order/解法1:使用synchronized、wait和notifyAllclass Foo { private int state = 1; public Foo() {} public void first(Runnable printFirst) throws InterruptedException { synchronized(this) {

2021-03-13 16:14:14 92

原创 c和c++中的坑

这篇文章记录了我在c和c++开发中遇到的一些坑。以下程序段的输出结果是什么?printf("%d\n", 1 | 0 == 0);printf("%d\n", 0 & 1 == 0);printf("%d\n", 1 + 2 << 3);答案:1024解释:由于位运算符的优先级较低,因此表达式1 | 0 == 0的真正含义是1 | (0 == 0),而不是(1 | 0) == 0;表达式1 + 2 << 3的真正含义是(1 + 2) <<

2021-03-05 21:43:32 131

原创 如何在c++中检测内存泄漏

在Visual Studio系列的IDE中,可以使用_CrtSetDbgFlag函数来检测内存泄漏:int main(){ _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); // some code ... return 0;}注意,_CrtSetDbgFlag需要在刚进入main函数时调用,在_CrtSetDbgFlag(...)和return 0之间的所有内存泄漏都可以被检测到,假如有下面的代码:int ma

2021-03-04 19:03:44 837 1

原创 Java反射中与自动装箱有关的坑及其解决方案

Java反射中与自动装箱有关的坑最近在写一个项目,里面需要频繁使用反射操作。由于Java的反射API使用起来比较复杂,所以我决定把常用的反射操作封装成一个工具类:ReflectUtils。在ReflectUtils中,有这么一个call方法:public static <T> T call(Object obj, String methodName, Object... params);这个方法利用反射调用某个实例对象的某个方法,obj是对象实例,methodName是方法名,para

2021-02-25 12:57:20 141 2

原创 ByxAOP——简易AOP框架

ByxAOP是一个基于JDK动态代理的简易AOP框架,具有以下功能特性:对目标对象的特定方法进行拦截和增强支持灵活的拦截规则和自定义拦截规则动态实现接口和批量实现接口方法灵活的对象代理机制项目地址:github 码云使用示例首先来通过一个简单例子快速了解ByxAOP。假设我们有一个UserDao接口:public interface UserDao{ int listAll(); int listById(int id); void deleteByNam

2021-02-24 11:21:23 164

原创 解决构造函数导致的循环依赖

本篇文章介绍如何解决由构造函数导致的循环依赖问题

2021-02-16 17:04:33 526

原创 自制IOC容器(4)

本系列文章介绍ByxContainer的实现思路。ByxContainer是一个简单的轻量级IOC容器,具有以下特性:使用JSON格式的配置文件支持构造函数注入、静态工厂注入、实例工厂注入、属性注入、setter注入、条件注入组件的延迟加载和单例组件根据id注册、获取容器中的组件ByxContainer的设计借鉴了ajoo大神的博客。项目地址:github 码云本篇文章介绍ByxContainer中的条件组件。需求假设现在有一个MyDao接口,以及它的两个实现类:public in

2021-02-15 11:59:35 70

原创 自制IOC容器(3)

本系列文章介绍ByxContainer的实现思路。ByxContainer是一个简单的轻量级IOC容器,具有以下特性:使用JSON格式的配置文件支持构造函数注入、静态工厂注入、实例工厂注入、属性注入、setter注入、条件注入组件的延迟加载和单例组件根据id注册、获取容器中的组件ByxContainer的设计借鉴了ajoo大神的博客。项目地址:github 码云本篇文章介绍ByxContainer中与对象初始化有关的设计。回顾在上一篇文章中,我们解决了对象创建的问题,但是在实际开发中

2021-02-13 11:46:34 81 1

原创 ByxContainer——轻量级IOC容器

ByxContainer是一个用Java编写的轻量级IOC容器,具有以下特性:* 使用JSON格式的配置文件* 支持构造函数注入、静态工厂注入、实例工厂注入、属性注入、setter注入、条件注入* 组件的延迟加载和单例组件* 根据id注册、获取容器中的组件

2021-02-10 17:39:16 335

原创 自制IOC容器(2)

本系列文章介绍ByxContainer的实现思路。ByxContainer是一个简单的轻量级IOC容器,具有以下特性:* 使用JSON格式的配置文件* 支持构造函数注入、静态工厂注入、实例工厂注入、属性注入、setter注入、条件注入* 组件的延迟加载和单例组件* 根据id注册、获取容器中的组件

2021-02-09 21:13:04 64

原创 自制IOC容器(1)

本系列文章介绍ByxContainer的实现思路。ByxContainer是一个简单的轻量级IOC容器,具有以下特性:* 使用JSON格式的配置文件* 支持构造函数注入、静态工厂注入、实例工厂注入、属性注入、setter注入、条件注入* 组件的延迟加载和单例组件* 根据id注册、获取容器中的组件

2021-02-08 19:57:44 86

原创 在Java中使用泛型消除强制类型转换

在Java中使用泛型消除强制类型转换假设类X有一个getObject方法,返回一个Object类型的数据:public class X{ public Object getObject(...) { ... return obj; }}使用X的代码如下:X x = ...;A a = (A) x.getObject(...);B b = (B) x.getObject(...);C c = (C) x.getObject(...);

2021-02-08 10:16:02 2259 1

原创 什么是IOC容器?为什么需要IOC容器?

什么是IOC容器?为什么需要IOC容器?假设我们现在正在使用三层架构开发一个项目,其中有一个用户模块,包含登录、注册等功能。现在已经写好了User实体类和UserDao数据访问层:public class User{ private Integer id; private String username; private String password; // 以下是getter和setter方法}public interface UserDao{ /

2021-02-02 19:58:25 4710

原创 JDBC工具类——JdbcUtils(6)

JDBC工具类——JdbcUtils(6)前言本系列文章介绍JDBC工具类——JdbcUtils的封装,部分实现参考了Spring框架的JdbcTemplate。完整项目地址:https://github.com/byx2000/JdbcUtils更新操作的封装下面是更新操作的代码:Connection conn = null;PreparedStatement stmt = null;try{ // 获取连接 conn = JdbcUtils.getConnection

2021-01-27 08:50:30 175

空空如也

空空如也

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

TA关注的人

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