急急急!!!有没有大佬知道这个微机接口每一步的步骤是什么意思

无脑计科或者软工,YYDS!!!

我今年研究生刚从软工排名 TOP3 的 985 毕业,本科计科,在计算机专业呆了 7 年,自认为比较了解!

本科阶段选计科或者软工,绝对不会出错。

其实只要稍微深入了解一下这 4 个专业就能很好的做出选择。

计算机专业的本科专业很多,主要就是计算机科学与技术、软件工程、网络安全、信息安全、物联网工程、数字媒体技术。

这些专业算是计算机专业招生多一点的,但要说头部专业,还是得是计科和软工,属于招生专业中的主力专业。

  • 计算机科学与技术是专业的一个总称,像软工、网络、信安、物联网、数媒这些都是它的细分。就像当年本科时我就读的是学校计算机科学与技术学院的计算机科学与技术专业
  • 软件工程是上面说的计科的分支专业,主要研究的是软件工程,可以理解为偏软件开发的计算机科学。
  • 信息安全主要研究的是网络信息安全,未来就是从事各类信息安全系统、计算机安全系统的研究设计开发管理等工作。
  • 物联网行业是个有前景的行业,物联网专业却是个我不太看好的,学的东西太多,编程,通信,网络,硬件,电子,基本就是把其它学科一些有用的课程拿来,降低一个 level 学一下,驳杂且多且不精...

其中软工的学费较贵,差不都1w一学期,计科的学费则正常一些,差不多接近软工学费的一半。

就我身边的同学,软工的同学毕业出来以后基本都从事了互联网行业,而计科出来的同学除了大多数在互联网行业,还有少部分的参与了选调和考公。

其实不管怎么说,这些学科出来基本就是混迹在各大互联网公司,这只是专业选择,代表你未来可能会从事的方向,但是没人规定说我计科出来的就不能去做网络,不能去做物联网,也没说我网络出来的不能去做开发

计算机专业虽然学科分类多,但是各个专业很多知识是相通的,差异并不大。

最重要的还是基础能力的培养,比如计算机基础、编程基础。

学习计算机最核心的方法,也是学长一路走来总结的,按照学长推荐的路线走,大学毕业后成为 Offer 收割机肯定是没问题的:

入门看视频+计算机经典书籍辅助+不断写代码。

计算机经典书籍哪里找,我花了好久整理好了,大多数书我都看过,质量有保证,自取。

大学之前从来没接触过编程,一度以为计算机专业就是打游戏专业,正是靠着自己的努力,从一所二本院校考到了软工排名前三的 985 院校读研!

你首先要明白一件事:对于计算机科班学生来说,大学计算机主要靠自己自学。

大学的自学时间太多了,仅仅是靠上课听一下肯定是不够的。

当然对于自学这件事,需要能耐得住寂寞,需要长久的坚持,这个坚持不是一天两天,不是一个月两个月,而是以年为单位。

题主现在应该立马先思考一件事,在上大学的初期,想明白自己之后想要干啥。

认真思考未来,这个动作越早做越好,毕竟目标导向。

最好及早决定自己是要毕业直接工作还是要考研,因为虽然在学习内容上相差不大,但是重点努力的方向还是不同的!!!

着重就业,那你的大一大二就玩命学,之后大三找机会进大厂实习,为你之后毕业找一个薪资炸的工作打下基础。

玩命学不是瞎学,把握住两方面就好了:

玩转一门编程语言,玩转是啥,是熟悉,不是了解就行

最好能做点工程项目,如果有机会进实验室跟着老师或者有额外的机会做点东西都行。

没有就自己去问,我不信个计算机专业没这个。

实在没有,那就多刷题练感觉,刷题是啥,后面会说到。

校招来说,计算机基础重要的就这么几门:数据结构与算法、计算机组成原理、操作系统、计算机网络、数据库这几门。

你要找工作的话,首先保证数据结构与算法学的顶呱呱。

在这个基础上,多刷题,按照分类按照专题刷。

可以看下这个前字节大佬的刷题笔记

针对 LeetCode,题的解法有很多,我们往往追求的是最优解,这里有一份清华学长整理的 LeetCode 最优解,强烈推荐:

两者配合起来应该非常舒爽。

除了数据结构的其余的课程的话,上课认真听,下课多琢磨,可能很多东西抽象懵懂,没事,你要你认真学了,认真琢磨了,你就超过 90% 的人了。

着重考研的话,学习的内容和“着重就业”学习的差不多,但是就是不用玩命,平稳的学就好。

编程语言的话,那 C 语言好好学一下。

其余的计算机基础课程,还是那些,都好好学。

考研看学校的,不同学校的计算机考研课程不同。

有的考 408,有的只考数据结构算法,但这些都不是问题,你只要这些课都在你的学习之时学好,都不成问题。

除了编程语言和计算机基础课程外,你想考研,还要把数学(高数、现代、概率论)、英语、政治学好,这些都要考。

呃,政治的话就上课好好听就好了,反正到时候还是得背的,问题不大。

还有就是,最好大一大二能参加个竞赛,拿个有点分量的奖,还有像什么奖学金啦这种能争就争,对考研复试有好处。

其实不管你选了哪条路,都要做好下面这四点

  • 学会自学。大学的自由时间一大把,只靠上课听讲远远不够,上课你不睡觉我都算你是条好汉,你是大学生了,不能只低头拉车,更要抬头看路!
  • 掌握一门编程语言好嘛。这个是必须,根据自己的规划,无论是选择 Java、C++、Python 都行,无论你以后是不是用这门语言,这都是你找工作的敲门砖。
  • 没事的时候多敲点代码。当个熟练工,才能显得你牛x,有机会跟着学校的老师或者进入到实验室做项目,一定要坚决跪舔,要跟着学习跟着做。
  • 学好数据结构、操作系统、计算机网络、计算机组成原理、数据库这些基础课程。以后不管你是走考研这条路还是面试找工作全都用的上!学好这些,走到哪里都不怕。

但是现在网上好的经验这么多,有多少人是能从头到尾看下来,这其中又有多少人是能认真跟着做的。


想学习计算机科学与技术,我感觉做好两点就够了:

  • 掌握一门扎实的编程语言。

编程语言是工具,是我们吃饭的家伙什。掌握是啥,是熟悉,不是了解就行

  • 扎实的计算机基础知识。

计算机基础知识重要的基本上就是“数据结构与算法”“计算机组成原理”“操作系统”“计算机网络”“数据库”。

其实总而言之,对于学习计算机专业,技术才是最重要的

如果你的目标是自己变得牛逼,那你大学四年可以这样。

  • 大一:学好计算机导论,学好入门编程语言(一般是 C 语言)
  • 大二:基本要学习面向对象编程语言,一般是 C++/Java,学好计算机基础课程:数据结构与算法、计算机组成原理。
  • 大三:学好操作系统、计算机组成原理、数据库这些基础课,现在课程该学的差不多了,有机会就出去找份实习,或者跟实验室老师做项目,或者下学期开始准备考研、保研。
  • 大四:更是没课,考研的考研,实习的实习,别闲着。

下面都是很干的干货,麻烦动动小手帮我 点赞呀!

计算机专业导论是面向非计算机专业人员和学生介绍计算机基础知识的计算机基础教程。

内容涉及计算机应用,Internet,与计算机交互,音频、视频和打印,数据处理,存储数据,操作系统,应用软件,网络,在线世界,数据库管理,信息系统,软件编程和开发,以及计算机安全等内容。

呃,说到这,我推荐看一门《计算机科学速成课》。

这门 40 集的课真的包含了超多的基础知识:

像计算机的早期历史、编程的发展史,到二进制、指令和程序,到算法入门、数据结构,甚至是计算机安全、黑客、加密、机器学习 & 人工智能、计算机视觉、自然语言处理、机器人等等等等都有涉及,感兴趣的可以看下,链接在下面:

计算机科班的同学,不出意外,进入编程世界的第一门的语言学的肯定是 C 语言了。

其他立志做技术行的同学,从 C 语言入门百利无害。

很多人都觉得 C 语言入门难,不能像 Python 这种编程语言一样快速获得成就感。

为啥现在还有这么多技术大佬建议学一下 C 语言呢?

因为 C 语言是一门面向过程的语言,运行速度极快,是计算机产业的核心语言,像操作系统、硬件驱动、数据库这些都离不开 C 语言。不学 C 语言,就很难深入了解计算机底层的运行机制。

现在常见的高级语言的底层几乎都是 C 语言实现的。

C 语言的学习其实就三个阶段就好了:

这个阶段学习 C 语言的基础语法知识。

目标是可以开发一些简单的控制台小程序。

这个阶段学习 C 语言自带的库函数,形成 C 语言的基本知识框架。

目标是开发一些基本的应用程序。

这个是实战阶段,要具备一定的综合性应用软件开发能力。

目标是能够开发像贪吃蛇、图书管理系统、学生信息管理系统等项目。

具体的学习路线我就不在这细说,看我下面的文章就好了。

学编程除了理论外,更重要的是要应用,应用很好理解,前期多敲代码,之后慢慢去升华。

其实编程语言就是要多练,怎么多练,就是代码量。

自己多写,然后多观摩别人的项目,看人家的写法,模仿项目,学习其中的思想,一点点的积累,一步步形成自己的东西,厚积而薄发,慢慢你就会发现你也可以了。

1、C语言制作斗地主发牌器

通过本项目的学习,可以让学员掌握一些棋牌类的手机游戏中的发牌系统算法怎么编写,为学员就业后编写一些小的游戏类APP打下良好的基础。

2、C语言实现通讯录/图书管理

这个课程将使用 C 语言完成一个简单的通讯录。会涉及到结构体、数组、链表等重要概念,需要对 C 语言有一定的了解。

3、C语言实现2048小游戏

2048是之前十分火爆的一款益智游戏,这个课程将使用 C 语言完成一个2048游戏。适合对C语言有一定基础,需要了解C语言,以及绘图库ncurses的实用。大大提高你的动手能力。

一个不到 500 行的超轻量型 HTTP Server,可以用来理解服务器程序的原理和本质。

C语言 的入门级项目!

用 C 从零创建一个简单的数据库。

重要的计算机基础课是下面这些:

之前写过这方面的学习路线,很详细:

为了方便大家阅读,我把重要的内容摘下来。

虽然这几门课程都重要,如果有个排序,我还是要把数据结构与算法排在第一位

程序 = 数据结构 + 算法。

数据结构经常与算法放在一起,在有些高校,会存在“数据结构”和“算法设计与分析”这样两门课。

这就造成很多同学懵圈,数据结构与算法有什么区别?甚至有些同学认为这就是一种。

  • 数据结构主要讲解数据的组织形式。就是我们要怎样把这些数据存储起来,所以有数组、链表、栈、队列、树、图,这是数据结构的重点。
  • 算法,则注重的是思想。比如数组里的元素怎么排序、怎么找到最大的数和最小的数等等。说白了就是解决现实中问题的思想。所以才会有贪心、动态规划等这些算法。

数据结构与算法,不管你怎么想,一定要认真学!不管面试还是考研都是必考!

下面总结一些重要的知识点吧,这样才能有针对的学。

学习数据结构与算法的第一课,我永远都选复杂度分析,在我看来,这是数据结构与算法中最重要的知识点,且不接受任何反驳。

《大话数据结构》、《数据结构与算法分析》

学习算法的套路很简单,多看、多写、多上机。

算法的话,需要掌握以下内容:

  • 基本算法思想:回溯算法、分治算法、枚举算法、贪心算法
  • 查找算法:二分查找、散列表查找、树结构查找
  • 字符串匹配:暴力匹配、KMP算法
  • 10大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、堆排序、快速排序、计数排序、基数排序、桶排序

《算法图解》、《算法(第 4 版)》、《算法导论》

  • 《数据结构》,浙大陈越和何钦铭教授联合授课,其大名在计算机领域可谓耳熟能详了。
  • 《数据结构与算法》,这门课程的最大特点是理论和实践的结合,你将学习到解决各种计算问题的算法技巧,并实现大约100个算法编码问题。

如果还是觉得学起来很吃力,可以借助下面这个网站来学习。

  • VisuAlgo,数据结构和算法动态可视化网站。

数据结构与算法的学习,往往要伴随着“刷题”,如果没特殊情况,我建议大家刷 LeetCode 就好。

刷题按照分类来刷,如果不知道刷哪几道题,可以看下这个前字节大佬的刷题笔记

针对 LeetCode,题的解法有很多,我们往往追求的是最优解,这里有一份清华学长整理的 LeetCode 最优解,强烈推荐:

两者配合起来应该非常舒爽。

我在大学的时候参加 ACM,拿过亚洲区预赛银奖,刷题贯穿了我的整个大学生涯,总结了一些刷题的经验,感兴趣的可以看下。

我最近也在重新刷 LeetCode,并把自己刷的题进行了图解,写的很清晰,如果时间允许的话,可以跟着我的进度,现在已经刷到栈和队列专题。

当然这只是其中一部分,更多的有兴趣的话自己去看吧。

计算机组成原理,即“计算机”“组成”的“原理”。

我觉得它是所有计算机基础课程中最难学的一门课,整个课程的核心就是使用数字逻辑电路和触发器搭建一个可以运行汇编指令的机器。

《计算机是怎样跑起来的》、《程序是怎样跑起来的》

《深入理解计算机系统》

  • 视频首推卡内基梅隆大学的《深入理解计算机系统》系列课程,英语不好?没关系,有中英文字幕,看完这套视频,知识+六级顺利拿到手。

看这个视频的配套教材是《深入理解计算机系统》。

  • 此外,国内的可以看下哈工大刘宏伟老师的课程(135讲)

无论你学习什么语言,都避免不了和操作系统打交道。所有语言的最后执行,都是靠操作系统。

比如你学习 Java,用到多线程技术,实际上操作系统才是负责管理进程和线程的。

不懂操作系统,你在未来学习编程语言的高级特性,涉及到线程进程调度,内存分配,或者是学习 Linux 相关的知识时,都会一头雾水。

只有学会了操作系统,才能够更好地学习其他语言和技术。

所以,操作系统是程序员进阶必会的知识

《操作系统导论》、《现代操作系统》

《深入理解计算机系统》

操作系统,说实话,在刚开始学的时候不建议直接闷头看书。

因为书看起来是真没意思。

  • 这里推荐清华大学的操作系统课程,B站上可看。分上下。

看视频的时候可以结合着上面的【书籍推荐】。

看(上)的时候可以搭配《操作系统导论》

看(下)的时候可以搭配《现代操作系统》

计算机网络的相关知识在工作时使用的频率较多的。

学习计算机网络,你需要懂得Socket编程,知道TCP/IP网络模型,了解OSI七层网络架构,知道一个数据包是如何层层包装,再层层拆包,从客户端发送到服务端。

但是计算机网络好学的多,因为计算机网络不抽象,在现实生活中,都能找的到例子。

《图解 HTTP》、《计算机网络》

绝大部分都在用谢希仁的这本《计算机网络》,讲的很好,浅显易懂,同样也是考研 408 的常用教材。

  • 首先必须强推湖大教书匠的计算机网络微课堂,yyds!!!

一个动图做的最好的计算机网络视频课程,老师讲课逻辑清晰而且特别容易懂,b 站上有视频,可以 1.5 倍速使用哟。

数据库就是存储数据的地方,但也不只是这么简单。

学习数据库,不仅要懂得SQL语句,表设计结构这些基础部分,还要懂索引、慢查询优化,配置参数调优。

再深入点儿还要学习SQL优化、备份与恢复、架构优化等等进阶内容。

《SQL必知必会》、《MySQL必知必会》、《SQL学习指南》、《数据库系统概论》

《MySQL技术内幕——InnoDB存储引擎》 《Redis设计与实现》

  • 推荐人大王珊老师的《数据库系统概论》,别问,数据库领域 YYDS!

我选的是 Python,那这里我就来说下 Python 的学习路线。

我们学任何东西学习之前,肯定要先快速的了解它是什么,大概做到心中有数,帮我们初步判断一下这个是不是想进一步学习的东西,帮助消解一下面对未知时的恐惧。

这里大家可以看一下GitHub上的这个项目,可以让你在短短几分钟之内了解一门技术

不管是零基础学习 Python 或者其他的编程语言,在刚开始的时候还是建议视频为主,书籍为辅。

毕竟啥也不了解,直接上来就看书,立马从开始到放弃。

1、[小甲鱼]零基础入门学习Python

我大二的时候有一段时间想转去 Python,当时也没买书,就想先了解一下,不知道怎么就搜到了小甲鱼的论坛,当时跟着他的视频学过一段时间,觉得讲的挺有意思,还专门去他网站冲了个永久的会员,好像一百多来着,后面好像再也没登陆过...

后来看到小甲鱼的这门课在 B 站上已经 1500w+ 的播放量,搜索排名第一(不过第一的那个应该别人发的,他们自己的账号是200w+播放)。

这个课程看起来有点老了,但是内容差别不大,后来又搜了一下,他们又录制了最新版的《零基础入门学习 Python》,现在是更新到了序列,觉得不错的小伙伴可以追一下,对新手还是比较友好的。

旧版传送门: 新版传送门:

这是微软放出的一门免费的 Python 教程,名字叫 Python for Beginners,专为初学者打造,一共有 44 个视频,每个视频的时长大概在 2-6 分钟之间,只有极少数的几个时间在 10 分钟以上。

整个课程由两位讲师共同讲解,分别是微软高级项目经理Christopher Harrison和微软的 AI Gaming 开发经理 Susan Ibach,英文配中文字幕,食用起来极佳,同时课程的示例代码和 PPT 微软也同步到了GitHub 上,只能一句卧槽走天下了...

如果你觉得这个教程不错,学完了基础可以看一下后续的微软官方的进阶教程,其实也是基础语言的一部分。

传送门: 代码&PPT传送门:

这是我买的第一本 Python 书,当然也是刚开始学的时候看了别人的推荐,加之也是豆瓣评分 9.1 的书,就买来看看。理论 + 实践,前面是基础知识,后面是实战项目。

前面的基础知识讲的很详细,以至于给我当时的感觉有点过于啰嗦了,不知道其他人看会是什么感觉。每个知识点后面都带着“动手试一试”,我感觉这点比较好,学编程之初,就是要多练,多敲代码...

至于后面的实践部分,包括一个简单的 2D 游戏、数据可视化和 web 项目,可能是当时我太菜了,或者之前没有做过项目的原因,我觉得这三个项目出现的太突兀了,2D 那个游戏做完我就直接被劝退了,倒是没觉得有啥提升,没甚意思,sad...

而且跟着书做项目,因为书出版的时间太长,很多用法都变了,照着书上做,大概率会有运行错误的时候,可能心态有点崩...

我大二的时候有一段时间想转去 Python,当时也没买书,就想先了解一下,不知道怎么就搜到了小甲鱼的论坛,当时跟着他的视频学过一段时间(现在看来当时的视频比较老),还专门去他网站冲了个永久的会员,好像一百多来着,后面好像再也没登陆过...去年他的书出了第二版,就买来看了一下...

怎么说呢,算是为当初看的视频充值了...

非计算专业的同学可以拿来一看,如果你想系统学习一下的话,就别花这钱了,内容有点乱,这个得真的配合他的视频食用了,不然真的难顶,但如果一本书需要配合视频才能看懂,那也就不太推荐了...

这本书是我朋友送我的,书到了以后一直在吃灰,因为那时候 Python 学的差不多了膨胀了...

翻开也是很偶然,那天刚好很无聊,就随手拿出来翻了翻,然后就翻完了,怎么说呢,这本书的内容给人一种很舒适的感觉,我很少有觉得读起来很舒服的技术书...

整个的结构很清晰,内容简单但是不肤浅,整个基础知识的讲解简洁明了,一点也不啰嗦,很容易就看懂了,不会有那种我看了好几遍才理解的情况(os:我什么时候也能写成这样),各种小的代码片段比比皆是,在练习的过程中反过来再加深对概念的理解。而且作为实践部分,它后面带了十个小项目,按照实际开发的步骤介绍Python 项目的过程。

如果实在让我推荐一本,我是会推荐买这本书的...

现在网上好的经验这么多,有多少人是能从头到尾看下来,这其中又有多少人是能认真跟着做的?

希望大家能有自己的思考,对自己的选择有自己的判断。

既然你选择了计算机专业,希望你能把握住机会,努努力,光明的未来在向你招手。

最后呢,希望大家不要忘记动动小手帮我 点赞呀,谢谢么么哒。

}
大佬 我这个项目就是用war包跑起来 解压出来的文件 你说的jar包是什么 求详细点[/quote] 你本地项目可以正常跑的话就clean一下,然后再打包成war包直接放进tomcat就好了,不用去解压后再放进去.war包是web项目的,jar就是你使用的那些模块,pom引入的那些就是jar格式的
}

我觉得咱们国内的学生也好,已经工作了工程师也罢。在网络这门课的学习体系中存在两个大问题:第一个是对实践的重视程度不够。第二是对实现的重视程度不够。我分开展开了和大家聊聊~

一、对实践的重视程度不够

俗话说的号,纸上得来终觉浅,绝知此事要躬行。计算机科学与技术这个专业在本科阶段来说,技术的占比是远远要高于科学占比的。那对于一门技术来讲,动手就是非常非常重要的。

而我们国内的教学模式太过于偏重理论了,所以很多人都会觉得网络技术这门课太抽象了。这不是学生的问题,而是教育方法的缺陷。你应该也没听说过有哪门技术是光看书就能看会的。

根据美国学者艾德加·戴尔1946年发现的金字塔学习理论,见下图。传统的理性性的学习如学习和听讲对知识的吸收率只有 10% 左右,而动手实践对知识的吸收率能达到 75% 以上。从效率上来讲,通过实践的方式进行学习的效率对理论学习的 7 -8 倍。

我觉得正确的学习方法应该是边学理论边动手实践。动手包括两类方法,一类是用一些命令行工具进行观测,另外一类就是用 socket 来写程序。

我建议首先要准备一台 Linux 电脑。在 Linux 下有很多成熟的网络相关的工具可供你使用。现在国内的互联网公司的服务器基本上也都是 Linux。而且用 Linux 有个好处就是源码是公开的。实在遇到不懂的问题,可以更容易地搜答案。这点比 Windows 强太多了。

对于第一类动手观测法,我的建议是你学到某一层的时候,就找到一些相关的工具来做几个实验。比如讲到 TCP 的时候,你可以启动一个 Nginx(或者干脆自己写一个 Server),用 curl 等工具发起 TCP 连接建立请求。这时候用 tcpdump 动手进行抓包,看看三次握手究竟是怎么握的。 看看每次握手的时候,包体究竟是长什么样的。

我把 linux 下常用的各种网络工具简单整理几个,各位有需要可以保存下来。

第二类方法就是动手编程。刚开始可以从一些简单的开始,比如就写个 tcp server, tcp client 让他们相互连接然后传输一些简单的数据。

然后可以开始练一些更为复杂一点的。比如写一套 FTP Server 和 Client, 让它们之间能够实现简单的文件下载。或者写一个 Web Server,支持通过浏览器来下载 Web Server 上的静态文件。再比如说模拟 tcpdump 来写一个抓包工具。(可以参考我的,里面提供了一个简单的 demo)。

做完这些相信你对网络的理解会前进一大步。对于我个人来讲,我也是一直通过理论 + 实践的方法来对知识进行学习的,效果很好。

比如我在网络中,我想弄懂一条空的 TCP 连接消耗多大的内存。我自己在工作之余抽了好长时间去翻内核源码,然后动手做实验。当实验完成的时候,我对 TCP 连接的内存开销的理解就非常的深了。

我一直想弄清楚一台服务器在实际中最大能支撑多少条 TCP 连接,我也是通过动手实验的方法来学习的,当时我前前后后至少花了半个多月。参见:

如果你也想玩玩,直接用我这篇文章里提供的源码就好。

如果你能能坚持通过这两种动手方法来学习,相信你的网络技术水平一定会远远超过你其他的同学。

二、对实现的重视程度不够

翻开任何一本计算机网络相关的教材大部分都是在讲协议(首先声明一下,我不反对理解这些基础的协议是挺重要的),那么协议具体是咋实现的,没人给讲过。

我们的日常开发都是基于操作系统在协议的实现基础上来进行工作的。对实现理解不到位会导致很多线上问题或者是性能优化都无从下手。

比如大家都知道了再服务器先 listen 一下,然后 accpet 接收连接请求。但是,到底为啥要 listen 之后才能 accept,似乎没有人和我们说过。不理解这个的话,就对全连接队列半连接队列理解不深,遇到问题就不好处理。

再比如说,现在的互联网大部分都是通过 TCP 连接来工作的,那么一台机器最多能撑多少个 TCP 连接?按道理说,整个业界都在讲高并发,这应该算是很入门的一个问题了。但当年我产生这个疑问的时候,却在 Google 上搜了个遍也没找到令我满意的答案。

再比如一个网络包是如何从网卡到达你的进程里的?这个问题表面上看起来简单,但事实上很多性能优化方案都和这个接收过程有关,能不能深度理解这个过程决定了你在网络性能上有多少的优化措施可用。例如多队列网卡的优化方案是在硬中断这一步开始将工作分散在多个 CPU 核上,进而提升性能的。我几年前想把这个问题彻底搞搞清楚,搜遍了互联网,翻遍了各种经典书都没能找到想要的答案。

还比如为啥 TCP 握手耗时过长,一条 TCP 连接会消耗多大的内存。同步阻塞网络 IO 为啥就性能慢了,为啥 epoll 用上了以后就要性能高很多。这些和工程实践相关的问题光知道网络协议理论是任何用都没有的,都是应该建立在对网络实现的深刻理解上才能更好地应对

针对这个问题,我个人做了一些努力,在实现层面把网络都扒了一遍。

例如,为什么服务端程序都需要先 listen 一下?事实上是因为服务器在接收客户端连接之前,提前准备了半连接和全连接两个队列。一个用于保存第一次握手请求,另一个用于保存第三次握手。客户端呢是在 connect 发起前,在内核里选择好端口号的。参见这几篇文章

另外,一个网络包是如何被接收和被发送的,我也写了几篇文章。

如果对我上面这些文章的深度网络知识感兴趣,可以直接下载我打包好的 PDF 或者关注我的公众号「开发内功修炼」

最后,祝大家早日攻克网络难关,也别忘了点个赞再走!

}

我要回帖

更多关于 脑机接口发展到哪一步了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信