经验分享丨你想知道的四个计算机专业分支都在这里了!

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经验分享丨你想知道的四个计算机专业分支都在这里了!相关的知识,希望对你有一定的参考价值。

如果你想进大厂,那果断选择考研;如果非要根据你的需求和实际情况,从这四个分支里面选择一个分支,我强烈建议你,四个分支——计算机科学与技术,软件工程,网络工程,数据科学与大数据技术中,请果断地选择——计算机科学与技术

我再次非常负责任地告诉你,当你拥有了硕士学位,且选择了“计算机科学与技术”这个分支,在大厂的眼里,你绝对是最根正苗红的科班,是他们选择相关人才最正统的专业,没有之一!

什么软件工程、网络工程、大数据,说白了只是正统计算机科学技术下面的一个分舵而已。这些专业之间的关系肯定也不是平行的。大数据是最新的,它们和软件开发、coding的关系不那么大,理论研究偏多。

如果非要选择排名,第一选择——计算机科学与技术,第二选择——软件工程;第三选择——大数据。第四选择——网络工程。

不过,话说回来,倘若你将来要选择的是大学毕业后直接进入开发岗位,其实专业名词就反而没有那么重要了。重要的是你的技术栈!那么软件工程就是你的第一选择!

在这里,我个人推荐一条比较务实的学习路径——

你在学生时代真的要好好把握,如果能耐得住寂寞,就好好地把基础打牢,学习透一门编程语言(JAVA or C语言/C++,不推荐把python/Go/php作为第一语言),然后好好地刷牛客或者力扣;再把网络原理+ 网络编程 + 操作系统 + 设计模式 + 数据结构和基本算法好好学习到位再配置5到10个开源项目,如果还能有时间,那就再去研究研究linux内核

一旦有了这些底子,BATJ + TMD 这些大厂真的可以随便进。

网络工程

其实网络原理和网络编程并不是一回事,网络原理主要注重理论,网络编程主要是指TCP/UDP/HTTP编程;学习网络原理和网络编程,你需要掌握以下这些知识点:

http协议,数据格式,常见响应码和返回码,HTTP1.0与2.0的区别,请求方法,存在哪些安全隐患,知道 https 是如何加密的、数字证书如何形成,什么是对称加密、非对称加密。http会话结束标志;Get与Post的区别;https建立连接的详细过程,哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?

TCP协议:三次握手、四次挥手、TCP/IP的数据链路层的交互;如何保证可靠传输、流量控制、拥塞控制。定时器,数据报文格式;socket编程的每个步骤的意义与参数代表。TCP的状态转换?TIME_WAIT状态的作用?

UDP:主要考察应用场景以及与TCP哪些不同?

select/poll/epoll的相关原理;select的各个参数作用?有哪些读/写事件?有没有更高效的IO模型?

send/recv有哪些出错情况?分别应该怎么处理?阻塞和非阻塞套接字的区别,send/recv的在阻塞和非阻塞下表现有啥不同,和同步/异步概念的区分?

当然,还有一些更高层次的问题,也值得你去思考:

网络框架对比和源码分析ACE/ICE/ZeroMQ/Mudo/Libevent/nginx

自己去设计网络请求框架,怎么做?

书籍推荐

关于推荐书籍,大家一般都会推荐《计算机网络:自顶向下》、《图解http》这两本。但我个人感觉当中的术语太多,难理解,门槛偏高,不太适合初学者。

我觉得初学者可以先看这两本,对于兴趣的培养也很重要。一本是尹圣雨的《TCP/IP网络编程》(韩国人写的),里面都是通过举例子来带你理解,写得非常好;另一本我的印象十分深刻,游双的《linux高性能服务器》,我当年,就是看了这本书,才正式从嵌入式端转为服务器开发的。

那你可能又想问,具体要怎么学习怎么看书?纸上学来终觉浅,绝知此事要躬行!没有捷径,我当时是耐住了性子,挨个儿把书里的demo代码一个个敲完了!自己边看边动手的收获是非常大的,强烈推荐这种方法!

至于操作系统,我个人就要强烈推荐一本宝藏书籍——《操作系统哲学》

我个人建议不要去学那些网上推荐得特别多的,比如《现代操作系统》、《操作系统——精髓与设计原理》、《深入理解计算机操作系统》……这些书我看一眼目录,就感觉只有一个词,那就是枯燥无味……(喜欢这些书的人别喷我,纯粹分享个人感受)而当我发现了《操作系统哲学原理》这本书以后,我真是太佩服作者了,他能够把如此索然无味的操作系统知识,写得那么有趣,真是太奈思了!

在这本书中,你需要掌握以下:

进程/线程使用场景、内存分布、区别与联系

操作系统的内存对齐/字节对齐

处理器管理与存储管理

进程的通信方式/线程同步方式;linux常见的进程间通信方法有哪些,自己用过哪些?可举例。线程的同步方式有哪些?

僵尸进程是怎么产生的?怎么回收,请讲出回收僵进程的至少两种方法?如何查看进程是僵尸进程?程序退出后,Linux为什么不直接回收该僵尸进程?

fork及wait问题,什么作用?返回值代表什么意思?

linux应用程序中如何处理信号,有哪些常见信号,分别代表什么意思,怎么利用信号做进程间通讯?编写一个守护进程的方法?

……

再来说说数据结构和算法的推荐书籍,吐血推荐——程杰老师的《大话数据结构》

每个人的精力有限,很多内容千万不要贪多。

如果只是一个开发岗位,那就掌握最常用、最基础的20个数据结构与算法,学习它们的“来历”、“特点”、“适合解决什么问题”和“实际的应用场景”。只需要下定决心,把这些常见的类型搞明白就行了,这也足以搞得定90%以上的公司面试及工作内容了(PS:如果是算法岗位,就当我没说)。

数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Tire树

算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

具体分为3个小步骤:

边学边练,每周花1~2 小时集中攻关一个数据结构和算法,全部写出来;

多思考、多拓展、还有理解适合解决什么样的问题;

自我激励,每次学习完做一篇学习笔记。

至于最后的设计模式方面,吐血推荐的书籍还是程杰老师——《大话设计模式》

设计模式是在软件工程实践过程中,软件开发者们总结出的良好的编程方法,使用设计模式能够增加系统的健壮性、易修改性和可扩展性。那么,当你进行开发的软件的规模比较大的时候,良好的设计模式会给编程带来便利,让系统更加稳定。

最后回归正题,还是那句老话,愿大家能耐得住寂寞,最终如愿进入你理想中的大厂。

如果你想在大学期间更好的提升你的编程核心能力(内功)不妨从现在开始!

计算机专业交流学习

微信公众号:C语言编程学习基地

以上是关于经验分享丨你想知道的四个计算机专业分支都在这里了!的主要内容,如果未能解决你的问题,请参考以下文章

Python如何入门,无偿分享学习方法,你想知道的都在这里了

JVM-Sandbox核心技术实现和架构,你想知道的都在这里了

云计算从入门到入行,你想知道的都在这里了

你想知道的RocketMQ Operator干货都在这里!

你想知道的手势识别都在这里

你想知道的深度神经网络模型训练中的 tricks都在这里了