文章内容来源:
本次学习内容根据拉勾教育开放的大数据开发高新训练营课程整理而来
为什么要报班?及 我得到了什么?:
我,是一个普通的大学毕业生,读的是一个211,但是属于倒数混进去的那种,大学也没有怎么学习校内课程,最后算是熬过了毕业,我很骄傲的一件事情是我的毕业设计是自己亲手完成的,前端布局是直接html+css+原生js实现的,登录界面用到了bootstrap,但是其他的前端框架,当时都没听过;后端用的SSM框架;数据库用的SqlServer。我做的这个东西,对懂技术的人来说,根本拿不出手,不过正是这个东西给了我内心第一份自信,对于当时的我来说,亲自做完毕设算是我给自己的一个挑战,我是担心自己出了社会,一文不值,所以逼自己搞了那个东西。后来我还把毕设放在了公网服务器上,希望以后可以不断迭代更新与维护,不幸的是,现在那个服务器早已经到期了,我也没再关注过当年的毕设自己用到的技术到底有多菜。
毕业2年多了,一直从事项目开发的工作,这个职位在市面热门岗位中并不多见,它不但不属于热门职位,关键待遇也不理想,有点安逸的亚子,当有意向换一份更有发展前景的岗位时,又发现技术完全拿不出手,Java也没有很熟练;Python报了班,但是后来因为工作项目中从来不用,再加上工作环境的安逸,学习动力越来越小,最终学了一半就提前结束了;大数据岗位的话,除了会点数据库知识,真正的大数据开发技术并没有学过,去参加面试,没有公司accept;唯一当下合适的是数据库开发,但是这个岗位和大数据开发的前景差距还是较大的,我也不指望自己能成为某个领域的顶级人物,同样的能力,能获得更高的待遇,得到更好的发展机会,同时还能保持与市面上热门岗位的距离,以后即便想切换其他技术方向也有优势(轻易不会换方向的),还有一部分原因是:不想让自己以前学过的Java、Python、前后端知识学而无用,所以最后决定选择走大数据开发方向。
其实我一开始并没有想到要报班学习,我自己在网上找了hadoop资料,先搭建了hadoop环境,开始练习提供的示例,也参考着网上教程学习过网站日志的分析。
同时这个过程中我还尝试找了相关的工作机会,沟通和了解了一些公司对该职位的要求后,最后去现场面试的只有一家,面试的过程也没有很难熬,面试官没有刻意问一些我没有深入接触和使用过的Java知识,比如多线程啥的,而是问的我自己项目的一些事情,包括项目的开发细节是否全部清楚;项目上线后出问题一般都是什么原因导致的;项目中遇到的比较难解决的问题是怎么应对和解决的;如果要实现一个xx功能,是否可以实现,你会如何实现......第二个面试官考察综合能力的,面相慈善和蔼,看不出她的态度和心理是否有变化,其中问到了学历、高考成绩、大学学习情况、大学获奖情况等等证明自己最近几年学习能力的东西,我几乎都没有优势,最终开开心心的去,开开心心的回来,然后就简简单单的被刷掉了。
当我面试完有了结果后,我对自己严重失去了信心,最可怕的不是单纯的失去信心,而是我根本没有实力去竞争那个岗位,说通俗点就是,我暂且不配。后来那几天我又开始在工作不忙的时候看一些相关的资料和视频学习。但是学着学着,越来越感觉自己学的这些东西好像并不能保证几个月之后我可以找到一份满意的工作,因为我分析之后发现自己抽空闲时间学习存在很多干扰因素和不确定因素:
- 每天工作任务不确定,也就是工作时间能匀出多少时间来学习不确定;
- 每天的工作状态和心情不固定,有可能状态不好导致没心情学习了;
- 虽然下班一般不晚,但是下班时间通常都很难学习到很晚,看一会视频就觉得没状态了,回家娱乐放松了;
- 还有双休日,这个对于我来说应该算是非常宝贵的学习时间了,但是我本身自控能力就不强,周末也没有朋友叫着一起学习,所以周末几乎很少学习
- 还有很重要的一点,工作环境很安逸:身边没有技术大佬指点和鞭策,没有学习伙伴互相鼓励与交流,工作项目没有太难的技术需要学习,都是在用已经会了的东西不断重复使用
- 本身对大数据方面的知识就知之甚少,当我自己借助网路学习时,看到不同版本的学习路线,学习图谱等等,也是让我一头雾水,我不清楚我要成为一个合格的大数据开发人员,必须要准备的东西都有哪些,可以作为加分项的东西有哪些,哪些东西没有必要现在学习...我只能选择公共部分/基础部分 先去学习
- 我当前的处境,可能没有太多时间留给我根据自己的状态慢慢去学习,我迫切的想早些换一份真正的编程类技术工作,并且拿到理想的待遇,让自己有个更自信的生活,接触到更多正能量和积极的圈子。但是以我目前的自学能力结合上述情况来看,我很难确定需要花费多久能学完网上收集的大数据开发的知识,也不确定我自以为的学完,是否足以找到一份满意的工作,是否有公司会愿意接受毕业多年,技术处在低端水平的,还没有大数据项目经验的开发人员
所以我开始关注一些大数据课程,最终选择了拉勾教育的大数据开发课,就目前的学习情况来看,拉勾的服务和课程内容都是很满意的,也有了一个在线的学习圈,学习的时候也有了目标,心里很踏实,工作的时候状态也比之前好了很多,因为不会再时不时焦虑担心下一份工作能不能找到的问题了。
我本人对学习并么有特别感兴趣,只是因为在这个领域工作,我明确的知道不学习就意味着退步,而且这个行业的前景是很好的,也就是说现在月薪1万,可能10年后就是月薪50万,但是这些都是在不断学习之后 才能有的结果,单纯的靠积累项目经验,被动式学习是很难达到那个期望水平的,毕竟谁都想把自己的生活过好,找到自己喜欢的那个她,而不是平平淡淡过下半辈子,工作生活总是因为钱不到位而忧郁焦虑,甚至连女朋友都是将就找的。
在这里我会记录下来,这次在拉勾教育的课程学习中,我有了哪些改变,也可以让我以后,回头看自己的成长经历时,可以更好的感受到那个阶段自己的处境和状态。
- 工作日的空闲时间利用率从之前自学的20%变成目前的60-70%
- 双休日的时间利用率从之前10%变成40%-60%
- 工作的状态和心情变好了一些,不再因为发愁下一份工作而影响当下的工作
- Java核心基础又重新学了一遍,对Java知识有了一个更系统和全面的认知
- 对以后的工作和生活充满了信心,生活态度变的比以前更积极了,是学习的充实让我找回了自信,给了我充足的底气
- 不会再把时间都浪费在找女朋友,讨好女孩上面了,也不再会因为女孩的态度而影响心情了,在女孩面前也不再那么不自信了
- 心思多数都转移到了听课,记笔记上面,减少了上网购物的时间,每月开销相对减少了一些
这些变化是开课到现在在我身上体现出来的,因为后面还有几个月的课程内容要学习,所以还有一段路要坚持走完,不过我已经不再担心自己会打退堂鼓了。因为朝前走已经是一个既定的现实,拉勾课程作为我选择的助推剂,通过它的服务和态度让我更加感受到前进的渴望与希望。
特此声明:
我没有刻意的拉拢大家报名拉勾课程,毕竟我不是来做托的,这是我自己的博客,我希望记录的是我自己的过往心路历程,只是恰好是拉勾课程在此时帮助到我了,我希望记录下这些东西,客观的表达一些课程的效果,以及我的变化,同时也可以帮助到那些和我处境一样并且看到这篇文章的陌生朋友们。
文档说明:
1、本文档只记录了拉勾大数据库开发课程中的第一个阶段(JavaSE阶段),第二个模块(Java面向对象编程)的知识点,未包含全部Java知识
2、标注背景色的为重要知识点(会在最下方单独拎出来展示)
目录
-
图片版(内容不全,看不到Xmind中的备注内容)
-
Xmind文件地址(码云gitee):
访问这里后,点击下方下载即可(需要用XMind工具打开,可以看到所有的内容)
-
重要知识总结
1、类和对象以及引用
1.1 类
简单说就是分类,是具有相同特征和行为的多个对象的抽象描述。
在Java语言中体现为一种引用数据类型,其中包含了描述特征/属性的成员方法,以及描述行为的成员方法
1.2 对象
指现实生活客观存在的实体,在Java语言中,万物皆对象,对象体现为内存空间中的一块存储区域
1.3 类的格式
class 类名{
类体;
}
//示例
class Student{
}
1.4 类名命名规范
当类名包含多个英文单词时,每个单词首字母大写(大驼峰命名法)
1.5 成员变量的定义格式
数据类型 成员变量名 = 初始值;
//示例
String name = "JerrifyJack";
1.6 成员变量的命名规范
由多个英文单词组成时,从第二个单词开始每个单词首字母大写(小驼峰命名法)
1.7 对象创建的格式
new 类名();
//示例
new Student();
当一个类定义完毕后,可以使用new关键字进行创建该类的对象,这个过程叫做类的实例化。
创建对象的本质就是在内存空间的堆区申请一块存储区域,用于存放该对象独有的特征信息。
2、成员方法
2.1 成员方法-语法格式
返回值类型 成员方法名(形参列表){
成员方法体;
}
//示例
String getSex(int flag){
if(flag == 0){
return "男";
}else if(flag == 1){
return "女";
}else{
return "不存在此性别";
}
}
2.2 成员方法-命名规范
由多个英文单词组成时,从第二个单词开始,每个单词首字母大写(小驼峰命名法)
2.3 成员方法-各要素讲解
返回值 | 主要是指从方法体内返回到方法体外的数据内容 |
返回值类型 | 指返回值的数据类型,可以是基本数据类型,也可以是引用数据类型 |
return关键字 | 在方法体中使用return关键字可以返回具体的数据内容并结束当前方法 |
void类型 | 当方法不需要返回任何数据时,返回值类型写void即可 |
形式参数 | 将方法体外的数据内容带入到方法体内部 |
形参列表 | 多个形式参数组成的列表。 |
形参列表-语法格式 | (数据类型 形参变量名1,数据类型 形参变量名2) |
//示例-形参列表
public void show(String name, int age, String phone, int birthday){
}
2.4 成员方法-调用格式
格式 | 引用变量名.成员方法名(实参列表) |
注意1 | 实参列表主要用于对形参列表进行初始化操作,因此参数的个数、类型以及顺序都要与形参保持一致。 |
注意2 | 实参可以传递:直接量、变量、表达式、方法的调用等 |
//示例
Student student = new Student();
student.show("张飞", 25, "18213452765", 19901012);
2.5 可变长参数
格式 | 返回值类型 方法名(参数类型... 参数名) |
注意1 | 方法参数部分,指定类型的参数params的个数是可以改变的,也就是0~n个。 |
注意2 | 一个方法的形参中最多只能有一个可变长参数,并且需要放到参数列表的末尾 |
//示例
void show(int num, String... params){
}
2.5 成员方法-传参过程分析
class Message{
public static void main(String[] args){
Message m = new Message();
int a = 5;
int b = 6;
int red = m.max(a,b);
}
int max(int ia,int ib){}
}
//不讨论对象的创建过程,只分析成员方法的执行过程
1、为main方法中变量a、b、res分配空间并初始化
2、调用max方法,为max方法的形参变量ia、ib分配空间
3、将实参变量的数值赋值到形参变量的内存空间中
4、max方法执行完毕后,形参变量ia、ib空间释放
5、main方法的res变量得到max方法的返回值
6、main方法结束后释放相关变量的内存空间
3、构造方法
3.1 格式与特点
格式 | 见下方代码块 |
特点1 | 方法名与类名相同 |
特点2 | 没有返回值类型 |
class 类名{
类名(形参列表){
构造方法体;
}
}
//示例
Student(int age, String name){
this.age = age;
this.name = name;
}
3.2 默认构造方法
当类中没有任何构造方法时,编译器会自动添加一个[无参空构造方法],叫默认/缺省构造方法。
若类中定义了构造方法,则编译器不会在提供任何形式的构造方法。
3.3 成员变量的初始化
用默认构造方法,实例化对象后得到的成员变量的初始值都是默认值(null/0/false等)。
用自定义构造方法,可以在实例化对象的时候初始化成员变量
public class Person{
private int age;
private String name;
//无参构造函数
Person(){}
//自定义有参构造函数
Person(int age, String name){
this.age = age;
this.name = name;
}
public static void main(String[] args){
//声明对象的时候,使用有参构造函数,初始化成员变量
Person p1 = new Person(30, "张飞");
Person p2 = new Person(20, "关羽");
//创建对象原理分析
//Person p1 会在栈区为变量p1申请一块空间
//new Person(30,"张飞") 会在堆区申请一块空间,p1指向该空间地址
}
}
4、this关键字的使用方式
4.1 使用方式1(重中之重)
//当局部变量名与成员变量名相同时,在方法中会优先使用局部变量(就近原则)
//若希望使用成员变量,则需要在成员变量的前面加上this.前缀,明确要求该变量是成员变量
//如果方法形参不存在同名参数,不需要this
private String name;
void show(String name){
System.out.println(name); //打印形参变量name
}
private String name;
void show(String name){
System.out.println(this.name); //打印成员变量name
}
4.2 使用方式2(重点)
//除了可以调用成员变量和成员方法,this关键字还可以作为方法的返回值
Student getStudent(){
return this;
}
4.3 使用方式3(了解)
//在构造方法第一行可以使用this()方式调用本类中其他构造方法
Point(int x, int y){
this.x = x;
this.y = y;
System.out.println("有参构造方法");
}
Point(){
this(5, 6);
System.out.println("无参构造方法");
}
5、封装
5.1 概念
通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无论是编译阶段还是运行阶段都不会报错或给出提 示,但是与现实生活不符
为了避免上述错误的发生,就需要对成员变量进行包装处理,来隐藏成员变量的细节以及保证成员变量数值的合理性, 这种机制称为 封装
5.2 实现流程
//1、私有化成员变量,使用private关键字修饰
private String name;
private int id;
//2、提供公有的get和set方法,并在方法体中进行合理值的判断
public void setId(int id){
if(id < 0){
System.out.println("学号不合理!");
return;
}
this.id = id;
}
public int getId(){
return id;
}
//3、在公有的构造方法中调用set方法进行合理值的判断
public Student(int id, String name){
setId(id);
setName(name);
}
6、单例设计模式
饿汉式(推荐) | 先声明一个单例对象赋值给static的成员变量,获取单例对象时在公有方法中直接返回 |
懒汉式 | 先声明一个空值给static的成员变量,获取单例对象时在公有方法中再创建单例对象返回 |
6.1 饿汉式(推荐)
public class Singleton {
//3、创建一个static变量,指向单例对象,使得该类共享一个对象
private static Singleton singleton = new Singleton();
//1、私有化构造方法
private Singleton(){}
//2、提供公有get方法
public static Singleton getInstance(){
return singleton;
}
}
6.2 懒汉式
public class Singleton {
//创建空内容变量
private static Singleton singleton;
//私有化构造方法
private Singleton(){}
//需要时创建对象
public static Singleton getInstance(){
if(null == singleton){
singleton = new Singleton();
}
return singleton;
}
}
7、继承
7.1 概念
多个类之间有相同的特征和行为时,可以将相同内容提取为一个类作为父类,子类与父类之间构成继承关系。
Java中extends关键字表示继承关系。
public class Worker extends Person{}
//Person类: 超类、父类、基类
//Worker类:派生类、子类、孩子类
7.2 特点
特点1 | 子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承,只是不能直接访问 |
特点2 | 无论用何种方式构造子类的对象时,都会调用父类的无参构造方法,来初始化从父类继承的成员变量,相当于在子类有参/无参构造方法第一行添加super()效果 |
特点3 | 使用继承必须满足:子类 is a 父类,不能滥用继承 |
特点4 | Java中只支持单继承,不支持多继承 直接子类、间接子类:A的子类A1属于A的直接子类、A1的子类A11属于A的间接子类; 直接父类、间接父类:A1属于A11的直接父类,A属于A11的间接父类 |
7.3 方法的重写(Override)
重写场景 | 从父类继承下来的方法不满足子类的需求时,就需要在子类中重新写一个与父类一样的方法来覆盖父类中继承下来的版 本,该方式叫做方法的重写(Override) |
特点1 | 一般用@Override注解,说明注解下方代码是对父类方法的重写,添加注解后若没有构成重写则编译会报错,这样可以避免运行时一些不必要的问题出现 |
特点2 | static的方法可以被继承,但是不能重写。 如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写 |
7.4 方法重写原则
原则1 | 方法名相同、 参数列表相同、 返回值类型相同(从Java5 开始允许返回子类类型,即父类返回父类类型,子类返回子类类型) |
原则2 | 子类方法的访问权限不能变小,可以相等或变大 |
原则3 | 要求子类方法不能抛出更大的异常(异常机制) |
结语:
以上是课程讲师,关于JavaSE阶段一模块二所总结的,相对较重要的知识点内容,后续学完新的模块知识,涉及到Java相关的新内容比较重要的部分也会追加到此文中。
本人写作水平尚浅,文章若有不当之处,欢迎大家指正,也欢迎大家共同探讨关于Java知识的问题, 非常期待交到更多热爱学习的朋友,一起学习与成长 ^-^