Skip to content

Commit

Permalink
feat(post): 完善文章
Browse files Browse the repository at this point in the history
  • Loading branch information
李济芝 committed Jul 19, 2024
1 parent f440f2f commit b0ef167
Show file tree
Hide file tree
Showing 196 changed files with 144,050 additions and 951 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ slug: "java-bugs"
> 1945年,一只小飞蛾钻进了计算机电路里,导致系统无法工作,一位名叫格蕾丝·赫柏的人把飞蛾拍死在工作日志上,写道:就是这个 bug(虫子),害我们今天的工作无法完成——于是,bug一词成了电脑系统程序的专业术语,形容那些系统中的缺陷或问题。
bug一词,是指“故障”、“缺陷”。了解软件开发的朋友都非常熟悉,程序员和测试人员更不用说,在工作中会常遇到。 作为一名开发人员,项目出现bug是避免不了的。无论你是一名初入职场的小白,还是拥有经验丰富的大佬,只要经常写代码,梳理业务逻辑,很难免不出bug。正所谓常在河边走,哪能不湿鞋。记得以前经常听人说,如果你没有把系统搞宕机过,就不是一名合格的CTO,成为一名出色的开发人员,经验都是一个一个积累起来的。

所谓的bug指的是生产环境发现的问题;那么只要线上不发现问题,那就不是bug。之所以这么讲是因为一旦影响程序的正常使用便会影响公司的利益,公司利益被影响你自己的利益也会被影响;所以为了自己写程序的时候尽量多测试,将可能会应对到的情况想得全一点,减少bug的出现。

程序员能为了减少bug的出现能做的可以从代码方面下手:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,15 +152,3 @@ slug: "clean-code"

划分代码我认为最重要的作用是使结构单一,减少代码之间的依赖性,降低耦合度,从而提高代码的可维护性。













Original file line number Diff line number Diff line change
Expand Up @@ -98,18 +98,3 @@ slug: "java-project-reconstitution"
为此必须要明确重构是经济行为而不是一种道德行为,重构使得开发效率变得更高,因此仅对必要的代码进行重构,某个工作行为如果重复三次就可以认为未来也会存在重复,因此通过重构使得下次工作更加高效,这是一种务实的作法,而重构不一定是需要大规模的展开的任务,重构应该是不断持续进行的,将任务拆解为多个具有完备性的任务,每周完成一个,每个任务的上线都不会引起问题,并使项目变得更好,这是一种持续重构的精神态度,是高效能程序员最应该具有的工作习惯。

如果你在给项目添加新的特性,发现当前的代码不能高效的完成这个任务,并且同样的任务出现三次以上,那么这时你应该先重构,再开发新特性。















Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "MQ详解"
title: "Kafka详解"
date: 2021-10-19
draft: false
tags: ["MQ","详解"]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
title: "分布式ID"
title: "分布式ID详解"
date: 2023-03-13
draft: false
tags: ["分布式"]
tags: ["分布式","详解"]
slug: "distributed-id"
---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
title: "数据结构与算法"
title: "数据结构与算法详解"
date: 2021-12-10
draft: false
tags: ["Java","算法"]
tags: ["Java","详解"]
slug: "data-structures-algorithms"
---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "Nginx介绍"
title: "Nginx入门"
date: 2021-03-04
draft: false
tags: ["使用介绍" ,"nginx"]
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "synchronized关键字详解"
title: "synchronized关键字"
date: 2024-07-11
draft: false
tags: ["Java", "关键字", "详解"]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "volatile关键字详解"
title: "volatile关键字"
date: 2024-07-11
draft: false
tags: ["Java", "关键字", "详解"]
Expand Down
4 changes: 2 additions & 2 deletions blog-site/content/posts/spring/Spring详解.md
Original file line number Diff line number Diff line change
Expand Up @@ -1631,7 +1631,7 @@ AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean
-->AbstractAdvisorAutoProxyCreator.findCandidateAdvisors
-->BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans
```
BeanFactoryAdvisorRetrievalHelper这个类是一个Spring AOP内部工具类,用来从Bean容器中获取所有Spring的Advisor Bean。
`BeanFactoryAdvisorRetrievalHelper`这个类是一个Spring AOP内部工具类,用来从Bean容器中获取所有Spring的Advisor Bean。
该工具内部使用了缓存机制,虽然公开的查找方法可能会被调用多次,但并不是每次都会真正查找,而是会利用缓存。
```java
public List<Advisor> findAdvisorBeans() {
Expand Down Expand Up @@ -2171,7 +2171,7 @@ protected Object invokeWithinTransaction(Method method, @Nullable Class<?> targe
```
`invokeWithinTransaction`方法是`TransactionInterceptor`类中的核心方法,它负责在执行目标方法时管理事务的生命周期。首先该方法通过`getTransactionAttributeSource()`获取事务属性源,进而确定当前方法是否需要事务支持。
接着根据获取的事务属性,选择合适的事务管理器,并生成一个方法标识以记录当前事务的上下文信息。在方法执行前,会检查是否需要开启新的事务,并在事务环境中执行目标方法的逻辑。
如果方法执行过程中出现异常,事务管理器会回滚事务以保证数据一致性,否则在方法执行成功后,事务管理器将提交事务。最后无论方法执行结果如何,都会清理事务相关的信息,释放资源并恢复状态,来保证事务管理的完整性和有效性
如果方法执行过程中出现异常,事务管理器会回滚事务以保证数据一致性,否则在方法执行成功后,事务管理器将提交事务。最后无论方法执行结果如何,都会清理事务相关的信息,释放资源并恢复状态,来保证事务管理的完整性和有效性

简而言之,当一个方法使用了`@Transactional`注解,在程序运行时,JVM为该Bean创建一个代理对象,并且在调用目标方法的时候进行使用`TransactionInterceptor`拦截,代理对象负责在调用目标方法之前开启事务,然后执行方法的逻辑。
方法执行成功,则提交事务,如果执行方法中出现异常,则回滚事务。同时Spring利用`ThreadLocal`会将事务资源(如数据库连接)与当前线程绑定,以确保在同一事务中共享资源,这些资源在事务提交或回滚时会被清理。
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
title: "整合支付功能"
title: "Java整合支付功能"
date: 2023-08-10
draft: false
tags: ["应用","设计"]
tags: ["应用","设计","Java","玩具"]
slug: "pay-code"
---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
title: "整合文件上传功能"
title: "Java整合文件上传功能"
date: 2023-08-11
draft: false
tags: ["应用","设计"]
tags: ["应用","设计","Java","玩具"]
slug: "uploadfile-code"
---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
title: "管道流设计模式结合业务"
title: "Java管道流设计模式结合业务"
date: 2023-06-15
draft: false
tags: ["应用","设计"]
tags: ["应用","设计","Java","玩具"]
slug: "pipeline-business"
---

Expand Down
6 changes: 3 additions & 3 deletions blog-site/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ <h2><a href='/iblog/posts/javakeyword/java-keyword-volatile/'>volatile关键字

<div class="post animated fadeInDown">
<div class="post_title">
<h2><a href='/iblog/posts/essays/java-arraylist/'>ArrayList详解</a></h2>
<h2><a href='/iblog/posts/detailed/java-arraylist/'>ArrayList详解</a></h2>
</div>

<div class="list">
Expand Down Expand Up @@ -371,7 +371,7 @@ <h2><a href='/iblog/posts/keepupd/interview-junior-javaer/'>速览Java程序员

<div class="post animated fadeInDown">
<div class="post_title">
<h2><a href='/iblog/posts/essays/sql-select-fast/'>MySQL详解</a></h2>
<h2><a href='/iblog/posts/detailed/sql-select-fast/'>MySQL详解</a></h2>
</div>

<div class="list">
Expand Down Expand Up @@ -505,7 +505,7 @@ <h2><a href='/iblog/posts/jvm/java-memory-divide/'>JVM详解</a></h2>

<div class="post animated fadeInDown">
<div class="post_title">
<h2><a href='/iblog/posts/essays/distributed-lock/'>分布式锁详解</a></h2>
<h2><a href='/iblog/posts/detailed/distributed-lock/'>分布式锁详解</a></h2>
</div>

<div class="list">
Expand Down
60 changes: 23 additions & 37 deletions blog-site/public/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
</item>
<item>
<title>ArrayList详解</title>
<link>http://localhost:1313/iblog/posts/essays/java-arraylist/</link>
<link>http://localhost:1313/iblog/posts/detailed/java-arraylist/</link>
<pubDate>Wed, 26 Jun 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/java-arraylist/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/java-arraylist/</guid>
<description>ArrayList 在List接口实现类中,最常用的就是ArrayList,ArrayList类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,可以添加或删</description>
</item>
<item>
Expand All @@ -59,9 +59,9 @@
</item>
<item>
<title>MySQL详解</title>
<link>http://localhost:1313/iblog/posts/essays/sql-select-fast/</link>
<link>http://localhost:1313/iblog/posts/detailed/sql-select-fast/</link>
<pubDate>Thu, 30 May 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/sql-select-fast/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/sql-select-fast/</guid>
<description>MySQL介绍 MySQL 是一种关系型数据库,主要用于持久化存储我们系统中的一些数据。 MySQL 如此流行的原因,主要具有下面这些优点: 成熟稳定,功能完善。 开源免费。 文档丰富,既有</description>
</item>
<item>
Expand All @@ -87,9 +87,9 @@
</item>
<item>
<title>分布式锁详解</title>
<link>http://localhost:1313/iblog/posts/essays/distributed-lock/</link>
<link>http://localhost:1313/iblog/posts/detailed/distributed-lock/</link>
<pubDate>Sat, 25 May 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/distributed-lock/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/distributed-lock/</guid>
<description>概述 在代码里面我们常用ReetrantLock、synchronized保证线程安全。通过上面的锁,在某个时刻只能保证一个线程执行锁作用域内的代码。 类似这样: public</description>
</item>
<item>
Expand Down Expand Up @@ -583,10 +583,10 @@
<description>SpringMVC SpringWebMVC是建立在Servlet API上的原始Web框架,从一开始就包含在Spring框架中。正式名称 &amp;ldquo;Spring Web MVC &amp;ldquo;来自其源模块的名称(s</description>
</item>
<item>
<title>分布式ID</title>
<link>http://localhost:1313/iblog/posts/essays/distributed-id/</link>
<title>分布式ID详解</title>
<link>http://localhost:1313/iblog/posts/detailed/distributed-id/</link>
<pubDate>Mon, 13 Mar 2023 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/distributed-id/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/distributed-id/</guid>
<description>分布式ID 在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。 但随着数据日渐增长,主从同步也扛不住了,</description>
</item>
<item>
Expand All @@ -598,9 +598,9 @@
</item>
<item>
<title>Elasticsearch详解</title>
<link>http://localhost:1313/iblog/posts/essays/elasticsearch/</link>
<link>http://localhost:1313/iblog/posts/detailed/elasticsearch/</link>
<pubDate>Tue, 14 Feb 2023 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/elasticsearch/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/elasticsearch/</guid>
<description>概览 Elasticsearch,简称为 ES, ES是一个开源的高扩展的分布式全文搜索引擎, 是整个 ElasticStack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可</description>
</item>
<item>
Expand Down Expand Up @@ -668,9 +668,9 @@
</item>
<item>
<title>MQ详解</title>
<link>http://localhost:1313/iblog/posts/essays/java-mq/</link>
<link>http://localhost:1313/iblog/posts/detailed/java-mq/</link>
<pubDate>Tue, 19 Oct 2021 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/java-mq/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/java-mq/</guid>
<description>概览 MQ 即 messagequeue 消息队列,是分布式系统的重要组件,主要解决异步消息,应用解耦,消峰等问题。从而实现高可用,高性能,可伸缩和最终一致性的架构。使用较多的MQ有:acti</description>
</item>
<item>
Expand All @@ -696,9 +696,9 @@
</item>
<item>
<title>分布式事务详解</title>
<link>http://localhost:1313/iblog/posts/essays/java-transaction/</link>
<link>http://localhost:1313/iblog/posts/detailed/java-transaction/</link>
<pubDate>Mon, 02 Aug 2021 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/java-transaction/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/java-transaction/</guid>
<description>基础概念 什么是事务 什么是事务?举个例子:你去超市买东西,&amp;ldquo;一手交钱,一手交货&amp;quot;就是一个事务的例子。 交钱和交货必须同时成功,事务才算成功,其</description>
</item>
<item>
Expand All @@ -717,9 +717,9 @@
</item>
<item>
<title>Redis详解</title>
<link>http://localhost:1313/iblog/posts/essays/java-redis/</link>
<link>http://localhost:1313/iblog/posts/detailed/java-redis/</link>
<pubDate>Thu, 17 Jun 2021 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/java-redis/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/java-redis/</guid>
<description>Redis概述 参考文章: https://www.runoob.com/redis/redis-intro.html https://www.redis.com.cn/redis-interview-questions.html 什么是Redis Redis(Remote Dictionary Server) Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,</description>
</item>
<item>
Expand All @@ -743,13 +743,6 @@
<guid>http://localhost:1313/iblog/posts/java/rookie-multi-thread/</guid>
<description>线程与进程 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。一个正在运行的程序的实例就是一个进程。 线程是操作系统能够进行运算调度的最小单位。它被包</description>
</item>
<item>
<title>HashMap详解</title>
<link>http://localhost:1313/iblog/posts/essays/java-hashmap/</link>
<pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/java-hashmap/</guid>
<description>HashMap HashMap是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap实现了Map接口,根据键的HashCode值存储数据,具有很快的访问</description>
</item>
<item>
<title>JVM中的一些概念</title>
<link>http://localhost:1313/iblog/posts/jvm/jvm-about/</link>
Expand Down Expand Up @@ -808,9 +801,9 @@
</item>
<item>
<title>Netty详解</title>
<link>http://localhost:1313/iblog/posts/essays/java-netty/</link>
<link>http://localhost:1313/iblog/posts/detailed/java-netty/</link>
<pubDate>Fri, 09 Apr 2021 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/java-netty/</guid>
<guid>http://localhost:1313/iblog/posts/detailed/java-netty/</guid>
<description>Netty 参考文章:https://dongzl.github.io/netty-handbook/#/ 概述 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers &amp;amp; clients. Netty 是一个异步的、基于事</description>
</item>
<item>
Expand Down Expand Up @@ -960,13 +953,6 @@
<guid>http://localhost:1313/iblog/posts/essays/java-thread-collection/</guid>
<description>Java中常用线程安全的集合 在多线程环境中,数据的一致性和线程的安全性是至关重要的。传统的集合类,如ArrayList、HashMap和HashSet,在并发访</description>
</item>
<item>
<title>CAS详解</title>
<link>http://localhost:1313/iblog/posts/essays/cas-detail/</link>
<pubDate>Sat, 04 Apr 2020 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/essays/cas-detail/</guid>
<description>CAS CAS全称为Compare and Swap被译为比较并交换,是一种无锁算法。用于实现并发编程中的原子操作。CAS操作检查某个变量是否与预期的值相同,如果相同则将其更</description>
</item>
<item>
<title>SpringBoot整合Redis</title>
<link>http://localhost:1313/iblog/posts/spring/springboot-redis/</link>
Expand Down Expand Up @@ -1060,16 +1046,16 @@
</item>
<item>
<title></title>
<link>http://localhost:1313/iblog/posts/javakeyword/static%E5%85%B3%E9%94%AE%E5%AD%97%E8%AF%A6%E8%A7%A3/</link>
<link>http://localhost:1313/iblog/posts/javakeyword/static%E5%85%B3%E9%94%AE%E5%AD%97/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/javakeyword/static%E5%85%B3%E9%94%AE%E5%AD%97%E8%AF%A6%E8%A7%A3/</guid>
<guid>http://localhost:1313/iblog/posts/javakeyword/static%E5%85%B3%E9%94%AE%E5%AD%97/</guid>
<description></description>
</item>
<item>
<title></title>
<link>http://localhost:1313/iblog/posts/javakeyword/strictfp%E5%85%B3%E9%94%AE%E5%AD%97%E8%AF%A6%E8%A7%A3/</link>
<link>http://localhost:1313/iblog/posts/javakeyword/strictfp%E5%85%B3%E9%94%AE%E5%AD%97/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/javakeyword/strictfp%E5%85%B3%E9%94%AE%E5%AD%97%E8%AF%A6%E8%A7%A3/</guid>
<guid>http://localhost:1313/iblog/posts/javakeyword/strictfp%E5%85%B3%E9%94%AE%E5%AD%97/</guid>
<description></description>
</item>
<item>
Expand Down
Loading

0 comments on commit b0ef167

Please sign in to comment.