共计 6607 个字符,预计需要花费 17 分钟才能阅读完成。
Java 是啥
老手程序员通常会走入一个误区,就是认为学习了一门语言,就能够称为是某某语言工程师了。但事实上真的是这样吗?其实并非如此。
明天咱们就来聊一聊,Java 开发工程师到底开发的是什么货色。精确点来说,Java 后端到底在做什么?
根底
大家都晓得 Java 是一门后端语言,后端指的就是服务端,服务端代码个别运行在服务器上,通常咱们运行 Java 程序的服务器都是 Linux 服务器。
这些服务器在互联网公司中个别放在一个叫做机房的中央里,于是像咱们这类 Java 程序员的代码个别也运行在这些机房里的服务器中。
Java 里有一个概念叫做虚拟机,你能够把它了解为一个安卓的模拟器,比方你在电脑上装了一个安卓模拟器,就能够通过它来运行安卓应用程序,比方装个 APP,手机游戏什么的。
所以当你在电脑上装置了一个叫做 JDK 的货色时,电脑里就有了 JRE 也就是 Java 运行环境,有了这个运行环境,你就能够运行 Java 应用程序了。
晓得 Java 程序如何运行在计算机上之后,咱们再来讲一讲平时学的一些 Java 基础知识,它们到底有什么用?
其实平时这一些 Java 根底语法都仅仅是你写代码的一些基础知识,就相当于英语中的 26 个字母,常见的有根本类型变量、for 循环、if else 等等根本语法,把握了这些基础知识之后,你就能够上手写一些很简略的代码了。
除此之外,Java 还有一些比拟特地的概念,比方面向对象的个性,其中有类、接口等概念。为什么 Java 要引入这些货色呢,其实就是想让使用者更好地进行设计、形象和编程。
对于老手来说,你不须要了解得特地的粗浅,因为这些货色只有你在你真正写代码之后能力逐渐去了解。
Java 核心技术
说完基本知识之后,我想你也会好奇,Java 里常常提到的一些汇合类是干嘛的呢,因为在现实生活中有很多场景,须要用到汇合类,比如说一个用户名列表,你要怎么存呢?
你会用一个 List 来做对不对,所以汇合类的作用就是让你在编程中更好的存储数据。
事实上,汇合类的概念最早是来源于数据结构的,因为计算机里有很多非凡的数据存储构造,比方文件树,比方链表和数组等构造,因而计算机实践把这些存储数据的模型形象成一些常见的构造,统称为数据结构。
那么,Java 中的并发编程又是做什么的呢,Java 中的多线程是为了更好地利用电脑中的 CPU 外围,通过并发编程,就能够进步程序并发的效率。
然而并发编程的背地须要操作系统的反对,以及计算机硬件的反对,所以,如果你要齐全地了解多线程,绝不仅仅是了解 Java 里的 Thread 或者是线程池就足够了,你还须要去了解操作系统,以及计算机组成原理。
和并发编程相似,Java 里也有网络编程的概念,Java 里的网络编程和其余语言大同小异,其实也是基于 TCP/IP 协定实现的一套 API,通过网络编程,你就能够在程序中把你想传输的数据传输到网络的另一端,有了网络编程和并发编程之后,Java 程序员的能量曾经很大了
讲完这几点之后接下来再谈谈,咱们通常说的 Java 后端技术到底是什么,就拿支付宝来举例吧,已经的支付宝用户数并不多,一台服务器,一个数据库就能够反对所有的业务了。
后端技术
当支付宝的用户越来越多的时候,一台服务器无奈同时满足海量用户的需要,于是开始呈现了多台服务器,多台服务器组成了一个集群,用户能够通过负载平衡的形式拜访这些服务器,每个用户可能会拜访到不同的机器上,这样子就达到了分流的成果,服务器的压力就会减小。
因为数据库须要保证数据的可靠性,万一某一台数据库挂了,并且没有备份的话,那么这个数据就无法访问了,这在大型零碎中是不容许呈现的,于是乎,就有了数据库的主从部署。
但事实上,随着业务倒退,数据库的压力也越来越大,主备部署并不能解决数据库拜访性能的问题,于是乎咱们须要进行分库分表,在数据库主备的根底上,咱们会把一个数据量很大的表拆成多个表,并且把数据库申请分流到不同的数据上,比如说 100 个分库,100 个分表,就相当于把一个数据表划分成 10000 个数据表。
此时又呈现一个问题,如果一个数据库有多个备库,并且当主库挂掉的时候须要进行主从切换时,主备数据库之间的数据就可能产生不统一,而这也是分布式实践钻研的问题之一,因为比较复杂,咱们这里就略过不讲。
分布式
方才说到了分布式技术,其实负载平衡、分库分表都是分布式技术的一种实现,如果你不想做分库分表,那还有什么方法可能加重数据库拜访的压力呢?于是缓存就呈现了,缓存能够让服务器先把申请打到缓存上,因为缓存的数据个别在内存中,所以访问速度会十分快,这些申请无需通过数据库。
随着业务倒退,缓存的单点压力也会比拟大,于是乎分布式缓存就呈现了,通常来说,缓存难以保证数据的可靠性,因为它们的数据可能会失落,同时缓存只能存储一部分的数据,并不能解决所有问题。
所以当某些业务的申请量十分大的时候,光靠缓存也解决不了问题,此时咱们还能够通过音讯队列来帮咱们解决大流量并发申请的问题。
咱们能够通过音讯队列来存储一部分的申请音讯,而后依据咱们服务器解决申请的能力,把音讯再逐渐取出来,接着去把这些音讯逐步地进行解决,这样就能够很好的解决高并发的问题。当然,前提是音讯队列要保障音讯存储的可靠性,这也是大部分音讯队列都会保障的能力。
一口气讲了这么多,算是把 Java 后端的大略风貌介绍分明了,除此之外还有很多货色没讲到,真要讲完的话一早晨也说不完。
总体来说,Java 后端技术,说难不难说简略也不简略,我尽量把这些内容都讲的比拟通俗易懂,事实上每项技术的背地都有特地多简单的实现原理,当然,在你了解了 Java 后端技术的整体概念当前,置信对于你之后的学习会更有帮忙。
为什么我要抉择 Java
最近有一些小伙伴问我,为什么当初抉择走 Java 这条路,为什么不做 C ++、前端之类的方向呢,另外还有一些声音:研究生不是应该去做算法方向么,本科生不就能够做开发了吗,为什么还要读研呢。其实吧,这个问题搁在不同人身上,答复可能也是齐全不一样的。我可能还是次要以我的角度登程,联合一些读者的问题,来说一说为什么要抉择 Java 这条路。
谈谈我的技术方向抉择
我最早接触的语言应该是 c,再起初又接触了前端、php、C# 等语言,对这些语言的理解也仅限于懂得根本语法,写过一些小 demo 而已,那时候感觉把握一门语言就是把握它的语法就行了,于是会在简历上写,理解各种语言,当初想想切实是太可笑了。
不过真的很多初学者都会这么认为,感觉本人不论选哪个方向都能够,这是因为他们不晓得本人的技术方向到底是什么,因为他们不论哪个方向都不精。
起初缓缓接触了 Android 开发,能本人写一些 app,感觉这个方向还挺乏味的,于是想着当前罗唆做这个吧。不过我那时候也明确本人离进大厂还有很远的间隔,于是打算考研。巧的是,读研前的那个假期,去了一家公司实习,做的是 Java Web,那时候才感觉 Android 比 Java Web 简略多了呀,齐全不须要学那么多框架、技术啊,于是更动摇了做 Android 的信心,只不过那时候也同样发现了,Java web 是更加热门的方向,岗位需求量也更大。
读研的时候,一开始也是打算做 Android 方向的,买了各类 Android 书籍开始啃,那时候刚好遇到了个实际课程,让咱们选方向,有 Java、Android、C++ 等等。过后妹子做前端,为了带上妹子一起做我的项目,罗唆就选了 Java Web 这个方向,想着应该不影响我做 Android 啊,于是接下来的工夫里就开始学 Java Web 了。
工夫一长,发现这个方向也没有设想的那么难,相同还挺有意思的,毕竟能用到各种各样的框架,技术栈的内容也很丰盛,看起来如同比 Android 的技术含量高很多,加上本人之前学过 Java,也有 Java Web 的学习经验,简历上也能写的难看一点,于是一不做二不休,就开始做 Java 方向了。就这样,我找到了第一份 Java 实习,看了一遍 Java 后端书单,缓缓地在这条路上越走越远,起初我才发现,Java Web 远没有设想中那么简略,Java 后端技术栈也远不止 Java Web 这点内容,特地是对于大厂来说,要把握的货色切实太多了,比方分布式、网络编程、中间件等等。
所以,抉择方向这件事,有时候就是看趣味,看时机,看你能保持多久,如果你对一个方向感兴趣,并且违心继续学习,一直深挖,这个方向可能就适宜你,当你在这个方向投入了肯定工夫之后,有了肯定积攒和教训,就不太容易再改变方向了。
谈谈各个技术方向的前景
之前也有很多读者问过这个问题,做哪个方向更有前景,更有钱景。尽管我只做过一个方向,然而对其余方向也有一些理解和涉猎,不敢说理解得十分多,然而联合本人身边的同学、敌人的状况,还是能够给出一些比拟中肯的倡议。
其实我最早打算做的是游戏开发的,所以咱们先聊聊游戏开发这个方向。
网易游戏在前几年对游戏开发的招聘要求是 985 硕士以上学历,过后我就是冲着这个要求考了研,起初却没有去做游戏开发,次要起因是游戏开发次要用的是 C ++,并且次要的岗位要求是客户端方向的技术,比方图形学、引擎技术,以及对 C ++ 的把握水平。
过后自认为有一些 Java 根底,不违心转 C ++,同时也感觉游戏行业大厂太少了,除了腾讯网易就没有什么大公司了,职业倒退的空间可能也不大。本人尽管爱玩游戏,然而做开发和玩游戏毕竟是两码事。当然,近两年游戏开发的岗位需要其实还是很大的,因为当初做游戏开发的人太少了,导致网易游
戏放宽了研发工程师的规范,只要求 211 以上即可,所以,想要从事游戏开发的敌人,其实当初进大厂的机会可能比之前更多了。
说完游戏开发,说一说 C ++,C++ 方向和 Java 一样次要是做后端的,尽管游戏开发大部分也用的是 C ++,然而 C ++ 服务端的需求量的确没有 Java 大,加上 C ++ 的学习难度略微搞一点,所以我没有抉择这个方向。
当然,当初做 CV 等算法方向的同学都会用到 C ++,所以绝对 Java 来说,C++ 方向抉择岗位的范畴可能也更多一些。不过,正如 Java 也能做大数据开发一样,抉择方向并不是抉择语言,比方你做游戏开发或者算法方向,要学的远不止 C ++,做大数据方向,Java 也只是很小的一部分而已。
除此之外,前端、测试、挪动端等方向也有很多机会,这些方向的学习难度可能要略微简略那么一点,所以有很多女生会抉择这些方向,如果你想进大厂却对本人不是很有信念,那么这些方向也是很不错的抉择。
研究生就应该做算法么?
再聊聊当初很火的人工智能、机器学习方向,这个方向说实话最难的中央在于理论知识,也就是机器学习实践、算法模型、统计学常识等内容。很多人对这个方向趋之若鹜的起因,很大水平上是因为这个方向的薪资高,并且绝对工程方向来说,工作强度要低一些。
然而,这么热门的方向,竞争有多强烈就不必多说了,大厂的算法岗简历多到不可胜数,你没有论文、实习经验或者较量为你背书,基本上连简历筛选都过不去,就算你的简历很漂亮,然而很多时候因为岗位需求量不多,只有你不是特地优良,就可能被安顿到研发岗位,这也是我身边很多同学亲身经历的。再有一点,就是有很多算法方向的博士毕业生也会和你竞争,这就有点吓人了,总之,算法方向还是比研发方向更加有难度的,不论是学习难度、面试难度,还竞争强烈水平,都更加显著。
很多人感觉读研就应该做算法,本科生才做研发,我对此不敢苟同,因为次要还是还看集体理论状况,如果你想进大厂,那么至多本科的时候就要有很扎实的根底实力,这对大部分同学来说都是比拟艰难的,如果你不是名校出身,我感觉进大厂的难度还是比拟大的。
很多名校背景的本科生的确能够拿到大厂的研发 offer,于是他们会感觉没必要读研,然而对于我这种跨专业的人来说,研究生才是我开始的第一步,跟他们没有什么可比性,所以对于从零开始的我来说,做研发比算法要靠谱的多,对于很多要转行做程序员的人来说,也是一样的情理,应该抉择更加合乎本人实力的岗位方向,不要好高骛远。
以上内容纯属个人观点!
我是如何学 Java 的?
教练,我想学 Java!
怎么学 Java,一个简略的命题,我本人也折腾了好几年,当初虽不能说是 Java 高手,但也算是小有所成,至多还不至于搞不懂一些基本概念和技术原理。
从我大三那一年第一次在课堂上听老师讲 JAVA 课程到当初,也曾经快 4 年的工夫了,回顾我的学习历程,能够说是充斥艰苦的,但又是一直在提高的,所谓路线是波折的,前途是光明的,大抵就是这个意思吧。
第一个办法:上课
这里的上课,个别还是指学校里的课程,不包含培训班。学校里的 Java 课程个别都比较简单,课程内容也不会太多,但对于当初咱们这些小白来说,还是很有难度的。
比方讲根底数据类型,int、double、float 别离占用几个字节,咱们压根不晓得为什么要这么分,讲面向对象、类和接口,更是一脸懵逼。到了期末,大家刷刷题,背背答案,也就这么过了,谁也没把这些常识太放在心上。
可能绝大部分人的大学 Java 课程都是这么学的,只能当成新手入门,算是为小白关上了新世界的大门。
第二个办法:看视频
上课和看视频的差别在于,看视频是一个自学的过程,你能够本人把握课程进度,配合实现练习。
在我初学 Java 的阶段,我十分喜爱看视频这种学习办法,很轻松,而且不懂的中央能够重复看,尽管效率不算高,视频品质也参差不齐,然而对老手来说,是很敌对的。
缓缓地,你就会习惯通过看视频学习,并且找到本人喜爱的课程视频,尝试减速播放,配合视频实现一些练习,一直地晋升本人。
第三个办法:培训
培训班和大学上课不一样,整体的教学速度是很快的,并且更加重视实际,毕竟都自称是“速成班”、“包待业”,必定要保障教学速度,同时尽快造就学员的实际能力。
我没有真正上过培训班,倒是上学期间学校让咱们加入了一周的 Android 短期培训,其实和培训班的上课形式也差不多,老师会做好 PPT,而后带着一起学习,一边敲代码一边解说,还是挺有意思的,一周的工夫内咱们就曾经大略地理解了 Android 的根本控件和一些编程办法。
第四个办法:看书
都说优良的程序员总归是要看书的,书中有颜如玉也有黄金屋,更有程序员最须要学习的一些基础知识和技术原理。比方作为一个 Java 工程师,你必须要看过《深刻了解 JVM 虚拟机》否则永远上不了一个品位,不理解实现原理,却喜爱间接开始做我的项目,就如同海市蜃楼一样不牢靠。
看书,须要消耗工夫,精力,须要你很认真地解读那些专业名词的含意,所以浏览难度往往是一个很高的门槛。然而,读完的人都晓得,必须要硬着头皮坚持下去,能力失去你要的真知。
第五个办法:看博客
博客,不晓得从何时起,变成了技术人最沉闷的领地,在博客园、CSDN,或者是掘金,segmentfault 等技术社区,都能够看到一些不错的技术文章,这往往是前人通过看书、实战后提炼进去的货色。
尽管当初的博客品质也是参差不齐,然而如果能找到优质的博客,要比你本人去提炼总结轻松多了。
有时候看书看不懂,那么就去看博客吧。
第六个办法:写博客
我打心底里拜服那些能写出优质技术文章的大牛们,他们总是十分精确地提炼出一个个概念,并且加以总结,有的甚至能够把这些干燥的知识点变成活泼的故事或者是漫画。
这样的大牛很多,比方刘欣老师,程序员小灰。
写博客最大的益处,就是能够让本人对所写内容学的更透彻,有科学研究表明,把常识教给别人,是让本人把握这一常识的最无效办法。
在这方面我自愧不如,只写过一些浅显的 Java 文章,除此之外根本没有能写出什么有深度的技术文章,心愿在有几年技术积攒后,我也能和他们一样写出优质的文章。
结语:
这些办法的独特特点就是,你须要实际,不论是书上的、博客上的、本人写的、参考他人的,最终还是通过实际来加以坚固。
抉择适宜本人的办法,不跟风,不强求,但请保持。
更多内容请关注微信公众号【Java 技术江湖】
一位阿里 Java 工程师的技术小站。作者黄小斜,专一 Java 相干技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶然讲点 Docker、ELK,同时也分享技术干货和学习教训,致力于 Java 全栈开发!(关注公众号后回复”Java“即可支付 Java 根底、进阶、我的项目和架构师等收费学习材料,更有数据库、分布式、微服务等热门技术学习视频,内容丰盛,兼顾原理和实际,另外也将赠送作者原创的 Java 学习指南、Java 程序员面试指南等干货资源)