计算机网络(TCP/IP面试大纲)

1,计算机网络主要指的就是TCP/IP协议栈,是互联网的基石
2,容易忘是因为TCP/IP技术栈有一大部分都隐藏于操作系统的内核态,较少被接触。
3,重点脉络:
(1,反复记忆。2,多问为什么)
一、TCP/IP协议体系的认知
(1)分层。一部分处于用户态,一部分处于内核态。数据链路层,网络层,传输层封装于操作系统内核态。应用层存在于操作系统的用户空间,包括DNS,FTP,HTTPs,HTTP,工作中接触较多的是应用层的部分。但其它层的原理必须理解,面试考察。
(2)层与层之间下层对上层是透明的,传输在每一层是对等的。
二、数据链路层。
(1)以太网帧的格式。
在这里插入图片描述(2)MTU(最大传输单元)的概念。(3)ARP协议和RARP协议(地址协议和逆地址协议,网卡MAC地址和IP地址互查机制)(网络层和链路层的中间层)ARP报文格式,查询原理,缓存机制
三、网络层(IP协议)
(1)掌握IP首部格式:如16位分片标识、DF不分片标志、MF更多分片标志、13位片偏移、8位生存时间TTL、16位的首部检验和等等。
其中片偏移单位8B为8字节(Byte)
在这里插入图片描述
(2)掌握如何IP分片:如总长大于MTU值,(面试官可能会让)画分片情况;如何避免IP分片(思考:可在应用层或传输层做限制);确定分片顺序;确定分片是否全部到达。
在这里插入图片描述
每段都有首部,然后使用题干要求的最大值(比如给的1420B,)
片偏移量的单位是8B,如图中的第二个数据部分的片偏移量为1400/8=175
在这里插入图片描述
记忆技巧:一种八片的首饰(1总8片的首4)
(3)掌握IP选路。会看路由表。Route print 。路由表每个字段的含义。非常熟练掌握路由表
在这里插入图片描述
(4)掌握ICMP(因特网控制报文协议):(理解为网络层和传输层的中间协议)报文格式;2种查询报文+5种差错报文。
查询(询问)报文:
在这里插入图片描述
差错报文:
在这里插入图片描述
在这里插入图片描述
3.时间超过:超过生存时间了,或在规定时间内不能收到完整数据报时就丢弃

四、传输层
(1)掌握UDP协议:无连接,不可靠的特点;首部各个字段
(2)掌握TCP协议(面试集中考察):面向连接,可靠;首部各字段(序号,确认号,首部长度,窗口大小,校验和等特别的,完成可靠功能的部分);TCP连接控制机制(以下都要掌握:三次握手,四次挥手,同时打开,同时关闭,半关闭);TCP流量控制机制(滑动窗口、慢启动、拥塞避免、快速重传、快速恢复的算法原理);TCP超时重传机制(四个定时器);一些问题(常问值得思考的问题:**为什么三次握手四次挥手?**为什么TCP和UDP都存在尾包头?)
五、应用层
(1)掌握DNS(域名解析)协议:名字空间;DNS指针查询(反向查找或逆向解析)基本原理、DNS缓存
(2)FTP协议(弱化掌握即可,活化石):控制连接和数据连接(为什么需要这两种连接);两种工作模式(PASV+PORT);各种FTP指令和响应码;(上传下载时的)FTP断点续传,匿名FTP
(3)HTTP协议(掌握):报文格式(请求报文、响应报文、请求头各种字段、响应头各种字段);HTTP状态码。
(4)HTTPS协议:详细握手过程;大致了解一下各种算法(摘要算法、数字签名、数字证书的原理与过程)
在这里插入图片描述
算法比 C/C++比较深的知识 还重要

阿里巨难?
自我介绍要流畅连贯,不用太长,随性一点别太套路
百度面试问:
一面(50分钟)TCP/IP:三次握手(很基础)
二面:给了张Linux命令问你干嘛的(适当掌握一点Linux命令很有必要,尤其报的岗位涉及Linux)
2个算法题(其中一个是手写快排代码)基础算法必须倒背如流的程度
三面:给一个超大的数组进行高效的去重和排序

腾讯:
互动娱乐事业群
二面:对什么语言感兴趣(C++);看过啥书,C++虚函数实现原理,构造析构流程
算法题(手写一个扑克牌洗牌程序)

1.技术的视野尽量开阔(前端后端,中间键,数据库、云计算、虚拟化、微服务等)
2.数据结构算法非常重要

剑指offer,编程之美,编程珠玑

C++学习:
看书顺序由浅到深
第一本 Essential C++ (由c过度到c++)
第二本 C++ Primer第四版 (内容很全,但是不深)
第三本 Effeetive C++
第四本 More Effeetive C++
第五本 C++ 标准程序库(STL)
第六本 深入探索C++对象模型(进阶,底层原理,如虚函数内部的表怎么实现的)
欢迎补充

1:打好基础,搞好基础概念,理清学习路线,不要盲目追求新技术。
2:语言选择不分好坏。看兴趣,岗位,用途。
3:拒绝封闭式学习。封闭,问题积累多,学习困难。敢于分享和交流,发现并解决问题。
4:代码不是用来记忆的,而是练习,思考出来的。要记的是设计编码的套路模式。
5:后期经常自我怀疑。积累经验,时间长了就好,没到拼天分智商环节
6:到处收集资料,但从来不看。资源在精而不在多。确定路线。
7:学了就忘。要经常用,需求驱动,记录,总结,思考,回顾,写博客笔记。
8:转行编程。编程门槛低,不用自我怀疑。

1.数据结构与算法
2.编程语言
3.计算机网络
4.操作系统(了解基础原理和概念即可)
5.数据库(SQL,索引的基本原理)

技术学习方法:
1.认知,了解(第一印象很重要).主要是掌握概念和方向
了解该技术的百科定义
该技术解决了什么问题
摸清同类技术有哪些
在这里插入图片描述
了解该技术的主要组成部分
思考一下该技术为什么出现
2.学语法,学用法
买书看之前:
(1)视频教程(效率低)
(2)快速上手视频
(3)看别人写的入门博客
看权威书(成体系,提高认知深度)
看官方文档(硬着头皮看)
3.局部练习,小型实战,搭环境
小建议:遇到坑及时记录,多思考提炼总结,写博客
4.上手实际项目或开源项目(基础要牢)
5.造轮子,手撸代码(自己写个开源博客,GitHub)

发布了65 篇原创文章 · 获赞 0 · 访问量 2023

猜你喜欢

转载自blog.csdn.net/ljmiiianng/article/details/103773796