24.二进制原码-补码-反码
[toc]
二进制原码-补码-反码
数在计算机中是以二进制形式表示的,分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,**0是正,1是副。**
1. 原码就是这个数本身的二进制形式123//例如: 0000001 就是+1 1000001 就是-1
2. 正数的反码和补码都是和原码相同123456789//负数的反码是将其原码除符号位之外的各位求反。[-3]: 源码:[10000011] 反码:[11111100]//负数的补码是将其原码除符号位之外的各位求反之后在末位再加1 补码:[11111101] //一个数和它的补码是可逆的
3. 设立补码的原因有两个
第一是为了能让计算机执行减法:[a-b]补=a补+ (-b)补????
第二个原因是为了统正0和负0正零: 00000000 负零: 10000000
这两个数其实都是0,他们的原码却有不同的表示,但是他们的补码是样的, 都是0000000
那么,000000这个补码表示的哪个数的补到呢?其实这是一个规定 ...
26.BTS二叉排序树
[toc]
二叉排序树
给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加
使用数组
数组未排序:
优点:直接在数组尾添加,速度快。
缺点:查找速度慢.
数组排序:
优点:可以使用二分查找,查找速度快
缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。
使用链式存储-链表
不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动
使用二叉排序树
1. 二叉排序树介绍
二叉排序树:**BST: (Binary Sort(Search) Tree)**, 对于二叉排序树的 任何一个非叶子节点,要求 左子节点的值比当前节点的值小, 右子节点的值比当前节点的值大。
特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点
比如针对前面的数据 (7, 3, 10, 12, 5, 1, 9) ,对应的二叉排序树为
2. 二叉排序树的创建2.1 节点Node创建12345678910111213141516171819202122232425262728293031 ...
27.AVL平衡二叉树
[toc]
AVL平衡二叉树
给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 问题所在:
左子树全部为空,从形式上看,更像一个单链表.
插入速度没有影响
查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢
解决方案–平衡二叉树(AVL)1. 基本介绍
平衡二叉树也叫平衡 二叉搜索树(**Self-balancing binary search tree**)又被称为 AVL 树, 可以保证查询效率较高。
具有以下特点:
它是一 棵空树或 它的左右两个子树的高度差的绝对值不超过 1,并且 左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、**Treap、伸展树**等。
举例说明, 看看下面哪些 AVL 树, 为什么?
2. 准备过程
平衡二叉树,与二叉排序树基本思想是相同的,不同的是通过二叉树的左旋和右旋使二叉树根节点左右子树尽量保持一致的一个二叉树。
创建**Node类和AVLTree**类
**public int height();**以该 ...
28.多路查找树
[toc]
1. 二叉树与B树
二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树
二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题
问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响
问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度.
1.1 多叉树
在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(**multiway tree**)
后面我们讲解的 2-3 树,2-3-4 树就是多叉树,多叉树通过重新组织节点,减少树的高度,能对二叉树进行优化。
1.2 B 树的基本介绍
B 树通过重新组织节点,降低树的高度,并且减少 i/o 读写次数来提升效率。
如图 B 树通过重新组织节点, 降低了树的高度。
文件系统及数据库系统的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页(页得大小通常为**4k**),这样每个节点只需要一次 I/O 就可以 ...
29.数据结构之图
1. 为什么要有图
前面我们学了线性表和树
线性表局限于一个直接前驱和一个直接后继的关系
树也只能有一个直接前驱也就是父节点
当我们需要 表示多对多的关系时, 这里我们就用到了 图
2. 基本介绍
图是一种 数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。
2.1 图的基本概念
顶点(vertex)
边(edge)
路径
无向图(下图)
有向图
带权图
3. 图的表示方式
图的表示方式有两种:
二维数组表示(邻接矩阵)
链表表示(邻接表)。
3.1 邻接矩阵
邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于 n 个顶点的图而言,矩阵是的 row 和 col 表示的是 1….n个点。
3.2 邻接表
邻接矩阵需要为每个顶点都分配 n 个边的空间,其实有很多边都是不存在,会造成空间的一定损失
邻接表的实现只关心存在的边,不关心不存在的边。因此没有空间浪费,邻接表由数组+链表组成。
4. 图的快速入门
属性:
private ArrayList<String> vertexLis ...
3.JVM发展历程
黯相望。断鸿声里,立尽斜阳。
——柳永《玉蝴蝶》
JVM发展历程Sun Classic VM
早在1996年Java 1.0 版本的时候,Sun公司发布了一款名为sun Classic VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰。
这款虚拟机内部只提供解释器。
如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统。解释器就不再工作。解释器和编译器不能配合工作。
现在hotspot内置了此虚拟机。
Exact VM
为了解决上一个虚拟机问题,jdk1.2时,sun提供了此虚拟机。Exact Memory Management:准确式内存管理
也可以叫Non-Conservative/Accurate Memory Management
虚拟机可以知道内存中某个位置的数据具体是什么类型。
具备现代高性能虚拟机的雏形
热点探测
编译器与解释器混合工作模式
只在Solaris平台短暂使用,其他平台上还是classic vm
英雄气短,终被Hotspot虚拟机替换
HotSpot ...
3.Java集合基础之泛型
驿寄梅花,鱼传尺素。砌成此恨无重数。
——秦观《踏莎行》
## Java集合基础之泛型
1. 泛型概述我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。
观察下面代码:
123456789101112131415public class GenericDemo { public static void main(String[] args) { Collection coll = new ArrayList(); coll.add("abc"); coll.add("itcast"); // 由于集合没有做任何限定,任何类型都可以给其中存放 coll.add(5); Iterator it = coll.iterator(); while(it.hasNext()){ ...
3.MySql高级之存储过程和函数
吴山青,越山青。两岸青山相送迎。谁知离别情?
——林逋《长相思》
MySql高级之存储过程和函数1. 存储过程和函数概述
存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
存储过程和函数的区别在于函数必须有返回值,而存储过程没有。
函数 : 是一个有返回值的过程 ;
过程 : 是一个没有返回值的函数 ;
2. 创建存储过程123456789101112create procedure procedure_name ([proc_parameter[,...]])begin -- SQL语句end;#示例 :delimiter $create procedure pro_test1()begin select 'Hello Mysql';end$
知识小贴士
delimiter
该关键字用来声明SQL语句的分隔符 , 告诉 MySQL 解释器,该段命令是否已经结束了,mysql是否可以 ...
3.jQuery动画效果
前端–jQuery动画效果1. 案例引入jq动画
img
1.1 突出显示123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566<!DOCTYPE html><html lang="zh-cn"><head> <meta charset="UTF-8"> <title>突出显示</title> <style> * { margin: 0; padding: 0; list-style: none; } .clearfix:after { content: ""; ...
3.CSS基础选择器
[toc]
CSS基础选择器1. CSS选择器作用(重点)
找到特定的HTML页面元素
CSS选择器干啥的? 选择标签用的, 把我们想要的标签选择出来 。
css 就是分两件事: 选对人, 做对事。
1234h3 { color: red;}
这段代码就是两件事, 把 h3 选出来, 然后 把它变成了 红色。
选择器分为基础选择器和 复合选择器,我们这里先讲解一下 基础选择器。
2. CSS基础选择器2.1 标签选择器
概念:标签选择器(元素选择器)是指用HTML标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的CSS样式。
语法:
12345标签名{ 属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
作用:标签选择器 可以把某一类标签全部选择出来 比如所有的div标签 和 所有的 span标签
优点:
是能快速为页面中同类型的标签统一样式
缺点:
不能设计差异化样式。
思考: 如果想要差异化选择不同的标签,怎么办呢? 就是说 我想单独选一个或者某几个 ...