3

Java开发除了增删改查还能做什么?很迷茫?

 2 years ago
source link: https://www.zhihu.com/question/510619641
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

想要摆脱重复的增删改查,后端开发应该提升哪些能力呢?

我目前也是在阿里巴巴做Java开发,来分享一下我自己的一点工作经验。

首先我们来看大厂的常见研发流程是什么,也就是我们平常都会做些什么事情?

(1)项目研发

需求提出->需求PRD评审->交互设计评审->概要设计->详细设计->测试用例评审->项目开发->联调->代码CodeReview->提测->验收->发布上线->需求结束

在这整个过程中,技术同学基本每一个步骤都要参与,我们的工作绝不仅仅是写几行CRUD的代码那么简单。

v2-a2ecc62d9b47b720d5f334aae239fa46_720w.jpg?source=1940ef5c

需求评审阶段:我们需要和产品、业务方深入沟通,去理解需求逻辑,学会评估需求背后的业务价值和优先级,当面对资源不足需求井喷的情况下如何做取舍。

技术方案设计阶段:要分析上下游的关系,以及和兄弟团队之间的边界,技术方案要考虑扩展性、通用性,以及技术选型、实现成本。要写出bug少的代码,我们需要考虑全面、考虑各种边界条件包括功能性和非功能性。

代码CodeReview:同样一件事情,不同人来做可能实现都不同。那么我们在代码开发的时候,要尽可能实现简洁、逻辑清晰、易于扩展。而且面对流量洪峰,我们还需要考虑并发处理、异常处理、数据存储设计。

项目发布上线:我们需要考虑到灰度、不影响老功能、回滚、监控等事项,绝不仅仅是一把梭发布上线就完事了。

(2)性能优化&线上问题排查

我们的线上应用要提供给用户高可用的服务,必须保证可用性。这就需要我们在代码实现的时候考虑性能优化、并发处理以及各种降级开关等应急措施。

那么,如何提高上述能力呢?

1、分布式技术

推荐一本至今觉得最棒的讲分布式的书籍《数据密集型应用设计》

豆瓣评分中文版9.7分,影印版9.9分,堪称分布式领域圣经,本人非常后悔没有更早的阅读本书

作者功力深厚,这本书知识面非常广,涵盖了分布式系统设计的方方面面(至于读者说的分布式事务、sharding等那妥妥的是覆盖到了),将深奥的分布式知识深入浅出的讲解,给了大量图示,非常容易懂。

而且书后的附录给出了非常多的参考文献,值得细读。

英文较好的可以直接读影印版,难度不大。

内容目录:

之前在其他回答里面也推荐多这本书,得到了非常多同胞的一致认同,获得了6200+的赞和收藏,原回答在下面可以看看:

2、数据库

数据库推荐书籍:《高性能Mysql》

内容涵盖了mysql架构以及发展历史,性能剖析、以及性能优化、复制等高可用。从事开发的话建议精读前7章,后面几章偏运维。

如果是从事网络相关开发,如rpc框架、mq消息中间件,那么还需要掌握网络相关基础知识,以及业界有名的高性能网络组件Netty。

3、JVM

也推荐2本书:《深入理解java虚拟机》和《并发编程实践》

《深入理解java虚拟机》:本书详细讲解了类加载、java内存原理、垃圾回收机制等知识。只有掌握了JVM,才能在实际生产环境遇到线上问题如GC频率过高、内存溢出等应对自如、还有应用系统JVM参数合理配置。

(3)关注前沿信息,开阔视野

互联网变化非常快,新技术层出不穷。如果能提前进行技术学习、布局,那么就能够在风口到来的时候拥有先发优势。比如最近火热的云计算、智能硬件。

在没有足够的技术敏感性的时候,多关注前沿信息,开阔视野,了解最新技术解决了什么新问题,是否能够给自己的工作带来帮助。

Part 1:技术社区推荐

1、Github

网站地址:https://github.com/

作为程序员如何不知道这个网站的话,你可能需要回炉重造了。

我个人觉得是目前最牛逼的技术社区,Github上面有很多非常优秀的开源项目,包括阿里、腾讯、字节跳动、美团、Google、Micosoft等国内外大厂都有自己的Github开源库。

建议每个程序员没事可以到上面多逛逛,多看优秀开源项目的代码和文档尽量参与进去,不论是maillist、QQ/钉钉群组等等,可以尝试从编写文档、写测试用例开始入手,逐步切入核心功能。

2、Stack Overflow

网站地址:https://stackoverflow.com/

一个程序员问答网站,跟知乎一样,又跟知乎不一样。上面非常多的热心的大牛。

区别在哪里呢?Stack Overflow 不欢迎任何讨论性的,非Problem-Solving类的问题。什么意思呢?你可以提问1+1等于几,但是不要提问为什么要学c语言?

所以,如果你在开发过程中遇到了什么bug,只要你搜索能力优秀,99%在上面能找到答案。

在这里能够与很多有经验的开发者交流,如果你是有经验的开发者,还可以来这儿帮助别人解决问题,提升个人影响力。

Part 2:开源项目推荐

参与优秀的开源项目可以和业界优秀的程序员大神一起结对编程,开阔思路,掌握优秀的代码编写风格、设计模式和技巧。

在此推荐几个业界有名的优秀的开源项目:

1、Redis:Redis

Redis的性能极高且拥有丰富的数据类型,同时,Redis所有操作都是原子性的,也支持对几个操作合并后原子性的执行。另外,Redis有丰富的扩展特性,它支持publish/subscribe, 通知,key 过期等等特性。 Redis更为优秀的地方在于,它的代码风格极其精简,整个源码只有23000行,很有利于阅读和赏析。

2、RocketMQ:Apache RocketMQ

阿里巴巴开源的消息中间件,久经双11大促流量洪峰考验。

3、Flink:Stateful Computations over Data Streams

Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用JavaScala编写的分布式流数据流引擎。Flink以数据并行管道方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。

Flink提供高吞吐量、低延迟的流数据引擎以及对事件-时间处理和状态管理的支持。Flink应用程序在发生机器故障时具有容错能力,并且支持exactly-once语义。程序可以用Java、Scala、PythonSQL等语言编写,并自动编译和到在集群或云环境中运行的数据流程序。

4、Google guava:Google提供的java库函数,guava cache和guava限流的实现很有参考价值。

5、sharding-jdbc:数据库分库分表、读写分离的一个中间件。

6、RxJava:java平台的Reactive 扩展。

7、Spring:这就不解释了。

最后再推荐几个优秀的前沿信息来源

  • infoq
  • 美团技术博客
  • 公众号-阿里技术
  • 公众号-高可用技术
  • 业界有名的会议:archsummit 架构师大会、flink forward

刚入门的后端做CURD,资深的后端搭框架,老后端设计系统。

希望本回答能对你有所帮助~

下面这些高赞回答你可能也会感兴趣:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK