Skip to content

Commit 032c87d

Browse files
Auto-update blog content
1 parent 0e16902 commit 032c87d

File tree

70 files changed

+29256
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+29256
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
layout: post
3+
title: "Eigen的内存对齐"
4+
date: 2024-02-20T20:35:59+0800
5+
description: "项目经验分享:实际项目中发现使用Eigen的一些段错误问题,文章总结了一些解决方案."
6+
keywords: "eigen 内存对齐"
7+
categories: ['未分类']
8+
tags: ['算法']
9+
artid: "136198319"
10+
arturl: "https://blog.csdn.net/qq_20604231/article/details/136198319"
11+
image:
12+
path: https://api.vvhan.com/api/bing?rand=sj&artid=136198319
13+
alt: "Eigen的内存对齐"
14+
render_with_liquid: false
15+
featuredImage: https://bing.ee123.net/img/rand?artid=136198319
16+
featuredImagePreview: https://bing.ee123.net/img/rand?artid=136198319
17+
cover: https://bing.ee123.net/img/rand?artid=136198319
18+
img: https://bing.ee123.net/img/rand?artid=136198319
19+
---
20+
21+
22+
23+
# Eigen的内存对齐
24+
25+
26+
27+
## 0. Eigen的内存对齐
28+
29+
Eigen使用了内存对齐以实现计算加速,目前遇到过以下问题:
30+
31+
* Eigen的断言报错,如`data is not aligned`
32+
* 直接段错误异常退出
33+
34+
## 1. 解决方法
35+
36+
### 1.1 使用Release编译模式和屏蔽架构优化
37+
38+
[G2O的仓库issue](https://github.com/RainerKuemmerle/g2o/issues/250)中提到了以下两个要点:
39+
40+
* 使用`Release`模式进行编译:无论是编译第三库(如G2O)还是引用该库的应用程序,建议在CMakeLists.txt中注明为`Release`模式
41+
* 如CMakeLists.txt中使用了架构优化`-march=native`,务必**去掉**!
42+
43+
具体CMakeLists.txt可如下填写
44+
45+
```CMake
46+
set(CMAKE_BUILD_TYPE Release)
47+
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
48+
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
49+
50+
```
51+
52+
[视觉SLAM十四讲第二版实践操作遇到的问题](https://blog.csdn.net/chenlin41204050/article/details/104753483)也佐证了需要使用Release版本
53+
54+
### 1.2 C++编译器版本
55+
56+
有几篇博客均提到编译器的版本会影响Eigen的编译,因此尽可能使用新版本的编译器如C++17
57+
58+
[Explanation of the assertion on unaligned arrays](http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html):
59+
60+
> There are 4 known causes for this issue. If you can target [c++17] only with a recent compiler (e.g., GCC>=7, clang>=5, MSVC>=19.12), then you’re lucky: enabling c++17 should be enough (if not, please report to us).
61+
62+
### 1.3 代码层面对Eigen的使用
63+
64+
如有下面几种情况请注意:
65+
66+
* 包含Eigen对象的结构体:将`EIGEN_MAKE_ALIGNED_OPERATOR_NEW`宏放在类的公共部分
67+
* STL容器或手动内存分配:为容器提供Eigen的内存分配器
68+
69+
```C++
70+
//下面的容易导致内存不对齐而出错:
71+
std::map<int, Eigen::Vector4d>
72+
//应向STL提供内存分配器:
73+
std::map<int, Eigen::Vector4d, std::less<int>,
74+
Eigen::aligned_allocator<std::pair<const int, Eigen::Vector4d>>>
75+
76+
77+
```
78+
79+
* 按值传递Eigen对象:应该改用 **引用** 传递
80+
* 使用了全局或静态的 Eigen 对象: Eigen官方不建议使用 全局或静态 对象,它的内存对齐操作更多在 堆内存 中使用
81+
82+
详看下面两篇文章:
83+
84+
1. [Eigen中文版文档](https://blog.csdn.net/maizousidemao/article/details/130298557)
85+
2. [Explanation of the assertion on unaligned arrays](http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html)
86+
87+
### 1.4 终极武器
88+
89+
禁用内存对齐!
90+
非迫不得已尽可能不要使用,因为禁用内存对齐将大大降低性能,具体做法自行百度
91+
92+
93+
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
---
2+
layout: post
3+
title: "Dubbo如何处理业务异常,这个一定要知道哦"
4+
date: 2024-04-01T19:49:54+0800
5+
description: "文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!"
6+
keywords: "dubbo runtimeexception"
7+
categories: ['未分类']
8+
tags: ['Dubbo']
9+
artid: "137244520"
10+
arturl: "https://blog.csdn.net/2303_77877769/article/details/137244520"
11+
image:
12+
path: https://api.vvhan.com/api/bing?rand=sj&artid=137244520
13+
alt: "Dubbo如何处理业务异常,这个一定要知道哦"
14+
render_with_liquid: false
15+
featuredImage: https://bing.ee123.net/img/rand?artid=137244520
16+
featuredImagePreview: https://bing.ee123.net/img/rand?artid=137244520
17+
cover: https://bing.ee123.net/img/rand?artid=137244520
18+
img: https://bing.ee123.net/img/rand?artid=137244520
19+
---
20+
21+
22+
23+
# Dubbo如何处理业务异常,这个一定要知道哦!
24+
25+
26+
27+
28+
部署运行你感兴趣的模型镜像一键部署
29+
30+
![](https://i-blog.csdnimg.cn/blog_migrate/19565844bed1d0e7fc22e0ddd318c1e6.png)
31+
32+
运行,输入不存在的goodsID,**我们期望我们自定义的异常类被我们拦截到,并做一些处理;但是provider生产端抛给消费者的异常竟然是RuntimeException**,只是里面的message是我们的业务异常调用栈信息。如下:
33+
34+
![](https://i-blog.csdnimg.cn/blog_migrate/4151e2559e4049cb8fd2177ccc60bc1c.png)
35+
36+
不是我们希望的抛给消费者端是DataNotFoundException异常。导致我们消费端没法针对不同的业务进行不同的处理。消费端做了SpringMVC的异常处理返回了:
37+
38+
![](https://i-blog.csdnimg.cn/blog_migrate/ff49f36653444122adba40bbb281150b.png)
39+
40+
上面的code为1401,是系统异常编码,并不是DataNotFoundException编码。
41+
42+
**我们定义的DataNotFoundException的编码为:1001**
43+
44+
##### 为什么产生
45+
46+
我们来看看dubbo的源码进行分析,如果Dubbo的 **provider端** 抛出异常(Throwable),则会被 provider端 的ExceptionFilter拦截到,执行以下invoke方法,**里面有个实现Listener类,重写了onResponse。**
47+
48+
![](https://i-blog.csdnimg.cn/blog_migrate/1ccfb471abedd6ddd7a5c0d84c6ea105.png)
49+
50+
我们来分析一些代码:
51+
52+
if (appResponse.hasException() && GenericService.class != invoker.getInterface())
53+
54+
上面代码的含义就是 **如果有异常并且未实现GenericService接口**,进入后续判断逻辑,否则直接返回结果。
55+
56+
![](https://i-blog.csdnimg.cn/blog_migrate/9b6a747d7d0e95b5e6b08e18cc323c7b.png)
57+
58+
上面代码的含义就是 **不是RuntimeException类型的异常,并且是受检异常(继承Exception),直接抛出。**
59+
60+
![](https://i-blog.csdnimg.cn/blog_migrate/2783e50f25d536c2641d2d10bcda2c0f.png)
61+
62+
上面代码的含义就是 **在方法签名上有声明,直接抛出。**
63+
![](https://i-blog.csdnimg.cn/blog_migrate/ae4f53fdca28c3c0dc846319b5fb92aa.png)
64+
65+
上面代码的含义就是 **如果异常类和接口类在同一个jar包中,直接抛出。**
66+
![](https://i-blog.csdnimg.cn/blog_migrate/ce754aebee944218ea333498768c50f8.png)
67+
68+
上面代码的含义就是 **以java.或javax.开头的异常直接抛出。**
69+
![](https://i-blog.csdnimg.cn/blog_migrate/33e06d098197fc260985999dc4f4c4be.png)
70+
71+
上面代码的含义就是**dubbo自身的异常,直接抛出。**
72+
![](https://i-blog.csdnimg.cn/blog_migrate/eb84b46480d4bf978adfc2bb39aff40c.png)
73+
74+
**不满足上述条件,会做toString处理并被封装成RuntimeException抛出。**
75+
76+
现在我们知道了 **为什么我们自定义的异常,没有正确的抛出,**这个是因为上面的几个条件,我们都没有满足,**所以最后dubbo把它封装成了RuntimeException。**
77+
78+
##### 如何解决
79+
80+
解决方法就针对上面的几个条件进行,有几种方案,我们一一看一下:
81+
82+
**1、将该异常的包名以java.或者javax.开头**
83+
84+
这个方案不现实,也不符合规范,所以不采用
85+
86+
**2、业务异常继承Exception,变为checked异常**
87+
88+
自定义的业务异常本身属于RuntimeException,所以也不采用
89+
90+
**3、异常类和接口类在同一jar包里**
91+
92+
较大的项目一般都会有一些common包,定义好异常类型,使用二方包的方式引用,所以也不适用
93+
94+
**4、provider的api明确写明throws XxxException**
95+
96+
作为生产服务端,不应显式抛出异常给客户的进行处理,所以也不适用
97+
98+
##### 最终方案
99+
100+
以上方案都不合适,我们这里介绍个最终的方案,即采用dubbo的filter重写,dubbo的异常处理。
101+
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
102+
103+
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
104+
105+
**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**![img](https://i-blog.csdnimg.cn/blog_migrate/1a802cfb89e3a93f465545dbcaedc37a.jpeg)
106+
107+
![](https://i-blog.csdnimg.cn/blog_migrate/abf065c07db5b79b9ba207abc1af6190.png)
108+
109+
![](https://i-blog.csdnimg.cn/blog_migrate/af86072c49fe36cc17a2e60a3a59e807.png)
110+
111+
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**
112+
113+
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
114+
115+
**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)**
116+
117+
![img](https://i-blog.csdnimg.cn/blog_migrate/e29ef6314a664bb828ff75e493db0934.jpeg)
118+
119+
#### 最后
120+
121+
**文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。**
122+
123+
**《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》****[点击传送门即可获取!](https://bbs.csdn.net/topics/618164986)**
124+
125+
**《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》****[点击传送门即可获取!](https://bbs.csdn.net/topics/618164986)**
126+
127+
您可能感兴趣的与本文相关的镜像
128+
129+
![Stable-Diffusion-3.5](https://csdn-665-inscode.s3.cn-north-1.jdcloud-oss.com/image/cover/gpu_img_stable-diffusion_3_5_fp8.png/middle)
130+
131+
Stable-Diffusion-3.5
132+
133+
图片生成
134+
135+
Stable-Diffusion
136+
137+
Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率
138+
139+
一键部署运行
140+
141+
142+
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
layout: post
3+
title: "Dubbo分布式服务框架"
4+
date: 2025-06-21T23:47:00+0800
5+
description: "本文从多个方面详细阐述了Dubbo分布式服务框架的优势和应用场景,重申了引言中的目的和重要性。Dubbo作为一款优秀的分布式服务框架,具备高度的可扩展性、出色的性能以及完善的服务治理功能,为企业构建高可用、高性能、可扩展的分布式系统提供了有力支持。在未来的发展中,Dubbo有望在更多领域发挥重要作用。优化性能:针对特定场景,如高并发、大数据量等,对Dubbo的性能进行优化。扩展功能:继续丰富Dubbo的功能,如支持更多协议、提供更完善的监控等。社区建设。"
6+
keywords: "服务间通信分布式框架"
7+
categories: ['未分类']
8+
tags: ['人工智能']
9+
artid: "148818315"
10+
arturl: "https://blog.csdn.net/2501_92489105/article/details/148818315"
11+
image:
12+
path: https://api.vvhan.com/api/bing?rand=sj&artid=148818315
13+
alt: "Dubbo分布式服务框架"
14+
render_with_liquid: false
15+
featuredImage: https://bing.ee123.net/img/rand?artid=148818315
16+
featuredImagePreview: https://bing.ee123.net/img/rand?artid=148818315
17+
cover: https://bing.ee123.net/img/rand?artid=148818315
18+
img: https://bing.ee123.net/img/rand?artid=148818315
19+
---
20+
21+
22+
23+
# Dubbo分布式服务框架
24+
25+
在当今互联网时代,分布式系统已成为企业构建高可用、高性能、可扩展架构的必要选择。作为一款优秀的分布式服务框架,Dubbo凭借其出色的性能和灵活的架构,成为了众多开发者的首选。本文将从多个方面详细阐述Dubbo分布式服务框架的优势和应用,以期为读者提供有价值的信息。
26+
27+
![](https://i-blog.csdnimg.cn/img_convert/8ba4b798dc27d9752aac6f4b4a61afb2.png)
28+
29+
#### 一、架构特点
30+
31+
Dubbo的架构设计充分考虑了分布式系统的需求,具有以下几个显著特点:
32+
33+
1. **分层架构**:Dubbo将服务提供者、服务消费者、注册中心等多个角色分层设计,降低了系统间的耦合度,提高了系统的稳定性。
34+
2. **高度可扩展**:Dubbo支持多种协议,如HTTP、Dubbo、RMI等,同时支持多种序列化方式,如Java序列化、JSON序列化等,使得系统具备良好的可扩展性。
35+
36+
![](https://i-blog.csdnimg.cn/img_convert/eee892d57a36707986551bffdf888871.png)
37+
38+
#### 二、性能优势
39+
40+
Dubbo在性能方面具有以下几个优势:
41+
42+
1. **高并发处理**:Dubbo采用Netty作为底层通讯框架,支持异步调用,能够有效应对高并发场景。
43+
2. **负载均衡**:Dubbo内置多种负载均衡策略,如随机、轮询、最小活跃数等,可以根据实际情况选择合适的策略,提高系统性能。
44+
45+
![](https://i-blog.csdnimg.cn/img_convert/d861ec592741e06dbb4a6958d226953b.png)
46+
47+
#### 三、服务治理
48+
49+
Dubbo在服务治理方面具有以下几个特点:
50+
51+
1. **服务注册与发现**:Dubbo通过注册中心实现服务的注册与发现,使得服务提供者和服务消费者之间能够自动建立连接。
52+
53+
![](https://i-blog.csdnimg.cn/img_convert/8766f5ef6682c1499032500715985559.png)
54+
2. **服务监控**:Dubbo提供了完善的服务监控功能,包括服务调用次数、成功率、耗时等,便于开发者了解系统运行状况。
55+
56+
#### 四、应用场景
57+
58+
Dubbo广泛应用于以下几种场景:
59+
60+
1. **微服务架构**:在微服务架构中,Dubbo可以作为服务框架,实现各个服务之间的通信。
61+
2. **分布式系统**:在分布式系统中,Dubbo能够有效地将各个子系统整合在一起,提高系统的稳定性和可扩展性。
62+
63+
![](https://i-blog.csdnimg.cn/img_convert/84756e4a740cd92690c0b368e86745e7.png)
64+
65+
#### 五、与其它框架的对比
66+
67+
与其他分布式服务框架相比,Dubbo具有以下优势:
68+
69+
1. **社区活跃**:Dubbo拥有庞大的开发者社区,能够及时解决开发者遇到的问题。
70+
2. **功能丰富**:Dubbo提供了丰富的功能,如服务治理、负载均衡、服务监控等,满足了开发者多样化的需求。
71+
72+
#### 总结
73+
74+
本文从多个方面详细阐述了Dubbo分布式服务框架的优势和应用场景,重申了引言中的目的和重要性。Dubbo作为一款优秀的分布式服务框架,具备高度的可扩展性、出色的性能以及完善的服务治理功能,为企业构建高可用、高性能、可扩展的分布式系统提供了有力支持。在未来的发展中,Dubbo有望在更多领域发挥重要作用。
75+
76+
![](https://i-blog.csdnimg.cn/img_convert/6f1d13985f097497f9a38c4ad3a4989f.png)
77+
78+
以下是针对Dubbo的一些建议和未来研究方向:
79+
80+
1. **优化性能**:针对特定场景,如高并发、大数据量等,对Dubbo的性能进行优化。
81+
2. **扩展功能**:继续丰富Dubbo的功能,如支持更多协议、提供更完善的监控等。
82+
3. **社区建设**:加强社区建设,提高开发者参与度,促进Dubbo的持续发展。
83+
4. **与其他框架的融合**:探索与其他分布式服务框架的融合,实现优势互补,为企业提供更全面的解决方案。
84+
85+
86+

0 commit comments

Comments
 (0)