自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DreamSun的博客

实事求是,追求技术,精益求精~将至而立之年,不忘年少初心!

  • 博客(960)
  • 资源 (1)
  • 收藏
  • 关注

原创 【java】Spring Boot -- Spring的IOC实现原理

IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

2023-02-14 10:40:09 1697 1

原创 【java】Spring Boot -- Spring AOP原理及简单实现

一般情况下数据被过滤的时机越早对服务的性能影响越小,因此我们在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是AOP。针对问题2,我们可以定义一个BeanFactoryPostProcessor的实现类,完成对所有BeanDefinition的扫描,找出我们定义的所有的切面类,然后循环里面的方法,找到切点、以及所有的通知方法,然后根据注解判断通知类型(也就是前置,后置还是环绕),最后解析切点的内容,扫描出所有的目标类,放入我们定义好的容器中。拦截器使用是反射机制。

2023-02-14 08:30:00 1315 1

原创 【java】@Transactional事务注解

事务(Transactional) 就是把多个要做的操作组合成一个整体,利用事务的特性来保证操作的安全性,如果一个事务做到一半出现任何错误,就会进行回滚操作,来恢复成最初的模样。@Transactional 是java中使用的注解形式的事务,也就是说可以直接使用该注解来完成事务操作.使用的位置: 该注解可以写在类或者方法上面.注意不能写在接口上。方法的权限: 必须是public的方法才可以使用该注解.

2023-02-10 09:52:30 4283

原创 【java】java 多线程编程

Java 给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。

2022-12-30 19:47:36 1333

原创 【linux】使用less命令查找文件中的关键字

一般我们查看文件内容时,使用基本的cat,tail,more命令就可以了。但如果我们有时候想查询文件中的关键字内容时,这个时候就不得不依靠less命令。在Linux上输入less a.txt(文件名),会看到a.txt文件的内容。这个时候我们想用关键字搜索的话,有两种方式。一种是从上往下搜索另一种是从下往上搜索从下往上搜索内容需要输入G命令,让光标移到文件最后。从上往下搜索时,需要输入"/关键字"命令,从下往上搜索时,输入"G”命令后,还需要输入"?关键字"命令。文件中含有关键字,会高亮显示。

2024-03-18 14:38:47 850 2

原创 【linux】Linux下vim常用命令:编辑、保存、退出

vim是我们在使用Linux是经常会使用的工具,新手总是忘记使用方法(当然我也是)。在这里记录下常用命令以防止以后再忘记。保存并退出: :wq (英文冒号,保存并退出当前编辑的文件);保存编辑文本: :w (英文冒号,保存当前编辑的文件);强制退出: :q!(英文冒号,强制退出不保存)。退出编辑文件: :q(英文冒号,退出当前编辑的文件);进入编辑模式: i (在当前位置插入,开始编辑);

2024-02-29 22:29:07 730 1

原创 ps -ef | grep 命令详解

grep 命令是查找(Global Regular Expression。Print),能使用正则表达式搜索文本,然后把匹配的行显示出来;| 符号,是个管道符号,表示ps 和 grep 命令同时执行;a :显示终端上的所有进程,包括其他用户的进程。u :以用户为主的格式来显示程序状况。x :显示所有程序,不以终端机来区分。ps 命令的作用是显示进程信息的;r :只显示正在运行的进程。-e : 显示所有进程。-h : 不显示标题。

2024-01-04 20:56:14 816

原创 数据库中间件介绍

数据库中间件是一种介于数据库系统和应用程序之间的软件层。它充当了一个抽象层,屏蔽了底层数据库的细节,为应用程序提供了更简化的接口。数据库中间件的主要目标是提供更高的性能、可用性、可扩展性,并简化数据库管理。典型的数据库中间件设计方案有3种:proxy、smart-client、单元化架构方式优点缺点Proxy 模式1.多语言支持2.对业务开发透明1.实现复杂2.Proxy 需要保证高可用3.租户隔离需要考虑Smart-client 模式1.实现简单,易于使用2.天然去中心化。

2023-12-24 19:17:57 570

原创 【Java】Java8 将List转换为用逗号隔开的字符串的几种方法

【代码】【Java】Java8 将List转换为用逗号隔开的字符串的几种方法。

2023-12-14 08:17:12 947

原创 从理论分析高可用

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,通常是指通过设计减少系统不能提供服务的时间。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。为了保证系统的高可用,我们可以从事前、事中和事后三个时间阶段,从技术和业务两个层面来解决问题。对于保证系统的高可用,我们可以通过事前、事中和事后三个时间阶段以及技术和业务两个层面综合进行处理。事前的准备是最多的,因为我们要尽最大努力去保证不出现问题。

2023-12-12 21:22:43 389

原创 【MQ】Rocketmq如何保证消息不丢失

RocketMQ可以理解成一个特殊的存储系统,这个存储系统特殊之处数据是一般只会被使用一次,这种情况下,如何保证这个被消费一次的消息不丢失是非常重要的。本文将分析RocketMQ从哪些方面来保证消息的不丢失。消息系统将不同的系统进行解耦,在提高了系统的高吞吐量和异步性能的同时,也对系统稳定性带来了挑战,消息保证可靠性不丢失就是非常关键的一个稳定性挑战,本文分别从生产者,Broker,消费者端三端来考虑对应方案来处理消息不丢失的手段。

2023-12-11 21:21:09 505

原创 一次事务失效问题的排查

解决起来也很简单,开一个新的事务就可以了,这个时候testRollback()跟test()两个方法便是两个事务了,当然,如果业务要求testRollback()跟test()两个方法的数据是要同生共死的,那代码就不能这样写了。有一次代码评审,同事有一个问题,如果一个方法有多个事务同步管理器,他们的执行顺序是怎样的,我也是写这个博客,重新看了下代码才找到原因,玄机在这行代码中,有兴趣的朋友可以去看看。事务提交之后,会重置事务状态,这个时候自动提交会变更为true,也就是这个数据库连接其实已经没有事务了。

2023-12-10 21:51:15 669

原创 【Spring】Spring 微服务中的数据分区和分片

在微服务架构中,高效的数据管理至关重要。当处理大量数据和高流量应用程序时,服务可能会遇到性能瓶颈。这就是数据分区和分片发挥作用的地方,确保数据的最佳分布以提高效率和性能。在本文中,我们将深入研究数据分区和分片的概念,以及如何在基于 Spring 的微服务中实现它们。在数据库和数据管理领域,分区是优化数据检索和存储的主要策略之一。数据分区涉及将数据库或表划分为更小、更易于管理的部分,并将每个部分视为更大数据集的组成部分。数字数据的指数级增长推动了对有效管理这种洪流的策略的需求。

2023-12-07 20:45:18 535

原创 【Spring Boot 】Spring Boot 常用配置总结

在涉及项目开发时,通常我们会灵活地把一些配置项集中在一起,如果你的项目不是很大的情况下,那么通过配置文件集中不失为一个很好的解决方案。在 Spring Boot 中,我们可以方便地通过读取格式的配置文件,进而注入我们的项目中。app:name: demo...这个自定义的内容,我们又怎么获取呢?

2023-12-06 09:34:08 916

原创 【Spring Boot】忽视日志吃大亏手把手教你学习Spring Boot日志

不知有多少人和笔者一样,在刚学习编程的时候,对日志并不重视。那时候学习java代码是用System.out.println(),相信屏幕前不少人一开始也是这样。后来即使加入了项目,用上了日志插件,也只是使用,对写日志也并无兴致。不过随着开发年限的上升,你就会发现,开发的工作其实写代码只有一半,而另一半主要是排查问题。写的时候少写一行日志很爽,排查的时候,少这一行日志恐怕就要抓破脑袋了学习完本文,你应当对现在这几个常用框架的有所了解,并能基础应用了。

2023-12-01 22:10:34 456

原创 聊聊接口最大并发处理数

生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习查资料时都了解过互联网系统设计三高指标,那就是高并发、高性能、高可用。本文主要讲高并发、高性能相关。本质上高性能也是为了给高并发铺平道路。而高并发设计中一部分也就是对应了本文主题接口最大并发数。

2023-11-30 23:12:25 487

原创 【DDD】领域驱动设计总结——如何构造领域模型

了解了如何创建和运用模型之后,我们再来探讨下如何构造一个领域模型。这就需要我们对领域进行分离,了解领域对象的分类及生命周期的管理。

2023-11-30 23:07:18 659

原创 【Spring Boot】使用 Spring Boot 进行开发时经常会遇到的问题总结

后端开发是任何 Web 应用程序的支柱,负责处理数据、逻辑以及前端和数据库之间的交互。虽然 Spring Boot 简化了构建健壮后端系统的许多方面,但仍然存在开发人员需要警惕的常见问题。在这篇文章中,我将探讨其中的一些陷阱,并提供使用 Spring Boot 的 Java 示例代码来说明后端开发需要从多方面出发,考虑应对不同问题的方法。在这篇文章中,我深入研究了后端工程师面临的其他挑战,提供了使用 Spring Boot 的 Java 实际示例。

2023-11-30 22:56:48 544

原创 【java】记一次Java应用查询不到最新数据的问题

主备机房数据库做同步,redis可没做同步,那如果备机房之前测的时候把旧数据缓存起来了,之后在主机房管理平台修改了配置,数据库数据是改了,主机房redis是清了,数据库也同步到备机房了,但是备机房redis不会触发清除啊!复盘一下,首先是部署拓扑,做的主备机房异地灾备,主备机房数据库做同步,查看了两边数据是一致的!其实这个问题的关键是,备机房也和主机房一起工作了,导致备机房的redis有了缓存数据,按正常使用方式,备机房只有主机房故障才会启用,不会并且也不建议同时使用,因为可能还会有其他问题。

2023-11-30 22:45:24 468

原创 【Linux】Linux 系统 grep 命令超详细讲解

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。)命令用于根据给定的正则表达式搜索文本,并将匹配的行打印出来。grep 命令是一项非常有用的工具。

2023-11-26 21:50:39 857

原创 【java】想要限制每次查询的结果集不能超过10000行,该如何实现?

对于一些Saas化软件,当某个租户在执行查询SQL时,如果查询条件出现了BUG,导致去查了所有租户的数据,这种情况是非常严重的,此时就需要在架构层面做限制,禁止一些特殊SQL的执行,另外,为了保护数据库,也可能会限制某些查询语句不要查询太多的数据,那么怎样在平台架构层面对业务层的SQL做拦截和校验呢?本文分享一下我司的做法。我们集团里有的项目用的Mybatis,有的项目用的Spring Data JPA,共同点在于都用的Druid连接池,所以可以在Druid层面做SQL的拦截和校验。

2023-11-22 22:23:29 612

原创 【JVM】JVM异常不打印堆栈信息 [ -XX:-OmitStackTraceInFastThrow ]

JVM对一些特定的异常类型做了Fast Throw优化,如果检测到在代码里某个位置连续多次抛出同一类型异常的话,C2会决定用FastThrow方式来抛出异常,而异常Trace即详细的异常栈信息会被清空。这种异常抛出速度非常快,因为不需要在堆里分配内存,也不需要构造完整的异常栈信息。生产环境日志突然膨胀到100G+, 为了定位问题,所以截取了部分报错日志,问题是 堆栈信息呢?哪里报的NPE在哪?,省略异常栈信息从而快速抛出异常.

2023-11-21 20:01:01 1026

原创 【Spring boot】RedisTemplate中String、Hash、List设置过期时间

时间类型:TimeUnitTimeUnit . SECONDS : 秒 TimeUnit . MINUTES :分 TimeUnit . HOURS :时 TimeUnit . DAYS :日 TimeUnit . MILLISECONDS :毫秒 TimeUnit . MILLISECONDS :微秒 TimeUnit . NANOSECONDS :纳秒。

2023-11-20 22:30:00 1678

原创 【Redis】RedisTemplate最全的常用方法

RedisTemplate常用方法String类型Hash类型List类型Set类型zSet类型Redis常用的数据类型:String、Hash、List、Set、zSet。

2023-11-19 22:06:19 625

原创 【Java】ArrayList和LinkedList使用不当,性能差距会如此之大!

在面试的时候,经常会被问到几个问题:ArrayList是基于数组实现,LinkedList是基于链表实现当随机访问List时,ArrayList比LinkedList的效率更高,等等ArrayList和LinkedList在新增、删除元素时,LinkedList的效率要高于 ArrayList,而在遍历的时候,ArrayList的效率要高于LinkedList那这个回答是否准确呢?今天我们就来研究研究!从源码角度解析ArrayList.subList的几个坑。

2023-11-18 21:13:26 375

原创 【JAVA】去掉 if...else 的七种绝佳之法...

我相信小伙伴一定看过多篇怎么去掉 if…else 的文章,也知道大家都很有心得,知道多种方法来去掉 if…else ,比如 Option,策略模式等等,但我相信这篇文章绝对是最全,最完备怎么去掉 if…else 的文章,里面有些方法我相信有小伙伴肯定不知道,我也不卖关子,直接进入主题,如何干掉 if…else。

2023-11-13 22:55:20 1213

原创 【架构】后端项目经典分层架构介绍

开发后端项目时,我们最常见的一种架构模式就是分层架构。所谓的分层架构,就是把系统自上而下分为多个不同的层,每一层都有特定的功能和职责,且只和自己的直接上层与直接下层 “打交道”。分层架构的优点是:每一层都有明确定义的职责,易于理解和维护;而且各层可以独立扩展,以适应不同的需求。所以分层架构也是最适合新手入门学习、并且实际开发中应用最多的架构。

2023-11-10 22:29:15 1403 2

原创 【服务发现与配置】Consul特性及搭建

虽然说牛逼的公司都有那么几个牛逼的运维团队,牛逼的运维团队都有着神秘黑科技般敲代码的姿势;本人虽然不是一个运维工程师,但是有幸自己比较爱倒腾这些东西,也会那么一点点运维知识,虽然不算专业,但是还是可以在linux平台下敲一敲代码。去年由于自己业余时间搞了一个app项目,当时自己兼任后端开发,又同时兼任运维,经过多少个夜晚才把后端API网关 搭建起来,当时技术选型主要使用微服务架构,说到微服务架构,也就少不了分布式集群,那就更少不了Consul。

2023-11-09 22:30:29 1119

原创 【管理工具】CMAK安装和使用(kafka-manager)

Java环境:需要jdk11+官网上已经提供了编译好的压缩包:cmak-3.0.0.5.zip。直接下载使用即可brokers Spread: broker 使用率,某个topic的partitions/brokersbrokers Skew:broker的分配倾斜率失衡的broker:该broker上的partition数超过平均的partition,则该broker算失衡;失衡倾斜率:失衡的broker/所有的broker添加分片:Add Partitions。

2023-11-08 21:48:06 662

原创 【配置】如何在打包Spring Boot项目时按需使用日常、测试、预发、正式环境的配置文件

在我们开发项目的时候,一般有四套环境:日常、测试、预发、正式。日常环境作为我们开发环境;测试环境给测试同学测试功能;预发环境给正式环境发布时提供准备;正式环境则是稳定的生产环境。这四套环境,数据库、中间件以及其他一些配置多多少少都有一些不同,所以如果我们只用一个application配置文件的话肯定是有问题的,一般的做法是准备4个配置文件,用来区分4个环境,每个文件填入的配置内容互不干扰,然后在项目打包的时候指定文件即可。如下图:具体做法。

2023-11-07 21:57:01 914

原创 【三方调用】如何实现异步通知的重试机制

工作中经常要和第三方做对接,比如支付、电子合同等系统。操作成功之后,第三方会发送异步的通知,返回最终的处理结果,使用异步而不是使用同步通知,是为了加快系统响应速度,防止线程阻塞。任务处理完成后通过异步的通知,发送给对应的服务端。之前对接微信支付,完成支付后,微信发送一个异步通知给服务端,服务端根据支付通知修改状态,通知规则看到以下的一段话。

2023-11-06 22:56:00 239 1

原创 【架构图解】API架构图解:如何以图表形式展现复杂系统

架构图是链接到 API 的不同组件/服务如何相互交互的直观表示。当需要理解 API 的架构并将其传达给不同的利益相关者(包括其他开发人员、项目经理和客户)时,这些图表非常有用。图表/视觉效果有多种类型,每种都有其自己的用途和优点。在本部分中,我们将探讨不同类型的图表及其用途。

2023-11-05 21:03:37 812

原创 【Shell 系列教程】Shell printf 命令( 六)

printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

2023-11-04 21:58:06 746

原创 【Shell 系列教程】shell echo 命令( 五)

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。\c” # -e 开启转义 \c 不换行。OK #标准输入。OK It is a test #输出。\n” # -e 开启转义。注意: 这里使用的是反引号 `, 而不是单引号 '。您可以使用echo实现更复杂的输出格式控制。

2023-11-04 21:45:19 248

原创 【Shell 系列教程】shell基本运算符(四)

变量 file 表示文件 /var/www/runoob/test.sh,它的大小为 100 字节,具有 rwx 权限。原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。注意:条件表达式要放在方括号之间,并且要有空格,例如: [关系运算符只支持数字,不支持字符串,除非字符串的值是数字。b] 是错误的,必须写成 [ $a == $b ]。文件测试运算符用于检测 Unix 文件的各种属性。

2023-11-04 21:36:43 248

原创 【Shell 系列教程】shell数组(三)

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。在数组前加一个感叹号!数组的键为: google ceshi taobao。数组的键为: google ceshi taobao。与大部分编程语言类似,数组元素的下标由 0 开始。-A 选项就是用于声明一个关联数组。

2023-10-30 20:34:31 207

原创 【Shell 系列教程】shell变量(二)

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。中间不能有空格,可以使用下划线 _。不能使用标点符号。不能使用bash里的关键字(可用help命令查看保留关键字)。或以上语句将 /etc 下目录的文件名循环出来。在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:数组名=(值1 值2 … 值n)例如:或者value0。

2023-10-29 21:13:54 237

原创 【Shell 系列教程】shell介绍(一)

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。Shell 在线工具。

2023-10-28 21:11:01 398

原创 【Linux】linux的shell脚本

第一行的是说明文件的类型的。第一行的/bin/bash表明该文件是一个bash程序,需要bash程序来解释执行。编辑内容中使用号进行注释。

2023-10-26 07:50:00 256

原创 【Linux】Linux中Crontab(定时任务)命令详解及使用教程

Crontab介绍:Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρ?νο?),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。当安装完成操作系统之后,默认便会启动此任务调度命令。

2023-10-24 21:17:45 6683 1

mysql数据库

MySQL是一个关系型数据库管理系统 由瑞典MySQL AB公司开发 目前属于Oracle公司 MySQL是最流行的关系型数据库管

2015-03-10

空空如也

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

TA关注的人

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