#我的失利項目復(fù)盤##java##java面試題##java項目##項目#在給別人做模擬面試時,看到的項目某某商城某某商城為某某APP 首頁核心業(yè)務(wù)之一,用戶通過首頁可直接接入到商城進行瀏覽、購物行為。商城團隊歷經(jīng)了歷次大促、活動促銷的考驗,我司作為合作方與某某大廠架構(gòu)團隊一起完成商城平臺的開發(fā)建設(shè);我作為核心開發(fā)人員參與了商城商品中臺建設(shè)、庫存中心、微服務(wù)改造升級、子系統(tǒng)接入、分庫分表、拼團營銷、金幣抽簽、合并支付等業(yè)務(wù)與架構(gòu)工作?!ぜ夹g(shù)難點:庫存中心·技術(shù)挑戰(zhàn):商城經(jīng)常做促銷活動、秒殺場景, 商品瞬時進行庫存扣減造成 redis 機器流量傾斜問題。 【秒殺場景需不需要單獨的服務(wù)器,秒殺場景是否需要加鎖;促銷活動中,活動資源如何評定;】·技術(shù)方案:實現(xiàn)了一個高性能,可支撐分桶多分片的庫存中心,提供單庫存分片不足扣減的合并庫存功能,提供商品操作庫存入庫的漸進性入緩存的實現(xiàn)?!救绾伪WC數(shù)據(jù)的一致性;分桶多分片的庫存扣減完整業(yè)務(wù)/時序圖】·技術(shù)難點:數(shù)據(jù)遷移平臺·技術(shù)挑戰(zhàn):分庫分表方案敲定,為了實現(xiàn)數(shù)據(jù)遷移、數(shù)據(jù)同步需要完善可靠的數(shù)據(jù)遷移系統(tǒng)【數(shù)據(jù)量有多大?分庫分表后,如何保證數(shù)據(jù)閉環(huán),業(yè)務(wù)是否需要修改】·技術(shù)方案:研發(fā)數(shù)據(jù)遷移系統(tǒng),包括了業(yè)務(wù)表(訂單、訂單詳情等),遷移表、遷移配置表等。實現(xiàn)了全量同步滾動拉取、增量同步(基于 Cancal+MQ)防止數(shù)據(jù)丟失和高效寫入方案。實現(xiàn)了單庫到八庫八表的實踐。 【binlog和redolog的區(qū)別,binlog異步遷移是否存在風(fēng)險,是否會造成查詢過程卡頓】社交分享平臺 【剛培訓(xùn)結(jié)束,自己做的面試項目】項目介紹 :社交分享電商平臺旨在為用戶提供分享購物心得,并可以直接購買相關(guān)商品。該項目分為管理端和用戶端。用戶端核心業(yè)務(wù)有:查看附近門店、發(fā)布筆記(獲取積分)、簽到、點贊和收藏,以此帶動用戶的活躍度。還可以發(fā)放一些優(yōu)惠券,促進用戶消費。管理端核心業(yè)務(wù)有:用戶的筆記、評論、商品、優(yōu)惠券的管理。 使用技術(shù) SpringBoot、SpringCloud、RabbitMQ、Redis、XXL-JOB、Redisson、Mybatis-plus、分庫分表等。 【接口性能主要在哪些地方消耗較大:IO】工作職責(zé) 1、采用百度地址編碼和路線規(guī)劃服務(wù),為用戶和商家地址提供查找附近門店的功能。 2、采用Redis位圖 ,優(yōu)化用戶簽到功能,減少內(nèi)存消耗。 【按照每周講解一下位圖怎么使用:0000000---》0000001---->0000011】3、采用Redis SortedSet數(shù)據(jù)結(jié)構(gòu)存儲用戶本月積分排行,使用MySQL分表存儲歷史積分排行。 【積分排行持久化的作用】4、采用XXL-JOB實現(xiàn)分布式任務(wù)調(diào)度,定時持久化上賽季積分排行,根據(jù)當(dāng)月和歷史積分排行發(fā)送優(yōu)惠券。 【歷史數(shù)據(jù)較多時,如何進行數(shù)據(jù)對比?】5、開發(fā)可擴展和通用的點贊/踩模塊,利用Redis Set數(shù)據(jù)結(jié)構(gòu)存儲用戶點贊明細, SortedSet數(shù)據(jù)結(jié)構(gòu)存儲特定業(yè)務(wù)項的點贊總數(shù),增加用戶互動性。 【為什么要用有序集合存儲點贊明細】6、采用RabbitMQ實現(xiàn)消息隊列,將點贊總數(shù)放入消息隊列,實現(xiàn)系統(tǒng)解耦和異步處理, 提升系統(tǒng)響應(yīng)速度。【點贊總數(shù)在什么場景下會被持久化DB層;場景如何界定】 7、設(shè)計支持多類型配置的優(yōu)惠券系統(tǒng),采用策略模式選擇不同類型的優(yōu)惠券。 8、解決了超發(fā)和超領(lǐng)問題。使用JMeter工具進行壓測,確保并發(fā)安全和提高用戶體驗和平臺性能。 9、采用樂觀鎖思想解決優(yōu)惠券超發(fā)問題,利用關(guān)系型數(shù)據(jù)庫寫鎖排他性保證并發(fā)安全。 【如何不使用鎖解決超發(fā)問題?】10、采用Redisson分布式鎖解決優(yōu)惠券超領(lǐng)問題,結(jié)合SPEL表達式、工廠模式、策略模式和AOP思想,封裝自定義分布式鎖注解。個人成就 1、查詢點贊狀態(tài)使用 ,從單命令執(zhí)行,改為RedisTemplate 的 executePipelined 方法進行批量處理,優(yōu)化系統(tǒng)響應(yīng)時間( 40s->100ms)。 2、多線程優(yōu)化大批量數(shù)據(jù)插入速度:由于cdk的生成需要將這批碼插入數(shù)據(jù)庫中保存,當(dāng)創(chuàng)建十萬條cdk記錄時,耗時達到了十幾秒。使用@Async+自定義線程池的方式,異步生成cdk,優(yōu)化后執(zhí)行耗時2.5秒,執(zhí)行時間縮短了6倍。 【批量插入的數(shù)據(jù)是否會受到間隙鎖的影響;數(shù)據(jù)在插入過程中,如何避免/減少頁分裂/頁合并的產(chǎn)生/受到間隙鎖的影響】3 、基于Redis異步領(lǐng)券響應(yīng)速度:在兌換資格校驗的時候,或者領(lǐng)券資格校驗的時候,會有多次與Redis的交互,每一次交互都需要發(fā)起一次網(wǎng)絡(luò)請求。在并發(fā)較高的情況下導(dǎo)致網(wǎng)絡(luò)擁堵,導(dǎo)致業(yè)務(wù)變慢。通過編寫LUA腳本,在腳本中編寫復(fù)雜業(yè)務(wù)判斷,通過一次請求,完成對腳本的調(diào)用。提高接口響應(yīng)速度。