Monday, April 18, 2022
Wednesday, April 13, 2022
[Architecture] 成为软件架构师
一、軟體架構師的工作內容:
1. 决定何时以及如何交付软件
2. 确保软件能够满足业务目标
由图可见,软件架构师是集业务、技术、面向用户于一身的。具体职责:
1. 从工程角度定义问题。 关注质量属性和那些影响架构设计方向的约束和特性。
2. 分解系统,分配职责。 模块化分解系统。
3. 关注大局。 人员、过程、业务需求以及其它技术和非技术因素都将影响最后的软件系统。
4. 在质量属性之间做出取舍。 找出备选方案,再与各方一起协商如何取舍最合理。
5. 管理技术债务。 将业务需求与技术决策放在一起考虑。
6. 提升团队的架构能力。 结对设计,写文档,批评,当作社交活动
二、什麼是軟件架構
软件架构:关于如何组织软件 一系列重大设计决策的集合
影响到:
质量属性
开发进度
成本
很多人
其他软件系统
如何做:
Software Architecture in Practice
定义基本结构:
元素是软件的基本组成部分,关系则描述了元素如何协作完成。
三種類型的元素和關係:
模塊結構:
1. 在於設計階段。
2. 即使軟件沒有運行,模塊結構存在於文件系統中。
組件連接器 (C&C):
1. 運行階段。
2. 組件可以創建與其它組件的連接、產生新進程以及實例化新物件。
分配結構
1. 展示模塊元素與組件連接器,以及這些元素與現實的物件元素之間的協同與響應關係。
2. 某個元素運行在客戶端, 還是運行在服務器
动手练习:元素、关系、结构。 元素命名要明确具体、考虑模块结构、运行时结构、分配结构。
推演质量属性和其他系统属性:
质量属性包括:可伸缩性、可用性、可维护性、可测试性等。
三、成为团队的架构师
引入团队的设计讨论
指明团队何时应该进行取舍
撰写设计决策
接受更多架构设计职责
从程序员向架构师转变。 任何人一旦做出了影响软件系统结构的决定,都充当了临时架构师
四、开发出色的软件
架构将大问题分解为容易处理的小问题
软件架构告诉大家如何协同工作
软件架构为讨论复杂设计提供了基本词汇
软件架构关注的不仅仅是功能。 还有成本、约束、进度、风险、团队交付能力、质量属性
软件架构让你避免犯重大错误。 架构师并非无所不知,而架构可以帮助我们发现那些今后可能带来麻烦的地方
架构让软件更灵活
https://githubhot.com/repo/icehoo/me/issues/54
Monday, April 11, 2022
c++ index
指標和引用
struct和class的區別 範例:struct 當成 class 寫法
Overloading unary operators (C++ only)
Overloading increment and decrement operators (C++ only)
Overloading binary operators (C++ only)
Overloading assignments (C++ only)
Overloading subscripting (C++ only)
Overloading class member access (C++ only)
Resolving addresses of overloaded functions (C++ only)
clearing an object of type with no trivial copy-assignment
Json 使用异常之“in Json::Value::resolveReference(key, end): requires objectValue”
C++ with OO
C/C++ - Vector (STL) 用法與心得完全攻略
Sunday, April 10, 2022
Android Index
Android高级Framework系统面试专题系列-认清楚自己的层次
Android modular system components
Android 簽名實戰 platform 等簽名方法及 mk 檔案中的 LOCAL_CERTIFICATE
Android App
關於Android Studio時出現cannot resolve symbol R報錯的解決方法
Android布局标签--include、merge 、ViewStub
Avoid object allocations during draw/layout operations
練習在 Android 設計上的 MVC, MVP, MVVM 架構
練習在 Android 設計上的 MVC, MVP, MVVM 架構
详细介绍Android中Parcelable的原理和使用方法
ListView
【Android】ListView 進階用法 BaseAdapter
Android BaseAdapter提升效能的建議實作方式
Android 10.0系統啟動之SystemServer進程 1
Framework
Android Framework(AMS,WMS,PMS等)的概念及解析,获取系统服务
HIDL
TV
Audio
Android Architecture
[譯] Android 架構:Part 2 —— 介紹 Clean Architecture
[譯] Android 架構:Part 3 —— 應用 Clean Architecture
[譯] Android 架構:Part 4 —— 實踐 Clean Architecture(含原始碼)
Android 中使用 addr2line 来分析 native 信息
[python] 爬蟲
爬蟲指的是按照一定規則自動抓取網絡信息的程序,分為通用爬蟲和聚焦爬蟲兩大類,前者的
目標是在保持一定內容質量的情況下爬取儘可能多的站點;而後者的目標則是在爬取少量站點的情況下儘可能保持精準的內容質量。
爬蟲通常從一個或多個 URL 開始,在爬取的過程中不斷將新的並且符合要求的 URL 放人待爬隊列,直到滿足程序的停止條件。
爬蟲的的爬取過程可以分為下面3個步驟。
1. 請求指定的 URL 以獲取響應正文。
2. 解析響應正文內容並從中提取所需信息。
3. 將上一步提取的信息保存到資料庫或文件中。
[python] 反爬蟲的概念與定義
限制爬蟲程序訪問服務器資源和獲取數據的行爲稱爲爬蟲。限制手段包括但不限於請求限制、拒絕響應、客戶端身份驗證、文本混淆和使用動態渲染技術。這些限制根據出發點可以分爲主動型反爬蟲和被動型反爬蟲。
主動型反爬蟲
開發者有意識地使用技術手段區分正常用戶和爬蟲,並限制爬蟲對網站的訪問行爲,如驗證請求頭信息、限制訪問頻率、使用驗證碼等。
被動型反爬蟲
爲了提高用戶體驗或節約資源,用一些技術間接提高爬蟲訪問的行爲,比如數據分段加載、點擊切換標籤頁、鼠標懸停預覽數據等。
多類型爬蟲
除此之外,還可以從特點上對反爬蟲進行更細緻的劃分,如信息校驗型反爬蟲、動態渲染型反爬蟲、文本混淆型反爬蟲、特徵識別型反爬蟲等。需要注意的是,用一種限制現象可以被歸類到不同的反爬蟲類型中,比如通過JavaScript生成隨機字符串並將字符串放在請求頭中發送給服務器,由服務器校驗客戶端身份的這種限制手段即可以說是信息校驗型反爬蟲,又可以說是動態渲染反爬蟲。
網站反爬蟲常見方法
1.通過UA判定
UA即User Agent,它是請求瀏覽器的身份標誌。反爬蟲機制通過判定訪問請求的頭部中沒有帶UA來識別爬蟲,這種判定方法很低級,通常不會將其作爲唯一的判定標準,因爲反反爬蟲非常容易,隨機數UA即可針對。
2.通過Cookie判定
Cookie就是指會員制的帳號密碼登錄驗證,通過分辨這一個帳號在短期內內爬取頻次來判定。這種方法的反反爬蟲也很費勁,需選用多帳戶的方法來爬取。
3.通過訪問頻率判定
爬蟲往往會在短時間內多次訪問目標網站,反爬蟲機制可以通過單個IP訪問的頻率來判斷是否爲爬蟲。這種反爬方式很難反制,只能通過更換IP來解決。
4.通過驗證碼判定
驗證碼是反爬蟲性價比較高的實施方案,反反爬蟲通常需要接入OCR驗證碼識別平台或是利用Tesseract OCR識別,亦或是採用神經網絡訓練識別驗證碼等。
5.動態性頁面加載
採用動態加載的網站往往是爲了方便用戶點哪看哪兒,而爬蟲沒法和頁面進行交互,這就大大增加了爬蟲的難度。
一般說來,用戶去爬取網站信息,都會受到反爬蟲的制約,這樣使得用戶在獲取信息的時候會受到一定的阻礙,而使用代理ip軟體可以徹底解決這一問題。
Friday, April 8, 2022
JavaScript index
Resolving the JavaScript Promise Error "TypeError: Cannot Read 'Then' of Undefined"
[筆記] 談談JavaScript中函式的參數(parameter),arguments和展開運算子(spread)
Saturday, April 2, 2022
[Architecture] 软件架构模式分析
https://chinalhr.github.io/post/software-architecture-patterns/#%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84microservices-architecture
Study
n8n index
【n8n免費本地端部署】Windows版|程式安裝x指令大補帖 【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能
-
#include <iostream> using namespace std; struct X { // member binary operator void operator*(int) { cout << "void...
-
第 1 章 無瑕的程式碼 | Clean Code 第 2 章 有意義的命名 | Clean Code 第 3 章 函式 | Clean Code 第 4 章 註解 | Clean Code 第 5 章 編排 | Clean Code 第 6 章 物件及資料結構| Clean C...
-
安裝svn軟體 apt install subverion 下載code svn co https://xxxxx/xxxx 如果出現 svn: E120171: Error running context: An error occurred during SSL commun...