久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

Java Web電影推薦系統(tǒng)實(shí)戰(zhàn):Spring Boot + 協(xié)同過濾算法實(shí)現(xiàn)

Java Web電影推薦系統(tǒng)實(shí)戰(zhàn):Spring Boot + 協(xié)同過濾算法實(shí)現(xiàn) 簡(jiǎn)介基于SSMSpringSpringMVCMyBatis與Vue開發(fā)的電影推薦系統(tǒng)Java Web項(xiàng)目源碼適用于畢業(yè)設(shè)計(jì)、課程設(shè)計(jì)或SSM整合實(shí)戰(zhàn)練習(xí)。資源共845個(gè)文件壓縮包大小17.62MB涵蓋Java后端源碼、Vue前端頁面、JavaScript/CSS等靜態(tài)資源、MySQL數(shù)據(jù)庫腳本、Maven及項(xiàng)目配置文件并附有一鍵環(huán)境搭建與啟動(dòng)腳本便于快速導(dǎo)入運(yùn)行。系統(tǒng)采用B/S架構(gòu)數(shù)據(jù)庫使用MySQL 5.7前端采用ElementUI實(shí)現(xiàn)了用戶信息、圖片素材、視頻素材等模塊代碼注釋清晰、目錄結(jié)構(gòu)規(guī)范完整呈現(xiàn)從需求分析到系統(tǒng)實(shí)現(xiàn)的SSM開發(fā)流程可幫助讀者理解前后端數(shù)據(jù)交互、MyBatis持久化配置及SpringMVC請(qǐng)求路由等關(guān)鍵環(huán)節(jié)。已有282人瀏覽學(xué)習(xí)適合具備一定Java基礎(chǔ)的開發(fā)者參考借鑒。1. 電影推薦系統(tǒng)源碼先搞清楚它解決什么問題再?zèng)Q定要不要?jiǎng)邮秩绻闶窃诋厴I(yè)設(shè)計(jì)、課程設(shè)計(jì)或跳槽作品集里搜到“電影推薦系統(tǒng)”這幾個(gè)字那大概率已經(jīng)不是第一次看到類似題目了。這個(gè)方向每年都有大量 Java 方向的 Web 項(xiàng)目在做原因很直接它有完整的業(yè)務(wù)閉環(huán)——用戶、電影、評(píng)分、推薦、后臺(tái)管理既能展示 Java 后端基本功又能講出“推薦算法”這個(gè)亮點(diǎn)比純?cè)鰟h改查的管理系統(tǒng)更容易在答辯時(shí)撐起場(chǎng)面。但這里要先潑一盆冷水標(biāo)題里同時(shí)出現(xiàn)“推薦系統(tǒng)源碼”“管理系統(tǒng)”“設(shè)計(jì)與實(shí)現(xiàn)”意味著這類項(xiàng)目通常不是一個(gè)工業(yè)級(jí)的推薦平臺(tái)而是一個(gè)能跑通、能演示、能講清楚原理的 Java Web 應(yīng)用。核心價(jià)值不在算法多先進(jìn)而在于三層?xùn)|西數(shù)據(jù)模型設(shè)計(jì)是否合理用戶-電影-評(píng)分怎么建表、協(xié)同過濾邏輯是否講得通、以及后臺(tái)管理有沒有覆蓋電影和用戶的完整操作閉環(huán)。這篇文章我會(huì)按這套邏輯把基于 Web 的電影推薦系統(tǒng)怎么做講透。順序是先定技術(shù)棧和架構(gòu)再給庫表設(shè)計(jì)和實(shí)體映射然后落到推薦算法的 Java 實(shí)現(xiàn)最后把部署階段最容易翻車的幾個(gè)問題先指出來。讀者里如果是 Java 基礎(chǔ)一般、第一次做完整 Web 項(xiàng)目的照著這條線走一遍能少走很多彎路如果已經(jīng)寫過幾個(gè)管理系統(tǒng)重點(diǎn)看第四章的協(xié)同過濾實(shí)現(xiàn)和第五章的邊界問題那部分才是這個(gè)題目真正拉開差距的地方。2. 技術(shù)選型與整體架構(gòu)Spring Boot 為主干的三層結(jié)構(gòu)為什么這么搭2.1 后端框架選型Spring Boot 是這類題目的默認(rèn)答案但不是唯一答案電影推薦系統(tǒng)在 Java 技術(shù)棧里最常見的搭配是 Spring Boot MyBatis/Spring Data JPA MySQL Thymeleaf或前后端分離。Spring Boot 之所以成為默認(rèn)答案不是因?yàn)樗谕扑]算法上有什么特殊優(yōu)勢(shì)而是因?yàn)樗?Web 層、數(shù)據(jù)訪問層、事務(wù)管理、內(nèi)置 Tomcat 全部打包好了你在答辯時(shí)可以花更多時(shí)間講推薦邏輯而不是糾結(jié)怎么配置 web.xml。如果只用標(biāo)題“基于 Web 的 Java 電影推薦系統(tǒng)”來推斷更常見的課程設(shè)計(jì)是服務(wù)端渲染方案Spring Boot 提供接口和頁面渲染Thymeleaf 直接輸出 HTML。這個(gè)選擇的優(yōu)點(diǎn)是對(duì)新手友好不需要處理跨域、不需要單獨(dú)部署前端工程一個(gè)mvn spring-boot:run就能看到完整效果。前后端分離Spring Boot Vue的版本更多出現(xiàn)在近兩年的題目里但如果你對(duì) JavaScript 不熟強(qiáng)行上 Vue 反而會(huì)增加工作量。我一般建議按下面的標(biāo)準(zhǔn)來判斷選型方向?qū)Ρ软?xiàng)Spring Boot ThymeleafSpring Boot Vue前后端分離上手難度低Java 開發(fā)者無需額外學(xué)前端框架中需要理解跨域與接口聯(lián)調(diào)推薦功能集成服務(wù)端算好后渲染到頁面前端調(diào)用接口展示答辯演示單工程啟動(dòng)即可需要同時(shí)啟動(dòng)前后端兩個(gè)工程找工作加分一般稍好但項(xiàng)目深度更重要如果目標(biāo)是把系統(tǒng)跑通并講清楚選 Thymeleaf 方案就夠了這也是我從實(shí)踐里更推薦的方式。而數(shù)據(jù)庫訪問層JPA 在實(shí)體關(guān)系映射上寫起來更短MyBatis 則在復(fù)雜 SQL 上更可控。電影推薦系統(tǒng)的 SQL 復(fù)雜度不高兩者都可以。下面的示例以 Spring Data JPA 為主因?yàn)樗茏寣?shí)體代碼短很多。2.2 架構(gòu)分層與三張核心表的關(guān)系用戶、電影、評(píng)分是推薦系統(tǒng)的地基整個(gè)系統(tǒng)我習(xí)慣拆成四個(gè)包c(diǎn)ontroller、service、repository、entity對(duì)應(yīng)表現(xiàn)層、業(yè)務(wù)層、數(shù)據(jù)訪問層和實(shí)體層。推薦的靈魂在service包里不只是在 controller 里寫幾行 SQL。核心數(shù)據(jù)關(guān)系只有三張表用戶表user、電影表movie、評(píng)分表rating。用戶通過評(píng)分與電影建立聯(lián)系推薦算法就是基于這張?jiān)u分表計(jì)算“相似的人”或“相似的電影”。-- 用戶表 CREATE TABLE user ( id bigint NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL, password varchar(100) NOT NULL, -- 建議存 BCrypt 加密后的結(jié)果 created_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 電影表 CREATE TABLE movie ( id bigint NOT NULL AUTO_INCREMENT, title varchar(200) NOT NULL, genre varchar(100) DEFAULT NULL, release_year int DEFAULT NULL, director varchar(100) DEFAULT NULL, poster_url varchar(500) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 評(píng)分表 CREATE TABLE rating ( id bigint NOT NULL AUTO_INCREMENT, user_id bigint NOT NULL, movie_id bigint NOT NULL, score tinyint NOT NULL COMMENT 1-5分, rated_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_user_movie (user_id, movie_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;三個(gè)表之間有兩個(gè)關(guān)鍵設(shè)計(jì)點(diǎn)。第一評(píng)分表上加唯一索引uk_user_movie避免同一個(gè)用戶對(duì)同一部電影重復(fù)評(píng)分這是推薦數(shù)據(jù)干凈的基本保證如果漏掉這個(gè)約束后面算用戶相似度時(shí)會(huì)出現(xiàn)重復(fù)計(jì)數(shù)推薦結(jié)果直接失真。第二用戶密碼不能明文存儲(chǔ)這是這類系統(tǒng)經(jīng)常被點(diǎn)評(píng)的細(xì)節(jié)建議在注冊(cè)時(shí)用BCryptPasswordEncoder加密答辯時(shí)這是可以主動(dòng)講出來的加分點(diǎn)。還有一張表在實(shí)現(xiàn)“電影推薦管理系統(tǒng)”時(shí)不可或缺favorite收藏表。它記錄用戶主動(dòng)收藏的電影一方面可以豐富推薦入口另一方面在前端“我的收藏”頁面直接展示。核心邏輯是用戶對(duì)電影的顯式反饋有三種評(píng)分、收藏、瀏覽記錄。評(píng)分和收藏用于推薦算法的輸入瀏覽記錄則可以在“最近瀏覽”功能中展示形成完整的數(shù)據(jù)采集閉環(huán)。2.3 數(shù)據(jù)從哪來爬取豆瓣 Top250 作為填充數(shù)據(jù)的常規(guī)方案庫表建好之后不能空著跑推薦。電影推薦系統(tǒng)需要真實(shí)的電影數(shù)據(jù)否則推薦結(jié)果毫無說服力。常見做法是解析豆瓣電影 Top250 并入庫。但這里要建議你不要花太多時(shí)間在數(shù)據(jù)采集上。Top250 一共 250 條包含電影名、導(dǎo)演、類型、年份、評(píng)分、簡(jiǎn)介足夠完成演示和測(cè)試推薦效果。我一般用 HttpClient 或 Jsoup 抓取存成 SQL 腳本直接導(dǎo)入而不是在代碼里做實(shí)時(shí)爬蟲。抓取時(shí)要注意兩個(gè)細(xì)節(jié)一是類型字段用英文逗號(hào)分隔方便后面做“同類電影”推薦二是把海報(bào) URL 一并存下來前端頁面會(huì)好看很多。抓取數(shù)據(jù)屬于一次性工程不用做得太復(fù)雜代碼里留一個(gè)data.sql文件即可讓系統(tǒng)啟動(dòng)時(shí)自動(dòng)初始化數(shù)據(jù)省去手工導(dǎo)入的步驟。這塊的典型問題是很多同學(xué)直接從網(wǎng)上下載了一個(gè) movie.sql但表結(jié)構(gòu)和字段名對(duì)不上改起來反而更耗時(shí)。最穩(wěn)妥的方式是理解實(shí)體類的字段順序然后保證 SQL 的插入列名和實(shí)體類的Column名稱一致。3. 從建庫到跑通接口實(shí)體類設(shè)計(jì)與用戶評(píng)分閉環(huán)的實(shí)現(xiàn)3.1 用 JPA 注解定義實(shí)體Movie 與 Rating 的映射關(guān)系上一章給出的建表 SQL現(xiàn)在需要落到 Java 實(shí)體上。以 Movie 表為例字段映射如下Entity Table(name movie) public class Movie { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; Column(nullable false, length 200) private String title; Column(length 100) private String genre; Column(name release_year) private Integer releaseYear; private String director; Column(name poster_url, length 500) private String posterUrl; // getter / setter / 構(gòu)造函數(shù)略實(shí)際開發(fā)中用 Lombok Data 簡(jiǎn)化 }這里的Column(name release_year)必須和表字段名嚴(yán)格一致否則 JPA 啟動(dòng)時(shí)不會(huì)報(bào)錯(cuò)但查詢結(jié)果里 releaseYear 始終為 null。這是 Spring Data JPA 新手經(jīng)常碰到的問題。如果用 Lombok只需要在類上加Data注解getter/setter 自動(dòng)生成代碼能少一半。接著是 User 和 Rating 實(shí)體。Rating 實(shí)體不直接用ManyToOne關(guān)聯(lián)對(duì)象而是只存userId和movieId兩個(gè) Long 字段。原因是推薦算法要批量遍歷所有評(píng)分關(guān)聯(lián)對(duì)象會(huì)導(dǎo)致大量延遲加載。為了性能實(shí)體設(shè)計(jì)上做“扁平化”關(guān)聯(lián)關(guān)系在 Service 層手動(dòng)拼接。Entity Table(name rating, uniqueConstraints { UniqueConstraint(columnNames {userId, movieId}) }) public class Rating { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; Column(name user_id, nullable false) private Long userId; Column(name movie_id, nullable false) private Long movieId; Column(nullable false) private Integer score; // 1-5 Column(name rated_at) private LocalDateTime ratedAt; }注意 JPA 列名默認(rèn)的駝峰轉(zhuǎn)下劃線策略。userId字段默認(rèn)映射到user_id如果你在application.yml里關(guān)閉了spring.jpa.hibernate.naming.physical-strategy的默認(rèn)配置就可能在運(yùn)行時(shí)報(bào)“列 userId 不存在”。為了保險(xiǎn)上面代碼里顯式標(biāo)注了Column(name user_id)。這里全都是經(jīng)得起運(yùn)行驗(yàn)證的細(xì)節(jié)寫的時(shí)候一步到位能省下很多調(diào)試時(shí)間。3.2 用戶注冊(cè)登錄與評(píng)分接口寫推薦系統(tǒng)之前先建立數(shù)據(jù)采樣入口推薦系統(tǒng)的效果取決于評(píng)分?jǐn)?shù)據(jù)的數(shù)量和質(zhì)量。所以第一步不是實(shí)現(xiàn)推薦算法而是先把用戶評(píng)分接口寫出來。一個(gè)完整的評(píng)分閉環(huán)包括用戶注冊(cè)登錄 → 瀏覽電影列表 → 點(diǎn)擊某部電影 → 評(píng)分 → 刷新后看到評(píng)分狀態(tài)。接口設(shè)計(jì)遵循 REST 風(fēng)格即可PostMapping(/api/rating) public Result rateMovie(RequestBody RateRequest request) { Rating rating ratingService.rate(request.getUserId(), request.getMovieId(), request.getScore()); return Result.success(rating); } GetMapping(/api/movie/{id}) public MovieVO getMovieDetail(PathVariable Long id) { Movie movie movieService.findById(id); ListRatingVO ratings ratingService.findByMovieId(id); return MovieVO.from(movie, ratings); }ratingService.rate里的核心邏輯是“存在則更新不存在則插入”。用上一章那張唯一索引可以先findByUserIdAndMovieId有記錄就更新 score沒有就新建。這個(gè)邏輯雖然簡(jiǎn)單卻決定了推薦算法候選集的質(zhì)量。另外管理員后臺(tái)能夠批量導(dǎo)入評(píng)分?jǐn)?shù)據(jù)比如給新注冊(cè)用戶隨機(jī)生成 10 條評(píng)分這樣在演示協(xié)同過濾時(shí)不需要手工一條條去點(diǎn)效果展示更快。評(píng)分接口完成后推薦系統(tǒng)的數(shù)據(jù)基礎(chǔ)就搭好了。下一步才進(jìn)入重頭戲什么樣的算法能讓一個(gè)只有幾百條評(píng)分的數(shù)據(jù)集跑出“像樣”的推薦列表。4. 協(xié)同過濾推薦算法用基于用戶的 UserCF 撐起“推薦”兩個(gè)字4.1 為什么選 UserCF 而不是 ItemCF從數(shù)據(jù)規(guī)模和答辯角度分析推薦算法主流分為基于內(nèi)容的推薦和協(xié)同過濾推薦。協(xié)同過濾又分成基于用戶的UserCF、基于物品的ItemCF和基于模型的矩陣分解等。對(duì)電影推薦這種規(guī)模的 Web 項(xiàng)目基于物品的推薦在工業(yè)界如 Amazon 中表現(xiàn)優(yōu)秀但課程設(shè)計(jì)里我更推薦 UserCF。原因有兩個(gè)。第一數(shù)據(jù)規(guī)模小。UserCF 的原理是“找到和你口味相似的用戶把那些用戶喜歡而你沒看過的電影推薦給你”。評(píng)分表只有幾百行計(jì)算相似度時(shí)時(shí)延完全可以接受如果換 ItemCF 要計(jì)算電影間的相似度矩陣效果差異在數(shù)據(jù)量大時(shí)才能體現(xiàn)而演示場(chǎng)景下 UserCF 更好講。第二UserCF 的另一方面優(yōu)勢(shì)是推薦結(jié)果更有“故事性”——“和你興趣相似的用戶也在看《霸王別姬》”這句話在答辯時(shí)可以直接講給評(píng)委聽容易讓思路被理解。4.2 UserCF 的完整 Java 實(shí)現(xiàn)相似度矩陣、TopK 鄰居與推薦列表生成下面是一段可以直接放到項(xiàng)目里的核心代碼。它包含三個(gè)步驟第一步計(jì)算用戶相似度矩陣第二步為指定用戶找到 TopK 最相似用戶第三步為目標(biāo)用戶生成推薦列表。Service public class RecommendService { Autowired private RatingRepository ratingRepository; Autowired private MovieRepository movieRepository; // 1. 構(gòu)建用戶-電影評(píng)分的映射 private MapLong, MapLong, Integer buildUserRatingMap() { ListRating allRatings ratingRepository.findAll(); MapLong, MapLong, Integer userRatings new HashMap(); for (Rating r : allRatings) { userRatings .computeIfAbsent(r.getUserId(), k - new HashMap()) .put(r.getMovieId(), r.getScore()); } return userRatings; } // 2. 計(jì)算兩個(gè)用戶之間的余弦相似度 private double cosineSimilarity(MapLong, Integer u1, MapLong, Integer u2) { SetLong commonMovies new HashSet(u1.keySet()); commonMovies.retainAll(u2.keySet()); if (commonMovies.isEmpty()) { return 0.0; } double dot 0, norm1 0, norm2 0; for (Long movieId : commonMovies) { dot u1.get(movieId) * u2.get(movieId); } for (Integer score : u1.values()) { norm1 score * score; } for (Integer score : u2.values()) { norm2 score * score; } if (norm1 0 || norm2 0) { return 0.0; } return dot / (Math.sqrt(norm1) * Math.sqrt(norm2)); } // 3. 為目標(biāo)用戶生成 TopN 推薦 public ListMovie recommendForUser(Long userId, int topN) { MapLong, MapLong, Integer userRatings buildUserRatingMap(); MapLong, Integer targetUserRatings userRatings.getOrDefault(userId, Collections.emptyMap()); // 計(jì)算目標(biāo)用戶與所有其他用戶的相似度 MapLong, Double similarityScores new HashMap(); for (Map.EntryLong, MapLong, Integer entry : userRatings.entrySet()) { if (entry.getKey().equals(userId)) continue; similarityScores.put(entry.getKey(), cosineSimilarity(targetUserRatings, entry.getValue())); } // 按相似度排序取 TopK 鄰居 ListMap.EntryLong, Double sorted new ArrayList(similarityScores.entrySet()); sorted.sort((a, b) - Double.compare(b.getValue(), a.getValue())); ListMap.EntryLong, Double topK sorted.subList(0, Math.min(5, sorted.size())); // 從鄰居的評(píng)分中收集候選電影按加權(quán)分?jǐn)?shù)累加 MapLong, Double candidateScores new HashMap(); MapLong, Integer candidateCount new HashMap(); for (Map.EntryLong, Double neighbor : topK) { if (neighbor.getValue() 0) continue; MapLong, Integer neighborRatings userRatings.get(neighbor.getKey()); for (Map.EntryLong, Integer movieRating : neighborRatings.entrySet()) { Long movieId movieRating.getKey(); if (targetUserRatings.containsKey(movieId)) { continue; // 過濾掉已評(píng)分的電影 } candidateScores.merge(movieId, neighbor.getValue() * movieRating.getValue(), Double::sum); candidateCount.merge(movieId, 1, Integer::sum); } } // 按加權(quán)分?jǐn)?shù)排序取 TopN 返回 ListMap.EntryLong, Double ranked new ArrayList(candidateScores.entrySet()); ranked.sort((a, b) - Double.compare(b.getValue(), a.getValue())); ListLong movieIds ranked.stream() .limit(topN) .map(Map.Entry::getKey) .collect(Collectors.toList()); return movieRepository.findAllById(movieIds); } }這段代碼有幾個(gè)參數(shù)值得說明。cosineSimilarity里的余弦相似度是核心公式是共同評(píng)分電影的點(diǎn)積 / 兩個(gè)用戶評(píng)分向量的模長(zhǎng)的乘積。共同評(píng)分?jǐn)?shù)為 0 時(shí)直接返回 0避免除零異常。topK選擇了 5當(dāng)用戶數(shù)量較少時(shí)這個(gè)值足夠如果測(cè)試賬號(hào)打分到幾百條可以適當(dāng)加大到 10。候選電影分?jǐn)?shù)累加時(shí)用了merge,相當(dāng)于對(duì)鄰居相似度和評(píng)分的乘積求和比單純“評(píng)分平均值”更能體現(xiàn)出相似度權(quán)重。從實(shí)際運(yùn)行角度看這段代碼在評(píng)分?jǐn)?shù)據(jù)幾千條時(shí)性能沒有問題因?yàn)閎uildUserRatingMap()一次把所有評(píng)分讀進(jìn)內(nèi)存后續(xù)計(jì)算全在內(nèi)存完成。但從代碼嚴(yán)謹(jǐn)性出發(fā)還有一個(gè)可以優(yōu)化的小點(diǎn)recommendForUser每次請(qǐng)求都會(huì)重新計(jì)算全局相似度這不算高效卻在課程設(shè)計(jì)代碼里很常見。只需在答辯時(shí)說明“下一步可以改成離線預(yù)計(jì)算”就不會(huì)被挑戰(zhàn)。4.3 冷啟動(dòng)處理當(dāng)用戶沒有評(píng)分時(shí)按熱度推薦打底如果數(shù)據(jù)庫里只有一個(gè)測(cè)試用戶或者用戶首次注冊(cè)還沒有任何評(píng)分協(xié)同過濾無數(shù)據(jù)可用。此時(shí)推薦列表自然為空頁面會(huì)很難看會(huì)顯得項(xiàng)目沒完成。解決手段用“默認(rèn)推薦”兜底即可。當(dāng)targetUserRatings.size() 0或相似度 TopK 全部為 0 時(shí)直接返回?zé)岫茸罡叩碾娪盁岫劝丛u(píng)分?jǐn)?shù)量和平均分綜合排序。下面是簡(jiǎn)單的實(shí)現(xiàn)思路Query(SELECT r.movieId, COUNT(r.id) AS cnt, AVG(r.score) AS avgScore FROM Rating r GROUP BY r.movieId ORDER BY cnt DESC, avgScore DESC) ListObject[] findHotMovies();熱度榜是推薦系統(tǒng)冷啟動(dòng)的標(biāo)準(zhǔn)方案把它放在用戶協(xié)同過濾之前作為兜底能讓新用戶第一次打開首頁就有內(nèi)容看。這個(gè)細(xì)節(jié)在演示環(huán)節(jié)幾乎一定會(huì)被問到主動(dòng)講“冷啟動(dòng)階段我們用熱度榜兜底積累評(píng)分后自動(dòng)切換協(xié)同過濾”這體現(xiàn)的就是設(shè)計(jì)意識(shí)。5. 部署與運(yùn)行階段的五個(gè)高頻坑從推薦為空到登錄失效的血淚經(jīng)驗(yàn)5.1 冷啟動(dòng)導(dǎo)致推薦結(jié)果為空頁面白屏接口返回空數(shù)組這是一個(gè)出現(xiàn)頻率非常高的現(xiàn)象。它發(fā)生在你剛注冊(cè)完新用戶點(diǎn)進(jìn)“為你推薦”頁面時(shí)接口返回[]頁面上什么都沒有。原因就是上一章講的協(xié)同過濾的前置條件不成立——用戶沒有評(píng)分?jǐn)?shù)據(jù)算法無法計(jì)算相似用戶推薦候選集自然是空的。處理方法就是上一章的“熱度榜兜底”recommendForUser方法開頭加判斷如果該用戶的評(píng)分?jǐn)?shù)量為 0直接調(diào)用電影熱度榜接口返回。這里是邏輯分支不是異常處理更需要的是提前想到這個(gè)場(chǎng)景。另外管理后臺(tái)里增加“為測(cè)試用戶生成隨機(jī)評(píng)分”的功能也是演示前準(zhǔn)備的一個(gè)技巧一鍵生成 10 條評(píng)分再刷新推薦頁效果直觀。5.2 新加的依賴在啟動(dòng)時(shí)直接報(bào)錯(cuò)JPA 實(shí)體類映射不匹配有次我在自己電腦上跑一個(gè)網(wǎng)上拿到的現(xiàn)成工程啟動(dòng)時(shí) Spring 報(bào)Caused by: org.hibernate.AnnotationException: No identifier specified for entity一查原因是實(shí)體類里沒有Id主鍵標(biāo)注或者主鍵字段名和表結(jié)構(gòu)對(duì)不上。另一種常見情況是Column name xxx not found原因多半是實(shí)體類的字段命名規(guī)則和數(shù)據(jù)庫實(shí)際列名不一致。處理方式分兩類。自己從零寫代碼時(shí)建表腳本和實(shí)體類要同時(shí)維護(hù)寫完表結(jié)構(gòu)先跑一次spring.jpa.hibernate.ddl-autovalidate讓 Hibernate 在啟動(dòng)時(shí)幫你校驗(yàn)映射是否一致。從網(wǎng)上下載源碼時(shí)不要直接依賴別人的data.sql先看實(shí)體類字段再對(duì)照建表 SQL 統(tǒng)一列名。這個(gè)步驟能省下大量排查時(shí)間。5.3 N1 查詢導(dǎo)致頁面很慢一次聚會(huì)頁面發(fā)出上百條 SQL推薦結(jié)果包含 10 部電影頁面每部電影要拉取評(píng)分和封面日志里發(fā)現(xiàn)一次請(qǐng)求產(chǎn)生了 100 多條 SQL。這是典型的 N1 問題先查出電影列表再逐條查電影的評(píng)分、導(dǎo)演等信息。在小數(shù)據(jù)集上問題不明顯但如果數(shù)據(jù)量到幾千部電影接口響應(yīng)時(shí)間會(huì)從幾十毫秒漲到好幾秒。解決方式是批量查詢。查完movieIds列表后用ratingRepository.findByMovieIdIn(movieIds)一次性查出所有評(píng)分在 Java 內(nèi)存里按movieId分組組裝到 VO。這是推薦系統(tǒng) Web 化之后逃不開的性能優(yōu)化點(diǎn)。要讓代碼里養(yǎng)成“先批量取數(shù)再內(nèi)存組裝”的習(xí)慣而不是依賴 JPA 的懶加載去逐條 get。5.4 跨瀏覽器頁面樣式錯(cuò)亂推薦列表在新版 Chrome 正常IE 上布局完全散掉熱詞里反復(fù)出現(xiàn)“跨瀏覽器支持的設(shè)計(jì)與實(shí)現(xiàn)”其實(shí)反映的就是這個(gè)高校項(xiàng)目答辯時(shí)的高頻問題。用 Thymeleaf 加 Bootstrap 的老式頁面特別依賴 CSS 框架的版本兼容性。如果演示機(jī)器上的瀏覽器版本較舊或者用了國(guó)產(chǎn)瀏覽器的兼容模式頁面布局會(huì)直接錯(cuò)亂。解決思路不復(fù)雜第一模板里顯式聲明meta charsetutf-8避免亂碼第二不要在頁面上大量使用最新的 CSS Grid 或 flex 新特性Bootstrap 4/5 的柵格系統(tǒng)對(duì)舊瀏覽器相對(duì)友好第三演示前用 Chrome 的無痕模式跑一遍全部頁面避免舊緩存和插件干擾。這個(gè)坑聽起來不算技術(shù)難題但在答辯現(xiàn)場(chǎng)翻車的概率極高屬于“演示前一小時(shí)最容易讓人崩潰”的那類問題。5.5 登錄狀態(tài)突然失效刷新頁面就跳回登錄頁推薦接口報(bào) 401如果系統(tǒng)實(shí)現(xiàn)了登錄攔截這種問題的典型原因是 Session 持久化配置不對(duì)。Spring Boot 默認(rèn)的 Session 存儲(chǔ)在內(nèi)存里應(yīng)用重啟后所有登錄態(tài)全部丟失。有的同學(xué)在本地開發(fā)時(shí)不覺得但換到部署環(huán)境或者演示前不小心重啟了應(yīng)用就會(huì)發(fā)現(xiàn)所有頁面都要重新登錄。還有一個(gè)更隱蔽的原因——前后端分離模式下前端沒在請(qǐng)求頭帶上 Cookie導(dǎo)致后端拿不到 Session。常規(guī)做法是配置 Spring Session 把會(huì)話存到 Redis但一個(gè)課程設(shè)計(jì)項(xiàng)目為此引入 Redis 顯得偏重。我更推薦的方案是明確告知“本地演示時(shí)重啟后需要重新登錄”同時(shí)在攔截器里把/api/login、/api/register和首頁排除掉保證即使 Session 失效也不至于影響演示流程。如果排查這類問題先從瀏覽器開發(fā)者工具里看請(qǐng)求頭是否帶上了Cookie再查后端攔截器是否誤攔截了靜態(tài)資源這兩步能覆蓋掉大部分登錄失效的場(chǎng)景。6. 讓答辯和演示經(jīng)得起追問推薦算法驗(yàn)證與演示細(xì)節(jié)設(shè)計(jì)系統(tǒng)做完后最容易被問倒的問題往往是“你這個(gè)推薦效果到底怎么樣”。所以最后一章把驗(yàn)證手段和演示腳本的設(shè)計(jì)講清楚。推薦效果驗(yàn)證不追求學(xué)術(shù)指標(biāo)但至少要能用數(shù)據(jù)說話。常見做法是把評(píng)分表按 8:2 切分訓(xùn)練集和測(cè)試集再用訓(xùn)練集跑推薦看測(cè)試集里用戶真實(shí)看過的電影有多大比例出現(xiàn)在推薦列表里。配合下面這個(gè)偽代碼思路做統(tǒng)計(jì)// 按用戶劃分每個(gè)用戶取 80% 的評(píng)分做訓(xùn)練20% 做驗(yàn)證 // 訓(xùn)練集跑 recommendForUser驗(yàn)證集統(tǒng)計(jì)命中率 double precision hits / (double) topN;不用把評(píng)估模塊做得很重一個(gè)能夠輸出“測(cè)試用戶 12 的推薦命中率是 30%”的統(tǒng)計(jì)就夠了。因?yàn)榇疝q評(píng)委不會(huì)深究你的召回率曲線但會(huì)關(guān)注你有沒有基本的驗(yàn)證意識(shí)。演示時(shí)我建議走一條固定的路徑先用管理員賬號(hào)在后臺(tái)給新用戶生成 58 條高評(píng)分記錄比如全是科幻片然后切換到用戶端打開“為你推薦”展示的結(jié)果里應(yīng)該出現(xiàn)同類型的其他科幻電影。這時(shí)再補(bǔ)一句“這是基于用戶相似度的協(xié)同過濾系統(tǒng)找到了口味相近的用戶”整個(gè)過程自然流暢突出核心價(jià)值。另一個(gè)容易加分的小技巧是讓用戶先給《流浪地球》打 5 分、給《星際穿越》打 5 分、給一部愛情片打 1 分刷新推薦頁時(shí)注意力全放在“推薦里沒有愛情片”這個(gè)點(diǎn)上——負(fù)反饋被過濾掉證明算法不只是按熱度推。這個(gè)演示細(xì)節(jié)會(huì)讓評(píng)委覺得你的算法真實(shí)生效了而不是拿了一個(gè)固定列表在糊弄。前端如果因?yàn)闀r(shí)效性沒更新記得在評(píng)分后調(diào)recommendForUser接口重新拉取不要復(fù)用一個(gè)頁面級(jí)緩存。最后的經(jīng)驗(yàn)之談是關(guān)于代碼里那些看起來不重要的分支。用到“用戶沒有評(píng)分就推熱門榜”“用戶已經(jīng)看過的電影不進(jìn)推薦列表”這兩個(gè)判斷在答辯時(shí)價(jià)值不低于算法本身。它們證明你考慮了真實(shí)使用場(chǎng)景而不是只在理論數(shù)據(jù)上跑通。我自己的習(xí)慣是給每個(gè)關(guān)鍵分支寫一個(gè)注釋標(biāo)明“沒有評(píng)分時(shí)的兜底邏輯”幾個(gè)月后回看代碼能快速回憶起設(shè)計(jì)意圖。這份方案如果照著一路做下來從建庫、評(píng)分、協(xié)同過濾到頁面展示是一個(gè)完整可演示的閉環(huán)也是電影推薦系統(tǒng)這個(gè)題目下比較穩(wěn)的落地路徑。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产超碰在线| 在线观看视频91| 97人人干人人操| 另类图片五月天| 人看人人摸人人操| 9久久精品| 在线观看AV不卡| 亚洲国产精品成人久久蜜臀| 97精品久久久久中文字幕| 日韩探花精品在线视频| 97精| 精品9区| 中文自拍欧美影视| 国语av最新自产拍在线观看| 亚洲天堂7777| 家庭乱伦麻豆| 久久久久久久久久久久久久久久9| 婷婷久久五月| 人人操人人色网| 中文字幕乱碼在线| 欧美大香蕉专区网| 八人操人人摸人人看| 死我十八禁| 亚洲天堂综合AV| 日本成人电影资源网| 九九碰九九爱97超碰| 电家庭影院午夜69久久夜色精品国产69乱| 国产精品97超碰| 精品999日本| 欧美少妇性乱| 国产精品九九| 亚洲限制级| 五月丁香综合啪啪| 亚洲天堂东京热| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 超碰97人人cao| 美日韩在线不卡人妻| 国产av尤物| 国产精品人人爽人人做可爱福利| 亚州五月| 色噜噜狠狠色综无码久久合欧美| 亚洲美女 晚间男人天堂| 亚洲综合99999| 九九亚洲视频| 97自拍视频在线| 国产又爽又黄| 精品无码一区二区| 五月婷婷色色| 日韩性色b| 嗯……啊…嗯嗯…啊…好舒服| 人人扣人人操| 日韩亚洲美州欧洲综三区一品在线| 五月天婷婷基地| 日本女人操逼| 欧洲综合视频| 欧美精品99久久久**| 91在线丝袜| 97超级久久| 吉川爱美亚洲二区在线| 9999久久久久| 国产深喉视频一区二区| 久操凹凸视频| 日韩亚洲精品一区二区| 欧美99热| 上床不卡网站| 2026国产精品视频| 欧美加勒比| 大茄子熟女AV导航| 欧美色干| 情趣丝袜无码操逼视频| 午夜精品久久久久久久久久蜜桃| 国产成人免费观看在线视频| 屌色在线97视频| 亚州乱码中文字幕综合久久久| 午夜男人天堂| 操老熟女AV| 中文字幕午夜精品久久久| 亚洲欧洲第二视频在线观看色图| 精品一区二区三区18| 日本在线观看网址| 日韩激情毛片一级久久久| 大香蕉免费3| 欧美综合娱乐久久| 区一二区日韩亚洲乱码av电影| 亚洲图片欧美另类综合免费视频大大香| 久久亚州大香蕉| 欧美夜夜草视频| 亚洲1区| 久久久av爱| 性欧美| 亚洲一曲日韩精品| 怡红院怡春院| 9九九国产| 一区二区三区免费视频入口| 黄页视频网站野外| 色女99一级片在线观看| 大香蕉线| 静品嫩模一区二区| 天天欧美欧美亚洲网| 无码91| 麻豆区久久久久亚| 久久九色| 色婷婷六月| 神马久久久久久久久久久久| 亚洲男人的天堂亚洲| 亚洲色图自拍| 欧美激情激情xxxx欧美专区| 99精品在线| 欧美亚洲一区二区久久久婷精品大包诱| 欲色综合| 丁香久久| 国产精品96久久久久久| 99爱精品| 色吧91| 丁香五月天啪啪| 青青草在线视频播放器| 深夜国产一区二区三区在线看| 亚洲情色五月天 | 国产精品久久天天干| 综合日本女人伊人| 人人操人人插 - 百度 - 百度| 日本天天色| 国产后入式在线观看| 强奸乱伦大香蕉网| 久操电影网| 免费久久精品麻豆一区二区av| 黄色十八禁| 高清国产精品福利网站| 欧美综合第一| 欧美一区二区三区四区综合| 91色伦综合| 欧美成人四级在线播放| 噜噜噜噜天天狠狠| 亚洲天堂区| 777超碰| 97操97色| 柠檬AV导航| 久久国产乱子伦精品免费女,网站| 国产在线76页| 国产毛片久久久久久久| 久久精品一区| 日本性爱不卡视频| 五月天久久久| 一起草高清无码| 亚洲国成人情色好看电影| 99re热有精品视频国产| 超碰视97中文| www.97在线| 国产精品一二三区18| 91久久久视| 2017av无码免费无线播| 性爱AV天堂| 日本性爱少妇| 九九热re99re6在线精品| 婷婷色影院| 人人人摸人人| 国产一级高清免费观看| 秋霞福利网| 爱我干综合| 国产精品国产精品国产| 日韩78m视频| 婷婷九月| 欧美黄片欧美黄片xxx| 97干在线| 玖玖资源视频一区二区三区| 北条麻妃性愛视频| 亚洲色图大香| 国产高潮AA片免费看| 国产色图乱伦| 国产精品伦理| 超碰碰小说97| 今日头条成人一区二区三区四虎精品| 狠狠综合网| 99久久精品无码一区二区毛片免费| 欧美 亚洲 91| 欧美日韩人人早| 一起草av| 色综合网1| 亚洲综合在线91| 91丝袜熟女| 黄页大片在线观看| 97人人干| 狠狠干综合| 免费操逼视频下载| 亚洲黄色网址视频| 色黄污美女啪啪啪免费网站| 久久精品一区二区一8| 久久精品操| 91精品婷婷国产综合久久竹菊| 青青草视频爽一爽| 日本激情免费大片| xxx0国产在线播放| 欧亚性爱视频免费看| 91被操| 四虎免费在线观看| 日韩精品亚洲一二三| 麻豆人妻偷人精品无码视频| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 久久9精品网站| 亚洲在线a| 欧美淫乱视频| 国内毛片四区| 日韩精品一区二区人人人| 男人把坤坤插入女人的下体| 超碰这里只有精品| 久草成人影片| 久久久蜜桃臀无码视频| 欧美色图第一页| 99999亚洲| 国产传媒av天美传媒在线| 色臀AV| 夜夜爽夜夜| 中文字幕一二三| 蜜臀99精品国产高清在线观看| 91观看 国产白丝| 精品人妻一区二区蜜桃视频| 天天天肏屄肏屄肏屄欧美欧美| 老鸭窝在线视频播放| 艳美熟妇先锋一二三区| 蜜桃久久久久久久| 99精品人人爽| 日韩欧美~中文字| 我要色综合网| 精品国产无码中文| 欧美色色色| 日本狠狠干| 九九九久千久久激情蜜桃在线看| 激情视频一二三| 夜夜青青无码影院| 国产丝袜啪啪| 风韵犹存大大大大香蕉 | 眼镜人妻101.com| 欧美一级特黄淫片在线观看| 婷婷五月av| 国产精品熟女AV中文字幕在线播放| julia在线观看久久| 国产专区路线| 99在线观看视频在线高清| 少妇熟女一区二区三区| 家庭乱伦国产| 电影69乱码96| 亚洲素人综合| 欧美成熟性爱精品| 日本久久网| 好好的日:com久久九九| 久久久人妻| 欧美精品日韩久久久九| 2010男人的天堂| 久久婷婷亚洲欧| 亚洲综合嫩| 日本东京热久久久电影| 精品一区二区成人动漫| 日本黄 R色 成 人网站| 日本啊啊啊啊啊视频| 蜜臀av网址| 大色综合| 国产精品99久久久www| 91青视频| 清纯唯美第一页| 免费黄色片。| 久久99视频| 99色婷婷中文字幕乱色| 亚洲精品人体| 婷婷丁香成人| 国产一| 国语av狠狠色丁香婷婷综合激情| 91丝袜美女国产| 啊啊啊啊,啊啊好多水 | 亚洲综合 欧美| 亚洲97成人在线观看| 超碰av人人人| 久久久999国产精品| 国产日产精品久久快鸭的功能介绍| 日本日逼视频网| www.男人天堂| 四虎国产精品永久地址入口| 日韩av熟女一区二区三区成人| 欧美色图自拍| 中文字幕av亚洲在线| 人妻熟女一区二区三区在线| 亚洲欧美日韩免费观看| 91ise欧美| 精彩视频日韩| 97天堂| 黑丝少妇| 亚洲不卡三级手机播放| 懂色AV一区二区三区| 婷婷性网| 天堂蜜桃无码视频一区二区| 国产精品国产精品国产| 天堂岛av| 欧美色网| 四虎884a| 8050无码八戒| 久久大香蕉97| 婷婷五月天成人| 欧洲综合色| 亚洲精品一区中文字幕乱码| 97色在线视频| yirendaxiangjiashipin| 99久久99久久免费精品蜜臀| 亚洲情色一区二区三区| 色情五月综合婷婷| 在线午夜成人无码视频| 亚洲蜜臀懂色| 国产精品色片一区二区| 极品少妇久久久久| 超碰免费在线| 日韩三级在线观看网站| 黄资源| 亚洲暴力强奸AV| 五月天精品| 99精彩视频| 国产福利合集| 极品后入免费视频| 717影院理论午夜伦八戒| 97日韩欧美亚洲| 思思热在线| 久久av无码| 亚洲天堂美臀在线| 日韩精品99999| 国产v亚洲v日韩v欧美v片另类| 嗯~啊~快点 死我视频| 国产欧美日韩一区二区三区| 欧美第五页| www.四虎在线| 久久精品国产亚洲AV片多多| 神马久久午夜| 91美女视频电影| 性站| 啪啪啪大香蕉| 激情五月天插| 欧美性夜| 亚洲图片 激情小说| 欧美日韩第一页| 97亚洲综合| 91 丝袜在线观看| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲高潮影院| 久久久久网站-538在线视频-欧美永久乱码| 黄色大香焦1级‘′‘| 啊啊啊啊啊在线| 久久熟女久| 性色乱AV一区二区| www99热| 一级二级三级黑人无码| 麻豆美女丝袜人妻中文| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 丝袜喷水在线| 久久精品人体AV| 日本国产高清色www视频在线| 啪啪啪亚欧美视频| 成人草草视频| 久久风骚城市人| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲熟妇丝袜在线观看| 天天综合网国产| 激情五月天社区| 影音先锋乱伦资源| 一区二区三区美女超清| 欧美78P| 亚洲久草AV色图| 国产精品在线网站| 你草精品在线视频| 中文字幕88av在线| 爱爱动态试试看6 0秒| 91精品伊人久久久大香线蕉91| 97AV爱| 无码av永久免费专区网站| 天天噜| 国产白丝网站| 美女十八禁| 91网站在线播放| 操亚州| WWW.加勒比人妻一区不卡.com| 五月综合久久| 久久综合五月天| 国产精品亚洲一区二区三区四区| 亚洲九月丁香| 日本熟女中文| 国产精品交换一区二区| 超碰97人人乐| 日日躁天天躁狠狠躁| 9久9久| 国产AV天美传媒一区二区三区 | 欧美成人一区二区三区在线播放| 伊人影院综合是一个与深夜成人在线 | 五月婷婷激情综合| 91美女丝袜诱惑视频| 水野优香在线观看| 九九热男人天堂| 午夜久久一区二区无码中出| 殴洲老熟女| 啊嗯嗯啊好大好爽| 91中出在线| 南澳成人一级片在线播放| 香港久久久| 色噜噜国产精品视频一区二区| 黄页| 亚洲超碰综合网| 韩日自拍| 97碰碰色| 欧美v亚洲v综合v国产v妖精| 亚洲一区二区三区不卡国产欧美| 8050无码八戒| 成年女人一区| 中文幕97| 日韩欧美女求操每天更新| 中文字幕一二三| 人人干人人操人人爱| 激情五月天插| 久久午夜伦| 鸥美插入视频| 色约约一区=区三区| 日本孕妇一区二区视频操逼免费看 | 熟妇的味道HD中文字幕| 激情五月婷| 欧美亚洲国产自久久| 天天综合网AV91| 600国产精品视频| 亚洲激情综合另类男同| 2024人人操人人摸| 2019天天操天天爽天天拍| 熟女91网| 国产强奸乱伦xd| 丁香六月婷| 97爱b| 男人天堂东京热| av在线一区二区三区| 欧美亚洲综合色| 亚州色阁| 色欲Av人妻精品一区二| 精品一区二区三区蜜桃臀赵总| 黄呦呦在线| 久久大| 亚洲成?V人片在线观看福利| 五月天久久婷婷亚洲| 精品人妻一区二区三区免费视频| 免费作爱一级视频| 久久做97| 极品销魂美女一区二区| 五月天婷婷成人网| 97久久精品不卡| 老熟妇一区二区三区啪啪| 乱欲视频| 艹比视频国产精品| 今日头条成人一区二区三区四虎精品| 欧美色青| 人妻少妇精品一区二区三区| 91插B网站| 黄片aaaaa一区| 国产乱弄免费在线视频。| 日日摸日日碰夜夜爽视频| 精品在线观看视频在线| 久久久专区| 一级毛片久久久久久久女人18| 精品一区二区三区蜜桃臀赵总| 亚洲AV色图一区| 性爱免费视频成人| 久久神马影院| 亚洲AV无码翔田千里网站| yazhousetuoumei| 大香蕉78| 色哟哟-国产专区| 超碰九7| 夜夜嗨一区二区| 777超碰| 大香网伊人久久综合| 色九色久| 六月色婷婷| 九九九999久久久网站| 一区在线国产播放| 91狠狠综合久久| 激情五月综合网| 亚洲久9| 久久久蜜桃一区二区三区| 97国产精品一区二区传媒公司| 东京热熟女亚洲视频网站| 亚洲一区日韩精品| 无码男人天堂| 人妻熟女av国产网站| 女人18精品一区二区三区| 蜜桃无码AV一区二区| 久伊人网78| 丁香五月社区| 探花视频免费观看国产专区| 精产国品一区二三产品| 四虎影视永久在线免费| 国产丁香精品露脸视频| 丁香五月av| 蜜乳AV免费观看| 精品小视频在线| 思思性爱| 国产精品自拍视频| 制服少妇欧美| 无码国产精品午夜不卡(| 97伊人| 不卡九肏| 免费av大片| 日韩精品人妻一区二区| 在线97在线| 亚洲国产午夜真人一级片中文字幕精品黄网站| 久久久草草精品| 欧亚综合一卡二卡中文字幕| 天天干天天燥| 大香蕉日韩| 99热在线不卡| 操一区| 国产最火爆久久国产网站网站| 久久少妇人妻| 嗯嗯嗯啊啊啊在线免费观看| 99热99在线播放激情| 久草免费在线视频| 欧洲精品一二三在线| 久久国产三区| 影音先锋乱| 无遮挡又黄又刺激的视频| 中文字幕精品久久久久人妻红杏ⅰ| 亚洲色诱惑| 日韩激情毛片一级久久久| 黄页网站成人免费| 91 综合 色| 午夜精品99久久久久传媒| 中国女人内射6XXXXX| 吻戏激情性巴克| 免费啪啪一级视频| 国产午夜在线观看视频| 亚洲精品97久久| 中字一区| 天美欧美国产| 色女综合| 丰满欧美少妇| 亚洲丝袜色| 国产AV超爽| 日本熟女中文字幕一区| 在线视频免费观看午夜| 超碰碰97资源站| 欲色啪| 熟妇人妻一区二区三在线| 精品四五区| 丁香五月婷婷啪啪| 欧美色五月| 国产超碰| 日本精品第一视频在'| 91社区拍啪人妻| 精品中文字幕第一页| 翔田千里A片一区二区| 青娱乐 青青青操 日逼| 看看日B真人视频| 97伪v| 麻豆精品三区视频| 美女黄码视频午夜| 加勒比伊人影院| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 国产精品蜜乳AV| 精品久久久高清无码| 偷拍亚洲熟女视频播放| 激情小说日韩无码| 国产辣妈在线视频福利| 国产无马在线| wwwxxx日本爽| 淫荡少妇免费| 欧美人妻制服| 天天射日日干| 黄片免费日韩| 天天插夜夜操| 天天操天天舔| 色丁香五月婷婷| 欧美日韩成人在线| 久久啊哟| 国产精品欧美激在线| 日韩精品操少妇| 91精品又粗又猛又爽| 伊人久久亚洲色欲综合网站 | 日本久久女同性恋视频| 国内毛片热久久思思热| 99re公开精品免费视频| 欧日a| 激情第四色| 99re在线| www.久久制服糖| japan日本高清乱xxxx| 粉嫩av在线一区二区| 操操碰| 亚洲熟妇乱女区二区三区| 欧美一区二区三区大综合| 韩日精品福利视频一区不卡在线免| 日韩 女同 综合| 超碰97国产欧美| 人妻精品免费一二三区| 国产1769在线| 一区黄二区黄| 国产性爱欧美性爱在线| 久久精品电影在线| 精品中文字幕第一页| 亚洲国产欧美中日韩成人综合视频| 激情综合五| 青青草色插素人| 一区二区三区麻豆| 91精品久久久| 91丝袜美女国产| 韩日精品福利视频一区不卡在线免| 亚洲清纯综合| 欧美伊人久久综合网| 国内精品伊人久久久久影院会| 熟女人妻av在线资源,黄色的资源| 99xav| 青草一区二区| 一级久久久久久久久久久| 久久久一级| 欧美熟女逼久久久久久| 女人与公拘交酡2020视频| 欧美精品自慰系列寂寞少妇| 中文乱码99| 欧美大的香蕉有线电视视频| 亚洲成a人在线观看久| 日本人妻一区二区| 亚洲女人91| 91在线精品| 啊啊啊啊啊在线视频| 91宗合网| 超碰在线国产| 青青草国产一区二区三区| 伊人网免费视频| 色欧美天天| 久久大香蕉97| 日韩黄色电影网站| 欧美一品道| 亚洲天堂中文字| 国产操逼网站亚洲一级黄色| 国产树林里野战在线看| 欧美大战久久久伊人| 婷婷伊人五月| 伊人五月天青青草婷婷| 欧美 亚洲| 99操视频| 美女好片色日本| 亚洲福利中文字幕在线| 欧美精品亚洲精品日韩传电影| 国产精品成人无码a v毛片| 色女综合| 尹人免费观看视频在线| 成人精品视频一区二区| 亚洲视频中文一区| 国产婷婷一区| 国产精品久久天天干| 亚洲人在线| 久久久性| 黄色高清久久无码依人| 五月天婷婷在线看| 亚洲欧美另类少妇精品| 久久中文字幕一区不卡| 97资源欧美| 亚洲综合另类小说色区亚洲成av人片在www | 欧美色偷拍| 欧美激情一区| 男女激情中文字幕| 国产高清无码一区三区二区| 加勒比伊人影院| 熟妇操花| 亚洲欧美另类图片| 一牛影视久久久一区二区三区| 黄色AV免费| 久久国模av| 99精品久久久久久久婷婷| 久久激情视频| 东京热激情视频一二三区| 中英熟女操女| jiujiujiujingpin| 婷婷六月色| 9久在线视频只有精品| 国产丰满熟夫69mpp| 免费A V在线播放| 人妻91少妇| 99热精品青草在线 | 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 久久性生大片免费观看性| 91九九九逼| 欧美性爱在线无码| 日韩性爱一级片| 日韩欧美大力操| 亚洲高清在线se| 中文字幕在线播放2中文字幕在线观看2| 亚洲欧美日韩中文播放| 精品美女久久一二三| 亚洲夜夜欢无码一区二区| 久久久96| 欧美天天在线| 精品大久久| 国产亚洲色婷婷久久99精品91葵花宝典| 人人澡人人干| 香蕉免费一区二区三区不读| 五月激情综合网| 青草草免费网站av| 97AV在线观看| 夜色97| 国产一区二区三区不卡手机在线| 熟女人妇一区二区三区| 屁股久久久久久| 国产精品乱码久久久、久久| 少妇蜜汁| 伊人婷婷五月天| 中文精品一区二去| 亚洲日韩美女丝袜美腿人妻视频| 91性| 久插不卡| 色精品极品| 在线观看日韩av不卡| 香蕉黄色一级视频| 91东北熟女| 成人资源中文字幕在线观看| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 玖玖综合.com| 黄色av一区二区在线| 久久69精品久久久久久久| 亚洲情色综合| 国产精品96久久久久久| 偷拍欧美亚洲| 超碰久久精品| 和协影院中文字幕三区| 狼人综合婷婷激情四射| 婷婷精品| 婷婷丁香在线| 国产吞精a级片激情电影| 黄色人人| 日本色色视频网站| 国产二区三区免费视频| 射综合网| 亚洲丝袜少妇在线| 欧美亚洲天天| 黑人在线91| 亚洲精品蜜桃久久久| 国偷自 一区二区| 天综合网欧美| 色在线69堂| 国产噜噜噜噜噜久久久久久久久| 国产60区。| 精品国产99| 干b在线性社区| 99re8免费高清在线| 久久一留热品黄| 日韩99神马视频播放| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 国产成人天堂| 亚洲熟女一区| WWW美腿丝袜香蕉中文| 97视频在线视频| 黄色一区三区| 后入合集| 天天综合网~91| 日韩肏逼视频| 中文字幕日韩电影人妻| 人人妻人人爽 97人人看碰人免费公开视频| av亚欧| 91在线秘 男同| 国产成人精品无码久久| 在线可观看的黄色网址| 91站街按摩店老熟女熟女| 97自拍视频在线| 婷婷色一区| 国产精品网站www| 热热色色综合| 国产精品伦理| 中文字幕av亚洲精品| 精品日韩中文在线| 日本大片日本一区二区免费高清 | 国产内射爽爽大片| 中文字幕一区二区日韩网| 在线中文字幕极品av| 婷婷五月天成人网| 96AV久久久| 亚洲AV在线资源| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 97久久超碰| 伊人五月天青青草婷婷| 美女毛片999| 精品少妇一区二区| 国产精品4p在线观看| 夜色AV无码手机在线影院| 涩五月婷婷| 97超碰久| 78精品| 国产AV久久野战精品| 久久久久9999| 午夜精品久久久99| 久热伊人| 亚洲 自拍偷拍 欧美| 开心五月婷婷| 欧美亚州色的图| 97碰久久| 探花一区在线| 国产AV天美| 国产91 丝袜在线播放 | 精品9区| 亚洲欧美人妻| 亚洲乱码尤物193YW| 中文一区二区婷婷视频| 情色五月天就去干| 素人一区二区三区日韩| 夜夜中出国产| 老司机福利社视频在线观看| 呦呦影院| 亚洲色偷偷色噜噜狠狠99网| 成人天天爽| 日本精品中文字幕视频| 天天干少妇| 久久9999 | 亚洲人精| 夜夜高潮夜夜爽夜夜爱爱一区| 国产高清精品一区二区三区毛片| 日韩精品 资源| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产在线观看一区二区三区| 国产原创剧情在线丝袜 | 人人妻人射| 欧美熟女激情| 亚洲欧美综合| 国产后入精品| 日韩小电影| 99精品无码| 欧美亚洲系列| 操一区| 久久成人东京热人妻| 小情侣高清国产在线视频| 97一区二区三区视频| 九九九精品成人免费视频小说| 国产精品交换一区二区| 久久久久久九九九九九| 国产欧美一区激情交| 男人天堂最新手机版在线青青草| 成人三一级一片aaa| 久色99999| 日本免费专区| 亚洲精品 欧美精品| 偷拍亚洲熟女视频播放| 伊人青青草久久| 亚瑟国产精品久久无码| 99在线视频播放| 国产一级137片内射麻豆| 国产综合色精品在线观看| 亚洲 欧美 天天| 另类图片综合| 色月天AV导航| 欧美日韩啪啪电影| 大香蕉啪啪啪啪在线| 日韩操逼HD| 久久久久久久久国产| 亚洲超碰AV| 亚洲色图欧美色18直播在线| 一区二区三区四区色图| 农村女一级毛卡片| 午夜福利在线视频1000| 无色无码| 葡萄牙性视频一二区| 久久综合18p| 午夜视频久久久久一区| 2017天天透天天通天天擦| 国产精选三级在线观看| 欧美综合第一页| 欧美一区二区情色| 欧美一级久久久丰满| 91在线丝袜| 色噜噜综合在线| 自怕偷自怕亚洲精品| 伊人久久亚洲色欲综合网站 | 国产精品爆乳懂色蜜乳| 亚洲AV不卡在线观看尤物| 中文字幕狠狠玩| 国产一区在线看| 精品久久久久久久久久久久| 乱伦av麻豆| 久久久四区| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩欧美中文字亚洲慕| 美国黄片aaa| 亚洲精品久久久久久久久豆丁网| 另类图片欧美激情综合| 嗯嗯啊啊日韩精品| www.狠狠干.coom | 密臀在线免费观看| 久久九九国产精品| 色综合一区二区三区| 97视频900| 一区二区偷拍拍视频| 天天色黄色影院天天操| 天天夜夜rb| 亚洲成人色情五月天丁香花| 伊人嫩草| 人妻天天爽夜夜爽爽| www.大香| 欧美精品成人一区二区在线观看 | 欧美姓爱综合网| 国产精品天干天干综合网麻豆| 思思热在线视频精品| 再深点灬舒服灬太大了添视频| 久操免费观看| 亚洲在钱| 97久久久精品| 天天色香欲综合网| 国产成人精品日本亚洲语言| 人人操人人摸avav| 热热色91| 自拍啪啪视频| 久日综合网| 久久久av爱| 日韩AV电影网站| 日本欧美国内在线| 日本东京热加勒比久久| 日韩欧美性吧婷婷乱伦大香蕉| 新怡红院| 伊人久久亚洲色欲综合网站| 99色婷婷中文字幕乱色| 国产欧美一区二区| 久操大香蕉手机视频在线看| 91精品伊人久久久大香线蕉91| 人人贴人人摸| 日本韩国国产精品一区| 久草午夜| 蜜臀久久99精品久久久久久婷婷| 色偷偷2020免费视频播放| 欧洲精品欧洲精品| 人妻内射一区二区在线视频| 97 国产一区| 夜夜操夜夜爽夜夜高潮| 亚洲色图久久成人| 久久男人的天堂国产| 久久色情| 婷婷99| 人妻少妇av在线观看| 久久国内| 自拍偷拍 日韩无码| 亚乱色| 欧美国产精品| 黑人狂躁日本妞一区二区三区| 欧美精品久久久久久久丰满| 青娱乐淫乱1314| 欧美性爽xyxOOOO| 人人弄人人摸| 日韩操p| 日本狂喷奶水在线播放212| 亚洲一卡二卡在线免费| 欧美成熟性爱精品| 无码一区二区精品视频久久久春药| 一级毛片电影免费看| 日韩免费a级毛片无码a∨| 性无码专区2020| 中文字幕日韩电影人妻| 丰满岳乱妇一区二区三区| 九九久久一区二区伦理| 欧亚性爱视频免费看| 色情五月综合婷婷| 欧美午夜精品久久久久久3D| 高清不卡视频| 成人五月天色网| 日本最新1区2区3区| 一本色道久久综合狠狠操| 嗯嗯不要 视频| 97超碰色| 乱伦一区二区三区‘| 强奸乱伦大香蕉网| 激情综合五月| 美女的肌被草喷水视频| 一区二区三区成人 | 色情成人五月天| 很黄很污的免费网站| 天美传媒Av在线| 一卡二卡在线播放| 蜜臀99久久精品久久久懂爱| 久久久久久久久久va| 秋霞免费AV| 欧美淫穴| 色天堂在线观看| 91精品人妻一品二品三品| 家庭乱伦麻豆| 午夜无码精品免费看性色| 99热色精品| 亚洲视频,小说| 男人天堂无码| 欧美黄色手机在线观看| 国产福利av精彩对白| 色香色香欲天天天影视综合网| 四虎国产成人精品免费一女五男| 色一区二区三区综合| 中文字幕丰满子伦无码专区在线视频最新| 国产成人自拍视频视频| 丁香六月啪啪| 欧美成人综合| 国产传媒日韩| 国产美女mm131爽爽爽爽| 91原创在线观看| 亚洲中亚日激情视频| 天天看天天日| 国产一级做a爰大片免费久久| 精品夜夜澡人妻无码| 久久久无码av精| 国产女上位好爽在线| 粉嫩久久久极品| 91视频伊人| 五月综合激情| 超碰久草| 岛国免费黄色网址| 亚洲人成色9999精品久久| 亚洲精品久久久久久| 欧美成人A√在线一区二区| 一区二区激情国产熟女| 亚洲区限制级 99| 亚洲一区操| 天堂岛av| www男人天堂| 无色无码| 天综合网欧美| 秋霞一级A片黄色视频| 91亚州日韩高清| AV天堂因数| 男人的天堂一区三区| 人妻丝袜肏逼| 最新av中文字幕高清| 国产精品青青草| 精品97久久| 91色色色| 亚春色色| 亚洲图片偷拍视频区| 欧洲精品欧洲精品| 欧美日本中字另类在线| 午夜啊啊啊| 无码人妻一区二区三区色欲aⅴ| 69人妻精品一区二区绯色| 一本大道青青| 亚洲色图欧美视频| 国产熟女高潮一区二区三区| 一类无码操逼视频| 欧美久久久| 国产网红精品| 亚洲日本天堂| 333kkkk·亚洲com久久| 亚洲高清男人天堂| 永久免费发布性爱网| 国产熟女精品区| 强奸乱伦大香蕉| 欧美 亚洲 91| 日韩乱中文 | 成人性爱电影网| 国产视频97| 午夜精品视频777| 国产suv一区二区三区6| 欧美色婷婷| 丝袜美腿亚洲| 中文乱码99| 新久久AV| 性色高清..……| 欧美日韩99| 精品人妻一区二区三区日产乱码| 色999人与兽| 超碰免费人妻人人| 亚洲欧洲色情高清| 日韩AV无码中文一区二区| 国产日产欧产美韩系列麻豆免费| 激情久久久| 青青久久艹| 欧美色图私拍91| 久草免费福利在线播放| 久久九九精品一区二区 | 九热中文字幕| 操香逼| 亚洲人妻中文高清| 欧美色图20P| 日韩中字av一区| 国产自产自拍| 久久97视频| 青青草原综合久久大伊人精品| 免费的黄片有限公司| 夜夜免费视频| 91oumei| 熟女乱伦A| 东京热,男人的天堂| 蜜臀av中字字幕网站| 中文字幕一区电影在线观看| 日韩91网| 97干天天| 亚洲啪啪性视频| 最新av中文字幕高清| 久久久性少妇| 亚洲美欧999| 欧美性爱伊人| 啪啪性爱免费视频| 欧亚韩国999| 日韩久久超碰色| 韩国黄色片精品久久久| 视频一区二区免费在线| 精品人妻伦一区二区三区久久| 婷婷丁香六月| 约操熟妇| 国产偷人伦激情在线观看| 欧美洲精品一级| 亚洲情色1区| 99九九精品| 亚洲字幕一区二区| 久热一区二区| 精品国产乱码久久久久久免费| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 人干人人人操人人摸| 亚洲综合电影| 亚州黄站| 亚洲欧美日韩国产丝袜自拍中文| 男人天堂2012| 久久久久国产一区二| 久久中文字幕不卡人妻| 91成人精品| 学生妹天天看| 一区中文字幕二区日韩| 综合网亚洲在线| 人妻无码久久一区二区三区免费| 亚洲 日本 一 二 三| 成人性爱全视频观看| 国产美女销魂在线观看不卡| 青青草好吊色| 婷婷性网| 夜夜嗨一区二区三区三州加勒比| 啊啊啊啊啊好大好舒服想要| 欧美乱色| 色色亚洲| 996热| 国产18精品亚洲精品| 污污汅18禁网站在线永久免费观看| 日韩视频中文字幕| 色妺妺AⅤ| 天天干18禁| 九七超碰人人乐| 69久久| 欧美,日韩,中文,另类| 日日干夜夜欢| 中亚黄色三级大片| 欧美久久人妻少妇一区二区| 亚洲欧洲精品成人| 国产又大又粗又长视频在线| 97色在线观看| 精品久久在线区一区| 100啪啪视频大全| 欧美色棕合| 亚洲丝袜二区| 伊人亚洲国产一成人久久精品,久久| 亚洲蜜桃V妇女| 一区在线国产播放| 综合欧美日本三级| 无码抄逼网| 婷婷久草| 日韩三级一区| 亚洲成人av色网| 久久久久久久久久久97| 丰满少妇一区二区三区四区观看 | 蜜桃久久一区二区| 啊啊啊啊啊好多水| 99无码狠狠久久| 欧美黄色手机在线观看| 久久久久久亚洲Av无码精| WWW操逼| 久久精品国产99精品亚洲蜜...| 中文字幕AV乱伦| 一类无码操逼视频|