如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
计算机科学专业的同学,你应该会什么2012-07-1004:08计算机科学,不是计算机也不是科学。这篇文章,建议大一新生好好读一读。你不需要会以下的任意一种:做Flash(人家还有学艺术的呢,别抢饭碗)视频剪辑(你确认你是制片?)Photoshop(你确认你会拍照?)组装机器(除非你想去电脑城打工)重装系统(同上)修Windows(同上)做网页(请问你会设计么)但是,你需要会很多其他的东西。别忘了,你是计算机科学的学生。计算机系不应该是培养程序员的。程序员是青春饭,35岁还在继续当程序员很可能会被layoff,而且程序员本身也是没啥职业发展空间的,要不然变成架构师,要不然变成管理层,要不然,另寻高就吧。如果只是follow学校的教育,很不幸,35岁可能会成为你的一个gap。算法和数据结构没错,作为计算机系的学生,这两门课必须得学好,否则,不能做一个合格的程序员,架构师虽然不见得非得写算法,但是总是要可以看懂的吧。主页君的算法学的很差,而且因为不是写程序的,所以没法说码农需要知道什么算法,但是非码农写程序的话,基本上在纸上写一写画一画,分析清楚逻辑,简单的算法自己设计应该没啥问题。除非你不在纸上分析。操作系统原理不是WindowsNT的操作系统原理。这是个黑盒子,而且经常变,而且设计足够复杂。这里说的,是UNIX的操作系统原理。需要清楚的是,从计算机加电开始,如何进行引导操作系统,如何加载系统内核(提问:A20linegate是干什么的),init如何bring各个服务启动,又是如何初始化虚终端的。一个二进制文件,如何加载(forkexec,ELF/COFF/a.out文件如何执行)。程序是如何编译和链接的,ld是咋回事儿,so/dll是干啥的,和elf/a.out/exe有什么区别。ABI是什么,如何保持库的兼容性,namemangling是咋整的,为啥C++的兼容性差(或者说,为啥Windows里VC11编译的EXE调用gcc写的C++DLL可能会非法操作,或者说SunCC的C++动态库和gcc里的C++程序不兼容)。最好能够用手编译一个程序(没说让你gcc-ohellohello.c,是让你用gcc,as,collect2之类的自己编译)。dlopen之类的咋玩(会这个就有可能能绕过Apple的审查,用iOS的私有函数哦,记得加密函数名以及dlopen函数…)。内存是如何管理的,函数是如何调用的,参数如何入栈(一定是右到左么?),内核和用户程序是如何通信的,浮点运算是咋回事儿,怎么cast浮点到int……恐怕这些不知道,操作系统和计算机原理白学了吧。说到内存管理,malloc()不是很好,而且有时候内存碎片多了,malloc()不见得能立即返回,有可能要等很久才返回。或者干脆就挂死。锁也是不得不提的。多线程应用如何设计,什么是线程安全,什么样的函数不是线程安全的,criticalsection是咋回事。文件系统是怎么设计的,inodetable里有什么,最好看看Linux的VFS,最好能自己设计个文件系统。以及为啥要有日志,以及为啥Windows98不正常关机需要跑scandisk。(虽然主页君认为微软只是为了恶心一下你而已…)当然还有为啥某些文件系统可以恢复数据。说到恢复数据,主页君需要提醒一下,XFS和HFS+(MacOSX)是几乎没法恢复的,要备份!网络所有机器现在都联网了,以下几个协议说不清楚就不像话了:HTTPDNSTCPIPDHCPARP至少得知道这是干啥的吧。至于TCP,里面的东西挺多的。还有IP,会算网络是必须的。如果打算干网络工程师,上面的要烂熟于心,以下的东西也得非常清楚:OSPFBGPSNMPCDPRIP(不过这协议已经RIP了。。。)顺便还得捎带着搞清楚IOS咋玩。考虑到国内,也得会个华三的配置(神马displaythis之类的恶心命令)。当然设计网络也是非常非常需要的了。对了还有troubleshooting。至于网络开发——大家都是不少用C开发的吧,那么什么connect,accept,bind,listen,read,write之类的当然常用了。还有就是multiplexing方法,以及poll()select()以及epoll,kqueue咋玩,否则效率高不了。当然也可以用Python的Twisted写,也挺方便的。不过也有不少人用Python的socket直接写攻击程序。数据库说实话,大部分人到最后用数据库的时候,只是用个SQL而已,而且都不见得写SQL了,流行用ORM嘛。至于调优,君不见有类人叫做DBA。CRUD会写了,问题就不大。当然,有兴趣做DBA的,上面的操作系统原理自然是要非常清楚了。主页君并