1、第一阶段邪修实战总览(9.1-9.30)

把第一阶段(基础夯实期)的学习计划拆解成极具操作性的每日行动方案。这个计划充分利用我“在职学习”的特殊优势,强调“用输出倒逼输入”,确保每一分钟的学习都直接服务于面试和实战。

  • 核心目标:构建起Java后端开发的知识树主干,并能通过一个小型项目串联起所有知识点。
  • 核心策略:每天3小时雷打不动的高效学习(工作日可分散,周末集中攻坚)。

2、目标(9.1-9.14)

Java核心+Sprig Boot破冰,能独立使用Spring搭建Web后端并提供RESTful接口。


3、分日目标与邪修技巧

3.1、Day 13-14:邪修前端速成

  • 行动:创建一个index.html页面,能通过表格展示广告数据,并通过表单添加新数据。
  • 邪修技巧:证明了深刻理解前后端分离架构的核心,后端只提供RESTful API(已实现),前端(无论是网页、手机APP、小程序)只需要调用这些API即可。

3.1.1、学习分享

第一步:创建前端文件

  • 在Spring Boot项目的src/main/resources/static/目录下,创建一个名为index.html的文件。
    在这里插入图片描述
    第二步:编写基础HTML骨架和表格(用户展示数据)
  • 将以下代码复制到index.html中:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>广告数据管理面板</title><!-- 引入Bootstrap CSS,用于快速美化页面,无需自己写CSS --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container mt-4"><h1>广告数据管理</h1>
<p>这是一个调用后端API的简易管理界面。</p><!-- 数据展示表格 -->
<h2 class="mt-4">数据列表</h2>
<table class="table table-striped table-bordered" id="adTable"><thead><tr><th>ID</th><th>广告日期</th><th>广告花费</th><th>线索数量</th><th>私信数量</th></tr></thead><tbody><!-- 数据会通过JavaScript动态填充到这里 --></tbody>
</table><!-- 添加数据的表单 -->
<h2 class="mt-4">添加新广告</h2>
<form id="adForm" class="mb-5"><div class="mb-3"><label class="form-label">广告日期</label><input type="text" class="form-control" name="date" required></div><div class="mb-3"><label class="form-label">广告花费</label><input type="number" class="form-control" name="cost" required></div><div class="mb-3"><label class="form-label">线索数量</label><input type="number" step="0.01" class="form-control" name="leadCount" required></div><div class="mb-3"><label class="form-label">私信数量</label><input type="number" step="0.01" class="form-control" name="messageCount" required></div><button type="submit" class="btn btn-primary">提交</button>
</form><!-- 引入jQuery(简化JS操作)和自定义的JS脚本 -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<script src="js/main.js"></script>
</body>
</html>
  • 这就是一个简单的前端页面,可以点击IDEA的预览看一下
    在这里插入图片描述
    第三步:编写JavaScript逻辑(调用API的核心)
  • scr/main/resources/static/目录下,创建一个js文件夹。
  • js文件夹中,创建main.js文件。
  • 将以下代码复制到main.js中:
// 页面加载完成后执行
$(document).ready(function() {// 1. 加载并显示所有数据loadAds();// 2. 监听表单提交事件$('#adForm').on('submit', function(event) {event.preventDefault(); // 阻止表单默认提交行为// 收集表单数据,并转换成JSON对象const formData = {date: $('input[name="date"]').val(),cost: $('input[name="cost"]').val(),leadCount: parseInt($('input[name="leadCount"]').val()),messageCount: parseInt($('input[name="messageCount"]').val())};// 3. 发送POST请求到后端API$.ajax({type: 'POST',url: '/api/ads', // 这是你后端Controller的地址contentType: 'application/json', // 告诉后端发送的是JSONdata: JSON.stringify(formData), // 将JS对象转换为JSON字符串success: function(data) {// 请求成功alert('添加成功!');$('#adForm')[0].reset(); // 清空表单loadAds(); // 重新加载表格数据},error: function() {// 请求失败alert('添加失败,请检查控制台日志!');}});});
});// 加载广告数据的函数
function loadAds() {$.ajax({type: 'GET',url: '/api/ads', // 调用GET接口success: function(date) {// 清空表格现有数据$('#adTable tbody').empty();// 遍历返回的数据数组$.each(date, function(index, ad) {// 将每条数据追加为表格的一行$('#adTable tbody').append('<tr>' +'   <td>' + ad.id + '</td>' +'   <td>' + ad.date + '</td>' +'   <td>' + ad.cost + '</td>' +'   <td>' + ad.leadCount + '</td>' +'   <td>' + ad.messageCount + '</td>' +'</tr>');});},error: function() {alert('加载数据失败!');}});
}

第四步:测试与验证

  • 启动Spring Boot应用

  • 打开浏览器,访问https://localhost:8080。注意,Spring Boot默认会自动定位到Static/index.html,所以直接打开就行。

  • 这个时候我们就可以看到我们的页面了,如下图所示:
    在这里插入图片描述

  • 我们也可以在表单中填写数据,再点击提交,注意格式。提交后页面会显示”添加成功“,并且表格会自动清空我们填写的表单,表格中也会自动显示出我们刚才添加的数据。

  • 这个前端页面虽然简单,但它将我们的项目从一个“只能用Postman测试的后端”升级为了一个“可视化的完整应用”,在我们的项目履历上是画龙点睛的一笔。全部代码老规矩放到了Github上,点击Data_Board_Maven_UI就可以看到啦~


总结

“基于库”的模式

  • 我们没有深入学习前端的框架,而是采用“基于库(Bootstrap+jQuery)”的模式,快速构建了一个用于演示和测试的后台管理页面。
  • 我们的主要精力是打算主公后端的API开发,但是为了完整的演示项目,我们页自学了一些jQury的Ajax技术来调用我们写的接口,并使用了Bootstrap进行快速布局。这让我们对前后端交互的全流程有了更深刻的理解。虽然前端不是我们的主攻方向,但是我们也已经具备了与前端工程师协同开发的能力。
  • 接下来我们详细拆解一下 “基于库(Bootstrap + jQuery)”的模式。这是一种经典的前端开发方式,非常适合后端开发者快速构建界面和理解前端原理。
核心思想:与“框架模式”对比

要理解它,最好先对比一下现代的“框架模式”(如Vue,React,Angular)。

特性基于库的模式 (Bootstrap + jQuery)基于框架的模式 (Vue/React)
核心使用多个独立的库(Library),每个库解决一个特定问题。你主导整个程序的流程。使用一个全面的框架(Framework),它提供一套完整的规则和架构,你在它的规则下编写代码。
工作方式命令式编程 (Imperative):你需要“命令”浏览器一步步具体该怎么做。
例如:“找到那个按钮,给它加个点击监听器,当点击时,再去找到那个div,把它的内容改成XXX。”
声明式编程 (Declarative):你声明“界面应该是什么样子”(UI = f(data)),框架会自动帮你完成DOM操作。
例如:你声明数据 buttonText,在模板中写 {{ buttonText }},改变数据,视图自动更新。
DOM 操作直接操作 DOM:你需要使用 jQuery 的方法 ($('#elementId')) 来查找、修改、删除DOM元素。虚拟 DOM (Virtual DOM):你操作的是“数据”,框架会计算出数据变化后UI应有的样子,然后高效地更新真实DOM
组件化弱组件化:页面是由一个个独立的HTML片段和JS逻辑拼凑而成的,复用性和组织性较差。强组件化:页面是由一个个组件(包含模板、逻辑、样式)像搭积木一样构建的,复用性、可维护性极高。
学习曲线平缓:每个库功能单一,上手快,可以立即看到效果。陡峭:需要理解框架的核心概念(如状态、生命周期、组件通信、路由、状态管理等),入门门槛较高。
适用场景快速开发内部工具、管理系统、简单页面、需要与传统老项目兼容、后端开发者临时需要写前端界面开发复杂的单页面应用 (SPA)、大型商业项目、需要高度交互和状态管理的现代Web应用。
核心库解析

Bootstrap(一个CSS/UI框架)

  • 是什么:这个库是一个预定义CSS样式现成UI组件的工具包。
  • 能解决的问题:让我们可以不用从头设计按钮、表格、表单、弹窗的样式和响应式布局。
  • 使用方法:我们可以通过给我们的HTML元素添加Bootstrap定义好的==类(Class)==来使用它。
<!-- 没有Bootstrap -->
<button style="background-color: #007bff; color: white; padding: 6px 12px; border-radius: 4px; border: none;">一个按钮</button><!-- 有Bootstrap -->
<button class="btn btn-primary">一个更好看、且自带交互效果的按钮</button>
    • 优势:极大地加快了界面构建速度,并且默认是响应式的,能自动适配手机和电脑屏幕。

jQuery(一个JavaScript库)

  • 是什么:一个为了简化原生JavaScript操作而生的库。在早期浏览器兼容性很差的年代,它是救世主。
  • 解决的问题:
    • 简化DOM操作:让查找、修改HTL元素变得极其简单。
// 原生JS (冗长)
document.getElementById("myElement").style.color = "red";// jQuery (简洁)
$('#myElement').css('color', 'red');
    • 简化事件处理:非常方便地给元素绑定点击、鼠标移动等时间。
$('#myButton').on('click', function() {alert('按钮被点击了!');
});
    • 简化Ajax请求:用几行代码就能轻松地与后端API进行数据交互,这也是你当前项目中最核心的用途。
$.ajax({url: '/api/data',type: 'GET',success: function(data) {// 请求成功,处理数据console.log(data);}
});
    • 优势:API设计非常人性化,写起来省时省力。其“Write less, do more”(写得更少,做得更多)的理念深入人心。

选择原因

  • 在我们的个人学习项目中,为了快速实现一个用于演示和测试后端API的管理界面,我选择了Bootstrap和jQuery的组合。这是一个非常高效实用的技术选型:
    Bootstrap 让我能毫不费力地构建出美观且响应式的用户界面,我不必在前端样式上花费过多时间。
    jQuery 则极大地简化了DOM操作和Ajax调用,让我能专注于前后端数据交互的逻辑实现。
  • 这个选择让我在极短时间内就完成了全栈流程的闭环,虽然它们不是最前沿的技术,但完美地匹配了项目‘快速验证、直观演示’的目标。通过这个过程,我也深刻理解了前后端分离架构中,API是如何被消费的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/923504.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/923504.shtml
英文地址,请注明出处:http://en.pswp.cn/news/923504.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python TensorFlow的CNN-LSTM-GRU集成模型在边缘物联网数据IoT电动汽车充电站入侵检测应用

全文链接&#xff1a;https://tecdat.cn/?p43881 原文出处&#xff1a;拓端抖音号拓端tecdat 随着物联网&#xff08;IoT&#xff09;技术在电动汽车充电站&#xff08;EVCS&#xff09;中的普及&#xff0c;充电站不仅成为智能交通的关键节点&#xff0c;更因连接电网、用户设…

3dma渲染噪点成因排查及优化方案

有时候在用 3D Max 渲染完效果图&#xff0c;画面上总有密密麻麻的小颗粒&#xff0c;也就是常说的噪点&#xff0c;原本精致的模型和材质&#xff0c;一有噪点质感就掉了大半。其实多数时候&#xff0c;噪点问题都和渲染参数设置有关。那么出现噪点原因和解决方案有哪些&#…

【LeetCode】算法详解#15 ---环形链表II

1.题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评…

Kafka面试精讲 Day 18:磁盘IO与网络优化

【Kafka面试精讲 Day 18】磁盘IO与网络优化 在“Kafka面试精讲”系列的第18天&#xff0c;我们聚焦于磁盘IO与网络优化。作为支撑百万级吞吐量的分布式消息系统&#xff0c;Kafka的高性能不仅依赖于优秀的架构设计&#xff0c;更离不开对底层资源——尤其是磁盘和网络——的极…

ActiveMQ RocketMQ RabbitMQ Kafka选型及应用场景

许多时候我们都将Kafka拿来跟常用的几个消息队列作比较&#xff0c;将 Kafka 加入对比使得选型更加全面和实际。但请注意Kafka并非完全适用消息中间件的所有场景。这四款消息中间件定位不同&#xff0c;选择取决于你的具体场景。消息队列选型核心定位一句话总结RabbitMQ&#x…

STM32初始化串口重定向后printf调试信息不输出的问题

STM32初始化串口重定向后调试信息不输出的问题 Author&#xff1a;明月清了个风Date&#xff1a; 2025/9/9PS&#xff1a;开发stm32F745的过程中发现printf有时候不打印信息&#xff0c;单独调试确定了串口初始化和重定向正确&#xff0c;但是在系统整体调试的时候虽然正确运行…

PCA9535ECDWR2G 微控制器MCU接口芯片 ON 电子元器件解析

一、PCA9535ECDWR2G ON 元器件解析1. 是什么电子元器件&#xff1f; PCA9535ECDWR2G 是安森美半导体&#xff08;ON Semiconductor&#xff09;生产的一款16位I/O扩展器。它属于接口芯片类别&#xff0c;具体功能是通过IC总线为微控制器&#xff08;MCU&#xff09;提供额外的通…

大模型中token与tokenizer的区别

TokenToken 的基本概念在大模型&#xff08;如GPT系列&#xff09;中&#xff0c;token是文本处理的最小单位。模型将输入的文本分割成token序列&#xff0c;每个token对应一个唯一的整数ID&#xff0c;用于模型的内部处理。例如&#xff0c;英文单词"apple"可能被编…

还在觉得剪辑太难?用对视频剪辑软件,让剪辑变得像拼图一样有趣

想制作出精彩的Vlog&#xff0c;拥有一款简单易用的视频编辑软件是关键的第一步。如果你曾因为觉得剪辑太复杂、技术门槛太高而望而却步&#xff0c;那么这篇文章就是为你准备的&#xff0c;因为借助今天简单易用的视频编辑软件&#xff0c;人人都能成为自己生活的导演。本文就…

【ZEGO即构开发者日报】微信公众号上线“智能回复”功能;2025年8月中国应用/游戏厂商出海收入Top30榜;土耳其宣布将封禁29款社交/社媒应用……

&#x1f4a1;开发者朋友们大家好&#xff0c;这里是 开发者日报&#xff01;欢迎查阅您的实时互动日报。本栏目实时聚焦、每日更新【AI】、【泛娱乐】、【语音交互】、【实时音视频】等领域热点&#xff0c;欢迎大家在评论区一起探讨&#xff01; &#x1f528;「产品技术」 …

前端WebSocket实时通信实现

在项目中使用WebSocket实现实时通信 WebSocket提供了一种在客户端和服务器之间建立持久连接的方式&#xff0c;可以实现实时数据交换。下面我将展示如何在前端项目中集成WebSocket功能。 设计思路 我将创建一个简单的聊天室界面来演示WebSocket的使用&#xff0c;包含以下功能&…

电磁流量计可靠品牌之选,基恩士提供多样化解决方案

引言在工业自动化领域&#xff0c;流量的精确计量是保障产品质量、优化成本和提升设备效率的关键一环。当面临“电磁流量计的可靠品牌”这一问题时&#xff0c;企业通常需要考量产品的耐用性、测量精度、维护成本以及系统集成能力。流量计在安装、维护和测量精度方面面临诸多挑…

NumPy数组与Python列表的赋值行为解析

在Python科学计算中&#xff0c;NumPy数组和Python原生列表是两种常用的数据结构。理解它们之间的赋值行为差异对于编写高效、正确的代码至关重要。本文将深入探讨NumPy数组赋值给Python变量的各种情况&#xff0c;揭示背后的内存机制和类型转换特性。 直接赋值行为分析 当我们…

中国制造难点在哪里?

最近生产一批板子&#xff0c;其中一个进口的连接器为什么能卖我们差不多一千多钱还没现货&#xff0c;有时候还禁售&#xff1b;规格书也就寥寥一页而已&#xff0c;外观看起来也淡淡无奇&#xff0c;身为制造业强国的我们为什么没人做呢&#xff1f;你们怎么看&#xff1f;#中…

python 读取大文件优化示例

核心方法逐行读取 - 最常用&#xff0c;内存占用O(1)分块读取 - 适合超大文件&#xff0c;可控制内存使用内存映射 - 高性能&#xff0c;虚拟内存映射缓冲读取 - 平衡性能和内存特殊场景处理CSV文件 - 使用pandas的chunksize参数JSON Lines - 逐行解析JSON对象文本分析 - 内存高…

VBA数据结构深度解析:字典对象与集合对象的性能终极对决

VBA数据结构大揭秘:Dictionary与Collection,谁才是性能王者? 某头部券商的风控系统曾遭遇"数据黑洞"危机:使用Collection处理10万条交易记录时,系统响应时间长达47秒,而改用Dictionary后仅需3.2秒——效率差距达14.7倍!这背后是VBA开发者普遍存在的认知盲区:…

【系统分析师】2025年上半年真题:论文及解题思路

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 试题一:论信息系统运维管理技术与应用 试题二:论软件系统测试方法及应用 试题三:论信息系统开发方法及应用 试题四:论模型驱动分析方法及应用 试题一:论信息系统运维管理技术与应用 智能运维(AIOps)是以人工智能…

立创·庐山派K230CanMV开发板的进阶学习——颜色识别

学习目标&#xff1a;立创庐山派K230CanMV开发板的进阶学习——颜色识别学习内容&#xff1a;颜色识别 颜色识别 1. 本节介绍 &#x1f4dd; 学习内容&#xff1a;本节将学习基于颜色阈值的色块检测技术&#xff0c;通过定义特定颜色范围&#xff0c;从摄像头采集的图像中识别并…

【实时Linux实战系列】V4L2 采集零拷贝:DMA-BUF 在低延迟视频中的应用

在实时视频处理系统中&#xff0c;视频帧的高效传输和处理是确保系统低延迟和高吞吐量的关键。传统的视频采集和处理流程中&#xff0c;数据拷贝是一个常见的性能瓶颈&#xff0c;它不仅增加了处理延迟&#xff0c;还可能导致帧间抖动。为了克服这些问题&#xff0c;Linux 提供…

STM32精准控制水流

如何用STM32精准控制水的流量&#xff1f;一、系统组成框图------------- ------------ ----------- -------------| | | | | | | || 流量传感器 -----> STM32 ----->| 驱动电路 ----->…