2020-01-12-ARTS-一月第二周


layout: post
title: ARTS-2020一月第二周
subtitle: 一月第二周ARTS
date: 2020-01-12
author: Mayday
header-img: img/post-bg-hacker.jpg
catalog: true
tags:
- ARTS計劃


一肩豁、Algorithm

本周算法完成如下:

1.1 題目來源【Leetcode[1071】

1.2 題目描述

對于字符串 S 和 T昔馋,只有在 S = T + ... + T(T 與自身連接 1 次或多次)時,我們才認(rèn)定 “T 能除盡 S”叉瘩。

返回字符串 X,要求滿足 X 能除盡 str1 且 X 能除盡 str2络它。

示例 1:

輸入:str1 = "ABCABC", str2 = "ABC"
輸出:"ABC"

示例 2:

輸入:str1 = "ABABAB", str2 = "ABAB"
輸出:"AB"

示例 3:

輸入:str1 = "LEET", str2 = "CODE"
輸出:""

 

提示:

    1 <= str1.length <= 1000
    1 <= str2.length <= 1000
    str1[i] 和 str2[i] 為大寫英文字母

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/greatest-common-divisor-of-strings
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有诉瓦。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處殿怜。

1.3 解題過程

package cn.mayday.algorithms.day20200113;

/**
 * 字符串的最大公因子
 * <p>
 * 題目總結(jié):
 * 1、考查內(nèi)容為 輾轉(zhuǎn)相除大法
 * 2. 理解題目中除盡的含義
 * <p>
 * 解題思路中總結(jié):
 * 1曙砂、根據(jù)題目头谜,如果存在最大公約數(shù),那么str1+str2 = str2+str1
 * 2鸠澈、根據(jù)輾轉(zhuǎn)相除法求得兩個字符串長度的最大公約數(shù)
 * 3柱告、截取字符串
 *
 * @author Mayday05
 * @date 2020/1/13 14:14
 */
public class Leetcode1071GcdOfStrings {

    public static void main(String[] args) {
        Leetcode1071GcdOfStrings object = new Leetcode1071GcdOfStrings();
        // test1
        System.out.println(object.gcdOfStrings("ABCABC","ABC"));
        // test2
        System.out.println(object.gcdOfStrings("ABABAB","ABAB"));
        // test3
        System.out.println(object.gcdOfStrings("LEET","CODE"));

    }

    public String gcdOfStrings(String str1, String str2) {
        if (str1 == null || str2 == null) {
            return null;
        }
        if (!(str1 + str2).equals(str2 + str1)) {
            return "";
        }
        return str1.substring(0, gcd(str1.length(), str2.length()));
    }

    /**
     * 使用“輾轉(zhuǎn)相除法”計算兩個字符串長度的最大公約數(shù)
     * <p>
     * 歐幾里德算法又稱輾轉(zhuǎn)相除法砖织,是指用于計算兩個正整數(shù)a,b的最大公約數(shù)末荐。
     * 應(yīng)用領(lǐng)域有數(shù)學(xué)和計算機(jī)兩個方面侧纯。計算公式gcd(a,b) = gcd(b,a mod b)。
     *
     * @param length1
     * @param length2
     * @return
     */
    private int gcd(int length1, int length2) {
        if (length1 == 0) {
            return length2;
        }
        if (length2 == 0) {
            return length1;
        }
        return gcd(length2, length1 % length2);
    }
}

1.4 題目總結(jié)

這道題考核對最大公約數(shù)的理解甲脏,歸根到底為輾轉(zhuǎn)相除大法

解題思路中總結(jié):

  1眶熬、根據(jù)題目,如果存在最大公約數(shù)块请,那么str1+str2 = str2+str1
  2娜氏、根據(jù)輾轉(zhuǎn)相除法求得兩個字符串長度的最大公約數(shù)
  3、截取字符串
  使用“輾轉(zhuǎn)相除法”計算兩個字符串長度的最大公約數(shù)
  <p>
  歐幾里德算法又稱輾轉(zhuǎn)相除法墩新,是指用于計算兩個正整數(shù)a贸弥,b的最大公約數(shù)。
  應(yīng)用領(lǐng)域有數(shù)學(xué)和計算機(jī)兩個方面海渊。計算公式gcd(a,b) = gcd(b,a mod b)绵疲。

二、Review

2.1 文章內(nèi)容

翻譯源 Spring Boot Actuator: Health check, Auditing, Metrics gathering and Monitoring

閱讀相關(guān)官方文檔臣疑,學(xué)習(xí)SpringBoot-Actuator的使用盔憨。

三、Tip

生產(chǎn)系統(tǒng)中讯沈,往往需要對系統(tǒng)實際運行的情況(例如cpu郁岩、io、disk缺狠、db问慎、業(yè)務(wù)功能等指標(biāo))進(jìn)行監(jiān)控運維。在SpringBoot項目中Actuator模塊提供了眾多HTTP接口端點(Endpoint)挤茄,來提供應(yīng)用程序運行時的內(nèi)部狀態(tài)信息如叼。

Actuator模塊提供了一個監(jiān)控和管理生產(chǎn)環(huán)境的模塊,可以使用http驮樊、jmx薇正、ssh、telnet等來管理和監(jiān)控應(yīng)用囚衔。包括應(yīng)用的審計(Auditing)、健康(health)狀態(tài)信息雕沿、數(shù)據(jù)采集(metrics gathering)統(tǒng)計等監(jiān)控運維的功能练湿。同時,提供了可以擴(kuò)展 Actuator端點(Endpoint)自定義監(jiān)控指標(biāo)审轮。這些指標(biāo)都是以JSON接口數(shù)據(jù)的方式呈現(xiàn)肥哎。

SpringBoot的Actuator模塊實現(xiàn)了應(yīng)用的監(jiān)控與管理辽俗,本周學(xué)習(xí)梳理了SpringBoot的Actuator模塊使用。

詳細(xì)總結(jié)內(nèi)容移步個人總結(jié)博文SpringBoot之Actuator篡诽。

Endpoints列表如下:

Endpoint ID Description
auditevents 顯示應(yīng)用暴露的審計事件 (比如認(rèn)證進(jìn)入崖飘、訂單失敗)
info 顯示應(yīng)用的基本信息
health 顯示應(yīng)用的健康狀態(tài)
metrics 顯示應(yīng)用多樣的度量信息
loggers 顯示和修改配置的loggers
logfile 返回log file中的內(nèi)容(如果logging.file或者logging.path被設(shè)置)
httptrace 顯示HTTP足跡,最近100個HTTP request/repsponse
env 顯示當(dāng)前的環(huán)境特性
flyway 顯示數(shù)據(jù)庫遷移路徑的詳細(xì)信息
liquidbase 顯示Liquibase 數(shù)據(jù)庫遷移的纖細(xì)信息
shutdown 讓你逐步關(guān)閉應(yīng)用
mappings 顯示所有的@RequestMapping路徑
scheduledtasks 顯示應(yīng)用中的調(diào)度任務(wù)
threaddump 執(zhí)行一個線程dump
heapdump 返回一個GZip壓縮的JVM堆dump

3.1 附 官方學(xué)習(xí)文檔

1杈女、Spring Boot Actuator: Production-ready Features 見 https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints

Spring Boot Actuator: Production-ready Features 見 https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints

2朱浴、Micrometer: Spring Boot 2’s new application metrics collector

3.2 附:用戶案例地址

1、github地址actuator-demo

四达椰、Share

4.1 share內(nèi)容

本周分享內(nèi)容為關(guān)于常用消息中間件面對消息堆積的處理能力理解翰蠢。詳細(xì)分享見個人總結(jié)博客文章《精進(jìn)消息中間件原理系列(一):之消息堆積》

部分總結(jié)如下:

4.2 延伸一:為什么說RabbitMQ啰劲,對消息堆積的支持并不好梁沧?

而RabbitMQ在介紹優(yōu)缺點時,消息堆積作為缺點之一:

RabbitMQ 對消息堆積的支持并不好蝇裤,在它的設(shè)計理念里面廷支,消息隊列是一個管道,大量的消息積壓是一種不正常的情況栓辜,應(yīng)當(dāng)盡量去避免酥泞。當(dāng)大量消息積壓的時候,會導(dǎo)致 RabbitMQ 的性能急劇下降

4.2.1 從存儲模型來理解

關(guān)于消息隊列對于消息堆積的堆積能力啃憎,還需要從消息隊列的存儲模型來分析:

  • 1芝囤、 RabbitMQ:內(nèi)存、磁盤都保存辛萍,消息保存到內(nèi)存中悯姊,通過鏡像隊列保證HA,通過磁盤存儲保證持久化贩毕。但由于內(nèi)存隊列中需要保存所有完整的消息本地悯许,因此當(dāng)消息堆積太多時,會使得內(nèi)存空間不可用辉阶,嚴(yán)重可能內(nèi)存溢出先壕,服務(wù)宕機(jī)。

? -----即 內(nèi)存谆甜、磁盤垃僚,支持少量堆積

  • 2、 RocketMQ:消息持久化保存到磁盤中规辱,且消費隊列本身不保存消息本地谆棺,保存消息磁盤索引,通過FileChannel的MMAP機(jī)制實現(xiàn)內(nèi)存映射罕袋,處理消息時能達(dá)到基本和內(nèi)存相同的效率改淑。設(shè)置同步復(fù)制和同步刷盤即可保存消息不丟失碍岔。

? -----即 磁盤+內(nèi)存映射技術(shù),支持大量堆積朵夏“玻【磁盤空間還是足夠富裕的】

  • 3、 Kafka:同RocketMQ仰猖。

附:RocketMQ存儲模型圖如下:

img

image.png

4.3 如何預(yù)防消息堆積

在消息的收發(fā)兩端捏肢,我們的業(yè)務(wù)代碼怎么和消息隊列配合,達(dá)到一個最佳的性能亮元。

4.3.1猛计、發(fā)送端性能優(yōu)化

從消息堆積若干原因來看,消息堆積的原因主要在消費端處理上爆捞,本身生產(chǎn)者端應(yīng)該遵循的原則應(yīng)該是盡可能快的將消息發(fā)送到Broker中去奉瘤,因此發(fā)送端除了業(yè)務(wù)處理時批量發(fā)送暫無好的手段優(yōu)化,而且并不是所有的業(yè)務(wù)處理都支持批量發(fā)送和批量接收處理煮甥。

發(fā)送端業(yè)務(wù)代碼的處理性能盗温,實際上和消息隊列的關(guān)系不大,因為一般發(fā)送端都是先執(zhí)行自己的業(yè)務(wù)邏輯成肘,最后再發(fā)送消息卖局。如果說,你的代碼發(fā)送消息的性能上不去双霍,你需要優(yōu)先檢查一下砚偶,是不是發(fā)消息之前的業(yè)務(wù)邏輯耗時太多導(dǎo)致的。

  • 批量發(fā)送是發(fā)送端預(yù)防消息堆積的方式之一洒闸。

4.3.2染坯、消費端性能優(yōu)化

在設(shè)計系統(tǒng)的時候,一定要保證消費端的消費性能要高于生產(chǎn)端的發(fā)送性能丘逸,這樣的系統(tǒng)才能健康的持續(xù)運行单鹿。

  • 方式1 增加單個消費者處理能力

    增加單個消費者的處理能力這塊沒有絕對的辦法,只能盡可能的優(yōu)化消息處理業(yè)務(wù)邏輯的能力深纲,減少不必要的非業(yè)務(wù)相關(guān)處理時間消耗仲锄;如果消息處理業(yè)務(wù)已經(jīng)優(yōu)化到無法再優(yōu)化了,那只能通過方式2水平擴(kuò)展消費者個數(shù)來優(yōu)化湃鹊。

  • 注意:部分同學(xué)采用在業(yè)務(wù)處理OnMessage時儒喊,先將消息保存到內(nèi)存隊列中,再開啟線程池并發(fā)處理內(nèi)存隊列緩存消息這種方式(即通過內(nèi)存隊列增加一個異步環(huán)節(jié))-----這種方式存在丟消息的風(fēng)險涛舍,如果消費節(jié)點宕機(jī)澄惊,內(nèi)存隊列中的消息直接丟失。慎用這種方式富雅。

  • 方式2 水平擴(kuò)容消費者個數(shù)

消費端的性能優(yōu)化除了優(yōu)化消費業(yè)務(wù)邏輯以外掸驱,也可以通過水平擴(kuò)容,增加消費端的并發(fā)數(shù)來提升總體的消費性能没佑。

注意:水平擴(kuò)容是應(yīng)保證 擴(kuò)容后消費者個數(shù)<=分區(qū)或者隊列個數(shù)

反過來毕贼,即如果擴(kuò)容后消費者個數(shù)超過分區(qū)或者隊列個數(shù)后,再擴(kuò)容已經(jīng)沒有意義蛤奢。---因為單個消費隊列同一時間內(nèi)只能被一個消費者消費鬼癣,再多的消費者也沒有用。

此時啤贩,需要在Broker中同步增加分區(qū)或者隊列個數(shù)待秃,擴(kuò)容消費者才有意義。

補充:Kafka中叫分區(qū)Partition痹屹,RocketMQ和RabbitMQ中叫隊列Queue

4.4 消息已經(jīng)堆積章郁,如何快速處理

如果消息已經(jīng)堆積了,線上如何快速處理志衍。對于系統(tǒng)發(fā)生消息積壓的情況暖庄,需要先解決積壓,再分析原因楼肪,畢竟保證系統(tǒng)的可用性是首先要解決的問題培廓。

快速解決積壓的方法就是通過水平擴(kuò)容增加 Consumer 的實例數(shù)量,以及其他方式如下春叫。

  • 1肩钠、消費端擴(kuò)容;--通用方式
  • 2暂殖、服務(wù)降級价匠;--快速失敗,不一定適用所有業(yè)務(wù)場景
  • 3央星、異常監(jiān)控霞怀。--屬于運維層面措施

---至此結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末莉给,一起剝皮案震驚了整個濱河市毙石,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颓遏,老刑警劉巖徐矩,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叁幢,居然都是意外死亡滤灯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳞骤,“玉大人窒百,你說我怎么就攤上這事≡ゾ。” “怎么了篙梢?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長美旧。 經(jīng)常有香客問我渤滞,道長,這世上最難降的妖魔是什么榴嗅? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任妄呕,我火速辦了婚禮,結(jié)果婚禮上嗽测,老公的妹妹穿的比我還像新娘绪励。我一直安慰自己,他們只是感情好论咏,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布优炬。 她就那樣靜靜地躺著,像睡著了一般厅贪。 火紅的嫁衣襯著肌膚如雪蠢护。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天养涮,我揣著相機(jī)與錄音葵硕,去河邊找鬼。 笑死贯吓,一個胖子當(dāng)著我的面吹牛懈凹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悄谐,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼介评,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爬舰?” 一聲冷哼從身側(cè)響起们陆,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎情屹,沒想到半個月后坪仇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡垃你,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年椅文,在試婚紗的時候發(fā)現(xiàn)自己被綠了喂很。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡皆刺,死狀恐怖少辣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芹橡,我是刑警寧澤毒坛,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布望伦,位于F島的核電站林说,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屯伞。R本人自食惡果不足惜腿箩,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劣摇。 院中可真熱鬧珠移,春花似錦、人聲如沸末融。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勾习。三九已至浓瞪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巧婶,已是汗流浹背乾颁。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留艺栈,地道東北人英岭。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像湿右,于是被迫代替她去往敵國和親诅妹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350