尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Java热点新闻搜索系统毕设复盘:Spring Boot + Elasticsearch + Redis从零到答辩

Java热点新闻搜索系统毕设复盘:Spring Boot + Elasticsearch + Redis从零到答辩 毕业设计做了个Java热点新闻搜索系统从选题到答辩整整磨了三个月中间踩过的坑比想象中的多得多。这篇文章想把整个项目的来龙去脉、技术选型、核心代码和避坑经验完整梳理一遍给正在做类似选题或者准备做Java Web毕设的同学一个参考。整个过程里涉及的Spring Boot、Elasticsearch、Redis、Vue这些技术栈我会把每个关键决策背后的原因讲清楚不是那种网上抄来的笼统总结而是实实在在跑通、被答辩老师追问过、最终拿到不错的成绩的真实经验。1. 项目整体设计与思路拆解1.1 这个系统到底解决了什么问题热点新闻搜索系统名字看着很直白但毕设题目里加了“智能热点新闻检索与管理平台”和“新闻发布与互动交流系统”这两个后缀实质上是一个功能更完整的新闻类Web应用。核心要解决三个问题第一用户能快速搜到想要的新闻而不是在列表页里翻半天第二系统能自动识别哪些新闻是热点把高热度内容优先展示给用户第三除了看新闻还要支持新闻发布和用户之间的评论互动否则撑不起“交流系统”这个定位。我见过很多同学做类似系统最后只做了一个简单的CRUD程序新闻表加用户表前端套个模板搜索栏用SQL的LIKE模糊查询糊弄过去。答辩时老师问一句“你的搜索系统比直接用百度有什么区别”直接就答不上来。所以我在设计时把“搜索”作为技术核心引入了Elasticsearch做全文检索并且加了热度排名算法让系统真正有“智能”的成分而不是拿一个普通管理系统的壳子去套“搜索”这两个字。1.2 技术栈选型为什么是这些组合技术选型直接决定了开发的难度和最终答辩的深度这里我把最终确定的方案列出来并说清楚每项选择的理由。后端主框架用的是Spring Boot 2.7.x这是当前Java Web毕设最主流的方案开发效率高、生态成熟、资料多。不选Spring Cloud是因为单机系统完全不需要微服务那套复杂度选了反而是给自己挖坑。持久层用了MyBatis-Plus它对单表操作做了大量封装新闻、评论、用户这些表的增删改查写起来非常快分页插件也直接能用。有人喜欢用Spring Data JPA但我个人更习惯MyBatis-Plus的SQL可控性尤其是后面做热点统计时需要写稍微复杂的聚合查询MyBatis-Plus的Wrapper机制和自定义SQL结合得很舒服。搜索模块引入了Elasticsearch 7.17版本做新闻内容的全文检索。这一步是整个系统最提技术含量的选择。ES的倒排索引机制特别适合“关键词匹配大量文本并返回相关度排序”的场景新闻标题和正文这种长文本内容用MySQL的LIKE查询数据量过万后性能直线下降而ES在百万级数据下依然能做到毫秒级返回。更重要的是ES自带的中文分词器IK分词器能对中文句子做语义切分用户搜“疫情防控政策”也能命中包含“疫情”“防控”“政策”的新闻这种体验远远不是LIKE能比的。缓存用了Redis主要缓存热点新闻列表和热搜关键词Top10。新闻系统的特点是读多写少热点新闻的访问量集中每次都从数据库查会压垮MySQL。把热度最高的搜索结果缓存到Redis里设置5分钟的过期时间查询接口的响应时间从几百毫秒直接降到几十毫秒效果立竿见影。前端没有用JSP那一套传统做法选择了Vue 3加Element Plus通过Axios请求后端RESTful API。前后端分离是现在企业开发的主流模式答辩时老师也更认可这种结构前端项目和后端项目可以独立部署、独立测试。我身边有同学图省事用Thymeleaf模板引擎做服务端渲染确实少了不少工作量但项目演示时页面的交互流畅度和视觉体验差了一截。既然有三个月做毕设我建议还是上前后端分离逼自己多掌握一门技术简历上也好写。1.3 核心功能模块划分整个系统分成前台和后台两部分前台面向普通用户后台面向新闻管理员。前台提供了用户注册登录、热点新闻榜单、全站搜索、新闻详情浏览、评论互动、个人中心这些功能。热点新闻榜单分成“24小时热榜”和“一周热榜”根据用户点击量和评论量动态计算。搜索支持标题搜索和全文搜索两种模式搜索结果按相关度和热度综合排序搜索后还能按时间范围、新闻分类做二次筛选。用户登录后可以收藏新闻、给新闻点赞、发表评论和回复评论这些行为都会纳入热度计算。后台提供了新闻发布编辑、分类管理、用户管理、评论审核、数据统计分析这些功能。编辑发布新闻时支持富文本上传配图统计页面展示新闻总浏览量、评论总量、活跃用户数等核心指标并且用图表展示最近一周的热点趋势变化。后台交互虽然不是毕设的考察重点但做了能让系统完整度上一个档次。2. 数据库设计与核心模块原理2.1 五张核心表的设计思路数据库我用的是MySQL 8.0设计了五张核心表用户表、新闻表、分类表、评论表、用户行为表。这五张表的关联关系不复杂但每一张表的设计都考虑了实际业务场景。用户表包含id、用户名、密码、昵称、头像URL、角色、注册时间、状态这些字段。密码存的是BCrypt加密后的密文绝对不能明文入库。角色字段区分普通用户和系统管理员后台接口通过拦截器校验角色权限防止普通用户调用管理接口。新闻表是业务核心我重点设计了这些字段标题、摘要、正文、封面图URL、分类ID、浏览量、评论数、点赞数、收藏数、发布时间、状态、来源。浏览量、评论数这些计数不仅用于展示也是热度算法的基础输入。状态字段用来做上下架管理草稿状态的新闻不会被搜索接口检索到。为了让ES和MySQL的数据保持一致新闻表里额外保留了esId字段每次新闻内容变更时同步更新ES索引。评论表支撑互动交流功能包含所属新闻ID、评论用户ID、父评论ID、评论内容、创建时间。父评论ID的设计是为了实现楼中楼回复效果用户点击回复按钮后新的评论通过parentId关联到目标评论前端展示时按时间排序、嵌套渲染。这里有个容易踩的坑删除新闻时要手动把该新闻下的评论一并删除我在新闻的delete接口里加了事务处理避免产生孤儿数据。用户行为表是最能体现“智能”的一张表用于记录用户的点击、搜索、收藏、点赞四类行为。字段包括用户ID、行为类型、目标类型、目标ID、行为内容、创建时间。用户每次点击新闻详情、每次执行搜索后端都会写一条行为记录。这张表的数据既是热度计算的素材也是后续给用户做个性化推荐的潜在数据源。投影到毕设中它就是整个系统“智能”二字的落地载体。数据库设计过程中我最大的体会是不要为了体现“设计感”而过度拆分表。我第一版设计时加了标签表、新闻标签关联表、关注表等一堆表ER图画得很大但实际开发时发现很多地方用不上反而增加了联表查询的复杂度。毕设项目更重要的是功能的完整性和模块间的逻辑自洽基础表设计到能够支撑所有功能、不出现明显冗余就可以了。2.2 Elasticsearch搜索背后的原理为什么引入Elasticsearch做搜索而不继续用MySQL的LIKE这个问题答辩时被老师问到过需要从原理层面说清楚。MySQL的LIKE %关键词%走的是全表扫描它无法利用B树索引加速匹配因为通配符放在字符串首部会让索引失效。数据量几千条时感觉不明显一旦到了几十万条一次模糊查询可能要几百毫秒甚至秒级无法接受。Elasticsearch则完全不同它基于倒排索引结构。简单来说文档写入时会被切分成一个个词条并维护一个“词条到文档ID列表”的映射关系——这就是倒排索引。查询“疫情政策”时ES会把查询词也做同样的分词然后在倒排索引里快速查找只需匹配少量文档而不是全表扫描。ES的第二个优势是相关性打分。查询出的结果不是简单的布尔匹配而是通过TF-IDF或BM25算法计算每篇文档和查询词的相关度分数按分数降序返回。新闻搜索场景下用户最关心的是“相关”的新闻排前面而不是机械地按时间排序。这套机制是MySQL原生不支持的能力。ES和MySQL的同步方案网上推荐最多的是Logstash或MQ异步同步但对毕设来说太重了。我选择了在业务代码里做双写。发布新闻时先写MySQL拿自增ID再用同一个ID写ES索引修改和删除时同时操作两个数据源。由于业务量不大双写失败的概率很低再加上定期用定时任务做一次全量同步作为兜底数据一致性是完全够用的。为了在Spring Boot里操作ES我引入了Spring Data Elasticsearch依赖定义了NewsDocument实体类并标注了Document注解指定索引名通过ElasticsearchRestTemplate完成索引的增删改查。这套API封装了大部分底层细节代码写起来和操作数据库非常像上手成本不高。如果不想用Spring Data封装也可以直接用Elasticsearch官方提供的Java High Level REST Client灵活度更高但代码量会多一些。毕设选择Spring Data Elasticsearch完全够用而且答辩时能讲的东西更清晰。2.3 热点新闻热度计算模型“智能热点”的核心竞争力在于热度计算。我的热度算法综合了时间衰减、浏览量、评论量、点赞量、收藏量五个维度的数据最终分数决定了新闻在热榜上的排序。基础公式是score (viewCount * 1 commentCount * 3 likeCount * 2 favoriteCount * 2) / pow((hoursAgo 2), 1.5)。这里的hoursAgo是新闻发布时间到当前时间的小时数。时间衰减用1.5次幂意味着新闻发布越久、热度衰减越快避免老新闻长期霸占榜单。浏览量的权重设为1评论设为3点赞和收藏设为2理由很简单浏览是低成本行为用户随手点开就算一次而评论和点赞需要用户付出更多意愿能更真实地反映新闻的受欢迎程度。如果只按浏览量排标题党新闻永远排最前面这不叫热点叫点击量排行榜。指标统计的实时性怎么保证每篇新闻详情页的展示逻辑里除了返回新闻内容还会异步触发浏览量的自增操作。RCU里我用Redis的Hash结构维护每篇新闻的维度计数浏览量变更时先更新Redis再由定时任务每隔10分钟批量回写MySQL和ES。这样的设计避免每条用户行为都直接写数据库减少了数据库压力。热度榜的生成同样在Redis里维护一个ZSet结构成员是新闻ID分数就是实时计算的热度值用户请求热榜时直接返回TopN的ID列表。这套架构既保证了演示时的响应速度又让热度数值是实时动态变化的演示效果很好。3. 核心功能实现与代码级解析3.1 搜索模块从请求到结果的完整链路搜索功能是系统最重要的模块实现思路上分为三步接收请求并参数校验、构造ES查询条件、组装并返回结果。后端接收的关键参数为keyword、pageNum、pageSize、sortType和categoryId。keyword是用户输入的搜索词sortType支持“综合”“最新”“最热”三种排序方式。校验通过后代码片段如下public IPageNewsVO searchNews(String keyword, Long categoryId, int pageNum, int pageSize, String sortType) { // 1. 保存用户搜索行为异步处理 userBehaviorService.saveSearchBehavior(StpUtils.getLoginUserId(), keyword); // 2. 记录热搜词 redisTemplate.opsForZSet().incrementScore(HOT_KEYWORDS_KEY, keyword, 1); // 3. 构造ES查询 NativeSearchQueryBuilder queryBuilder new NativeSearchQueryBuilder(); BoolQueryBuilder boolQuery QueryBuilders.boolQuery(); // 关键词匹配标题和正文权重不同 boolQuery.must(QueryBuilders.multiMatchQuery(keyword, title^3, // 标题权重更高 summary^2, content )); // 分类筛选 if (categoryId ! null) { boolQuery.filter(QueryBuilders.termQuery(categoryId, categoryId)); } // 排序策略 if (latest.equals(sortType)) { queryBuilder.withSort(SortBuilders.fieldSort(publishTime).order(SortOrder.DESC)); } else if (hot.equals(sortType)) { queryBuilder.withSort(SortBuilders.fieldSort(score).order(SortOrder.DESC)); } else { queryBuilder.withSort(SortBuilders.scoreSort().order(SortOrder.DESC)); } queryBuilder.withQuery(boolQuery); queryBuilder.withPageable(PageRequest.of(pageNum - 1, pageSize)); // 4. 执行查询并封装结果 SearchHitsNewsDocument searchHits elasticsearchRestTemplate.search( queryBuilder.build(), NewsDocument.class); // 5. 转换VO并回填MySQL中的实时浏览量 return convertToPage(searchHits, pageNum, pageSize); }代码里有几个细节值得展开。保存搜索行为和热搜词统计都放在查询逻辑里同步执行对性能有一定影响——在高并发场景下得改成异步但毕设项目里数据量小同步执行的代码结构反而更清晰也好调试。multiMatchQuery里通过“^3”“^2”给字段赋了不同权重意思是标题匹配的得分权重是正文的3倍这样用户在搜索“地震”时标题含“地震”的新闻一定排在正文含“地震”的新闻前面这个细节对搜索体验的影响非常明显。排序策略里“综合”使用的是ES自带的相关度分数“最新”按发布时间倒序“最热”按我们写入ES的热度分数倒序。搜索请求的处理中有个隐藏的优化点所有的搜索结果都只从ES返回新闻ID列表新闻的标题、摘要、封面这些展示信息也从ES文档里取。ES文档在写入时就冗余了这些字段不需要反查MySQL拼接数据。但浏览量这种实时性要求高的字段ES里存的数值可能滞后所以我在组装NewsVO时特意用Redis里的实时计数覆盖了ES里的旧值从用户视角看数据永远是准的。3.2 热榜生成定时计算加实时更新热榜的生成分为两个阶段实时更新和周期重算。实时更新指的是用户产生浏览、评论、点赞等行为后通过AOP切面拦截行为事件同步更新Redis ZSet里的热度分数。代码用ZSet的incrementScore方法实现对指定新闻ID增加对应的热度权重。这样热榜展示时永远基于最新的行为数据用户刚点赞的新闻马上能在热榜里看到排名上升这种即时反馈给答辩演示加分不少。周期重算是防止Redis崩溃或数据丢失导致热榜数据错误。我写了一个Spring定时任务每30分钟执行一次Scheduled(cron 0 */30 * * * ?) public void recalculateHotScore() { ListNews allNews newsService.list(); for (News news : allNews) { double score calculateScore(news); redisTemplate.opsForZSet().add(HOT_NEWS_KEY, news.getId(), score); // 同步到ES保证搜索的“最热”排序也用上最新值 updateNewsScoreToEs(news.getId(), score); } }这个定时任务先取出MySQL中所有非下架新闻逐条计算热度分数覆盖写回Redis里的ZSet。如果某条新闻已经被移除、状态变成下架就直接在ZSet里删除对应成员避免打开详情页时看到404。定时任务里同步更新ES的score字段否则用户在搜索页切到“最热”排序时用的还是旧数据。这里有个实践教训第一次做热度榜时直接把定时任务设在每分钟执行一次结果数据量到几千条后MySQL CPU被打满。后来我把重算间隔调大到30分钟并且结合Redis的实时增量更新压力才降下来。定时重算是兜底方案真正扛流量的是增量更新这个思路在很多系统设计里都适用。3.3 新闻发布与互动交流模块新闻发布功能主要在后台管理模块实现。后端提供一个POST接口接收新闻标题、摘要、正文HTML、封面图、分类ID和状态参数。正文部分我用了wangEditor这个富文本编辑器它输出的HTML片段直接存在MySQL的text字段里前端详情页用v-html渲染即可。这里有一个需要注意的安全问题如果直接渲染用户提交的HTML可能存在XSS注入风险。我在后端加了一个简单的Jsoup过滤器对富文本内容中的script标签和onclick属性做了清洗保证发出去的新闻不会携带恶意脚本。发布成功的新闻会同步写入ESTransactional(rollbackFor Exception.class) public void publishNews(NewsPublishRequest request) { News news new News(); BeanUtils.copyProperties(request, news); news.setViewCount(0L); news.setCommentCount(0L); news.setStatus(1); newsService.save(news); // 同步到ES NewsDocument doc new NewsDocument(); BeanUtils.copyProperties(news, doc); elasticsearchRestTemplate.save(doc); }Transactional注解保证MySQL写入和ES写入不出现一个成功一个失败的情况。ES没有事务机制但这种方式能保证大部分场景下的一致性即使中途崩溃定时全量同步任务也能在下一轮把缺失的数据补上。评论互动模块的代码相对常规核心是评论列表的嵌套查询。查询某篇新闻的评论时先把parentId为0的一级评论取出来再根据一级评论的ID批量查询子评论最后在内存里组装成树形结构返回给前端。评论数据量不大时这种方式比一次性深查询简单得多也不容易出现SQL性能问题。发送评论的接口用Redis做了一层简单的频率限制同一个用户10秒内只能发一条评论防止刷屏这在答辩现场演示多人同时操作时特别有用。4. 前端页面与交互实现4.1 页面架构与工程搭建前端我搭建的是一个标准的Vue 3项目用Vite作为构建工具UI框架选的Element Plus。项目结构按页面维度拆成views、components、router、store、api五个目录。views存放页面级组件components存放可复用的子组件router定义路由表store用Pinia管理全局用户状态api目录统一封装axios的请求方法。页面路由采用懒加载方式每个页面在独立打包的chunk里首屏加载速度更快。路由守卫拦截未登录用户访问个人中心和后台管理页面。这里有个小设计细节不同身份的用户登录后跳转的首页不一样。普通用户跳到新闻首页管理员跳到后台管理面板实现方式是在登录接口的返回值里带上角色的标识前端根据role字段动态redirect。4.2 搜索页和热榜页的关键交互搜索页的交互设计直接影响项目演示时给人的第一印象。顶部放一个大的搜索输入框支持回车搜索和搜索建议下拉。搜索建议调用后端接口返回热搜词Top10渲染成标签样式点击标签直接搜索对应关键词。搜索结果区域分成两个tab一个显示“搜索到的新闻”另一个显示“大家都在搜”后者也就是热搜词榜。热榜页放在首页的侧边栏位置用列表形式展示Top10新闻每条带排名序号、标题摘要和热度分数。前三名用了醒目的红色和橙色标签。这个列表就是前文提到的Redis ZSet的读取结果接口响应体里不仅有新闻的基础信息还有热度值前端拿到后可以直接展示。高频交互还有分页加载。搜索页的结果列表我用El-Pagination组件做分页每页10条。每次翻页会重新请求后端接口而不是一次性返回所有数据在前端做“伪分页”。这样既更符合真实开发习惯也让演示时能看到接口的真实响应时间——有ES加持翻页基本无感知这种流畅度是LIKE查询很难达到的。4.3 后台管理的Vue实现方式后台管理界面相对固定用Element Plus的el-container布局拆成侧边导航和主内容区。侧边导航是分类管理、新闻管理、评论管理、用户管理、数据统计五个菜单点击后在主内容区渲染对应的子页面组件。新闻管理页面是整个后台最复杂的。表格展示新闻的标题、分类、浏览量、状态、发布时间顶部是搜索框支持按标题关键词搜索新闻。表格的行内操作有编辑、上下架、删除三个按钮。编辑操作会打开对话框复用发布新闻的表单组件回填数据后提交更新接口。上下架通过切换状态字段实现下架后新闻不会出现在前台列表和搜索结果中。删除操作会弹二次确认框防止误点毕竟新闻及其关联的评论、热度数据删了就没了。数据统计页面用ECharts图表展示最近7天每天的新增浏览量、新增评论量和热度Top10新闻。后端提供一个group by日期的统计接口前端拿到数组后直接传给ECharts配置好横纵轴就能出图。图表是答辩时的视觉加分项建议一定要做。5. 部署运行与常见问题排查5.1 从零到一启动完整项目环境准备阶段需要安装JDK 1.8以上、Maven 3.6、MySQL 8.0、Redis 5以上、Elasticsearch 7.17以及对应版本的IK分词器。ES的安装有几个关键配置项cluster.name必须和代码里配置文件保持一致否则连不上。IK分词器插件需要放到ES安装目录的plugins文件夹下重启后生效。前端环境需要Node.js 16以上npm install安装依赖后再npm run dev启动。启动顺序有讲究必须先启动MySQL、Redis、ES三个中间件再启动后端Spring Boot服务最后启动前端Vue项目。后端启动时如果出现了连接ES超时的报错大概率是ES还没完全就绪等待几秒再重试通常就能解决。数据库脚本首次需要手动执行里面包含建库建表的SQL和基础分类数据后续Spring Boot会自动连接。后端配置文件里需要修改三处MySQL的账号密码、Redis的host和port、ES的host和port。把这几个配置抽到application.yml里不要写死在代码中方便不同机器上部署时快速修改。前端项目里后端接口的baseURL存放在.env.development文件中改成实际的后端地址即可。如果前端和后端跑在同一台机器上直接填localhost也无妨。5.2 那些年我踩过的坑第一个坑是ES和MySQL数据不同步。开发阶段经常出现“后台发布了新闻但前台搜不到”的情况排查后发现是双写逻辑里MySQL事务提交成功但ES写入抛异常导致数据只落库一部分。我的解决方案是写了一个控制台手动触发全量同步的命令开发时每次出现不一致就调用一次简单粗暴但有效。这个手动命令在答辩演示前跑一遍能确保数据都是最新的避免了演示翻车。第二个坑是Redis缓存穿透。热度榜接口如果被恶意频繁请求一个不存在的新闻ID每次都会打到MySQL导致数据库压力飙升。解决的思路是缓存空值当查询结果为空时也在Redis里写入一个空标记并设置短暂的过期时间下一次请求直接返回空结果不会穿透到数据库。第三个坑是前端跨域问题。前端跑在5173端口后端跑在8080端口直接请求会被浏览器的同源策略拦截。我用了Spring Boot的CorsFilter配置允许跨域配合axios的baseURL问题解决。注意allowCredentials要设置为true并且指定明确的allowedOrigins不能用*通配符否则带着token的请求会被浏览器拦截。第四个坑是ES的IK分词器的词典更新。默认IK词典对新闻领域的新词汇支持不佳比如“碳中和”“元宇宙”这类词会被切碎。后来我在IK的配置目录里添加了自定义词库文件把搜索词和新闻领域高频词加进去重新加载索引后分词效果明显改善。这个细节如果做到位搜索的准确率会肉眼可见地提升答辩时老师会注意到。5.3 代码优化的几个实际案例接口层面的优化主要做了三件事统一异常处理、参数校验、SQL性能优化。全局异常处理器把业务异常、参数异常、系统异常区分处理前台始终能收到格式一致的JSON错误信息不会出现500页面直接怼到用户脸上的尴尬。参数校验用javax.validation注解声明在DTO字段上controller入口加Validated即可生效省去了大量手写if判断。数据访问层优化集中在查询逻辑上。热榜接口一次性取出Top10新闻的详细信息后立即存入本地缓存短时间内重复请求直接返回缓存数据避免反复进行MySQL和Redis的IO交互。新闻列表页的查询条件做了索引覆盖在分类ID、发布时间两个字段上建立了联合索引联表查询涉及的用户名通过一次IN查询批量取出并映射到Map中彻底避免了N1问题。6. 项目亮点提炼与未来扩展方向6.1 这个项目凭什么拿高分毕设答辩时老师不会细看每一行代码但会在几个关键节点考察你的工程能力和思考深度。这个项目的核心亮点集中在三点。第一是技术选型的合理性。在新闻搜索这个场景下引入Elasticsearch并用Redis解决并发读写性能问题整个架构虽然不复杂但每个组件的存在都有明确的业务意义。答辩老师问到“ES和MySQL的优劣势对比”这类问题时能结合项目实际场景说得清清楚楚。第二是热度算法的设计。我的热度计算模型并不是网上随便抄的固定公式而是结合了时间衰减、用户交互权重和实时增量更新能解释每个参数取值的依据这就体现出了对业务的理解。老师对“你的系统和别人比有什么亮点”这类问题时就可以着重讲这个模块。第三是系统的完整度。从用户前端到管理后台从搜索到热榜再到互动评论每条业务链路都能跑通数据都来自真实操作。相比很多只做了基本CRUD功能的毕设这个系统是一个真正能用的产品这种完整度本身就很有说服力。6.2 如果再继续做下去可以怎么扩展这个项目有很多可以继续深挖的方向。搜索模块可以引入语义搜索用向量数据库或Embedding模型让搜索理解得更深层热度算法可以做个性化定制根据用户的历史浏览行为调整不同新闻的推荐权重也可以给系统加上用户画像和个性化推荐功能把用户行为表里的数据真正用起来。模块层面可以引入WebSocket做一个弹幕式的实时评论流或是在新闻详情页显示“正在阅读人数”这类实时信息社交属性更强。把这些方向写进论文的“未来展望”章节既能展示你的思考深度又不影响当前的开发安排。从技术学习的角度来看完成这个项目最大的收获是完整走通了一个从需求分析到部署上线的全流程。搜索、推荐、数据同步、多级缓存这些问题都是真实业务系统中最常见也最核心的难点。即使以后不继续写Java这套基于搜索引擎做信息检索和基于缓存做性能优化的思路同样适用于其他语言和平台。如果你正在为毕业设计选题目或者在做类似的新闻检索系统希望这篇复盘能给你一些参考。代码结构和技术方案的取舍逻辑我都完整捋了一遍核心点说清楚剩下的就靠你的手速了。
返回列表