《计算机是怎么跑起来的》

您遇到什么苦难了吗?
您需要什么样的计算机系统?


计算机编程犹如学英语,语法固然重要,但是不够,要想流利的对话,常用的熟语也必须学会,常用的数据结构与算法就是这样的熟语,熟练的使用才能和计算机流利的对话。


算法就是将自己的想法有条不紊的一步步告诉计算机,与计算机对话,语法的熟练,语言的简洁,对代码运行时间与使用的计算机内存空间大小烂熟于胸,才能写出高效的程序,与计算机愉快的交流。


最大公约数算法:(欧几里德算法/辗转相减法)
12  42 42-12=30  将30 写到较大时数下方
------
12 30 30-12=18  同上
------
12  18 同上
------
12  6 同上
-----
6 6 两个数相等,这个数技术最大公约数


最小公倍数:12*42/6=84

int GetZuiDa(int x,int y)
{
while( x != y)
{
if(x > y)
{
x = x-y;
}
else
{
y = y-x;
}
}

return x;
}
int GetZuiXiao(int x,int y)
{
int z = x*y;//需要考虑越界问题
while( x != y)
{
if(x > y)
{
x = x-y;
}
else
{
y = y-x;
}
}

return z/x;
}


判定素数算法:埃拉埃拉托斯特尼筛法
检索数据的三种算法:顺序查找,二分查找,哈希查找
排列数据的两种算法:冒泡排序,快速排序


求素数1:
bool get(int x)
{
for(int i = 1; i < x; i++)
{
if(0 == x%i)
return false;
}

return true;
}


求素数2:
bool get(int x)
{
for(int i = 1; i < x/2; i++)  //减少计算机执行次数的编程技巧
{
if(0 == x%i)
return false;
}

return true;
}



冒泡排序: //由小到大
void bubsort(int arr[],int size)
{
int leng = 0;
while(leng < size -1 )
{
for(int i = 0; i < size-1-leng; i++)
{
if(arr[i] > arr[i+1])
{
int t = arr[i+1];
arr[i+1] = arr[i];
arr[i]=t;
}
}
leng++;
}
}


void bubsort(int arr[],int size)
{
for(int i = 0; i < size-1; i++)
{
for(int j = 0; j < size-1-i; j++)
{
if(arr[j] > arr[j+1])
{
int t = arr[j+1];
arr[j+1] = arr[i];
arr[j]=t;
}
}
}
}




编程技巧:
1、求素数 只需%二分之一的数
2、"哨兵”: 常用于线性搜索的算法中。  O(n)
3、找出数字间规律
4、先在纸上考虑算法
int arr[11]={0,1,2,3,4,5,6,7,8,9,10};//在11个数中找到5
int find(int arr[])
{
int i = 0;
while(1) //重复执行以下两个步骤
{
if(i < 10)         //循环检查下标
{
if(arr[i] == 5)  //循环检测是否是5
break;
}
else
break;
i++;
}

return -1;
}


int find2(int arr[])
{
//添加一个哨兵  a[11] = 5;
for(int i = 0; i <= 11; i++)
{
if(arr[i] == 5) //循环对比是否是5
{
if(i == 11) //检测一次下标即可 (在大量数据的时候可减少大量代码的执行次数)
return -1;
else
return i;
}
}
return -1;
}






数据结构:
数组是一种直接利用内存物理结构(计算机的特性)的最基本的数据结构。




栈:把数据像小山一样堆积起来
队列:把数据排成一队
链表:可以任意改变数据排列顺序,不改变数据在物理内存上的位置,只是记录地址。
二叉树:把数据分两路排列


改造数组实现栈和队列
栈:定义一个数组和一个变量。数组包含的元素个数就是栈的大小。变量中存储着一个索引,指向顶端数据,称“栈顶指针”;
队列:定义一个数组和两个变量。一个变量存储对头数据索引,一个变量存储队尾数据索引。


利用结构体的数组实现链表和二叉树
链表:元素的删除和插入
二叉树:多用于搜索数据算法,“二分查找法”。






面向对象:
面向过程编程中,程序是数据和函数的集合,在大型的程序中会用到大量的变量和函数,代码维护起来非常困难。
新的编程方法被发明,把程序中有关联的函数和变量汇集到一起编成组(类);
类与对象的区别:类是对象的定义,对象是类的实例。
定义一个类后,想要使用就必须在内存上生成该类的副本,这个副本就是对象。
定义一个类必须考虑复用性、可维护性、建模及易用性。
使用一个类:调用成员,定义包含其他类的类,继承后的新类。


面向对象的观点:
1、面向对象编程通过把组件拼装到一起构建程序
2、面向对象编程能够提升程序的开发效率和可维护性
3、面向对象编程是适用于大型程序开发的方法
4、面向对象编程就是在为现实世界建模
5、面向对象编程可以借助UML设计程序(建模表述方法)
用例图、类图、对象图、时序图、协作图、状态图、活动图、组件图、配置图:只需要了解9种图就可以宏观把握理解面向对象编程思想。
面向对象编程中的协作图和流程图可以用来类比面向过程编程中的流程图来表示程序运行过程。
6、面向对象编程通过在对象间传递消息驱动程序。(对象调用函数的方式称消息传递)
7、在面向对象编程中使用继承、封装、和多态(语法上实现)
继承指的是通过继承已存在的类所拥有的成员而生成新的类。
封装指的是在类所拥有的成员中,隐藏掉那些么有必要展现给该类调用的成员。(pubilic protect private)
多态指的是针对同一种消息,不同的对象可以进行不同的操作。


java和.NET其实是位于操作系统之上,通过隐藏操作系统的复杂性从而提升开发效率的程序集,这样的程序集也被称作“框架”。由2部分组成,一是安全执行程序的“执行引擎”,一是程序组件集合的“类库”(java,c#,vb.net,vc++,netcobol)。


.net xml web服务使用通用技术soap,xml规范。soap是关于调用指令的规范,xml是定义数据格式的规范。只要遵守规范计算机就能相互协作。
soap分布式计算。
xml定义的标记语言:XSL,MathML,SVG,MML,SOAP




数据库:
表:整理成表格形式的数据
列:字段 Field
行:记录 Record
键:设定表与表之间的关系
主键:能够唯一标识一条记录的字段
复合主键:将多个字段组合在一起
外键:为了建立表与表的关系而添加的其他表的主键
索引:提升数据检索速度的,与键无关的机制




网络


PC(网卡,网线)--(集线器)-->LAN局域网--(路由器也有ip)-->WAN广域网--(ISP路由器也有ip)-->互联网主干线缆<--(ISP路由器也有ip)<--WAN广域网<--(路由器也有ip)--LAN局域网<--(集线器)<--(网卡,网线)PC 
TCP/IP协议----约定电信号格式
IP协议:用于指定数据发送目的地的ip地址以及通过路由转发的数据。
TCP协议:用于通过数据发送者和接收者相互回应对方发来的确认信号,可靠的传输数据。
网卡--->设备驱动程序--->IP协议程序-->TCP协议程序--->应用程序
LAN内的计算机连接以太网有一套电信号的传输机制,CSMA/CD带冲突检测的载波监听多路访问。谁先抢到网络的使用权,谁先发送,其他计算机等待随机一段长度和重发。
载波监听Career Detection:监听网络是否正在使用电信号。
多路复用Multiple Access:多个设备可以同时访问传输介质。
带冲突检测with Collision Detection:检测因同一时刻的传输导致的点信号冲突。


MAC:所有计算机都可以收到电信号,然后根据网卡硬件上的MAC来处理是否是发给自己的电信号。
IP:广域网分配的软件上的标识。32比特的整数。由 网络地址+主机地址(xxx.xxx.xxx.yyy) 组成,子网掩码用来标识  网路地址和主机地址 在32比特中占据的部分。
子网掩码:255.255.255.240   11111111.11111111.11111111.11110000  值为1的位代表网络地址,0的位代表主机地址。所有0000-1111最多可分配16台主机,0000和1111有特殊用途,路由器也需要占用一个ip,所以最多能用14个ip分配给电脑使用。


DHCP:动态主机设置协议。DHCP服务器上记录着可以被分配到LAN内计算机的IP范围和子网掩码的值。
网关:连接广域网的路由器ip。
路由器:路由表(路由器之间相互交换的信息),只记录通往与之相邻的路由器的路径。
DNS:域名系统,全球的域名服务器能够互相合作提供域名解析服务。
ARP:地址解析协议实现ip到MAC的转换。(ARP会对LAN中所有PC广播询问谁的ip地址是xxx,当某个计算机回复了MAC后,对应关系就明确了。用ARP缓存表存储这些对应关系。)


ipconfig  /all 查看ip MAC
route print 查看路由表
tracert www.baidu.com 查看数据路由过程
nslookup 查看域名对应的ip地址
arp -a 查看arp缓存表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值