当前位置:首页 > 科学课件 > 正文内容

为什么刚入门的程序员没有感觉到算法和数据结构的重要性?

zhao_admin1年前 (2022-05-25)科学课件36

万丈高楼平地起,基础不扎实,面对工作中问题束手难测时谁最尴尬?

计算机的基础知识看似没什么用,既不能立刻上手为项目做导向,需要用时还得其它专业知识做填充。

对于一些急于转行的小伙伴来说,覆盖全部的计算机的基础知识就会成为成本高的“鸡肋”

但现实情况当你掌握了计算机基础,不论是纵向钻研主攻某一方向还是横向发展在C语言系列发展可变通性是非常高的。

数据结构编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。那么爬坡时使用1档,便可以获得更大的牵引力;下坡时便使用低档限制车的行驶速度。

回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数组还是ArrayList,或者HashSet,或者别的数据结构。如果不懂数据结构的,可能随便选择一个容器来存储,也能完成所有的功能,但是后期如果随着学生数据量的增多,随便选择的数据结构肯定会存在性能问题,而一个懂数据结构和算法的人,在实际编程中会选择适当的数据结构来解决相应的问题,会极大的提高程序的性能。

基本功能

1、如何插入一条新的数据项

2、如何寻找某一特定的数据项

3、如何删除某一特定的数据项

4、如何迭代的访问各个数据项,以便进行显示或其他操作

常用的数据结构

对于数组,查找快的方式,只是随机查找快,因为知道数组下标,可以按索引获取任意值。但是你要查找某个特定值,对于无序数组,还是需要遍历整个数组,那么查找效率是O(n),效率是很低的(有序数组按照二分查找算法还是很快的)。插入快,是在数组尾部进行插入,获取到数组的最后一个索引下标,加1进行赋值就可以了。删除慢,除开尾部删除,在任意中间或者前面删除,后面的元素都要整体进行平移的,所以也是比较慢的。综上所述:对于数组,随机查找快,数组尾部增删快,其余的操作效率都是很低的。

操作系统意义并发

编写并发代码并不容易,特别是使用线程共享内存和线程锁。然而,现在很多学习计算机科学的学生都会在他们以后的职业生涯的某些时候使用到(并发)。在OS课程以外的课程里学习并发问题已经成为了一种增长的趋势,一个可靠的并发编程介绍对学习操作系统课程是有很大好处的。

资源管理

硬件层次上的资源通常是专用的。操作系统提供了这些资源的种类,它们可以是虚拟的(每个用户都有种错觉,自己拥有资源的一份备份)或者是仲裁的(一次只能有一个用户占有资源,但由操作系统来安排访问顺序)。允许多用户访问专用物理资源是一个很基本的策略并被运用到很多用户级别的程序中。

性能分析和冲突解决

正如“为什么#*$是我的机器分页?”。当资源被分享时,冲突通常也会随之而来。冲突问题可以使用多种方式来解决,比如使用队列,合理共享,或者使用优先级。在某些情况下,比如CPU调度,没有单一技术解决方案并且最后的解决方案是一些古怪的混合技术。有时,最令人感兴趣的是找出导致问题出现的主要原因是哪一类冲突。

隐藏复杂性的接口

一个具有良好设计的接口是一个美妙的东西。它更美妙的地方体现在把一个讨厌的低层次接口(调制解调器或者NE2000卡)转换为一个实用高效的高层次抽象接口(套接字流)。把像套接字(socket),文件系统和地址空间这些集合合到一个单一便利的包里可能是计算机科学10大贡献之一了。

处理大型软件

这是毫无疑问的,陷入别人的几百万行代码库中去是一个噩梦。错误零散的文档,残旧和广泛的接口,糟糕的交互,和费解的错误信息。如果你能够开始制定一个系统的方法去学习你需要用代码修复的大软件的相关部分,那么你以后的生活就会轻松很多。你可以讨厌Linux内核但它比你以后的职业生涯会遇到的软件好多了。

而编译原理,计算机组成原理等这些课程也是一样,编译原理在前端和后端中的运用:

如果你决定在程序员岗位深耕发展,基础的理论内容还是要掌握扎实,这样在之后的职场发展中才能快速超车。

扫描二维码推送至手机访问。

版权声明:本文由PPT写作技巧发布,如需转载请注明出处。

本文链接:http://www.ppt3000.com/post/63778.html

分享给朋友:

相关文章