免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

前后端分離的智能面試刷題系統(tǒng):從Spring Boot到Vue 3的完整實(shí)踐

前后端分離的智能面試刷題系統(tǒng):從Spring Boot到Vue 3的完整實(shí)踐 這個(gè)項(xiàng)目嚴(yán)格來(lái)說(shuō)是去年秋招間隙做出來(lái)的起因特別簡(jiǎn)單用常見(jiàn)的刷題產(chǎn)品總覺(jué)得不順手錯(cuò)題本太散、沒(méi)有知識(shí)點(diǎn)維度的統(tǒng)計(jì)、還總被推薦一些早就掌握的題。于是我就想著干脆自己造一個(gè)智能面試刷題系統(tǒng)既能滿(mǎn)足日常刷題需求又順便把前后端分離的架構(gòu)完整走一遍。整個(gè)項(xiàng)目從設(shè)計(jì)到第一版上線(xiàn)大概用了三周技術(shù)棧選的是 Spring Boot Vue 3前端走 RESTful API 跟后端通信核心特色是答題記錄驅(qū)動(dòng)的一套推薦邏輯和可視化統(tǒng)計(jì)。這篇文章把我當(dāng)時(shí)的決策過(guò)程、數(shù)據(jù)庫(kù)設(shè)計(jì)、實(shí)現(xiàn)細(xì)節(jié)、以及上線(xiàn)后踩過(guò)的坑都整理出來(lái)理論和代碼都有對(duì)正在做畢設(shè)或想加深架構(gòu)理解的開(kāi)發(fā)者會(huì)比較有參考價(jià)值。1. 項(xiàng)目的真實(shí)起點(diǎn)一個(gè)刷題工具的需求演進(jìn)1.1 痛點(diǎn)分析為什么需要專(zhuān)門(mén)做一套刷題系統(tǒng)刷題這件事看起來(lái)極其簡(jiǎn)單注冊(cè)一個(gè)賬號(hào)然后對(duì)著題庫(kù)一題一題點(diǎn)就是了。但真正堅(jiān)持用一個(gè)月以后會(huì)發(fā)現(xiàn)盲目刷題有一個(gè)非常致命的問(wèn)題你根本不知道自己哪里薄弱只會(huì)被動(dòng)地按照題目順序一路點(diǎn)下去今天錯(cuò)的知識(shí)點(diǎn)明天就忘下周又錯(cuò)一遍。我在做這個(gè)項(xiàng)目之前專(zhuān)門(mén)觀察了自己和身邊幾個(gè)準(zhǔn)備面試的同學(xué)的使用習(xí)慣。大家刷題時(shí)最有價(jià)值的動(dòng)作其實(shí)是提交答案那一刻的判斷過(guò)程和看解析后的復(fù)盤(pán)過(guò)程。但市面上通用產(chǎn)品大多只把判斷對(duì)錯(cuò)這一步留給了你錯(cuò)題回收、知識(shí)點(diǎn)統(tǒng)計(jì)、復(fù)習(xí)提醒這些環(huán)節(jié)要么很弱要么藏得很深。所以我自己做的第一版需求就非常明確要有一條完整的刷題—記錄—分析—推薦—再刷題閉環(huán)而不是一個(gè)單純堆砌題目的文檔系統(tǒng)。這個(gè)系統(tǒng)的用戶(hù)其實(shí)只有兩類(lèi)一類(lèi)是求職者需要在短期內(nèi)快速補(bǔ)足薄弱知識(shí)點(diǎn)另一類(lèi)是運(yùn)營(yíng)題庫(kù)的人需要一個(gè)趁手的工具把題目和知識(shí)點(diǎn)維護(hù)好。畢設(shè)或者個(gè)人項(xiàng)目最怕的就是功能無(wú)限膨脹所以我在立項(xiàng)時(shí)就把邊界卡得很死不做社區(qū)、不做社交、不做課程售賣(mài)只做跟有效刷題強(qiáng)相關(guān)的功能。1.2 功能邊界劃定與角色設(shè)計(jì)第一版的功能清單是這樣定的。用戶(hù)端只有五個(gè)核心模塊注冊(cè)登錄、刷題練習(xí)、模擬面試、錯(cuò)題本、學(xué)習(xí)統(tǒng)計(jì)。管理端是三個(gè)題庫(kù)管理、知識(shí)點(diǎn)管理、用戶(hù)數(shù)據(jù)概覽。登錄注冊(cè)這個(gè)模塊沒(méi)什么好說(shuō)的唯一要注意的是密碼不能明文存我用的是標(biāo)準(zhǔn)加鹽哈希。刷題練習(xí)是主入口用戶(hù)可以選擇按順序刷、按知識(shí)點(diǎn)刷、或者直接進(jìn)入智能推薦模式。模擬面試是一個(gè)獨(dú)立的會(huì)話(huà)式場(chǎng)景按照崗位方向和難度生成一套題答題過(guò)程中有倒計(jì)時(shí)結(jié)束后給出得分和解析。錯(cuò)題本不是簡(jiǎn)單收藏夾它要記錄每個(gè)錯(cuò)題的錯(cuò)誤次數(shù)、最近錯(cuò)誤時(shí)間并且可以一鍵把錯(cuò)題重新變成一套練習(xí)卷。學(xué)習(xí)統(tǒng)計(jì)則把答題記錄聚合起來(lái)按天輸出刷題熱力圖按知識(shí)點(diǎn)輸出正確率和掌握度雷達(dá)圖。管理端的題庫(kù)管理要覆蓋題目新增、編輯、上下架、批量導(dǎo)入。知識(shí)點(diǎn)管理維護(hù)一棵知識(shí)點(diǎn)樹(shù)每個(gè)題目可以?huà)斓揭粋€(gè)葉子節(jié)點(diǎn)上。用戶(hù)數(shù)據(jù)概覽我做得比較克制只展示注冊(cè)用戶(hù)數(shù)、刷題總量、平均正確率這些基礎(chǔ)指標(biāo)。管理端和用戶(hù)端共用同一套后端接口權(quán)限靠 JWT 里的 role 字段區(qū)分后端在最外層攔截器里做角色校驗(yàn)這樣兩個(gè)前端應(yīng)用都能保持比較薄的邏輯。1.3 為什么堅(jiān)持前后端分離很多在校同學(xué)做系統(tǒng)時(shí)習(xí)慣把頁(yè)面模板和后端渲染混在一起理由是這樣簡(jiǎn)單減少跨域問(wèn)題。但我個(gè)人強(qiáng)烈建議這類(lèi)偏業(yè)務(wù)型的項(xiàng)目一開(kāi)始就走前后端分離原因有三個(gè)。第一前端交互復(fù)雜度決定了它不適合服務(wù)端渲染。刷題頁(yè)面有倒計(jì)時(shí)、選項(xiàng)狀態(tài)、實(shí)時(shí)統(tǒng)計(jì)圖表、答題記錄更新這些都是典型的 SPA 場(chǎng)景用傳統(tǒng)模板一個(gè)個(gè)同步渲染會(huì)非常痛苦。第二一個(gè)后端 API 能同時(shí)喂給用戶(hù)端、管理端甚至以后接一個(gè)小程序代碼不需要重寫(xiě)。第三前后端分離以后接口邊界變得清晰我可以先把接口文檔定好再讓兩個(gè)部分并行推進(jìn)整個(gè)開(kāi)發(fā)節(jié)奏會(huì)快很多。當(dāng)然也要清醒認(rèn)識(shí)到分離的代價(jià)跨域配置、登錄態(tài)管理、接口聯(lián)調(diào)都是以前不需要操心的東西。這些問(wèn)題在后面的各部分里都有對(duì)應(yīng)解法不存在無(wú)解的情況只是需要多學(xué)幾種新技能而已。2. 技術(shù)選型與架構(gòu)設(shè)計(jì)前后端分離的骨架搭建2.1 后端用什么、為什么不后悔后端技術(shù)棧是 Spring Boot 3.x Java 17 MyBatis-Plus MySQL 8 Redis。為什么這么選其實(shí)是在學(xué)習(xí)價(jià)值和落地速度之間做平衡。如果只是想跑通一個(gè)項(xiàng)目用 Node.js 寫(xiě)接口可能更快但考慮到系統(tǒng)涉及復(fù)雜的數(shù)據(jù)統(tǒng)計(jì)、事務(wù)處理和權(quán)限模型Java 生態(tài)的穩(wěn)定性是實(shí)打?qū)嵉膬?yōu)勢(shì)。Spring Boot 幫我把絕大多數(shù)配置自動(dòng)化了我只需要關(guān)注 Controller、Service、Mapper 這一層業(yè)務(wù)代碼。MyBatis-Plus 的單表 CRUD 和分頁(yè)插件非常好用條件構(gòu)造器寫(xiě)動(dòng)態(tài)查詢(xún)也很順手復(fù)雜統(tǒng)計(jì)我用自定義 XML 寫(xiě) SQL兩邊互不干擾。Redis 我用在兩個(gè)地方。第一是緩存知識(shí)點(diǎn)統(tǒng)計(jì)結(jié)果統(tǒng)計(jì)接口如果每次都去 MySQL 聚合全表數(shù)據(jù)量大了以后響應(yīng)會(huì)明顯變慢所以我在寫(xiě)入 answer_record 時(shí)會(huì)同步把對(duì)應(yīng)知識(shí)點(diǎn)的統(tǒng)計(jì)緩存刪除下次讀取時(shí)再重新計(jì)算。第二是存放模擬面試的上下文一場(chǎng)面試過(guò)程中的進(jìn)度、剩余時(shí)間、題目列表都存在 Redis 里過(guò)期時(shí)間設(shè)成兩小時(shí)既能防止接口頻繁命中數(shù)據(jù)庫(kù)也能自然清理掉不活躍的會(huì)話(huà)。2.2 前端選型與工程化配置前端用了 Vue 3 Vite Pinia Vue Router Element Plus這套組合現(xiàn)在基本是中小型管理系統(tǒng)的默認(rèn)選項(xiàng)但選它不純粹是因?yàn)榱餍小ue 3 的組合式 API 對(duì)答題頁(yè)這種邏輯密集的頁(yè)面特別友好。選項(xiàng)式 API 寫(xiě)小頁(yè)面沒(méi)問(wèn)題一旦頁(yè)面里有倒計(jì)時(shí)、答題狀態(tài)、抽題邏輯、提交反饋邏輯就會(huì)散落在各個(gè)生命周期鉤子里用 setup 語(yǔ)法可以把同一塊業(yè)務(wù)的 ref、computed、watch 聚在一起維護(hù)成本低一個(gè)量級(jí)。Pinia 比 Vuex 輕省掉 mutation 這層概念在個(gè)人項(xiàng)目里少寫(xiě)不少樣板代碼。Element Plus 我只按需引入不整包加載避免首屏?xí)r間被組件庫(kù)拖垮。Vite 帶來(lái)的體驗(yàn)提升是感知最強(qiáng)的。以前用 Webpack 啟動(dòng)一套前后端分離項(xiàng)目冷啟動(dòng)十幾秒都是常態(tài)改一行代碼還要等編譯。Vite 基于原生 ESM 實(shí)現(xiàn)按需編譯項(xiàng)目不管多大首啟基本都是秒級(jí)熱更新也是毫秒級(jí)反饋。開(kāi)發(fā)刷題系統(tǒng)要反復(fù)在兩個(gè)頁(yè)面之間跳轉(zhuǎn)調(diào)整樣式這個(gè)體驗(yàn)優(yōu)勢(shì)能省下大量時(shí)間。2.3 接口規(guī)范、權(quán)限模型與跨域處理前后端分離項(xiàng)目能不能順利聯(lián)調(diào)接口規(guī)范起決定性作用。我定義了一個(gè)很簡(jiǎn)單的統(tǒng)一返回包裝類(lèi)后端所有接口出參都是 { code, message, data }業(yè)務(wù)異常通過(guò)全局異常處理器轉(zhuǎn)成對(duì)應(yīng)的 code前端只需要在響應(yīng)攔截器里統(tǒng)一判斷 code。分頁(yè)接口統(tǒng)一接受 page 和 size返回 PageResult里面包含 total、records 兩個(gè)字段避免每個(gè)接口各搞一套返回結(jié)構(gòu)。資源命名走 RESTful 風(fēng)格/api/questions、/api/answer-records、/api/exam-sessions。這類(lèi)系統(tǒng)里面試題目和答題記錄都是完整資源用 RESTful 的方式描述非常自然。前端請(qǐng)求路徑不再出現(xiàn)動(dòng)詞接口語(yǔ)義也更清晰。權(quán)限模型沒(méi)有上 Spring Security而是用 JWT 加攔截器的輕量方案。登錄成功后后端返回一個(gè)包含 userId 和 role 的 JWT前端放在 localStorage 里每次請(qǐng)求通過(guò) axios 攔截器加在 Authorization 頭。后端攔截器對(duì)所有 /api/** 請(qǐng)求做 token 校驗(yàn)管理端接口額外檢查 role 是否為管理員解析失敗或角色不對(duì)直接返回 401 和 403。這套方案對(duì)中小項(xiàng)目完全夠用代碼少也容易讀懂??缬騿?wèn)題我分開(kāi)處理。開(kāi)發(fā)環(huán)境用 Vite 的 proxy 把 /api 代理到后端地址瀏覽器看到的是同源請(qǐng)求不存在跨域。生產(chǎn)環(huán)境用 Nginx 反向代理直接把對(duì) /api 的請(qǐng)求轉(zhuǎn)發(fā)到 Java 服務(wù)同樣不需要后端開(kāi)啟 CORS。這樣處理的好處是減少攻擊面也更貼近真實(shí)線(xiàn)上部署的形態(tài)。而且開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的行為保持一致前端代碼不需要根據(jù)環(huán)境維護(hù)兩套 baseURL排查接口問(wèn)題時(shí)只需要抓 Nginx 日志和 Java 應(yīng)用日志兩處就夠了。3. 數(shù)據(jù)模型設(shè)計(jì)與核心業(yè)務(wù)實(shí)現(xiàn)3.1 數(shù)據(jù)庫(kù)到底建了幾張表我把表控制在六張核心表不建一堆中間表來(lái)增加維護(hù)成本。設(shè)計(jì)原則只有一個(gè)所有后續(xù)要做統(tǒng)計(jì)和推薦的數(shù)據(jù)必須在產(chǎn)生那一刻就能支撐查詢(xún)避免統(tǒng)計(jì)時(shí)到處 join。表名關(guān)鍵字段說(shuō)明userid, username, password_hash, nickname, role用戶(hù)表role 區(qū)分普通用戶(hù)/管理員knowledge_pointid, name, parent_id, weight知識(shí)點(diǎn)樹(shù)weight 表示重要度questionid, type, difficulty, point_id, stem, options, answer, analysis, status題庫(kù)type 區(qū)分選擇題/簡(jiǎn)答題/編程題answer_recordid, user_id, question_id, point_id, difficulty, is_correct, answer_content, use_time, created_at答題流水表業(yè)務(wù)核心wrong_bookid, user_id, question_id, error_count, last_wrong_at, review_status錯(cuò)題狀態(tài)表exam_sessionid, user_id, mode, difficulty, question_ids, status, score模擬面試會(huì)話(huà)表這里我想強(qiáng)調(diào) answer_record 這張表。它本質(zhì)上是一張事實(shí)表每一行代表一次真實(shí)的刷題行為。字段里冗余了 point_id 和 difficulty雖然打破了盡量不冗余的潔癖但對(duì)統(tǒng)計(jì)性能幫助很大按知識(shí)點(diǎn)算正確率時(shí)不需要再回表查 question 表直接 group by point_id 就行。建議在這張表上建立聯(lián)合索引 (user_id, point_id, created_at)這是整個(gè)系統(tǒng)最高頻的查詢(xún)路徑。當(dāng)初如果不建這個(gè)索引統(tǒng)計(jì)數(shù)據(jù)一多接口響應(yīng)時(shí)間會(huì)從毫秒級(jí)一路漲到秒級(jí)。3.2 刷題主流程一次完整答題的數(shù)據(jù)流轉(zhuǎn)一次完整答題的數(shù)據(jù)流轉(zhuǎn)是整個(gè)項(xiàng)目里最核心的一條鏈路。用戶(hù)點(diǎn)開(kāi)始刷題后前端向后端請(qǐng)求推薦題目后端根據(jù)推薦策略返回一道題用戶(hù)提交答案后端判斷對(duì)錯(cuò)寫(xiě)入 answer_record更新掌握度緩存和錯(cuò)題本最后把正確答案、解析和新掌握度返回給前端。提交答案的處理邏輯用代碼寫(xiě)是這樣Transactional public AnswerResult submitAnswer(SubmitRequest request) { Question question questionMapper.selectById(request.getQuestionId()); boolean correct question.getAnswer().equalsIgnoreCase(request.getAnswer()); AnswerRecord record new AnswerRecord(); record.setUserId(request.getUserId()); record.setQuestionId(question.getId()); record.setPointId(question.getPointId()); record.setDifficulty(question.getDifficulty()); record.setCorrect(correct); record.setUseTime(request.getUseTime()); answerRecordMapper.insert(record); masteryCache.evict(request.getUserId(), question.getPointId()); if (!correct) { wrongBookMapper.upsert(request.getUserId(), question.getId()); } return new AnswerResult(question, correct); }注意事務(wù)注解一定不能少。一開(kāi)始我漏了事務(wù)結(jié)果出現(xiàn)用戶(hù)提交答案后answer_record 寫(xiě)入了而錯(cuò)題本沒(méi)有更新的情況自我排查時(shí)非常難受。因?yàn)樵谕皇聞?wù)里要么全部成功要么全部回滾這條鏈路絕不能出現(xiàn)中間狀態(tài)。3.3 錯(cuò)題本與刷題統(tǒng)計(jì)的底層邏輯錯(cuò)題本用 upsert 語(yǔ)義實(shí)現(xiàn)這是一個(gè)容易想錯(cuò)的地方。如果每次答錯(cuò)都 insert 一條錯(cuò)題記錄同一個(gè)題在錯(cuò)題本里會(huì)出現(xiàn)多條展示時(shí)還要去重邏輯非常別扭。正確做法是在錯(cuò)題表里用 (user_id, question_id) 建唯一索引答錯(cuò)時(shí)執(zhí)行存在就累加錯(cuò)誤次數(shù)不存在才插入的更新語(yǔ)句。復(fù)習(xí)狀態(tài)我是用一個(gè) review_status 字段管理的初始值是等待復(fù)習(xí)用戶(hù)把錯(cuò)題重新做對(duì)一次后變成已掌握下次再錯(cuò)再回退。這個(gè)字段我一開(kāi)始沒(méi)想清楚直接把錯(cuò)題表當(dāng)收藏夾用后來(lái)加了字段才讓復(fù)習(xí)一下變成可操作的動(dòng)作。前端在錯(cuò)題本里提供篩選條件只看待復(fù)習(xí)、只看已掌握加上一鍵復(fù)習(xí)按鈕比單純展示所有錯(cuò)題實(shí)用得多。統(tǒng)計(jì)模塊相對(duì)直接。按天刷題量用一個(gè) SQL 就能查出來(lái)SELECT DATE_FORMAT(created_at, %Y-%m-%d) AS day, COUNT(*) AS total FROM answer_record WHERE user_id #{userId} GROUP BY day ORDER BY day;知識(shí)點(diǎn)掌握度統(tǒng)計(jì)類(lèi)似group by point_id 后計(jì)算正確率和答題量前端再用雷達(dá)圖渲染出來(lái)。這套統(tǒng)計(jì)鏈路不復(fù)雜但前提是 answer_record 表的結(jié)構(gòu)一開(kāi)始就設(shè)計(jì)對(duì)數(shù)據(jù)來(lái)源不能亂統(tǒng)計(jì)結(jié)果才有意義。4. 智能推薦策略讓刷題有方向而不是瞎碰4.1 可解釋的推薦比看不見(jiàn)的玄學(xué)推薦更重要說(shuō)到智能很多人第一反應(yīng)是上協(xié)同過(guò)濾或者跑一個(gè)神經(jīng)網(wǎng)絡(luò)模型。但對(duì)這類(lèi)個(gè)人項(xiàng)目來(lái)說(shuō)效果并不好用戶(hù)和題目的交互矩陣極度稀疏冷啟動(dòng)問(wèn)題根本繞不開(kāi)而且推薦結(jié)果無(wú)法解釋用戶(hù)會(huì)困惑為什么給我推這道題。我的設(shè)計(jì)原則是把推薦做成可解釋的。推薦一道題時(shí)前端可以明確展示推薦理由比如你最近關(guān)于二分查找的掌握度偏低推薦完成這道題。這種可解釋性既讓用戶(hù)信服也讓代碼邏輯更好維護(hù)。推薦鏈路只依賴(lài) answer_record 和 knowledge_point 兩張表可控性很強(qiáng)后續(xù)想調(diào)整規(guī)則也只是改一個(gè) Service 的事情。從實(shí)際使用反饋來(lái)看用戶(hù)對(duì)這種知道為什么推題的接受度比我預(yù)期高很多。4.2 掌握度計(jì)算與推薦優(yōu)先級(jí)掌握度是整個(gè)推薦策略的核心指標(biāo)。我不采用簡(jiǎn)單的歷史正確率因?yàn)檎_率沒(méi)法體現(xiàn)時(shí)間衰減很久以前錯(cuò)過(guò)的知識(shí)點(diǎn)如果最近一直做對(duì)應(yīng)該認(rèn)為它正在被掌握。所以用帶時(shí)間衰減的加權(quán)平均核心邏輯如下public double calculateMastery(ListAnswerRecord records) { double sumWeight 0.0; double sumCorrect 0.0; for (AnswerRecord record : records) { double days Duration.between(record.getCreatedAt(), LocalDateTime.now()).toDays(); double weight Math.exp(-days / 7.0); sumWeight weight; sumCorrect record.isCorrect() ? weight : 0.0; } return sumWeight 0 ? sumCorrect / sumWeight : 0.5; }衰減周期設(shè)成 7 天相當(dāng)于一周前的答題權(quán)重衰減到約 37%兩周前基本忽略。這個(gè)參數(shù)我一開(kāi)始是拍腦袋定的但實(shí)測(cè)體驗(yàn)比純正確率平滑很多后來(lái)也就沒(méi)有再調(diào)。需要注意的是掌握度計(jì)算不要放在每次請(qǐng)求里實(shí)時(shí)掃全表正確做法是答題提交時(shí)更新知識(shí)點(diǎn)的掌握度緩存推薦接口直接讀緩存。推薦優(yōu)先級(jí)分三層。第一層是最薄弱知識(shí)點(diǎn)下、且重要度 weight 高的未做題目直接強(qiáng)推薦。第二層是掌握度在 0.4 到 0.6 之間的知識(shí)點(diǎn)說(shuō)明處于邊界狀態(tài)需要加強(qiáng)。第三層是近期完全沒(méi)有刷過(guò)題的知識(shí)點(diǎn)用隨機(jī)池?fù)埔粌傻纴?lái)保持覆蓋面。每次后端生成一個(gè)候選題池在池內(nèi)隨機(jī)選一道返回避免用戶(hù)連續(xù)刷到同一題。這套規(guī)則我用一個(gè)策略接口封裝每層策略只負(fù)責(zé)篩選候選題后面想加按崗位過(guò)濾或者按題目熱度排序也只是新增策略類(lèi)的問(wèn)題。4.3 模擬面試與智能組卷的輕量實(shí)現(xiàn)模擬面試模式是為了給用戶(hù)一個(gè)完整的作答節(jié)奏。用戶(hù)選擇崗位方向和難度后后端按知識(shí)點(diǎn)權(quán)重進(jìn)行配額抽題保證一套試卷覆蓋多個(gè)知識(shí)點(diǎn)而不是全抽到同一個(gè)點(diǎn)。組卷邏輯聽(tīng)起來(lái)復(fù)雜落實(shí)下來(lái)其實(shí)就是一個(gè)按知識(shí)點(diǎn)配額的抽樣算法先算出每個(gè)知識(shí)點(diǎn)要抽多少題再?gòu)脑撝R(shí)點(diǎn)的題目池里隨機(jī)抽抽過(guò)的題要放到排除集合里避免重復(fù)。核心思路用代碼寫(xiě)是這樣MapLong, Integer quotaMap buildQuotaMap(knowledgePoints, totalCount); for (Map.EntryLong, Integer entry : quotaMap.entrySet()) { ListQuestion pool questionMapper.selectByPointAndDifficulty( entry.getKey(), difficulty, excludedIds); selected.addAll(randomPick(pool, entry.getValue())); }選擇題提交后立刻自動(dòng)判分簡(jiǎn)答題初版采用關(guān)鍵詞匹配評(píng)分把參考答案里預(yù)先標(biāo)注的核心關(guān)鍵詞和用戶(hù)答案做包含比對(duì)按命中率給分編程題因?yàn)樵诰€(xiàn)判題工程量太大第一版只展示參考答案讓用戶(hù)自評(píng)。分?jǐn)?shù)統(tǒng)計(jì)和面試報(bào)告仍然完整生成用戶(hù)可以翻看每個(gè)知識(shí)點(diǎn)的表現(xiàn)。5. 前端落地與體驗(yàn)打磨5.1 SPA應(yīng)用的結(jié)構(gòu)規(guī)劃前端項(xiàng)目結(jié)構(gòu)按照視圖、狀態(tài)、網(wǎng)絡(luò)三層來(lái)劃分。src/views 只放頁(yè)面組件src/stores 放全局狀態(tài)src/api 統(tǒng)一封裝網(wǎng)絡(luò)請(qǐng)求。API 層不對(duì)業(yè)務(wù)頁(yè)面暴露 axios 實(shí)例只暴露 getQuestionById、submitAnswer 這樣的語(yǔ)義化方法。頁(yè)面組件里不出現(xiàn)任何請(qǐng)求方法邏輯只認(rèn) store 和 api 層的返回值。views 下目前有 Login、Dashboard、QuestionBank、Practice、MockInterview、Stats、AdminQuestion、AdminKnowledge 這些頁(yè)面。路由用 Vue Router 管理菜單和路由表一一對(duì)應(yīng)用戶(hù)端和管理端通過(guò)不同的路由前綴和導(dǎo)航菜單隔離。目錄結(jié)構(gòu)清爽之后新加頁(yè)面很少會(huì)牽扯到舊代碼這個(gè)收益在開(kāi)發(fā)到中后期體現(xiàn)得非常明顯。5.2 登錄態(tài)與路由守衛(wèi)的處理前后端分離最容易出問(wèn)題的是登錄態(tài)。我的處理方案是token 同時(shí)存在 localStorage 和 Pinia 里頁(yè)面刷新時(shí)從 localStorage 恢復(fù)保證刷新后不丟登錄狀態(tài)。axios 請(qǐng)求攔截器統(tǒng)一在請(qǐng)求頭里加 Authorization響應(yīng)攔截器遇到 401 時(shí)清掉用戶(hù)狀態(tài)并跳轉(zhuǎn)到登錄頁(yè)。核心代碼http.interceptors.request.use(config { const userStore useUserStore() if (userStore.token) { config.headers.Authorization Bearer ${userStore.token} } return config }) http.interceptors.response.use( res res.data, err { if (err.response?.status 401) { useUserStore().logout() router.push(/login) } return Promise.reject(err) } )路由守衛(wèi)是第二道防線(xiàn)。在 beforeEach 里判斷如果訪(fǎng)問(wèn)的是需要登錄的頁(yè)面且本地沒(méi)有 token直接跳登錄頁(yè)。要注意把登錄頁(yè)、注冊(cè)頁(yè)加入白名單否則會(huì)出現(xiàn)登錄時(shí)跳轉(zhuǎn)登錄頁(yè)的循環(huán)問(wèn)題。這個(gè)坑我踩過(guò)表現(xiàn)形式是用戶(hù)輸完賬號(hào)密碼剛要點(diǎn)登錄頁(yè)面就被守衛(wèi)踢回登錄頁(yè)現(xiàn)象非常詭異排查了幾分鐘才發(fā)現(xiàn)是白名單漏配導(dǎo)致的。5.3 從交互細(xì)節(jié)到性能優(yōu)化性能優(yōu)化我做了五件事。組件庫(kù)按需引入用 Vite 的插件自動(dòng)把未使用的 Element Plus 組件搖掉路由懶加載每個(gè)頁(yè)面拆成獨(dú)立 chunk初始加載只下載首屏資源題目列表用分頁(yè)加條件篩選不做一次性全量加載ECharts 圖表按需引入只注冊(cè)用到的雷達(dá)圖和熱力圖模塊長(zhǎng)列表的統(tǒng)計(jì)頁(yè)用虛擬滾動(dòng)避免幾千個(gè)節(jié)點(diǎn)同時(shí)渲染。交互細(xì)節(jié)上答題頁(yè)最值得打磨。選項(xiàng)點(diǎn)擊后要有即時(shí)選中態(tài)提交過(guò)程中按鈕置灰防重復(fù)提交倒計(jì)時(shí)離開(kāi)頁(yè)面時(shí)銷(xiāo)毀定時(shí)器防止內(nèi)存泄漏。還有一個(gè)容易忽略的點(diǎn)用戶(hù)從刷題頁(yè)跳到別的路由再回來(lái)答題狀態(tài)要能恢復(fù)我通過(guò)把當(dāng)前題目ID和已選答案存在 Pinia 里來(lái)解決。這些細(xì)節(jié)不復(fù)雜但用戶(hù)感知非常明顯也是產(chǎn)品打磨和半成品之間的核心差別。6. 部署實(shí)戰(zhàn)與高頻踩坑記錄6.1 Nginx Spring Boot 的部署組合部署方案很簡(jiǎn)單后端打成 jar 包用 systemd 守護(hù)進(jìn)程跑在 8080 端口前端 npm run build 后把 dist 目錄扔給 Nginx。Nginx 同時(shí)承擔(dān)靜態(tài)文件服務(wù)和反向代理配置如下server { listen 80; server_name your-domain.com; root /var/www/dist; index index.html; location /api/ { proxy_pass http://127.0.0.1:8080/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location / { try_files $uri $uri/ /index.html; } }這個(gè)配置有兩個(gè)容易踩的坑。一個(gè)是 proxy_pass 后面的路徑因?yàn)楹蠖私涌谝彩?/api 開(kāi)頭所以保留了 /api/ 后綴避免路徑拼接錯(cuò)誤另一個(gè)是 try_files 的 fallback 一定要落到 /index.html否則前端路由刷新時(shí)會(huì)出現(xiàn) 404。生產(chǎn)環(huán)境上線(xiàn)后我還加了 systemd 的自動(dòng)重啟機(jī)制Java 進(jìn)程如果意外退出會(huì)被自動(dòng)拉起來(lái)省掉半夜爬起來(lái)重啟服務(wù)的情況。6.2 典型問(wèn)題與排查速查表我把上線(xiàn)前后遇到的高頻問(wèn)題整理成一張表基本覆蓋了這個(gè)項(xiàng)目里出現(xiàn)過(guò)的所有典型故障?,F(xiàn)象原因解法頁(yè)面刷新后回到登錄頁(yè)沒(méi)有從 localStorage 恢復(fù) token初始化時(shí)從 localStorage 寫(xiě)入 Pinia401 后循環(huán)跳轉(zhuǎn)登錄頁(yè)白名單配置漏了登錄頁(yè)在路由守衛(wèi)里顯式放行 /login接口返回跨域錯(cuò)誤開(kāi)發(fā)代理沒(méi)配置Vite proxy 指向正確后端地址直接訪(fǎng)問(wèn)異步路由刷新 404Nginx 沒(méi)有 fallback配置 try_files $uri $uri/ /index.html錯(cuò)題本出現(xiàn)重復(fù)記錄沒(méi)有唯一索引 / 沒(méi)做 upsert加聯(lián)合唯一索引改 upsert SQL統(tǒng)計(jì)圖數(shù)據(jù)比實(shí)際少事務(wù)未提交或條件不一致統(tǒng)一使用 created_at 并按天分組模擬面試出現(xiàn)重復(fù)題目組卷抽樣沒(méi)有排除已選題用排除集合記錄已選題目 ID這些坑基本都屬于知道原理后一分鐘解決不知道原理要查半天的類(lèi)型。我把它們寫(xiě)進(jìn)項(xiàng)目 README 的部署清單里后面維護(hù)或給其他人接手時(shí)會(huì)省掉很多溝通成本。6.3 做完這個(gè)項(xiàng)目我才明白的幾件事第一接口設(shè)計(jì)比實(shí)現(xiàn)接口更花時(shí)間但收益最大。我前期把接口文檔定義清楚后前后端開(kāi)發(fā)幾乎不需要互相等待遇到的返工也比以往項(xiàng)目少很多。第二數(shù)據(jù)表設(shè)計(jì)決定功能上限。answer_record 冗余字段這個(gè)決定讓后面的統(tǒng)計(jì)、推薦、錯(cuò)題分析都變得簡(jiǎn)單如果當(dāng)時(shí)圖省事不冗余現(xiàn)在每個(gè)統(tǒng)計(jì)接口都要回表 join性能和可讀性都會(huì)下降。第三前后端分離不是為了炫技它帶來(lái)的真正價(jià)值是讓用戶(hù)端、管理端、未來(lái)可能的客戶(hù)端共享一套業(yè)務(wù)能力把重復(fù)代碼壓縮到最低。最后再分享一個(gè)經(jīng)驗(yàn)。這個(gè)項(xiàng)目最有價(jià)值的不是某個(gè)頁(yè)面寫(xiě)得多漂亮而是那套刷題記錄—掌握度計(jì)算—推薦的數(shù)據(jù)鏈路。你在實(shí)現(xiàn)類(lèi)似系統(tǒng)時(shí)不管智能功能做多深都要先把 answer_record 這張事實(shí)表設(shè)計(jì)好讓它能完整表達(dá)每一次刷題行為。數(shù)據(jù)扎實(shí)了后面加規(guī)律提醒、加復(fù)習(xí)計(jì)劃、加任何智能玩法都只是在一個(gè)穩(wěn)定的地基上添磚加瓦。我做完這個(gè)項(xiàng)目后再刷題最大的變化是心里清楚自己到底該補(bǔ)哪一塊而不是憑感覺(jué)亂翻題庫(kù)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丁香综合久久| 久久最新色色色| 色播五月综合网| 超碰二区| 伊人久久大香| 亚洲婷婷性爱| 伊人91| 国产一级婬片毛片| 激情五月开心五月在线视频| 91在线看免费 九九九九| 亚洲精品国产setv| 丁香五月欧美午夜视频| 99热这里只有精品2| 成人AV在线电影| 婷婷五月天av小说| 婷婷六月激情综合| 亚洲激情四射色| 五月天开心色情网| 色婷婷先锋| 六月丁香五月亭亭| 色婷婷五月基地在线| 丁香五月大香蕉AV| 99精品视频推荐| 激情五月婷婷| 91九色在线| 色色网站在线| 韩国天天婷婷| 深情五月天| 激情五月丁香综合蜜桃| 激情视频婷婷五月花| 色yeye色综合| 久久九九99桃花视频| 中国丰满熟女A片免费观| 中文字幕,综合,91| 都市激情五月婷婷亚洲| 99国产性感视频| 五月婷婷干干干| 六月婷婷香蕉| 日本婷久久| 婷婷五月天性爱视频| 亚洲熟妇AV乱码在线观看| www狠狠| 欧美综合激情丁香五月六月婷| 开心四月婷婷在线色播播| 2017狠狠干| www91色网站| 日本人妻伦在线中文字幕| 久久这里只有精品8| 蜜臀99精品| 日日舔夜夜操| 色色色色色色色色色色色色色97| www.久久爱.com| 五月天婷婷视频| 婷婷六月久久综合导航| 天天做天天爱天天爽| 欧美综合激情五月天| 亚洲va日| 成年人99热| 天天做天天要天天爽| 亚洲美女婷婷五月天| 九九热黄色| 97综合在线| 丁香六月婷婷综合激情欧美| 色99视| 六月丁香婷婷拍拍| 久久婷婷丁香六月天| 插插五月天| 激情五月天小说视频| 色婷婷色情| 丁香5月婷婷| 一级A片天天操夜夜操| 九九热短视频在线观看| 婷婷大乡焦噜噜| 成人五月天丁香婷| 色逼综合网| 国产操B| 热99.com婷婷| 日本色婷婷| 激情文学 综合 色| 五月天成人小说| 91色在线 | 日韩| 中文字幕AV网址| 深爱激情六月天| 日本欧美成人片AAAA| 八戒青柠影视剧在线观看| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 亚洲久久视频| 中文字幕 中文字幕明步| 久久99热这里只频精品6学生| 婷婷97碰碰| 五月婷婷av| 国产精品日本一区二区在线播放 | 人妻丰满精品一区二区A片| 岛国在线观看91| 97久久超视频| 开心婷婷五月花| 久久人妻www| 爱操人妻| 天天网曰日曰夜夜综合永久免费| 丁香五月天殴美激情| 婷婷中文字暮| 香蕉人妻AV久久久久天天| 五月天基地| 亚洲综合激情五月久久| 日韩一区二区A片免费观看| 丁香99| 久久精品63| 啪啪日本欧美| 草综合网| 久久五月激情综合| Av在线资源| 色婷婷久久久| 婷婷六月色开 | 超碰精品在线| 天久久久久| 99热欧| 久久性爱视频网站| 超碰五月婷婷五月天| 五月婷精品| 操你av| 五月天堂色| 五月丁香花激情啪啪网| 精品皮股午夜AV| 情色五月天网站| 99天天操夜夜操| 亚洲精品无码久久| 婷婷五月丁香六月| www..999热久| 五月婷婷丁香五月 | 婷婷九月激情| 五月天激情小说| 99久久玖玖| 婷婷爱五月天人人爱| 日日操天天操| 蜜臀A∨在线水帘洞| 久久五月丁香婷婷| 亚洲成人一区| 九九热只有精品| 欧洲精品爱爱| 成人综合视频在线| 久久伊人婷婷| 99热99在线| 久久丁香社| 五月花婷婷丁香| 亚洲精品字幕| 激情色视频| 亚洲精品a成人在线播放| 中文网AV| 免费无码毛片一区二区A片| 天天情天天狠天天透| 操逼三区| 天天色天天搡| 色五月亚洲| 99er这里只有精品视频| 91欧美| 激情综合综合综合| 成人无码髙潮喷水A片| 久久五月天婷婷视频| 五月激情视频| 色色婷婷综合网| 色婷激情网| 99热这里有精力| 亚洲欧洲中文日韩久久AV乱码| www.99热精品99.com| 婷婷五月无码| 性做久久久久久久免费看| 久久人人看| 丁香六月啪| 丁香九月综合激情| 99久久6| 久热黄色| 久久精彩免费视频| 色色色色色网站| 久久99大| 婷婷亚洲天堂| 五月丁香六月激情网| 天天做天天爱天天高潮| 九九热经典视频在线观看| 色黄啪啪| 婷婷五月丁香六月| 激情综合网激情五月丁香| 丁香五月婷婷国产av| 五月丁香 啪啪啪| 日韩中出视频| 亚洲九区| WWW,婷婷,COM| 99操逼| 色优久久| 五月丁香六月婷婷色情| 性色播| 色和综合网| 夜夜骑夜夜操| 99热20| 嫩草视频| 中文字幕无码人妻少妇免费视频| 婷婷丁香五月亚洲| 丁香六月婷婷五月天| 日本色色影片| 综合色久| 五月丁香亭亭| www激情网| 中文网婷婷字幕婷| 激情内射人妻1区2区3区| 另类综合婷婷五月天欧美视频| 久久综合首页| 亚洲成人日韩无码精品| 丁香五月欧美| 99在线精品视频| 六月亚洲婷婷6月中文字幕| 51精品国自产在线| 五月天精品视频| 婷婷五月骚厕所| 久久久久久97| 婷婷综合在线视频| 国产一级视频a| 婷婷六月啪啪| 五月亭亭直播| www.五月丁香av| 五月丁香成人| 百度4399有码精品V在线观看| 婷婷久久五月| 九色婷婷| 99re热在线观看| 丁香五月天无码| 九色婷婷| 色播婷婷大香蕉| 婷婷五月丁香亚洲| 国产精品久久久久久久久久免费| 久久久精品色| 亚洲色碰| 99爽视频| 五月天丁香网站| 影音先锋人妻出差| 伊人婷婷五月天av| 日批在线看| 五月婷视频久久| 色婷久| 9视频在线成人网站| 日日夜夜干| 狠狠爱婷婷爱| 99视频在线| 丁香五月婷婷av| 日韩在线五月天婷婷| 成人操呦av| 日韩高清成人| 久久综合综合久久| 色婷婷视频| 1024婷婷综合久久五月天| 在线免费视频caop| 丁香五月婷婷五月基地| 丁香色情五月综合激情| 精品婷婷丁香五| 男女啪啪做爰高潮无遮挡| 丁香六月综合激情| 无码人妻丰满熟妇奶水区码| 91 影音先锋| 国产伦亲子伦亲子视频观看| 亚洲色无码A片一区二区麻豆| 99视频在线精品| 大香蕉九九| 久久人人超| 人人妻人人澡| 色播五月| 婷婷中合| 97色操| 99久久97久久欧美综合网| 日日噜噜久久婷婷五月天| 狠狠色婷| 激情视频91| 久久婷婷综合基地| 婷婷六月丁香综合| 99视频一区| 婷婷丁香色五月久久88| 色婷婷AV在线| 亚洲中文字幕网| www五月| 九九热精品在线| 午夜色婷婷| 任你爽视频| 日本人妻伦在线中文字幕| 第四色在线观看| 天天日天天肏天天奸| 天堂呦 呦百度搜索-百度搜索| 丁香深五月婷婷| 色噜噜五月丁香婷婷| 五月 成人 婷婷| 9久热| 色婷婷91激情小说| 丁香五月天的网址。| 中文av网站| 色婷婷综合久久久久| 超碰狠狠操| 国产亚洲精品AAAAAAA片| 激情操逼婷婷| 久久久大香蕉| 亚洲综合在线丁香五月| 99久久网站| 色999五月色| 成人草榴视频| 99久热| 婷婷成人综合五月| 无码啪啪| www.com在线操视频免费观看| 九九99热| 激情五月亚洲| 九九热最新| 在线sebiav精品视频| 玖玖婷婷五月天| 婷婷丁香亚洲五月天| 婷婷五月花| 一级黄色影片| 丁香五月欧美色综合| 久久亚洲网| 久久婷婷夜| 色婷婷五月天中文字幕| 日本色五月| 人妻AV在线| 香蕉五月婷婷| 狠狠干在线视频| 五月天激情啪啪| 成人无码髙潮喷水A片| 人妻激情网| 激情综合啪啪啪| 五月天亚洲色| 婷婷丁香六月天| 九九热欧美| 99视频这里只有久久精品| 色婷婷免费视频| 天天干天天日蜜臀av| 欧美99热| 看全色黄大色大片| 日本久久极品| 亚洲成人va| 色色五月婷| 99日精品视频| 婷婷五月天成人网| 在线91日韩| 高清无码中文字幕aVDV| 色五月情| www天天干| 久久精品99| 热九九九九| 99热精品一区| 少妇高潮呻吟A片免费看软件| 免费亚洲婷婷中文字幕| 色玖玖综合网| 久久精品五月天| 丁香婷婷色| 久久免费高| 五月天婷婷激情干干| 美女五月天| 五月天丁香婷| 欧美99热| 天天看A片| 欧洲色色| 亚洲最大在线| 精品人妻伦一二三区久久| 婷婷五月综激情| www.色五月| 五月丁香六月婷婷综合| 玖玖午夜视频| 国产 亚洲 在线| www.久久爱.com| 高清国产AV| 色五月婷婷网| 久热大香蕉| 亚洲综合网 665566| 日本高清久| 婷婷午夜精品久久久| 91碰超| 亚洲成人在线综合| 五月婷婷综合激情网| 91久久久久久久久18| 4399在线日本A片| 中文资源在线a | 性一交一乱一交A片久久四色| 丝袜激情网| 五月天婷婷网站888| 五月天天综合| 99热只有精品在线播放| 色伦专区97中文字幕| 开心五月婷婷激情网| 日B日潘金莲BB| 色情五月天婷婷| 久久久久久婷| 色情五月综合婷婷| 色五月亚洲五月天| 大香蕉人人网| 人人草人人爱| 国产伊人大香蕉| 五月天偷拍| 九九综合| 久久无码成人| 亚洲成人av在线| 亚洲一个色| 亚洲国产精品VA在线看黑人| 激情综合五月婷婷丁香| 婷婷五月四狠狠| 欧美日本韩国亚洲| 激情性爱五月| 婷婷丁香五月激情图片| 色婷婷激情五月天| 精品夜夜澡人妻无码AV| 亚洲人成色A777777在线观看| 婷婷视频网| 欧美人与性动交CCOO| 婷婷五月丁香综合人妻| 亚洲思思热久| 综合 蜜月 婷婷| xxxx五月| 国产免费av在线| 亚洲激情婷婷| 可以免费观看的av| 开心五月丁香啪| 久热91精品| 亚洲中文字幕av| 五月天久久网站| 97福利视频| 中文AV网站| 日日干天天爽| 天天天天操| 六月婷婷之青青草| 99色干| 综合福利网| 亚洲永久免费| 日日夜夜干| 操嫩逼电影| AV在线免费网站| 丁香五月亚洲综合丝袜| 激情丁香五月婷婷| 亚洲中文av| 少妇人妻综合色6699| 天天艹天天综合网| 久9无码视频| 伊人久久丁香狠狠婷婷综合香蕉 | 一区中文字幕电影| 欧美色一级色| 欧美色五月| 伊人狠狠丁香婷婷综合尤物| 很很干天天干| 六月丁香社区| 一本伊人色婷| 丁香五月在线视频黑人| 情婷婷五月天在线| 操操操操操操婷婷五月天| 大香蕉75线| 久久5 9视频免费观看| 亚洲综合婷婷| 色五月天婷婷| 五月天激情亚洲| 五月婷婷色播| 欧美综合123区| 五月婷婷在线免费| 色色com| 丁香婷婷在线| 亚洲va欧洲va国产va不卡| 爱草视频在线| 色婷婷色情| 天天色综合色色色色色。| 五月丁香黄色视频| 深夜男女福利刺激影院一区| 97人人干人人操| 久久激情五月天| 中文成人在线| 婷婷亚洲影院| 青青草五月天| 中文字幕按摩做爰| 国产肥白大熟妇BBBB视频 | 丁香五月六月| 色婷婷六月天| 99无码精品| 丁香六月婷婷久久综合| 成人做爰高潮A片免费视频| 激情婷婷| 99视频综合| www.韩日视频| 激情综合色婷婷啪啪六月天| 96丁香六月婷婷蜜桃综合久久| 好看的国产精品| 超碰激情网| 久久五月天色婷婷| 国产性色蜜乳| 亚洲最大视频| 成人视频一区| 大战熟女丰满人妻AV| 9久久狠狠的| 丁香婷婷六月| 色婷婷丁香九月| www.五月婷婷| 成人网站免费sxj| 热婷婷av| 激情综合网激情五月天| www.天天色综合| 婷婷丁香第一页| 天天免费日日夜夜夜夜| 1024操逼视频| 午夜少妇在线观看视频| 五月婷婷 自拍| 日本WWW九九九| www.zbzhongsen.com| 激情校园 亚洲| 丁香婷婷五月基地| 99啪啪视频| 思思久久99热只有频精品66| 激情淫乱男女| 干亚洲天堂| 五月天 另类图片| www.久久爱.com| 久久激情五月婷婷| Caoub青青超碰 | 四色AVwww| 色综合久久天天综合网| 国产黄色在线观看| 97干视频| 99热99热不卡| 婷婷五月天综合网| 婷婷亚洲久久| 深爱激情九九五月天 | 97色在线视频| 久久婷青青草原| 91色涩| 新五月天婷婷激情电影| 婷婷五月天色色| 亚洲无码性爱| 99视频久久免费视频| www.久热| 丁香婷婷老熟女综合网| 婷婷色激情网| 丁香婷婷五月综合| 久久九九Com| 色婷婷久久| 婷婷瑟瑟五月天| 99色天堂| 97人妻碰碰中文无码久热丝袜| 亚洲狠狠狠| 色婷婷五月天偷拍| 天天综合五月天| 色宗合久久五月婷婷| 五月婷婷激情综合| 99色日本| 欧美黄色AA片哗啦啦啦| 五月婷婷六月激情| 婷婷五月天va| 99精品综合视频| 丁香婷婷超碰 | 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 五月天色导航婷婷资源婷婷| 中文字幕在线免费| 伊人色综合久久久| 日韩黄色电影| 久久激情五月天| 97久久婷婷色| 天天狠狠婷婷在线| 亚洲五月停停| 依人大香蕉在钱1| www.色五月| 深爱五月激情| 大香蕉丁香婷婷| 激情五月婷黄版| 五月天婷婷小说| 天天搞天天色综合| 婷婷狠狠爱| 五月在在观看| 亚洲熟女色| 成人做爰高潮A片免费视频| 欧美黄色AA片哗啦啦啦| 日日日影院| 大香蕉啪啪啪| 婷婷久久大香蕉| 99久久精品色老| www.超碰在线| 日韩狠狠色| 午夜激情久久| 夜夜干夜夜操| 久久探花91swag| 丁香六月天婷婷开心综合| 九九久久综合| av在线超清中文| 天天操天天操天天操天天操天天操 | 久久只有18视频| 色婷婷久久综合| 色欲av伊人久久大香线蕉影院| 丁香色成人| 99久在线观看| 9er热在线精品视频| 五月丁香六月婷婷网| 久久久18| 婷婷成人综合五月| 婷婷六月天| 激情五月天网站| 99re热99| 日韩成人精品中文字幕| 伊人久久五月天| 久久久久久久久久久久63| 久色激情| 丁香五月天激情网址| 九九视频在线观看视频6 | 激情综合网激情五月网| 一区操| 色情五月婷| a在线观看| 九九综合| 另类综合色| 五月丁香婷婷色色| 熟女强人妻一区二区三区四区无| 久久久久丁香婷婷五月天| 夜夜躁婷婷AV| 人妻丰满精品一区二区A片| 丁香五月,激情五月,深爱五月| 91日综合欧美| 五月天偷拍| 婷婷香五月综合激情| 久久的爱大香蕉| 人妻啪啪啪| 婷婷六月激情丁香| 九洲一级A片| 国产成人片| 色五月色五天免费视频| 色情性爱视频网址| 中文字幕不卡视频| 99色视频| 婷婷久久五月天丁香| 久久AV无码精品人妻系列试探| 色色网五月激情| 亚洲成人免费在线| 26uuu成人网| 五月伊人网| 亚洲丁香网| 人人操AV| 亚州色综合| 九九性视频| 五月天偷拍| 无码激情精品色婷婷久久久久| 国产精品丝| 亚洲精品无AMM毛片| 99在线免费视频| site:ornaments52.com| 99re最新地址视频| 婷婷五月丁香超碰| 大鸡巴伊人网| 欧美69久成人做爰视频| 99久久九九| 91婷婷五月天嫩女| 九九热视频免费观看| 国产精品久久久久久白浆色欲| 99视频综合网| 国产精产国品一二三在观看| 婷婷综合激情| 欧美99热| 超碰网站在线观看| 婷婷激情五月综合| 五月停停丁香| 狠狠色婷婷丁香六月| 久久久999精品| 亚洲五月天色色| 婷婷狠狠综合网入口| 成人精品在线| 青青草成人网| 99热超碰| 久久色区| 91视频一起草| 婷婷五月天激情电影| 五月天精品视频| 欧洲综合色| 色五月丁香激情| 夜夜骑日日操| 天天成人综合| 五月天成人伊人| 五月开心婷婷中文字幕| 丁香五月婷婷久久综合激情网 | 思思热在线观看| 开心久久五月天| 国产综合视频婷婷| 久久色天堂| 97人人搞| 异能之下短剧免费观看全集| 噜噜噜噜婷婷五月天| av大香蕉| 亚洲热手机在线观看| 九九九精品视频免费观看| 色婷婷久久综合| 亚洲综合1024| 99色综合网| 无码一区二区日韩| 深爱激情小说五月婷婷| 国产美女精品| cc精品国产性传播| 色婷婷狠狠18| 99热精品99| 五月丁香六月婷| 婷婷社区五月天| 激情小说五月天| 大战熟女丰满人妻AV| 九八Av| 无毒黄色网址| 久久久五月婷婷| 五月天综合在线| 欧洲亚洲免费视频区| 婷婷天天综合| www.99热这里精品| 91精品91久久久中77777| 开心激情站| 国内一级片| 人人操人| 97碰久久| 五月丁香激情综合欧美| 五月婷婷激情久久| 91久久久久久久久18| 中文字幕 码精品视频网站| 九九99久久精品| 久久久久五月丁香| 激情九月婷婷| 色婷五月| 激情六月丁香| 欧洲MV日韩MV国产| 五月天伊人久久久久| 1024人妻| 亚洲亚洲永久无码777777| 97影院一级片| 精品二区| 色综合色五月| 亚洲久热无码| 激情五月综合网| 91色综合网站在线| 婷婷六月激情| 丁香五月中文字幕久色| 99操碰| 久操香蕉| 思思热国产视频| 久久五月天激情| 激情五月婷婷五月| 五月丁香偷拍| 天天日日天天| 亚洲啪啪视频| 久久久日韩特色特黄AAAA| 9久热| 亚洲日韩欧美综合VA| 玖玖在线视频| 婷婷五月天午夜激情影院| 五月视频日本免费观看| 六月婷婷五月丁香| 超碰99热精品在线| 综合久久婷婷五月丁香| 亚洲熟妇无码乱子AV电影| 天堂成人A片永久免费网站| 激情久久久久久久久| 99热只有精品在线观看| 五月婷婷成人| 超碰av天堂| 色五月丁香五月婷婷五月成人网| 亚洲超碰在线| 久久网日本| 婷婷五月天精品| 风流少妇A片一区二区蜜桃| 91尤物九色在线| 直接看的AV| 久久丁香综合香蕉| 色婷婷最爱五月| 中文字幕成人| 久久精品综合色| 天天爽天天干天天| 免费黄网不卡AV| 欧洲婷婷五月天| 激情AV| 久久伦乱| 久久视频婷婷| 丁香五月婷婷色偷偷| 天天色综合网吨吧| 琪琪色网在线| 五月丁香六月婷婷玖玖| 99视频| 777久久综合视频| 天天色天天| 丁香五月综合| 丁香五月婷婷啪啪| 婷婷六月啪啪| 激情综合婷婷| www超碰| 大香网伊人久久综合| 欧美大香蕉视频| 男女免费视频999| www.五月天色色色| 91九色欧美| 婷婷久久免费| 噜噜噜狠狠色综| 综合久久综合久久| 丁香久久| 亚州精品色情在线观看| 无码日本精品XXXXXXXXX | 婷婷五月天成人动漫 | 久久av电影| 激情都市另类| 丁香婷婷激情网站| 丁香熟女乱| 五月天综合网| 亚洲AV成人片无码网站| 精品人妻久久久久久| 人人爱干人人爱草| 四川BBB搡BBB爽爽视频| 热99只有里视频| 久色大香蕉| 久久久久人妻| 中文字幕在线日亚州9| 99热这里只有精品在线观看| 欧美在线骚货| 丁香五月婷婷社区| 六月婷婷色综合| 五月婷婷偷拍| 色综合色色| 免费试看小视频 99| 亚洲一二三网| 色丁香五月| 可以免费观看的av网址| 色婷青青| 久久怡红院| 亚洲成人网无码| 五月天婷婷综合色| 97色色综合| 4399在线观看免费高清电视剧| 无码少妇高潮喷水A片免费| 国产婷婷色综合AV蜜臀AV| 超碰二区| 日韩黄色中文字幕| 99热亚洲| 亚洲激情免费久久| 伊人大香久久| 五月天国产| 天天日天天干天天插天天射| 狠狠爱婷婷爱| 国产视频色色色色色色色| 99精品免费视频| 婷婷激情丁香五月婷婷激情丁香五月婷婷| 久cao香蕉影院| 美女网黄| 色婷婷激情五月天在线观看| 91热99| 九九色插| 五月激情小说| 舔色婷婷| 第六色在线| 日韩色五月| 婷婷色色综合| 丁香五月婷婷色| 欧美婷婷色五月| 五月天激情综合网俺也去| 爱iii做iiii日| 六月丁香啪啪| 丁香五月六月综合欧美| 色。 婷婷婷| 婷婷五月天综合久久| 九九亚洲天堂| 狠狠干婷婷| 五月婷婷在线视频观看| 伊人丁香五月| 99精品久久| 色月丁| 国产av一区二区三区| 婷婷永久在线| 色五月丁香五月| 伊人干练久| 99久久亚洲精品视频| 夜夜爱爱亚洲| 五月天丁香久久综合| 97色色视频| 六月婷婷综合激情| 天天插天天插天天插天天插| 亚洲狠狠婷婷综合久久久| 97人妻碰碰碰久| 偷拍九九五月丁香婷婷| 精品国婬伦V无码久久久| 久久久久9| 91啪啪视频| 色婷久| 天天摸天天做天天爱天天爽| 日日肏天天操| 激情五月天之五月婷婷| 欧美婷婷六月丁香综合色| 五月婷婷久久大香蕉| 丁香六月av| 依人大香蕉在钱1| 俺也去五月婷婷丁| 国产精品久久久久久久久久久久| 色99在线视频| 色婷婷亚洲婷婷| 九九久久五月天| 日韩色久| 97热这里精品在线视频| 色九月婷婷丁香| 婷婷五月综合啪| 日日夜夜天天| 91凹凸在线| 色婷婷丁香五月| 五月天六月色| 色色色色网| 五区毛片七区毛片| 深爱激情69热| 丁香桃色网| 丁香五月色欲| 可以直接看的av| 美女妹子后射视频网站在线观看| 激情小说 五月天| 亚洲色无码| 亚洲综合色五月| 婷婷五月骚厕所| 六月婷婷色宗合| 色久免费| 伊人五月天日日夜夜久久久天天| 99久热| 色婷婷五月综合| 九九久久精品| 色婷婷大香蕉| 五月天婷婷久草丁香| 91丨九色丨老熟女激情| 99热热热天天人人人超超碰| 色图亚洲91| 日本 色综合| 9月色婷婷| 国产ava| 五月激情丁香五月| 最新日本A片| www.com操| 激情綜合W W W,激情五月天| 可以看的AV网站| 综合激情在线视频| 九九色影院| 九九热在线精品视频| 五月丁小婷婷激情四射| 色开心五月婷婷丁香HD| 天天搞天天色综合| 91丨九色丨熟女高潮| 天天日夜夜B久久| 激情九九综合网| 五月婷婷婷| 久久婷婷精品| 亚洲高清在线| 玖玖九九9999在线观看视频精品| 1024婷婷综合久久五月天| 国産精品| 丁香久久五月天视频在线观看| 久久性爱视频久久性爱视频| 九热...av| 三男玩一女三A片| 五月丁香亭亭激情操逼网| 五月激情射| 九九热这里只有精品556| 色色亚卅| 97碰碰视频在线观看| 婷婷综合网站| 9久热在线精品| 噜噜干日本| 天天日夜夜爽。| 亚洲精品国产成人AV在线| 99久热| 97婷婷狠狠久久综合9色| 国产精品大香蕉| 亚洲综合色棒| 亚洲人人操| 中文超碰视在线| 狠狠色丁香| 婷婷六月插屄激情| 激情综合网五月| 婷婷综合丁香| 91九色精品女同系列| 丁香5月婷婷| 激情婷婷六月天| 五月丁香 狠狠爱| Se.婷婷五月天| 五月婷婷在线播放| 成人做爰A片免费看视频| 七七色色综合| 手机AVAV天堂看网| 色五月激情婷婷| 伊人久久丁香狠狠婷婷综合香蕉 | 天天操夜夜爽| 丁香五月手机在线| 涩玖玖免费视频| 丁香六月婷婷高清| 激情色色| 亚洲不卡123| 亭亭色天香| av人人干| 日本乱论99| 五月天俺去也| 国产成人片| 五月婷婷黄色| 天天舔天天摸| 五月天天丁香婷婷| 色婷婷国色天香综合| 97人人射| 中文网婷婷字幕婷| 天天色域综合网| 97在线观看| 99热99ai| 99热免| 亚洲av成人在线| 五月丁香中文| 久久久潮喷-久久久九九-成人AV| 丁香六月AV| 九九99精品视频在线观看| 99男人天堂| 久热网在线视频| 丁香激情综合| 久色网五月| 天天干,天天日| 思思热久久阴99| 九九香蕉网| 亚洲无aV在线中文字幕 | 大香蕉伊然在亚洲90| 视色综合| Av中文在线| 狠狠操在线视频| 91无码色色| 五月婷婷伦理| 婷婷俺去也| 五月色综合网欧美网| 色99色| 伊人网碰碰| 色五月天堂| 丁香密臀AV激情网| 久久总和99| 中文字幕在线日亚洲9| www.日韩国产| 五月丁香福利| 五月丁香六月激情综合| 成人午夜无码视频| 99热国产| 六月天无码网址| 欧美丰满熟妇BBB久久久| 人妻肉射免费观看| 国产黄色在线| 五月婷婷之美女图片| 九月大香蕉| 激情綜合W W W,激情五月天| 六月婷基地| 99无码视频| 开心婷婷五月天综合| 天天操综合网| A网在线欧洲| 免费在线观看AV网站| 色五月婷婷视频| 无码成人AAAAA毛片AI换脸| 我要色综合五月婷婷| 91打屁股免费看| 人人摸人人干人人做| 九九成年视频| 九九热99熟女| 99热欧美| 五月成人网站| 日本va视频| 婷婷婷久久久| 亚洲综合视频网| 大香蕉五月天婷婷| 无码日本精品XXXXXXXXX| 四月婷婷丁香| 91精品久久久久久久久| 婷婷综合激情| 五月丁香淫淫婷婷婷| 色婷婷激情四射视频| 天天爱天天操| 好激情在线综合网| 色婷婷综合影院| 久9热| 婷婷丁香色情| 五月天丁香成人| 51精品国自产在线| 久色视频| 激情综合五月婷| 中文字幕不卡网站| 九月激情网| 五月色 亚洲| 六月丁香停| 八戒青柠影视剧在线观看| 99视频热| 久/久精品99看9| 91高潮喷水久久久久久久久| 国产激情在线| www激情网| 成人在线视频网| 日逼影音先锋男人AV资源站| 97热这里精品在线视频| www.婷婷五月天啪啪| 色综合久久8| 九九久久99| 五月丁香激情综合啪啪| 热的国产,热的综合,热的有码| 久久综合五月婷婷| 风流少妇A片一区二区蜜桃 | 日韩人妻AV在线| 91九色精品熟女内射| 激情五月综亚网| 久久久久激情| 97成人视频| 天天日天天色| 操逼六区| 丁香五月天在线| 婷婷八月激情| 久婷久婷激情肉| 亚洲综合色婷婷文学| 超碰91在线| 婷婷丁香六月天| 韩日AV片| 欧美性猛交XXXX乱大交极品| 天天做天天爽| 天天日夜夜帕| 婷婷成人五月天一区| 任你爽免费视频| 日韩免费99| 精品综合网在线| 婷婷色丁香五月| 色五月丁香婷婷久草| 开心婷婷五月中文字幕组| 狠狠婷婷爱| 久/久精品99看9| 成人网站免费在线播放| 91色欲综合| 99久久户外勾搭| 欧美人与性动交CCOO| 人人爽天天爽| 超碰男人色| 五月天激情综合网| 色色色无码| 丁香六月色婷婷| 这里只有国产精品在线| 日本在线免费中文com.| 免费视频舔| 综合激情在线视频| 亚洲免费观看高清完整版AV线| 大香蕉懂9| 91丨九色丨首页| 激情涩播| 丁香五月天堂婷婷| 婷婷中文字幕欧美| 欧美交换配乱吟粗大25P| 婷婷综合五月天| 色色色色综合网| 久久精品婷婷| 婷婷视频网| 色婷婷小说| 五月婷婷之综合激情| 色色五月天婷婷| 色色丁香婷婷| 丁香色五月 97干| www.91在线观看| 情色五月天网站| 久久五月婷| 色久在| 激情com| 久久99热 这里有精品| 亚洲Av入口| 婷色成人| 色5月婷婷| 夜夜干夜夜操| 99热在线观看精品| 色情久久久| 狠狠干在线| 99精品国产在热久久| 四LLL少妇BBBB槡BBBB| 久久黄色片| 日本全黄一级999| 色欲影香| 国产综合色婷婷精品久久| 丁香色六月| 亚洲 无码 中文字幕 中出| 激情五月四色| 五月天网站亭亭| 久久资源网五月婷| 婷婷五月av| 欧美性生交A片免费看| 丁香亚洲色综合| 4399在线观看免费高清黄色视频| 色色色色综合网| 色五月xxx| 五月丁香花婷婷玉莉AV| 日本色五月婷婷| 欧美日韩999| 色色国产| av在线免费播放观看| 五月天婷婷AV| YJLZZJLZZ亚洲乱熟无码| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 婷婷五月天色播| 六月丁香激情网| AA片在线观看视频在线播放| 操逼五月婷婷| 国产综合婷婷| 婷婷五月天.com| 人人摸人人摸| 五月婷婷欧美| 丁香久久在线| 大香蕉五月天婷婷丁香91| 啪啪婷婷五月天激情| 69五月天视频| WWW.桔色成人.COM| 欧美槡BBBB槡BBB少妇| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 久久这里都是精品免费| 色的色综合| 可以免费观看的av| 99热日韩| 亚洲在线网站| 丁香六月婷婷开心婷婷网| 综合亚洲六月婷婷在线| 婷婷六月五月天综合| 人妻久久久| 久久久久人妻| 冬月かえでAV无码播放| 99热这只有| 丁香五月成人av| 色婷婷丁香五月| 久人操| 26UUU精品一区二区Com| 超碰在线综合| 丁香五月天久久| 日日噜人人人做人| 激情六月天婷婷| 色婷婷综合网站| 丁香五月先锋| 五月丁香六月香综合激情| 色色色色色综合| 丁香99| 五月天婷婷丁香花| 欧美日综合| 五月天另类图片区99| 婷婷色香六月综合激情| 亚洲九九夜夜| 大天天伊人| 夜丁香五月婷婷| 激情开心五月天| 991精品在线视频| 五月天激情无码| 91.www综合| 中文字幕永久免费| 五月天激情视频| 99久久婷婷综合| 激情综合激情五月| 丁香五月婷婷香| 丁香五月婷婷影视先锋| 啪啪干伊人婷婷| 国产亚洲色婷婷久久99精品91| 日本123区日韩欧美不卡在线看| 婷婷另类开心| 成人午夜无码视频| 久久久18| 大香蕉婷婷丁香天堂AV| 婷婷六月成人| 久久久五月婷婷| 日本熟妇乱妇熟色A片蜜桃 | 九九综合网色全集| 久久丁香久久| 亚洲AV久久久久久久久久久久久久久久 | 九九精品视频在线6| 五月久久网| 99精品在线观看视频| 9 1超碰九色| www.色婷婷| AV成人在线网站| 丁香激情合作五月| 成人无码精品1区2区3区免费看| 色色丁香| 婷婷丁香五月综合网上| 国产六月婷婷| Av中文在线| 色情五月婷| 激情综合网五月在线播放| 久草热久草在线视频| 这里只有精品视频一区|