- 博客(212)
- 资源 (1)
- 收藏
- 关注
转载 二叉查找树,红黑树,AVL树优缺点比较
1、二叉查找树(Binary Search Tree)很显然,二叉查找树的发现完全是因为静态查找结构在动态插入,删除结点所表现出来的无能为力(需要付出极大的代价)。BST的操作代价分析: (1) 查找代价: 任何一个数据的查找过程都需要从根结点出发,沿某一个路径朝叶子结点前进。因此查找中数据比较次数与树的形态密切相关。 当树中每个结点左右子树高度大致相同时,树高为logN。则平均查找长度与logN成正比,查找的平均时间复杂度在O(logN)数量级上。...
2020-07-29 16:07:20
4720
原创 TCP、IP
1、IP层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的TCP协议来负责。因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。2、TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接:一定是「一对一」才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的; 可靠...
2020-07-27 17:26:08
381
原创 ping命令如何工作
1、ping 是基于ICMP协议工作的,也就是互联网控制报文协议。2、ICMP主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。3、ICMP 报文是封装在 IP 包里面,它工作在网络层,是 IP 协议的助手。4、ICMP 包头的类型字段,大致可以分为两大类: 一类是用于诊断的查询消息,也就是「查询报文类型」 另一类是通知出错原因的错误消息,也就是「差错报文类型」 查询报文类型回送消息用于进行通信的主机或路由...
2020-07-27 15:53:29
441
原创 HTTP解析
1、超文本传输协议HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。HTTP 协议是基于TCP/IP,并且使用了「请求 - 应答」的通信模式,所以性能的关键就在这两点里。2、GET 和 POSTGet方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等。而POST方法则是相反操作,它向URI指定的资源提交数据,数据就放在报文的 body 里。GET 和 POST 方法都是安全和幂等的吗?...
2020-07-27 00:38:33
376
原创 一个URL请求在网络中的心路历程
一、整体流程1、首先浏览器做的第一步工作就是要对URL进行解析,从而生成发送给Web服务器的请求信息(http请求)---应用层。2、通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给Web服务器。但在发送之前,还有一项工作需要完成,那就是查询服务器域名对于的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。3、在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手。---运输层4、如果 ...
2020-07-26 22:50:00
167
原创 java的编译运行
1、前端编译把Java源码文件(.java)编译成Class文件(.class)的过程;也即把满足Java语言规范的程序转化为满足JVM规范所要求格式的功能;优点:这阶段的优化是指程序编码方面的;许多Java语法新特性("语法糖":泛型、内部类等等),是靠前端编译器实现的,而不是依赖虚拟机;编译成的Class文件可以直接给JVM解释器解释执行,省去编译时间,加快启动速度;缺点:对代码运行效率几乎没有任何优化措施;解释执行效率较低,所以需...
2020-07-23 21:10:13
385
原创 Java接口与内部类
1、关键字static使用范围: 在Java类中,可用static修饰属性、方法、代码块、内部类注意:因为不需要实例就可以访问static方法,因此static方法内部不能有this。(也不能有super)static修饰的方法不能被重写...
2020-07-21 15:32:06
130
原创 Java基本对象与三大性质
1、对象的内存解析2、对象数组的内存解析3、方法传值Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参4、重载与重写重载1)定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。2)特点:同一个类、相同方法名与返回值类型无关,只看
2020-07-20 20:06:32
338
原创 Java数组
一维数组1、初始化//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行ids = new int[]{1001,1002,1003,1004};//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行String[] names = new String[5];2、数组默认初始化值3、内存解析注意:刘德华和张学友的位置存的不是这两个真实值,而是这两个字符串在字符串常量池中的地址。详情见字符串常用类那节。二维数组1、初始化//静态初始化in
2020-07-19 20:27:29
131
原创 垃圾回收器
1、评估GC的性能指标吞吐量和暂停时间注意:上述两个指标是矛盾的,现在的标准是在最大吞吐量优先地情况下,降低停顿时间。2、7种经典垃圾回收器7种经典垃圾回收器和分代之间的关系...
2020-05-28 20:44:59
137
原创 java多线程、高并发
1、CASJDK早期,synchronized 叫做重量级锁, 因为申请锁资源必须通过kernel, 系统调用而CAS即是轻量级锁(自旋锁),最终实现:cmpxchg = cas修改变量值注意:偏向锁和自旋锁都是由用户空间进行完成的,而重量级锁是需要向内核申请的。2、锁升级因为synchronized内部有了相应优化,所以才会有锁升级的概念。步骤:为何会有偏向锁?答:多数synchronized方法在很多情况下,只有一个线程在运行。申请重量级锁没必要(不如直接贴上
2020-05-20 19:51:41
320
原创 mysql锁机制
表锁(偏读)多适用MyISAM引擎1、读锁(共享锁)如果表一获得读锁,当前session可以查询该表记录,当前session不能查询查询其他没有锁定的表,当前session中插入或者更新锁定的表都会提示错误;其他session也可以查询该表的记录,其他session可以查询或者更新未锁定的表,其他session中插入或者更新锁定的表会一直等待获得锁。2、写锁(排它锁)如果表一获得写锁,当前session对该表可以进行查询、更新、插入;其他session查询该表被堵塞,需要等待释放。
2020-05-15 21:40:12
141
原创 mysql高级工具
1、慢查询日志MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。默认情况下,MySQL数据库没有开启慢查询日志 ,需要我们手动来设置这个参数。当然,如果不是调优需要的话,一般不建议启动该参数 ,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件 。查看是否开启:SHOW VARIABLES LIKE '%slow_query.
2020-05-15 18:13:39
147
原创 mysql性能分析与查询优化
explain的使用(性能分析)1、使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈2、使用Explain + SQL语句作用:表的读取顺序哪些索引可以使用数据读取操作的操作类型哪些索引被实际使用表之间的引用每张表有多少行被物理查询3、名词字段解释id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序三种情况:id相同,执行顺序由
2020-05-13 20:25:54
141
原创 数据库索引
1、MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构2、面临问题索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要a----z3、细节在数据之外, 数据库系统还维护着满足特定查找算法的数据结构 ,这些数据结构以某种方式引用(指向)数据,..
2020-05-12 19:24:22
214
原创 模板方法模式
1、问题介绍编写制作豆浆的程序,说明如下: 1) 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 2) 通过添加不同的配料,可以制作出不同口味的豆浆 3) 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 4) 请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用,不再使用传统的方案来引出模板方法模式 )2、原理图基本思想是:算法只存在于一个地方,也就是在父类中,.
2020-05-11 16:13:54
204
原创 观察者模式
1、项目需求天气预报项目需求,具体要求如下: 1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。 2) 需要设计开放型API,便于其他第三方也能接入气象站获取数据。3) 提供温度、气压和湿度的接口 4) 测量数据更新时,要能实时的通知给第三方2、观察者模式基本概念:观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,比如.
2020-05-11 14:48:30
168
原创 代理模式
1、基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。2、静态代理静态代理在使用时,需要定义接口或者父类,被代理对象(即
2020-05-11 11:33:33
154
原创 装饰者模式
1、原始问题星巴克咖啡项目:1) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 2) 调料:Milk、Soy(豆浆)、Chocolate3) 使用OO的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖 啡+调料组合。方案一:容易出现类爆炸每种组合抽象出一个类来。方案二:可以做改进,将调料内置到Drink类,这样就不会造成类数量过多。从而提高项目的维护性缺点:在增加..
2020-05-10 13:23:46
162
原创 适配器模式
1、适配器模式适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容。目标是解耦。用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法。比如:原始电压(被适配者)->充电插头(适配器)->手机需要的5v电压(目标)2
2020-05-10 09:32:44
131
原创 原型模式
1、基本介绍用原型实例指定创建对象的种类,并且通过拷 贝这些原型,创建新的对象。工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()。但是需要实现clone的Java类必须要实现一个接口Cloneable, 该接口表示该类能够复制且具有复制的能力 => 原型模式。2、浅拷贝1)对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。 2) 对于数据类型是
2020-05-09 17:30:00
147
原创 UML类图及设计模式简介
1、UML——Unified modeling language UML (统一建模语言),是一种用于软件系统 分析和设计的语言工具,它用于帮助软 件开发人员进行思考和记录思路的结果。说明:类图是描述类与类之间的关系的,是UML图中最核心的用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合 ...
2020-05-09 15:33:46
1285
原创 工厂模式
1、简单工厂模式简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)UML类图2、工厂方法模式工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。...
2020-05-09 15:33:10
132
原创 单例模式
1、定义所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 2、体现单例模式有八种方式: 1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法) 5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7...
2020-05-07 19:06:25
167
原创 Java范型介绍
1、自定义范型结构:范型类、范型接口、范型方法范型类、范型接口在实例化时,如果没有指明范型,将被擦除,认为此范型类型为Object泛型类可能有多个参数,此时应将多个参数一起放在尖括号内。比如: <E1,E2,E3>泛型类的构造器如下:public GenericClass(){}。泛型的指定中不能使用基本数据类型,可以使用包装类替换。在类/接口上声明的泛型,在本类或...
2020-05-03 16:42:53
743
原创 Jvm垃圾回收算法
四大算法1、引用计数法缺点:1)每次对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗。2)较难处理循环引用所以一般不采用这种形式。注意:其实当我们直接调用System.gc()只会把这次gc请求记录下来,并不会马上进行垃圾回收,甚至不一定会执行垃圾回收。2、复制算法年轻代中的GC,主要是复制算法(Copying)复制算法的基本思想就是将内存分为两块(e...
2020-04-29 21:45:37
190
原创 JVM基本概述
1、JVM体系结构预览注意:在运行时数据区中,亮色的表示一个进程的资源,存在垃圾回收。灰色的表示是每个线程私有的,另外内存占的非常少,几乎基本不存在垃圾回收机制。2、类装载器ClassLoader注意:Class可以当成类的模版对象,相同的类在jvm中只有一个。sun.misc.Launcher 它是一个java虚拟机的入口应用。1)双亲委派机制当一个类收到了类加载...
2020-04-28 22:32:22
235
原创 Java反射机制
1、Class是反射的源头关于java.lang.Class类的理解1.类的加载过程:程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾)。接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此运行时类,就作为Class的一个实例。2.换句话说,Cl...
2020-04-27 18:14:13
134
原创 编程语言的语言特性及分类
1、反射的理解Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到...
2020-04-26 23:24:27
557
原创 java常用类
1、Java比较器(比较对象的大小)Java实现对象排序的方式有两种: 自然排序:java.lang.Comparable 定制排序:java.util.Comparator2、comparable接口Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。实现Comparable接口的对象列表(和数组)可以通过 Collections....
2020-04-26 18:14:47
123
原创 java字符串类简单介绍
1、String类String是一个final类,代表不可变的字符序列。String对象的字符内容是存储在一个final字符数组value[]中的。 方法区(含字符串常量池)2、string的创建方式一:通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。字符串常量池中不会存储相同内容的字符串。方式二:使用new在内存中创建了...
2020-04-26 16:34:17
1131
原创 java集合类
1、java集合可以分为Collection和map体系Collection接口:单列数据,定义了存取一组对象的方法的集合 1)List:元素有序、可重复的集合 2)Set:元素无序、不可重复的集合 Map接口:双列数据,保存具有映射关系“key-value对”的集合2、了解Collection 接口中的方法,这些方法也同样适用于Set 集合,List 和 Queue 集合。...
2020-04-25 21:21:17
122
原创 java8新特性及其他
1、java的lamda表达式函数式接口里面,有且仅有一个方法(未实现),只有函数式接口才能用lamda表达式。否则就是java的标准普通接口。书写的简单口诀:拷贝小括号,写死右箭头,落地大括号。在java接口中可以用defaut或者static来进行函数的实现,两者都可以定义多个函数。2、集合类不安全liist不安全:报错异常是java.util.ConcurrentM...
2020-04-24 22:53:03
227
原创 java多线程
1、一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc() 垃圾回收线程,异常处理线程。2、并发与并行并行:多个CPU同时执行多个任务。并发:一个CPU(采用时间片)同时执行多个任务。3、线程的创建和使用通过java.lang.Thread 类来体现。 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常 把run...
2020-04-24 22:52:41
243
原创 sql简单总结
1、基本查询(sql语言大小写不敏感)全表查询select * from 表名;特定列查询select 列1,列二 from 表名;列别名(两种方式)select 列1 AS 别名1 ,列2 别名2 from 表名;使用算数运算符(列加一)select 列1+1 from 表名;常用函数(count 、max、min、sum、avg)select cou...
2020-04-13 19:29:44
128
原创 mac-idea快捷键总结
Command Command+F 在当前文件进行文本查找 Command+R 在当前文件进行文本替换 Command+Z 撤销 Command+Delete 删除光标所在行 或 删除选中的行 Command+D ...
2020-03-26 20:06:13
184
原创 spark内核解析
1、spark部署模式Spark的运行模式取决于传递给SparkContext的MASTER环境变量的值,目前包括:本地运行:local、local[K]、local[*]Standalone模式运行:spark://HOST:PORTMesos集群上运行:mesos://HOST:PORTYarn集群上运行:yarn-client:Driver进程在本地,Executor...
2020-03-19 15:17:24
220
原创 SparkStreaming
1、Spark Streaming用于流式数据的处理。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。和Spark基于RDD的概念很相似,Spark Strea...
2020-03-17 16:43:33
170
原创 SparkSQL
1、Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用。Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成...
2020-03-16 21:23:23
262
原创 SparkCore解析2
1、RDD任务划分RDD任务切分分为:Application、Job、Stage和Task1)Application:初始化一个SparkContext即生成一个Application2)Job:一个Action算子就会生成一个Job3)Stage:根据RDD之间的依赖关系的不同将Job划分成不同的Stage,遇到一个宽依赖则划分一个Stage。4)Task:Stage是一个T...
2020-03-16 18:21:04
160
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人