- 博客(75)
- 收藏
- 关注
原创 HashMap的底层实现原理
jdk7:HashMap map = new HashMap();在实例化以后,底层创建了长度是16的一维数组Entry[] table。map.put(key1,value1);首先,调用key1所在类的hashcode()计算key1哈希值,此哈希值经过某种算法计算以后,得到在Entry数组中的存放位置。如果此位置上的数据为空,此时的key1-value1添加成功。如果此位置上的数据不为空,(意味着此位置上存在一个或多个数据(以链表形式存在)),比较key1和已经存在的一个或多个数据的哈希值
2020-05-20 17:53:36
335
原创 基本数据类型、包装类、String三者之间的相互转换
基本数据类型->包装类//1.调用包装类的构造器int num = 12;Integer i = new Integer(num);System.out.println(i.toString);//2.JDK 5.0 新特性:自动装箱int num1 = 13;Integer i1 = num1;包装类->基本数据类型//1.调用包装类的xxxValue()In...
2020-05-07 10:20:42
274
原创 == VS equals()
一:==的使用1.运算符2.可以使用在基本数据类型变量和引用数据类型变量中3.如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等。(不一定类型相同)如果比较的是引用数据类型变量,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体二:equals()方法的使用1.是一个方法,非运算符2.只能适用于引用数据类型3.Object类中equals()的定义publi...
2020-05-05 15:58:46
233
原创 面向对象的三大特征
1.封装性:把该隐藏的影藏起来,该暴露的暴露出来,这就是封装性的设计思想。封装性的体现:我们将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getxxx)和设置(setxxx)此属性的值拓展:封装性的体现—1.如上 2.不对外暴露的私有的方法 3.单例模式…...
2020-04-29 10:07:45
184
原创 方法重载 VS 方法重写
方法的重载:1.定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。“两同一不同”:同一个类、相同方法名参数列表不同:参数个数不同,参数类型不同...
2020-04-28 10:39:04
301
原创 粘包问题
粘包问题:数据基于缓冲区,前一个数据包的尾紧挨着下一个数据包的头例如:15张三#18#北京20李四#20#齐齐哈尔数据解析时,无法拆包分包策略:1.利用标识符分隔数据,隐患:如果分隔符就是文本内容2.根据固定长度截取,缺点:每个数据包长度一定要固定,局限性较大3.采用协议头的思想,例如前2个字节是这个数据包的长度...
2019-12-24 14:45:47
122
原创 Sqoop安装及指令
Sqoop介绍:sqoop是Apache 提供的工具用于hdfs和关系型数据库之间数据的导出和导入可以从hdfs导出数据到关系型数据库,也可以从关系型数据库导入数据到hdfs。实现步骤:1.准备sqoop安装包,官网地址:http://sqoop.apache.org2.配置jdk环境变量和Hadoop的环境变量。因为sqoop在使用是会去找环境变量对应的路径,从而完整工作。3.sq...
2019-12-23 16:26:13
190
原创 实现JDBC的六个步骤
实现JDBC的六个步骤:注册数据库驱动获取数据库库连接获取传输器对象传输sql执行获取结果集对象遍历结果集获取信息关闭资源package cn.tedu.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql...
2019-12-18 16:26:12
421
原创 mysql主从复制原理
mysql支持一主多从、多级主从结构主从原理:在一个主从结构中,主从各自有各自的逻辑主节点:必须开启一个二进制的日志文件,以二进制格式记录所有写操作命令,并且,会根据数据的写入,增加一个position值,使得从节点通过position值判断和抓取数据从节点:开启IO线程、SQL线程、本地中继日志IO线程:负责监听和抓取主节点更新内容(通过position的值判断是否变化)中继日...
2019-12-11 20:56:21
185
原创 GC回收机制及算法
1.概述说起垃圾收集(Garbage Collection, GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情:1)哪些内存数据需要回收?2)什么时候回收?3)如何回收?2.哪些内存数据需要被回收2.1....
2019-12-06 19:05:10
303
原创 数据库三范式设计
早期数据库使用,需要节省空间,通过对表结构设计进行节省空间操作,需要利用三范式设计三范式可以最大程度节省空间(浪费时间)第一范式:数据库字段不可拆分userPhone违反了第一范式,因为电话号码可以分为座机和手机两个字段第二范式:满足第一范式前提,所有非主键字段,必须依赖全部的注解(复合主键)上图违反了三范式的第二范式,classname和stuId无关,可以拆分成两个表第三范式:...
2019-12-06 17:05:11
169
原创 SpringMVC执行流程
SpringMVC的组件:a. 前端控制器(DispatcherServlet)本质上是一个Servlet,相当于一个中转站,所有的访问都会走到这个Servlet中,再根据配置进行中转到相应的Handler中进行处理,获取到数据和视图后,在使用相应视图做出响应。b. 处理器映射器(HandlerMapping)本质上就是一段映射关系,将访问路径和对应的Handler存储为映射关系,在需...
2019-12-05 19:14:45
175
原创 spring
SSM:SpringMVC、Spring、Mybatis1. Spring框架概述Spring是一个Service层的框架,可以整合许多其它框架进行工作。Spring的主要技术是 IOC(DI) AOPIOC(DI) - 控制反转(依赖注入)AOP - 面向切面编程2.Spring IOCIOC(DI) - 控制反转(依赖注入)所谓的IOC称之为控制反转,简单来说就是将对象的创建...
2019-11-28 20:30:19
134
原创 冒泡排序的java实现
算法原理:1.比较相邻的元素。如果第一个比第二个大,就交换它们两个;2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;3.针对所有的元素重复以上的步骤,除了最后一个;4.重复步骤1~3,直到排序完成import java.util.Arrays;public class BubbleSort { public static int[...
2019-11-28 14:32:58
144
原创 HashTable、HashMap、ConcurrentMap的联系与区别
哈希表哈希表有多种不同的实现方法,最常用的一种方法—— 拉链法,可以理解为链表的数组从上图我们可以发现哈希表是由数组+链表组成的,一个长度为13的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%len获得,也就是元素的key的哈希值对数组长度取模得到。比如上述哈希表中,12%16=12,28%16=12,108%...
2019-11-24 12:08:55
155
原创 Kafka
一消息系统概述一、模式1.Peer-to-Peer模式 - 点对点(rabbitmq)(1)往往消费者是串行消费的(2)数据往往只能被消费一次(3)解耦能力相对较弱2发布/订阅模式(kafka)(1)允许消费者进行并行消费(2)往往会提供数据的持久化机制,从而保证数据可以被消费多次(3)解耦能力更强二、消息队列的优势1.解耦:各个系统之间通过消息系统这个统一接口交换数据,无须...
2019-11-22 18:41:40
212
原创 Hbase调优
1.调节数据块(data block)的大小HFile数据块大小可以在列族层次设置。这个数据块不同于之前谈到的HDFS数据块,其默认值是65536字节,或64KB。数据块索引存储每个HFile数据块的起始键。数据块大小的设置影响数据块索引的大小。数据块越小,索引越大,从而占用更大内存空间。同时加载进内存的数据块越小,随机查找性能更好。但是,如果需要更好的序列扫描性能,那么一次能够加载更多HFil...
2019-11-20 19:46:03
389
原创 HBase表设计
Rowkey设计:1.将Rowkey以字典顺序从大到小排序原生HBase只支持从小到大的排序,但是现在有个需求想展现影片热度排行榜,这就要求实现从大到小排列,针对这种情况可以采用Rowkey=Integer.MAX_VALUE-Rowkey的方式将Rowkey进行转换,最大的变最小,最小的变最大,在应用层再转回来即可完成排序需求2.RowKey尽量散列设计最重要的是要保证散列,这样就会保证...
2019-11-20 19:44:11
190
原创 HBase系统架构
一.HMaster1.在HBase中,当第一次启动HMaster,会在Zookeeper的/hbase节点下注册一个子节点/hbase/master2.在HBase,HMaster不存在单点故障问题,因为可以启动多个HMaster,先启动的HMaster作为active节点使用,后启动的HMaster会作为backup节点使用3.后启动的HMaster会在Zookeeper的/hbas...
2019-11-20 19:41:11
313
原创 HBase的物理存储结构
1.物理存储结构1.每一张表从行键的方向上进行切分,切分成1个到多个HRegion - 也就意味着每一张表是由1到多个HRegion构成的2.每一个HRegion保存当前HRegion的startRowKey和endRowKey3.每一个HRegion分布到某一个HRegionServer节点上 - 进行切分的目的:(1)将数据分布在不同的节点上以能够存储海量数据(2)提高读写效率 - ...
2019-11-20 19:28:42
1112
原创 HBase
1.概述Hase是Apache提供的基于Hadoop的、分布式的、可扩展的、能够存储大量数据的非关系型数据库来源于google的一片论文《BigTable》,后来由Apache做了开源实现,就是HBase是一种 NoSQL,非关系型的数据库,不符合关系型数据库的范式适合存储:半结构化、非结构化的数据适合存储稀疏的数据,空的数据不占用空间面向列(族)进行存储提供实时增删改查的能力 是...
2019-11-19 20:07:11
147
原创 Hive介绍
1.Hadoop开发存在的问题只能用java语言开发,如果是c语言或其他语言的程序员用Hadoop,存在语言门槛。需要对Hadoop底层原理,api比较了解才能做开发。2.Hive概述Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数据文件映射为一张’数据库表’,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过...
2019-11-15 19:14:05
566
原创 flume介绍
1.概述1.Flume最早是Cloudera提供的日志收集系统,后贡献给Apache。所以目前是Apache下的项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。2.Flume是一个高可用的,高可靠的 鲁棒性(robust 健壮性),分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据(source);同时,Flume提供对数据进...
2019-11-13 18:55:08
242
原创 小文件处理---HDFS
1.小文件的危害:1.存储:HDFS可以存储小文件,但是这个过程中,每一个小文件在存储的时候都会产生一条元数据,这也就意味着如果存储大量的小文件,就会产生大量的元数据,则意味着内存会被大量占用,此时就会导致HDFS的读写效率整体降低2.计算:每一个小文件都会看做一个切片来进行处理,每一个切片都会对应一个MapTask。如果处理大量的小文件,这意味着要产生大量的MapTask,MapTask本...
2019-11-11 19:40:35
179
原创 数据倾斜---hadoop中的Reducer
1.数据倾斜:hash分区,有可能大量的key进入同一个Reducer解决数据倾斜:(1)//多个Reducer处理同一个分区(2)自定义分区(3)增加或者减少reducer的数量(hash分区有效)(4)硬件上:增加机器的jvm内存(5)去除噪音数据(6)重新定义key:比如改变key中数据的顺序比如先在传输的时候给key加一个随机数zhang->20-zhang在后面...
2019-11-11 19:37:47
602
原创 Shuffle
1.Map端的Shuffle1.MapTask在拿到切片之后,默认会对数据进行按行读取,每读取一行默认调用一次map方法来进行处理2.每一个MapTask默认自带一个缓冲区,map方法执行的结果会临时的写到缓冲区中3.缓冲区是维系在内存中,默认是100M4.当缓冲区达到一定条件的时候,就会将缓冲区中的数据写到磁盘上,这个过程称之为溢写(spill)5.溢写之后,map方法产生的结果会继...
2019-11-10 16:07:12
270
原创 job任务执行流程
1.run job 阶段。主要检查job的环境设置,包括路径的设置。比如MapperClass,FileInputFormat等。如果检测未通过,则直接报错返回。2.如果检测通过,JobClient会向JobTracker发起请求,JobTracker为job申请一个全局唯一的id。JobClient可以根据此JobId 跟踪Job的执行进度以及Kill掉Job。3.检测通过后,JobC...
2019-11-10 15:58:01
1290
原创 MapReduce
1.MapReduce概述 HDFS实现了分布式文件存储,存储问题解决了,我们就需要考虑如何对数据进行处理,MapReduce是一个计算框架(编程模型),基于该计算框架,可以很容易的编写数据处理程序,从而以较高的效率处理海量数据集。 MR框架对于程序员的最大意义在于,不需要掌握分布式计算编程,不需要考虑分布式编程里可能存在的种种难题,比如任务调度和分配、文件逻辑切块、位置追溯...
2019-11-10 15:44:12
183
原创 红黑二叉树
ConcurentMap在jdk1.8引入,桶中超过8个元素,会转为红黑二叉树,不足8个,是链表结构,红黑二叉树生成的另一个条件是桶超过64个介绍:1.本质上是平衡二叉查找树2.时间复杂度O(logn)3.平衡二叉查找树基于二叉树左节点都小于根,右大于根4.特点(1)所有节点非红即黑(2)根节点一定是黑的(3)红节点的子节点一定是黑的,黑节点的子节点可红可黑(4)...
2019-11-06 19:51:43
261
原创 Erasure code(纠删码)
1.概述在编码理论里,有一种前向纠错(FEC)编码方式,也称为纠删码。这种技术可以将原始数据中丢失的k字节数据从n个含编码字节的信息中进行恢复。在纠删码技术中,Reed-Solomon(里所码)码是一种常见的纠删码。2.纠删码的应用对于在分布式环境下数据存储的可靠性保证,有两种策略:1)引入副本冗余机制策略2)利用纠删码技术,相比于副本策略,纠删码技术可以节省更多磁盘的空间。即...
2019-11-06 19:44:06
1010
原创 Lease 介绍(租约锁)---HDFS控制并发写入情况
Lease 介绍(租约锁)HDFS不支持文件修改以及不支持并行写操作。在实际生产环境中,HDFS可能同时有多个用户(多个客户端)同时执行文件写/上传操作(hadoop fs -put xxx /xxx )。所以,hadoop需要采取一些措施来控制并发写入情况的发送。最开始的设计思路是:用互斥锁来实现。即某一个时刻,只有拿到互斥锁的客户端能够执行写操作。但是,互斥锁在分布式系统中会有很多问题。...
2019-11-06 19:11:45
2686
原创 HDFS(Hadoop Distributed File System)- 存储数据
1.HDFS架构图2.基本概念1.HDFS :Hadoop Distributed File System。Hadoop的分布式文件系统。是基于《Google File System》做的开源实现。2.HDFS的作用是存储海量数据。因为HDFS是一个分布式架构,可以无限扩展节点来存储数据3.HDFS存储文件的特点是 :块存储4.HDFS的角色:①namenode ②datano...
2019-11-05 19:41:06
502
原创 Hadoop概述
Hadoop概述1.介绍 Apache的Hadoop是一个开源的、可靠的、可扩展的系统架构,可利用分布式架构来存储海量数据,以及实现分布式的计算。**分布式存储和分布式计算**Hadoop允许使用简单的编程模型在计算机集群中对大型数据集进行分布式处理。可以从单个服务器扩展到数千台机器,每个机 器都提供本地计算和存储,而不是依靠硬件来提供高可用性。此外,Hadoop集群的高可用性...
2019-11-05 19:22:50
1975
原创 nio概述
nio概述1.介绍on-Blocking I/O:非阻塞通信模型,不同的语言都实现了nio我们学习java的nio,在jdk1.4版本后出现的一套apibio通信模型是socket(阻塞通信模型),nio是非阻塞通信2.为什么要学nio大数据的任何应用,都是分布式、高可用、负载均衡、处理、存储海量数据分布式架构基础就是网络通信,网络通信是分布式架构师必备的基础技能网络通信底层...
2019-11-01 19:46:46
354
原创 Zookeeper概述
Zookeeper概述1.Zookeeper介绍Zookeeper是分布式应用程序的协调服务框架,是Hadoop的重要组件。ZK要解决的问题:1.分布式环境下的数据一致性。2.分布式环境下的统一命名服务3.分布式环境下的配置管理4.分布式环境下的分布式锁5.集群管理问题2.分布式概念(集群)分布式的思想就是人多干活快,即用多台机器同时处理一个任务。分布式的编程和单机的编程 ...
2019-11-01 19:37:42
2828
原创 锁-lock
锁-lock1.案例package cn.tedu.lock;public class Demo1 { public static String name = "璐璐"; public static String gender = "女"; public static void main(String[] args) { new Thread(new Run3()).start(...
2019-11-01 18:57:37
100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人