小知识点总结

用户输入一个url之后到整个页面返回给客户这个过程都经历了一些什么

首先url是为了让人记忆方便的,计算机在进行网络传输的过程中只能通过ip地址找到对应的主机,所以当输入一个ip地址的时候,此时就需要找对应的url,首先从浏览器中取查找ip地址,再到系统中去查找,再到域名解析服务器中去查找,直到找到根域名服务器,此时就会出错.
当找到对应的ip的地址之后此时DNS服务器就会将这个ip地址进行返回.此时拿到这个ip地址它就可以到对应的主机上去找对应的资源,资源找到后主机就发送一个HTTP响应,然后把数据交给传输层,传输层就会加上自己的报头,其中会加上自己的报头数据,然后交给下一层网络层,网络层收到数据之后就将自己的报头进行封装,然后交给数据链路层,数据链路层,由于之前在IP层封装了源IP目的IP,于是通过ip找到对方的MAC地址,此时就要经过ARP协议,然后通过ARP得到对方的ip再依次从下往上不断交付,直到应用层,应用层通过对HTTP的响应进行解析最终将页面展示给用户

GET和POST方法有什么区别

GET 会将参数放到url后面,post将参数放到body中,如果对url长度有限制的话,此时GET方法所传的参数长度也会受到限制,POST方法不会限制,POST方法将数据进行加密后就会实现安全传输,GET方法不会数据进行加密,没有安全性

计算机网络中为什么要有网络层

假如没有网络层,数据要从远端到达目的端,此时就只知道要去哪里,但是不知道该如何让到达目的主机,于是就必须有网络层告诉主机要经过哪些路由才能到达目的端

简述计算机网络中ISO分层结构

物理层:用于建立、维护和拆除物理链路连接。数据的单位是比特,主要设备有中继器、集线器、适配器。
数据链路层:负责设备之间数据帧的传送和识别,以太网,令牌环网
网络层:负责两台主机源端和目的端是如何到达,路由转发
传输层:保证数据可靠的从源主机到达目标主机
会话层:负责通信的连接和建立
表示层:设备固有的数据和网络之间的数据转换
应用层:负责应用进程之间的通信

线程和进程之间的区别

概念上:进程是资源管理的基本单位,线程是调度的基本单位
独立性上:进程是具有独立性的线程是存在于进程的,但是线程有自己的栈,上下文数据以及局部变量等等
通信方面:进程通信比较花费资源,线程只需要有一个全局变量就可以实现通信
安全性:进程崩溃不会导致另外一个进程崩溃,但是线程崩溃就会导致整个进程崩溃

堆和栈的区别

地址空间上:堆在栈的下面(堆地址低,栈地址高)
增长方向:堆向上生长,栈向下生长
数据存储结构:堆区可以看成是一棵树,栈区可以看成一个栈
清理变量:堆区得程序员自己申请,自己释放,栈区由编译器自定进行释放

进程间通信

管道
消息队列
共享内存
信号量
sock套接字

数据在计算机中的存储都有哪些

磁盘,内存,CPU,高速缓存

C++中如果传一个特别大的对象的时候应该怎样去传输,为什么要传引用

传值会开辟一个新的对象,然后将这个对象调用拷贝构造,最后传过去,如果对象很大的时候,这个时候额外的开销就会特别大,但是如果是传引用的话就会只额外开辟四个字节,花费的开销不是特别大

深浅拷贝的区别

深拷贝会额外开辟空间,然后将原来已有的空间对饮的内容依次拷贝到新的空间,浅拷贝只是减小引用计数,将指针直接指向对应的空间

软硬连接的区别

创建方式上:软连接ln -s 文件名 原文件名
硬链接ln -d 文件名 原文件名
实现上:软连接只是一个文件的地址,不使用相同的inode号
在Linux下多个文件可以指向一个inode, 此时的这些inode相同的文件就叫做软连接文件
磁盘存储上:
删除一个软连接对应的源文件的时候,此时如果继续访问该文件就不存在
删除一个硬链接对应的文件, 此时硬链接文件还在,硬链接是存在于磁盘上的一个文件
不允许给目录创建硬链接
只有在同一文件系统中的文件之间才能创建硬链接。

进程和线程之间的区别
概念上:

进程是资源分配的基本单位,线程是执行的最小单位.

创建方式:

系统再创建进程的时候会给进程分配资源包括页表,PCB,IO等,然后将进程放到就绪队列中,只有给进程分配了CPU等资源的时候,此时该进程才算是运行.
如果进程在创建之后需要执行多跟我任务此时就可以创建多个线程,让多个线程去同时完成多个任务,这样势必会提高效率
同时在创建进程和创建线程的时候用到的接口也是不同的,创建进程的时候是用fork()和vfork()来创建,但是创建线程的时候用的是pthread_create()来创建一个线程

代码实现上:

多进程的代码比多线程的代码实现起来要简单,多线程的代码由于要考虑到线程安全问题,所以实现起来就会比较复杂

创建开销上:

进程的创建比线程的创建花费开销大,创建一个进程的时候就要给该进程创建对应的PCB,页表,地址空间等,但是创建线程的话由于线程是存在于进程中的,因此在创建线程的时候线程只需共享进程的堆,但是进程也拥有自己的栈,上下文数据

通信方式上

进程的通信实现起来相对比较复杂,它会用到的有管道(匿名管道和命名管道),消息队列,共享内存,信号量,socket套接字,实现起来较为复杂,但是线程由于是存在于进程内部的,因此只需要有一个全局变量,此时所有的线程就会全部看到,实现起来较为简单
线程由于是相互独立的,因此在创建线程之后,要让两个线程之间进行通信,此时就需要通过加锁机制实现线程之间的安全问题

线程的健壮性没有进程强

因为进程之间具有独立性,因此两个线程之间如果有一个进程挂掉,不会影响其他的一个进程,但是线程就不一样了,运行在一个进程中的两个线程如果其中的一个线程崩溃了,此时就会导致整个进程崩溃

实现方式

Linux下线程是轻量级进程,线程的执行粒度比进程的执行粒度更细,Linux下的线程是轻量级进程

状态上

进程状态包括:
R(运行状态):进程要么在运行,要么在运行队列中
S(睡眠状态):进程在等待时间完成
D(休眠状态):不可中断睡眠状态(等待IO结束)
T(停止状态):进程可以通过发送SIGSTOP信号来是当前进程停止运行,同时也可以给进程发送一个SIGCONT来使得进程继续运行
X(死亡状态):只是一个返回状态,不会再列表中看到这个
Z(僵尸状态):进程退出后父进程没有拿到子进程的退出结果,此时的子进程就会成为僵尸进程
线程就没有这么多的状态

等待上

进程等待:
调用wait接口,但是线程的等待调用pthread_join(线程退出后由主线程对其进行资源回收)或者是pthread_detach接口(线程退出时自动回收线程的资源)

退出方式

进程退出可以在主函数中调用return,也可以使用exit
对于线程而言,也可以退出,但是为了实现安全机制,线程就不能使用exit来退出,线程调用pthread_exit来终止自己,同时线程还可以使用return,但是对于主线程不行,同时一个线程也可以使用pthread_cancle来终止另外一个线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值