写点什么

硬核,学习 Java 的一点小建议(思维导图,建议收藏)

作者:Java高工P7
  • 2021 年 11 月 12 日
  • 本文字数:4255 字

    阅读完需:约 14 分钟


首先映入我的眼帘的是这个称呼——“老前辈”,我一下子没忍住,笑了!


说起来也奇怪,上学的时候,同学几乎都比我大,玩得好的基本上都是哥哥或者姐姐。就连高三时追过的一个学妹,后来得知竟然比我大几个月。


可这些年呢?不管是遇到的读者,还是写博客的朋友,几乎不约而同的比我小,有上初中的,有上高中的,有读大学的,有在职的,几乎都是 90 后或者 00 后。比我年长的,还真的是凤毛麟角、屈指可数!


不得不感慨,自己真的是“老前辈”了!!!!!!!!!残忍!!!!!!!!


至于说读了我的文章后“深有感触,百般感想”,我不得不承认,这话恭维出了一股浓烈的文学家的色彩!


一名普普通通的中职计算机学生,即将踏进大专的计算机应用领域,极度的诚恳,袒露心声,但“坚信我的一生定与计算机相关”,铿锵有力,让我这个“老前辈”都有点震撼到了!


其实很多人学编程都会遇到困难,一开始极度的迷茫,没有方向。


我上大学之前,没怎么接触过电脑。仅有的机会应该就是去网吧聊 QQ,打忍者神龟了吧!或者看某些动作电影。


那真的是一个蛮荒的年代。


上了大学后,虽然阴差阳错的选了计算机专业,但同学们都心里门清,这是学校最不重视的专业,老师们的水平也非常堪忧,上课的时候明显感觉到力不从心。


整个大学看得最多的书,就是《21 天学会 XXX》系列了,害,学的那叫一个什么玩意。


一度怀疑,大学毕业后人该何去何从?


但上帝眷顾了我,让我有幸在实习的时候进入一家外企,并且顺利通过了三次考试,没有被辞退,后来经过自己的努力竟然是新人当中最快成为团队 Leader 的那一个。冥冥之中,这就成为了我的人生转折点。


往事不堪回首,有太多的心里话想要说给大家听,请牢记。


第一,不管学校的课程有多烂,一定不要挂科


不知道是从哪里传来的一句鬼话,“不挂科的大学是不精彩的。”


我大学的时候还特别喜欢这句话,于是还真挂科了好几门,最后补考应该是批卷老师手下留情,都是压着及格线过的。


我有几个同学,大学的时候特别喜欢打魔兽,几乎整天的时光都泡了游戏当中,有些还知道收获爱情,有些可真惨,毕业的时候是一无所有,爱情没有,毕业证都没有,挂的科真的难补,老师再放水,也得自己过及格线啊。


学历虽然说不能代表一切,但步入了社会,想要做一名合格的打工人,这学历是必不可少的,进工厂还必须得要求学历呢。


985、211 的学历是学历,双非的本科也是学历,就连被看不起的大专好歹也是学历啊!


第二,自己要知道学,下劲学


成绩好,可以去好的学校,选择好的专业,成绩不好,只能将就,自然身边遇到的同学,整体水平可能就要差一些。


如果你去的是一个不好的学校,身边的同学都在无所事事,都在消磨时光,假如你觉得既然大家都这样,那自己也这样吧,等到毕业的时候,才发现人家是叛逆,家里已经安排妥当,你就真后悔也买不到后悔药了!


我大学的同学当中,有三个,是公认的喜欢编程的,愿意把自己培养成一名技术极客的。


当我们都在实现简单的一对一的 Socket 和 SocketServer 通信时,他们三个当中的一个,已经做出了多对多的聊天室模式,就像“飞秋”那样,既能发文字,还能发图片、表情,甚至文件都行!


还知道把 JDK 也打包到程序当中,直接双击人家打包好的程序就能跑起来,我们的还得先装 JDK,再在命令行启动 SocketServer,然后再启动 Socket,才能联得通。


差距直接就拉满!


他们仨根本就不管老师的教学进度,完全是凭借自己的爱好去学习的,他们想通过编程来改变命运。十多年过去了,他们也都实现了自己的梦想。


我说的都是真人真事。其中有两个,在我的青铜时代读者群里,有一个,在我的黑铁时代读者群里,在群里的读者都可以找到他们的头像。


第三,不知道怎么学,不知道学什么,我来告诉你


之前的叫道,这个叫术,一条龙服务。


首先,我强烈推荐大家先学


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


一下 C 语言,先不说为什么,先推荐学习工具和学习资源。


代码编辑器用 VS Code。


书的话推荐《C 程序设计语言》,我大概花了一周的时间过了一遍,很有收获。如果指针看不懂,没关系,可以先跳过,但像变量、算术运算符、关系运算符、逻辑运算符、赋值运算符、条件表达式、控制流、方法、传参等等,这些其他编程语言里都有,学一遍就不用学第二遍了。



视频的话推荐,推荐浙江大学翁恺教授的《程序设计入门——C 语言》。


https://www.icourse163.org/course/ZJU-199001?from=searchPage#/info


可以到慕课上或者 B 站上看,慕课上有证书认证。


记住,课程里面的练习题一定要做,那可是浙江大学的练习题,不管你上什么大学,都可以直接白嫖。浙大应该能在全国排前五吧(可能不准确),总之就是可以白嫖,想想能和浙大的同学共用一个老师,共用一套学习资源,美滋滋。


然后,我再来说为什么要学习 C 语言。下图是我在读《深入理解计算机系统》的时候拍的一张图,C 语言虽然是“古怪的、有缺陷的”,但同时也是一个巨大的成功。


C 语言具备现代程序设计的基础要求,它的语法是很多编程语言的基础,比如说 Java。C 语言和 Java 常年霸占编程语言的前两名,都非常强。C 语言学得好,对后续操作系统、编译原理,以及 Java 的学习都是很好的基石。


如果你还处在学生阶段,一定要花时间把这门课过一下,至于指针,就像我前面说的,可以稍微了解一下,如果真的一时半会学不会,就先跳过去。


说完 C 语言,我再来推荐两门公开课,一门是哈佛大学的 CS50,一门是计算机科学速成课。这两门课我之前都有推荐过,这里再次强调,有时间一定要刷。嗯,应该说即使没有时间,也要挤出时间来刷,以后你会来感谢我的。


网易公开课(CS50):


https://open.163.com/newview/movie/free?pid=M6U6LS8CV&mid=M6U6MHDUR


计算机科学速成课:


https://www.bilibili.com/video/BV1EW411u7th


如果你下定决心,就像我这名读者一样,这一生都要从事于计算机专业,那就一定要看完这两门课。


接下来,就是我的拿手活了!说说大学该怎么学习 Java,从大一开始,就为校招做好准备。


国内大型的互联网公司中,阿里应该是最倚重 Java 的,所以先来看看阿里校招对 Java 研发岗的要求。



看完之后,你可能会觉得,“咦,也没说具体的要求呢?”是的,大厂在校招的时候对编程语言是没有限制的。Java 的关键字就出现了一次,还是“或许,你并不熟悉 Java 编程语言,更精通 C,C++, PHP,.NET 等编程语言中的一种或几种”,这什么鬼?


嗯,再来看百度的。



啊,你心中万分欢喜,终于他喵的出现了“熟悉 Java 编程语言”的要求。


校招不同社招,更看重的是你的计算机基础功底和你的学习能力,并不看重编程语言本身。要知道,我们学的是计算机科学(CS),而不是编程语言,编程语言只是工具而已。


可能很多同学会说,你只说了阿里和百度,它们是国内互联网的杠把子,比较难,但其实如果你去查了其他公司 Java 研发岗的要求,你会发现,基本上和这两家要求的差不多,只不过深度和广度不大一样。


按照这两家的招聘要求,我来说说具体该学哪些知识。


第一、计算机基础


1)数据结构与算法


这部分的重要性,通过阿里和百度的校招要求就能看得出来了,两家都不约而同地放在了很前面的位置。


数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。 它包含三方面的内容,逻辑关系、存储关系及操作。 不同种类的数据结构适合于不同种类的应用,而部分甚至专门用于特定的作业任务。 例如,计算机网络依赖于路由表运作,B 树高度适用于数据库的封装。


为什么数据结构这么重要呢?清华大学计算机系邓俊辉教授有过这样一段描述:


数据结构是计算机科学的关键内容,也是构建高效算法的必要基础。其中涉及的知识,在相关专业的课程系统中始终处于核心位置。以 ACM/IEEE Computing Curricula(计算机教学大纲)为例,其中对于几个相关专业(计算机科学、计算机工程、信息系统、信息技术、软件工程)的共同要求中,数据结构与算法作为程序设计概念与技能的核心,紧随在数学之后,排在第二位。


算法就更不用说了,大厂的面试题都考,必须玩得 66 的,ACM 的题,或者 LeetCode 的题目,必须刷到自己都感觉废了的地步他喵的,BAT 大佬的这份刷题笔记太强了!


大学阶段,最好能参加点算法比赛,能拿奖就更好了,加分项!加分项!加分项!重要的事情说三遍。


2)计算机操作系统


编译原理、操作系统、图形学被称为程序员的三大浪漫,所以可想而知,操作系统对计算机而言有多么重要。工作当中的很多疑难杂症都和操作系统密不可分,比如说:


  • 内存为什么会泄露

  • 文件为什么会打不开

  • 服务进程为什么会宕掉

  • 网络服务为什么会掉线


除此之外,在进行服务端高性能编程的时候,也经常会用到内存、进程、线程、IO 相关的知识。可以说学好操作系统,能直接解决在工作当中遇到的很多问题。另外,操作系统也是面试考察的一个重点,比如说:



3)计算机网络


对于 Java 研发岗来说,面试当中被问到的计算机网络知识可能比计算机操作系统还要多,比如说:



计算机网络这部分知识怎么学?推荐斯坦福大学的 CS144 课程,我大致看了一下,课程讲的还可以,里面 Lab 也很棒,有时间的同学可以跟着学一下。另外就是《计算机网络:自顶向下方法》这本书,值得啃一啃。


4)设计模式


如果你感觉自己代码写得比较烂,原因可能有两个。其一,可能是刚入门,代码写得少,如果我们满打满算只写过一两千行代码,是不可能写出多优雅的代码的。其二,可能不懂设计模式,设计模式是软件设计中常见问题的典型解决方案,它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题,如果不懂设计模式的话,遇到这些问题就只能抓瞎了。


对于面试而言,没必要 23 种设计模式都要滚瓜烂熟,最好是结合项目能说出几个常用的,比如说单例、工厂、简单工厂、建造者这些。


二、编程语言


虽然阿里和百度的校招要求里面没有特别强调编程语言这一块,但如果你误以为这部分内容完全不重要的话,可能就真的走偏了。对于校招,编程语言基础和计算机基础是同等重要的。


因为不管你学操作系统,还是学设计模式,或者刷算法题,总归是逃不过编程语言这一关的,代码毕竟还是要用编程语言来敲的。


在此之前,你已经学过了 C 语言,那么再学习 Java 就会轻松很多。拿 Java 中的 String 来说,C 语言里面是没有的,但 String 的底层结构是字符数组,这和 C 语言里面的 char 型字符数组是完全一样的。再比如说,Java 中引用的概念,和 C 语言中的指针概念是有一定的相似性的;还有,理解了 C 语言的方法传参为什么是通过值传递的,也就很容易明白为什么 Java 只有值传递没有引用传递。

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
硬核,学习 Java 的一点小建议(思维导图,建议收藏)