自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 Ctrl + B 复制图片Base64

这是一个专为Windows系统设计的工具,用于快速获取资源管理器(文件夹)中选中图片文件鑫茂,深圳,Java开发工程师。希望通过文章,结识更多同道中人。

2024-04-21 19:12:05 429

原创 常见设计模式的那些事 | 2.5W字长文

抽象是面向对象编程的重要特性之一,它允许我们隐藏方法的具体实现,只暴露方法的功能接口给调用者。这样做的好处是调用者只需要知道方法提供了哪些功能,而不需要了解方法内部的实现细节,从而提高了代码的可维护性和可扩展性。在面向对象编程中,我们通常使用接口类或抽象类来实现抽象特性。接口类是一个特殊的抽象类,它只定义了方法的接口,而没有实现任何具体的方法,因此它们只包含方法声明和常量定义。另一方面,抽象类不仅可以定义方法的接口,还可以定义具体的方法实现,但是它不能被直接实例化,只能被子类继承和实现。

2023-03-30 10:37:05 443 1

原创 【线程同步工具】CyclicBarrier源码分析

count属性和CountDownLatch中的count一样,代表还需要等待的线程数,初始值为parties,每当一个线程到来就减一,如果该值为0,则说明所有的线程都到齐了,大家可以一起通过Barrier了。这个breakBarrier怎么理解呢,继续拿上面过上车的例子打比方,有时候某个时间段,景区的人比较少,等待过山车的人数凑不够10个人,眼看后面迟迟没有人再来,这个时候有的工作人员也会打开栅栏,让正在等待的人进来坐过山车。该方法用于开启新的“一代”,通常是被最后一个调用await方法的线程调用。

2023-03-12 15:58:29 379

原创 【线程同步工具】CountDownLatch源码解析

鑫茂,深圳,Java开发工程师。喜读思维方法、哲学心理学以及历史等方面的书,偶尔写些文字。希望通过文章,结识更多同道中人。

2023-03-12 15:57:52 304

原创 【线程同步工具】Semaphore源码解析

鑫茂,深圳,Java开发工程师,2022年3月参加工作。喜读思维方法、哲学心理学以及历史等方面的书,偶尔写些文字。希望通过文章,结识更多同道中人。

2023-02-22 10:11:28 385

原创 吵完架后,总感觉没发挥好?让ChatGPT教你如何科学吵架!

鑫茂,深圳,Java开发工程师,2022年3月参加工作。喜读思维方法、哲学心理学以及历史等方面的书,偶尔写些文字。希望通过文章,结识更多同道中人。如果你对我感兴趣欢迎添加我的联系方式,可以一起讨论如何赚钱,实现共同富裕。

2023-02-11 00:36:22 371

原创 MySql查询性能优化必知必会

鑫茂,深圳,Java开发工程师,2022年3月参加工作。喜读思维方法、哲学心理学以及历史等方面的书,偶尔写些文字。希望通过文章,结识更多同道中人。如果你对我感兴趣欢迎添加我的联系方式,可以一起讨论如何赚钱,实现共同富裕。

2023-02-07 09:44:01 1044

原创 Alan的Docker容器学习笔记

我把上面的答案告诉运维同学后,他们反馈说,用K8s挂载不了上面提到的目录。限于我目前对K8s不了解,这个问题他们也不着急,所以只能暂时搁置一下,等我学完k8s再去解决。学习完k8s之后我会和今天一样把学习经验分享出来。我在微信公众号发表了本文的英文版(借助了翻译软件),如果您感兴趣可以关注一下我: ProgrammerAlan。鑫茂,深圳,Java开发工程师,2022年3月参加工作。喜读思维方法、哲学心理学以及历史等方面的书,偶尔写些文字。希望通过文章,结识更多同道中人。

2023-01-13 11:57:40 461

原创 【Java开发常见错误】数值计算精度和舍入问题

今天单独分享数值计算的问题,是因为最近处理一次线上服务告警时,发现还有很多同学不了解浮点数计算的坑。数值精度问题引发的Bug一般难以发现,所以我们在公司处理这方面的业务时一定要特别注意。下面我们来具体看看这些问题。

2022-11-18 11:08:21 712

原创 【并发编程】线程池实现原理

你知道线程池通过什么技术维护多个线程,和等待管理者分配可并发执行任务吗?看到这个问题你应该能想到“池化技术”、“阻塞队列”但内部的实现原理可能不太清楚,下面让我们来一起深入一下线程池的内部实现原理。

2022-11-16 13:20:47 258

原创 【并发编程】你知道哪些实现线程的方法?

面试官经常会问你知道哪些实现线程的方法,这是因为实现线程是并发编程的基础,必须要先会实现线程,才可以继续后续的一系列操作。今天我就来说一下创建线程的常用方法。

2022-11-14 11:56:23 172

原创 自定义注解使用AOP做权限校验

你好,我是程序员Alan, 很高兴遇见你。最近看 RocketMQ 源码时,发现它是使用自定义注解的方式做权限校验,蛮有意思的,于是简单上手试了一下。下面是部分代码。编写切面测试测试结果

2022-11-03 16:48:43 483

原创 搭建源码调试环境—RocketMQ源码分析(一)

了解RocketMQ整体架构,搭建RocketMQ源码调试环境。

2022-11-02 22:21:49 411

原创 【Bug解决思路】Tomcat返回不安全的响应头

公司安全测试要求接口的请求方法只能是GET, POST,并且响应头也只能为GET, POST.当发送 options * 请求时,无论怎么设置响应头,返回的内容都是 “GET,HEAD,POST,PUT,DELETE,OPTIONS”

2022-11-01 17:57:45 618 1

原创 SpringCloud Gateway—高并发场景微服务实战(十三)

你好,我是程序员Alan,很高兴遇见你。我们在《系统架构设计—高并发场景微服务实战(三)》,将订票服务拆分成了很多子服务,其中很多子服务都需要用户验证、权限验证、流量控制等,那么我们要在每个子服务中重复编写相关的逻辑吗?

2022-10-29 13:42:19 1495

原创 消息队列—高并发场景微服务实战(十二)

分布式架构中经常提到的消息队列,可以简单理解为一种传递消息的容器。消息的传递和接收者,我们称之为生产者和消费者,生产者和消费者可以集群部署,也可以只有一个实例。DATA是生产和消费方传递的数据,数据格式可以是简单的字符串也可以是序列化后的复杂信息。队列是消息的载体,用于传输和保存消息,它和拥有数据结构中队列的特性,例如先进先出、优先级队列等等。

2022-10-25 11:51:08 746

原创 服务调用—高并发场景微服务实战(十一)

你好,我是程序员Alan.在前两篇文章中,我们引入Nacos完成了服务注册与发现和分布式配置中心,可以将所有的服务统一的管理起来,方便服务建调用。本篇我们将使用Feign实现服务间调用。

2022-10-24 10:30:38 465

原创 配置中心—高并发场景微服务实战(十)

业内有很多开源的分布式配置组件,比如携程的 Apollo(阿波罗),淘宝的 Diamond,百度的 Disconf,360 的 QConf ,阿里的 Nacos 等等。本案例中采用 Nacos 作为选型,为什么选 Nacos?主要是因为已经在项目中使用了 Nacos 作为服务注册中心,它兼有配置中心的功能,所以无须额外引入第三方组件,增加系统复杂度。

2022-10-23 11:51:57 626

原创 注册中心—高并发场景微服务实战(九)

此时我们可能会选择Nginx负载均衡,但往往是静态的,在服务不可用时,如何动态的更新负载均衡列表,保证调用者的正常调用呢?这里就涉及到两个或多个服务间的调用问题。2.服务调用者启动时,将服务提供者信息从注册中心下载到调用者本地,调用者从本地的 服务提供者列表中,基于某种负载均衡策略选择一台服务实例发起远程调用,这是一个点到点调用的方式。3.服务注册中心能够感知服务提供者某个实例下线,同时将该实例服务提供者信息从注册中心清除,并通知服务调用者集群中的每一个实例,告知服务调用者不再调用本实例,以免调用失败。

2022-10-19 11:48:09 267

原创 白话服务治理—高并发场景微服务实战(八)

道路一旦出现拥堵或者道路需要维修,那么就需要暂时封闭这条道路,由城市来统一调度 车辆,走不堵的道路,这就是。道路之间纵横交错四通八达,一旦在某条道路上出现拥堵,但是又发现这条道路从头堵到尾,说明事故并不是发生在这条道路上,那么就需要从整体链路上来排查事故究竟处在哪个位置,这就是。我们可以把集群看作是一个微型的城市,把道路看做是组成集群的服务,把行走在道路上的车当做是流量,那么服务治理就是对于整个城市道路的管理。Alan: 服务治理,也就是解决多个服务节点,组成集群的时候,产生的一些复杂的问题。

2022-10-19 11:43:55 104

原创 并行获取机票信息—高并发场景微服务实战(七)

你好,我是程序员Alan。在《 需求分析—高并发场景微服务实战(二)》一文的最后,我提了一个问题 “你会用什么方式获取和聚合机票信息?”,今天我会详细地讲解解决这类问题的几种常用方法。在开始讲解问题的解决方法之前,我们再来看一下问题的具体描述。搭建一个订票系统经常会有这样的需求 ,那就是同时获取多家航空公司的航班信息。比如,从深圳到三亚的机票钱是多少?有很多家航空公司都有这样的航班信息,所以应该把所有航空公司的航班、票价等信息都获取到,然后再聚合。由于每个航空公司都有自己的服务器,所以需要分别去请求它们的服

2022-10-16 14:28:26 289

原创 索引设计—高并发场景微服务实战(六)

你好,我是程序员Alan.我在上一篇文章《 表结构设计—高并发场景微服务实战(五)》中,详细的写了如何选择合适的类型创建一张表,但表结构设计只是设计数据库最初的环节之一,我们还缺少数据库设计中最为重要的一个环节——索引设计,。索引如果展开来讲有很多需要关注的地方,例如索引设计、业务应用与调优等等,本篇文章我会重点讲一下索引设计相关知识。

2022-10-16 14:27:32 276

原创 表结构设计—高并发场景微服务实战(五)

表结构设计—高并发场景微服务实战

2022-10-16 14:27:08 408

原创 架构分层—高并发场景微服务实战(四)

软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成N个层级,每个层级有独立的职责,多个层级协同提供完整的功能。

2022-10-11 11:18:45 382

原创 系统架构设计—高并发场景微服务实战(三)

你好,我是程序员Alan。在《需求分析— 高并发场景微服务实战(二)》一文中,我详细梳理了业务需求。相信你对订票系统的业务需求情况已经十分清楚了。下面我开始系统设计工作,包括功能模块设计、存储设计、缓存设计、高并发系统架构设计等,为后面的开发工作提供良好的基础保障。

2022-10-03 20:40:20 797 1

原创 需求分析—高并发场景微服务实战(二)

你好,我是程序员Alan.在《 高并发场景微服务实战(一)》一文中,我提到决定以一个虚拟的高并发场景的微服务系统为主线,系统性从 0 到 1 的创造一个高并发场景的微服务系统。这个高并发业务场景是——下面我会详细说一下自己为什么选择这个业务场景作为需求原型,并记录下我分析需求和梳理业务流程的过程。在公司需求分析工作大多数情况是由PO(产品经理)完成的,我虽然偶尔会提出一些建议,但缺少需求分析的专业知识,所以可能会有许多错误,见笑了。

2022-10-03 20:39:41 661

原创 高并发场景微服务实战(一)

你好,我是程序员Alan.说到高并发和微服务,你是不是和我一样有很多的困惑?知道微服务开发热门,但一直是外行看热闹,不知道里面具体有哪些内容。知道高并发系统开发技术,是获取大厂Offer的利器,可是工作中遇不到高并发的需求场景。了解过微服务开发、高并发系统开发理论,苦于没实战经验。知道单个技术点的应用,但怎么将技术融合起来有些模糊。 为了解决自己的这些困惑,将微服务架构开发体系,高并发系统设计体系串联起来。为了在面对新机会时能把握住机会,在实际产品开发中,能做到胸有成

2022-10-02 01:06:48 215

原创 接收Date为什么多出了HH:mm:ss?

json传入标准格式的 yyyy-MM-dd ,想让其展示成 2022-09-29,而程序好像和我作对,总是输出 2022-09-29 08:00:00.0。

2022-09-29 14:44:31 294

原创 SpringBoot项目启动时让方法自动执行

1.实现CommandLineRunner接口@Componentpublic class CommandLineRunnerImpl implements CommandLineRunner { /** * Callback used to run the bean. * * @param args incoming main method arguments * @throws Exception on error */ @

2022-03-09 14:14:06 398

原创 JSON字符串,JSON对象,JSON数组,实体类转换

依赖<!-- fastjson --><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version></dependency>JSON对象 是直接可以使用JQuery操作的格式 JSON字符串 仅仅只是一个字符串,一个.

2022-03-08 16:42:50 2329

原创 【网络编程】接收广播

private DeviceInfo deviceInfo = new DeviceInfo(); //设备信息 private final static String BROADCAST_IP = "255.255.255.255"; //广播范围 private final static int BROADCAST_PORT = 8888; //端口 @Override public void receiveBroadCast() t...

2022-03-08 12:15:32 106

原创 泛型类的定义

1.泛型类怎么定义2.实操@Servicepublic class SendMessageServiceImpl<T> implements SendMessageService {​ @Override public HttpResponse sendMessage(String url, Object requestInfo) { //String url = "192.168.2.9:8080"; //设备ip:端口号 ...

2022-03-08 12:12:39 327

原创 CORS全局跨域设置

方法一使用注解对接口进行跨域设置@CrossOrigin(origins = "*", maxAge = 3600)@RestController@RequestMapping("/test")public class TestController { @GetMapping("get") public String get() { // ... } }方法二直接实现实现WebMvcConfigurer@Configurati...

2022-03-08 12:03:09 1939

原创 thymeleaf条件判断用法,根据查出来的值判断界面显示内容

一.简单的条件:“if”和“unless”  th:if用法实例:<table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> <tr th:each="prod : ${prods}" th:class="${.

2022-03-08 11:59:21 3873

原创 thymeleaf 中 for each的使用

2022-03-08 11:55:10 871

原创 MybatisPlus简单使用步骤

1.建立实体类2.编写mapper3.配置mybatisplus扫描接口4.编写service5.编写serviceImpl

2022-03-08 10:43:47 574

转载 PO,BO,VO和POJO的区别

PO:persistent object 持久对象1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。2 .在hibernate持久化框架中与insert/delet操作密切相关。3 .PO中不应该包含任何对数据库的操作。POJO:plain ordinary java object 无规则简单java对象一个中间对象,可以转化为PO、DTO、VO。1 .POJO持久化之后==〉PO(在运行期,由Hibernate中的cgli.

2022-03-07 21:14:49 165

原创 serialVersionUID的作用,如何设置IDEA生成serialVersionUID

serialVersionUID作用:序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。序列化ID起着关键的作用,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。序列化:是把对象的状态信息转化为可存储或传输的形式过程,也就是.

2022-03-07 21:13:00 351

原创 HttpUtils 发送post请求和get请求

发送post请求@Slf4j@Servicepublic class SendMessageServiceImpl<T> implements SendMessageService { @Override public BaseResponseInfo sendMessage(String url, Object requestInfo) { //String url = "192.168.2.9:8080"; //设备ip:端口号 St

2022-03-07 21:03:24 4037

原创 java enum枚举类 简单介绍和使用

在比较两个枚举类型的值时,不需要调用equals方法,而直接使用"=="就可以了。(equals()方法也是直接使用==, 两者是一样的效果)Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。@Getter@AllArgsConstructorpublic enum IOTEfaceCode {

2022-03-07 20:57:36 210

空空如也

空空如也

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

TA关注的人

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