回答数
3
浏览数
14561
最深最痛
通常情况下,软件工程师需要具备以下几个方面的知识结构:
第一:操作系统知识。操作系统知识是软件工程师必须具备的重要内容,Web开发领域可能会使用到Windows系列操作系统,大数据和物联网方向要使用到Linux系列操作系统,掌握操作系统的体系结构是进行软件研发的重要基础。主要内容包括资源管理、任务调度、并发管理、权限管理、网络管理等内容。
第二:编程语言和算法。编程语言是软件工程师必备的技能,不同方向的开发需要使用到不同的编程语言,比如Web开发可能会使用PHP、Python、Java等语言,而大数据可能会使用Java、R、Scala等语言,而物联网开发可能会使用到C、C等编程语言。通常来说,软件工程师往往需要掌握多门编程语言,以应对不同的开发环境。算法是软件工程师的重点知识结构,因为软件研发说到底就是个数学问题,所以算法的掌握情况往往能够决定软件工程师的成长高度。当然,对于应用级软件工程师来说,也有可能不会接触到更多的算法。
第三:领域知识。不同开发领域需要掌握不同的知识结构,比如大数据软件工程师往往需要掌握Hadoop、Spark平台的使用,而Web开发工程师往往还需要掌握前后端开发技术,包括一系列Web开发框架的使用等等。
软件工程师需要学习以下知识:
(1)熟悉计算机系统的基础知识;
(2)熟悉网络操作系统的基础知识;
(3)理解计算机应用系统的设计和开发方法;
(4)熟悉数据通信的基础知识;
(5)熟悉系统安全和数据安全的基础知识;
(6)掌握网络安全的基本技术和主要的安全协议与安全系统;
(7)掌握计算机网络体系结构和网络协议的基本原理;
(8)掌握计算机网络有关的标准化知识;
(9)掌握局域网组网技术,理解城域网和广域网基本技术;
(10)掌握计算机网络互联技术;
(11)掌握TCPIP协议网络的联网方法和网络应用服务技术;
(12)理解接入网与接入技术;
(13)掌握网络管理的基本原理和操作方法;
(14)熟悉网络系统的基本性能测试和优化技术,以及可靠性设计技术;
(15)理解网络应用的基本原理和技术;
(16)理解网络新技术及其发展趋势;
(17)了解有关知识产权和互联网的法律、法规;
(18)正确阅读和理解本领域的英文资料。
总是想你
一、栈(Stack)、队列(Queue)和向量(Vector)
1、单链表、双向链表、环形链表、带哨兵节点的链表。
2、栈的基本概念和性质,栈ADT及其顺序,链接实现,栈的应用、栈与递归。
3、队列的基本概念和性质,队列ADT及其顺序,链接实现。
4、队列的应用,环形队列、双向队列。
5、向量基本概念和性质,向量ADT及其数组、链接实现。
二、树
1、树的基本概念和术语,树的前序、中序、后序、层次序遍历;
2、二叉树及其性质,普通树与二叉树的转换。
3、树的存储结构,标准形式。
4、完全树(completetree)的数组形式存储。
5、空树的表示;树的应用,Huffman树的定义与应用。
扩展资料:
第二部分计算机系统基础
一、 处理器体系结构
内容:CPU中的时序电路、单周期处理器的设计、流水线处理器的基本原理、DataHazard的处理、流水线设计中的其他问题。
二、 优化程序性能
内容:优化程序性能、优化编译器的能力和局限性以及表示程序性能、特定体系结构或应用特性的性能优化、限制因素、确认和消除性能瓶颈。
三、 存储器结构及虚拟存储器
内容:局部性、存储器层级结构、计算机高速缓存器原理、高速缓存对性能的影响、地址空间、虚拟存储器、虚拟内存的管理、翻译和映射、TLB、动态存储器分配和垃圾收集。
四、 链接、进程及并发编程
内容:静态链接、目标文件、符号和符号表、重定位和加载、动态链接库、异常和进程、进程控制和信号、进程间的通信、进程间信号量的控制、信号量,各种并发编程模式,共享变量和线程同步,其他并行问题。
五、 系统级IO和网络编程
内容:IO相关概念、文件及文件操作、共享文件、网络编程、客户端-服务器模型,套接字接口、HTTP请求,Web服务器。
参考资料来源:百度百科-软件水平考试
我是王我是皇
软件工程师需要学什么
软件工程师(Software Engineer)可以说是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格。下面是我整理的关于软件工程师需要学的内容,希望可以帮助大家!
软件工程师就是从事软件开发相关工作的人员的统称,它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。
软件工程师的技术要求是比较全面的,除了最基础的编程语言(C语言C++JAVA等)、数据库技术(SQLORACLEDB2等)等,还有诸多如JAVASCRIPT、AJAX、HIBERNATE、SPRING等前沿技术。
1、Javascript
第一名的是Javascript,有的职缺中都要求必须会这项技能,那么Javascript为什么这么厉害呢?
最主要在于网络软件开发的盛行,Javascript是很多现有的开发框架的基础除了用在前端的开发(Angular、Ember、Backbone等),也用在后端的架构像是以及资料库数据的读取如MongoDB。
Javascript所建立起来的生态系非常的庞大也造就了大多数的工作都需要这项技能,Javascript本身学起来并不会太困难,如果想要懂一些基本的应用那可以参考这里(这里也推荐大家可以看下马海祥博客的《老程序员给初学者的一些建议和忠告》相关介绍)。
2、Java
榜上的第二名是Java ,占了,关于Java有些人认为它一个比较过时的语言也认为它即将被淘汰。
但是根据TIOBE Index上的排行(根据程式语言的普及与受欢迎程度),Java还是名列第二的,Java不仅没有被淘汰,它还过得很好仍然是很多大企业爱好的后端语言。
Java之所已受到企业的重视,一个很大的原因不止是因为他本身好用,而是因为学好Java让你学其他程式语言相对容易,因为Java是种面向对象语言而且不需要处理指标(Pointer),加上他有很好的开发环境(IDE)让初学者使用起来相对的简单,可以说是身为一个软件工程师绝对要懂得基础。
以马海祥的经验而言,Java学起来比Javascript稍微难一些网络上关于这方面的资源也不缺乏,像是MIT就有提供他的课程教材免费让大家学习。
3、HTML
在榜上第三名是HTML,马海祥觉得HTML严格说起来并不是一种程式语言它是一种标记语言(Markup Language),简单来说就是利用标记可以达到与单纯的文字不同的效果。
例如一段文字在前后加上标记就可以加上超连结,HTML是网路开发中基础中的基础,尤其在前端的开发上了解HTML每一个标记的功能是必要的。
但是马海祥还是要强调他本身并不是一种程式语言,如果只会HTML对找工作是没有任何帮助的,他只是基本中的基本,在这里也推荐大家可以花一点时间看下马海祥博客的《12种最常用的网页编程语言简介》相关介绍。
4、SQL and NoSQL
除此之外,榜上有名的.是SQL在的职缺上这项技能都是必须的。
根据Asurvey的调查有79%的受访者仍然是使用关系资料库也就是为什么SQL受到欢迎的原因,但这并不代表NoSQL就不重要虽然MongoDB在榜上只有,但是它主要被用在需要快速存取资料的产品上,像是Craigslist还有Expedia。
NoSQL与SQL究竟孰好孰坏,在资料库的社群上一直是一个广受争论的议题,绝大多数的任认为NoSQL是未来的趋势,但是以目前而言,SQL仍然是占了上风。
5、Javascript Frameworks
建立在Javascript上的开发框架总共有三个、以及,这类的框架可以让你很简便而且快速的处理前端的开发,然而这三种开发框架由于性质相近,因此也有很多的谁才是最好的争论。
目前是由Google所开发的站在榜上第一,当然这三种开发框架都有自己的好处,像是比较适合大型的开发,比较简单易学,让合作开发更简单。
6、
这里马海祥也特别提下,其原因是在于逐渐增加的使用者,以及大型公司像是Linkedin以及Wal-mart的使用。
是一个基于Chrome JavaScript运行时建立的一个平台,用来方便地搭建快速的易于扩展的网络应用借助事件驱动,非阻塞IO模型变得轻量和高效,非常适合运行在分布式设备的数据密集型的实时应用。
可以在不新增额外线程的情况下,依然可以对任务进行并行处理——是单线程的,它通过事件轮询(event loop)来实现并行操作,对此,我们应该要充分利用这一点,尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。
优质工程师报名问答知识库