用大白话告诉你 :Java 后端到底是在做什么?
阅读本文大概需要 6 分钟。
作者:黄小斜

新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了。但事实上真的是这样吗?其实并非如此。
今天我们就来聊一聊,Java 开发工程师到底开发的是什么东西。准确点来说,Java后端到底在做什么?
大家都知道 Java 是一门后端语言,后端指的就是服务端,服务端代码一般运行在服务器上,通常我们运行Java 程序的服务器都是 Linux 服务器。
这些服务器在互联网公司中一般放在一个叫做机房的地方里,于是像我们这类 Java 程序员的代码一般也运行在这些机房里的服务器中。

Java 里有一个概念叫做虚拟机,你可以把它理解为一个安卓的模拟器,比如你在电脑上装了一个安卓模拟器,就可以通过它来运行安卓应用程序,比如装个 APP,手机游戏什么的。
所以当你在电脑上安装了一个叫做 JDK 的东西时,电脑里就有了 JRE 也就是 Java 运行环境,有了这个运行环境,你就可以运行 Java 应用程序了。
知道 Java 程序如何运行在计算机上之后,我们再来讲一讲平时学的一些 Java 基础知识,它们到底有什么用?
其实平时这一些 Java 基础语法都仅仅是你写代码的一些基础知识,就相当于英语中的 26 个字母,常见的有基本类型变量、for 循环、if else 等等基本语法,掌握了这些基础知识之后,你就可以上手写一些很简单的代码了。
除此之外,Java 还有一些比较特别的概念,比如面向对象的特性,其中有类、接口等概念。为什么 Java 要引入这些东西呢,其实就是想让使用者更好地进行设计、抽象和编程。
对于新手来说,你不需要理解得特别的深刻,因为这些东西只有你在你真正写代码之后才能逐步去理解。

说完基本知识之后,我想你也会好奇,Java里经常提到的一些集合类是干嘛的呢,因为在现实生活中有很多场景,需要用到集合类,比如说一个用户名列表,你要怎么存呢?
你会用一个 List 来做对不对,所以集合类的作用就是让你在编程中更好的存储数据。
事实上,集合类的概念最早是来源于数据结构的,因为计算机里有很多特殊的数据存储结构,比如文件树,比如链表和数组等结构,因此计算机理论把这些存储数据的模型抽象成一些常见的结构,统称为数据结构。
那么,Java 中的并发编程又是做什么的呢,Java 中的多线程是为了更好地利用电脑中的CPU核心,通过并发编程,就可以提高程序并发的效率。
但是并发编程的背后需要操作系统的支持,以及计算机硬件的支持,所以,如果你要完全地理解多线程,绝不仅仅是理解 Java 里的 Thread 或者是线程池就足够了,你还需要去理解操作系统,以及计算机组成原理。

和并发编程类似,Java 里也有网络编程的概念,Java 里的网络编程和其他语言大同小异,其实也是基于 TCP/IP 协议实现的一套 API,通过网络编程,你就可以在程序中把你想传输的数据传输到网络的另一端,有了网络编程和并发编程之后,Java 程序员的能量已经很大了
讲完这几点之后接下来再谈谈,我们通常说的 Java 后端技术到底是什么,就拿支付宝来举例吧,曾经的支付宝用户数并不多,一台服务器,一个数据库就可以支持所有的业务了。
当支付宝的用户越来越多的时候,一台服务器无法同时满足海量用户的需求,于是开始出现了多台服务器,多台服务器组成了一个集群,用户可以通过负载均衡的方式访问这些服务器,每个用户可能会访问到不同的机器上,这样子就达到了分流的效果,服务器的压力就会减小。
由于数据库需要保证数据的可靠性,万一某一台数据库挂了,并且没有备份的话,那么这个数据就无法访问了,这在大型系统中是不允许出现的,于是乎,就有了数据库的主从部署。
但事实上,随着业务发展,数据库的压力也越来越大,主备部署并不能解决数据库访问性能的问题,于是乎我们需要进行分库分表,在数据库主备的基础上,我们会把一个数据量很大的表拆成多个表,并且把数据库请求分流到不同的数据上,比如说100个分库,100个分表,就相当于把一个数据表划分成10000个数据表。
此时又出现一个问题,如果一个数据库有多个备库,并且当主库挂掉的时候需要进行主从切换时,主备数据库之间的数据就可能发生不一致,而这也是分布式理论研究的问题之一,因为比较复杂,我们这里就略过不讲。

刚才说到了分布式技术,其实负载均衡、分库分表都是分布式技术的一种实现,如果你不想做分库分表,那还有什么办法能够减轻数据库访问的压力呢?于是缓存就出现了,缓存可以让服务器先把请求打到缓存上,由于缓存的数据一般在内存中,所以访问速度会非常快,这些请求无需经过数据库。
随着业务发展,缓存的单点压力也会比较大,于是乎分布式缓存就出现了,通常来说,缓存难以保证数据的可靠性,因为它们的数据可能会丢失,同时缓存只能存储一部分的数据,并不能解决所有问题。
所以当某些业务的请求量非常大的时候,光靠缓存也解决不了问题,此时我们还可以通过消息队列来帮我们解决大流量并发请求的问题。
我们可以通过消息队列来存储一部分的请求消息,然后根据我们服务器处理请求的能力,把消息再逐步取出来,接着去把这些消息逐渐地进行处理,这样就可以很好的解决高并发的问题。当然,前提是消息队列要保证消息存储的可靠性,这也是大部分消息队列都会保证的能力。

一口气讲了这么多,算是把 Java 后端的大概面貌介绍清楚了,除此之外还有很多东西没讲到,真要讲完的话一晚上也说不完。
总体来说,Java 后端技术,说难不难说简单也不简单,我尽量把这些内容都讲的比较通俗易懂,事实上每项技术的背后都有特别多复杂的实现原理,当然,在你理解了 Java 后端技术的整体概念以后,相信对于你之后的学习会更有帮助。
如果有哪里说错了,偷偷留言告诉我
文章作者【黄小斜】大厂程序员,互联网职场新知,终身学习践行者,懂技术,懂面试,懂职场,更想懂你。据说,每个上进又好看的互联网人都关注我了。
用大白话告诉你 :Java 后端到底是在做什么?的更多相关文章
- Java后端程序员都做些什么?
这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...
- 用大白话告诉你什么是Event Loop
文章原文地址 前沿 从前有座山,山里有座庙,庙里有个小和尚在讲故事.讲什么呢?讲的是: 从前有座山,山里有座庙,庙里有个小和尚在讲故事.讲什么呢?讲的是: 从前有座山,山里有座庙,庙里有个小和尚在讲故 ...
- 用大白话讲Java动态代理的原理
动态代理是什么 首先说下代理模式,代理模式是常见的一种java设计模式,特征是代理类与委托类实现了同样的接口,代理类主要负责为委托类预处理.过滤.转发,以及事后处理等.代理类与委托类之间通常会存在关联 ...
- CODE大全告诉你java是否开始没落了
CODE大全告诉你java是否开始没落了! 22 岁,对于一个技术人来说可谓正当壮年.但对于一门编程语言来说,情况可能又有不同.各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Jav ...
- (Java后端 Java web)面试时如何展示自己非技术方面的能力(其实就是综合能力)
这篇文章的适用范围其实不仅限于Java后端或Java Web,不过其中有些是拿这方面举例的,在其它方面,大家可以举一反三,应该也能得到些启示. 我们在面试时,会发现有些候选人技术不错,比如在Java ...
- 用大白话扯扯那"神奇"的面向对象编程思维(一)
前言: 每当提到面向对象的时候,初学者肯定都是一脸懵逼的状态,到底什么是面向对象?会用面向对象后有什么牛逼之处吗?不会用是不是就会死掉?答案肯定不会死掉,我们可以来简单的举一 个栗子 1.当你想到熊猫 ...
- 最近面试 Java 后端开发的感受!
阅读本文大概需要 4.3 分钟. 首发:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实 ...
- 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...
- Java后端面试的一切技巧和常见的问题经验总结
原文地址:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂(适用90%小小小公司, ...
随机推荐
- 【JVM】虚拟机初见-运行时数据区图解
本文是听咕泡XX公开课视频整理的笔记,较书本更为总结,感谢. 计算机模型(汇编知识):数据集(数据).指令集(操作指令,+-等).控制集(分支循环) JVM运行时的数据区: 程序计数器(每个线程都有) ...
- Knative 初体验:Build Hello World
作者 | 阿里云智能事业群技术专家 冬岛 Build 模块提供了一套 Pipeline 机制.Pipeline 的每一个步骤都可以执行一个动作,这个动作可以是把源码编译成二进制.可以是编译镜像也可以是 ...
- C# Invoke
最近在看一个项目,其中用到异步进程——控件Invoke,这里将具体用法介绍如下: 以进度条为例: //声明委托 delegate void SetProgressBarEnabledDelegate( ...
- CentOS7 使用 kubeadm 搭建 k8s 集群
一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...
- vim与系统剪切板之间的复制粘贴
背景 vim各种快捷建溜得飞起,然而与系统剪切板之间的复制粘贴一直都是我的痛. 每次需要从vim中拷贝些文字去浏览器搜索,都需要用鼠标选中vim的文字后,Ctrl+c.Ctrl+v,硬生生掐断了纯键盘 ...
- JVM中有哪些内存区域,分别是用来干什么的
前言 之前我们探讨过一个.class文件是如何被加载到jvm中的.但是jvm内又是如何划分内存的呢?这个内被加载到了那一块内存中?jvm内存划分也是面试当中必被问到的一个面试题. 什么是jvm内存区域 ...
- 好用的在线画图工具processon
ProcessOn是一款基于SaaS的前沿.高效线上作图工具,它将Visio.Xmind等专业作图工具搬到了"云端" 注册链接:https://www.processon.com/ ...
- Lockey的沙雕低错集锦(未完待续~自己提升用)
(嘿嘿 (^~ ^)) 1. bitset<2100>a[2100] a[x]|=(1<<x) (1<=x<=2100) 使用时忘了x的范围,额,应 ...
- 学习4:内容# 1.列表 # 2.元祖 # 3.range
1.列表 列表 -- list -- 容器 有序,可变,支持索引 列表: 存储数据,支持的数据类型很多 字符串,数字,布尔值,列表,集合,元祖,字典, 定义一个列表 lst = ["dsb& ...
- python函数知识四 迭代器、生成器
15.迭代器:工具 1.可迭代对象: 官方声明,只要具有__iter__方法的就是可迭代对象 list,dict,str,set,tuple -- 可迭代对象,使用灵活 #方法一: list.__ ...