發表文章

目前顯示的是 2022的文章

必要書單

clean code clean architecture 一线架构师实践指南(温昱) 面向对象分析与设计.第3版.(美)Grady booch 企业应用架构模式(中文版) OOD启思录  领域驱动设计:软件核心复杂性应对之道 敏捷软件开发:原则、模式与实践/软件工程实践

spring security

Spring Security  分成 認證跟授權 Spring Security在進行安全驗證時收到輸入請求中的使用者名稱(username),然後呼叫UserDetailsService.loadUserByUsername(String username)並傳入username去「記錄使用者資訊的地方」尋找對應的使用者,然後將找到的使用者資訊以UserDetails的形式回傳給AuthenticationProvider(的實作)進行接下來的驗證。 https://chikuwa-tech-study.blogspot.com/2021/06/spring-boot-security-authentication-and-authorization.html https://matthung0807.blogspot.com/2019/09/spring-security-userdetailsservice.html https://www.toptal.com/spring/spring-security-tutorial https://x8795278.blogspot.com/2019/12/spring-boot-spring-security-rest-api.html

關鍵字

 CAP理論 4+1 架构视图模型 事件溯源 事件驅動 pubsub 發布訂閱 觀察者模式 XA / DTM 单点登录 gprc vs mqtt LWM2M/CoAP SOA VS SAAS 二階段提交 分布式授權 CQS是 function等級的設計 CQRS是 module等級的設計 魯棒圖

docker 面試

https://www.runoob.com/docker/docker-hello-world.html https://yeasy.gitbook.io/docker_practice/image/dockerfile docker run docker exec  docker start docker stop docker ps docker logs docker exec -it docker rm -f  

技術棧

 git:      sourcetree     gitlab flow restful api:     rate limit     冪等性     elk 監控     restful 規範 後端開發:     user story     use case      http://www.cjwind.idv.tw/OOAD-software-develop-cycle/ http://apframework.com/2020/03/22/ddd-color/ 項目: 適當的 transaction 和 try catch log 跟 email 當作 service 的一部分 用 interface 注入 該用啥資料庫就用啥 mysql 正規化 索引 使用 redis 快取結果 nosql 記錄其他內容 event、job queue、cronjob 架構 模組 上下文 切割程式碼  掌握所有系統跟資料庫的狀態 系統監控 資料庫監控 消息队列  = 异步、削峰、解耦 https://www.zhihu.com/people/aobingJava

DDD

誰使用domain service entity 能直接調用 repo 嗎 是否一定要聚合 區分bounded context 可以假設有多個部門或是多個開發者 參與主體 鲍勃大爷:先设计对象的行为,再设计数据库的表结构! 先考慮參與者 为了识别某个概念是否属于某个限界上下文,问题就变成了: 是否都符合该主题的通用语言的要求? 是否与该主题无关? 是否更符合该主题的通用语言? 是否是该主题的通用语言? DDD 是設計方法 每個BC可以用MVC架構也可以用clean architecture架構  最後都是回到ooad 所以去探討實作細節不如去看clean architecture  DDD還是著重在BC跟子域就好 跟對方公司部門 或是工程部門有關 https://www.jdon.com/53988 KISS 單一職責 DDD 戰略設計 + clean architecture 物件設計的判斷依據 行為 跟 資料 如何被使用 如果多增了一個類型要如何更改 如果依賴的東西變了 會怎麼被影響 如果物件改變了 依賴這個物件的class會如何被影響

單一職責

只做一件事 只有一個改變的理由 開發程式的人必須對程式負責 不同職責的程式應該可以給不同的人開發而不互相影響 程式出錯只會找上一個人 而不是多個人 程式必須對使用他的人負責 職責改變並不影響使用者 程式必須對職責負責  職責改變只改變對他負責的程式 不改變使用者使用的情形 使用人 -> 程式 -> 職責 開發者 -> 程式 -> 職責 一個程式只負責一個職責 一個程式只給一個人開發 錯誤時只需找一個人負責 不會影響到其他程式 職責改變只會影響一個程式 只需改變一個程式 一個程式會給多個使用者使用 錯誤的點: 過多 class 是錯的 class 應該要有完整職責  single action 是錯的 class 應該要有完整職責 repository interface沒有 function 是錯的 interface 應該要有完整職責

守則

 單元測試一定要可以直接運行 不依賴任何東西 一定要正規化資料庫 單一職責代表改需求只需改動一個地方 充血模型跟貧血模型沒有好壞 充血模型 比較優雅複雜 貧血模型 粗暴簡單 class 不要過多 會類爆炸 適度  單元測試逃不掉 single action是錯誤的 過多的class是錯誤的 repository的interface沒有function是錯誤的 組件間必須是單向關係 輔助組件必須指向核心組件 P65 步驟: 抓名詞 => user story => use case => 分析物件 模型 找出限界上下文 => 投射心智模型 => 封裝 單一職責 => 不管資料庫設計 => 每次開發都會得到新的特性 所以需要不斷調整模型和文件 => 重構  工作單元 最少驚訝原則 軟體接口如硬體接口 對象有狀態 行為 標識符 物件與物件的關聯 可以看成通道 有通道才能發送消息 對象責任代表維護知識跟可以執行的動作 正確使用 mysql Redis 事務跟 sharedlock 和 lockForUpdate

php 面試題

laravel 7 特性 laravel 8 特性 php 7 特性 php 8 特性 Names Arguments JIT Union Types Constructor Property Promotion Null-Safe Operator Trailing Comma in Parameters Match Expression Attributes WeakMaps Mixed Type Throw Exception From New Places Call ::class on objects Non-Capturing Catch New String Functions class vs trait 執行順序 callback clean architecture ddd https://docs.kilvn.com/tipi/ https://imyoungyang.gitbooks.io/php7-study-group-notes/content/Chapter2/php-trait.html

java資料結構

https://www.mygreatlearning.com/blog/data-structures-using-java/ Array Linked List Stack  Queue Binary Tree Binary Search Tree Heap Hashing  Graph Array 固定長度 初始化: int a[] = {1,2,3};  int a[] = new int[]{1,2,3} int a[] = new int[3] int a[3] = new int[]{1,2,3} X int a[] = new int[3]{1,2,3} X

編程原則

高併發

流量削锋 重要的是資料庫,到資料庫的請求必須少 消息隊列解決削峰 中間通過一個隊列在一端承接瞬時的流量洪峰,在另一端平滑地將消息推送出去。 流量削锋漏斗模型: CDN>緩存>後端>資料庫 秒杀或团抢 聊天室 旋轉拍賣 Idempotency Key: 每個 Request 一定會有一個「唯一」可被識別的 Key Routing Proxy failover throttling Fulfillment Gateway  參考系統:  火車票、秒殺搶購、聊天室 https://ithelp.ithome.com.tw/articles/10243807 https://ithelp.ithome.com.tw/articles/10216645 http://www.dockone.io/article/10015 https://blog.csdn.net/mango_love/article/details/106443098

java 多線程

分布式事务  ACID 分布式事务最经典的七种解决方案 https://segmentfault.com/a/1190000040321750 大白话讲解脏写、脏读、不可重复读和幻读 https://blog.csdn.net/qq_41549632/article/details/116654201 彻底搞懂 MySQL 事务的隔离级别 https://developer.aliyun.com/article/743691 图解脏写、脏读、不可重复读、幻读 https://mp.weixin.qq.com/s?__biz=MzI5MzQ2MDg4Nw==&mid=2247483812&idx=1&sn=dc24a2c69481b27b08da6199be654e07&chksm=ec708f5cdb07064a1f00f12a9fbfa5e278b0721d7d766c0c189d9e05250a1255557313a63a4b&scene=21#wechat_redirect 多线程基础 https://www.liaoxuefeng.com/wiki/1252599548343744/1304521607217185 https://www.youtube.com/playlist?list=PLdtC50H09WTAbZYIjN63uj7DtsjOCngrV

leetcode經典題

55. Jump Game 1143. Longest Common Subsequence  46. Permutations 53. Maximum Subarray 77. Combinations 45. Jump Game II 322. Coin Change 300. Longest Increasing Subsequence

use case 粒度

 use case的粒度取決於單一職責 只有一個改變的理由跟tdd測試驅動 方便測試 覆用 只關注業務邏輯 不關注怎麼存資料庫 用例驅動 vs 領域驅動