python

导航

python后台开发一般是做什么?

来源 :中华考试网 2020-09-20

  后台的内容很多。但是相对台来说没有那么炫,也不会与产品有过多的交互。通常包括这样几类:dao1.web开发。做web交互的后台部分2.提供api,webservice或者是restful接口给其它程序。通常是数据处理,数据桥接,推荐,搜索,工具调用,统计,计数,任务管理,资源调度,监控,验证码,报表等等。

  后台开发的基本要求

  语言层面

  例如java, python, php , c/c++ 等,和对应的开发框架。 这个是基本要求,因为你至少要熟悉一门语言和常用的框架,你才有可能接手正式的工作,要不你都干不了活。

  语言和框架,包括对应的运行时环境,是贯穿整个职业生涯的东西。不同阶段对语言和框架的要求是不一样的;不同公司对新入职员工的要求也不一样。大公司对毕业生甚至没有框架的要求,就算你只会一门语言而不会任何框架也可以, 但相应的,对算法,操作系统等方面的要求就会高很多。中小公司就很看重入职新人语言框架方面的实际能力。因为中小公司本身的资源有限,没有那么多的时间来培养新人,他们更想要进来就可以干活的。所以如果你的算法或其他方面很牛B,你可以不太理会这块,想办法去大厂。 但如果你其他方面都不怎么行,基本的语言和框架就是你的敲门砖了。

  语言框架,这个算是最基本要求了,也是贯穿整个职业生涯的要求,越高阶,需要掌握的程度也越高。

  数据库

  对数据库的要求跟语言框架是一样的。 首先你得会,不会的话,就没办法工作。 现在大部分公司的数据库都是mysql。 当然也有使用Mongodb ,Redis 等的。 数据库的增删查改操作是最基本的,是能干活的基础。进阶一点的时候,需要开始理解数据库的存储结构,索引实现,要对性能优化有所了解。 再进阶,数据库的锁,事务,高并发设计等。数据库的要求也是越高阶越难的,到后面甚至出现自研数据库的需求。 这个就是分布式存储的领域了,很复杂,可以讲很久了。对于新人而言,会增删查改应该可以满足初期需求了。后面需要开始对性能,对并发等有要求的时候,就需要对数据库本身的实现机制有更进一步的了解了。这些可以在实际工作中慢慢学习和积累。

  数据库,必备的技能,贯穿整个职业生涯,随着开发的等级越来越高,要求也会越来越高。

  算法数据结构

  算法的重要度,都已经不需要再次阐明了。 几乎所有人,所有公司都是觉得很重要的。 就类似武侠小说里面的内功,拥有深厚的内功,才能将各种招式充分的发挥出来。我这里说说,在实际工程中,算法数据结构的应用情况。

  实际工程中,算法数据结构的实现和应用情况,可能跟大家想象的不太一样。 对于通用的算法,类似快速排序,快速查找,都有现成的库可以使用,一般团队也不会让你直接手写一个快速排序---低效,说不准还会有bug。 而类似哈希,链表,队列,这几类的使用会多很多。 特别是哈希 和 链表,使用频率最高。 不过,实际工程中, 对数据结构实现的要求跟教科书上的不太一样。 对于哈希,你可能懂得用开放地址法或链表的方式来处理冲突,而实际工程中这些远远不够。 实际的生产环境,基本都是多并发的环境, 你还需要保证你设计出的数据结构,是线程安全的,也就是可以多并发处理,而且可能还有一定的性能要求。 这个就要比较教科书难不少了。 再比如, 你可能会被要求去实现一个队列,因为要应对并发,你的队列要设计成多进多出的,所以你要加锁,但因为要高效,所以最终你要设计一个无锁队列。这个也会比教科书的难。但在我的实际工作中,几乎没遇过要我去手写一个平衡二叉树的需求,好像我周围的同事也几乎没遇到。我想除非是做数据库的同学会遇到吧。这些都是实际工作和教科书的区别。

  算法数据结构,总的来说,是最重要的内功之一,但实际工程中的要求可能跟教科书的要求会有些不一样。

  操作系统(类unix, windows , 类unix偏多)

  刚入行的时候, 对操作系统的理解还不需要太深入,只要知晓有操作系统 的存在就行。在后面慢慢进阶的过程中,操作系统对你整个工作的影响会越来越大。会影响你的整体设计,性能,更直接的是,你在实际工作中首次碰到的很多无法解释的“灵异事件”,都可能跟操作系统的机制和策略有直接或间接的关系。 这里举个实际设计中的例子: 我一个同事,早期的时候,做个一个自研的队列组件(类似rabbitmq那种), 设计的极其复杂。我看他的文档看了好久才明白其中的原理。 后面找他讨论, 才发现他很多的设计都是为了追求极致的磁盘写入性能。 他做了写入缓存,做了各种数据对齐,这些又使的他的上层设计变得复杂。 后来跟他一起讨论了linux文件系统的缓存机制,发现直接用write 系统调用,顺序的写入文件就完美解决问题了。而他围绕此处所有的设计都是多余的。类似的情况,我还遇到不少。所以操作系统的知识,特别是对操作系统机制和策略的深入理解,对后台的设计,开发,真的会带来完全不一样的结果。如果一个后台开发对操作系统的理解不能深入到一定程度,我觉得他是没办法在这条路上进阶的。

  操作系统,这个属于进阶需求,需要长远在这个方向发展的话,就要注意这块的积累。

  网络协议: tcp/udp, http, https 等

  一般情况,网络协议, 需要到达清楚理解机制的程度。

  比如tcp 和udp 的区别。tcp 的链接建立和断开的过程. http 和 https 的区别。 实际工作中, 如果你的工作涉及底层网络框架的开发,那对tcp /udp的实现机制就需要有深入的理解了,要不你无法设计出高性能的框架。 其他协议也是类似。

  总得来说,如果不是专门做网络框架或涉及设计类似p2p等私有网络协议的。 相对其他,个人觉得这个在实际工作中的运用相对没有那么多。但是,大家不要混淆了网络协议和 epoll / select 这种服务器开发机制的区别。 类似socket 套接字的使用,epoll/select 的深入理解,还是很重要的。目前很多公司已经不用从socket 套接字和epoll/select 层面来构建服务了,而是直接采用了现成的rpc框架,但对于想长期往后台方向发展的同学,还是建议掌握socket epoll select 。我记得我当初进公司,第一个任务就是不用任何框架,实现一个服务器,要求高性能,支持高并发。基本都是采用socket 套接子 + epoll来实现。做完,基本可以熟悉和知晓在数据传输上需要解决的一些问题。

  网络协议,需要达到清楚理解机制的程度。如果是从事网络框架开发或需要设计私有网络协议, 则会有更高的要求。

分享到

相关资讯