全新·实战与面试结合
饥人谷Java体系课
2位老师有话说
无隅老师
本科、硕士毕业于北邮,曾任职于亚马逊中国研发中心;担任多年面试官,面试过100+候选人;社招拿美团L8, 阿里P7,头条2-2等offer,总包均过百万年薪
最初受谷里邀请来负责Java体系课程其实我是拒绝的,原因很简单,我觉得自己一直没做好准备。所以之前更多地是给同学们做分享,聊聊如何学习和一些职场趣事。后来很多同学和我交流都希望能学习后端的知识,找一份后端工程师的工作,也愿意跟着我一起完成这个过程。坦率地说,同学们的信任让我备受鼓舞,同时也很惶恐,我感觉无法一个人撑起这么多内容的课程,所以我邀请到了罗辑老师一同完成课程,目标很简单也很聚焦:帮助同学们高效地拿到Java工程师的offer。我的工作就是告诉大家学什么,怎么学,怎么学得快学得爽,帮助大家打下坚实的基础和知识体系。希望体系课程是一个能真正地帮助到大家的产品,而不是一个简单的知识点罗列的课程。
罗辑老师
本科、硕士毕业于北邮。某大厂Java技术专家,曾任职美团L8。拥有丰富的互联网项目开发经验,擅长MySQL调优,精通各类常用中间件(Redis、Kafka、ElasticSearch等),担任多年面试官。
我了解到我们这个班大多数同学是非计算机科班出身,我自己也是非科班出身转做的计算机。当年校招的时候,我原先的目标是华为的客户经理,但是面试没有通过,而且面试官对我说,我的性格比较内敛,不适合做市场类岗位。经过深思熟虑之后,转去找编程方向工作。当时的我对计算机有一些基础了解,但对Java基本是零基础。经过4个月的突击学习,我从一开始面试完全过不了,到能通过一些面试,最终拿到自己满意的offer。我想把自己那段时间的经验和学习方法分享给班里的同学们。利用3到4个月的时间,帮助大家从零基础到拿到自己理想的offer。
课程准备的经过
准备课程的第一步就是要定课程大纲。我们两位Java老师与饥人谷课程组进行了非常多轮的讨论,首先明确了我们的课程目标:花尽可能短的时间,帮助基础较为薄弱的同学们找到心仪的工作。找到好的工作是我们的核心诉求。那么整个课程就要给找工作服务。
面试会考查知识的广度和深度,在前期把精力投入到知识广度的建设上是收益最高的。我们会首先先把广度铺开,在最短的时间内让同学们建立起对Java基本认知,再在面试考察点上进行深度学习。因此,有一些知识点我们会在基础阶段讲到,让同学有先对其有一个基本认知,在进阶阶段会把这些知识点再拿出来进行深入讲解。
我们的原则是避免照本宣科,因为经典教程中的很多知识工作中极少用到,面试也很少会问。我们剔除掉那些艰深晦涩、面试中又不太会考察到的知识点,让大家有限的精力得以集中。
为面试服务,由面到点,由浅入深,知识点聚焦,基于这些原则我们制定了课程大纲。通过对课程内容的学习,帮助大家打好基础的地基,不仅教大家具体的知识点,更重要的是帮助大家建立知识体系,教会大家如何高效学习。
在确定完知识内容和知识范围后,我们觉得有必要给大家出一个专门的面试专题,汇总高频面试题知识点,逐一剖析,帮助大家高效地准备面试。当上面的工作都完成后,摆在我们面前的还有一个难题,也是极为重要的一部分内容,那就是实战项目。
我们经过了很多次的讨论,最终决定将我们的项目分成多种形式,分别为随堂动手实战项目,商业雏形项目,技术原理项目。
随堂动手实战项目是为了让大家更好地理解一些技术的核心原理,比如动手实现集合类,实现自定义注解,AOP实战等。商业雏形项目更多地是为了让大家适应平日里的业务需求开发,我们不单单只关注与增删改查的练习,还会告诉大家如何拆解系统,如何做一个基本的系统设计。同时会覆盖到真实的工作场景,要求大家编写单元测试,使用代码质量保证工具。
此外还需要考虑到性能问题,进行关键技术指标和业务指标监控,对核心接口进行性能分析测试与性能提升,帮助大家更好地胜任未来的工作。
除了上面介绍过的项目外,我们觉得有必要激发大家对技术原理的兴趣,所以会搞一些有趣的项目,比如如何实现一个生产级别的分布式锁,通过500行代码实现一个简易的KV数据库,实现一个短链接网址生成器等等有趣的纯技术项目。
整体而言,希望能够通过体系知识学习阶段(3 - 4个月),项目实战阶段(1 - 2个月),求职面试辅导阶段 (1 - 2个月)帮助大家拿到自己理想的offer。
我们为何要学习Java?
Java的优势
Java是目前最主流的后端编程语言,无论是中国还是美国,无论是大公司还是初创企业,Java都是使用最为广泛的后端编程语言,拥有充足的开放职位与发展空间。掌握了Java这项技能,就如同有了一本通行证,能让你在绝大多数公司找到一份工作
Java语言的学习生态非常成熟,非常适合零基础的同学快速上手,可以既兼顾实战又可深入底层原理
学会了Java,有了Java基础之后也可以快速学习转其他语言,例如go语言
市场前景
如果只看这些互联网大厂,的确大厂扩张脚步与速度在逐年放缓。但整个互联网、整个IT行业的规模还是在不断扩大。在信息化时代,各个行业都在进行数字化转型,国家政策层面也在号召产业互联网,工业互联网的发展,优秀IT人才的缺口还是在不断扩大。
在互联网圈盛传35岁年龄坎,我们认为这是整个行业处于野蛮发展阶段造成的。随着整个IT行业逐步度过初期阶段,发展模式逐步健康化,经验积累会越来越重要。中国的IT行业也会像欧美一样出现40、50岁仍活跃在一线的工程师,程序员会成为一个具有良好发展前景的终身职业。
课程详细大纲
一. 引子
1. 互联网公司全工种介绍
2. 职业发展路径
3. Java如何从0开始学习
4. Java程序员最小技术栈
5. 如何通过一场技术面试(国内/外企)
二. 前置知识准备
注:我们会分阶段完成这部分内容,让同学们尽快上手得到正反馈而不是纠结卡在环境配置等问题
1. IDE安装与Java环境搭建
2. git速学
3. github配置
4. Linux系统与常用命令
5. 网络基础知识(TCP/HTTP)
6. 其他计算机基础知识
体系知识学习阶段 (3 - 4个月)
三. Java 基础入门
【第1周 - 无隅】模块:语言基础
1. 开启第一个Java程序:如何打印Hello World
2. 变量与赋值
3. Java数据类型之基本类型详解
4. Java数据类型之引用类型介绍
5. 如何注释
6. Java中字符串相关操作
7. 其他常见字符串操作函数
8. 数组详解:初始化/遍历/多维数组
9. 赋值、算术和一元运算符
10. 关系运算符与条件运算符
11. 位运算与移位操作符
12. 控制语句:决策语句 - if语句
13. 控制语句:决策语句 - swich语句
14. 控制语句:循环语句 - for/while/do-while
15. 控制语句:分支语句
16. 控制语句:break和continue
17. 方法函数编写入门
18. 拓展:类型之间的强制转换与常见错误
四. Java 基础进阶
【第1周 - 无隅】模块: Java面向对象概念初探
1. Java面向对象概念初探
2. 神速理解面向对象
3. 类和对象究竟要关注什么?
4. 面向对象三大特性继承/封装/多态详解
5. 接口的定义和实现
6. 4大修饰符
7. 再谈方法函数编写
8. 面向对象实战练习
9. 面向对象知识大串讲
【第2周 无隅】模块:Java Collections 101
1. 为什么要用集合
2. Iterable接口
3. 数组列表ArrayList的使用和原理
4. 动手实现自己的ArrayList
5. ArrayList源码剖析
10. 链表LinkedList的使用和原理
11. 动手实现自己的LinkedList
12. HashMap的使用和原理
13. 动手实现自己的HashMap
14. HashMap源码剖析
15. 拓展:TreeMap的使用和底层原理
16. HashSet的使用和原理
17. 动手实现自己的HashSet
18. HashSet源码剖析
19. 集合框架体系简介
五. Java高级特性
【第3周 无隅】模块:异常处理
1. 异常机制初探
2. 异常分类
3. 异常执行过程分析
4. 如何处理异常
5. 如何自定义异常
6. try-with- resource怎么使用?
【第3周 无隅】模块:包装类与常见类
1. 自动装箱和自动拆箱机制
2. 动手实现自定义包装类
3. Math类介绍
4. Random类介绍
5. String/StringBuilder/StringBuffer详解
【第3周 无隅】模块:多线程初探
1. 为什么需要多线程技术
2. 进程和线程
3. 线程的生命周期
4. 启动线程有哪些方式
5. 线程池使用
6. 线程池工作原理详解
【第4周 无隅】模块:基础JVM介绍
1. Java虚拟机内存模型概念
2. 简单内存模型分析:程序执行过程内存分析详解
3. 类加载全过程详解
4. 深入类加载器
5. 字节码相关概念
6. 垃圾回收机制原理介绍
7. 分代机制介绍
8. 垃圾回收算法介绍
【第4周 无隅】模块:注解与反射
1. 注解101
2. 如何自定义一个注解
3. 反射机制详解
4. 反射与注解实战练习
六. Spring
【第5周 罗辑】模块:Spring入门
1. 互联网web应用架构
2. 认识Spring
3. 认识SpringBoot
4. Spring版Hello World
【第5周 - 第6周 罗辑】模块:Spring容器
1. Spring IoC容器
2. Spring Bean 装配
3. Spring依赖关系管理
4. Spring容器高级主题
【第7周 罗辑】模块:Spring AOP
1. AOP基础概念与思想
2. AOP的实现方式
3. Spring注解编程模型
4. Spring AOP 实战
5. Spring 常用注解讲解
6. Spring 常用扩展点讲解
【第8周 罗辑】模块:Spring 与数据库
1. Spring DAO
2. 使用 Spring JDBC 访问数据库
3. 在 Spring 中使用 MyBatis
4. Spring 事务管理
【第9周 罗辑】模块:SpringBoot 启动配置原理
1. SpringBoot启动过程
2. SpringBoot自动配置原理
3. 实战-自定义一个SpringBoot starter
【第9周 罗辑】模块:Spring MVC
1. Spring MVC 基本概念与体系结构
2. Spring MVC主流程-DispatcherServlet
3. 处理器映射器-HandlerMapping
4. 处理器适配器-HandlerAdapter
5. 拦截器-HandlerInterceptor
6. 异常处理-HandlerExceptionResolver
7. Spring MVC常用注解
8. 实战-SpringBoot登录模块开发
七. 设计模式
【第10周 无隅】
1. 面向对象基本原则SOLID原则详解
2. 类的六种关系详解
3. 最简类图构成
4. 教你如何画类图
5. 实战:用plantUML画类图
6. 设计模式详解:工厂方法模式
7. 设计模式详解:抽象工厂模式
8. 设计模式详解:抽象工厂模式
9. 设计模式详解:单例模式
10. 设计模式详解:建造者模式
11. 设计模式详解:观察者模式
12. 设计模式详解:责任链模式
13. 流行开源产品中设计模式的应用
八. Java高级进阶
【第11周 无隅】模块:Java 8 In Action
1. Java 8与函数式编程初探
2. Lambda表达式与函数式接口
3. Stream介绍与实战
4. 并行数据处理
5. 异步编程模型
6. Optional和默认方法实战
7. 日期与时间API详解
【第12周 - 第13周 无隅】模块:再聊多线程
1. Java内存模型(JMM)介绍
2. happen-before原则
3. violate关键字
4. 管程模型介绍
5. 深入synchronized
6. Locks In Java
7. 多线程的安全问题与解决办法
8. 线程的死锁问题
9. 线程通信
10. 生产者消费者模式实战
11. 常用并发工具类介绍
12. 拓展:AQS详解
【第13周 无隅】模块:Java I/O初探
1. IO流的概念
2. IO流的分类及其原理分析
3. 四大核心IO流详解
4. 对象序列化和反序列化实现与原理
九. MySQL
【第14周 罗辑】模块:从零开始MySQL
1. 什么是 MySQL
2. MySQL的安装和配置
3. MySQL基本操作
4. 索引的基本概念
【第14周 罗辑】模块:Innodb 存储引擎
1. Innodb存储引擎概述
2. Innodb索引
3. 事务
4. 锁
【第15周 罗辑】模块:高性能MySQL
1. 创建高性能的索引
2. 查询性能优化-Explain
3. 锁的调试
4. 分库分表
【第15周 罗辑】模块:MyBatis 技术
1. MyBatis 入门
2. MyBatis 与 Spring 整合
3. MyBatis 缓存原理介绍
4. MyBatis 插件机制介绍
十. 常用中间件
【第16周 罗辑】模块:分布式缓存 Redis
1. Redis基本架构与数据结构
2. Redis为什么那么快
3. Redis如何实现高可用
4. Redis如何实现高可扩展
5. Redis缓存替换策略
6. 缓存使用过程中的各类问题及其解决方案
7. 实战-使用Redis解决秒杀问题
【第17周 罗辑】模块:消息队列 Kafka
1. 消息队列概述
2. Kafka 介绍
3. Kafka 高可用架构设计
4. Kafka 高性能架构设计
【第17周 罗辑】模块:搜索引擎
ElasticSearch
1. ElasticSearch 入门介绍
2. Shard 分片原理
3. 多节点集群方案
4. ElasticSearch 并发控制原理
【第17周 罗辑】模块:分布式一致性服务 Zookeeper
1. 分布式相关理论 - CAP 与 BASE
2. ZooKeeper 入门介绍
3. Zookeeper Leader 选举原理
4. 一些基于 Zookeeper 的应用场景
项目阶段 (1 - 2个月)
项目名额4个,从5个项目库里任选4个项目
【项目1】多人协作平台(难度:入门)
涉及的主要技术:
Java/SpringBoot/IDEA/Maven/Docker/MySQL/MyBatis/Jenkins
我们会从真正从零开始搭建一个SpringBoot应用——一个多人在线协作博客平台,从无到有地完成开发、部署、持续集成,在此过程中你可以从零开始,熟练掌握上述技术。
我们会为你提供完整的前端代码和接口文档,你只需要严格按照接口文档实现后端接口即可。
开发流程和真实世界中的项目流程完全相同,只要你能完成本课程,你就拥有了真正的项目工作能力。
你不需要编写任何前端代码就可以获得一个高端大气上档次的、可以使用和展示的项目,如果你愿意的话,你甚至可以部署到自己的服务器上,向面试官现场展示。
【项目2】记账系统(难度:中等)
涉及的主要技术:
Java/SpringBoot/IDEA/Maven/Jacoco/CheckStyle/SpotBug/MySQL/MyBatis/Redis/Jenkins/JMeter/Prometheus/Junit/Mockito
在这个项目中,我们会从拆解业务需求开始,自己进行系统设计和架构设计,实现一个生产级别的后端服务,带领大家完成一个可以复用的基础web serivice框架,包含一系列的代码质量检测和单元测试覆盖。此外,会深入事务抽象和缓存抽象,帮助大家实战数据库事务和缓存功能。此外还会让大家真正地思考性能问题,进行关键技术指标和业务指标监控,对核心接口进行性能分析测试与性能提升,帮助大家更好地胜任未来的工作。在这个项目中我们也会带领大家尝试CI/CD理念,完成一个持续集成,持续部署的容器化在线服务。
我们会为你提供完整的前端代码和接口文档,你只需要严格按照接口文档实现后端接口即可。
开发流程和真实世界中的项目流程完全相同,只要你能完成本课程,你就拥有了真正的项目工作能力。
你不需要编写任何前端代码就可以获得一个高端大气上档次的、可以使用和展示的项目,如果你愿意的话,你甚至可以部署到自己的服务器上,向面试官现场展示。
【项目3】从零实现生产级分布式锁(难度:较难)
分布式锁历来都受到大家的关注。不管是工作中、面试中,分布式锁永远是个热门的话题。也许你已经知道什么是分布式锁和为什么要使用分布式锁了,那么你一定很急迫地想知道如何自己实现一个分布式锁吧。这个项目就会带领大家从0开始自己构建一个生产级别的分布式锁,真正从生产高可用的角度出发,考虑可重入,锁自旋,自动续期等特性,进行设计和源码实战,帮助你不再是纸上谈兵。
【项目4】500行实现KV数据库(难度:较难)
你了解NoSQL数据库吗?NoSQL是一项全新的数据库革命性运动,其拥护者们提倡运用非关系型的数据存储。那么我们作为后端工程师或多或少地需要使用和理解NoSQL,理解一个技术的最好方式莫过于自己动手编写代码实现其核心原理,这个项目我们会带领大家使用Java语言来实现一个基于LSM Tree思想的简易KV数据库,因为 LSM Tree 的实现要求对文件进行读写、锁的处理、数据查找、文件压缩等,所以编码过程中也提高了对 Java的使用经验,项目中也使用到了一些栈、二叉排序树等简单的算法,也可以巩固了基础算法能力。希望学有余力的同学可以适当给自己设定挑战目标,提升自己的技术水平
【项目5】短链接网址生成器(难度:较难)
短链接网址生成是一道非常经典的系统设计面试题目,短链接系统设计看起来很简单,但每个点都能展开很多知识点,也是在面试中非常适合考察侯选人的一道设计题。我们不希望大家只是简简单单地描述和堆叠技术名词,更希望大家能动手亲自设计实现一个短链接网址生成器,从系统设计开始,理解短链接系统的原理,实现常用算法和设计数据库表结构。当你亲自做过这样的一个系统后,相信你在面试中会发挥的更加出色
求职面试阶段 (1 - 2个月)
十一. 【无隅/罗辑】八股文面试合集
1. 高频面试真题详解
2. 面试技巧介绍
3. 面试准备和面试流程详解
4. 简历撰写指南
5. 行为问题辅导
课程技术栈
Java
Spring/SpringMVC/SpringBoot
MyBatis
MySQL
Redis
Kafka
ElasticSearch
ZooKeeper
Prometheus
Docker
JMeter
IDEA
Maven
CI/CD
Git
课程的学习模式
课程每周更新+知识讲解,录播无限期可看;
每周直播答疑和进阶讲解,及时反馈学习情况和困惑;
每个章节配套作业实战练习,包涵知识总结任务、代码实现任务、架构设计任务;
课后提供课程源码、录播供反复学习;
课程群内随时与授课老师互动,课程 1V1 作业批改指导,查漏补缺。
课程目标
助力零基础,3年以内工作经验的同学们高效斩获P6/P7级Java工程师Offer!
课程特点
以通过面试,胜任工作岗位为第一原则
贴近日常实际工作场景,聚焦真正高频使用的技巧与知识点
注重方法论与知识体系的构造
保姆级实战指导,带你手把手突破技术难关
课程适合人群
没有计算机相关基础,但仍想投身计算机行业
有一定基础,但缺乏完整Java知识体系
想要进入更高平台,但技术水平一直无法突破瓶颈
课程服务以及保障
小班教学,不超过30人!
提供一线互联网内推岗位(内推职位均由师兄师姐和在职老师提供);
入学 1 周内且在任务 5 内可无条件全额退款;
入学 3 个月内且在任务 30 内可申请退余款(扣除已消耗费用);
退款无任何手续费,退费承诺写入正式合同;
支持边付边学,每期还可支持花呗信用卡分期(非分期平台分期,无需贷款)。
如何报名
《新·Java体系课》原价 7999元,早鸟价 5988 元。(仅限前30人!)
可分期,分期多100手续费,详细联系班主任咨询哦~
报名&试看可扫码加微信咨询: xiedaimala03
小圆:xiedaimala03