导图社区 技术整理思维导图
这是一篇关于技术整理的思维导图,这个思维导图,花费了本人很多的精力,希望对你带来帮助,如果喜欢的话,那就给我点个赞吧!
编辑于2022-02-02 13:56:48技术大纲
java
设计模式
数据结构
关键字
supper
名词
方法签名:
异常
Throwable
特点: 1,Throwable是java异常的超类; 2,Throwable包含两个子类:Error和Exception; 3,Throwable包含线程创建和执行的堆栈信息,且提供了printStackTrace()来获堆栈信息。
Error
定义:继承自Throwable类,程序中无法处理的错误;非代码错误;此类错误代码无需处理。
代表错误: 虚拟机运行错误、 NoClassDefFoundError(类定义错误)、 OutOfMemoryError(内存不足错误)、 StackOverflowError(栈溢出错误)
处理方式:java程序内不做任何处理,JVM 将终止线程
Exception
定义: 继承自Throwable类,程序本身可以捕获,并且可以处理的异常
RuntimeException及子类 运行时异常:
定义:RuntimeException 类及其子类,表示 JVM 在运行期间可能出现的异常;
特点:JVM编译时不会校验,一般是代码运行时的逻辑异常;一般处理方式可以通过Throw抛出,或者try-catch来捕获;就算我们在代码中不做捕获处理,JVM虚拟机也会自动捕获。
常见异常: NullPointerException空指针异常、 ArrayIndexOutBoundException数组下标越界异常、 ClassCastException类型转换异常、 ArithmeticExecption算术异常
CheckedException (被检查异常)编译时异常
定义:Exception 中除了 RuntimeException 及其子类之外的异常
特点: 1,java的编译时异常,在java编译代码的时候会监测它,比如ClassNotFoundException(没有找到指定的类异常),IOException(IO流异常),要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。 2,该类异常我们必须在代码里面进行手动捕获。
异常的处理
try catch捕捉和finally的关系: 顺序上先处理子类异常后父类,非特殊情况catch中不能为空,要处理错误; 清理数据必须放到finally里面,无论是否抛异常,或try中有return语句,finally里面的代码一定会执行,除非碰到System.exit(0); 不管有木有出现异常,finally块中代码都会执行; 当try和catch中有return时,finally仍然会执行; finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样, 返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的; finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
throws抛出异常: 通过throws抛出异常,子类方法中抛出的异常应该是与父类方法中相同,或是父类异的子类;一定要在main方法里面处理异常,不然jvm可能会退出
自定义异常: 继承一个异常类,通常是RumtimeException或者Exception
Thow与thorws: throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象
常见的异常和错误: NullPointException:空指针异常,对象是null时会抛出,在调用传入对象时尽量判断是否为null,Jdk8里面可以用Optional对象来避免 IndexOutOfBoundsException:数组下标越界,数组的下标超过了最大值时会抛出,在迭代循环时检查下标是否越界 NumberFormatException:数字类型转化异常,将非数字类型转成数字类型,将类型转化的代码catch住 ClassCastException:类型转换异常,发生在强转时,将不同类型转成同一类型,尽量少用强转,或用instanceof(判断继承中子类的实例是否是父类的实现)做类型判断,或多用泛型 FileNotFoundException:找不到指定文件,文件路径错误或文件不存在,可能用了绝对路径检查文件是否存在,路径是否写错,多用相对路径 ClassNotFoundException:在classpath中找不到引用的类缺乏引用当前类的jar或没有设置classpath或jar损坏-,找到jar并放入classpath中或检查jar是否损坏 OutOfMemoryError:内存溢出异常,产生对象太多,内存不够->不要在循环体重创建大量对象,或对象及时回收,增大初始化堆:-Xms 增加最大值:-Xmx NoClassDefFoundError:找不到相应的类错误,缺乏当前引用类的jar或jar版本不对->找到jar并放入classpath中或找到合适的版本 ConcurrentModificationException:并发修改异常,在集合迭代时修改里面的元素->在迭代时不要修改集合或用并发集合做遍历(如:ConcurrentHashMap) NoSuchMethodError:类里找不到相应的方法,一般是jar版本不对,当前引用的jar版本中没有这个方法->检查jar版本是否正确 UnsupportedClassVersionError:版本不支持错误,编译class的jdk和运行时候的jdk版本不一致或比较高->将低版本换成高版本 StackOverflowError:栈溢出错误,一般是函数的死循环,或递归调用无法退出->检查死循环的代码,或让递归有退出值,或加大栈初始化参数
线程
集合
数组
单链表
collection
List
ArrayList
数据结构: 底层是数组结构;
特性: 查询快,增删慢; 线程不安全; 有序可重复; 扩容为方式(当前容量*1.5+1)
LinkList
Vector
数据结构: 底层是数组结构;
特性: 查询快,增删慢; 线程安全; 有序可重复; 扩容方式为当前一倍
线程安全的实现方式: Vector的get() 、remove()、size()方法都是同步的,但是在多线程环境下,如果不在方法调用端做额外的同步措施,使用这段代码仍然是不安全的。 如果一个线程恰好删除一个元素,导致序号i 已不可再用,get()方法就会抛出一个ArrayIndexOutOfBoundsException 。
set
hashset
treeset
双链表
Map
HashMap
TreeMap
线程池
netty
redis
spring
soa微服务
dubbo
cloud
消息队列
kafka
rockmq
大数据相关
大数据概念: OLAP和OLTP:OLAP随机访问能力比较强, 批量扫描比较差.如mysql,oracle数据库;OLTP大规模批量数据加载,随机反问能力比较差,大数据系统中, 往往从 OLTP 数据库中 ETL 放入 OLAP 数据库中, 然后做分析和处理
flink
doris
kudu
概要: kudu是数仓存储引擎
clickhouse
概要: OLAP数据库(分析类型的数据库)海量数据存储,实时分析 OLTP如mysql数据库,延迟分析 cpu是clinckhouse的重要基础资源,部署了clickhouse后当前节点就不要部署其他的应用了
在线的clickhouse: https://play.clickhouse.com/?file=playground
安装: 官方文档:https://clickhouse.com/docs/zh/ 安装包下载:https://repo.clickhouse.com/tgz/
hoodup
hbase
spark
ES
查询sql工具
hive
impala
概念: 实时的sql查询工具
hive和impala的比较 如果使用CDH版本的大数据框架,Impala是首选的大数据查询引擎。 数据存储:都是基于HDFS或HBASE存储数据 元数据:使用的元数据是相同的。 SQL解释器:两者比较相近,生成执行计划。 执行计划:Hive依赖于MapReduce框架。Impala把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle,从而提高效率。 数据流:Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。 内存使用:Hive执行中如果内存存储不够,会存储进入磁盘中处理,是符合MapReduce中shuffle的流程。Impala是基于内存处理的,如果内存存储不够,是不会往磁盘里面存储的,会报错。 调度:Hive依赖于hadoop的调度策略。Impala调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。 容错:hive依赖hadoop的容错机制。Impala没有容错,如果执行过程发生故障会直接报错。Impala是定位实时查询的,所以如果失败重新运行一次即可。 总结:hive是做一些复杂的批处理任务,Impala是处理实时查询的,但是不支持UDF,处理能力是有一些限定的,一般是两者结合使用。
数据库
数据库排行榜:https://db-engines.com/en/ranking
数据库连接池
druid
运维
docker
linux
问题
1,回调方法 2,Throwable 是 Java 语言中所有错误与异常的超类。 3,supper 4,clone()接口去克隆一个对象 System.exit(0)和Runtime.getRuntime().exit(status) 1,HDFS 2,DBMS 3,超类 4,system.exet(0)
中心主题
主题
主题
子主题