第一周博客作业(计算机网络基本知识、Linux操作系统Java基本知识)

计算机网络

信号传输可以通过电流、电磁波,主要是通过电流来传输

电压传输 某一时刻只能传输一个bit信号

网线是导线,电脑电脑之间,计算机组件之间都是靠高低压传输

想要传导速度快可以加线的条数,采取并排的策略,越多越密集越快

该图中连接ABCDE的中间设备是交换设备,若没有中间的交换设备,各个电压信号之间传递会相互影响

交换设备先储存信息,再发到各个接受信号器,有一定的延迟,距离越远、交换设备越多延迟越高

常见的交换设备有:路由器、交换机

数据传输之后,无法确定用哪个程序来接收数据,不同程序由端口来区分,每个程序至少占一个端口号,发送到指定程序需要端口号

TCP协议

端口号:识别能上网的程序

来源ip:需要回应来判断是否接受到信息,回应所需要的ip

来源端口号:发送者的程序端口号

超时重发机制、响应时间:一段时间后没有响应就会超时重发,重发意味着还有存储,网卡中拷贝存储了一份数据

引起超时原因:断线,排队时间长

过期时间:若排队较多,传输了两份会被销毁

同步网机制:每随一段时间,联网的设备会被校准时间

网络协议:制定一个网络协议来确定数据能够在硬件之间正常的传输

CRC校验码:和原数据关联,例:关联数据=原数据*2+5,校验数据是否正确

交换机如何判断转发完毕:有较长时间空隙、间隔,会给下一个用户进行转发

数据包拆分:数据过大会拆分到一份一份的,方便传输数据,相当于给连续数据加上了时间间隔。被拆分数据全部发送完后会进行整合

为什么要数据包拆分?

因为我们使用互联网通过程序传输数据是连续数据,假如传输10个G的视频文件,传输过程中没有时间间隙,直到传输完10个G的数据才会停止,在传输10个G数据期间,其他程序相当于断网。

被拆分数据全部发送完后会进行整合

数据总大小:有了数据总大小,接收数据后才知道是否应该组装。

可能发生的问题:受超时重发机制影响,接受数据不一定是按照顺序接收的,所以不能按照顺序组装

解决方法:拆分的数据需要加上序号,方便全部接受后进行整合

当传输的数据完整才能够打开

例如:下载一个500个g的视频,下载到99%会发现视频是打不开的,因为缺少数据,不能组装完成,所以不能打开

为什么有的软件/平台下载视频可以边下边看?

因为有些平台将完整视频分成了若干个可以播放的视频片段,传输一段视频数据后就进行组装,所以可以边下边看

断点续传:上次下载到50%,下次下载从50%开始下载

接收数据可能受超时重发影响,不知道接收了哪一部分没接收那一部分

文件分成固定份数,查找缺失序号,找到后发出接收

---------------------------------------------------------------------------------------------------------------------------------

不同公司必须指定一个协议 才能发送到互联网

如何采取攻击/防御措施

植入响应指令可以控制电压信号 可以通过汇编、c语言等进行操作

对内容加密

基于现有的协议(以TCP协议为主)进行加密

A向B进行加密信息传密 由于是同一个软件可以识别 攻击方C可以借助相同软件进行破译

传输时数据包被拦截拷贝 发送时带上发送人的身份标记,若不是接收者,不可以进行破解

防御C进行篡改数据,如何防御?

比如:传输12345 本身传输的是2进制 把前面数字生成关联数据(*2)

二者间关联方式是不容易破解的

散列加密(一对多加密)

例如:y=sin(x) y = 0.5 无法通过y的值来判断x为多少

防止攻击方发现关联关系

数字签名

一经改动数据会被发现被改动

相同文字加密文一样,若相同内容每次加密不一样,内容后加上随机数,核心内容一样,整体内容不一样,这样无法进行破解

防止重复攻击

A给B发信息时生成一个钥匙,A发送的其他消息会附带钥匙

B接收数据时先检验钥匙是否一样

同样数据钥匙匹配一次后被销毁,相同数据再次发送会被认为是非法数据不会被接收

安全性和速度是相反的,高安全低速度;游戏为了追求速度,安全性较低,大部分无法加密,所以外挂较多

对于传输性能比较高的安全性比较低,容易被攻击

光纤传输

光纤可以同时传输多个信息 波长不一样不会相互干涉

光纤断一点会影响整个线路,若想窃取需要开口,整个传输会出问题

光纤比导线更加安全

光纤:传输速度快 安全 原因:物理特性

两个离得远不能直接连接

例:传输100bit的数据

若直接连接16wkm 直接传播速度比较慢,需要接受一个后才能发送下一个 每10ms发送1个bit

若隔160km 每段传1ms,第一段接到后1ms就可以发第二份数据,原来的数据继续往下发送

电磁波的传输

波的特性:振幅 波频

振幅会随距离减小 波传递信息只能靠频率

波频不会受传输距离影响

可以一次性跟很多设备传输信号 扩散程度:无线传输 > 有线传输

无线传输能量衰减快

无线设备只要发信号是向四面八方发送信号 四周设备都能够接收到

打电话是明文传输 如果把手机号验证机制去掉可以听到聊天信息

监听数据攻击是向交换设备植入代码          而无线可以直接接收篡改后直接发送出去

为什么我们一进入其他地区就会收到营业厅发来的短信 “欢迎来到xxx”?

漫游、校园网定位都是靠基站三点定位

攻击无人机

无人机等是由电磁波控制,攻击方观察无人机飞行监听电磁波

由于电磁波四面八方发送 攻击者可以观察到电磁波 根据频率和动作来总结哪种频率对应哪一种动作信号

电子枪信号高于控制设备 可以击落无人机

无人机防止攻击

1.每次向无人机发送指令加上随机数 这样攻击者拿到指令不一样

2.无人机有两个传感器可以判断指令发送者位置从而只接收操控者指令

3.发送的信号频率不断发生变化     同时这种方法耗电量非常大

编码

编码就是一堆形状的简单代号

编码的作用就是降低存储

电脑上的信息:视觉信息、听觉信息

视觉信息:屏幕(像素点组成)显示---->形状、颜色、亮度

像素点:要有平面坐标(x、y)、RGB三原色组成颜色(通过不同比例)、亮度

例如(126,244,1,2,3) 126 244x、y坐标 1、2、3后三个数即代表颜色又代表亮度

5个元素 x和y都占16bit 坐标占32bit

Java

Java会翻译成3份 在Linux运行会跟Linux内核对接 Windows系统运行会跟Windows内核对接

c语言本身没有多线程 想要实现需要自己实现 而Java已经封装好了多线程的功能

Java的桌面开发被淘汰了

JDK 支持Javac指令 讲XX.java文件---编译成----XX.class

JRE 将XX.class---解释给操作系统执行

javac Test.java

java Test

JavaSE 最基本的功能 最初的Java核心功能

JavaEE 网站开发 web全面开发 (全家桶)

JavaME 安卓开发

SDK 完整的代码样例 加说明注释的

Java先定义“类”,所有代码都要写在“类”中

大驼峰命名 类名是以大写字母开头的名词,若由多个单词组成,每个单次首字母都要大写

大小写很重要

小驼峰命名法 第一个字母小写,其他字母大写 (普通变量、文件夹、方法名)

java 文件时 java FirstSample 不要加.class扩展名

八个基本类型

byte - 8 short -16 int -32 long -64 float -32

char 看编码,如果是ASCII编码只占8位 Unicode占16位UTF-8占16-32 ... Boolean -32

基本类型的数组也是引用类型

💡int类型的数组是引用类型 基本类型只有8个

由数学上的排列组合决定的范围

用法

byte x1 = 9;

short x2 = 8;

int x3 = 88;

long x4 = 344L;(后加L)

int x5 = 888766;

long x6 = 3921731837129L;

注:同类型 不管谁数值高或者低 都占32bit 占据空间一样(x3和x5、x4和x6)

二进制 int y1 = 0b11001001;

八进制 int y2 = 0726352;

十六进制 int y3 = 0xad87f2

short x1 = 0b1101;

short x2 = 0763;

short x3 = oxaf3;

E+38 10的38次方

float 和 int类型都是32位

从第一个不为0的数开始 往后多少位都是有效位

int类型丢失最多为1位 1.9 = 1

float 距离0越近精度越高 距离0越远精度越差

十进制转二进制 除余直到商为0

十进制转N进制 除余 例如10进制转7进制

13415 = 6^4 + 3*6^3 +4*6^2 +6^1 +5(转换为6进制)

N进制的1后面M个0 ----> N^M

N进制转M进制 N进制转10进制 10进制转M进制

int 456 = 256 + 128 +64 +8 =11101000;

0 + 23个0 +11101000

float

1+8+23

0 000000000 0000000000000000000

0-255

( 2^(x-127))*y

10^-1 = 0.1 2^-1 = 0.5 4^-1 = 0.25

1:11:52 double 类型

本质上储存的是编码 可以 int i1 = c1 int类型可以接收他们

ASCII只有8位,任何编码都包括ASCII编码

在ASCII编码里字符是多少 基本上在其他编码中就是多少

假如一个字符在ASCII和Unicode里都是70 在ASCII编码中只占8位

在Unicode里占16位

UTF=8大多数都是16bit少量32bit

代码单元是存储单位 一个代码单元是16bit

波尔类型

操作系统分配给波尔类型至少要4kb

理论上用Java的int来实行Boolean类型

int类型32位空间 理论上是有些浪费的 实际上是增加了性能

高速缓存有自己基本存储单元 64字节 物理上存在的

每个缓存行都有一根导线与外界相连

高速缓存行64字节可以储存很多数据

但是这些数据不能同时储存或者读取

里面数据越多 取数据时被卡住的概率越大 排队取数据

如何降低排队可能性

让里面数据存储的少一些

变量在使用前一定要进行赋值

final四个作用

final修饰常量 ,值不可以被第二次修改

final修饰的类不可以被继承

final修饰的方法不可以被重写

final防止多线程下的指令重排序,保障线程安全

final类型的数组防止引用类型整体指向

但是可以改变数组的内部

不建议用final修饰引用类型 除了数据串 基本没什么用处

double y = Math.sqrt(x) 开根号

double y = Math.pow(x,a) x的a次方

这句话的意思是 调用Java文件

每一个范围大的类型都可以容纳范围小的

float数值位有23位 int数值位有31位 所以会有精度丢失

int转double类型没有丢失

double 数值位是52位 高于32位 所以int转double 不会有精度丢失

强制类型转换

byte类型 7位

int类型 32位

占位长转占位短型只保留最右侧的位数

判断是否相等用双等于号

int c = a>b ? 10 :20;

a>b条件成立 c = 10 不成立 c=20

位运算

&("and") |("or") ^("xor") ~("not")

byte a = 17;

byte b = 21;

byte c = a&b;

先将a和b转成二进制

00010001

00010101 &

------------------------------

00010001 = 17

与:上下都是1才是1 否则是 0

00010001

00010101 |

------------------------------

00010101 //21

byte a = 53;//32+16+4+1 00110101

byte b = 97;//64+32+1 01100001

00110101

01100001

-----------------------------

01110101 = 64 + 32 + 16 +4 +1 = 117 = a | b;

位运算算法

位左移 位右移

int a = 5;

int b = a < < 3;a向左移3位

int c = b > > 2;b向右移2位

任意N进制向左移动M位,都是相当于乘以N^M,向右移动就等价于除以这个数

位运算可以让cpu一次运算出来

435 * 233 可以用位运算吗?

435 * 512 = 435 < < 9

435 * 233 = 435 * (128 + 64 + 32 + 8 +1)

= 435 < < 7 + 435 < < 6 +435 < < 5 + 435 < < 3 +435

任何一个10进制数都能转换成二进制

计算机内部cpu用的就是位运算

向右移动左侧补符号位 符号位是0补0 是1补1

a = a>>>3; 向右移动时候左侧一律补0

字符串虽然内部用到了数组 但是不等价

CSP认证

可以拼接字符串 输出一句话

原本aa = abcd.....

在最后加上一个

加上最后这行后 aa变成了哈哈哈哈

不可以在原地址上进行修改 生成一个新的地址

原因:

数组上所有数据在物理上必须连续

空间不能边用边申请 需要放弃原来空间申请一个新空间

计算机中一个地址 没有其他地方记录它,说明它是无效地址

引用类型 == 比较的是否引用同一个地址

new 新开辟空间 c和d都属于新开辟的空间

基本类型不管值怎么改变,所占大小是不变的

但是引用类型 没办法像基本类型一样把变量跟值放到一起 不知道预先申请多大空间

引用变量在改变新的值时会引一个新的地址 相当于改变地址

内存里的地址长是固定的 32bit

字符串如果要检验相等 无法使用双等于号 双等于号在字符串中是比较地址的

我们用equals来比较字符串的值

a.equals(c) a和c作比较

=""是一个长度为零的空数组 有一个空数组标记 有地址

=NULL 什么都没有 没有数组标记也没有地址

检查一个字符串是否为null

if(str == null)

检查一个字符串既不是null也不是空串

if(str != null &&str.length () != 0)

API

定义好的各种方法告诉用户

char x = a.charAt(2); 获取指定位置的字符

x索引的是a中 地址为2的字符

int x2 = a.codePointAt(3); 获取指定字符的编码

x2索引的是a中 地址为3 的字符的编码

包含 返回值大于等于0 不包含为负

String st1 = "asdsdsfgasa";

st1 = st1.replace("sd","="); 将st1中的sd 替换成=

replace()替换 将xx替换成xx

split分割

String [] arr = st1.split("s");

for(String s : arr){

System.out.println(st1)

} 用s作为st1这串字符串的分割线 s消失 分割s前后的字符

获取字符串长度

int ll2 = st1.length(); 求st1字符串的长度

System.currentTimeMillis();

获取当前毫秒数

字符串类型和String Builder类型的区别

1000次循环需要申请1000个页 循环一次 值发生变化需要寻一个新的地址存储

String Builder改变了原地址不可变

一开始申请了一些空间 再加一个就在原地址中新增 不需要去重新申请

假设一个字符占一个代码单元 一页可以放2048个字符 一个字符2个字节 一页4kb

先申请2048 的空间 第一个字符放进去 还要赋予空间 每次存放前会判断空间满没满 如果没有满

就继续存放 前1k次都在这一个页里

节省了很多步骤 所以速度变快

StringBuffer 和String Builder内部结构一样 只不过前者加了锁

aa.nextInt()

等待输入

每次执行aa.nextInt()会触发一次等待

因为有三个 所以等待三次 我们输入一个值后按回车 三次后输出结果

通过输入如何在数组中生成数据

将数组的数据转换成字符串显示出来

switch变量

int a = 9;

int b = 7;

int c = 6;

switch(c){

case 3:

system.out.println();

break;

case 5:

system.out.println();

break;

case 31;

system.out.println();

break;

default;

system.out.println();

break;

}

void声明的函数可以直接用return来终止函数的进行

格式化输出

println 输出自动换行

文件中存的都是二进制

前面几位一般都是类型编码 标注是什么类型的编码

前面如果是Unicode编码 每次解析16位

如果是UTF- 每次解析8位

byte类型可以表示一切类型

short 16位分为左八位 和 右八位

byte (byte[0]

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0(56)

分两个byte类型 一个占8位

byte[] (byte[0]

文件写东西读东西 文件的解析 存东西 和网络一样 开头编码 

后面是比特流数据 根据编码转换 借助Byte类型存储

变量的定义域

public class Demo{

int a = 9;

int b = 7;

public static void main(String[] aaa){

int x1 = 89;

int x2 = 88; x1 x2 x3 是在这个括号中声明的 出括号后不能操作

int x3 = 77;

}

}

case 标签可以是:

类型为char、byte、short、或int 的常量表达式

continue

意味着后面不会执行

该次循环不再执行了 直接进入下一次循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值