2026/11/5 1:16:06

第一个学习项目--苍穹外卖

第一个学习项目--苍穹外卖 前言作为一个转专业代码小白本科阶段学过点CMATLAB画过点曲线图用HTML写过表单接触过数据库看过《python编程快速上手》上的python编程基础。由于研二暑期实习需要一份能投递的奖励所以在b站大学突击了java项目——苍穹外卖经过大概20天到一个月的边听边抄就没动手写是不是目前只能说是部署完了。前言部分我先把学到的东西记录加深一下印象。下一章节再深入学习各部分。在学习过程中影响最深的就是五个文件的流水线式搭建如下。第二个是redis数据库这部分讲的比较基础在word中有记录辅助记忆所以说学习新知识还是记下来更深刻。controller 写注解api写接口名调用方法返回结果service 用一行代码定义方法serviceImpl 篇幅较大的一部分实现方法一些列表和Json数据的创建等mapper 定义方法跟service有什么不同呢todomapper.xml 篇幅较大的一部分进行数据库的增删改查及判断是否为空。再随便说点新手刚开始的困惑点详细的技术后续章节再展开因为如果现在被面试拷打根本顶不住没有技术栈一样对各种技术也说上来希望写完对项目有更深刻的了解。快捷键 ctrl左键 进入方法alterenter实现方法一般来说标红了就左键悬浮找到解决方法导入类有些情况下会有多个需要斟酌选取在代码书写过程中盯着键盘打字很可能会键入错误少输错输以及缺少一些注解如果没红就得等报错再查问题了所以阅读代码总结常见错误检查是个好习惯大小写和中英文的转换理清思路时可以先打几行//再依次写代码功能驼峰命名法很麻烦每次都要不停切换大小写。苍穹外卖技术选型这一章节介绍涉及到的技术教啥选啥~ , ~直接从12天计划里把软件的名字摘出来项目里文件这么多最后再写一个文件介绍美滋滋nignxTomcat/node.jsnignx一闪而过原来是后台启动可以在文件夹nignx路径中cmd然后start nginx.exe并不能看见更多的反馈。~ ~Nginx 是高性能的 HTTP 和反向代理的web服务器是轻量级的web服务器、反向代理服务器及电子邮件代理服务器占有内存少并发能力强支持热部署启动简单。反向代理VPN既可以是正向代理也可以是反向代理。正向代理主要用于保护真实客户端的信息避开浏览管控保护客户端隐私等而反向代理主要用于负载均衡、缓存加速、安全防护等方面。正向代理是为了隐蔽客户端而反向代理是为了隐蔽服务器。在工作原理上正向代理是客户端主动选择代理服务器来浏览资源代理服务器相当于客户端的中转站而反向代理是客户端无感知地通过代理服务器浏览资源代理服务器相当于目标服务器的代表。负载均衡轮询法 服务器依次分发任务权重模式加权轮询 能力越强责任越大ip_hash 对每个ip优先分配之前的服务器。动静分离nignx适用于静态页面动态资源的获取用Apache Tomcat来实现面试官说说看Nginx是如何处理请求的为什么Nginx不采用多线程模型Nginx负载均衡的算法有哪些什么是正向和反向代理-51CTO.COMswaggerApifoxswagger是一个API设计文档工具可以设计和文档化API自动生成代码测试API集成和部署。API是应用程序接口实现模块化编程通常是软件开发工具包SDK的一部分。API可实现很多功能隐藏细节而只显示程序员所需的那部分信息。mysql workbench/navicatmysql是一个用于存储和管理数据的关系型数据库管理系统可作为一个嵌入式多线程库。mysql是关系型数据库表格格式存储数据用于存放持久化数据存储在硬盘中读取速度较慢。SQL是结构化查询语言是一种是用于处理数据库中数据的编程语言。redis another-redis-desktop-managerredis是NOSQL是非关系型数据库以键值对形式存储数据也是缓存数据库。redis数据库的存储是在内存中的重启会丢失数据有两种持久化的方式AOF增量备份模式以日志记录写操作的方式RDB全量备份每隔一段时间全备份会造成瞬间内存翻倍。前者是把写入数据的操作记录下来后者是转化为二进制文件存储到硬盘里。在redis中要保证数据一致性新增修改删除、起售停售都要清理缓存。数据类型字符串string哈希hash列表list集合set有序集合zsetredis常用命令stringSET key valueGET keySETEX key seconds valueSETNX key valuehashHSET key field valueHGET key fieldHDEL key fieldHKEYS/HVALS keylistLPUSH key value1[value2]LRANGE key start stopRPOP keyLLEN keysetSADD key member1 member2SMEMBERS keySCARD keySINTER key1 key2SUNION key1 key2SREM key member1 member2zsetZADD key score1 member1 …ZRANGE key start stopZINCRBY key increment memberZREM key member …通用KEYS pattrnEXISTS keyTYPE keyDEL key微信开发者工具springcacheSpring cache是一个框架配置 Redis/ EHcache, 实现基于注解的缓存功能EnableCaching开始缓存注解Cacheable有则使用无则缓存CachePut将方法的返回值放到缓存CacheEvict删除缓存CachePutCacheNames “ userCache”key “#user.id” “#result.id” “ #p0.id” “ #a0.id” “ #root.args[0].id”用此框架在启动项加入EnableCaching 注解后用Cacheable快速读缓存和写缓存用CacheExict精简代码删除缓存用户查询界面缓存使得下次查询时速度快而修改时管理端进行缓存清理。cpolarCpolar是一个内网穿透工具可以将本地服务暴露给外网用户访问。通过映射本地端口使得外部用户可以通过公共URL访问。cmd运行cpolar.exe 然后http://localhost:9200/ 访问web管理界面。似乎可以用来协助移动端调试应用。然而并没有在手机微信上运行成功可能是证书安全或是另外的原因SpringTask在日常项目开发中定时任务是一个常见需求例如在凌晨进行统计结算或开启策划活动。Spring Boot 提供了内置的定时任务工具 Spring Task可以方便地实现定时任务只需在主类上添加EnableScheduling注解即可开启相关功能。cron 表达式 秒分时日月周 年 cron “ 0 0 0 * * ? * ” 每天0点一次10W 离10日最近工作日 L 最后一天websockethttp的连接是短链接且单向的只能一方request另一方response而websocket持久性的连接双向的。应用场景有视频弹幕、网页聊天、体育实况更新及股票基金等在handshake后双方就可以连续双向发送信息acknowledgement。WebSocket 是基于 TCP 的一种新的应用层网络协议。它提供了一个全双工的通道用户端和服务器之间的数据交换变得更加简单。这两者都是tcp连接。Apache echartsApache echarts是一个基于Js的可视化图表库可以快速构建基于Web的可视化图表。Apache POIPOI是java实现的可操作office文档的代码。 FileInputStream 导入XSSFWorkBook 新建表Row 行Cell 单元格使用中要及时释放空间避免内存泄漏out.close。代码基础1、泛型是什么public ResultString泛型俗称“标签”使用E表示。泛型就是在允许定义类接口时通过一个标识表示某个属性的类型或者是某个方法的返回值或者是参数类型参数类型在具体使用的时候确定在使用之前对类型进行检查。2、JSON格式JavaScript对象表示法是一种轻量级的数据交换格式具有以下特点结构JSON使用键值对表示数据数据以对象用大括号表示和数组用中括号[]表示形式组织。语法JSON的语法与JavaScript对象相似支持字符串、数字、布尔值、null、对象和数组等数据类型。自描述性JSON格式易于人类阅读和编写且独立于编程语言。广泛支持许多编程语言如C、Python、Java等都支持JSON的解析和生成。JSON因其简洁性和易用性广泛应用于数据交换和存储。3、抛出异常throw用于在代码中主动抛出一个异常对象。throws在方法签名中声明可能抛出的异常强制调用者处理。try-catch捕获并处理异常防止程序崩溃异常类型说明NullPointerException空指针访问ArrayIndexOutOfBoundsException数组越界IOException输入输出操作失败ClassNotFoundException类未找到4、hashmapHashMap 是 Java 中基于哈希表实现的Map接口用于存储键值对Key-Value具有高效的查找和插入性能平均时间复杂度为 O1。5、Spring BootSpring Boot 是一个基于 Java 的开源框架旨在简化 Spring 应用的初始化搭建、配置和部署。它构建在传统 Spring 框架之上采用“约定优于配置”的理念减少开发者的手动配置让开发者更专注于业务逻辑而非模板化代码。其优点有自动配置依赖、疑难问题每台电脑的体质都不能一概而论正如每个程序员的代码出现bug的方式也不同。回望我的项目部署经历有以下几个问题出现如有雷同希望能帮到你!新手写代码时基础最差的不是经常敲错变量或方法名的而是我这种跟着敲代码少敲一行都发现不了不知道那一句后面要接着那一句输入错误总是第一步要排查的问题day3数据库和项目的接入需要注意数据库的密码该项目为123456其实开始阶段的错误在严重也不过是卸载重装就是血压会有点高day8 微信支付跳过调用微信支付验证支付的部分苍穹外卖学习-day08-day10跳过微信支付订单取消来电提醒问题解决_orderspaymentdto-CSDN博客day10 数据报表的日期出现0NANNAN.NAN这里受时区和系统时间格式的影响格式改成2025-04-12即可应该是和代码中要求的一致时区我刚开始是阿根廷结果显示的是12月4日day12 工作台平均客单价可能为无限小数用以下代码也可用于其它方式尝试Java保留2位小数六种方法_java保留两位小数-CSDN博客DecimalFormat df new DecimalFormat(0.00); unitPrice Double.valueOf(df.format(turnover / validOrderCount));后续研究项目启动项目构建完成后 启动项目包括以下几个启动nignx启动idea运行applycation配置文件打开浏览器http://localhost/ 用户端界面 http://localhost:8080/doc.html swagger接口文档redis-server.exe redis.conf redis端口是6379//运行cpolar内网穿透功能设计微信支付模块启动微信开发者工具模拟用户端点餐在用户端演示的过程中有一个真机演示扫码后或者本机微信运行在运行过程中本机电脑微信与模拟器一致可运行手机演示总是报错调整手机可以访问电脑上的接口文档也仍有问题。下列两图为手机失败和电脑微信端成功。把之前的草稿合并了一下在下面加一个小节员工登录--JWTMD51、JWT令牌登录去中心化、对密码MD5签名验签JWT较为简单在项目学习中我们知道JWT令牌发放后有一个有效期然而如果令牌泄露在服务器没有办法进行反制。针对这个问题我们学习一下相关技术。2、Session传统Session认证是用户在网站输入密码后服务器会记录信息并返回一个cookie给前端在下次登陆时服务器利用此信息就可以自动登录。它有一些缺点存储用户信息多了影响性能、分布式中限制了访问服务器、cookie被截获有CSRF攻击以及移动端无法共享cookieToken Session 将会话数据放到专业的数据中心 Token redis 此模式既保证了服务器对会话数据的可控性又保证了服务水平扩展时的会话一致性。讲真别再使用JWT了在Web应用中使用JWT替代session并不是个好主意。那么适合JWT的使用场景有哪些 - 掘金3、顾客登陆是怎么实现的呢oauth是系统允许其他系统的用户来登录自己的系统。比如很多系统需要微信授权登录实际上就是用户用微信的用户信息登录自己的系统。作为自己系统的用户。微信OAuth2.0 登录流程以及安全性分析-CSDN博客Redis缓存穿透就是访问缓存和数据库里都没有的数据穿透了也访问不到缓存null值解决缓存雪崩key到期失效过多redis宕机了缓存击穿随笔总是看到别人的内容太多就急着把链接导了过来这样文章怎么写的认真呢这次一定要学习后把参考文献列在下面。