立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 910|回复: 5

[分享] 后端开发除了增删改查还有什么?

[复制链接]
发表于 2024-11-4 20:14 | 显示全部楼层 |阅读模式

登陆有奖并可浏览互动!

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录 手机动态码快速登录

×
当码农也有两年了,心中有了不少疑问

1. 后端开发除了增删改查的简单逻辑还有什么?
在日常开发过程中,用得最多的就是建立在增删改查的简单业务逻辑之上
这里的查询只是简单的查询,不包括搜索引擎和查询算法等复杂的查询
除此之外还有哪些业务逻辑呢?比如缓存,推送,异步任务等等

2. 后端应用除了管理系统还可以怎么分?

日常开发的应用都是各类基于增删改查(简单查询)的管理系统
但是电商,社交,游戏类应用的重点都不是管理系统
大数据开发、人工智能、物联网等不在此讨论之列
除此之外还有哪些应用类型?

3. 一些常见的应用类型可以在哪里找到一些实现细节和技术难点?

一些常见的应用比如贴吧、论坛、博客、社交、游戏,wiki等等
一些很常见的场景比如图文混排,大文件传输,feeds流设计,推荐系统,图(关系)计算
虽然很普遍,但很难到网上找到一些实现的细节
哪那些会的人都是从哪里学的呢?

4. 后端和算法需要严格分开吗?
如果应用的的使用人数有一定的规模,比如电商,社交,游戏,生活
即使是后端人员也得具备相当的算法知识来提高性能,比如排序,图计算等等
但是后端和算法都有独立的岗位
所以后端工程师需要了解的算法和算法工程师有哪些不同?

5. 从理开发论知识到实践需要哪些条件?
本人已经工作了两年(Android一年,后端一年)了,期间持续关注一些底层知识架构设计上的知识
底层知识比如 tcp/ip,https加密过程,垃圾回收机制等等(但只是了解一些理论上的知识)
架构设计比如 缓存机制,推送系统,服务治理等等(但只是了解一些理论上的知识)
因为做的产品都是一些比较简单的增删改查的逻辑,所以没有机会和时间去深入
所以连复杂的sql查询也不会,更别提复杂业务的表设计了
每次面试的时候对于需要实践经验的问题,比如如何解决jar包冲突,如何设计一个feeds流的表结构等等也答不上来
正如大数据技术的发展得益于搜索和电商,图像技术的发展得益于游戏等等
然而如果没有实践的机会该怎样从理论知识深入到实践中去的?

6. 学习中广度好还是深度好
我一直在创业公司工作,学的知识都比较广泛,但不够深入
但是基本大一点的公司需要的人才都是在某方面有深入研究的人
那么该如何体现和展现知识广泛的优点呢?

原文地址:https://www.zhihu.com/question/264370798
楼主热帖
回复

使用道具 举报

发表于 2024-11-4 20:15 | 显示全部楼层
我们先从一个简单的增删改查开始,把业务慢慢变得复杂,看看你要怎么做。

  • 需求上需要对部分字段加密,读取时解密。又希望这个逻辑能尽量收敛,避免业务层代码遍地都是加解密,同时又能收敛和管控加密的算法,强度,秘钥等。要怎么做?进一步的:

    • 如果用来加密的服务不是自己开发的,行规要求必须引入第三方服务,每次存储都得带一次rpc怎么办?
    • 如果用来加解密的rpc临时失败了,要降级吗?还是直接报错?
    • 有部分获取数据的请求根本就不需要那条被加密的字段,只需要其余几列。能把加解密优化掉吗?

  • 用mysql太慢了,希望改成某种序列化KV,过渡期不能停服,要双写同时又要能保证数据一致要如何做?进一步的

    • 改成了KV,但KV可能挂,能临时用mysql降级先存着,KV恢复时再写回来。能保证数据不丢吗?
    • 以上问题如果发生了跨机房,如何设计数据的访问模式呢?

  • 插入时可以保证幂等吗?如果有多次并发的请求从端上发过来(端上可能会重试,可能会bug抽疯),后端能保证只写入一条数据吗?进一步的

    • 如果这个数据需要支持软删,软删了后还得可以恢复(比如某种回收站功能),能保证同时只有一条”未删除“的数据吗?insert和update set deleted=0能很好的配合不出乱子吗?

  • 两个机房,做主从复制。无论如何主从复制必然有延迟。如果主库机房写入一条订单,还没复制给从库,主库机房挂了怎么办?从库无法得知主库有这么一条记录,切主可能会导致数据丢失(以及接下来的用户的投诉和巨额赔偿)还是说,这个订单必须得到了从库才算”成功”,怎么实现呢?
  • 一个共享文档,十几个人同时改一行文字,这个改的文字最终会变成什么样呢?改动生效的规则和时序怎么算呢?
  • 一个IM,一堆人在同一个群的不同的端上发消息,谁先谁后呢?

    • 可以用序列号来搞,但这个序列号怎么生成呢?
    • 单机可以抗下吗?序列号生成器挂掉怎么办?

  • 做一个鉴权系统,需要存取一堆鉴权规则。鉴权时读取即可实现鉴权,比如用户A能不能访问一个文档X。问题是A可能在一个组织架构里,有上级部门;上级的部门又有上级部门。任意一个部门都可以设置访问文档的规则。 如果多级部门各自设了不同的规则(能访问/不能访问),最终落到A上哪个规则生效呢?具体的逻辑怎么写?更进一步的

    • 这个规则里还带有条件咋办,比如工作日10:00~17:00可访问;其余时间不可访问
    • 如果规则有特殊处理咋办,比如不可访问时用户可以向上级发一个申请,审批通过后就可以访问了
    • 用户又要求这个访问规则必须分多个版本。新版本审批后才能替代旧规则。怎么做?

  • 大量对一个微博帖子发了很多赞,这个赞怎么存和保证准确呢?每次 select count(id) ? 进一步的

    • 假如我们可以允许一定程度的不准(比如超过9999赞,不太准也可以)但要求不能偏的离谱,必须按某种时间间隔去“矫正”。这个矫正怎么触发呢?
    • 如果矫正需要某种分布式定时器,这个定时器怎么实现呢?单机可以抗下吗?
    • 如果机器挂了,定时规则没存盘就丢了,能不丢吗?

……
把眼界放开一点,你会发现有无数的问题可以解决。这些问题搞来搞去其实也能回到增删改查上,但怎么组织这些逻辑,给出可行靠谱的方案才是更关键的问题。
然后你是不是发现,总有几个人把这些事情都想清楚了,把一个巨复杂的问题拆解了,然后告诉你去做其中一部分增删改查?
回复 支持 反对

使用道具 举报

发表于 2024-11-4 20:15 | 显示全部楼层
就以Java后端开发为例,说说不同级别程序员干的事情。
1 初级开发,大概是有3年Java开发经验。
22年底,上海,这批程序员如果学历是本科,薪资一般是8k到2w,当然如果能进好公司或互联网大厂,薪资能更高。大专学历的初级开发,同等条件下,薪资一般会打个8折9折,有些薪资甚至还差不多。
干的活一般是能做各种增删改查业务,遇到简单问题,比如空指针之类的,能通过看日志解决,也能适当干些和人沟通的事情,比如和其它组沟通API。
初级开发阶段,熟手和新手的差别不仅体现在业务上,更体现在技术层面。或者说,如果初级开发只是熟悉业务,后继发展会受限。初级开发阶段,熟手更应该从数据库优化、解决各种数据库问题以及分布式组件或微服务组件使用层面来提升自己。
这里再说个可能会引发争议的观点,比如某程序员,学历可能是大专甚至更低,在一家小公司里做java后端,也干了5,6年,但如果技术层面只是做增删改查,可能这位程序员凭借对业务和产品的了解,在小组里甚至是公司里起到比较重要的作用,但从技术角度来说依然是初级开发,因为如果出去面试,很难展示比增删改查更值钱的技能。所以哪怕是初级开发,都应该不仅仅做增删改查。
2 高级开发,3年以上其实就已经具备成为高级开发的经验年限。
还是按上海,22年底的薪资,高级开发起步的薪资可能就已经接近2w了,如果高级开发具有5,6年java经验,要个3w也不成问题,但年薪40w一般是高级开发的上限了。
相比初级开发,高级开发在日常工作中一般高级在如下两个方面,第一是能带一些人做业务,即成为项目开发小组长,第二是能解决些比较有难度的问题。
高级开发在公司里,可能未必能做到项目经理的级别,但在带人开发的时候,需要全面掌握项目测试部署的技能,而一些初级开发解决不了的问题,比如分布式组件方面的问题,高级开发能解决。
这里再说个可能会引发争议的观点,在一些小公司,尤其是人数在50人以内的楼层公司甚至是房间公司,其中技术负责人,当然有些公司可能还给挂上个技术总监的头衔,论能力的话,其实也就是个高级开发的水准。而且有些小公司的这些技术负责人,估计薪资也就是2w出头些。
或者这样说吧,对不少大专甚至更低学历的程序员来说,高级开发已经已经是到头了,原因是因为学历的关系,很难进好公司,从而拿不到资深技术的项目实践机会。本科以下学历的java程序员,一般做得比较好的,是在一些小公司里做技术主管,但更多的低学历程序员,比如职校或中专学历的程序员,真可能到30岁,依然在小公司做增删改查。
所以如果java后端开发,达到高级开发的水准的话,平时工作,增删改查已经是占很小的比例,更多地要负责项目的开发维护运行,以及要解决些相对值钱的问题。
顺带再说个高级开发和初级开发的差别。
初级开发的话,平时工作一般是仅限于java和数据库,比如spring boot+oracle数据库,而高级开发就要涉及些测试工具,部署工具,同时就已经要在linux上干些部署项目和看日志排查问题的活了。
3 再往上就是架构,一般有5,6年开发经验的后端就能去挑战架构的职位了。
上海22年底底行情,架构的薪资一般能达到3w,一般公司的架构师,哪怕做到技术负责人,封顶一般是50w年薪,大公司的话,架构一般能给到七八十万,但年薪过100w的架构真不多。
顺带说下,要成为架构,不是说公司给个头衔就成,一般小公司的技术总监,有些放大厂也就是个高级开发的水平,要成为架构,得薪资上达到架构的水平,一般至少得40w吧。
架构的活,一般是根据业务的特征,比如并发量可用性等特性,或者看要不要接消息中间件,然后设计出整个产品,或一些模块的架构,同时还要搭建环境,比如在linux上安装redis或kafka。此外,架构还有个比较重要的活,是要确保系统运行的平稳性,比如要搭建监控,设计出系统上线的方案,以及出现故障的修复方案。当然如果出现组件或架构方面的问题,架构也要修改。
就举个典型的例子来说高级开发和架构的差别,比如系统遇到个dubbo远程调用的问题,从日志上看,报错不是在业务代码层面,而是dubbo组件内部的class类里,这时高级开发可能就不大能解决,但架构师能解决,而且是在架构的职责范围内。
从实际工作中,其实高级开发和架构的一些职责是重叠的,比如都需要搭建系统的架构,都需要排查和解决架构层面的问题,但从技术角度来看,架构师需要更资深的技能。
通过上文,大家能看出,在java后端方面,如果只会增删改查,估计顶多只能做到初级开发,不过事实上真有不少Java程序员在一些小公司呆久了,虽然工作年限很长,但论能力只会增删改查,这也是不少程序员在30岁以后就失去竞争力的原因,这也是不少有一定工作年限的程序员出现薪资倒挂的原因。
回复 支持 反对

使用道具 举报

发表于 2024-11-4 20:15 | 显示全部楼层
我且不说“删”和“改”,因为这俩太难了,我连入门都说不上。就简单说说“增”和“查”吧。
首先是增到哪,是数据库,stream还是直接分布式文件存储。同步的还是异步的,可不可以并行,key要不要连续,要不要分片,怎么replica,多数据中心怎么保证数据一致,要不要建索引,要不要roll up等等等等。其实现在这些东西也都是开源现成的,稍微有点分布式基础的人就能搭建出很复杂的系统,但出了问题怎么办呢?每种技术或者说解决方案都有它的局限性,再好的技术也会顾此失彼。
查也不简单啊,是key-value查询还是sql查询,要不要使用缓存,使用何种方式的缓存,会不会有hot key的问题,会不会有长尾延时,如何避免重试风暴。sql查询水就更深了,你既要了解数据的分布情况,索引情况,又要了解sql引擎的实现,要不一个慢sql就能拖垮整个系统。analytical查询可能对延时没那么敏感了,可这个数据量又上去了,两个大数据集那么一join,几小时查不出来,查出来怎么能保证是对的?哎,算了,我继续修bug去了,心好累。
有些朋友可能会觉得这些自己都不用关心,只要call api就好,可api你也总得设计个数据类型吧,就借用当年阿里那本java开发手册中的例子,你把枚举型放在api的参数和返回值会有什么问题,枚举在参数中会有什么问题,放在返回值又有什么问题,为啥放在返回值中的话问题似乎更严重呢?
回复 支持 反对

使用道具 举报

发表于 2024-11-4 20:16 | 显示全部楼层
一开始是增删改查。。。。
日子久了你就发现你的代码越来越复杂。。。。就会涉及到业务拆分。架构设计。
常用的静态资源比如图片,js文件占用带宽怎么办。。。。静态资源服务器。
文件的上传下载怎么提高效率。。。。。。。。。FastDFS。
消息推送的实时性怎么保证。。。。。。建立长连接吧netty,websockt。
用户开始越来越多了,一台服务器不够要多台。。。就会涉及到负载均衡。。。。
多台服务器下他们中间会有通信问题。。。。这就涉及到RPC远程调用。。。。。
特别是支付和认证这块。。。会产生对方接口调用过慢,网络等影响。就需要异步。。。
同时使用人数过多,不能让服务器爆炸吧。。。。。很多地方就要用到消息队列。。。
数据库数据量过大影响效率怎么办。。。。建立索引,分表分库。
常用信息访问过多占用资源怎么办。。。。。。NOSQL缓存吧。。。
IM下的点对点传输,多用户下的关系指数增长。。。。。。


以上是常见的场景应用。。。。背后涉及到的东西各有深度。。。。
设计模式,CAP,架构模式,SOA,服务治理,WebService,通讯协议,文件编码类型。。。。。
书到用时方恨少,你觉得没啥是因为你没用到。。。
-----------------------------分割线-----------------------------

公司最近也出了点问题,如果还有机会再说哈
回复 支持 反对

使用道具 举报

发表于 2024-11-4 20:17 | 显示全部楼层
这个问题挺有代表性的,很多人就是缺乏这部分视野,或者说缺乏开拓视野的欲望,然后默默做了大半辈子技术民工,我真是见过很多混吃等死的人了,所以能去想一下这样的问题也已经是不容易的了。
虽然题目里提了很多,我觉得最核心的是需要知道一个事实:
使用某种技术的目的,是为了解决问题、满足需求
需要推送消息,就会去研究websocket。需要定时执行任务,就回去研究scheduler。需要控制路由,就去研究nginx什么的。
业务数据量日渐增长,原来好好的查询越来越慢了,就去上缓存,优化sql查询。
业务模块越来越多了,就要从单应用拆分成微服务,让业务解耦。
……
可以看出来所有的技术应用都是为了解决问题、需求而使用的,而小公司的业务规模一眼就看到头,没有需求自然就会“差不多就行了”,自然只能做增删改查的重复劳动。为什么新锐的技术多半出自大公司和创业公司,因为他们有充分的既有业务/发掘新需求的动力,为了解决这其中产生的问题,就会用到更多的技术。对于平凡公司的平凡工人,我觉得提升自我的一个方法就是自己创造需求,只有喜欢钻研折腾的人,才能深挖技术。

  • 知识从哪来?
虽然很普遍,但很难到网上找到一些实现的细节
哪那些会的人都是从哪里学的呢?
这个答案可以分两个方面说,一方面,你可以找到,很多大型的系统、复杂的技术框架都有开源的版本,你完全可以在网络上找到源码深入学习。另一方面,事实上就算把这些送到你面前了,作为一个只会增删改查的民工也是无从下手根本看不进去的。
真的想要学,得要学会分解问题,就像现在的系统普遍都是模块化的设计,我们学习一个系统也要分模块的去逐个击破。
知乎技术专栏随手一搜,比如知乎自己就一直在分享知乎的各种系统的架构以及其中的技术变迁。
不要指望有人给你一个微博系统.zip,知乎架构.pdf之类的东西,不存在的,学会搜索,学会分析,这些产品也跟你我写的垃圾程序一样,都是用的这些语言,这些框架,这些技术去实现的。

  • 需求从哪来?
然而如果没有实践的机会该怎样从理论知识深入到实践中去的?
运气好,公司的业务需求需要你去弄,你就能从中获得锻炼成长,不过提出这样的问题也可以看出运气是不好的,在一个没什么需求的公司重复着增删改查逐渐变成一个活死人。这时候就只有一个办法能摆脱这个死循环:业余自己去找东西做!实践出真知。
作为一个后端最基本的练习:业余时间自己搭一个网站。
不是说一定要有网址域名什么的,本地就可以搭。重点是亲自走一遍整个流程,从搭建数据库,到配置项目工程,选择合适的技术框架或者自己手写,最后才到增删改查。想想也是好笑,真正走过一遍这样的流程,也就不会提出这个问题了……
评论对这个例子各种有意见……这段话的重点是,你想着去做点什么才能锻炼到自己,没有需求就创造需求,自己搭个网站只是其中一种方法,世界这么大能做的东西这么多,又不是只能这样,你也可以自己去写个游戏,自己去写爬虫,关键是你要有兴趣,去做了,才会遇到问题,去查了,才会学习成长。

  • 例子
再举一个例子应该更直观一些,每天都在做增删改查,做多了就会发现其中总有一些重复的规律,我为什么要每次都去手动重复这些机械的劳动?于是我就有了一个需求:改良现有的代码,把重复的部分提取出来,自动生成,为了实现这个目的,就需要用到一些新的技术,这就是一个学习的机会。
看到这里应该会想问,我除了增删改查什么都不会,心有余而力不足啊……这就需要一个日常的积累,老一辈的人重复了无数次的一句话:多读书。现在获取信息的途径丰富了,未必读书,也可以看博客,看技术新闻,看开源代码,甚至看知乎……
在这个过程中,你会看到很多新鲜的东西,脑海里留下一个大概的印象,比如java民工要画页面,在团队比较小,没有明确的前后端分离的时候,一般会用模板,比如freemarker,thymeleaf什么的,然后在学习freemarker的时候就会发现这个模板不仅能用于html,事实上可以用来生成任何文件………………嗯?那我的java代码也可以用freemarker来生成咯?!
需求和技术的探索就是这么碰上的,经过一番摸索实践,就能写出一个通过jdbc或者mybatis之类的orm工具读取数据库表的字段,然后用freemarker填写到模板中自动生成对应的entity类,顺便把dao、service甚至controller的基本方法也都一起生成了,从此同样是写增删改查,一键生成的代码就完成了一半的工作量,只有具体的业务逻辑需要自己亲自动手。
更进一步,这些东西可能不仅自己会想要用,其他人也可能想用,于是把上面的代码从业务中抽离出来,形成一个单独的模块,就可以开源到网络上与他人分享。
我们这些民工之所以能轻松增删改查,其实也就是因为有这样厉害的人在贡献着这些技术。而想要成为厉害的人也必然需要走上这条路:对未知充满好奇,不满足于现状,勤于动手实践,从中找到属于自己的乐趣。
共勉。
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表