Web后端开发

可选语言挺多,接触最多,会的最多的就是Java了,但其他的可选项也非常多,python、C、C#、C++,Go,甚至还可以是nodejs!
不过也并非所有领域都适用,他们各有强项和特点:

  • python多用于爬虫,并且被深度学习所带飞
  • C、C++、C#更偏向底层,一般是嵌入式比较多,一些客户端也是有的
  • Go,新兴的后端语言,在分布式场景下应运而生,目前似乎开始占用领了一些市场
  • nodejs,脱胎前端js,但有想干后端活而出现的诡异东西,框架也有比如nestjs,似乎有不少公司都使用它代替简单的后端服务或者搭建前后端数据处理的中间代理
    好吧,该说Java,这才是我最熟悉的东西
    首先无论什么语言首先都得了解他的基础语法,对于Java来说那就是JavaSE,包括面向对象思想、函数式编程、集合、多态、线程、IO、网络等,还有单元测试、注解、反射、动态代理等开发必备的知识
    如果是图形化开发可以了解下JavaGUI,后台开发的话了解JavaSE就好了
    作为一名有追求的人,也要好好了解Java的前世今生,谁发明,归属谁,迭代历史,新特性?
Abstract

以上,算是Java最基础的东西,下面的东西严格意义来说JavaWeb算JavaEE,其他的都是框架和中间件了。在学习这些东西之前有些东西也可以同步学习了,怎么说呢,那就是设计模式数据结构与算法,这些东西将是终生受益,只有懂得这些你才能写出优秀的高质量代码并且享受敲代码的乐趣。

接下来就是JavaWeb,学习下网站的组成、网页元素的解析、数据库的知识、javaEE的基础架构。但说实话现在基本上是Spring一统的天下了,应该没人按照原生的方法去写了,ssm、ssmp整合这些名词也很遥远了。但借此了解下Web技术名词还是很有用的比如拦截器、请求响应,cookie、session,甚至还可以回忆计算机网络的知识

在之前Jar包都需要手动导入Library,一个两个还好,多了呢?首先管理不方便,其次这样不科学。当下,包管理器这个概念已经很普及了,像Java的包管理器常见的就有Maven和Gradle。Maven早于Gradle,分别使用的是xml和Json的文档格式管理依赖,见证的是技术的迭代,虽说如此Maven占据了出现早的优势依旧是主流占据广大市场,而Gradle则多见于安卓开发的依赖管理

前面这些掌握的差不多了,就可以正式接触Spring家族了,家族很大,我们学习入门依次掌握SpringFrame(SpringIOC、SpringMVC、Spring AOP、Spring事务......)、SpringBoot、SpringCloud(SpringCloudAlibaba是阿里对Spring家族的一个扩展)以及其他的技术栈组件如SpringDataview、SpringCache、SpringSecurity、Gateway等按需学习
在这个过程,我们也经历了单体应用、分模块分布式应用、微服务 的迁移
微服务,讲究的是分布式,多集群,为了更高的性能,有负载均衡算法选择,由此也引入了很多中间件相关的概念,比如:反向代理消息队列缓存分布式搜索容器虚拟化,在这种项目量级越发庞大架构越发升级的时候数据库的设计和优化也是跟着迭代:索引的设计和优化、主从架构读写分离、分库分表等

Spring可以说是一个大家族,统一了Java的江山,但是他只是基石,相当于制定了规范让别人去使用和遵循它,围绕Spring而衍生的各种组件和开源框架才是Spring生态强大的体现。

项目最终是要上线的,为了稳定我们的云服务器都基本上采取的Linux系统,掌握一些Linux基础语法和常用命令是不错的选择,虽然现在很多终端的可视化界面都已经能够完成大部分基础的命令。上线的项目需要日志记录和收集方便出现问题的时候追踪,肯定不会使用System.print.out在控制台打印,我们应当有选择的在关键位置记录日志这也被称之为“埋点”

这整个项目的开发过程中我们还会使用版本控制软件比如 分布式版本控制:Git 初始化项目仓库、提交、推送到远程仓库进行协同开发并根据需求创建分支代码,合并审核发布,实现合理的版本控制和分支管理

作为大公司大项目,还会上CI/CD服务也就是持续集成,它的底层原理大体是shell和定时任务,这是非常简单的demo可以参考:Linux > 项目部署,作为个人简单使用其实也够了,当然我们还可以使用Github的Action,gitea也可。复杂项目,公司一般就是K8S了。

最后记一下,常用中间件的搭建,这在开发初期真的很烦人:打造舒适开发环境