本文聊一個(gè)程序員都會(huì)關(guān)注的問題:性能。當(dāng)大家談到“性能”時(shí),你首先想到的會(huì)是什么?性能優(yōu)化是一個(gè)復(fù)雜且多面的話題,涉及到代碼的編寫、系統(tǒng)的架構(gòu)以及硬件的選擇與配置。在追求性能的旅途中,我們需要掌握的知識(shí)有很多,既有軟件方面的,也有硬件方面的,很多東西我也沒有展開詳細(xì)講,只是給大家提供了一個(gè)引子,遇到... ...
前言 觀察者(Observer)模式也稱發(fā)布-訂閱(Publish-Subscribe)模式,定義了對(duì)象間一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。 觀察者模式的圖解如下所示: Subject(目標(biāo)): 目標(biāo)知道它的觀察者??梢杂腥我舛鄠€(gè)觀察者觀察同 ...
簡介 設(shè)計(jì)模式是一種最佳實(shí)踐,是長期起來總結(jié)的解決一系列問題的一種套路。 一般針對(duì)面向?qū)ο笳Z言而言,從大型軟件架構(gòu)出發(fā),便于升級(jí)和維護(hù)的軟件設(shè)計(jì)思想,強(qiáng)調(diào)降低依賴耦合 目的:代碼重用和工程化 類型 創(chuàng)建型:創(chuàng)建對(duì)象的同時(shí)隱藏創(chuàng)建的業(yè)務(wù)邏輯 工廠模式、單例模式、建造者模式、原型模式 結(jié)構(gòu)型:將現(xiàn)有的類 ...
一、背景 周所周知,Kafka是一個(gè)非常成熟的消息產(chǎn)品,開源社區(qū)也已經(jīng)經(jīng)歷了多年的不斷迭代,特性列表更是能裝下好幾馬車,比如:冪等消息、事務(wù)支持、多副本高可用、ACL、Auto Rebalance、HW、Leader Epoch、Time Index、Producer Snapshot、Stream ...
一、定義 定義對(duì)象之間的一種一對(duì)多依賴關(guān)系,使得當(dāng)每一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),其相關(guān)依賴對(duì)象皆得到通知并被自動(dòng)更新。觀察者模式是一種行為型模式,又稱為發(fā)布-訂閱(Publish-Subscribe)模式、模型-視圖(Model-View)模式、源-監(jiān)聽器(Source-Listener)模式或從屬者( ...
策略模式在設(shè)計(jì)模式中屬于對(duì)象行為型模式,它的意圖是定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可相互替換。策略模式使得算法可獨(dú)立于使用它的客戶而變化。 ...
1. 編程語言類型:首先,Python、C/C++、Java 都是強(qiáng)類型的編程語言。強(qiáng)類型的編程語言定義如下: 強(qiáng)類型的編程語言是一種強(qiáng)制類型定義的編程語言,即一旦某一個(gè)變量被定義類型,如果不經(jīng)強(qiáng)制轉(zhuǎn)換,那么它永遠(yuǎn)就是該數(shù)據(jù)類型。而弱類型的編程語言是一種弱類型定義的編程語言,某一個(gè)變量被定義類型,該 ...
微服務(wù)架構(gòu)是一種軟件開發(fā)模式,它將一個(gè)復(fù)雜的應(yīng)用程序拆分為多個(gè)個(gè)獨(dú)立的、小型的、可復(fù)用的服務(wù),每個(gè)服務(wù)負(fù)責(zé)一個(gè)特定的業(yè)務(wù)功能。 微服務(wù)架構(gòu)有許多優(yōu)點(diǎn),例如提高系統(tǒng)的可擴(kuò)展性、可維護(hù)性、可測(cè)試性和故障容忍性。 但是,微服務(wù)架構(gòu)也有很多問題需要注意,例如如何設(shè)計(jì)合理的劃分服務(wù)接口、如何在服務(wù)間實(shí)現(xiàn)高效通 ...
要研究類加載過程,我們先要知道關(guān)于 Java 處理代碼的流程是怎么樣的。 第一步:編寫源代碼 這一步是我們最熟悉的,就是我們?cè)?idea 上寫的業(yè)務(wù)代碼,生成 Example.java 文件。 public class Example { public static void main(String ...
落地DDD是一件很困難的事情。首先在思想認(rèn)知層面就比較難以突破。這篇文章記錄我對(duì)DDD的學(xué)習(xí)、感悟與項(xiàng)目工程代碼重構(gòu)實(shí)戰(zhàn)心得! ...
一、定義 在不破壞封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài),這樣就可以在以后將對(duì)象恢復(fù)到原先保存的狀態(tài)。備忘錄模式是一種對(duì)象行為型模式,其別名為標(biāo)記(Token)模式。 二、描述 備忘錄模式的核心在于備忘錄類以及用于管理備忘錄的負(fù)責(zé)人類的設(shè)計(jì),包含以下三個(gè)角色: 1、Orig ...
1. 可演進(jìn)的API 1.1. 隨著需求的變化,你需要改變你的API,即代碼之間的共享接口 1.2. 改變API很容易,但很難做到正確 1.3. 保持API小巧 1.3.1. 小巧的API更易于理解和演進(jìn) 1.3.2. 只添加即刻需要的API方法或字段 1.3.3. 帶有許多字段的API方法應(yīng)該有合 ...
1. 行為準(zhǔn)則 2. 需求的不確定性 2.1. 不斷變化的客戶需求 2.2. 軟件項(xiàng)目無法避免的挑戰(zhàn) 2.3. 產(chǎn)品需求和環(huán)境會(huì)隨著時(shí)間的推移而改變,你的應(yīng)用程序也必須隨之改變 2.4. 不斷變化的需求會(huì)導(dǎo)致不穩(wěn)定性,使開發(fā)工作偏離軌道 2.5. 通過構(gòu)建可演進(jìn)的架構(gòu)來適應(yīng)不斷變化的需求 2.5.1 ...
一、定義 義一個(gè)對(duì)象來封裝一系列的對(duì)象交互。中介者模式使各對(duì)象不需要顯示地相互引用,從而使其耦合松散,而且可以讓你相對(duì)獨(dú)立地改變它們之間的交互。中介者模式又稱為調(diào)停模式,它是一種對(duì)象說行為型模式。 二、描述 在中介者模式中,引入了用于協(xié)調(diào)其他對(duì)象/類之間的相互調(diào)用的中介者類,為了讓系統(tǒng)具有更好的靈活 ...
面向?qū)ο缶幊淌且环N強(qiáng)大而靈活的編程范式,它可以幫助我們更好地組織和管理代碼,提高代碼的可讀性和可維護(hù)性,這使得它特別適合用在大型工程項(xiàng)目中。然而,我們也需要注意其可能帶來的問題,尤其是在并發(fā)和復(fù)雜系統(tǒng)中。 ...
本文重點(diǎn)為管道模式的抽象與應(yīng)用,上述示例僅為個(gè)人理解。實(shí)際應(yīng)用中,此案例長于應(yīng)對(duì)各種規(guī)則冗雜的業(yè)務(wù)場(chǎng)景,便于規(guī)則編排。 ...
一、定義 提供一種方法順序訪問一個(gè)聚合對(duì)象中的各個(gè)元素,且不用暴露該對(duì)象的內(nèi)部表示。迭代器模式是一種對(duì)象行為型模式,又稱為游標(biāo)(Cursor)模式。 二、描述 在軟件系統(tǒng)中,聚合對(duì)象擁有兩個(gè)職責(zé):一是存儲(chǔ)數(shù)據(jù),二是遍歷數(shù)據(jù)。從依賴性來看,前者是聚合對(duì)象的基本職責(zé),而后者既是可變化的,又是可分離的。因 ...
前言 這是第三次博客作業(yè),總結(jié)了近三次PTA大作業(yè)的完成情況,作業(yè)7、8次的大作業(yè)的小題目圍繞著HashMap、ArrayList和自定義接口來展開,大題目則是課程成績程序的第二次第三次迭代,因?yàn)榈谝淮握n程成績的程序?qū)懙慕Y(jié)構(gòu)不太好,于是重新寫的,第三次迭代并沒有拿到滿分,后面也沒有時(shí)間改了。期末考試 ...
一、前言 我們需要對(duì)4個(gè)規(guī)格的kafka能力進(jìn)行探底,即其可以承載的最大吞吐;4個(gè)規(guī)格對(duì)應(yīng)的單節(jié)點(diǎn)的配置如下: 標(biāo)準(zhǔn)版: 2C4G 鉑金版: 4C8G 專業(yè)版: 8C16G 企業(yè)版: 16C32G 另外,一般來講,在同配置下,kafka的讀性能是要優(yōu)于寫性能的,寫操作時(shí),數(shù)據(jù)要從網(wǎng)卡拷貝至堆內(nèi)存,然 ...
2.7Python(目前ArcGIS使用)代碼轉(zhuǎn)化為3.5Python(目前ArcGIS Pro使用)代碼 Analyze Tools For Pro (2to3命令) 基本操作 調(diào)用ArcToolbox的兩種形式 #arcpy.ToolboxAlias.ToolName() #arcpy.Tool ...