牛客网面试习题

牛客网面试习题

美团点评2020校招运维方向笔试题

题目:
2.请简述ssrf的原理、有哪些攻击方式及防御方法。
我的答案:

SSRF(service-side request forgery):服务器端请求伪造。
原理:伪造服务器端发起的请求,获取到客户端所无法得到的数据。
SSRF漏洞形成的原因:服务器所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤。
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。 SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有发现在这个请求是合法的,然后服务器以他的身份来访问其他服务器的资源。

攻击方式:
1.扫内网
2.向内部任意主机的任意端口发送精心构造的Payload(负载)
3.DOS(Denial of Service)攻击(请求大文件,始终保持连接)
4.攻击内网的web应用,主要是get参数就可以实现的攻击。
5.利用file协议读取本地文件。

防御方式:
过滤:
1.过滤开头不是http://xxx.com的所有连接
2.过滤格式为ip的链接,比如127.0.0.1
3.结尾必须是某个后缀。

绕过方法:
1.http基础认证
2.利用302跳转
3.加上# 或?
4.更改其他进制的ip

3.OSPF(Open Shortest Path First)路由协议建立邻居的过程有那几个状态?

邻接状态建立的七个状过程:
① down 开始发送hello包前的状态
② init:开始向外发送hello包
③ 2way:接受到了相邻路由器的hello包,并且包中有对方的路由信息,进入2way状态,这个状态中需要做DR/BDR选举,选出DR、BDR
④ ExSTART:开始进行fisrtDBD包的交换,进行主从选举
⑤ Exchange:主从选举完毕之后,进行DBD包的传送,直到最后一个发完
⑥ loading:路由器使用request请求自己所描述的条目的具体信息,对方使用update发送完整的LSA具体信息
⑦ Full:没有需要求的条件,将进行full状态。邻接关系完全建立。

3.假设现在只有三台笔记本,分别为PC1、PC2和PC3,其中每台笔记本都有1块有线网卡和一块无线网卡,在仅有1根网线的情况下,如何将三台笔记本电脑组到一个局域网中?请给出解题思路步骤。

第一步:将其中一台笔记本(如PC2)的有线网卡和无线网卡做桥接;
第二步:PC1和PC2通过网线将有线网卡互联,PC2和PC3通过无线网卡互联;
第三步:将三台PC配置在同一个网段(比如192.168.1.0/24)。

4.请简述操作系统分页式内存管理机制,并介绍下进程fork时对内存的copy on write实现原理。

进制:将虚拟内存空间和物理内存空间皆划分为大小相同的页面,并以页面作为内存空间的最小分配单元。
一个程序的一个页面可以存放在任意的一个物理页面里。

在复制一个对象时并不是真的在内存中把原来对象的数据复制一份到另一个地址。
而是在新对象的内存映射表中指向同原对象相同的位置,并且把那块内存的Copy-On-Write(写时复制原理)设置为1.
在这个对象指向读操作的时候回,内存数据没有变动,直接执行就可以。
在写的时候,才真正将原始对象复制一份到新的地址,修改新对象的内存映射表到这个位置,然后往这里写。

fork之后一般会跟一个exec。将进程空间完全替换。因此。forl使用Copy-On-Write,会省去一次不必要的进程空间复制。

5.无重复字符的最长子串

用一个map存储每一个数的次序+1,方便如果出现重复的数,则start从map对应的数值开始,时间复杂度O(n)~ 
#include<bits/stdc++.h>
using namespace std;
int main(){
    string A;
    while(cin >> A){
        int size = A.length();
        int res = 0;
        unordered_map<int, int> map;
        for(int start = 0, end = 0; end < size; end++){
            if(map.count(A[end])){
                start = max(start, map[A[end]]);
            }
            map[A[end]] = end+1;
            res = max(res, end - start + 1);
        }
        cout << res << endl;
    }
    return 0;
}

下面这个代码是不区分大小写的情况:看的比较明白,这个


#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
    string x,res="";
    map<char,int> book;//第一个类型的键类型,第二个是值类型
    int i;
    for(cin>>x,i=0;i<x.length();i++)
        if(!book.count(x[i])) {//map.count实际上就是看该元素是否存在相同元素,有相同为1,没有为0 
			res+=x[i];
			if(x[i]>=65&&x[i]<=91){//大写的话 
				book[x[i]]=1;
				book[x[i]+32]=1; 
			}
			if(x[i]>97){
				book[x[i]]=1;
				book[x[i]-32]=1;
			} 
			//标识说这个元素已经出现过了,不要再出现 
			
		} 
    cout<<res;
}

解释:
首先输入相应的A字符串。
注意:
使用count,返回的是被查找元素的个数。(准确的说,应该是该元素之前有没有已经重复过了。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。
使用find,返回的是被查找元素的位置,没有则返回map.end()。用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器,程序说明

专享练习

数据库

1.关系代数运算:https://blog.csdn.net/f_kld/article/details/77168351
2.
在这里插入图片描述
3.
在这里插入图片描述
4.
在这里插入图片描述
5.数据库事务的特性:

原子性
一致性
隔离性
持久性

6.关系规范化中的删除操作异常是指:不该删除的数据被删除。
7.事务是可以分割的一组操作集合

Linux

在这里插入图片描述
只要你代码或配置有改动,都要重新编译的,只是如果代码写成块模式的,不用整个代码都重新编译,编译器会自动编译改动了的代码。ABC都改动了原有的配置,D没有,选择D。
激活网卡就用ifconfig eth0 up
2.
在这里插入图片描述
-r 递归处理,将指定目录下的文件与子目录一并处理
-v 或 --verbose 显示执行过程
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
3.
在这里插入图片描述
export用于将shell变量输出为环境变量,或者将shell函数输出为环境变量
cat经常用来显示文件的内容
echo用于在shell中打印shell变量的值,或者直接输出指定的字符串
env用于显示系统中已存在的环境变量,以及在定义的环境中执行指令
4.
在这里插入图片描述
fstab文件存放 文件系统的静态信息,当系统启动时候,会自动从该文件读取相关信息,并将指定的文件系统挂载到指定的目录。
5.
在这里插入图片描述
^表示开头,$表示结束
6.在这里插入图片描述
FTP服务器有两个端口,其中21端口用于连接,20端口用于传输数据
7.在这里插入图片描述
(1)软连接可以跨文件系统,硬连接不可以
(2)硬连接不管有多少个,都指向的是同一个I节点,会把结点连接数增加,只要结点的连接数不是0,文件就一直存在不管你删除的是源文件还是连接的文件。只要有一个存在文件就存在。 当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改。软链接不直接使用i节点号作为文件指针, 而是使用文件路径名作为指针。所以删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件。软链接有自己的inode, 并在磁盘上有一小片空间存放路径名。
(3)软连接可以对一个不存在的文件名进行连接 。
(4)软连接可以对目录进行连接。
8.linux下查看当前网络连接的命令:netstat
9.
在这里插入图片描述
10.
在这里插入图片描述
“[^0-9]”可以匹配任何不在0到9范围内的任意数字。
11.
在这里插入图片描述
Java类首字母是要大写的哦,即使什么都不会,也秒A~
12.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值