23篇大数据系列(一)java基础知识全集(上)(2万字干货,建议收藏)

简介: 23篇大数据系列(一)java基础知识全集(2万字干货,建议收藏)

正文


大数据时代已经到来


最近几十年,高速发展的互联网,渗透进了我们生活的方方面面,整个人类社会都已经被互联网连接为一体。身处互联网之中,我们无时无刻不在产生大量数据,如浏览商品的记录、成交订单记录、观看视频的数据、浏览过的网页、搜索过的关键词、点击过的广告、朋友圈的自拍和状态等。这些数据,既是我们行为留下的痕迹,同时也是描述我们自身最佳的证据。


2014年3月,马云曾经在北京的一次演讲中说道:“人类正从IT时代走向DT时代”。7年过去了,正如马云预想的那样,大数据时代已经到来了。


大数据工程师的工作内容是什么?


而大数据时代,有一个关键性的岗位不得不提,那就是大数据工程师。想必大家也会好奇,大数据工程师,日常是做什么的呢?  


1.数据采集 找出描述用户或对业务发展有帮助的数据,并将定义相关的数据格式,交由业务开发部门负责收集对应的数据。
2.ETL工程 对收集到的数据,进行各种清洗、处理、转化等操作,完成格式转换,便于后续分析,保证数据质量,以便得出可以信赖的结果。

3.构建数仓

将数据有效治理起来,构建统一的数据仓库,让数据与数据间建立连接,碰撞出更大的价值。
 4.数据建模 基于已有的数据,梳理数据间的复杂关系,建立恰当的数据模型,便于分析出有价值的结论。
5.统计分析 对数据进行各种维度的统计分析,建立指标体系,系统性地描述业务发展的当前状态,寻找业务中的问题,发现新的优化点与增长点。
6.用户画像

基于用户的各方面数据,建立对用户的全方位理解,构建每个特定用户的画像,以便针对每个个体完成精细化运营。



大数据工程师必备技能


那么,问题来了,如果想成为一名大数据工程师,胜任上述工作内容,需要具备什么样的条件?拥有什么样的知识呢?


分类

子分类 技能 描述

技术能力

编程基础

Java基础

大数据生态必备的java基础

Scala基础 Spark相关生态的必备技能
SQL基础 数据分析师的通用语言
SQL进阶 完成复杂分析的必备技能

大数据框架

HDFS&YARN

大数据生态的底层基石

Hive基础

大数据分析的常用工具
Hive进阶 大数据分析师的高级装备
Spark基础 排查问题必备的底层运行原理
Spark SQL 应对复杂任务的利刃

工具

Hue&Zeppelin 通用的探索分析工具
Azkaban 作业管理调度平台

Tableau

数据可视化平台

业务基础

数据收集 数据是如何收集到的?
ETL工程 怎么清洗、处理和转化数据?
数据仓库基础 如何完成面向分析的数据建模?
元数据中心 如何做好数据治理?
分析思维 数据分析思维方法论 怎么去分析一个具体问题?
排查问题思维 如何高效排查数据问题?
指标体系 怎么让数据成体系化?


四、为啥以Java开场


作为稳居编程语言排行榜前三的java语言,具有非常多的优秀特性,同时拥有庞大的类库生态和大量的开发者。Java语言在大数据生态体系中地位也是无可撼动,目前流行的大数据生态组件,很多都是用Java语言或基于JVM的语言(如Scala)开发的。


因此,要想玩转大数据,或多或少需要对Java有所了解。


五、本文的讲解思路


第1部分:基本概念及特性


这部分会花较大篇幅给大家介绍java中的几个很重要的基础概念,面向对象、类、对象、封装、继承、多态和泛型,一来给后续讲解中有示例代码的地方打个基础,二来让之前没怎么了解过Java的小伙伴对Java有个初步认识。


第2部分:初始化过程


主要讲述类(子类和父类)中各成员变量的初始化顺序。


第3部分:常见的集合及方法


主要简述Collection和Map两个接口以及各集合的常用方法。


第4部分:常用的字符串处理方法


这部分会对每种方法进行详细说明并通过示例帮助小伙伴们加深理解。


第5部分:日期处理方法


主要通过示例代码对最常用到的日期处理类java.util.Date、java.util.Calendar、java.text.SimpleDateFormat进行介绍。


第6部分:json的解析与操作


重点介绍了两点,一是java变量和json格式之间的相互转化,二是json对象与字符串的相互转化。


第7部分:正则表达式


讲述了正则表达式的概念、作用、基本规则,并给出了示例代码。


第8部分:异常处理


此处根据实际经验给大家总结下异常处理常遇到的几种问题。


第9部分:JDBC


主要是通过示例代码给出java连接数据库的操作步骤。


1、基本概念及特性


Java 是面向对象的高级编程语言,所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念,正所谓万物皆对象。


对象有以下特点:


222.jpg

咚咚咚,敲黑板!!!


以上图例中,第四个特点说到:对象都是某个类别的实例。借此,我们要引出Java中另外两个非常重要的概念,那就是类和对象。


类:


对某类事物的普遍一致性特征、功能的抽象、描述和封装。


对象:


使用 new 关键字或反射技术创建的某个类的实例。同一个类的所有对象,都具有相同的基础属性(比如人的年龄、性别)和行为(比如人的吃饭、睡觉),但是每个对象的具体属性值和行为表现会具有自己独特的个性。


举例:


老师是java中的一个类,一位24岁的、性别女、名字叫马冬梅的老师就是老师这个类别里对应的一个具体对象。


我们来看一下创建一个具体的java类和对象的代码框架是什么样子的:


public class Teacher {
    //属性:姓名、所教课程名、性别、年龄
    Stringname;
    StringteachClass;
    Stringsex;
    int age;
    publicvoid setName(String name) {
        this.name= name;
    }
    publicvoid setTeachClass(String teachClass) {
       this.teachClass = teachClass;
    }
    publicvoid setSex(String sex) {
        this.sex = sex;
    }
    publicvoid setAge(int age) {
        this.age = age;
    }
    publicTeacher() {
    }
    //方法:获得老师所教授的课程名
    publicvoid getClass(String name, String teachClass) {
       System.out.println(name + "老师所教授的课程是"+ teachClass);
    }
}


//创建老师类的一个具体对象
public class Main {
    public static void main(String[] args) {
       //new一个具体对象teacherA 
        TeacherteacherA = new Teacher();
       //具体对象的属性值
        teacherA.setName("马冬梅");
        teacherA.setSex("女");
        teacherA.setAge(22);
        //具体对象的行为:马冬梅老师教授的课程是生物
        teacherA.getClass(teacherA.getName(), "生物");
    }
}


ok,通过以上示例,希望大家对于java的类和对象有了一个初步的概念和了解。


那么,为什么这种所谓的面向对象的编程理念会得到大家的接纳和推崇呢?


因为面向对象程序设计有以下优点:


1. 可重用:它是面向对象软件开发的核心思路,提高了开发效率。面向对象程序设计的抽象、继承、封装和多态四大特点都围绕这个核心。


2. 可扩展:它使面向对象设计脱离了基于模块的设计,便于软件的修改。


接下来就针对Java的继承、封装、多态和泛型 4 个特性进行讲解,来了解一下它们是如何实现代码重用和扩展的。


1.继承


如同现实生活中的子女继承父母的遗产一样,在java中继承指的是子类继承父类的属性和方法。见以下实例:


9.png

4.png


大家有没有发现语文老师类和数学老师类里的属性和方法大部分是相同的,以上说到java面向对象编程的优点是可重用性和可扩展性,如何通过继承来实现重用和扩展呢?


那就是通过再提炼一个上层父类--老师类来实现,语文老师类和数学老师类再作为子类对其继承使用。


如下:


222.jpg

采用这种向上抽象方式,是为了将多个类的通用属性和方法提取出来,放在它们的父类中,避免同样的代码写多份(即为了实现复用),在子类中只需要定义自己独有的属性和方法,以继承的方式在父类中获取通用属性和方法即可。


//继承代码结构
public class Chinese extends Teacher{
    //定义自己独有的属性:工作内容
    Stringcontent;
    //定义自己独有的方法
    publicvoid writeModels(String name, string content) {
       System.out.println(name + "老师主要工作内容是"+ content);
    }
}


2.封装


封装的目的在于保护信息。

Java 提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的所有信息,私有的方法数据只能通过该类的成员代码来访问,这就可以确保不会发生不希望发生的事情。

封装主要优点如下:


222.jpg


那么,怎么理解封装实现了复用和扩展呢?


读者可以理解为所谓封装其实只是将属性和功能封装成类,并对类里的成员定义了不同的访问权限,最终还是通过与继承机制的结合实现的代码复用和扩展。


3.多态


所谓多态,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用的到底是哪个类中实现的方法,必须在由程序运行期间才能决定。即不修改程序代码就可以让程序有多个运行状态可以选择,这就是多态性。


上文是根据为啥这个特性叫做多态性的角度给大家解释了一下,如果从实际运用中最终看到的实际效果这个方面来总结,可以理解为,多态是同一个行为具有多个不同表现形式或形态的能力。


举个形象的例子:

现实中,比如我们按下 F1 键这个动作:
如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
如果当前在 Word 下弹出的就是 Word 帮助;
在 Windows 下弹出的就是 Windows 帮助和支持。


同一个事件发生在不同的对象上会产生不同的结果,可见,多态实现了很好的扩展性。


4.泛型


泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。


public class GenericTest
{
   // 泛型方法 printArray                        
   publicstatic < E > void printArray( E[] inputArray )
   {
      // 输出数组元素            
         for( E element : inputArray ){        
           System.out.printf( "%s ", element );
         }
        System.out.println();
    }
    publicstatic void main( String args[] )
    {
        // 创建不同类型数组: Integer, Double 和 Character
       Integer[] intArray = { 1, 2, 3, 4, 5 };
       Double[]doubleArray = { 1.1, 2.2, 3.3, 4.4 };
       Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
       System.out.println( "整型数组元素为:" );
       printArray( intArray  ); // 传递一个整型数组
       System.out.println( "\n双精度型数组元素为:" );
       printArray(doubleArray ); // 传递一个双精度型数组
       System.out.println( "\n字符型数组元素为:" );
       printArray( charArray ); // 传递一个字符型数组
    } 
}


结果如下


整型数组元素为:
1 2 3 4 5 
双精度型数组元素为:
1.1 2.2 3.3 4.4 
字符型数组元素为:
H E L L O


同一个方法,允许传入不同的参数类型,得到不同的运行结果,以此实现了代码的复用和扩展。


2、初始化过程


虽然本文讲解的绝大部分内容偏向应用,但对于初始化过程这种看上去有点涉及到底层原理的内容,考虑再三,还是要稍微提及一下,那是因为在实际工作中,经常发生因为对整个初始化过程的机制不了解而写出不合理代码,从而产生bug的现象。


本段会针对类的各成员的初始化顺序重点强调一下,这也是犯错最多且唯一我们能控制的地方,希望大家务必对此要有所了解。


话不多说,上实例:


class Father
{
   static{
          System.out.println("父类静态代码块初始化" );
   }
   {
          System.out.println("父类代码块初始化" );
   }
   private static void s=print();
   public static void print()
   {
          System.out.println("父类静态方法" );
   }
   public Father()
   {
          System.out.println("父类无参构造函数初始化完成" );
          show();
   }
   public void show()
   {
          System.out.println("父类show()方法" );
   }
}
class Son extends Father
{
   static{
          System.out.println("子类静态代码块初始化" );
   }
   {
          System.out.println("子类代码块初始化" );
   }
   private static  int i=1;
   private String s="子类私有成员变量" ;
   public void show()
   {
          System.out.println("子类show()方法:i=" +i);
   }
   public Son()
   {
          System.out.println("子类构造函数初始化完成" );
          System.out.println("子类成员变量初始化完成:s="+s);
          show();
   }
}
public class TestClassLoadSeq {
   public static void main(String[]args)
   {
          new Son();
   }
}


执行顺序:


父类静态代码块初始化
父类静态方法
子类静态代码块初始化
父类代码块初始化
父类无参构造函数初始化完成
子类show()方法:i=1  //因为创建的是son实例,所以父类里的show方法被初始化时,实际调用的是子类show方法
子类代码块初始化
子类构造函数初始化完成
子类成员变量初始化完成:s=子类私有成员变量
子类show()方法:i=1


在遇到初始化失败的相关bug时,通常错误提示不会直接指向有问题的那行。

因此,需要你对类初始化过程有所了解,这样才能快速定位到哪个环节最有可能出问题。




相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
21天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【4月更文挑战第5天】 在现代软件开发中,多线程编程是一个不可或缺的技术要素。它允许程序员编写能够并行处理多个任务的程序,从而充分利用多核处理器的计算能力,提高应用程序的性能。Java作为一种广泛使用的编程语言,提供了丰富的多线程编程支持。本文将介绍Java多线程编程的基础知识,并通过实例演示如何创建和管理线程,以及如何解决多线程环境中的常见问题。
|
1月前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
2天前
|
IDE Java 开发工具
Java从入门到精通:1.3.1实践编程巩固基础知识
Java从入门到精通:1.3.1实践编程巩固基础知识
|
3天前
|
Java
Java基础知识整理,驼峰规则、流程控制、自增自减
在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。
34 3
|
3天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
37 11
|
27天前
|
关系型数据库 Java 开发工具
Java入门高频考查基础知识9(15问万字参考答案)
本文探讨了Spring Cloud的工作原理,包括注册中心的心跳机制、服务发现机制,以及Eureka默认的负载均衡策略。同时,概述了Spring Boot中常用的注解及其实现方式,并深入讨论了Spring事务的注解、回滚条件、传播性和隔离级别。文章还介绍了MySQL的存储引擎及其区别,特别关注了InnoDB如何实现MySQL的事务处理。此外,本文还详细探讨了MySQL索引,包括B+树的原理和设计索引的方法。最后,比较了Git和SVN的区别,并介绍了Git命令的底层原理及流程。
32 0
Java入门高频考查基础知识9(15问万字参考答案)
|
27天前
|
存储 缓存 算法
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
57 0
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
|
27天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0
|
27天前
|
存储 Java 编译器
Java入门高频考查基础知识2(超详细28题2.5万字答案)
多态是面向对象编程中的一个重要概念,它允许不同类的对象对同一消息作出不同的响应。在具体实现上,多态允许一个父类的引用指向其子类的对象,并根据实际指向的对象的类型来调用相应的方法。在 Java 中,多态可以通过以下几种方式实现:在同一个类中,方法名相同,但形参列表不同,实现了多态。子类可以重写(覆盖)其父类的方法,实现多态。在父类引用中调用该方法时,根据实际指向的子类对象的类型来调用相应的方法实现。
40 0
|
1月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
94 3