ThinkPHP与Laravel对比实战:微信小程序高校活动报名系统开发详解
第一次打开这个课题文档时我盯着标题看了好一会儿ThinkPHP和Laravel两个框架后面还拖着微信小程序末尾又挂了个“论文”。看起来像是三个技术名词的拼盘实际上拆开之后会发现这是一个非常典型的“小程序端 PHP服务端 业务数据库”三位一体项目。如果你今年也在做高校报名类小程序或者正在为毕业设计纠结框架选型这篇记录值得你花几分钟看完。我按自己的实际经历把从需求拆解、框架选型、数据库设计到接口联调、真机测试、并发修复的全过程都过了一遍尽量讲清楚每一步为什么要这么做而不是只丢出一堆“能跑就行”的代码。这个系统解决的核心问题其实一句话就能概括把高校里零散的社团招新、讲座签到、运动会报名这类微活动从前台表格收集和人工统计中解放出来让用户在微信里打开小程序就能完成浏览活动、授权手机号、报名、取消报名让管理员在后台能发布活动、管理名额、导出报名名单。1. 项目思路与方案选型先把“报名”这件事拆明白1.1 课题到底在解决什么问题高校校园微活动这个“微”字很关键。它不是大型学术会议更不是抢票系统而是单场人数几十到几百、报名周期短、活动种类杂的轻量场景。需求分析阶段我画了很久的用例图最后整理出的核心角色只有三个用户、活动管理员、系统。用户侧能做的事包括微信登录、授权手机号、查看活动列表和详情、报名/取消报名、查看我的报名、参与签到。管理员侧能做的事包括发布活动、设置报名起止时间和名额上限、导出报名名单、查看签到统计。系统侧要做的事则是把“登录校验—报名资格校验—名额扣减—记录生成—状态变更”这条链路完整串起来。论文里最容易被老师批的一点就是需求分析没有业务数据支撑。所以我做了一版简单的问卷调研把身边同学的报名行为归纳成几个关键规则每人每场活动只能报一次报名截止之前可以取消取消后释放名额超过名额上限之后自动关闭报名入口管理员可以提前关闭报名。这些规则直接决定后面数据库表结构怎么设计、接口怎么松耦合不是拍脑袋想出来的。1.2 框架对比ThinkPHP 与 Laravel 的真实取舍标题里同时出现两个框架很多同学会以为题目要求“用两套框架各做一个系统”其实更合理的做法是把它们作为技术选型对比项一个用来快速出原型一个用来做最终工程化落地。我先用ThinkPHP 6搭了一版完整可运行的Demo再用Laravel 10把登录、报名、取消报名这三个核心模块重写了一遍整个过程对比起来非常直观。两者在公司级项目中的感受差异很大。ThinkPHP胜在中文文档全、上手门槛低、单应用结构简单Db类直接写起来很顺手适合三天内看到页面效果。Laravel则胜在路由、中间件、Eloquent ORM、服务容器这套设计非常规范写久了会自然养成“分层思考”的习惯代码后期维护起来也更从容。表格对比可能更直观维度ThinkPHP 6Laravel 10学习成本较低中文资料多偏高概念较抽象路由定义清晰直接语法优雅支持模型绑定数据库操作Db类和模型并存Eloquent ORM 体系完整中间件有但偏向基础用法功能强大签名校验、权限控制很顺手队列/任务调度需要额外扩展原生支持文档完善适合场景快速交付、中小项目需要长期维护的工程化项目毕业设计答辩观感常规更容易体现设计能力我的建议是如果你希望论文里有一个“框架对比分析”章节就按我这个流程来先用ThinkPHP把业务跑通证明方案可行性再用Laravel优化核心接口的容错和扩展性对比两者的代码组织和异常处理差异。如果你时间非常紧只精通其中一个也完全够用把另一个放在文献综述和对比分析里作为选型理由即可不需要两套都完整实现。1.3 小程序与服务端的协作模型小程序端只负责展示和收集用户操作所有涉及名额、状态、权限的判断必须交给服务端。这个原则我在开发前就写进了设计文档避免出现前端把活动ID传给后端、后端不校验就开始扣名额的低级错误。小程序通过wx.request发HTTP请求服务端统一返回JSON结构我定义的数据包格式是{ code: 0, msg: ok, data: {} }code为0表示成功非0表示业务错误比如“活动已截止”“名额已满”“请先登录”。这种结构在小程序里处理起来非常顺手页面只需要判断code不需要反复解析返回字符串。接口规划上我按“白名单接口”和“登录后接口”做了拆分。小程序登录相关的接口属于白名单不需要带token活动列表、活动详情也可以设为公开但报名、取消报名、我的报名这类涉及用户身份的操作必须校验token。服务端在中间件里统一解析请求头中的Authorization字段校验失败直接返回401小程序端收到401就调用静默登录刷新token避免用户手动重新登录。2. 核心功能设计与数据库建模2.1 用户登录与手机号授权链路微信小程序的登录机制和传统Web登录完全不同。传统Web登录是输入账号密码小程序是wx.login拿到临时code再由服务端调用微信接口换取openid。这里的核心安全点在于code只能用一次并且必须由服务端拿着appid和secret去换不能把secret放到小程序代码里。手机号授权又是另一条链路。现在新版机制不再直接返回手机号到前端而是让用户点击一个button设置open-typegetPhoneNumber然后在回调里拿到一个动态code服务端再拿这个code去微信接口换手机号。这个方式比旧版encryptedData解密方式干净得多也避开了session_key过期导致解密失败的坑。我在设计文档里额外标注了一点手机号组件目前需要企业主体或认证主体的小程序账号个人开发者账号没法直接调用做校园项目时最好提前确认账号类型否则就要用“自填手机号短信验证码”作为兜底。用户表我一开始只设计了openid、昵称、头像、手机号后来做“我的报名”时才意识到还需要区分普通学生和管理员角色。于是加了一个role字段默认0是学生1是管理员。管理员入口在小程序端隐藏只有服务端返回的管理员白名单用户才能看到发布活动的功能入口。这样登录接口返回用户信息时也顺便把role和是否绑定手机号一起返回方便前端做差异化界面。2.2 活动状态机与报名流程活动不是一个简单的“存在”状态就够了我根据实际使用场景把活动拆成了五个状态未开始、报名中、已截止、已取消、已结束。报名按钮是否可点击、名单是否可导出、签到是否开启全部由这个状态机决定不在前端代码里散落一堆if判断。状态变更逻辑是这样的活动创建后默认“未开始”到达报名开始时间自动变成“报名中”到达报名截止时间或者名额扣减到0时变成“已截止”活动实际举办后由管理员操作变成“已结束”。管理员可以手动取消活动但要写清楚规则取消活动时把所有已报名记录标记为“已取消”并释放名额不保留历史脏数据。报名流程我拆成了“提交报名”和“确认报名”两个动作。提交时后端只做资格校验和名额预扣返回报名成功如果用户超过活动人数上限后端返回“名额已满”。取消报名则是一个逆向操作必须判断是否在截止时间之前并且撤销后释放名额。考虑到高校活动经常会设置“先到先得”和“管理员审核后再通过”两种模式我把报名记录的状态设计成待审核、已通过、已取消、已签到。默认不用审核时提交报名直接置为已通过需要审核时管理员在后台手动通过。2.3 数据库表设计字段、索引与外键数据库表设计的成败直接影响接口代码的复杂程度。我列出了系统里最核心的几张表用户表、活动表、报名表、活动场次表、签到记录表。活动场次表是为了支持“同一活动的不同时间段”而加的比如一个讲座分为上午场和下午场报名时用户需要选择场次每个场次有独立名额。用户表字段包括id、openid、unionid、phone、nickname、avatar、role、status、created_at。openid和phone都加唯一索引openid唯一是硬性要求phone唯一则保证一个手机号不能被重复绑定。活动表字段包括id、title、description、cover_url、location、start_time、end_time、signup_start_time、signup_end_time、total_count、remain_count、status、admin_id、created_at。这里要特别注意remain_count和total_count的类型用int就够不用decimal因为剩余名额是整数用浮点类型反而容易出错。查询活动列表时需要根据当前时间和signup_start_time/signup_end_time动态计算状态而不是只依赖status字段避免因为定时任务没跑导致状态更新不及时。报名表是整张数据库的核心字段包括id、user_id、activity_id、session_id、status、signup_time、cancel_time、checkin_time。我为这张表设计了两个关键索引一个是user_id activity_id的唯一索引用来从数据库层面拦截同一用户重复报名同一活动另一个是activity_id status的组合索引用来快速统计某个活动已报名人数。在MySQL里跑EXPLAIN一眼能看到效果论文里也可以截图说明索引的作用。签到记录表相对简单记录用户id、活动id、场次id、签到时间、签到方式管理员代签还是用户扫码。在活动结束之后管理员可以直接通过统计表按场次汇总出签到人数发到工作群里比打开Excel数快得多。3. 接口开发与小程序端对接实测3.1 开发环境与项目初始化我本机的环境是Windows 11用phpStudy管理PHP和MySQL版本选的是PHP 8.0和MySQL 5.7。这里有个经验不要一上来就用MySQL 8.x很多时候网上的教程还是5.7的语法和驱动配置踩坑成本不值。PHP 8.0兼容ThinkPHP 6和Laravel 10都没有问题如果是ThinkPHP 5建议老老实实用PHP 7.4免得各种兼容性报错。安装过程无非是Composer创建项目composer create-project topthink/think tp_app composer create-project laravel/laravel laravel_app第一次执行时如果长时间卡在下载阶段记得先把Composer源切到阿里云镜像composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/项目初始化后第一件事就是配置.env文件把数据库连接改成自己本机的配置。TP的配置文件在config/database.phpLaravel则直接在.env里写。不要偷懒用root空密码连数据库随便设一个密码后面导出给老师看环境配置时也显得专业。微信小程序端我用的微信开发者工具正式开发前需要注册一个测试小程序账号AppID用测试号也可以跑通大部分功能。需要说明的是测试号无法使用手机号获取组件我在开发和真机联调阶段是用“仅在开发者工具中模拟”的方式测试手机号接口真机配置走的是学校已经认证过的企业账号。3.2 登录和手机号接口落地登录接口的流程我用ThinkPHP先写了一遍大致逻辑是接收小程序传过来的code然后调用微信的jscode2session接口$code $this-request-post(code); $result Http::get(https://api.weixin.qq.com/sns/jscode2session, [ appid env(wechat.appid), secret env(wechat.secret), js_code $code, grant_type authorization_code ]);返回结果里拿到openid之后先查用户表如果不存在则新建用户存在则更新昵称和头像。之后我用工具类生成一个自定义token返回给小程序端。这里我踩过一个比较隐蔽的坑jscode2session接口返回的session_key绝对不能放到客户端也不能作为token直接使用它只能留在服务端某些旧版手机号解密功能需要靠它。所以我只把token和用户基础信息下发给小程序session_key在服务端一份明文副本都没有保存需要时临时获取用完立刻销毁。手机号接口在新版机制下是这样写的$accessToken $this-getAccessToken(); $phoneCode $this-request-post(phoneCode); $response Http::withToken($accessToken) -post(https://api.weixin.qq.com/wxa/business/getuserphonenumber, [ code $phoneCode ]);拿到手机号后更新用户表的phone字段手机号为空时首次绑定可以给一个小福利比如送积分或者标记为“已认证用户”。接口层面的失败情况也要处理好比如用户拒绝授权、code过期、access_token过期前端需要根据自己的code状态提示不同文案不要统一弹“系统错误”。3.3 活动列表与报名接口实现要点活动列表接口是所有页面里调用频率最高的我做了分页和动态状态计算。前端传page和page_size后端返回列表数据、总条数、总页数。排序规则我定的是报名中优先其次是未开始最后是已截止同一状态下按报名开始时间倒序排列。这个排序规则在SQL里写出来很直观ORDER BY FIELD(status, 1, 0, 2), signup_start_time DESC这里的status状态值必须和活动状态设计严格对应如果前后端约定不一致列表就会错乱。小程序端的活动详情页还挂了分享功能用户可以把活动转发到微信群。这里有个小坑分享卡片上的图片必须是HTTPS地址不能是本地临时文件否则开发者工具正常真机就不显示。报名接口是重头戏我用Laravel重写后采用了数据库事务加条件更新。核心思路是在扣减名额时不让超卖发生我用一条带条件的UPDATE语句DB::transaction(function () use ($activityId, $userId) { $updated DB::table(activities) -where(id, $activityId) -where(remain_count, , 0) -decrement(remain_count); if (!$updated) { throw new \Exception(名额已满); } DB::table(signups)-insert([ user_id $userId, activity_id $activityId, status 1, created_at now() ]); });decrement在MySQL里会生成一条UPDATE activities SET remain_count remain_count - 1 WHERE id ? AND remain_count 0的语句有MySQL的行锁保护事务提交前其他人无法再扣减同一活动的名额。配合报名表上user_id activity_id的唯一索引即使同一用户重复点击了两次报名按钮第二次插入也会被数据库拒绝。实测用JMeter模拟200个并发线程同时报名100个名额的活动最终报名表记录数稳定等于100没有超卖。这个测试截图放论文里属于能加分的实打实的数据。3.4 小程序页面适配与顶栏处理小程序端我设计了四个Tab页面首页活动列表、活动详情、我的报名、个人中心。首页承载整个系统的门面活动卡片上要展示状态标签、剩余名额、报名时间列表下拉刷新和触底加载更多都要做。触底加载我用的原生onReachBottom事件请求下一页数据时加了isLoading布尔值防止滚动到底部连续触发多次请求。顶部导航栏是很多新手容易忽略的适配点。默认导航栏在刘海屏和普通屏看起来差异不大但如果做自定义导航就需要自己计算高度。我的做法是const windowInfo wx.getWindowInfo(); const menuInfo wx.getMenuButtonBoundingClientRect(); const navHeight (menuInfo.top - windowInfo.statusBarHeight) * 2 menuInfo.height;menuInfo.top胶囊按钮距离屏幕顶部的距离statusBarHeight是状态栏高度胶囊按钮中心点距顶部的距离等于状态栏高度加导航栏高度的一半反推就能得到自定义导航栏的实际高度。这个计算方式在iPhone和安卓上都能兼容可以写成一个公共工具函数所有自定义导航页面都调用它。真机上如果发现导航栏位置偏了优先确认getMenuButtonBoundingClientRect是否在onReady之后调用太早拿到的胶囊位置可能为0。4. 常见问题与排查技巧实录4.1 登录态失效与 code 重复使用我这套系统上线后收到最多的反馈是“App一杀掉再打开就提示登录过期”其实原因几乎都是前端把登录code当成能反复用的身份令牌。wx.login返回的code是一次性的有效期只有几分钟换完openid之后就没用了。如果每次进小程序都把旧的code再次发给后端后端用同一个code再请求微信接口必然报invalid code。解决方法是让小程序端在启动时检查本地storage里的token如果token存在就直接进入首页如果不存在或后端返回401再调用静默登录。后端在登录接口中不只是换取openid还应该刷新用户表中最后登录时间将所有关键接口包裹在同一个中间件里token解析统一从请求头取。这样代码里就不会出现“某个页面自己拼token、另一个页面不拼token”的混乱局面。我在本地方案里还加了一个细节当后端检测到token的过期时间距离现在小于24小时时不主动拒绝请求而是在正常返回结果的同时附带一个token_refresh字段让前端在后台悄悄换一个新token。这样用户根本感知不到会话过期体验会顺滑很多。微信小程序后台还会遇到一个相对冷门的问题同一用户在多台设备上登录旧token是否要强制失效我的决策是不强制因为校园活动报名场景里不存在“必须单端登录”的强约束让新token覆盖旧token即可。4.2 手机号解密失败如果你还在用旧版手机号解密方式常见报错是invalid session_key原因一般是服务端拿到的session_key不是最新值。现在新接口换成getuserphonenumber之后最大的问题反而变成了access_token获取失败或者code本身无效。我遇到过一种情况用户连续点击了两次“微信一键登录”按钮第一次点击生成的手机号code已经使用过了第二次点击后端还在用旧code去换取手机号自然报错。前端要做的就是在按钮回调里加一个防止重复提交的状态锁只有在第一次请求返回后才允许再次点击。如果是企业账号还要检查微信公众平台后台有没有开通“手机号快速验证组件”的权限没有开通的话接口会返回access blocked。这个不是代码问题而是账号权限问题调试时记得先确认这一步。我的建议是在接口层把获取到的手机号做脱敏展示只显示前3位和后4位一方面避免用户隐私泄露另一方面在论文里也显得你认真考虑过安全问题。4.3 并发报名超卖与重复报名前面提到我用带条件的UPDATE解决了名额超卖但还有另一种并发场景需要小心取消报名。用户A取消报名释放1个名额同时用户B和用户C同时报名如果释放名额的代码只是简单地把remain_count加1总量不会超卖但用户B和C在同一时刻都会看到“还有名额”。这个场景本身不算数据错误但为了体验更准确我整个取消报名流程也放了事务先更新报名记录的状态再执行名额加1。两步之间如果有其他事务在读名额会因为行锁等待前一个事务提交从而拿到准确的数值。还有一个细节如果用户先取消报名在同一个事务里又立即重新报名数据库的唯一索引会拦截这次操作吗不会因为取消后的记录状态不是删掉而是标记为“已取消”如果唯一索引建立在user_id activity_id上即使状态已取消新记录还是会撞唯一键。所以我的唯一索引要拆成两类如果是普通活动唯一索引加在user_id activity_id status只有status为已通过时唯一如果是带审核的活动则单独建一个user_activity_unique字段记录用户活动配对用于控制每个用户只能提交一次待审核申请。这个坑是我在实际测试中发现的如果不处理取消后重报会直接报数据库异常。4.4 开发者工具正常但真机异常很多同学最怕的就是“开发者工具里一切正常一到手机就白屏或报错”。这里的头号原因是域名问题。开发者在工具中勾选“不校验合法域名”就能直接请求本地接口但真机必须使用HTTPS的正式域名并且要在微信公众平台“开发管理—服务器域名”里配置request合法域名。我本人在部署阶段先在阿里云买了一台最低配的ECS用Nginx配置了SSL证书域名解析好之后再把接口路径从http://localhost改成https://api.example.com。第二个常见问题是“微信开发者工具里能获取手机号真机不能”。这个原因我在前面提过测试号或个人主体没有权限。解决办法除了换企业主体账号外还可以用“手机号快速验证组件”的降级方案引导用户手动输入手机号和验证码。虽然是备选但在论文中作为说明文档提交反而展示了你对小程序平台规则的理解。第三个问题是顶部安全区适配。iPhone X及以上机型底部有Home条如果“我的报名”页面底部有提交按钮会被Home条遮挡。最稳妥的办法是给底部按钮的容器加一个安全区paddingpadding-bottom: env(safe-area-inset-bottom);这行代码在普通机型上不会多出高度在刘海屏机型上会自动增加底部内边距。另外真机上wx.getSystemInfoSync已经在基础库2.20.1之后被标记为废弃更新一下API调用是顺手的事但如果学生项目里还在用旧API论文查重或答辩时容易被追问建议直接用wx.getWindowInfo替代。最后的个人经验做完整个项目我最大的体会是不要被“ThinkPHP和Laravel”这个并列结构吓住。这两个框架并不对立它们可以是你论文里最大的两点内容——一个负责快速验证业务一个负责展示工程化能力。很多同学写论文时只会贴代码截图却忽略了“为什么这么选型、为什么这样建表、为什么用事务和唯一索引”这些决策过程而这些恰恰是老师评分最看重的部分。如果你也正在做类似系统我建议你先把活动状态机和报名流程画清楚把所有边界情况列成一张表再开始写代码之后会发现接口开发、联调、论文写作都顺很多。小程序端能优化的细节还有不少比如订阅消息通知、活动日历展示、Excel导出名单都是很自然的后续扩展方向真正做完一个项目你会发现收获最大的是排查问题的思路而不是哪一个框架的语法。

相关新闻

统一API只是起点:企业级多模型接入与治理实战

统一API只是起点:企业级多模型接入与治理实战

前阵子帮一家做智能客服系统的公司做多模型接入方案,对方上来就告诉我:“我们的统一 API 已经搭好了,四个模型都接进去了,OpenAI 格式,一键切换,是不是就能上线了?”我说先别急,等我…

2026/10/7 11:59:42 阅读更多 →
Altium Designer PCB封装库实战:5分钟搞定CHIP类封装设计

Altium Designer PCB封装库实战:5分钟搞定CHIP类封装设计

都说PCB设计里最不起眼的活,是建封装库。我记得第一次画板子图省事,从同事那拖了一个0603电容的封装,结果板子打样回来贴片厂直接打电话过来问我:"你们这个焊盘怎么比器件还宽?再流焊一过,小电容都被拉…

2026/10/7 11:59:42 阅读更多 →
基于DeepSeek与大模型的智能电子病历生成系统:私有化部署与结构化输出实战

基于DeepSeek与大模型的智能电子病历生成系统:私有化部署与结构化输出实战

简介:这份PPT资源面向医疗信息化从业者、AI医疗产品经理及医院信息科技术人员,聚焦电子病历录入效率低、数据孤岛严重、隐私保护薄弱等痛点,给出基于DeepSeek大模型的智能电子病历生成系统完整解决方案。资源包共1个pptx文件,约65…

2026/10/7 11:58:42 阅读更多 →

最新新闻

独立游戏AI工作流:可审计、可降级、可干预的三层框架

独立游戏AI工作流:可审计、可降级、可干预的三层框架

1. 这不是“用AI做游戏”的速成课,而是独立开发者真实踩坑后的框架重建手记“AI辅助独立游戏开发可行性探索之框架搭建(三)”——这个标题里藏着三个被多数教程刻意忽略的关键限定词:辅助、独立、可行性。它不承诺“AI帮你写完《空…

2026/10/7 12:43:42 阅读更多 →
xberg 插件体系实战:使用 Go 绑定 `ClearOcrBackends` 清空 OCR 后端注册表

xberg 插件体系实战:使用 Go 绑定 `ClearOcrBackends` 清空 OCR 后端注册表

后端AI 应用NLP 【免费下载链接】xberg Polyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with …

2026/10/7 12:43:42 阅读更多 →
鉴相器:锁相环中决定成败的“相位裁判”与调试要点

鉴相器:锁相环中决定成败的“相位裁判”与调试要点

干锁相环调试的工程师,十有八九都有过这种经历:明明VCO和环路滤波器都按公式算好了,上电之后就是锁不住,或者输出频谱上平白无故多出一圈杂散。翻来覆去查,最后发现问题往往出在鉴相器这个环节。有人管鉴相器叫锁相环的…

2026/10/7 12:43:42 阅读更多 →
Superpowers实战:用状态机把AI编程从“快而不稳”变为“可控可靠”

Superpowers实战:用状态机把AI编程从“快而不稳”变为“可控可靠”

最近几个月,我用AI编程工具写代码的时间,比手动敲键盘的时间还多。最直观的感受是“快”:需求一讲,代码马上就出来了,看起来像模像样,跑起来也能完成主流程。但真正让我睡不着觉的,也是这些“快…

2026/10/7 12:43:42 阅读更多 →
游戏引擎架构实战:物理系统与动画系统的分层设计与同步解耦

游戏引擎架构实战:物理系统与动画系统的分层设计与同步解耦

1. 物理与动画系统在引擎架构中的真实定位聊游戏引擎架构,绕不开物理和动画这两个模块。很多刚接触引擎源码的朋友会觉得它们只是"两个功能库",调调API就能跑,但真正在项目里踩过坑的人都清楚,物理和动画是整个引擎里最…

2026/10/7 12:43:42 阅读更多 →
Spring Boot+Vue电商推荐系统实战:基于协同过滤的精准营销

Spring Boot+Vue电商推荐系统实战:基于协同过滤的精准营销

简介:这是一份电商精准营销推荐系统的完整源码包,后端采用SpringBoot框架,前端采用Vue技术,实现了前后端分离的现代Web开发模式。项目围绕电商平台的用户推荐场景,设计了用户管理、商品展示、推荐策略配置等核心功能模…

2026/10/7 12:42:41 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →