不要一上来就学框架

2023-11-19

问:有两年多前端经验,但感觉自己对后端知之甚少,没有安全感。但是后端语言又多,不知道学哪一门性价比好一些,求教。

 

语言不是重点,尤其是你已经会一门语言的情况下,后端编程最最基本的技术是这些

 

1.浏览器和服务器是怎么打交道的? 

重点就是HTTP协议。

 

2. 理解url 和 代码之间的关联, 例如 www.xxx.com?action=login  这样的url 是怎么和后端的业务代码关联起来的? 

 

这样的规则是在哪里定义的?用代码、注解还是配置文件?

 

后端的业务代码是怎么组织的?相信现在不会有人把业务逻辑都写到Servlet当中了,  所以需要很多MVC 框架像Struts , SpringMVC 来组织代码,让系统清晰易懂。

 

3.数据的验证、转换和绑定

 

如何保证浏览器发过来的数据是符合要求的?例如不能为空、不超过8个字符、两个密码必须相等....  , 出错了得给出错误提示。

 

浏览器发过来的数据都是形如username=liuxin&password=123456这样简单的文本, 但是后台程序却有着丰富的数据类型,什么String, Date ,Integer等等。所以需要把文本变成指定语言的类型,如何做转换?

 

类型转换以后, 后端的业务代码怎么才能有效的使用呢?

 

最简单的就是弄一个key : value 这个样的Map 出来, 业务代码直接用map.get(key) 即可,但是这样做缺乏“契约”,非常难以理解。

 

高级一点的可以把页面发来的数据直接绑定到对象的属性上, 并且支持数组,嵌套等复杂的结构。

 

例如user.name=liuxin&user.password=123456  可以绑定到一个叫User的对象, 其中有两个属性userName和password。 

 

4. 数据库访问

 

这一块是比较麻烦的, 毕竟面向对象(OO)世界和关系(Relational)数据库之间存在着天然的鸿沟。 

 

对于简单的应用, 直接写点JDBC就够用了,只需要掌握Connection, Statement , Resultset这三个基础。 

 

复杂点的需要用O/R Mapping 框架来搞定,例如 Hibernate, MyBatis  ,还有RoR的ActiveRecord。

 

这其中比较棘手的就是表之间的关联, 就是所谓的一对多, 一对一, 多对多这样的关系, 如何在面向对象的世界里描述。

 

扩展开去,还需要处理连接池, 事务,锁 等各种烦人问题。

 

5. 业务代码的执行

把业务代码放到哪里?代码该怎么组织?用事务脚本还是领域模型?贫血还是充血?

 

6.如何把对象变成json和其他格式,让前端使用。

 

原来的后端会用模板(JSP,Veloctiy ,FreeMaker等)生成页面,现在基本上是通过API提供数据了,需要把Java/Python对象变成JSON等格式来传输到前端。

 

搞定了前面这几点,就搞定了一个基本的网站后端了。

 

如果你仅仅是想了解下后端编程是什么样子,可以直接去学学框架,Java可以直接学Springboot,MyBatis, Python可以学Django,  Flask,这些框架的抽象程度和封装程度都非常高,把上面所说的技术点都给屏蔽了,只要会用,就能开发后端程序。

 

如果你想深入学习后端编程,强烈建议:不要一上来就学框架。

 

要先用这些语言提供的最基本的能力,把这些技术点自己做一下,然后进入框架的世界,这样理解会非常深刻。 

 

例如Java, 它提供了Web开发最最基本的功能:Servlet 和JDBC,Python也是类似,有WSGI, PyMySQL可以直接使用,用他们就可以做URL和代码的映射,数据的转换和绑定,数据库的访问。 

 

从实践上来讲,可以用项目驱动的方法,做个博客之类的小项目,和你的前端编程结合起来。

 

接下来就是高并发,海量数据相关的东西了:

用ngnix做负载均衡和反向代理,用redis做缓存,用es做搜索,用mq来解耦,削峰填谷。每一点都够你挖掘很久。 

 

上面这些软件都支持分布式下的高可用性,单点不够了就搞分布式,拆分数据库,拆分应用,搞微服务,限流/降级,部署的时候用docker,用k8s管理。

 

在分布式环境下很容易出现各种问题:数据一致性,同步操作,事务。这又会引发分布式锁,又需要通过分布式锁,BASE, TCC等技术来解决。

 

写了这么多,我想说的是:后端广阔天地,大有可为 !就看你想前进到哪一步了 !

 

 

这篇文章来自于我的知识星球“码农翻身”的一个问答, 类似的精华文章在星球中还有很多,你看到的只是冰山一角。 

 

我是刘欣, 拥有15年以上的软件行业从业经验,前IBM系统架构师,擅长企业应用架构和设计,领导过多个企业级应用架构设计和开发工作。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不要一上来就学框架 的相关文章

  • 【技术经验分享】计算机毕业设计Python+Spark视频推荐系统 短视频推荐系统 视频流量预测系统 短视频爬虫 视频数据分析 视频可视化 视频大数据 大数据毕业设计 大数据毕设

    开发技术 前端 vue js websocket element ui echarts 后端 springboot mybatis plus 数据库 mysql neo4j图数据库 知识图谱 数据分析 hadoop spark实时计算 算法
  • TscanCode代码扫描工具

    TscanCode介绍 TscanCode 是腾讯研发的静态代码扫描工具 最早的版本是基于 cppcheck 二次开发 之后又重新自研 不仅支持 C 还支持 C Lua 语言 在发掘 C 空指针 越界 未初始化 C 空引用 Lua变量未初始
  • 活动报名|如何使用70万预算从头训练千亿语言大模型

    王业全 北京智源人工智能研究院认知模型团队负责人 清华大学博士 中国中文信息学会情感计算专委会委员 2022年被评为AI 2000全球最具影响力人工智能学者 自然语言处理领域 主要从事语言大模型 自然语言处理方面的研究工作 代表成果有 FL
  • shell脚本读取csv数据迁移文件

    前言 仅记录学习笔记 如有错误欢迎指正 最近 这段时间一直在忙数据迁移的问题 现在碰见的问题是需要将目标服务器上的文件导入到本地库 思路 我们需要的数据不多 但是服务器上特别多 所以通过查询目标文件的目录位置和文件名称 导出为csv文件 之
  • Vue + ElementUI 实现批量删除功能

    第一步 在el table 组件绑定 selection change事件 第二步 在调用父组件的子组件中添加当表格项发生变化时会触发事件函数 selectionChange val 在method 函数中添加如下代码 selectionC
  • 从零基础开始开发自己的第一个微信小程序

    文章目录 内容介绍 小程序开发步骤 注册微信小程序账号 下载开发工具搭建开发环境 创建工程编写代码 手机上查看效果 工程里的文件作用介绍 总结 内容介绍 通过本篇blog 你可以熟悉从零开始 搭建小程序开发环境 并运行起自己的第一个小程序
  • QT中slot,signal,emit讲解

    Qt中的类库有接近一半是从基类QObject上继承下来 信号与反应槽 signals slot 机制就是用来在QObject类或其子类间通讯的方法 作为一种通用的处理机制 信号与反应槽非常灵活 可以携带任意数量的参数 参数的类型也由用户自定
  • 条码编码-Code39

    近来在研究条码的实现 遇到一些坑 现在把自己遇到的一些情况分享一下 世界上约有225种以上的条形码 一般较流行的有 39码 EAN码 UPC 码 128码 以及专门用於书刊管理的ISBN ISSN等 我们先从Code39码开始 Code39
  • 电子设计竞赛之备战

    一 学习框架 1 单片机编程 C语言 用来采集各种传感器的数据 控制各种电机 多写程序多看书 单片机学习的四个层次 1 完成单片机开发板的学习 理解单片机的工作 能看懂单片机程序 2 能够照着芯片手册 datasheet 试着编写各类芯片的
  • Tomcat启动Alias name [null] does not identify a key entry报错分析,涉及从公钥(CER)+私钥(KEY)转换为jks证书的方法

    先说原因是什么 之前百度 谷歌 CSDN上也搜过 搜到最多的答案是server xml中缺少指定keyAlias xxx 但是试了以后会发现还是报这个错 只是报错由Alias name null does not identify a ke
  • 【app测试】adb常用指令及华为卸载预置软件

    adb基础指令 1 adb devices 显示当前运行的全部Android设备 2 adb s 设备编号 对某一设备执行命令 3 adb install APK路径 安装应用程序 r表示replace覆盖安装 连接了多台设备时 需要指定设
  • ubuntu 12.04下双网卡绑定实现负载和冗余

    有一个需求是ubuntu下双网卡绑定 上连交换机已配置好 现在需要配置服务器 以下是配置过程 apt get install ifenslave 2 6 modprobe bonding 自动加载 编辑以下文件 vi etc mod 添加如
  • 「2020年大学生电子设计竞赛分享」电源题,省一等奖!

    点击上方 大鱼机器人 选择 置顶 星标公众号 福利干货 第一时间送达 01 到底参不参赛 嗡嗡嗡 随着手机的一声振动 锁屏弹出了消息提醒 没看全文 依稀瞄到2020 TI杯 几个字眼我便知道自己将面临一个艰难的抉择 庚子年春 突如其来的新型
  • 芜湖,前端这波起飞!

    前天加完班 回家路上翻了下粉丝群 发现群里最近在疯传一份叫 前端offer收割机养成指南 的资料 本来感觉这个title看起来有点离谱 结果没想到仔细一看 这份资料竟然真的有点东西 内容收纳的很全 而且融合了很多今年的新玩意 据我所知有人靠
  • BSD、Apache、MIT、GPL、LGPL几种常见的开源协议

    转载地址 https www cnblogs com Vito2008 p 4806677 html 1 BSD开源协议 original BSD license FreeBSD license Original BSD license B
  • u盘安装ubuntu问题:卡在引导界面不动

    问题 一直卡在如图界面不动 分析 既然一直提示syslinux 那我们就看看他是什么东西吧 原因 syslinux分区引导记录问题 解决方案1 安装bootice软件 将制作好的启动盘插入电脑 用bootice更改syslinux引导记录

随机推荐

  • 8.10:如何在Python中判断文件类型?

    在计算机科学领域中 文件类型判断是一个非常基础和重要的问题 不同类型的文件需要采取不同的处理方式 因此在处理文件时 我们需要准确地判断文件类型 Python作为一门流行的编程语言 提供了许多方法来判断文件类型 在本文中 我们将介绍几种常见的
  • @vitejsplugin-vue requires vue (>=3.2.13) or @vuecompiler-sfc to be present in the dependency tree

    运行项目的时候 首先会提示要安装 vue compiler sfc 但是安装后运行项目成功但是页面是空白并且报错 VUE HMR RUNTIME is not defined 摸索了半天 查看到package json依赖文件 没有vue
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植

    承接上篇 我们初步了解了mbedtls的文件路径以及文件作用以后就是想着如何将mbedtls移植到各种平台 博主这里只有两种移植方法 第一是将代码移植到VS中 第二个是将代码移植到博主跑动的比较多的小众SOC ESP8266 移植到ESP8
  • 【华为OD机试】五子棋迷(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 张兵和王武是五子棋迷 工作之余经常切磋棋艺 这不 这会儿又下起来了 走了一会儿 轮张兵了 对
  • 技术积累 — Keil 查看内存占用/优化代码

    原文链接 转自Sugar的专栏 转载文章 若有不妥 通知后我会立即删除 一 查看内存占用 1 使用Keil编辑代码时 编译成功后 双击红色框框位置 就会弹出 map文件 2 那么map文件中能够读出哪些信息呢 Program Size Co
  • caffe中lstm的实现以及lstmlayer的理解

    本文地址 http blog csdn net mounty fsc article details 53114698 本文内容 本文描述了Caffe中实现LSTM网络的思路以及LSTM网络层的接口使用方法 本文描述了论文 Long ter
  • 自学软件测试需要多久?怎么自学软件测试?自学软件测试可以找到工作吗? 绝对干货!

    一 前言 最近经常有很多朋友问我想要入行软件测试 但是都不知道该怎么学 这里详细的给大家说下 对于0基础的朋友 应该怎么去学习软件测试 学习软件测试有2条路可以选 1 找个靠谱的培训机构去培训啦 你就什么都不用想了 跟着培训结构认真的学习就
  • Hive Sql执行出错 Dag submit failed due to java.io.IOException: All datanodes DatanodeInfoWithStorage

    原因 根本原因是集群中的一个或多个信息块在所有节点中都已损坏 因此映射无法获取数据 命令 hdfs fsck list corruptfileblocks 可用于识别集群中损坏的块 当数据节点中打开的文件数量较少时 也会出现此问题 解决方案
  • 微信小程序传递数组给服务器,微信小程序页面间的数组如何传递

    A页面 数组 对象都需要stringify var listData JSON stringify that data listData var taskArray JSON stringify that data taskArray wx
  • visual studio2019(C#/.NET)安装教程

    前言 好久没有跟新版本了 博主还用的2017 看到最新的2019功能还是很强大的 版本可能越高越好 所以博主写了一个详细的博客 希望可以帮助到大家 一 visual studio 2019 下载 1 下载地址 visual studio官方
  • 爬取药品监督情况数据

    首先打开国家药品监督局的相应网址 国家药品监督局的相应网址 找到某一家企业点击相应的许可证编号那一个栏目 查看相应的许可证情况 上面对应的内容为我们需要爬取的对应的数据 不确定对上述的网页进行访问的时候 我们能够得到对应的企业名称 许可证编
  • apollo5.5感知模块改进

    apollo5 5感知模块改进 最近一直在研究百度的apollo源码感知部分 下面整理一下近期的一些知识点 apollo5 5在感知部分做了些升级 以适应最新的apollo自动驾驶套件 主要的特征及改进 1 全新的数据Pipline服务以及
  • 射发射整改案例

    文章摘录 http www elecfans com emc emi 1244893 html 试验现象 系统在300K 200MHz辐射发射超标 2 诊断过程 1 使用近场探头置于模块显示屏时 1MHz以下频段超标 则低频电磁干扰来源于显
  • pandas 行、列的增删改查

    读取tips xlsx及预览内容 行的增删改查 增加行 直接赋值 可以只写一个值 也可以写列表 df loc 40 1 df loc 40 1 2 3 4 5 6 7 append方法 append 增加行的方法 设置ignore inde
  • 数据结构--图的遍历(广度优先遍历、深度优先遍历)

    目录 图的遍历 广度优先遍历 BFS 广度优先遍历的代码实现 编辑 广度优先遍历序列 编辑 遍历序列的可变性 编辑 BFS算法完整版 编辑 广度优先遍历复杂度分析 广度优先生成树 广度优先生成森林 回顾广度优先遍历 深度优先遍历 DFS 回
  • Opencv项目实战:00 专栏内容介绍

    目录 Opencv项目实战专栏介绍 01 文字检测OCR 02 角度探测器 03 扫描二维码 条形码 04 全景图片拼接 05 物体检测 06 文档扫描仪 07 人脸识别和考勤系统 08 Yolov3更高精度的检测物体 09 物体尺寸测量
  • react-dnd 拖拽能力教程

    前言 近几年来 低代码 零代码的热度在国内逐年递增 复杂度同力一样不会消失 也不会凭空产生 它总是从一个物体转移到另一个物体或一种形式转为另一种形式 用户在使用低零代码构建应用程序时 这些能力只是被平台研发人员提前编写完了 作为低零代码的基
  • Spark 任务调度机制

    1 Spark任务提交流程 Spark YARN Cluster模式下的任务提交流程 如下图所示 图YARN Cluster任务提交流程 下面的时序图清晰地说明了一个Spark应用程序从提交到运行的完整流程 图Spark任务提交时序图 提交
  • 不要一上来就学框架

    问 有两年多前端经验 但感觉自己对后端知之甚少 没有安全感 但是后端语言又多 不知道学哪一门性价比好一些 求教 语言不是重点 尤其是你已经会一门语言的情况下 后端编程最最基本的技术是这些 1 浏览器和服务器是怎么打交道的 重点就是HTTP协