前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >表单&试卷零代码搭建平台正式上线,支持源码部署

表单&试卷零代码搭建平台正式上线,支持源码部署

作者头像
徐小夕
发布于 2024-07-04 04:52:31
发布于 2024-07-04 04:52:31
22900
代码可运行
举报
文章被收录于专栏:趣谈前端趣谈前端
运行总次数:0
代码可运行

hi, 大家好, 我是徐小夕.

之前一直在社区分享零代码&低代码的技术实践,也陆陆续续设计并开发了多款可视化搭建产品,比如:

  • H5-Dooring(页面可视化搭建平台)
  • V6.Dooring(可视化大屏搭建平台)
  • 橙子6试卷(表单搭建引擎)
  • Nocode/WEP 文档知识引擎

最近终于设计出了橙子试卷商业模式的最终方案, 我会在接下来的内容中和大家介绍。

橙子试卷主要用于可视化的搭建表单, 试卷等场景, 让不懂技术的人也能拖拽式创建自己的表单和试卷.

上线测试了2个月,目前已经有500+用户使用,也做了很多使用的表单问卷模板:

为了让更多个体和中小企业能拥有自己的表单问卷搭建系统,我最近设计了私有化部署服务,提供源码授权 + 技术培训,价格定位在4999元,如果感兴趣可以在文章末尾联系交流。

接下来和大家分享一下橙子试卷的技术架构和技术实现, 如果你也在调研零代码, 低代码, 或者表单引擎等技术, 那么这篇文章也许可以给你带来一些灵感.

体验地址: https://turntip.cn/form-engine

文末会附技术交流wx, 感兴趣的朋友可以加入交流讨论.

技术栈

之前在开发 H5-dooring 零代码搭建平台时我采用的是React技术栈, 因为用 react 写复杂逻辑会更顺手, 好在 vue3 也支持了函数式的写法, 也提供了 hooks 机制, 让我们写逻辑驱动的应用更加方便, 所以橙子试卷 采用了国内最流行的 vue3 作为前端框架. 具体技术栈如下:

  • Vue3 前端框架
  • Vite 工程化工具
  • Typescript 类型加强
  • arco-design 精美的前端UI
  • pinia 状态管理库
  • axios 请求库
  • json schema 数据存储规范
  • xijs 面向业务场景的js工具库
  • vue-echarts 数据分析图表库
  • koa2 服务端数据支持
  • koa-jwt 基于koa封装的jwt鉴权库

当然还有一些第三方组件这里就不一一介绍了. 我们的核心在于从零完整设计一套 MVP 的零代码搭建引擎, 所以后端部分, 大家可以替换成自己熟悉的 java, go, python 等语言.

技术架构

因为零代码表单引擎设计的核心是如何构造一套低成本且可扩展的组件库, 并快速应用到实际业务场景, 所以设计的核心就包括如下部分:

  • 可扩展的组件库系统
  • 灵活的拖拽搭建模式
  • 统一标准的DSL数据结构和数据规范
  • 一套可插拔的分析管理系统

接下来我会详细介绍这几块的技术实现, 当然实现思想和技术栈无关, 我们仍然可以把它应用到不同的技术体系中.

具体功能实现

1. 构造可扩展的组件库系统

因为我们的搭建场景是问卷, 试卷, 微页面, 所以组件库会围绕表单来扩展, 比如常用的:

  • 文本, 图片
  • 单选, 多选, 图片选择
  • 下拉框
  • 文本输入框
  • 文件上传
  • 电子签名
  • 评分

等等, 这些组件当然不能满足所有客户的业务场景, 所以我们要设计一种可扩展组件库, 并且开发成本较低的方案.

我们可以参考常见的低代码平台的设计思路:

简言之就是把核心UI和逻辑作为组件的主文件, 同时暴露标准的 的 可配置属性和可配置逻辑.

之所以强调“标准”, 是为了让不同组件能共用一套属性配置引擎, 从而让组件二开的成本大大降低(专注于组件的开发, 而不是配置的兼容).

其次为了尽可能让组件的配置更灵活, 我们需要提供一套标准的组件默认属性, 让用户可以根据默认属性来配置自己的个性化的样式, 那么我们的组件就需要这么来设计:

这里以橙子试卷文本组件给大家举个例子.

文本组件的主文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div
    :class="{
      text: true,
      justify: editorStore.data[index].align == 'justify',
      [editorStore.data[index].animation]: true,
    }"
    :style="{
      paddingTop: editorStore.data[index].padding[0] + 'px',
      paddingRight: editorStore.data[index].padding[1] + 'px',
      paddingBottom: editorStore.data[index].padding[2] + 'px',
      paddingLeft: editorStore.data[index].padding[3] + 'px',
      color: editorStore.data[index].titleColor,
      fontSize: editorStore.data[index].titleSize + 'px',
      fontWeight: editorStore.data[index].titleWeight,
      textAlign: editorStore.data[index].align,
      animationDelay: editorStore.data[index].delay,
      animationIterationCount: editorStore.data[index].number,
      cursor: 'pointer',
    }"
    @click="jump(editorStore.data[index].link)"
  >
    {{ editorStore.data[index].titleText }}
  </div>
</template>

<script setup lang="ts">
import { useEditorStore } from "@/store";

const editorStore = useEditorStore();

const jump = (link: string) => {
  window.location.href = link;
};

defineProps(["index"]);
</script>

文本组件的可配置属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default class Text {
    component: TextPropType;
    constructor(id: string) {
        this.component = {
            component: 'text',
            type:'editor.text',
            id,
            check: true,
            titleText: 'https://turntip.cn/form-engine',
            titleColor: 'black',
            titleSize:16,
            titleWeight:'500',
            padding: [0, 0, 0, 0],
            margin: [10, 10, 10, 10],
            animation:'',
            direction: 'center',
            link:'https://turntip.cn/formManager',
            delay:2,
            attrbite: [
                {
                    name: 'editor.titleText',
                    field: 'titleText',
                    component: 'textarea'
                },
                {
                    name: 'editor.padding',
                    field: 'padding',
                    component: "padding",
                    props: {
                        min: 0,
                        type:'padding'
                    }
                },
                {
                    name: 'editor.margin',
                    field: 'margin',
                    component: "padding",
                    props: {
                        min: 0,
                        type:'margin'
                    }
                },
            ]
        }
    }

}

通过这种方式, 我们只需要根据业务需求实现自己的组件, 编写组件可配置的属性json, 即可通过配置引擎来动态生成组件的可编辑面板, 从而让非技术人员轻松编辑组件.

通过以上的方式, 我们可以轻松开发各种自定义的组件, 提供给用户使用:

2. 灵活的拖拽搭建模式

对于表单场景, 我们不需要特别复杂的布局交互, 所以这里我才用拖拽排序来实现页面的搭建, 同时支持组件快捷复制和删除.

目前 vue3 的比较成熟的拖拽组件有:

  • vuedraggable
  • vue3-draggable-resizable

这里选择vuedraggable 来实现拖拽排序, 并对其进行上层封装, 实现体验更好的组件搭建排序效果.

当然还有很多优秀的拖拽库, 如果大家对vue3-draggable-resizable 感兴趣, 也可以试试, 它支持网格布局和自由布局, 可以实现更自由的布局搭建效果:

3. 统一标准的DSL数据结构和数据规范

在组件库设计中我们为了统一管理和维护组件和组件的属性配置, 需要定义统一化的 DSL 结构, 这个结构包含了组件的如下信息:

  • 组件元数据
  • 位置信息
  • 样式信息
  • 事件 / 交互
  • 埋点定义(高级配置)

后4个都好理解, 这里介绍一下组件元数据, 它的价值在于定义组件的基本信息:

  • 组件类型
  • 组件名称
  • 图标
  • 初始化数据
  • 组件路径 (高级, 可选)
  • 状态 / 版本 (高级, 可选)

通过对 元信息 的定义, 我们可以很方便的建立更系统的组件库, 比如支持组件分类, 组件版本切换, 组件加载(通过路径元信息来加载远程组件).

所以我们需要尽可能规范统一的定义组件的通用规则和自定义规范, 以便让不同组件都遵行统一的规则来实现零代码搭建引擎的设计.

这里还是以橙子试卷为例子, 来介绍一下我们统一的DSL:

首先我们看看文本的元信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    name: 'editor.text', // 组件名称
    component: IconLanguage, // 组件图标
    type: 'text' // 组件类型
}

这是一个简单的元信息, 它可以帮我们快速识别组件, 并为画布提供组件更具体的渲染信息, 不同组件都通过统一的配置来定义, 可以让我们的渲染器更加高效的渲染组件, 并降低组件维护成本.

在介绍组件的内容中我已经介绍了组件接受的 json 配置结构, 这里分享一个由多个组件组成的完整页面的 DSL 结构和实际代码:

案例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "id": "5137706621235472",
    "title": "2024前端笔试题",
    "author": "徐小夕",
    "desc": "页面描述",
    "icon": "",
    "bgColor": "",
    "bgImage": "",
    "isLogin": false,
    "data": [
        {
            "component": "sign",
            "type": "editor.sign",
            "id": "JelhSP",
            "check": false,
            "titleText": "请在此处签名",
            "titleColor": "black",
            "margin": [
                10,
                10,
                10,
                10
            ],
            "limit": 1,
            "btnColor": "#165DFF",
            "titleSize": 15,
            "titleWeight": "500",
            "analysis": ""
        },
        {
            "component": "math",
            "type": "editor.math",
            "id": "3-U9XA",
            "check": true,
            "titleText": "数学题目:5^9>\\pi",
            "titleColor": "#D41C1C",
            "options": [
                {
                    "label": "A",
                    "value": "苹果"
                },
                {
                    "label": "B",
                    "value": "香蕉"
                }
            ],
            "symbol": "A,B,C...",
            "direction": "horizontal",
            "optionsColor": "black",
            "analysis": "",
            "auto": "",
            "margin": [
                10,
                10,
                10,
                10
            ],
            "scores": 0,
            "required": false
        },
    ]
}

有了以上的统一 DSL 结构, 我们就可以轻松通过 JSON 来渲染页面, 同时也有更多的想象空间, 比如:

  • 通过DSL来实现跨端渲染搭建
  • 通过DSL来实现多人协作共享
  • 通过DSL来实现A出码能力
  • 通过AI学习DSL来批量自动化生产页面

4. 可插拔的分析管理系统

一个可视化零代码解决方案一定包含完整的用户使用链路, 即从搭建到投放再到信息收集的完整分析链路.

当然不同的公司业务分析需求不同, 所以需要支持纯粹的数据收集和流转, 以便供不同业务使用.

目前橙子试卷提供了一套完整的数据收集能力, 对于试卷场景, 也提供了自动打分机制, 可以一键分析数据情况:

当然这都是可以基于自身规则自己二次开发的, 橙子试卷 只是提供了一套案例参考.

应用场景和价值

  • 帮助中小企业或者个体提供一套低成本零代码表单搭建解决方案,且不止于表单/试卷
  • 基于橙子试卷的最佳实践, 轻松扩展出更多的搭建业务场景
  • 开箱即用的组件和模版管理最佳实践, 积累和沉淀内部技术资产
  • 结合AIGC, 创造更强大的生产力工具

体验地址: https://turntip.cn/form-engine

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣谈前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一周精彩内容分享(第12期)
https://open.oceanbase.com/docs/observer-cn/V3.1.2/10000000000015567
早起的鸟儿有虫吃
2023/03/21
3270
一周精彩内容分享(第12期)
别让自己成为一座孤岛:媒体人如何与抑郁症共度漫长岁月?
他们是新闻事件最前方的记录者、是茫茫暗夜中的盏盏烛火、是捕捉真相定格焦点的眼睛,他们见证着时代的新旧更替,他们奔走在社会善与恶的前线......但与此同时,他们也经受着常人无法想象的压力、焦虑与困扰。 本期关注媒体人的另一面,绕过那些高光时刻、绕过那些理性文字,探究和倾听他们内心的失落与彷徨。 在新闻行业,抑郁症有多普遍? 媒体人不是超人类的历史观察者,他们可能和自己故事中所讲述的受害者一样脆弱。 除了工作本身带来的生理伤害以外,媒体人的心理健康也同样受到多种因素的侵扰。长时间的工作、超负荷的压力、偶尔
腾讯大讲堂
2020/02/25
7070
别让自己成为一座孤岛:媒体人如何与抑郁症共度漫长岁月?
【掌握】如何长时间高效学习?
建立外部大脑(知识管理) 一.重点笔记 我用的是OneNote,配合斯巴达浏览器(可以直接在网页上书写,标注),当然用别的也一样,方便顺手就好,毕竟不是个讨论工具的帖子,就不细说了,有兴趣的查查,免得有广告嫌疑。 如何充分利用 OneNote,发挥它的全部价值和潜力? 我自己的理念是不用纸质,因为无论检索,整理,修改,分享都是非常麻烦的,最重要的是我在做笔记时会从网上找到相关的资料贴上去,有助于加深认识。我个人不欣赏花里胡哨的东西,笔记是以实用为基础的,搞那些没有用的耽误时间。网络的好处别的不提了,就一个云
小莹莹
2018/04/23
8020
【掌握】如何长时间高效学习?
Neuron综述|昼夜节律和情绪障碍:是时候看清真相了
摘要:时间的重要性在我们的世界中一直很普遍,正常的光/暗和睡眠/觉醒周期的中断现在已经成为常态。所有情绪障碍,包括季节性情感障碍(SAD)、重度抑郁症(MDD)和双相情感障碍(BD),都与各种生理过程中的异常睡眠和昼夜节律密切相关。光/暗变化和季节变化都有可能对正常睡眠/觉醒模式产生破坏。此外,针对昼夜节律系统的治疗已被证明在某些情况下是有效的。这篇综述将总结这些疾病如何与特定昼夜节律表型相关联,以及将生物钟与情绪调节联系起来的神经元机制。我们还讨论了从昼夜节律的治疗中学到的东西,以及我们如何利用现有知识开发更多个性化设计的治疗方法。
悦影科技
2024/04/08
3730
一个十几年程序员给所有新老程序员的忠告
吉日噶拉(在外企、上市公司工作过,自己也创业失败过,遇到过很多失败挫折,甚至露宿街头,但是最后还是挺过来了),是一个十几年的程序员了,里面介绍了他的相关经历,以及他的一下经验,无论是对刚入门的程序员,还是工作了十年八年的程序员都有一些经验值得借鉴学习。这里我也把这本书中的部分精华分享给大家,希望对大家有帮助!
AWeiLoveAndroid
2018/09/03
1.9K1
一个十几年程序员给所有新老程序员的忠告
优秀工程师至关重要的一项技能,你解锁了吗?
导读:很多程序员在工作一段时间后会遇到迷茫期,虽有技术傍身,也难免会产生焦虑,反复思考怎样才能快速成长。关于如何提高自己的思考力,运用思考的力量推动能力提升,以此实现技术成长,阿里巴巴盒马产品技术部的岩动总结了一套思考方法,分享给每个正在成长的程序员。(本篇文章较长,阅读时间约30分钟,建议收藏后,找一个合适的时间慢慢品读哦)
Datawhale
2019/07/08
5460
优秀工程师至关重要的一项技能,你解锁了吗?
从“裸辞少年”到“面具猎人”:黑客杨常城的逆行岁月
浅友们好~我是史中,我的日常生活是开撩五湖四海的科技大牛,我会尝试各种姿势,把他们的无边脑洞和温情故事讲给你听。如果你想和我做朋友,不妨加微信(shizhongmax)。
浅黑科技
2022/11/11
9520
从“裸辞少年”到“面具猎人”:黑客杨常城的逆行岁月
相亲对象告诉你他的相亲史_时间让我看懂一切
注:本文,来自csdn论坛的觉的楼主写的不错,所以就引用过啦了,别介意哦,http://topic.csdn.net/u/20100624/16/80f263ca-b05f-456f-bf5f-9d87dd78a6f9.html,作者:NewJacket (这个真不是马甲)
全栈程序员站长
2022/11/08
3.3K0
JavaScript专家开课啦。
Hi好久不见的大家,雷小达想死你们了! 今天带来三个JavaScript的内容,让大家一把过足瘾。在西安办公室有一个JavaScript方面的专家,最近他的努力方向转移到了Lisp上。且听,JavaScript专家——邱俊涛一一道来。 I code it Code and Life RSS 文章 文章归档 出版物 关于 团队里的两类程序员 JAN 14TH, 2018 程序员的分类 最近几年,我在多个不同类型的项目上,以不同的角色工作过:有时候会为项目前期做一些预研、然后为后续的交付估算工作量;有时
ThoughtWorks
2018/04/18
1.8K0
JavaScript专家开课啦。
面试 Notes|2021 年秋季 Android 求职记。。。
说来也怪,从入职的第一天就觉得很不舒服,然后慢慢产生离开的念头,随后转变思想,回去打算按照步骤继续学习,避免下次求职尴尬。奈何。
贺biubiu
2021/11/16
2.1K0
面试 Notes|2021 年秋季 Android 求职记。。。
2018:春来秋去,往事知何处(上)
去年 12 月的某个夜晚,在部署服务的无聊时光里,我突然想翻看自己一年来的朋友圈,看看有哪些有趣的事情。结果那夜一发不可收拾,扫了半年的朋友圈,一直读到凌晨三点半还意犹未尽(毕竟五点半就要起床了,觉还是要象征性地睡一下)。我把一些有意思的内容摘录了下来,没事的时候,就补两句评语,就像在跟去年的自己对话 —— 这可能也算程序员级宅男的恶趣味了。
tyrchen
2019/03/07
1.4K0
2018:春来秋去,往事知何处(上)
爱英文的程序员运气不会太差:史上最全程序员英语进阶指南
经作者授权转载 作者 | han 你渴望尝试新的技术: GraphQL, Figma, MobX; 你耐心等待优秀的中文翻译: 等待,等待,还是等待; 你来者不拒地寻找提高英语水平的最佳方法: 疯狂英语,红宝书,玄学; 我这里有本“葵花宝典”…… 英语水平等级示意图: 本图主要参考 http://www.coe.int/en/web/common-european-framework-reference-languages/table-1-cefr-3.3-common-reference-levels-g
大数据文摘
2018/05/24
3.8K0
2021-06-05按键精灵实现远程获取消息内容
用户3519280
2023/07/06
3340
Python100Days
这可能是我目前发现最好最好的Python教程了,故整理至我的博客。 原项目GitHub地址https://github.com/jackfrued/Python-100-Days
一点儿也不潇洒
2018/08/07
10K0
张孝祥java就业面试题大全
从享受生活的角度上来说:“程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做;第二,你非常痴迷和爱好程序,并且在这方面有一些天赋和优势。程序员的结局也是有两种:第一,默默退休,第二以程序员为起点或跳板,注意积累,跟对了好的老板或团队,找到和很好的搭档自己创业,成为IT金领和富翁。” 人们在时间面前是平等的,吾生也有涯,所以,你的经验更丰富点,那不算什么,经验是用时间积累的,你一生只有那么多时间,你能积累多少经验呢?最重要的是你的学习能力和学习方法,这个发挥的能量可以有很大差异,要提高学习能力和学习方法首先要学会思考和总结,要学会掌握事物的根本性的东西,而不是一些表面的细节。学习方法和学习能力对于IT工作者来说尤为重要,因为IT行业技术更新太快,并且细节太多,同一个技术的细节变来变去也是常有的事情,所以,IT技术学习者绝不能照着书籍和老师的讲解死记硬背和生搬硬套。搞IT工作很累人,如果学习方法不对、学习能力不强,那就更累了,不过,这怨不得别人,你的学习方法和学习能力只适合做刷盘子的工作,却非要跑到程序员圈子里来混,那谁能有办法拯救你! 在没有人指引的情况下,只能是自己一个知识点、一个知识点地漫无目的学习,等到积累了足够的知识量后,才有能力开始思考和琢磨原理方面的问题,这个学习过程很漫长。如果能在好老师的指引下,老师会启发你先思考原理问题,然后再去学习一个具体的知识点,让你能够举一反三、触类旁通,这样的学习效率就会更高。 多学了几个知识,并不能说明你就很厉害了,只能说是你比别人投入了更多的时间和精力而已,别人想做也能做到!不是你学了多少知识就算厉害了,关键是要用好学到的知识,要让学到的知识发挥出最大的社会价值和经济价值,这才是最厉害的。 另外,一个人的未来和造化,会深受环境的影响,所谓孟母三迁,近朱者赤、近墨者黑的大大道理,这些典故大家不一定能深刻领悟和感受,我们就不多说了。就拿现代比较接近我们生活的事例来说,如果你周围的朋友全是以擦皮鞋为生、每月辛辛苦苦下来就挣1500元,那么估计你的职业也是跟着擦皮鞋了,即使你再聪明和再勤奋,顶多每月比你那帮朋友多挣300元,合下来也就区区1800元/月。前几年只要抓住了大势,没钱全部找银行贷款了在北京买房、到山西开煤矿,是头猪也能每年大把大把地捞钱,如果你周围的朋友全是投机倒把的买房和开煤矿者,你的职业自然也是与他们干同样的事情,即使你再差,每年也能挣到百来万不成问题,这就是环境的重要性。聪明的你因为没有机会置身于炒房团中,比那些有机会接触炒房者的猪挣得就要少、就要累。到传智播客的环境中来,你就很有机会拿到高薪了,你可以不参加传智播客的培训,但只要想办法与传智播客的学员们住在一起,成功的机会就大多了。
MickyInvQ
2023/04/04
9730
100天学会python
目前我使用的Python 3.7.x的版本是在2018年发布的,Python的版本号分为三段,形如A.B.C。其中A表示大版本号,一般当整体重写,或出现不向后兼容的改变时,增加A;B表示功能更新,出现新功能时增加B;C表示小的改动(例如:修复了某个Bug),只要有修改就增加C。如果对Python的历史感兴趣,可以阅读名为《Python简史》的网络文章。
她的店里只卖樱花
2023/01/06
3.4K0
100天学会python
构建安全可靠的系统:第十六章到第二十章
尽管不可能为可能扰乱您组织的每种情况制定计划,但作为综合灾难规划策略的第一步,正如第十六章中所讨论的那样,是务实和可行的。这些步骤包括建立一个事件响应团队,在事件发生之前为系统和人员进行预置,并测试系统和响应计划——这些准备步骤也将有助于为危机管理做好准备,这是第十七章的主题。在处理安全危机时,具有各种技能和角色的人员需要能够有效地合作和沟通,以保持系统运行。
ApacheCN_飞龙
2024/01/11
3200
构建安全可靠的系统:第十六章到第二十章
经典 40 篇完整版
Hiding behind the loose dusty curtain, a teenager packed up his overcoat into the suitcase. He planned to leave home at dusk though there was thunder and lightning outdoors. He had got to do this because he was tired of his parents’ nagging (唠叨的) about his English study and did not want to go through it any longer. He couldn’t get along well with English and disliked joining in English classes because he thought his teacher ignored him on purpose. As a result, his score in each exam never added up to over 60.
独元殇
2023/03/14
1.7K0
Java面试:备战22k
特别说明:别纠结于薪资能不能到22k,在到达22k之前,这些博文里的专业技能方面都要懂吧,如果连这些基础的东西都不懂,你到了22k,估计也是很水的存在了。除此之外,拿22薪你还需要具备,能独立完成一个复杂模块的需求分析、方案设计和最终落地实现,寻找更优的设计和解决方案,积极优化慢 SQL、慢服务,具备排查问题的能力,遇到线上问题能及时定位和修复上线,例如:数据库死锁、服务器宕机、服务器 Full GC 频繁等。合理分配需求,做好进度把控、风险评估、Code Review。
Java廖志伟
2021/04/07
1.2K0
Java面试:备战22k
JavaSE 编写第一个程序
介绍 JavaSE 基础的基本语法知识,不会包含特别难以理解或更深层次的内容,通俗易懂。本人是实战派,看着大幅篇章晦涩的理论,但是没有多少实践证明的书籍就头疼;同时如果知识东一点、西一点,跳跃性太大,不成体系,也比较麻烦。
全栈程序员站长
2022/09/14
6.7K0
JavaSE 编写第一个程序
推荐阅读
相关推荐
一周精彩内容分享(第12期)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验