主頁 > 軟體設計 > 視覺slam學習筆記以及課后習題《第二講三維物體剛體運動》

視覺slam學習筆記以及課后習題《第二講三維物體剛體運動》

2021-10-06 08:52:35 軟體設計

前言

這篇博客主要記錄了我在深藍學院視覺slam課程中的課后習題,因為是為了統計知識點來方便自己以后查閱,所以有部分知識可能不太嚴謹,如果給大家造成了困擾請見諒,大家發現了問題也可以私信或者評論給我及時改正,歡迎大家一起探討,其他章節的筆記和作業可以在我的首頁中查找對應文章,

整個作業的代碼和檔案都可以參考我的GitHub存盤庫https://github.com/1481588643/vslam.git

一.熟悉 Eigen 矩陣運算 (2 分,約 2 小時)

Eigenhttp://eigen.tuxfamily.org是常用的 C++ 矩陣運算庫,具有很高的運算效率,大部分需要在 C++ 中使用矩陣運算的庫,都會選用 Eigen 作為基本代數庫,例如 Google TensorflowGoogle CeresGTSAM 等,本次習題,你需要使用 Eigen 庫,撰寫程式,求解一個線性方程組,為此,你需要先了解一些有關線性方程組數值解法的原理,

設線性方程 Ax = b,在 A 為方陣的前提下,請回答以下問題:

1.在什么條件下,x 有解且唯一?

答:當A為方陣且A可逆(即A滿秩),x有解且唯一

2.高斯消元法的原理是什么?

答:高斯消元法(Gaussian elimination)是求解線性方程組的一種演算法,它也可用來求矩陣的秩,以及求可逆方陣的逆矩陣,它通過逐步消除未知數來將原始線性系統轉化為另一個更簡單的等價的系統,

原理:通過初等行變化將線性方程組的增廣矩陣轉化為行階梯矩陣(上三角或下三角矩陣),通過初等行變換把A編程階梯矩陣求解

求解程序

1.構造增廣矩陣,即系數矩陣A增加上常數向量b(A|b).

2.通過以交換行、某行乘以非負常數和兩行相加這三種初等變化將原系統轉化為更簡單的三角形式(**triangular form**) 注:這里的初等變化可以通過系數矩陣A乘上初等矩陣E來實作,

從而得到簡化的三角方陣組,這樣就容易解了

3.最后再使用向后替換演算法(Algorithm for Back Substitution)求解得,

3.QR 分解的原理是什么?

答: 將A分解成正交矩陣和上三角矩陣的乘積A=QR,易解Ra=Q^Tb
原理:利用2個正交矩陣的乘積一定是正交矩陣,正交矩陣的逆矩陣也是正交矩陣的特點,對正交矩陣進行多次分解,相乘,QR分解的原理主要是把矩陣分解成一個列向量正交矩陣與一個上三角矩陣的跡,原理是將矩陣每個列作為一個基本單元,將其化為正交的基向量,與在這個基向量上的投影長度的QR分解,經常用來解決最小回歸問題,也是特征值演算法QR演算法的基礎,

求解程序:

1.對需要求解的特征值的矩陣A進行QR分解;

2.對分解出來的結果進行逆向相乘;

3.將相乘得到的矩陣進行QR分解;

4.對分解出來的結果進行逆向相乘;

4.Cholesky 分解的原理是什么?

答:

定義:如果矩陣A為n階對稱正定矩陣,則存在一個對角元素為正數的下三角實矩陣L,使得:\(A=LL^T\),當限定L的對角元素為正時,這種分解是唯一的,稱為Cholesky分解,
cholesky分解是把一個對稱正定的矩陣表示成一個下三角矩陣L和其轉置的乘積的分解,它要求矩陣的所有特征值必須大于零,故分解的下三角的對角元也是大于零的,Cholesky分解法又稱平方根法,是當A為實對稱正定矩陣時,LU三角分解法的變形

5.編程實作 A 為 100 × 100 隨機矩陣時,用 QR Cholesky 分解求 x 的程式,你可以參考本次課用到的 useEigen 例程,

提示:你可能需要參考相關的數學書籍或文章,請善用搜索引擎,Eigen 固定大小矩陣最大支持到 50 所以你會用到動態大小的矩陣,

#include<iostream>
#include<Eigen/Core>
#include<Eigen/Dense>
using namespace Eigen;
using namespace std;
int size=100;

int main(int argc, char const *argv[])
{

Matrix<double, Dynamic, Dynamic>A;
A=MatrixXd::Random(size,size);
A=A*A.transpose();
 Matrix<double, Dynamic, 1> B;
B=MatrixXd::Random(size,1);
Matrix<double,Dynamic,1>X;
X=A.colPivHouseholderQr().solve(B);
     cout<<"QR:X="<<X.transpose()<<endl;
     X=A.ldlt().solve(B);
     cout<<"CHOLESKY:X="<<X.transpose()<<endl;
 //    Eigen::MatrixXd A=MatrixXd::Random()
     return 0;
}


二.矩陣論基礎 分,約 2 小時)

除了我們本科學過的基礎線性代數之外,大部分研究生課程還會開設矩陣論課程,以作為對本科階段 知識的擴充,對于很多線性問題(SLAM 里也會碰到許多線性問題),了解一些矩陣論基礎知識是很有好處的,我們在附件中為大家提供了張賢達老師的《矩陣分析與應用》,請參考該書內容(或者你能找到的其 他書籍,回答以下問題,

1.什么是正定矩陣和半正定矩陣?

答:給定一個n乘以n的實對稱矩陣A,若對于任意長度為 n 的非零向量 x,有 x的轉置乘以A再乘以x恒大于0,則矩陣 A 是一個正定矩陣,

給定一個n乘以n的實對稱矩陣A,若對于任意長度為 n 的非零向量 x,有 x的轉置乘以A再乘以x恒大于等于0,則矩陣 A 是一個正定矩陣,

2.對于方陣 A,它的特征值是什么?特征向量是什么?特征值一定是實數嗎?如何計算一個矩陣的特征值?

答:設A為n階實方陣,如果存在某個數 及某個n維非零列向量,使得,則稱是方陣A的一個特征值,是方陣A的屬于特征值的一個特征向量,

設A為n階實方陣, 為一個引數,稱n階方陣為A的特征方陣,它的行列式稱為A的特征多項式,把稱為A的特征方程,把特征方程或特征多項式的根稱為A的特征根,

特征值不一定是實數,也可能是虛數,

3.什么是矩陣的相似性?相似性反映了什么幾何意義?

答:線性代數中,相似矩陣(英語:similar matrix)是指存在相似關系的矩陣,相似關系是兩個矩陣之間的一種等價關系,兩個n×n矩陣A與B為相似矩陣當且僅當存在一個n×n的可逆矩陣P,使得:{P^{-1}AP=B}

P被稱為矩陣A與B之間的相似變換矩陣,

相似的矩陣是同一個線性變換在不同基/坐標系下的的不同描述,
線性變換若粗略看成一個剛體的特定運動,剛體的特定運動是同一個,但坐標系改變的話這個運動的描述函式就會不一樣,如果這個函式可用矩陣等價替代的話,一個坐標系就對應著一個矩陣,因此這些矩陣就不同,但這些矩陣必有關系,這個關系就是相似,

4.矩陣一定能對角化嗎?什么樣的矩陣能保證對角化?不能對角化的矩陣能夠形成什么樣的形式Jor- dan 標準形

答:矩陣不一定能對角化,n階方陣可對角化的充分必要條件是它有n個線性無關的特征向量不能對角化的矩陣一定具有多重特征值,對于不能對角化的矩陣也希望找到某種標準形式,使之盡量接近對角化的形式——Jordan標準形,

5.奇異值分解(SVD)是什么意思?

答:奇異值分解(SVD)是一種用于將矩陣歸約成其組成部分的矩陣分解方法,以使后面的某些矩陣計算更簡單,

X=UΣV?,X=UΣV?,
其中U是m×m階酉矩陣;Σ是m×n階非負實數對角矩陣;而V*,即V的共軛轉置,是n×n階酉矩陣,這樣的分解就稱作X的奇異值分解

6.矩陣的偽逆是什么意思Pseudo inverse?莫爾——彭多斯逆是如何定義的?怎么計算一個矩陣的偽逆?

答:對于矩陣A,如果存在一個矩陣B,使得AB=BA=I,其中I為與A,B同維數的單位陣,就稱A為可逆矩陣(或者稱A可逆),并稱B是A的逆矩陣,簡稱逆陣,(此時的逆稱為凱利逆)矩陣A可逆的充分必要條件是|A|≠0,奇異矩陣陣或非方陣的矩陣不存在逆矩陣,但可以用函式pinv(A)求其偽逆矩陣,基本語法為X=pinv(A),X=pinv(A,tol),其中tol為誤差:max(size(A))*norm(A)*eps,函式回傳一個與A的轉置矩陣A'同型的矩陣X,并且滿足:AXA=A,XAX=X.此時,稱矩陣X為矩陣A的偽逆,也稱為廣義逆矩陣,pinv(A)具有inv(A)的部分特性,但不與inv(A)完全等同,

設 A∈Cm*n,若存在矩陣G∈Cn*m(C為復數域),使得
(1) AGA = A;
(2) GAG = G;
(3) (AG)H = AG;
(4) (GA)H = GA;
則稱 G 為 A 的Moore-Penrose廣義逆或加號廣義逆,簡稱為A的M-P逆,A的任意M-P逆記為A+,

7. 對于超定方程:Ax = b A 不可逆時,我們通常計算最小二乘解:x = arg minx

Ax ? b ,線性方程的最小二乘解在代數意義上是可以決議地寫出來的,請回答以下小問題:

7.1b ?= 0 時,x 的解是什么形式?事實上,我們可以對 A 求奇異值或對于 ATA 求特征值,請闡述兩者之間的關系,

答:對于超定方程Ax = 0的解就是 ATA 最小特征值對應的特征向量,

簡單的講 所有的矩陣都可以進行奇異值分解,不管其是否是方陣以及對稱矩陣,當所給的矩陣是對稱的方陣,A(T)=A,二者的結果是相同的,也就是說對稱矩陣的特征值分解是所有奇異值分解的一個特例,

但是二者還是存在一些小的差異,奇異值分解需要對奇異值從大到小的排序,而且全部是大于等于零,

特征值用來描述方陣,可看做是從一個空間到自身的映射,這也表現在了名字eigenvalue中,奇異值可以描述長方陣或奇異矩陣,可看做是從一個空間到另一個空間的映射,

7.2 b = 0 時,我們希望求 x 的非零解,請說明如何求解 x

答:對于超定方程Ax = 0的解就是 ATA 最小特征值對應的特征向量,

7.3 請談談你對上述解法在幾何意義上的理解,該問題為開放問題,

答:首先考慮一個簡單的超定方程組

該方程組的右端向量是三維向量,系數矩陣的每一列也是三維向量,但待求的未知向量卻是二維向量,將系數矩陣按列分塊,G =[a1,a2],記右端向量為b,則方程組求解問題可表示為求組合系數x和y使

xa1 + ya2 = b

的向量的線性組合問題,由于兩個向量a1,a2不構成三維空間的一組基,所以一般情況下這一問題無解,而由向量a1,a2張成的子空間span{a1,a2}是一張平面,記為p,則超定方程組的最小二乘解實際上是求X*,使GX* 恰好等于b 在平面p上的投影,而最小二乘解所對應的殘差向量則垂直于向量GX*,事實上,由正規方程組

GTGX=GTb

GT (b –GX * ) = 0

上式的幾何意義可解釋為:最小二乘解的殘差向量與超定方程組的系數矩陣G的所有列向量正交,從而

(X*)T GT (b –GX * ) = 0

所以

(GX *,b –GX * ) = 0

三.幾何運算練習 (2 分,約 1 小時)

下面我們來練習如何使用 Eigen/Geometry 計算一個具體的例子,

一個機器人上通常會安裝許多不同的傳感器,而 這些傳感器之間還存在固連關系,我們舉一個典型的例子,

在世界系 W 下,存在一個運動的機器人 R,按照固定的或者某些開發人員或者領導的特殊喜好,R 系定義在機器人腳部的位置,但是機器人在設計的時候,又定義了 B Body 系,或本體系,位于機器人頭部的位置,由于溝通不暢,標定人員把一臺激光傳感器和一臺視覺傳感器標定在了 B 系下,我們稱激光傳感器為 L 系,視覺傳感器為 C 系,現在請你完成以下作業:

  1. 說明一個激光傳感器下的看到的點應該如何計算它的世界坐標,

2. 取:qW R = [0.55, 0.3, 0.2, 0.2], tW R = [0.1, 0.2, 0.3]T qRB = [0.99, 0, 0, 0.01], tRB = [0.05, 0, 0.5]T

qBL = [0.3, 0.5, 0, 20.1], tBL = [0.4, 0, 0.5]T , qBC = [0.8, 0.2, 0.1, 0.1], tBC = [0.5, 0.1, 0.5]T ,現在假

設相機傳感器觀察到自身坐標系下的點 [0.3, 0.2, 1.2],請計算:

(a)這個點在激光系下的坐標; (b)這個點在世界系下的坐標,

提示:

  1. 本題的資料是隨意取的,沒有真實意義,產生什么結果都不要奇怪,
  2. 四元數在使用前需要歸一化,
  3. 請注意 Eigen 在使用四元數時的虛部和實部順序,

PS:注意這道題的坐標變換公式,要理清給的轉換矩陣是那個坐標系到哪個坐標系的轉換矩陣,比如T_WR就是機器人到世界坐標系下的轉換矩陣,如果我知道一個在機器人坐標系下的點P_R,那么在世界坐標系下該點的坐標就是T_WR*P_R.

這道題給出的公式是這個點在激光系下的坐標為:P_L=T_BL.inverse()*T_BC*P_C

在世界坐標系下的轉換公式為:P_W=T_WR*T_RB*T_BC*P_C

#include <iostream>

using namespace std;

#include <Eigen/Core>
#include <Eigen/Geometry>

using namespace Eigen;

int main(int argc, char ** argv){

    //創建視覺傳感器和激光傳感器的四元數
    Quaterniond q_BL(0.3, 0.5, 0,20.1), q_BC(0.8, 0.2, 0.1, 0.1);
    //四元數歸一化
    q_BC.normalize();
    q_BL.normalize();

    //平移向量t1和t2
    Vector3d t_BL(0.4, 0, 0.5), t_BC(0.5, 0.1, 0.5);
    //p1坐標
    Vector3d p1(0.3, 0.2, 1.2);

    //變換矩陣Tc1w和Tc2w
    Isometry3d T_BL(q_BL), T_BC(q_BC);
    T_BL.pretranslate(t_BL);
    T_BC.pretranslate(t_BC);

    //計算p2
    Vector3d p2 = T_BL.inverse()*T_BC*p1;
    cout <<"這個點在激光系下的坐標"<< p2.transpose() << endl;
       Vector3d p23= T_BL*T_BC.inverse()*p1;
    cout <<"這個點在激光系下的坐標"<< p23.transpose() << endl;

  //創建世界系和機器人本體的四元數
    Quaterniond q3(0.55, 0.3, 0.2,0.2), q4(0.99, 0, 0, 0.01);
    //四元數歸一化
    q3.normalize();
    q4.normalize();

    //平移向量t3和t4
    Vector3d t3(0.1, 0.2, 0.3), t4(0.05, 0, 0.5);


    //變換矩陣Tc3w和Tc4w
    Isometry3d Tc3w(q3), Tc4w(q4);
    Tc3w.pretranslate(t3);
    Tc4w.pretranslate(t4);

    //計算p3
    Vector3d p3 = Tc4w*Tc3w*Tc*p1;
    cout <<"這個點在世界系下的坐標"<< p3.transpose() << endl;


    return 0;
                                                                                                                                                                                          49,1         頂端

四.旋轉的表達 2 分,約 1 小時)

1.

2.答:ε的維度是3,η的維度是1.

3.

五.羅德里格斯公式的證明 (1 分,約 1 小時)

羅德里格斯公式描述了從旋轉向量到旋轉矩陣的轉換關系,設旋轉向量長度為 θ,方向為 n,那么旋轉矩陣 R 為:

R = cos θI + (1 ? cos θ)nnT + sin θn. (4)

1.我們在課程中僅指出了該式成立,但沒有給出證明,請你證明此式,提示:參考https://en.wikipedia. org/wiki/Rodrigues%27_rotation_formula

2.請使用此式請明 R?1 = RT

六.四元數運算性質的驗證 (1 分,約 1 小時)

七.*熟悉c++

第15行:使用了初始化串列來初始化物件: C++11 把初始化串列的概念系結到了型別上,并將其稱之為 std::initializer_list,允許建構式或其他函式像引數一樣使用初始化串列,這就為類物件的初始化與普通陣列和 POD 的初始化方法提供了統一的橋梁,

第16行:使用了lambda運算式來比較元素大小,其中:const A&a1, const A&a2是引數串列,return a1.index<a2.index;是函式體,回傳值是布爾型的大小比較結果,

第17行:用auto關鍵字實作了自動型別推導,讓編譯器自動設定變數a的型別;

第17行:C++引入了基于范圍的for回圈,不用下標就能訪問元素;

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/305735.html

標籤:其他

上一篇:在堆區開辟記憶體(動態記憶體的開辟)

下一篇:半夜三點,去醫院看病。。。

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more