0.java技術能力框架
基礎模塊 | 應用模塊 | 綜合模塊 |
---|---|---|
技術崗位與面試流程 | 常用工具集 | 系統架構設計 |
計算機基礎 | 常用框架 | 微服務架構 |
jvm原理 | 緩存 | 容器化 |
多線程 | 隊列 | 云計算(阿里云/aws) |
設計模式 | 數據庫 | |
數據結構與算法 |
1.常用設計模式與應用場景
- 工廠模式:spring 創建bean
- 代理模式:spring AOP
- 責任鏈模式:netty消息處理方式或.審批流程采用責任鏈模式
- 適配器模式:SLF4j對log4j的支持
- 觀察者模式:webflux對流式請求的支持
- 構造者模式:PB序列化中的Builder
- 策略模式實現各種業務的指標監控邏輯或利用反射結合策略模式實現虛擬商品購買下發放不同權益;
2. JVM
- 性能分析工具(MAT/JMC/JStack/Jstat/arthas )
3.并發與多線程
線程狀態的轉換:
4.spring&web
1.spring
spring context初始化流程
spring如何解決bean的循環依賴調用:
Spring通過三級緩存解決了循環依賴,其中一級緩存為單例池(singletonObjects),二級緩存為早期曝光對象earlySingletonObjects,三級緩存為早期曝光對象工廠(singletonFactories)。當A、B兩個類發生循環引用時,在A完成實例化后,就使用實例化后的對象去創建一個對象工廠,并添加到三級緩存中,如果A被AOP代理,那么通過這個工廠獲取到的就是A代理后的對象,如果A沒有被AOP代理,那么這個工廠獲取到的就是A實例化的對象。當A進行屬性注入時,會去創建B,同時B又依賴了A,所以創建B的同時又會去調用getBean(a)來獲取需要的依賴,此時的getBean(a)會從緩存中獲取,第一步,先獲取到三級緩存中的工廠;第二步,調用對象工工廠的getObject方法來獲取到對應的對象,得到這個對象后將其注入到B中。緊接著B會走完它的生命周期流程,包括初始化、后置處理器等。當B創建完后,會將B再注入到A中,此時A再完成它的整個生命周期。至此,循環依賴結束!
2.RPC框架實現
3.mybatis
4.緩存
Memcache:
Redis:
5.Mysql調優
mysql索引:
Mysql調優:
5.軟件開發
1.軟件工程的階段
2.測試分類
3. http請求返回狀態碼
4.軟件設計原則:
solid原則:
- 開閉原則:對擴展開放,對修改關閉,多使用抽象類和接口。
- 里氏替換原則:基類可以被子類替換,使用抽象類繼承,不使用具體類繼承。
- 依賴倒轉原則:要依賴于抽象,不要依賴于具體,針對接口編程,不針對實現編程。
- 接口隔離原則:使用多個隔離的接口,比使用單個接口好,建立最小的接口。接口職責明確
- 迪米特法則:一個軟件實體應當盡可能少地與其他實體發生相互作用,通過中間類建立聯系。
- 合成復用原則:盡量使用合成/聚合,而不是使用繼承。
5.TOGAF架構領域(BDAT):
- Business(Strategy/Governance/key processes)
- Data(Logical and physical data assets/Data management)
- Application(Interactions and relationships to core business processes/ how they support the strategy)
- Technology(software and hareware capabilities/Infrastructure、middleware、networks 、communications、processing、and standards)
6.常用開發工具
MAT 查看dump信息,jmap導出dump文件
7.常用數據結構與算法
主導世界的10種算法
8.開源項目學習
1.ftgo源碼學習
常用依賴庫匯總:
io.micrometer:micrometer-registry-prometheusorg.springframework.boot:spring-boot-starter-actuatorio.eventuate.tram.core:eventuate-tram-spring-jdbc-kafka
io.eventuate.tram.core:eventuate-tram-spring-events
io.eventuate.tram.core:eventuate-tram-spring-messaging
io.eventuate.common:eventuate-common-json-mapper
io.eventuate.tram.sagas:eventuate-tram-sagas-spring-orchestration-simple-dsl
io.eventuate.tram.core:eventuate-tram-aggregate-domain-events
io.eventuate.tram.core:eventuate-tram-spring-consumer-kafka
io.eventuate.tram.core:eventuate-tram-spring-commands
eventuate-tram-sagas-spring-participant
io.eventuate.tram.sagas:eventuate-tram-sagas-spring-orchestrationorg.apache.commons.lang3.builder.HashCodeBuilderlibphonenumber :手機號碼庫edu.princeton.cup:java-cup-10k:解決c10k庫 spring-boot-admin-starter-client
pagehelper-spring-boot-starter:分頁
mybatis-generator-core:mybatis 生成器
sa-token-reactor-spring-boot3-starter:集成sa-token到響應式springboot
sa-token-redis-jackson:Sa-Token 集成redis并使用jackson序列化
sa-token-jwt:sa-token集成jwt
涉及的技術點:
- 分布式事務saga實現采用io.eventuate.tram庫
- kafka-gui:kafka ui界面工具
- @EnableAdminServer 開啟adminserver
2. PassJava-Platform源碼學習
常用依賴庫匯總
mybatis-plus-boot-starterspring-cloud-starter-alicloud-ossspring-cloud-starter-alibaba-nacos-discoveryspring-cloud-starter-alibaba-nacos-configspring-cloud-starter-openfeignmybatis-plus-core
mybatis-plus-extensiontransmittable-thread-local :阿里開源的,提供threadlocal值傳遞功能,解決異步執行時上下文傳遞問題。適合jdk6~21io.jsonwebtoken : jjwtspring-security-crypto:加解密spring-retrycom.github.penggle:kaptcha :圖片驗證碼生成工具springfox-swagger2
springfox-swagger-ui hutool-allelasticsearch-rest-high-level-client :es客戶端庫org.redisson:redisson :分布式鎖、分布式對象等功能框架
涉及的技術點
- jwt/springsecurity->token->JwtAuthController
- 解決:時間格式問題–> @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone = “GMT+8”)
- redisson實現分布式鎖方案代碼如下:
public List<TypeEntity> getTypeEntityListByRedissonDistributedLock() {// 1.設置分布式鎖RLock lock = redisson.getLock("lock");// 2.占用鎖lock.lock();System.out.println("加鎖成功,執行后續代碼。線程 ID:" + Thread.currentThread().getId());List<TypeEntity> typeEntityListFromDb = null;try {// 3.獲取數據typeEntityListFromDb = getDataFromDB();Thread.sleep(10000); // 模擬長時間執行任務} catch (Exception e) {System.out.println("異常");// TODO} finally {// 4.釋放鎖System.out.println("釋放成功,執行后續代碼。線程 ID:" + Thread.currentThread().getId());lock.unlock();}return typeEntityListFromDb;}
9. 工程師求職流程
工程師發展路徑
- 技術序列:技術攻堅、架構設計、專業知識
- 管理序列:團隊管理、項目管理、溝通協作
1.編寫簡歷
工作內容、專業技能和項目經驗寫的有問題。簡歷內容廢話太多;高級工程師,考慮綜合能力;采用star原則寫簡歷,盡量數據量化成果。
2.面試流程
3.面試前準備工作
- 了解應試公司以及崗位信息
- 系統化復習基礎知識
- 對原公司負責的項目進行梳理總結
- 學習典型架構案例
- 閱讀常考考點源碼
- 針對性準備加分項
面試是:溝通、心態、能力的綜合體現;自信、良好順暢的溝通特別重要
4.面試考察點
5.加分項
- 知識點與典型的業務場景關聯
- 以反例描述實際場景中誤用的危害
- 與知識點相關的優化點
- 與知識點相關的最新技術趨勢
- 在了解的前提下,盡量增加回答內容的深度
6.硬技能
7.面試技巧
star :stituation,task,action,result.
面試結束要做的事:
- 準備1~2個小問題
- 不要詢問面試結果
- 復盤與總結
參考資料
- 分布式事務saga: https://blog.csdn.net/2301_77835649/article/details/131529270
- saga實現框架:eventuate-tram https://github.com/eventuate-tram/eventuate-tram-core
- 分布式事務seata
- TransmittableThreadLocal : https://github.com/alibaba/transmittable-thread-local
- arthas https://github.com/alibaba/arthas/blob/master/README_CN.md
https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn
https://arthas.aliyun.com/doc/spring-boot-starter.html - Sa-Token:java權限認證框架 https://github.com/dromara/Sa-Token https://sa-token.cc/
- JeecgBoot 低代碼開發平臺: https://github.com/jeecgboot/JeecgBoot
- mall https://github.com/macrozheng/mall https://github.com/macrozheng/mall-swarm
- springboot+k8s https://gitee.com/geektime-geekbang/staffjoy git clone https://gitee.com/geektime-geekbang/staffjoy.git
- ftgo: https://github.com/microservices-patterns/ftgo-application.git
- 程序員進擊之路 https://www.didispace.com/home.html
- mybatis一鍵生成DAO: https://mybatis.org/generator/
- mybatis通用mapper4 一鍵生成: https://github.com/abel533/Mapper
- 參考資料:https://github.com/WongSilver/spring-cloud-study