# 目录

* [微信公众号](#微信公众号)
  * [个人公众号：黄小斜](#个人公众号：黄小斜)
  * [技术公众号：Java技术江湖](#技术公众号：java技术江湖)



新手程序员通常会走入一个误区，就是认为学习了一门语言，就可以称为是某某语言工程师了。但事实上真的是这样吗？其实并非如此。

今天我们就来聊一聊，Java 开发工程师到底开发的是什么东西。准确点来说，Java后端到底在做什么？

大家都知道 Java 是一门后端语言，后端指的就是服务端，服务端代码一般运行在服务器上，通常我们运行Java 程序的服务器都是 Linux 服务器。

这些服务器在互联网公司中一般放在一个叫做机房的地方里，于是像我们这类 Java 程序员的代码一般也运行在这些机房里的服务器中。


![](https://mmbiz.qpic.cn/mmbiz_jpg/hbTNOSuicwludicNDAe8NpGXFQQicqI58NAueCNFVHoJfpGFS6DYuduPsqD3qOwJXyDW54NrIFrgOWW0tLXiaia74pw/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 "标志，商店橱窗，商店橱窗，店面，模特，购物，衣服，服装店，透过窗户，帽子")



Java 里有一个概念叫做虚拟机，你可以把它理解为一个安卓的模拟器，比如你在电脑上装了一个安卓模拟器，就可以通过它来运行安卓应用程序，比如装个 APP，手机游戏什么的。

所以当你在电脑上安装了一个叫做 JDK 的东西时，电脑里就有了 JRE 也就是 Java 运行环境，有了这个运行环境，你就可以运行 Java 应用程序了。

知道 Java 程序如何运行在计算机上之后，我们再来讲一讲平时学的一些 Java 基础知识，它们到底有什么用？

其实平时这一些 Java 基础语法都仅仅是你写代码的一些基础知识，就相当于英语中的 26 个字母，常见的有基本类型变量、for 循环、if else 等等基本语法，掌握了这些基础知识之后，你就可以上手写一些很简单的代码了。

除此之外，Java 还有一些比较特别的概念，比如面向对象的特性，其中有类、接口等概念。为什么 Java 要引入这些东西呢，其实就是想让使用者更好地进行设计、抽象和编程。

对于新手来说，你不需要理解得特别的深刻，因为这些东西只有你在你真正写代码之后才能逐步去理解。

![](https://mmbiz.qpic.cn/mmbiz_jpg/hbTNOSuicwlv4siawNIaW61ib1Hgcl0QUAhyuibdlVKPVSv1vwTicOPE5RfPnwVmYXraBkhh62nhGJpKDlibBrnrxEwg/640?wx_fmt=jpeg)

说完基本知识之后，我想你也会好奇，Java里经常提到的一些集合类是干嘛的呢，因为在现实生活中有很多场景，需要用到集合类，比如说一个用户名列表，你要怎么存呢？

你会用一个 List 来做对不对，所以集合类的作用就是让你在编程中更好的存储数据。

事实上，集合类的概念最早是来源于数据结构的，因为计算机里有很多特殊的数据存储结构，比如文件树，比如链表和数组等结构，因此计算机理论把这些存储数据的模型抽象成一些常见的结构，统称为数据结构。

那么，Java 中的并发编程又是做什么的呢，Java 中的多线程是为了更好地利用电脑中的CPU核心，通过并发编程，就可以提高程序并发的效率。

但是并发编程的背后需要操作系统的支持，以及计算机硬件的支持，所以，如果你要完全地理解多线程，绝不仅仅是理解 Java 里的 Thread 或者是线程池就足够了，你还需要去理解操作系统，以及计算机组成原理。


![](https://mmbiz.qpic.cn/mmbiz_jpg/hbTNOSuicwludicNDAe8NpGXFQQicqI58NA3ickdvv1gpvXcfNrg54pP1eKyL7B2ia0JNTWMTcgeS624Zng0JXwXQGA/640?wx_fmt=jpeg "辣椒，红辣椒，黄辣椒，蔬菜，杂货，戒指，农产品，红色，黄色，颜色，食物，手臂，手腕，手，烹饪，购物，健康，新鲜，饮食，食谱")



和并发编程类似，Java 里也有网络编程的概念，Java 里的网络编程和其他语言大同小异，其实也是基于 TCP/IP 协议实现的一套 API，通过网络编程，你就可以在程序中把你想传输的数据传输到网络的另一端，有了网络编程和并发编程之后，Java 程序员的能量已经很大了

讲完这几点之后接下来再谈谈，我们通常说的 Java 后端技术到底是什么，就拿支付宝来举例吧，曾经的支付宝用户数并不多，一台服务器，一个数据库就可以支持所有的业务了。

当支付宝的用户越来越多的时候，一台服务器无法同时满足海量用户的需求，于是开始出现了多台服务器，多台服务器组成了一个集群，用户可以通过负载均衡的方式访问这些服务器，每个用户可能会访问到不同的机器上，这样子就达到了分流的效果，服务器的压力就会减小。

由于数据库需要保证数据的可靠性，万一某一台数据库挂了，并且没有备份的话，那么这个数据就无法访问了，这在大型系统中是不允许出现的，于是乎，就有了数据库的主从部署。

但事实上，随着业务发展，数据库的压力也越来越大，主备部署并不能解决数据库访问性能的问题，于是乎我们需要进行分库分表，在数据库主备的基础上，我们会把一个数据量很大的表拆成多个表，并且把数据库请求分流到不同的数据上，比如说100个分库，100个分表，就相当于把一个数据表划分成10000个数据表。

此时又出现一个问题，如果一个数据库有多个备库，并且当主库挂掉的时候需要进行主从切换时，主备数据库之间的数据就可能发生不一致，而这也是分布式理论研究的问题之一，因为比较复杂，我们这里就略过不讲。


![](https://mmbiz.qpic.cn/mmbiz_jpg/hbTNOSuicwludicNDAe8NpGXFQQicqI58NAtxStKDiaZCBGKia8QQOe6vaXpDdYFiaB57QpibAGod08UiaTna20OAGl7XQ/640?wx_fmt=jpeg "肖像、女人、微笑、购物、口香糖、糖果、糖果、快乐、欢乐、笑声、微笑、高加索人、眼镜、手、携带、乐趣")



刚才说到了分布式技术，其实负载均衡、分库分表都是分布式技术的一种实现，如果你不想做分库分表，那还有什么办法能够减轻数据库访问的压力呢？于是缓存就出现了，缓存可以让服务器先把请求打到缓存上，由于缓存的数据一般在内存中，所以访问速度会非常快，这些请求无需经过数据库。

随着业务发展，缓存的单点压力也会比较大，于是乎分布式缓存就出现了，通常来说，缓存难以保证数据的可靠性，因为它们的数据可能会丢失，同时缓存只能存储一部分的数据，并不能解决所有问题。

所以当某些业务的请求量非常大的时候，光靠缓存也解决不了问题，此时我们还可以通过消息队列来帮我们解决大流量并发请求的问题。

我们可以通过消息队列来存储一部分的请求消息，然后根据我们服务器处理请求的能力，把消息再逐步取出来，接着去把这些消息逐渐地进行处理，这样就可以很好的解决高并发的问题。当然，前提是消息队列要保证消息存储的可靠性，这也是大部分消息队列都会保证的能力。



![](https://mmbiz.qpic.cn/mmbiz_jpg/hbTNOSuicwludicNDAe8NpGXFQQicqI58NAjHeib3k5b9gY71NZO9SUUMDDmDhCXENX1b7NxG6WXBnTSnnnyaCMHFg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 "杂志，书堆，商店，商店，摊位，货架，纸张，杂志商店，杂志商店")





一口气讲了这么多，算是把 Java 后端的大概面貌介绍清楚了，除此之外还有很多东西没讲到，真要讲完的话一晚上也说不完。

总体来说，Java 后端技术，说难不难说简单也不简单，我尽量把这些内容都讲的比较通俗易懂，事实上每项技术的背后都有特别多复杂的实现原理，当然，在你理解了 Java 后端技术的整体概念以后，相信对于你之后的学习会更有帮助。


# 微信公众号

## 个人公众号：黄小斜

黄小斜是跨考软件工程的 985 硕士，自学 Java 两年，拿到了 BAT 等近十家大厂 offer，从技术小白成长为阿里工程师。

作者专注于 JAVA 后端技术栈，热衷于分享程序员干货、学习经验、求职心得和程序人生，目前黄小斜的CSDN博客有百万+访问量，知乎粉丝2W+，全网已有10W+读者。

黄小斜是一个斜杠青年，坚持学习和写作，相信终身学习的力量，希望和更多的程序员交朋友，一起进步和成长！

**原创电子书:**
关注公众号【黄小斜】后回复【原创电子书】即可领取我原创的电子书《菜鸟程序员修炼手册：从技术小白到阿里巴巴Java工程师》

**程序员3T技术学习资源：** 一些程序员学习技术的资源大礼包，关注公众号后，后台回复关键字 **“资料”** 即可免费无套路获取。	

**考研复习资料：** 
计算机考研大礼包，都是我自己考研复习时用的一些复习资料,包括公共课和专业的复习视频，这里也推荐给大家，关注公众号后，后台回复关键字 **“考研”** 即可免费获取。	

![](https://img-blog.csdnimg.cn/20190829222750556.jpg)


## 技术公众号：Java技术江湖

如果大家想要实时关注我更新的文章以及分享的干货的话，可以关注我的公众号【Java技术江湖】一位阿里 Java 工程师的技术小站，作者黄小斜，专注 Java 相关技术：SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程，偶尔讲点Docker、ELK，同时也分享技术干货和学习经验，致力于Java全栈开发！

**Java工程师必备学习资源:** 一些Java工程师常用学习资源，关注公众号后，后台回复关键字 **“Java”** 即可免费无套路获取。

![我的公众号](https://img-blog.csdnimg.cn/20190805090108984.jpg)
