前端的未来已然到来
随着整个软件行业正逐渐转向以打包、托管与抽象解决方案为主体的新形态,后端与基础设施带来的麻烦正越来越少,而立足堆栈顶部的前端工程师开始成为施展空间最大的时代宠儿。甚至不只是他们,如今无论是前端、后端还是运维开发者,他们在描述自己的工作流程时普遍表示,会尽可能将底层问题交给托管服务商打理。
换句话说,前端开发已经不再是系统生命周期中的辅助性要素。
关于前端未来图景的讨论目前颇为流行。虽然有观点强烈反对 AI 崛起意味着“前端开发既消亡”的判断,但也有人认为 AI 及无代码 / 低代码将增强前端开发者群体、而非直接将其取代。但纵观这种种意见交锋,我发现人们普遍忽略了一个重要问题:随着抽象解决方案不断改善后端与运营层面的工作难度,前端开发者在采购决策中的话语权将持续增长。
从 Baas 到 PartyKit
让我们先从专为前端工程师提供服务的供应商说起,包括如何利用云抽象确立自身市场地位。
初次测试 @partykit_io
我喜欢构建实时应用程序,所以很高兴终于亲自尝试了一回。我是 @threepointone 的忠实粉丝
pic.twitter.com/JX1SR5CX7c
— nader dabit (@dabit3)*2023 年 11 月 30 日
PartyKit 公司 CEO Sunil Pal 受邀参加了 Changelog 前端播客 JS Party。Pai 不仅在 React、JavaScript 和 CSS 领域负有盛名,PartyKit 还专门面向前端工程师群体。Pai 的最新项目凭借对实时同步的显著简化而受到广泛关注——长久以来,这个问题一直困扰着希望允许多位用户同时工作的多人协作类应用开发者们(包括 Figma、Google Docs 还有 Deplit)。
PartyKit 代表着前端崛起的又一个令人信服的案例。PartyKit 不仅证明 JS 领域仍在酝酿创新,也表明了前端买家市场的稳健性。供应商们注意到专门针对前端开发者的平台能够获得成功,因此渴望推出自己的方案来满足需求。JS Party 播客联席主持人 Kevin Ball 表示:
我喜欢 PartyKit 说过的一句话:“它就像是 Vercel 或者 Netlify,只是采取实时构建。”Vercel 和 Netlify 模式都很伟大,它们的亮点就在于能把前端开发者的很多任务承接过来,不但让部署更加轻松易行、而且能够轻松与其他方案对接。而多人协作却长期做不到这一点。
Ball 认为,这些为了消除后端运营管理而诞生的平台在市场上开创了先河。除了前提提到的 Vercel 和 Netlify 之外,还包括 Supabase、谷歌 Firebase、MongoDB Atlas、亚马逊云科技的 Amplify 以及 Appwrite 等 BaaS 公司。另外还有 Zephyr Cloud 之类的厂商,这是一家由微前端容器化技术 Module Federation 的缔造者及维护者建立的云服务商,旨在降低微前端的开发和管理难度。
总之,越来越多的科技大厂和初创公司都开始将前端开发者视为消费力强、规模可观的目标受众。人们也都意识到,自托管运营与基础设施会带来沉重的认知负荷,更不用说数据库、安全性、身份验证和可观察性等带来的巨大挑战。现在,前端开发者可以把这一切都交给服务商负责,不再需要内部处理。
抽象度持续提升
越抽象越好……
— Betty Junod (@BettyJunod)*2019 年 9 月 6 日
随着云托管抽象的兴起,一系列软件开发趋势也由此成形,让前端开发者获得了更具份量的话语权。抽象解决方案简化并扩展对原语的访问,降低了原语管理难度。仍然以 PartyKit 为例,其中包括 Cloudflare 设计的 Durable Objects 持久对象,它们本质上就是具有内存状态的 Cloudflare 工作线程。可以看到,这些原语正逐步让位给托管服务,而由此掀起的趋势正给前端开发带来深远影响。
首先,软件开发行业的抽象化进程正在服务和语言层面有所体现。程序员们花在裸机和低级语言编程上的时间越来越少。尽管 C、Assembly 和 Fortran 等人类可读性较差的语言仍具有一定生命力,而且 Rust 支持者阵容也在不断扩大,但大多数日常开发工作都集中在为堆栈顶部编写高级代码。
GitHub 发布的 2023 年 Octoverse 现状报告也体现出这一趋势。根据相关研究,在“2020 万开发者”(指拥有 GitHub 账户的个人)当中,“过去一年间开发者数量增长了 21%”,其中 JavaScript 仍是最受欢迎的语言。RedMonk 公布的语言排名也符合这一发现,自 2015 年以来,JavaScript 每年都稳居最流行编程语言榜首。事实上,在排名前七位的语言中,有六种纯位于堆栈顶部,而且有三种为客户端语言(分别是 JS、CSS 和 TypeScript)。我们从这些调查中可以得出结论,即随着软件领域继续迅速发展,领域内的大部分新人都集中在了前端开发层面。
老实说,身为一名开发者,最让我兴奋的就是能在短短几天内就构建一个项目。
我热爱 Next.js、Vercel 和 Tailwind 堆栈让我能够快速完成开发的感觉,特别是在跟 @replicatehg 和 @OpenAI 配合使用来开发酷炫 AI 应用的时候。
除了开发者使用的编程语言之外,现代软件开发还高度依赖于将繁琐部分和复杂性服务抽象出来。虽然一部分系统管理员仍在以尖锐的言语对这种趋势提出批评,但客观事实表明,将运营部分剥离出来的作法已经越来越普遍。毕竟运营很难、基础设施很贵,安全性与合规性的风险也很高。
API 经济与云原生
前端开发者江湖地位的提升,源自抽象机制的迅速增加,而且这种趋势仍将长期持续。托管服务能够将复杂且耗时的任务(例如用户身份验证)以及高监管要求的服务(例如 POS 系统)留给领域专家,以省时省力的方式提高安全性。如此一来,企业就能专注于处理用例中特有的业务逻辑。特别是在前端工具与生态系统配置层面,这种面向抽象的整体转变也与此前全栈化潮流的失败有关。全栈工程师的出现虽然对企业雇主有利,但却受到开发者群体的严厉谴责,因为指望开发者承担一切必然给他们带来过重的认知负担。正如 Laurie Voss 所说:
如果不能把细节都抽象出去,我们根本无法在堆栈中生存下来。
下面我们重新审视所有 API 经济,深入探讨抽象这个主题。自云计算诞生以来,API 就一直扮演着重要角色。Salesforce 和 eBay 早在 2000 年就开放了其 Web API 的访问权限,之后通过提供 API 来扩大市场份额的理念开始“吞噬整个世界”,在现代软件开发中地位日显,并为前端工程师们带来了巨大助益。Couchbase 联合创始人、目前供职于 Fireproof 公司(一家针对前端开发者的数据库初创企业)的 J Chris Anderson 表示:
API 正被全面集成进前端,这也是前端开发者能获取话语权并掌控采购决策的根本原因。
最近,API 驱动开发也开始在大语言模型(LLM)领域全面开花。开发者无需训练自有模型或在本地进行托管,而可以使用 OpenAI 提供的 ChatGPT、谷歌的 Gemini 或者 Anthropic Claude 等选项轻松创建聊天机器人,使用这些厂商面向开发者提供的直观无缝 API 集成功能。事实上,OpenAI 的定制化 GPT 还提供个性化体验,消除了训练和自托管大模型的复杂挑战。他们还在认真优化开发者体验,提供丰富的技术文档、快速入门指南与 SDK 资源。
除了通过 API 给前端工程师提供的便利之外,技术厂商还为这部分用户提供云原生形式的抽象方案。Begin 公司联合创始人 Brian LeRoux 就对前端开发者群体的前景抱乐观态度,认为该领域更能发挥云优势。从技术提供商的角度来看:
前端工程师是初创公司进军云市场的绝佳切入点。
由于前端开发者在构建动态及交互式网站时必须考虑后端流程,因此会敏锐地意识到无服务器及云托管方案的重要性。事实上,服务器 / 客户端二分模式中仍存在一系列挑战,往往会占用优秀开发者们大量的时间和精力。
抽象问题
当然,对这些高度抽象解决方案的采用同样需要权衡。抽象产品和服务通常以 API 和库的形式交付,也就是将他人编写的代码移植到开发者自己的项目当中。这既是它的核心卖点,也会带来巨大风险。抽象解决方案迫使项目呈现出特定形态,因此往往难以扩展。
大家应该都听过这个经典案例,就是 Twitter 被迫将后端从 Ruby on Rails 重写成 Scala(基于 Java 构建)的形式,原因就是像 Java 这样的低级语言扩展性更好。在涉及繁重的进程与缓存层处理时,像 Java 这样的语言仍然拥有不可替代的价值。然而,像 Twitter 这样的大型应用程序属于极端案例,并非普遍情况。也就是说,这种成长的烦恼并不会阻碍众多开发者继续使用 JavaScript 和 TypeScript。顺带一提,Java 22 还采用了高度简化的语法,因此在提交体验方面甚至胜过不少其他高级语言。
这样的更新让 Java 看起来更类似堆栈顶部的语言。这绝对会吸引到更多全栈工程师。*@redmonk
pic.twitter.com/9Qmuos5ltW
— Dr. Kate Holterhoff (@KateHolterhoff)2024 年 2 月 26 日
除了扩展问题之外,将复杂性抽象出去的服务和产品在托管时往往成本更高。Vercel 通过将 AWS 原语打包在零配置简单构建流程中来简化部署,而用户则为这样的便利性体验付费。这确实导致部分开发者抱怨 Vercel 的使用成本高到离谱,但很多公司还是发现,尽管托管成本愈发夸张,但由于不必聘请工程师来管理基础设施,所以这仍然物有所值。Branch Insurance 联合创始人兼 CTO Joe Emison 就提出了利用云服务配合纯前端初级开发者推动业务运营的案例:
由于我们拥有更优质、更强大的云服务可供选择(包括亚马逊云科技、Google Cloud Platform、Azure、Netify、Twilio 以及 Stripe),所以能更多将开发者精力集中在界面设计上。
换句话说,通过将运营移交给托管提供商,Branch 的工程部门得以专注于开发 UI 与前端界面。尽管 Branch 的例子有点极端,但软件开发的未来确实正朝着 Emison 描述的方向发展。
下面,咱们再来聊聊众多开发者高度依赖抽象与托管服务之后,可能带来的最糟糕的后果:整个行业都将面临生存威胁。之前行业中就存在类似的刻板印象,认为这种趋势会令前端工程师“无脑化”并最终彻底被业务不过关的初级开发者所充斥。也确实有人在认真分析这种刻板印象,认为前端主导的开发图景意味着软件工程将彻底消亡。沿着这样的思路推进,前端工程师最终将趋同于纯粹依赖低代码与无代码解决方案的非技术类开发者。如果说这波 AI 加低代码 / 无代码真能取代软件工程师群体,那么“技术正日渐衰落”的判断似乎也并非危言耸听。
但我倒不觉得前端驱动软件开发的前景就真有这么悲观。相反,我觉得这正是前端领域迸发出创新能量的新机会。那帮想以前端工程师“无脑化”为前提,在市场上兜售严重溢价的黑盒解决方案的厂商,最终都将惨遭失败。
前端未死,只是换了新样貌
这也引出了我关于前端工程师话语权的最后一点分析。与任何其他技术转变一样,这波以前端为重点的过渡同样不会是均匀的。结合软件开发的特殊背景,这必然伴随着角色的重新分配以及传统上泾渭分明的前端与后端、客户端与服务器,乃至静态与交互之间界限的逐渐模糊。其实不少资深从业者,长期以来一直在批评前端和后端这样的表述,认为“十多年来这种硬性划分一直脱离实际,但时至今日却仍然存在。”Reddit 用户 n9iels 就此做出回应:
根据个人经验,我发现前端领域正从纯 HTML/CSS/JS 转化为同时包含前端和后端。特别是对完全使用 React 或 Angular(SPA)构建的网站来说,前端与后端之间的界限已经越来越模糊。
由于前端、后端以及全栈之类的术语无法准确反映当今的系统生命周期,所以终将被新的开发者类型所取代。虽然我估计前端这种说法还会持续一段时间,但就现实世界的实践方式而言,这个领域必然会持续转变。新一代工程师将取代前端开发人员,尝试利用 API 和云服务来构建起高性能的交互式 UI。这批开发人员将跨堆栈进行运营,而不再像之前的全栈工程师那样号称能玩转一切。他们只是在利用一切可以利用的工具,并着眼现实问题开展创新改进。
总而言之,前端的江湖地位日益兴盛,而作为一门学科其仍在探索途中。尽管 AI 技术繁荣与宏观经济萎靡带来了种种不确定性,但厂商们必须意识到,身处堆栈顶部的开发人员的确处于更加有利的位置。行业与市场正变得愈发复杂和成熟,而前端领域的开发人员正在直面这些挑战。在我看来,所谓技术大牛对于无数细节的沉迷并非正确的前进方向,客户端与 UI 体验的全面改进(包括缓存、WebAssembly、水合以及容器化微前端)才是正道。我们之所以看到许多最耀眼的人物和最具开拓性的开发者愿意投身于前端,恰恰是因为前端汇聚了他们最关注的前沿技术。
相关文章:
前端的未来已然到来
随着整个软件行业正逐渐转向以打包、托管与抽象解决方案为主体的新形态,后端与基础设施带来的麻烦正越来越少,而立足堆栈顶部的前端工程师开始成为施展空间最大的时代宠儿。甚至不只是他们,如今无论是前端、后端还是运维开发者,他…...
Open CASCADE学习|gp_XYZ与gp_Mat
gp_XYZ和gp_Mat是Open CASCADE Technology (OCCT)中的类,用于处理3D几何和变换。 gp_XYZ gp_XYZ类代表了一个三维空间中的点或向量。它通过三个坐标值(X, Y, Z)来定义位置或方向。这个类提供了多种操作,比如计算两点之间的距离、…...
BMS绝缘电阻检测原理【转】
...
优秀的测试开发工程师需要掌握哪些技能?
科技的发展与网络技术的广泛应用,让测试开发已成为软件开发过程中不可或缺的一环。测试开发工程师是为确保软件程序的质量和稳定性而工作的专业人士。但是成为一名合格的测试开发工程师需要具备哪些技能呢?一起来看看吧! 优秀的测试开发工程…...
思维树(Tree of Thoughts)的概念
思维树(Tree of Thoughts,简称ToT)是一种利用大型语言模型进行问题解决的框架。这个框架借鉴了人类认知研究的成果,特别是关于人类在做决策时的两种思维方式:快速、自动、无意识的模式(称为“系统1”&#…...
探索设计模式的魅力:抽象工厂模式的艺术
个人主页: danci_ 🔥系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自文章:探索设计模式的魅力:抽象工厂模式的艺术 抽象工厂模式&…...
果园系统养殖游戏喂养偷菜种植浇水养成小程序
装扮 通过购买装扮场景切换不同的农场风格 土地升级 通过特定的材料对土地和房屋进行升级 日志 记录道具的使用数量及金币农作物的收入情况 幸运转盘 可用金币进行抽奖 宝箱开启 获得宝箱后可以通过金币开启 每日签到 每日签到获得奖励 系统公告 可以第一时间知道游戏的更新和…...
Windows版PHP7.4.9解压直用(免安装-绿色-项目打包直接使用)
安装版和解压版 区别 安装版: 安装方便,下一步------下一步就OK了,但重装系统更换环境又要重新来一遍,会特别麻烦解压版(推荐): 这种方式(项目打包特别方便)能更深了解mysql的配置&…...
凡泰极客亮相2024 亚马逊云科技出海全球化论坛,为企业数字化出海赋能
随着「不出海,即出局」登上热搜榜单,企业出海已成燎原之势,3月29日,2024 亚马逊云科技出海全球化论坛在深圳成功举办,凡泰极客创始人梁启鸿受邀出席,并以 「App 2.0:以SuperApp构建智能数字生态…...
新零售门店、商品、会员管理指标体系总览
新零售,旨在打破传统零售业的边界,引入先进科技和数字化手段,通过整合线上线下渠道,全面提升用户体验,并实现更智能、高效、个性化的零售运营模式。这一模式不仅仅关注销售产品,更注重构建全方位的购物生态…...
网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)
网上订餐系统目录 目录 基于springboot的网上订餐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能模块的实现 (1)用户注册界面 (2)用户登录界面 (3)菜品详情界面 (…...
python的抽象类和抽象方法
抽象类是一种不能直接被继承的类。举个例子,我们可以从类Creature衍生出类People,Cats,其中前者两条腿走路,后者四条腿走路,而单独的类Creature却没有一个几条腿走路的方法,因为这是不确定的。 ࿰…...
Android MVVM架构学习——ViewModel DataBinding
关于MVVM架构,我并不想花篇幅去做重复性的描述,网上一搜都是一堆讲解,大家可以自行了解,我所做的只是以最简单的例子,最有效的步骤,从零开始,去实现一个相对有点学习参考价值的项目。 先来看本…...
防抖与节流
...
理解 Nginx 的多站点配置:为每个网站单独配置
Nginx 是一个高性能的 Web 服务器,广泛用于托管和管理网站。它之所以受欢迎,部分原因在于它的灵活性和强大的配置能力。特别是对于管理多个网站,Nginx 提供了一种高效且组织良好的方法。让我们逐步了解如何使用 Nginx 配置多个网站࿰…...
支持向量机模型pytorch
通过5个条件判定一件事情是否会发生,5个条件对这件事情是否发生的影响力不同,计算每个条件对这件事情发生的影响力多大,写一个支持向量机模型pytorch程序,最后打印5个条件分别的影响力。 示例一 支持向量机(SVM)是一种…...
轮转数组(力扣)
189. 轮转数组 - 力扣(LeetCode) 189. 轮转数组 题解 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 样例输入 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮…...
批量插入10w数据方法对比
环境准备(mysql5.7) CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 唯一id,user_id bigint(10) DEFAULT NULL COMMENT 用户id-uuid,user_name varchar(100) NOT NULL COMMENT 用户名,user_age bigint(10) DEFAULT NULL COMMENT 用户年龄,create_time time…...
HAL STM32 I2C方式读取MT6701磁编码器获取角度例程
HAL STM32 I2C方式读取MT6701磁编码器获取角度例程 📍相关篇《Arduino通过I2C驱动MT6701磁编码器并读取角度数据》🎈《STM32 软件I2C方式读取MT6701磁编码器获取角度例程》📌MT6701当前最新文档资料:https://www.magntek.com.cn/u…...
如何排查nginx服务启动情况,杀死端口,以及防火墙开放指定端口【linux与nginx排查手册】
利用NGINX搭建了视频服务,突然发现启动不了了,于是命令开始 使用以下命令查看更详细的错误信息: systemctl status nginx.service Warning: The unit file, source configuration file or drop-ins of nginx.service changed on disk. Run…...
用Rust实现免费调用ChatGPT的命令行工具 (一)
代码已经开源:🚀 fgpt 欢迎大家star⭐和fork 👏 ChatGPT现在免费提供了GPT3.5的Web访问,不需要注册就可以直接使用,但是,它的使用方式是通过Web页面,不够方便。 更多技术分享关注 入职啦&…...
mysql 查询实战1-题目
学习了mysql 查询实战-变量方式-解答-CSDN博客,接着练习sql,从实战中多练习。 1,题目: 1,查询部门工资最高的员工 1,建表: DROP TABLE IF EXISTS department; create table department(dept_i…...
Word学习笔记之奇偶页的页眉与页码设置
1. 常用格式 在毕业论文中,往往有一下要求: 奇数页右下角显示、偶数页左下角显示奇数页眉为每章标题、偶数页眉为论文标题 2. 问题解决 2.1 前期准备 首先,不论时要求 1、还是要求 2,这里我们都要做一下设置: 鼠…...
数据赋能(58)——要求:数据赋能实施部门能力
“要求:数据赋能实施部门能力”是作为标准的参考内容编写的。 在实施数据赋能中,数据赋能实施部门的能力体现在多个方面,关键能力如下图所示。 在实施数据赋能的过程中,数据赋能实施部门应具备的关键能力如下。 理性思维与逻辑分…...
Unity URP PBR_Cook-Torrance模型
Cook-Torrance模型是一个微表面光照模型,认为物体的表面可以看作是由许多个理想的镜面反射体微小平面组成的。 单点反射镜面反射漫反射占比*漫反射 漫反射 基础色/Π 镜面反射DFG/4(NV)(NL) D代表微平面分布函数,描述的是法线与半角向量normalize(L…...
Unity之XR Interaction Toolkit如何在VR中实现渐变黑屏效果
前言 做VR的时候,有时会有跳转场景,切换位置,切换环境,切换进度等等需求,此时相机的画面如果不切换个黑屏,总会感觉很突兀。刚好Unity的XR Interaction Toolkit插件在2.5.x版本,出了一个TunnelingVignette的效果,我们今天就来分析一下他是如何使用的,然后我们自己再来…...
html+vue编写分页功能
效果: html关键代码: <div class"ui-jqgrid-resize-mark" id"rs_mlist_table_C87E35BE"> </div><div class"list_component_pager ui-jqgrid-pager undefined" dir"ltr"><div id"pg…...
计算机网络 实验指导 实验17
实验17 配置无线网络实验 1.实验拓扑图 Table PC0 和 Table PC1 最开始可能还会连Access Point0,无影响后面会改 名称接口IP地址网关地址Router0fa0/0210.10.10.1fa0/1220.10.10.2Tablet PC0210.10.10.11Tablet PC1210.10.10.12Wireless互联网220.10.10.2LAN192.16…...
在 Vue中,v-for 指令的使用
在 Vue中,v-for 指令用于渲染一个列表,基于源数据多次渲染元素或模板块。它对于展示数组或对象中的数据特别有用。 数组渲染 假设你有一个数组,并且你想为每个数组元素渲染一个 <li> 标签: <template> <ul>…...
达梦数据库执行sql报错:数据溢出
数据库执行sql报错数据溢出 单独查询对应的数字进行计算是不是超过了某个字段类型的上限或下限 如果已经超过了,进行对字段进行cast类型转换处理,转换为dec num都可以尝试 这里就是从 max(T.BLOCK_ID as dec*8192t.bytes)/1024/1024 max_MB,换成了这个…...
从「宏大叙事」到「生活叙事」,小红书品牌种草的的“正确姿势”
不同于抖音和微博,在小红书上,品牌营销的基调应该是怎样的?品牌怎样与小红书用户对话?什么样的内容,才能走进小红书用户的心中?本期,小编将带大家洞察品牌在小红书营销的“正确姿势”。从「小美…...
Python Selenium 的基本使用方法
文章目录 1. 概述2. 安装Chrome及ChromeDriver2.1 安装Chrome2.2 安装ChromeDriver 3. 安装Selenium4. 常见用法4.1 启动4.2 查找元素4.3 等待页面加载元素 1. 概述 Selenium 是一个用于自动化 web 浏览器的工具,它提供了一套用于测试 web 应用程序的工具和库。Sel…...
上位机图像处理和嵌入式模块部署(树莓派4b固件功能设计)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,上位机的功能都是基于插件进行开发的。但是上位机的成本比较贵,一般的企业不一定愿意接接受。这个时候另外一…...
新手入门人工智能:从零开始学习AI的正确途径
你是否对人工智能(AI)充满了好奇心和探索欲?你是否想了解如何从零开始学习AI,成为一名人工智能领域的专家?那么,这篇文章就是为你准备的!我们将带你了解人工智能的基本概念,学习如何…...
ubuntu git相关操作
1 安装git sudo apt install git git --version git version 2.25.1 2 解决git超时 2.1 扩大post的buffer git config --global http.postBuffer 524288000 git config --global http.postBuffer 157286400 2.2 换回HTTP1上传。上传之后再切换回HTTP2 …...
IDEA工具|添加 GitLab 账户之两三事
📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师 🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 🔥 三连支持:欢迎 ❤️关注…...
蓝桥杯:棋盘(Java)
目录 问题描述输入格式输出格式代码实现 问题描述 小蓝拥有n n大小的棋盘,一开始棋盘上全都是白子。小蓝进行了m.次操作,每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色,黑色棋子变为白色)。请输出所…...
跨界融合:ERP与TMS的区分、相通之处、融合方式,全告诉你。
Hi,如今系统的边界越来越模糊,A系统和B系统会有一些功能的交叉,贝格前端工场今天开始介绍第二篇ERP和TMS的融合。 一、什么是ERP和TMS ERP是企业资源规划(Enterprise Resource Planning)的缩写,是一种集成…...
SAP Smartform转存PDF方法汇总
用户会有保存SF至本地PDF文件的需求,下面详细说明一下Smartform转成PDF的四种方法,其中,方法二和三相比于其他方法更便捷实用,如果还有其他方法,欢迎留言补充。 一、代码开发 1)先调用smartform函数获取OTF格式数据 2)后调用函数CONVERT_OTF转换成PDF格式数据 3)再…...
Linux【实战篇】—— NFS服务搭建与配置
目录 一、介绍 1.1什么是NFS? 1.2客户端与服务端之间的NFS如何进行数据传输? 1.3RPC和NFS的启动顺序 1.4NFS服务 系统守护进程 二、安装NFS服务端 2.1安装NFS服务 2.2 创建共享目录 2.3创建共享目录首页文件 2.4关闭防火墙 2.5启动NFS服务 2.…...
Edge的使用心得与深度探索
Microsoft Edge 是微软推出的一款网页浏览器,基于 Chromium 开源项目开发。从 2020 年开始,Edge 浏览器经历了一次重大更新,采用了与 Google Chrome 相同的浏览器引擎,这使得它在性能、兼容性和扩展支持方面都得到了显著改善。以下…...
逆向案例二十八——红某点集登录接口逆向序
网址:aHR0cHM6Ly93d3cuaHJkanl1bi5jb20vIy9sb2dpbj9yZWRpcmVjdD0lMkZyZWFsVGltZUxpdmluZw 登录接口,发现两个参数加密,分别是pwd和sig,t很明显是时间戳。 观察pwd,发现很像md5加密,我输入的密码是123456,在在线加密网…...
我的创作纪念日20240418
机缘 我的技术博客起源于对编程的深深热爱和对知识的渴望。从一开始,我就被编程世界的无限可能所吸引,而这种热情也推动我开始了技术创作之旅。我创建博客的初衷有以下几点: 分享实战经验:在工作中,我遇到了许多技术…...
计算机视觉入门
计算机视觉是人工智能的一个分支,它涉及研究如何使计算机能够理解和解释图像和视频中的视觉信息。这个领域结合了计算机科学、工程学、神经科学和认知科学等多个学科的知识。以下是计算机视觉入门的一些关键点: 1. 基础概念 - **图像处理**:对…...
CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)
CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀) 文章目录 CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)前端验证—MIME绕过有关MIMEMIME的作用 解题时有…...
Java面试题笔记(持续更新)
Java基础 java中的Math.round(-1.5)等于多少? Math的round方法是四舍五入,如果参数是负数,则往大的数如,Math.round(-1.5)-1,如果是Math.round(1.5)则结果为2 JDK和JRE的区别? JDK 是 Java Development ToolKit 的简称,也就是…...
格式化字符串漏洞学习笔记
简单介绍 格式化字符串漏洞和栈溢出有相似之处,但又有所不同,都是利用了程序员的疏忽大意来改变程序运行的正常流程。 1、格式化字符串的介绍 printf()、fprint()等print()系列的函数可以按照一定的格式将数据进行输出。 实例…...
用友NC avatar接口文件上传漏洞
产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 漏洞介绍 用友 NC avatar接口处…...
【Go语言快速上手(二)】 分支与循环函数讲解
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:Go语言专栏⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习更多Go语言知识 🔝🔝 Go快速上手 1. 前言2. 分支与循环2.1…...
动手写sql 《牛客网80道sql》
第1章:SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件,用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…...