2024年硬核,学习 Java 的一点小建议(思维导图,建议收藏)!,又到一年金三银四

惊喜

最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)

image.png

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

然后,我再来说为什么要学习 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 只有值传递没有引用传递。

大家可以先看看我之前整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。

超级硬核,GitHub 上标星 115k+ 的 Java 教程,详细介绍!

Java 中的知识体系可以分为 5 大块:

提一嘴,Java 语言基础的部分,也可以看我一直在连载的《教妹学Java》,通俗易懂,风趣幽默,目前已经更新 40 篇,目录如下

对于 Spring 来说,要能理解 AOP 和 IOC 这两个重要的概念;对于 SpringMVC,要能理清处理请求的流程;对于 MyBatis,要能掌握分页、延迟加载。

由于 Spring 的快速发展,它逐渐从一个轻量级的开发框架变成了一个“庞然大物”,越来越笨重,导致搭建一个应用程序的成本越来越高,于是 Spring Boot 就应运而生了,它只需要很少的配置就可以搭建出一个独立应用。Spring Cloud 利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。

三、数据库

SQL:CRUD 的核心就是利用 SQL 语句进行数据的增删改查,所以基础的 SQL 语句一定要熟,不要轻视。

MySQL:MySQL 是目前互联网公司用得最多的数据库,如果要选择一个数据库进行学习的话,建议学习 MySQL,要能掌握:索引、事务、锁、存储引擎、主从复制、分库分表等知识。推荐看MySQL Tutorial这个英文网站教程来系统的学习 MySQL。

Redis:由于数据量越来越庞大,为了减轻数据库的压力,一般都会使用 Redis 作为缓存,所以 Java 工程师一定要能掌握 Redis 的基本数据类型和持久化方式,还要能理解缓存与数据库一致性的问题,对缓存穿透和缓存雪崩也要有所了解。

四、微服务/分布式

消息队列:消息队列是分布式系统中重要的组成部分,当不需要立即获取结果,但并发量又需要进行控制的时候,消息队列就派上用场了。目前主流的消息队列有 RabbitMQ、Kafka 等。需要掌握的知识点有:

注册中心:注册中心本质上是为了解耦服务提供者和服务消费者,Zoopkeeper 在国内很长一段时间都是注册中心的一哥。

分布式框架:目前的主流就是 Dubbo 和 Spring Cloud,虽然我们经常拿它们两个做比较,但Dubbo 负责人曾说,Dubbo 未来的定位并不是要成为一个微服务的全面解决方案,而是专注在 RPC 领域,成为微服务生态体系中的一个重要组件。

分布式不是校招的必选项,如果你在这块不是很擅长的话,尽量不要在简历上突出,免得面试的时候面试官缠住分布式这块不放手,毕竟校招偏重的是基础,分布式懂一些就好,可以做一些练手项目,作为加分项即可。

五、工具

Intellij IDEA:建议直接上手 Intellij IDEA,用熟练后你会爱不释手的。

Git:版本控制系统非常重要!!!!!!即便你只是一个人在编码,它也可以帮助你创建项目的快照、记录每个改动、创建不同的分支等等。如果你参与的是多人协作,它更是一个无价之宝,你不仅可以看到别人对代码的修改,还可以同时解决由于并行开发带来的冲突。版本控制系统有很多,其中最突出的代表就是 Git。

Maven/Gradle:所谓的项目构建指的是完成工程发布流程需要的一系列步骤,包括编译、测试、打包、部署等,Maven/Gradle 是目前最流行的两款项目构建工具。

Docker:从 2013 年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业,它将应用程序与该程序的依赖,打包在一个文件里面。只要运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样,这样就不用再担心环境问题了。

六、实战项目

大学阶段,重视计算机基础的同时,一定要拉出来一个项目自己亲手体验一把,不要纠结这个项目多少人做过,你要做的是通过这个项目来巩固自己学过的那些基础知识。俗话说,“光看不练假把戏”,我要说的是“光学不练假把戏”,看似学会了很多知识,一上手自己就抓瞎,这是很多人容易犯的毛病。说白了,就是动手能力差。

我这里给你推荐一些牛逼的 Java 练手项目,文档都非常全面,非常适合自学。

1)电商秒杀

SpringBoot 完整电商系统 Mall:包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。

miaosha:秒杀系统设计与实现。

最后总结

ActiveMQ+Kafka+RabbitMQ学习笔记PDF

image.png

  • RabbitMQ实战指南

image.png

  • 手写RocketMQ笔记

image.png

  • 手写“Kafka笔记”

image

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

s+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值