01背包问题的衍生题目:
对于01背包问题,只需要明白四件事,1重量是啥,2value是啥,3优化目标是啥,4约束目标是啥。
这个题目里面重量是:0,1,4,9,16。。。。
value:1,1,1,1
优化目标:最小化value
其实就是一个遍历,需要从背包容量为0,没有物品开始遍历,然后想想怎么初始化:
当选择物品0的时候,此时重量是0,需要无限的物品才能填满。所以初始化为dp(n,INT_MAX);
但是当背包为0容量则dp[0] = 0。
初始化完毕,然后考虑如何更新:
dp[j] = min{dp[j - w[i]] + v[i] , dp[j] };
cpp
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1,INT_MAX);
//初始化
dp[0] = 0;
for(int i = 1; i*i <= n ; i ++)
{
for(int j = i*i; j <= n ; j ++)
{
dp[j] = min(dp[j-i*i]+1,dp[j]);
}
}
return dp[n];
}
};
- 网络七层模型都是什么?每一层的作用是什么?
答:
总体:网络七层模型是OSI提出来的一种网络模型标准,其将整个网络分为了7层
- 应用层:这一层是直接面向使用者的比如常见的浏览器,邮件系统等等。
- 表示层:这一层主要是明确网络的数据如何组织,比如我们常见的网页其遵循HTTP,超文本传输协议,SMTP/POP3/IMTP邮件协议,使用服务器最常用的两种FTP和SSH协议等等。
- 会话层:会话层主要负责用户的信息验证,比如我们远程登陆一个电脑的时候就需要对方进行确认。
- 传输层:大名鼎鼎的TCP/UDP协议,其中TCP是一种有链接的,可靠的协议。而UDP是一种无连接的,不可靠协议,控制包的发送和收取。
- 网络层:主要是负责网路包的定位,比如IP协议,负责在互联网中定位门牌,ARP协议,将IP地址转换为MAC地址,NAT 协议将局域网的IP转换为广域网IP,比如家里面的宽带就有一个LAN口和WAN口,就是这个作用。
- 数据链路层:这一层主要就是MAC协议,定位我们的物理网卡。
- 物理层:光纤,等网络传输的物理设施。
1.1 为什么要网络分层?
我觉得分层这个事情是一个比较常见的解决复杂问题的手段,比如对于我们一个常见的web项目,一般来说我们分为三层:
- Reposity:数据库
- Service:业务
- Controller:前后端交互
分层之后每一层都专注于做自己的事情,实现代码项目的高内聚,低耦合。
回到我们这样一个网络分层的问题来说我觉得主要有以下有点:
1.各层之间独立:每一层只需要完成自己的逻辑,并且负责实现好上下两层的接口即可。
2.提高了灵活性和可替换性:每一层都能够不断地进行优化,使用更加合理的方案,当修改某一层的功能只要实现好接口,则对于其他层来说是不可见的。
3.复杂问题简单化:将一个庞大的问题,细分为很多易于解决的小问题。
最后,我觉得这也符合计算机科学的特征即整个系统都是从上到下按照严格的层次结构设计的。
1.2 四层模型中常见的网络中,每一层都有什么样的协议
应用层: HTTP,SMTP,POP3/IMTP,FTP,Telenet,SSH,DNS
传输层:TCP,UDP
网络层:IP,ARP,NAT
-
从输入URL到网页返回发生了什么?
-
输入URL
-
DNS解析:先查找浏览器,本地,DNS服务器缓存,没有再解析。
-
获得IP地址之后,形成一个连接的报文,经过TCP协议包装。
-
由网络层进行路由和转发找到服务器位置。
5.服务器从网络分层模型以次解包,根据HTTP报文的生产一个HTML返回
6.服务器渲染HTML
2.1 状态码有什么?
1xx"信息码,比如请求正在处理等等
2xx:成功
3xx:重定向
4xx: 客户端错误
5xx:服务器错误
-
HTTP和HTTPS有什么区别:
-
浅显的来说:首先是协议不一样HTTP和HTTPS,端口不一样80 443
-
安全性:http,明文传播,https密文传播,现在的https采用了混合加密的方式进行通信。即先使用非对称加密传输密钥,然后通过对称加密实现了密文传输。另外,HTTPS还实现了数字签名和身份认证。
数字签名:有一份文件,先签名再用摘要算法生成摘要,然后使用私钥加密,拿到的人就可以用公钥解密这个摘要,并用摘要算法计算明文的文件,如果两个摘要一样就说明了文件被签名了。
文件被篡改:数字摘要--->私钥加密--->如果篡改就不一样了
身份认证也是一样的,不过需要CA给与发布公钥的单位可靠性保证。