Doris實戰——美聯物業數倉

目錄

一、背景

1.1 企業背景

1.2?面臨的問題

二、早期架構

三、新數倉架構

3.1 技術選型

3.2?運行架構

3.2.1 數據模型

?縱向分域

橫向分層

數據同步策略

3.2.2 數據同步策略

?增量策略

全量策略

四、應用實踐

4.1?業務模型

4.2?具體應用

五、實踐經驗

5.1?數據導入

5.2?數據模型

5.3?查詢優化—前綴索引

5.4?外部數據源讀取

5.5?數據字典

六、架構收益

七、生產問題

? 原文大佬的這篇Doris數倉的實戰文章寫的挺全面(跟本人目前所負責的數倉項目,有些分析場景 很相似),這里直接摘抄下來用作學習和知識沉淀。

一、背景

1.1 企業背景

? ? ?傳統行業面對數字化轉型往往會遇到很多困難,比如缺乏數據管理體系、數據需求開發流程冗長、煙囪式開發、過于依賴紙質化辦公等,美聯物業也有遇到類似的問題。本文主要介紹關于美聯物業在數據體系方面的建設,以及對數據倉庫搭建經驗進行的分享和介紹,旨在為數據量不大的傳統企業提供一些數倉思路,實現數據驅動業務,低成本、高效的進行數倉改造。

1.2?面臨的問題

? ? 美聯物業早在十多年前就已深入各城市開展房地產中介業務,數據體系的建設和發展與大多數傳統服務型公司類似。

? ? ?我們的數據來源于大大小小的子業務系統和部門手工報表數據等,存在歷史存量數據龐大,數據結構多樣復雜,數據質量差等普遍性問題。此外,早期業務邏輯處理多數是使用關系型數據庫 SQL Server 的存儲過程來實現,當業務流程稍作變更,就需要投入大量精力排查存儲過程并進行修改,使用及維護成本都比較高。

? 基于此背景,我們面臨的挑戰可以大致歸納為以下幾點:

?(1)缺乏數據管理體系,數據無法降本復用:多部門、多系統、多字段,命名隨意、表違反范式結構混亂;對同一業務來源數據無法做到多份報表復用,反復在不同報表編寫同一套計算邏輯。

(2)歷史大多數業務數據存儲在關系型數據庫中,分表分庫已無法做到上億數據秒級分析查詢。

(3)數據需求開發流程冗長、煙囪式開發。每當業務部門提出一個數據需求,數據開發就需要在多個系統之間進行數據兼容編寫存儲過程,從而導致存儲過程的可移植性和可讀性都非常差。

(4)部門之間嚴重依賴文本文檔的處理工作,效率低下。

二、早期架構

? ?針對上述的幾個需求,我們在平臺建設的初期選?了 Hadoop、Hive、Spark 構建最初的離線數倉架構,也是比較普遍、常見的架構,運作原理不進行過多贅述。

? ?我們數據體系主要服務對象以內部員工為主,如房產經紀人、后勤人員、行政人事、計算機部門等。當前數據體系無需面向 C 端用戶,因此在數據計算和資源方面的壓力并不大,早期基于 Hadoop 的架構可以滿足一部分基本的需求。但是隨著業務的不斷發展、內部人員對于數據分析的復雜性、分析的效率也越來越高,該架構的弊端日益越發的明顯,主要體現為以下幾點:

(1)傳統數據架構組件繁多,維護復雜,運維難度非常高。

(2)數據處理鏈路過長,導致查詢延遲變高

(3)數據時效性低:只可滿足T+1的數據需求,導致數據分析效率低下

(4)傳統公司的計算量和數據量不大,搭建Hadoop生態組件顯得殺雞用牛刀。

三、新數倉架構

? ?基于上述業務需求及痛點,我們開始了架構升級,并希望在這次升級中實現幾個目標:

  • 初步建立數據管理體系,搭建數據倉庫。

  • 搭建報表平臺和報表快速開發流程體系。

  • 實現數據需求能夠快速反應和交付(1小時內),查詢延遲不超過 10s。

  • 最小成本原則構建架構,支持滾動擴容。

3.1 技術選型

? ? 經過調研了解以及朋友推薦,了解到了Doris ,并很快與社區取得了聯系,Doris的優勢如下:

(1)極速性能

? ? Doris 依托于列式存儲引擎、自動分區分桶、向量計算、多表Join能力強悍和物化視圖等功能的實現,可以覆蓋眾多場景的查詢優化,海量數據也能可以保證低延遲查詢,實現分鐘級或秒級響應。

(2)極低成本

? ? ?降本提效已經成為現如今企業發展的常態,免費的開源軟件就比較滿足我們的條件,另外基于 Doris 極簡的架構、語言的兼容、豐富的生態等,為我們節省了不少的資源和人力的投入。并且 Doris 支持 PB 級別的存儲和分析,對于存量歷史數據較大、增量數據較少的公司來說,僅用 5-8 個節點就足以支撐上線使用。

(3)足夠簡單

? ??美聯物業及大部分傳統公司的數據人員除了需要完成數據開發工作之外,還需要兼顧運維和架構規劃的工作。因此我們選擇數倉組件的第一原則就是"簡單",簡單主要包括兩個方面:

  • 架構簡單:Doris 的組件架構由 FE+BE 兩類進程組成,不依賴其他系統,整體架構簡潔易用,極簡運維,彈性伸縮.

  • 使用簡單:Apache Doris 兼容 MySQL 協議,支持標準 SQL,有利于開發效率和共識統一,此外,Doris 的 ETL 編寫腳本主要使用 SQL進行開發,使用 MySQL 協議登陸使用,兼容多數 MySQL 語法,提供豐富的數據分析函數,省去了 UDF 開發工作。

3.2?運行架構

? ? 在對Doris性能檢測之后,我們完全摒棄了之前使用 Hadoop、Hive、Spark 體系建立的數倉,決定基于Doris 對架構進行重構,以 Doris 作為數倉底座進行開發,實現存,算統一。

  • 數據集成:利用?DataX、Flink CDC 和Doris 的 Multi Catalog 功能等進行數據集成。
  • 數據管理:利用 Apache Dolphinscheduler 進行腳本開發的生命周期管理、多租戶人員的權限管理、數據質量校驗等。

  • 監控告警:采用 Grafana + Prometheus進行監控告警,Doris 的各項監控指標可以在上面運行,解決了對組件資源和日志的監控問題。

  • 數據服務:使用帆軟 Report 為用戶提供數據查詢和分析服務,帆軟支持表單制作和數據填報等功能,支持自助取數和自助分析。

3.2.1 數據模型

?縱向分域

? ? 房地產中介行業的大數據主題大致如下,一般會根據這些主題進行數倉建模。建模主題域核心圍繞"企業用戶"、"客戶"、"房源"、"組織"等幾個業務實體展開,進行維度表和事實表的設計。

? ?我們從前線到后勤,對業務數據總線進行了梳理,旨在整理業務實體和業務活動相關數據,如多個系統之間存在同一個業務實體,應統一為一個字段梳理業務總線有助于掌握公司整體數據結構,便于維度建模等工作。

? ?下圖為我們簡單的梳理部分房地產中介行業的業務總線:

橫向分層

? ?數據分層采用傳統數倉最常見的 5 層結構(ods, dwd,dim,dws,ads),主要是利用 Apache Doris + Apache DolphinScheduler 進行層級數據之間的調度任務編排和管理。

數據同步策略

? 我們在8點到24點之間采用增量策略,0點到8點執行全量策略,采用增量+全量的方式是考慮到:當ODS表因為記錄的歷史狀態字段變更或者CDC出現數據未完全同步的情況下,可以及時進行全量補數和修正歷史狀態變化數據

層級備注存儲策略
ODS利用datax doris write進行數據的本地導入要注意參數設置exec_mem_limit參數大小,部分全量數據較大超過限制會導致stream load 失敗8點到24點增量策略;0點到8點全量策略一次
DWD部分事實表涉及緩慢變化維,需要進行拉鏈存儲8點到24點增量策略;0點到8點全量策略一次,部分表拉鏈存儲
DWS和ADS注意數據校驗問題,加入審計時間,如etl_time,last_etl_time,create_time等字段,方便后續故障排查8點到24點增量策略;0點到8點全量策略一次
DIM維度表存放層,如客戶,房源,職員,職級,崗位等每小時整點全量

3.2.2 數據同步策略

?增量策略

1)where >= "業務時間-1天或-1小時"

? ? ?增量的 SQL 語句不使用where ="業務時間當天"的原因是為了避免數據漂移情況發生,換言之,調度腳本之間存在時間差,如 23:58:00 執行了腳本,腳本的執行周期是10 分鐘/次,但是源庫中最后一條數據是在23:59:00才新增的,真正這時候where="業務時間當天"就會將該數據漏掉。

2)每次跑增量腳本前,需要將表中最大的主鍵ID存入輔助表,where >= "輔助表記錄ID"

? ? 如果 Doris 表使用的是 Unique Key 模型,且恰好為組合主鍵,當主鍵組合在源表發生了變化,這時候where >=" 業務時間-1天"會記錄該變化,把主鍵發生變化的數據 Load 進來,從而造成數據重復。而使用這種自增策略可有效避免該情況發生,且自增策略只適用于源表自帶業務自增主鍵的情況。

3)表分區

? ?例如日志表等基于時間的自增數據,且歷史數據和狀態基本不會變更,數據量非常大,全量或快照計算壓力非常大的場景,這種場景需要對 Doris 表進行建表分區,每次增量進行分區替換操作即可,同時需要注意數據漂移情況。

全量策略

1)Truncate Table清空表插入

? ? ? ?如果是面向C端用戶的公司和白天調度時間千萬別這么做,否則會導致一段時間沒有數據,Truncate Table適合數據量較小的表,凌晨沒有用戶使用系統的公司。

2)ALTER TABLE tbl1 REPLACE WITH TABLE tbl2??表替換

? ? 這種方式是一種原子操作,適合數據量大的全量表。每次執行腳本前先 Create 一張數據結構相同的臨時表,把全量數據 Load 到臨時表,再執行表替換操作,可以進行無縫銜接。

四、應用實踐

4.1?業務模型

  • 業務模型是最常見的分鐘級調度ETL
  • 離線數據利用DataX批量同步,通過Flink CDC將RDS的數據實時同步到Doris,利用Doris的物化視圖或者Aggregate模型表進行實時匯總處理。
  • 所有層級表模型大部分采用Unique key主鍵模型,可以有效保證數據腳本的冪等性,解決下游數據重復的問題
  • ETL腳本通過Dolphinscheduler(簡稱DS)進行編排和統一調度
  • 帆軟BI進行自助取數和分析

部署建議

  • 初次部署建議配置:8 節點 2FE * 8BE 混合部署

  • 節點配置:32C * 60GB * 2TB SSD

  • 對于存量數據TB級、增量數據GB級的場景完全夠用,如有需要可以進行滾動擴容。

4.2?具體應用

? ? 1)離線業務數據和日志數據集成利用 DataX 進行增量和全量調度,Datax支持CSV格式和多種關系型數據庫的Redear,而 Doris 在很早之前就提供了 DataX Doris writer 連接器。

? ?2)實時部分借助了Flink CDC將RDS的數據實時同步到Doris,利用Doris的物化視圖或者Aggregate模型表進行實時指標的匯總處理,因為我們只有部分指標需要實時處理,不希望產生過多的數據庫連接和 Flink Job,因此我們使用Dinky的多源合并和整庫同步功能,也可以自己簡單實現一個Flink DataStream 多源合并任務,只通過一個 Job 可對多個 CDC 源表進行維護。值得一提的是, Flink CDC 和 Apache Doris 新版本支持 Schema Change 實時同步,在成本允許的前提下,可完全使用 CDC 的方式對 ODS 層進行改造。

EXECUTE CDCSOURCE demo_doris WITH ('connector' = 'mysql-cdc','hostname' = '127.0.0.1','port' = '3306','username' = 'root','password' = '123456','checkpoint' = '10000','scan.startup.mode' = 'initial','parallelism' = '1','table-name' = 'ods.ods_*,ods.ods_*','sink.connector' = 'doris','sink.fenodes' = '127.0.0.1:8030','sink.username' = 'root','sink.password' = '123456','sink.doris.batch.size' = '1000','sink.sink.max-retries' = '1','sink.sink.batch.interval' = '60000','sink.sink.db' = 'test','sink.sink.properties.format' ='json','sink.sink.properties.read_json_by_line' ='true','sink.table.identifier' = '${schemaName}.${tableName}','sink.sink.label-prefix' = '${schemaName}_${tableName}_1'
);

3) 腳本語言采用shell+sql或純sql的形式,我們在Apache DolphinScheduler上進行腳本生命周期管理和發布,如ODS層,可以編寫通用的DataX Job 文件,通過傳參的方式將DataX Job 文件傳參執行源表導入,無需在每一個源表編寫不同的DataX Job,支持統一配置參數和代碼內容,維護起來非常方便。另外我們在 DolphinScheduler上對 Doris 的 ETL 腳本進行管理,還可以進行版本控制,能有效控制生產環境錯誤的發生,進行及時回滾。

4)?發布 ETL 腳本后導入數據,可直接在帆軟 Report 進行頁面制作。基于登陸賬號來控制頁面權限,如需控制行級別、字段級別權限,可以制作全局字典,利用 SQL 方式進行控制。Doris 完全支持對賬號的庫表權限控制,這一點和 MySQL 的設置完全一樣,使用起來非常便捷。

? 在新的架構體系,新增的數據需求直接利用帆軟BI進行自助取數和分析,最快可在當天響應交付

? ?除以上之外,還可以利用 Doris備份實現容災恢復、Grafana + Prometheus對集群進行指標規則監控告警、開啟 Doris審計日志對執行 SQL 效率進行監控等,慢查詢定位及優化等,因篇幅限制,此處不進行詳細說明。

五、實踐經驗

5.1?數據導入

? 我們使用 DataX進行離線數據導入,DataX 采用的是 Stream Load方式導入,該方式可以通過參數控制導入批次流量,DataX導入不需要借助計算引擎,開箱即用的特點非常方便。另外,Stream Load導入是同步返回結果,而其他導入方式一般是異步返回結果。

? ? 在數據導入方式上,大部分返回結果是異步操作,即在Doris里該導入任務狀態有可能是失敗的,而Dolphinscheduler會誤以為該腳本已經執行成功,因此在bash等腳本里執行Doris的導入操作邏輯時,還需要判斷上游任務狀態是否成功,可以在腳本里執行show load,再用正則去過濾狀態進行判斷。

5.2?數據模型

? ?所有層級表模型大部分采用Unique key主鍵模型,可以有效保證數據腳本的冪等性,解決下游數據重復的問題。

5.3?查詢優化—前綴索引

? ? 盡量把非字符類型的,如int類型的、where條件中最常用的字段放前排36個字節內,在點查場景下,過濾這些字段返回的結果基本可在毫秒級別實現。

5.4?外部數據源讀取

? ?Catalog 方式:使用 JDBC 外表連接,對 Doris生產集群數據進行讀取,便于生產數據直接 Load 進測試服務器進行測試。另外,新版支持多數據源的Catalog,可以基于 Catalog 對 ODS 層進行改造,無需使用 DataX 對ODS 進行導入。

? ?但這種方式對FE節點的壓力會很大,在導入過程中可明顯觀察FE節點CPU資源被拉滿,如果Fe資源并不充足的情況下,建議選擇Stream load的方式進行數據導入,如Datax。

5.5?數據字典

? ? ?利用Doris自帶的information_schema元數據可以制作簡單的數據字典,這一點對公司還未建立數據治理體系前是非常重要的一步,方便低成本管理數倉人員的操作規范。

利用 Doris自帶的information_schema元數據制作簡單的數據字典,利用數據字典可快速對表格和字段的全局查找和釋義,這一點對公司還未建立數據治理體系前是非常重要的一步,最低成本形成數倉人員的數據規范,減少人員溝通成本,提高開發效率。

六、架構收益

? ?引入?Doris 之后,美聯物業實現了只用少數服務器、快速搭建一套數據倉庫,成功實現降本賦能。在這段時間的運行中,給我們帶來的部分收益如下:

  • 自動取數導數:數據倉庫的明細表可以定時進行取數、導數,自助組合維度進行分析。
  • 效率提升:T+1 的離線任務,時效降低至分鐘級。

  • 查詢延遲降低:面對上億行數據的表,利用Doris在索引和點查方面的能力,即席查詢延遲平均在1秒內,復雜查詢也能5秒內響應。

  • 運維成本降低:從數據集成到數據服務,只需維護少數組件就可以實現整個鏈路的高效管理。

  • 存儲資源節省:Doris 超高的壓縮比,將數據壓縮了70%,相較于 Hadoop 來說,存儲資源的消耗大幅降低。

  • 數據管理體系初步形成:Doris 數倉的實現使得數據資產得以規范化的沉淀。

七、生產問題

  • 內存一直不釋放

? ? ?Doris的BE節點在舊版本是開啟PageCache 和 ChunkAllocator 的,目的是為了減少查詢的延遲,這兩個功能會占用一定比例的內存,并且一直不會釋放,長此以往就會導致be計算資源越來越緊張。新版本直接禁用了這兩個配置,但美聯物業數倉是開啟了這2項配置,并且每天凌晨進行be滾動重啟的,既能保證be內存及時釋放,也能降低查詢延遲。

  • 數據備份

? ? ?目前Doris的備份依賴Broker load,只能基于BOS、HDFS 等文件系統,對于沒有安裝HDFS這類的服務器基本用不了。

參考文章:

Apache Doris 在美聯物業的數據倉庫應用實踐,助力傳統行業數字化革新|應用實踐

美聯物業基于Apache Doris數倉實踐

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715687.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715687.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715687.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄算法訓練營|day45

第九章 動態規劃 322.零錢兌換279.完全平方數代碼隨想錄文章詳解總結 322.零錢兌換 dp[i]表示湊成i所需的最少零錢個數 (1)先遍歷物品,后遍歷背包 func coinChange(coins []int, amount int) int {maxAmount : amount 1dp : make([]int, amount1)for i : 0; i &l…

下載github項目到pycharm

一、下載git 1.下載git鏈接 https://git-scm.com/ 2.一路點擊next,最后finish 二、使用git 1.安裝成功后在開始菜單欄會找到如下內容,其中常用的是Git Bash 2.點擊Git Bash 3.這里就可以克隆github上的代碼了 點擊復制,在命令行輸入…

C#判斷DataTable1 A列的集合是否為DataTable2 B列的集合的子集

DataSet ds2 (DataSet)res2.Anything; // 檢查 集合B是否為集合A的子集 var table1MaterialCodes ds.Tables[2].AsEnumerable().Select(row > row["Code"]).ToList(); //DataSet1 表Code列集合A var table2MaterialCodes ds2.Tables[0].AsEnumerable().Selec…

2024免費mac蘋果電腦的清理和維護軟件CleanMyMac X

對于 Mac 用戶來說,電腦的清理和維護是一件讓人頭疼的事情。但是,有了 CleanMyMac X,這一切都將變得輕松愉快。CleanMyMac X 是一款專為 Mac 設計的電腦清理軟件,它以其強大的功能和簡單的操作,讓無數用戶為之傾倒。 C…

艾爾登法環備份存檔方法

1.PC端使用WinR輸入%AppData%\EldenRing 2.如圖創建文件夾“我這取名叫備份存檔”,將其中的三個文件復制到新建的文件夾中 3.理論上只需要備份替換ER0000.sl2文件即可

【雙指針】合并兩個有序數組O(N)

合并兩個有序數組 鏈接 . - 力扣(LeetCode). - 備戰技術面試?力扣提供海量技術面試資源,幫助你高效提升編程技能,輕松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/merge-sorted-array/ 題目 題解 采用雙指針…

青少年CTF擂臺挑戰賽 2024 #Round 1 Web方向題解 WP 全

EasyMD5 題目描述:php沒有難題 考點總結:腦洞題目,不如我出(狗頭 只允許兩個都上傳pdf文件。 文件還不能太大了。burp多次發包發現要求兩個pdf內容不一樣 不一樣時候,提示我們MD5碰撞。 科學計數法繞過 PHP的后門 …

把Anaconda添加進環境變量的方法(解決pip識別不到環境的問題)

找到你的Anaconda的安裝根目錄 比如我的是在:C:\ProgramData\Anaconda3 那么只需要將以下目錄添加進環境變量即可: C:\ProgramData\Anaconda3C:\ProgramData\Anaconda3\ScriptsC:\ProgramData\Anaconda3\Library\binC:\ProgramData\Anaconda3\condabin…

吳恩達deeplearning.ai:通過偏差與方差進行診斷

以下內容有任何不理解可以翻看我之前的博客哦:吳恩達deeplearning.ai專欄 文章目錄 偏差與方差高偏差高方差合適的模型理解偏差與方差 總結 當你構建神經網絡的時候,幾乎沒有人能夠在一開始就將神經系統構建得十分完美。因此構建神經網絡最重要的是直到…

Vue2實現tab切換

Vue2實現tab切換 以下代碼實現了一個tab切換的功能&#xff0c;點擊不同的tab會切換到對應的內容&#xff0c;并且選中的tab文字帶下劃線&#xff0c;下劃線寬度比文字寬度短&#xff0c;并且與文字居中。 <template><div><div class"tabs"><…

慣性傳感器的傾角計算

慣性傳感器單元 IMU IMU 是 Inertial Measurement Unit 的縮寫, 直接翻譯過來就是慣性測量單元, 常見的有單獨的三軸加速度(Accelerometer)計 ADXL345, L3G4200D, L3GD20等, 單獨的三軸角速度計(又稱陀螺儀, Gyroscope) LIS3DH, L3GD20H, BMG160, 以及包含了加速度計和陀螺儀的…

Qt 簡約又簡單的加載動畫 第七季 音量柱風格

今天和大家分享兩個音量柱風格的加載動畫,這次的加載動畫的最大特點就是簡單,只有幾行代碼. 效果如下: 一共三個文件,可以直接編譯運行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

尋找峰值[中等]

優質博文IT-BLOG-CN 一、題目 峰值元素是指其值嚴格大于左右相鄰值的元素。給你一個整數數組nums&#xff0c;找到峰值元素并返回其索引。數組可能包含多個峰值&#xff0c;在這種情況下&#xff0c;返回 任何一個峰值 所在位置即可。 你可以假設nums[-1] nums[n] -∞。 你…

python統計分析——泊松回歸

參考資料&#xff1a;用python動手學統計學 概率分布為泊松分布、聯系函數為對數函數的廣義線性模型叫作泊松回歸。解釋變量可以有多個&#xff0c;連續型和分類型的解釋變量也可以同時存在。 1、案例說明 分析不同氣溫與啤酒銷量的關系。構造不同氣溫下的銷量的數學模型&…

Java之美[從菜鳥到高手演變]之Json類型數據的處理

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易于人閱讀和編寫。同時也易于機器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON采用完全獨立于語言的文本格式&#xff0c;但是也使…

Unity--自動版面(Horizontal Layout Croup)||Unity--自動版面(Vertical Layout Group)

Unity--自動版面&#xff08;Horizontal Layout Croup&#xff09; Horizontal Layout Croup&#xff1a; “水平布局組”組件將其子布局元素并排放置。它們的寬度由各自的最小&#xff0c;首選和靈活的寬度決定&#xff0c;具體取決于以下模型&#xff1a; 所有子布局元素的…

el-form里面表單遍歷渲染,里面放el-row,一行放3個表單怎么實現

需求&#xff1a; 需要實現 el-form里面的表單遍歷渲染&#xff0c;里面放el-row,一行放3個表單怎么實現&#xff1f; 廢話不多說直接上demo <el-form ref"form" :model"form" label-width"80px"><el-row v-for"(row, index) in M…

服務器硬件基礎知識全解析

在信息技術日新月異的今天&#xff0c;服務器作為數據處理和存儲的核心&#xff0c;其重要性不言而喻。了解服務器硬件基礎知識&#xff0c;對于IT從業者以及廣大技術愛好者來說&#xff0c;都是不可或缺的技能。本文將詳細解析服務器硬件的基礎知識&#xff0c;幫助讀者建立起…

BUGKU bp

打開環境&#xff0c;他提示了弱密碼top1000&#xff0c;隨便輸入密碼123抓包爆破 發現長度都一樣&#xff0c;看一下響應發現一段js代碼&#xff0c;若r值為{code: bugku10000}&#xff0c;則會返回錯誤&#xff0c;通過這一句“window.location.href success.php?coder.cod…

計算機二級Python刷題筆記------基本操作題11、14、17、21、30(考察列表)

文章目錄 第十一題&#xff08;列表遍歷&#xff09;第十四題&#xff08;len&#xff09;第十七題&#xff08;len、insert&#xff09;第二十一題&#xff08;append&#xff09;第三十題&#xff08;二維列表&#xff09; 第十一題&#xff08;列表遍歷&#xff09; 題目&a…