终于等到了一期我话特别多的投稿,本人大学阶段计算机专业,
传说中的CTFer,现在在公司做安全研究。
先附上一张最近很火的电视剧《亲爱的,热爱的》里的经典图片
Nmap可以检测目标主机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。
当然上述只是题外话接下来说一些正经的事情。
首先关于为什么要学好计算机基础知识
学习计算机基础知识有助于帮你深入的理解计算机是如何运作的,在今后的工作中会对你起到很大的帮助,也会拓展你的知识面,锻炼思维。
如果我不是科班计算机专业出身,我应该自学哪些基础知识呢?
一般大学计算机专业开设的课程有各种编程语言,离散数学,计算机系统结构,计算机网络,编译原理,算法,数据结构,操作系统等等大概如下图所示
如果非科班出身,非常推荐图中这几本书,如果英文能力好的话也建议买英文原版学习,学完这些书以后你会发现对计算机的理解又深入了一层,当然不限于这些书,还有计算机网络,TCP详解(有三卷)什么的都非常推荐大家阅读,在这里简单列举一下这些书都讲了什么方便大家选择。
《编译原理》
介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。
《算法导论》
递归、概率分析与随机化算法、排序与顺序统计、堆排序、快速排序、线性时间中的排序、中值与顺序统计、数据结构、散列表、二叉查找树、等知识。
《操作系统》
大致介绍了OS的发展、传统OS和现代OS的特征及功能、进程和线程管理、进程同步、处理机调度和死锁、连续和离散存储器管理方式及虚拟存储器、I/O系统的各个层次、文件系统和磁盘存储器管理、用户接口以及接口的实现方法等内容
《计算机网路》
重点立足于计算机网络的基本原理,同时兼顾了internet体系结构与tcp/ip协议等内容,你可以学到非常多的协议知识等。剩下的图书各位读者可以自行查阅
学习方法
学习方法这个问题因人而异,笔者个人认为最好的方法是读书,看例子,做题,查资料,视频为辅助,因为个人觉得视频是讲师提炼出来的,没有自己提炼出来印象深刻,所以建议大家阅读原书,扎实的打基础。其实在学习的过程中你会发现这些知识是非常有趣的,小小的一个计算机竟然如此的复杂,凝聚了人类非常多的智慧。有些人可能说,我现在工作是前端开发,我只要学会有关前端的知识就行了,其实完全可以在开发之余学一些这些只是会帮助你更好的理解计算机,当然如果之后跳槽的话选择范围也会更广一些。
一些踩过的坑
1、面试环节
可能你会以为做一个程序员会写代码就行,写代码是很重要的,但并不止于此,我所经历过的几乎每家公司和计算机相关的岗位面试一面环节都需要在线编程,接下来进入二面三面就开始问有关计算机系统结构,计算机网络,协议编程等问题了,比如这道题目“假如你是一家公司的网管,目前业务遭受到了syn-flood攻击,发现tcp业务连接时出现第一次会中断,重新连接正常,请问原因是?”很明显这道题目就考到了计算机网络的知识,再例如tcp拥塞处理,Session、Cookie 与 Application的区别等就考到了很基础的计算机知识,到了三面问题难度一般会加大而且非常的综合。
2、正式工作后的局限性
虽然总体来说都是程序员,但是程序员也分很多,比如做ai的程序员,做数据库的程序员,做安全的程序员,做开发的程序员等等公司会分的很详细每个部门都有自己的程序员,以自己为例,自己做安全,但是由于计算机系统结构,汇编等学得不扎实导致做底层很艰辛,只好主要做web的安全研究,然后再空余时间慢慢补上以前的知识漏洞。但是周围的大神那种人,对这些基础知识的掌握简直如神仙一般,在我这个行业应证了一句话,web是狗,re是爸爸,pwn是爷爷。
以上这些便是我的一些个人看法和建议,总之还是一句话:打好基础真的非常非常非常重要,重要的事情说三遍。
热门评论
赞?