Java基础知识

Java中常用算法:冒泡、选择、快速

冒泡:两两比较,每一轮(0~length-i)挑出一个最值,并将其移除,循环遍历1~length

选择:外面定义从0~length-1,先选定一个最先面的下目标作为最小下标,将其所对应的值逐一与其他比较,如果有人小于这个值,将其下标交换位置,一轮下来,如果最小下标指向的值不再是刚定义的值,就将其所对应的值交换位置,循环遍历  里面循环是i+1~length

快速:先选定一个值作为中间值,如果比这个数值小的放在左边,比这个值大的放在右边,再分别从左、右条一个作为中间值递归遍历

树:二叉树中的中序遍历:顺序就是在地面上的投影

红黑树就是二叉树的一种,treeset就是利用这个原理  去重加排序

链表:写快读慢,随机写,读的时候要从头开始遍历,节点的引用指向下一个节点的对象

数组:写慢读快,写的时候要遍历下标,将其放入,读取的时候直接根据县标找到指定的值

Hashmap:

原理:是链表和数组的结合体,对于不同hashcord的key以数组的形式存放,对于hashcord相同的key以链表的形式存放。Hashset基于hashmap

数组的长度是16,装载因子是0.75,对key取hash值,莫以集合长度,如果key的equals相同,则将其value值覆盖,如果不同则追加(放入链表)。

读的时候对key取hash,找到数组中对应的位置,再比较equals方法找到对应的key所对应的value

当集合的长度达到0.75*16=12时,进行对集合进行扩容:创建一个新集合是原来数组长度的两倍,并将原来的数据从新取hash移动到新集合中。

Stringbuffer:现成安全,stringbuild:现成不安全,String:线程安全,不可变的,String的值会先放在常量池中,如果下一次再创建时,先从常量池中查找是否有对象的值,如果存在将将其索引指向常量池中的值,如果不存在则创建,并将值放在常量池中。 String是被final修饰的不能被继承。String的本质是char类型的数组

数组实在内存里一系列连续的存储空间,有下标,查询效率快

List集合的本质是数组,长度不固定,可以扩展

集合排序,让集合中的对象实现comparable接口(和别人比较)或者compartor接口(和自己比较)然后调用collections是sort方法

阻塞队列:多线程环境下,当队列中没有空间时,生产者暂时停止生产,当队列中没有数据时暂时停止消费,提醒生产。就是作为缓冲区,解耦提高性能。

打比方说,卖电影票,生产者生产的票放在前台卖,消费者从前台买票,当生意不好时,票卖不出去,前台提醒生产者暂时不要生产票,当处于热季时,生产的表不够消费,让其等待,通知生产者生产。

线程池:不用创建和销毁线程,提高性能。获取线程

有固定数量的线程池(Fied)、带着缓冲区的线程池(cached)、带着任务调度的线程池(scheduled),可以设置线程执行的优先级。一个线程的线程池(single)

数据库连接池就是获取连接。Druid 性能好,稳定

设计思想都是:减少资源的频繁创建于销毁。、

线程join,将线程的并行执行变成串行执行。

在共享变量上加volatile关键字,告诉编译器针对此共享变量,不进行编译。从而保证线程安全

进程中可以有多个线程,进程之间没有共享内存。

高并发:好多人同时欧一件事

Web中的高并发出现在HTTPserver与数据库连接:

数据库:

使用缓存、Redis是基于内存的keyvalue形式的菲关系型分布式数据库缓存,策略使用的是lru(最近最少使用,长度固定)

数据库连接池、尽量接受减少数据库连接

表设计、建立合适的索引

SQL优化:避免三表以上关联、两表join小标放前

随机读写表:randomAccessFile

序列化:objectOutputstream,不能跨平台、将对象从内存中存入网络\磁盘

反序列化:objectinputstream,把对象从网络、磁盘中读到内存

设计者模式:

单例模式,保证只能有一个实例,懒汉式:当第一次调用是实例化。饿汉:在类初始化时,就已经自动的实例化自己。---防止频繁创建对象导致oom(没存溢出)

适用于:创建对象时,消耗大量资源

工厂模式:我们在创建对象时,直接从工厂中取对象。屏蔽了底层实现。解耦

适用于:Spring框架

动态代理:当我们项调用一个接口,我们把调用接口的方法和参数通过一个代理传递对方,代理通过反射来实例化这个接口的实例,并且invoke这个接口实例。

构建者模式:

对象的参数有很多,调用的参数个数又不固定。使用构建者模式就不用再过多的构造方法,防止代码冗余。

Web服务器:Tomcat、NGINX:静态代理服务器,不处理业务逻辑,负载均衡、地址分发支持高并发、

Spring IOC:依赖注入,也叫做控制反转,

Aop:面向切面编程

事物:一些业务的一次操作作为一个事物,要么同时成功,要么同时失败。

ACID:原子性、一致性、隔离性、持久性

Orm:对象关系映射。

Jpa:java持久层的api,是一种接口、规范,使用注解的方式来配置数据库操作,不用自己实现service只需要继承接口,屏蔽了底层实现,节省代码量。

Mvc:model---view----controller

注解本身不做任何事情,只是像xml文件一样起到配置作用。注解代表着某种业务意义,注解背后的工作原理类似于源码实现。

数据库:MySQL、Oracle

MySQL:存储数据量不大,支持事物,主键可以自增长

Oracle:存储数据量比较大,支持高并发,主键自增要使用序列sequence

Union all:直接连接,获取所有值

Union:取唯一值,union all+去重

数据库优化:

索引优化:尽可能将经常查询的两件做为索引

SQL语句:

尽可能避免select *

Where代替having,where执行速度快

Where执行的循序是,从下至上的

尽可能命中索引,

避免三表关联。

Union、in代替or

使用exists代替in

数据库引擎:Innodb支持事物

数据库事物隔离级别:

未提交读:数据还没有提交到内存中

提交读:出现幻读,两次读取的结果不一样,加了行锁-在读的时候在中间写入数据了

可重复读:乐观锁=行锁加区间锁,可以并行读,串行写

串行:悲观锁:顺序读写—串行读、串行写

Hadoop

组件:mr、hdfs、yarn

Hdfs 进程:

Namenode:保存元数据,元数据包括namespace(目录结构)、blockmap:文件所在的机器地址  资源管理、任务调度。

Datanode:任务的具体执行者,存放数据

Secondaryname:用于存放于增量数据合并成一个新文件发送给namenode

减少hdfs开启时间。

Yarn:

ResourceManage:监控节点状态、分配任务、控制整个系统

NodeManage:

负责执行计算任务

APPmaster:管理一个任务、具体任务调度者

Hadoop集群的搭建:

在一台机器上下载安装jdk、hadoop,编写配置文件制定各个进程所在位置,以及制定namenode、dataname,节点之间配置免密登录,通过scp发送jdk、hadoop,以及配置文件。在主节点上执行hdfs-format namenode 命令格式化,start-hdfs.sh 开启集群,通过jsp测试查看。

资源调度算法:

FIFO,先进先出—hdfs

公平调度:每个任务执行一段时间,交替执行

能力调度:基于时间片轮回,根据每个任务需要的资源,分配相应的任务。---yarn

MapReduce的流程:

input---->split---->map------>shuffer------>reduce

Mr数据倾斜:部分reduce节点上的key过多,执行数据过慢,导致整个任务执行的慢。

随机数+key

Hadoop rpc通信:

Hdfs读写原理:

客户端项namenode发出请求,namenode查看数据存放的快信息,将地址发送给客户端,客户端根据地址找到数据的指定位置读取数据。读取完成之后DataNode向namenode汇报情况。

客户端项namenode发送写请求,namenode读取快信息,开始分配块地址,并将理想的状态的节点位置返回给客户端,客户端通过rpc向DataNode串行写数据。写完之后,会把存储信息反馈给namenode。

Ha:通过ookeeper故障切换

Hadoop优化:

通过优化算法Gzip算法、合并小文件,减少namenode的内存、机架感知、本地读。

Mr优化:

减少reduce任务数,减少rpc通信

自定义分区。

Hive的原理:

Hive屏蔽的底层的mr实现。元数据存放在其他数据库,数据存放在hdfs。

Hive优化:

大小表join时,小表放在前面,hive会将小表放入内存,提高效率

在map端进行join,

减少job数

Hive自定义函数,

实现udf重写evaluate方法,maven打包上传,add jar 将java中的类映射到hive函数自定义中。

Hive内外表:

外表:数据并没有移动到自己的数据仓库中,也就是所外表的数据并不由自己来管理。只有使用权。

内部表:具有数据的所有权。

Hive数据倾斜:

配置项,还是解决mr的数据倾斜。

大小表join时,将小表放在前面,加载到内存中,减少资源内存

合并小文件,尽可能在map端join---减少reduce数

Hive中的sort By 不是全局的,数据进入reduce端之前进行排序

OrderBy:全局有序,只有一个reduce

分区:分区依据的字段不是表中的,有这些维度—地区、时间;查询是按区查询,优化查询

分桶:创表时,桶的个数就固定,对表中的字段进行分桶,桶内按字典排序,提高计算性能,防止数据倾斜。

数据厂库:

复制层:表示的是将数据复制过来,不改变数据结构

原子层:3NF,维度表----字段少=id+内容

汇总层:提高性能

展示层:计算结果

好处-----方便,好维护,便于管理

Hbase原理:

数据节点Regionserver下面有多个region,每个region存放hbase表里若干个列簇的数据,最终数据按照hfile方式存储在hdfs上。Hbase自身存储的有元数据表mate(region存放在那台机器上)和root(里面是一个表有哪些region),这两张表的元数据存放在zookeeper上,各个节点时间同步。

Rowkey设计原理:

  1. 不宜过长,因为数据持久化文件hfile中是安装keyvalue形式存储,key=rowkey+列簇+列,如果过长极大的影响hfile存储效率。
  2. rowkey尽可能与业务逻辑相关,将经常放在条件里面的字段作为rowkey,因为只有rowkey有个索引,尽可能命中索引。
  3. rowkey散列,负载均衡,防止写热点,取hash、反向rowkey

hbase优化:

1.预分区,创建表时,先指定若干分区,防止写热点

2.创建二级索引,1.利用Phoenix直接创建二级索引,2.使用协处理器observer,在写入数据之前,创建二级索引-----索引的索引,把rowkey与列簇数据的反向映射创建索引,检索时线检索这个索引,找到对应的rowkey,再根据rowkey查询数据。

3.分页,指定一次查询数量,批量查询

4.Redis缓存,将一些常用的数据放到缓冲,先查缓存,再查hbase。

Hbase优点:

查询和写入数据快以顺序读写还随机读写。将文件先缓存到menstore中在里面排序,再并将其记录日志保存到hdfs中。

Kafka:分布式消息队列,组成部分有producer用来获取数据,并发送topic主题、broker(服务器)、consumer消费之前将消息存放在中间服务器中,

Kafka分区:

Kafka将topic从物理上把broker划分成一个或多个分区,默认是hash分区算法。

创建分区,相当于增大了并行度。

为了更好的负载均衡、消息的顺序性。可以发送时指定分区。

日志保存策略配置:由于写入了海量数据之后,占用大量磁盘空间,如果不定时清理,可能磁盘空间不够用。Kafka默认保存7天。

Kafka数据丢失与数据重复

Produce:

设置ack=all,设置幂等—多次重复操作的效果与一次操作的效果一样。

幂等,数据发送给每个分区时,将数据做一下标记,当再次发送数据时,如果该分区有此标记数据则不再发送。

Consumer:业务逻辑与偏移量不是一个原子操作。

将业务逻辑与偏移量的提交写在同一事物中,保证他们要么同时成功,要么同时失败。并且保存的结果与偏移量在同一个地方,保证能够回滚。

Sparkstreaming与kafka整合,如何保证数据不丢失。

Sparkstreaming里面使用direct,并手动提交偏移量。

Zookeeper在kafka中起到的作用:每个topic又可以划分多个分区,没每个分区存储在一个独立的broker上,所有这些topic与broker的对应关系都有zookeeper来维护。分区的leader 与follower的故障切换。

Kafka的特点:吞吐量大,主要用于大量数据的处理。

Flume:一个分布式的日志采集工具

Sqoop:一个关系型数据库与大数据集群之间的数据迁移工具

Redis:一个基于内存的菲关系型数据库,一般讲热点数据写在Redis中用来提升性能

Java:面向对象编程,Scala是面向对象编程又是面向函数式编程。

Scala中的函数是一个对象,可以作为参数传递。

Spark

Sparkcore sparkstreaming sparkSQL

Rdd:弹性分布式数据集。

本质上是一个可容错的之都的分区记录集合。

每一个计算的阶段设置一个stage,然后所有的stage会生成逻辑的有向五环图,当触发action的时候,才会按照DAG进行计算。

每个分区的每次transformation称为一个task。

窄依赖:子rdd的一个分区依赖于父rd的一个分区,本地执行,不经过网络通信。

宽依赖:子rdd的一个分区依赖于父rd的多个分区,shuffle操作,需要网络通信。

Transformation:表示rdd的一次计算,生成的也是rdd,只记录不操作。Rdd与rdd之间的转换关系称为血缘(linkage)。

Action:将rdd转化成飞rdd保存到hdfs,触发job的执行。Collect,saveastaxtFile

Rdd常用函数:

Sc.parallelize

Reduce 、reducebykey、groupbykey

Spark优化

1.使用kyro序列化

2.高性能算子:mappartition—transformation

Foreachpartition---action

3.共享广播变量:broadcost

4.增大shuffle并行度。

数据倾斜:

  1. 聚合:将key加随机数---聚合----取前缀----再聚合
  2. Join操作:左表加前缀,右表扩充n倍。

将相同的key放在一个节点上。

Rdd是基于内存的数据集合

Mr:是将数据雷击写到磁盘上,完了再统一进行reduce

Rdd转化成datafrom---自定义case class ,加隐士转换todf

普通的rdd里面没有元数据。

Df是一种特殊的rdd,主要用来操作关系型数据库数据,每个字段都有字段属性和字段描述。

Dataset是rdd+schema提供了面向对象的方式来操作数据。

窗口计算:sparkstreaming中将多批数据化成一个区间,区间按照约定好的时间滑动,通常用来计算一段时间的数据。

有状态计算:updatastatusbykey

设置checkpoint,实现updatestatebykey

Acc:可变的,累加器

用于统计处理的条数,进程间的

Broadcast:广播变量,不可变的,提高性能。

不能广播rdd其他都能广播。

Rdd的本质就是一个list集合。

大数据面试总结(二)相关推荐

  1. 大数据面试之hive重点(二)

    大数据面试之hive重点(二) Hive SQL转化为MR的过程? 可回答:1)Hive SQL的解析过程:2)Hive SQL的底层实现 问过的一些公司:阿里,头条,小米,滴滴,美团x2,网易,快手 ...

  2. 大数据面试求职经验总结

    写在前面:空杯心态,多投多改,把握好校招机会,它是你最容易通往大厂的机会. 面试经验分享: 1. 提前了解应聘公司信息,知道该公司是做什么的,发展情况,招聘的岗位的要求等 : 2.面试不要说自己是培训 ...

  3. 精选大数据面试真题10道(附答案详细解析)

    大数据笔面试系列文章分为两种类型:混合型(即一篇文章中会有多个框架的知识点-融会贯通):专项型(一篇文章针对某个框架进行深入解析-专项演练). 此篇文章为系列文章的第一篇(混合型) 第一题:大数据笔试 ...

  4. python人工智能面试题爱奇艺面试题_【爱奇艺Python面试】爱奇艺大数据面试 python-看准网...

    爱奇艺大数据面试 python 通知的今天上午11点爱奇艺一轮面试,今天!周末!周末!周末!竟然还要面试,内心很无语,上个星期人家腾讯还是周一面试呢,但是,想想宿舍的一个小伙伴今天上午9点半的面试,庆 ...

  5. 大数据面试之新浪面试题

    大数据面试之新浪面试题 学长1 一面 1)自我介绍 叫什么名字,来自哪里,本科哪个学校,硕士哪个学校,大数据做了多长时间,对Hadoop生态圈以及Spark生态圈中的哪些技术比较了解(很简单的一句就带 ...

  6. 大数据面试3分钟自我介绍_大数据面试要注意哪些方面?大数据面试准备三大攻略...

    大数据面试要注意哪些方面?一般来说,求职者要做好自我介绍.面试提问和专业考题三大方面的准备.下面是小编专门为大数据求职者整理的面试攻略,希望对大家找工作有所帮助. 一.大数据面试的自我介绍. 面试一开 ...

  7. 大数据面试之Hive常见题目

    大数据面试之Hive常见题目 1. Hive的架构 1.重点四个器:解释器(SQL Parser).Driver:编译器(Compiler),优化器(Optimizer),执行器(Executor) ...

  8. 大数据面试之Hadoop

    大数据面试之Hadoop 1.Hadoop 1.1 架构模型 1.1.1 1.x的版本架构模型 1.1.2 2.x的版本架构模型 1.2 有哪些角色?每个角色的功能? 1.3 Hadoop的shuff ...

  9. 大数据面试重点之kafka(六)

    大数据面试重点之kafka(六) Kafka分区分配算法 可回答:Kafka的partition分区策略问过的一些公司:阿里云,小米参考答案: 1.生产者分区分配策略 生产者在将消息发送到某个Topi ...

  10. 大数据面试吹牛草稿V2.0

    面试吹牛之前先打个草稿! 本文首发于微信公众号[五分钟学大数据],公众号上有很多大数据学习方法,学习文档,最全的大数据面试八股文等 各位面试官好! 1. 我叫 xxx,毕业于 xxx,之前在 xxx ...

最新文章

  1. AndEngine引擎学习之绘制直线
  2. linux+bash+参数脚本名,linux – Bash中的脚本参数
  3. 需求用例分析之备选流
  4. QTP自动化测试视频系列
  5. Android开发的小技巧总结
  6. Oracle中主键自增长
  7. ASIHTTPRequest类库简介
  8. Linux查看网卡,重启网卡,查看网络数据的方法
  9. 2 Advanced Read/Write Splitting with PHP’s MySQLnd
  10. selenium定位php,selenium之元素定位
  11. 跨站脚本攻击(反射型xss)笔记(一)
  12. hadoop hive窗口函数求和
  13. 08CMS之后台二次开发
  14. android自动签约续费功能,微信代扣 Android 开发流程
  15. 耳机在Mac上听不到声音怎么办?
  16. Win10系统电脑声卡驱动正常但没声音?驱动人生解决方案
  17. php配置上传pdf文件大小,文件上传有大小限制?PDF文件怎么压缩到指定大小?
  18. matlab中axis square与axis equal区别
  19. 【算法】求解最大连续子序列和的问题
  20. Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255]解决方法

热门文章

  1. ffmpeg——av_write_frame/av_interleaved_write_frame写文件包
  2. FastBoot BootLoader Recovery 模式解释
  3. SQL中随机数函数简介
  4. 手动实现 SpringBoot 日志链路追踪,无需引入组件,日志定位更方便!
  5. WIN7下安装openssl
  6. Python爬虫和数据可视化总结
  7. 如何撩学计算机的小哥哥,女生撩小哥哥的套路情话 我其实是个不好亲近的人...
  8. 前端页面添加音乐插件
  9. 截屏指南:使用FastCGI的IIS7和PHP
  10. win10下hive2.3.3安装,完整无错(不需要Cygwin)