学习日志 Day 6
//2020年3月24日22:28:04 磊子
计算机网络技术
- 分类的IP地址
每一类地址都由两个固定长度的字段组成,其中一个字段是网络号net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机host-id,它标志该主机或路由器。
什么是IP地址?
我们把整个因特网看成一个单一的、抽象的网络。IP地址就是给每一个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的32位的标识符。
两级IP地址可以记为:
IP地址::={<网络号>,<主机号>}
-
常用的三种类别的IP地址
-
IP地址的特点
①IP地址是一种分等级的地址结构
②IP地址是标志一个主机(或路由器)和一条链路的接口
③用转发器或网桥连接起来的若干个局域网仍是一个网络,因此这些局域网都具有相同的网络号net-id
④所有分配带网络号net-id的网络,范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的 -
IP层转发分组的流程
-
根据目的网络地址确定下一跳路由器,知道到达目的网络上的路由器,到达最后一个路由器时,才试图向目的主机进行直接交付
路由器还有特定主机路由器、默认路由 -
IP地址和硬件地址
(IP地址为逻辑地址,硬件地址看成物理地址)
IP地址是放在IP数据报的首部,应用在网络层及以上使用IP地址,硬件地址则放在MAC帧的首部,应用在链路层及以下使用硬件地址 -
地址解析协议ARP
-
作用:从网络层使用的IP地址,解析出数据链路层使用的硬件地址。
-
IP数据报的格式
-
划分子网
IP地址变为三级的IP地址
网络号+子网号+主机号
特点:
纯属一个单位内部的问题,单位对外仍然表现为没有划分子网的网络
划分子网只是把IP地址的主机号不部分进行再划分,从主机号借用若干位作为子网,而不改变IP地址原来的net-id
划分子网后IP地址就变成了三级结构 -
已知IP地址和子网掩码,如何得到网络地址
计算公式:
(IP地址)AND(子网掩码)=网络地址
只看子网号转化为二进制,逐位与运算上下对应,上下有0,1则相与后时0上下只有1,相与后是1;上下只有0,相与后仍是0; -
路由信息协议RIP
-
数字传输系统
-
宽带接入系统
ADSL技术(非对称数字用户ADSL)
就是用数字技术对现有的模拟电话用户线进行改造,使它能够承载宽带业务
ADSL特点:
①上行和下行带宽做成不对称的(上行指送用户到ISP,而下行指从ISP到用户)
②ADSL在用户线(铜线)的两端各安装一个ADSL调制解调器
ADSL不能保证固定的数据率,对于质量很差的用户线甚至无法开通ADSL
DMTI技术
DMT调制技术采用频分复用的方法把40kHz以上一直到1.01MHz的高端频谱划分为许多的子信道,在分不同个数的子信道用于上行和下行
光纤同轴混合网(HFC网)
HFC网是在有线电视网CATV的基础上开发的一种居民宽带接入网。
电缆调制解调器是为HFC网而使用的调制解调器
电缆调制解调器最大的特点就是传输速率高
FTTx技术
汇编程序设计
-
PUSH 进栈指令
指令格式: PUSH SRC
执行操作:SP←SP-2,(SP+1,SP)←(SRC)
不影响标志位,执行进栈指令时,首先SP减2,然后将操作数送至SP指示的连续两字节单元中。 -
POP 出栈指令
指令格式:POP DST
执行操作:(DST)←(SP+1,SP),SP←SP+2
不影响标志位,执行出栈指令时,先将SP只是的连续两个字节单元内容送至目的地址,然后SP加2 -
XCHG 交换指令
指令格式:XCHG OPR1,OPR2
执行操作:(OPR1)↔(OPR2)
Java Day 5
- 随机数(Random)
import java.util.Random;
/*
Random 是用来产生随机数的
使用步骤:
A:导包
import java.util.Random;
B:创建对象
Random r = new Random();
C:获取随机数:
int unmber = r.nextInt(10);
获取数据的范围:[0,10) 包括0,不包括10
*/
public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();
for(int x=1;x<=10;x++) {
int number = r.nextInt(10);
System.out.println("number:"+number);
}
System.out.println("------------");
//如何获取1-100之间的随机数?
//int i = r.nextInt(100); //[0,99] [0.100)
int i = r.nextInt(100)+1;
System.out.println("i:"+i);
}
}
- 数组
动态初始化
package com.itheima;
/*
数组:存储同一种数据类型的多个元素的容量
定义格式:
A:数据类型[] 数组名;
B:数据类型名 数组名[];
举例:
int[] arr; 定义了一个int类型的数组,数组名为arr
int arr[];定义了一个int类型的变量,变量名是arr数组
数组初始化:类似于C语言,为数组开辟内存空间,并为数据中的每个元素赋予初值
A:动态初始化 只给出长度,由系统给初始化值
B:静态初始化 给出初始化值,由系统决定长度
动态初始化:
数据类型[] 数组名 = new 数据类型 [数组长度];
*/
public class ArrayDemo {
public static void main(String[] args) {
int [] arr = new int[3];
/*
* 左边:
* int:说明数组中的元素类型是int类型
* []:说明这是一个数组
* arr:这是数组的名称
*
* 右边:
* new:为数组申请内存分配,开辟空间
* int:说明数组中的元素类型是int类型
* []:说明这是一个数组
* 3:数组的长度,其实就是数组中的元素个数
*
*/
//输出数组名
System.out.println("arr:"+arr);//[I@1d1e730 地址名
//数组的每个元素都有编号,和C语言一样从0开始到数组长度-1
//编号叫法:索引
//访问格式:数组名[索引]
System.out.println(arr[0]);//0
}
}
静态初始化
package com.itheima;
/*
* 静态初始化的格式:
* 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
*
* 举例:
* int[] arr = new int[]{1,2,3...};
*
* 简化格式:
* 数据类型[] 数组名 = {元素1,元素2,...};
* int[] arr = {1,2,3};//int arr[] = {1,2,3};
*/
public class ArrayDemo2 {
public static void main(String[] args) {
int [] arr = {1,2,3};
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
- Java中的内存分配
栈(存储的是局部变量)、堆(存储的是new出来的东西)、方法区(面向对象)、本地方法区(和系统相关)、存储器(给CPU使用)
栈、堆
栈存储的是局部变量,局部变量就是定义在方法中的变量
使用完毕立即回收
理解举例
int [ ] arr = new int[3];
栈中存储的是 int[ ] arr
堆中存储的是 new int[3]
堆存储的是new出来的东西,实体,对象
A:每一个对象都有地址值
B:每一个对象的数据都有默认值
byte,short,int,long 0
float,double 0.0
char ‘\u0000’
boolean false
引用类型 null
C:使用完毕后会再垃圾回收器空闲的时候被回收
-
数组操作的两个常见小问题
A:ArrayIndexOutOfBoundsExcept ion :数组索引越界异常
原因:我们访问了不存在的索引
B:NullPointerException: 空指针异常
原因:数组已经不再指向堆内存的数据了,你还使用数组名去访问元素 -
数组遍历
和C语言一样利用for循环
为了解决我们去数组中数元素的个数,数组提供了一个属性:length,用于获取数组元素的个数
格式:数组名.length -
二维数组
package com.itheima;
/*
* 其实就是元素为一维数组的数组,和C语言类似
*
定义格式:
A:数据类型[] [] 数组名;
B:数据类型 数组名[] [];
C:数据类型[] 数组名 [];
初始化:
A:动态初始化
数据类型 [][] 数组名 = new 数据类型[m][n]//数据类型 数组名[][] = new 数据类型[m][n];
m表示的是二维数组中一维数组的个数
n表示的是一维数组的元素个数
B:静态初始化
数据类型[][] 数组名 = new 数据类型[][]{{元素...},{元素...},...};
简化格式:
数据类型[][] 数组名 = {{元素...},{元素...},...};
*/
public class ArrayArrayDemo {
public static void main(String[] args) {
/* int m =2;
int n= 1;
int arr[][] = new int[m][n];*/
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println(arr);//[[I@105bd58
System.out.println(arr[0]);//[I@1d1e730
//二维数组名配合索引可以获取到每一个一维数组,每一个一维数组配合索引名可以获取到数组中的元素
//arr[索引][索引]
System.out.println(arr[0][0]);//1
}
}
-
二维数组遍历
for中嵌入for即可,类似C语言
在二位数组中,int arr [ ] [ ],arr.length获取的其实就是二维数组中有几个一维数组,arr [ ].length一维数组里的元素个数 -
输出换行
System.out.println("Hello");
System.out.println("World");
/*两行输出结果:
Hello
World
*/
System.out.print("Hello");
System.out.print("World");
/*两行输出结果:
HelloWorld
*/
**
System.out.println(); 输出内容并换行
System.out.print(); 只输出内容
print带ln就会有换行的效果类似于C语言中的\n,不带ln就没有换行的效果**