软件工程

一份软件工程行业生存指南

蓝咒 提交于 2020-02-21 06:38:25
如今越来越多的人进入软件工程行业,偶遇一份国外同学写的行业生存指南,读来感觉颇值得参考,简单翻译过来,分享一下。也许生存指南能更好得让你在这个行业生存下来,并快速获得成长与发展。 我遭遇了作为一名软件工程师的现实:我必须去掌握当时还不知道,但我将会需要的许多技能。回首过往,如果早知道我现在知道的这些事情,肯定要好很多。 因此,我写了篇指南,它源自早年我作为专业人士去辅导程序员的经验,以及我本人和我一些同事的经验来帮助其他人。 包括以下内容: 如何充分利用好面试; 如何在软件工程师的工作中存活下来并茁壮成长; 以及在考虑持续改进时需要哪些资源。 1. 面试 当你开始你的软件工程职业生涯时,你将不得不面对一个不争的事实。面试糟透了。 对每一个牵涉其中的人来说都是可怕的。作为一名面试官和一名应聘者,我可以证明面试是一个很大的时间无底洞,它包含极度的压力,并且是一个非常糟糕的未来工作表现的指标。然而,它们是必要的邪恶,以至于你和你的简历都最好为此做好准备。 1.1 准备战斗 如果你正在考虑从事软件工程,一定要学习一些最常见的编程面试问题,比如 “FizzBuzz”: 编写一个将数字从 1 打印到 100 的程序。对于 3 的倍数就打印 ‘Fizz’ 而不是数字,对于 5 的倍数 就打印 ‘Buzz’。对于既是 3 又是 5 的倍数,就打印 ‘FizzBuzz’。 听起来足够简单,对吧?

[系统软件工程师面试] 6. mysql

别等时光非礼了梦想. 提交于 2020-02-21 02:54:50
1. Mysql内核 MyISAM和InnoDB内核选型 1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一; 2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败; 3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。 4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快; 5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一; 如何选择: 1. 是否要支持事务

《构建之法》读书笔记

怎甘沉沦 提交于 2020-02-19 22:36:10
第一节软件工程课上,杨老师力荐同学们务必要人手一本《构建之法》第二版。课上说到这本书无论是对学习软件工程学科的学生,还是教授软件工程课程的老师,或是从事软件开发行业的相关人员,都是一本令人受益良多,大开眼界的著作。于是课后便立马订购了这本书。 坦言之,作为一个跨专业的学生,之前对软件工程学科知之甚少,并从未有过之后要当程序员的想法。印象中的IT行业,就是每天敲代码,改代码,像个机器一样,时刻准备着满足目标用户的需求,并给出相应的解决方案。很无奈,没想到网上订书那么慢,直到今天中午才拿到这本书。初次看到这本书,首先书面设计简洁又大方,书面上的图画——鲁班锁,像是在告诉我们这本书是重在“构建”二字。是构建编程理念?构建软件模型?亦或是通过这本书构建出自身对软件工程的理解?而真正了解和喜爱上软件工程这门学科,还需继续往下看。 说实话,一下子看完整本书,显然不太现实。于是在粗略地翻看了书本的大致内容后,发现,这本书并不像我看过的,或者印象中的教学课本,它并非一上来就是各种知识框架,而是以一种轻松与读者分享的方式,让读者能很容易被书里的内容抓住。引用各种有趣的案例、故事和亲身经历来讲述软件工程这门学科。另外,还介绍了个人开发、结对编程和团体合作分别的流程和模式。我还注意到,在每个章节后面都有个,练习和讨论环节。我想作者意在自我学习的过程中要加强和重视讨论和分享。 最后

软件架构师如何工作

旧巷老猫 提交于 2020-02-19 18:39:16
  通过阅读王概凯的架构漫谈和查阅一些其他资料,我大致了解了一下软件架构师的一些相关知识。   什么是架构呢?在架构漫谈中这样说道:把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。那又应该如何做好架构呢,最重要的有两点。一是识别问题,要正确的认识问题,需要问两个问题:这是谁的问题,有什么问题。二是要架构切分,架构的切分的导火索是人的负载太重。架构的切分实际就是对stakeholder的利益进行切分或合并,使得每个stakeholder的权责是对等的,每个stakeholder可以为自己的利益负责。它的最终结果都会体现在组织架构上,只有这样才能够让架构落地并推进。架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。   所谓架构师,通俗的说就是设计师或结构设计者,这些定义如果用在建筑学上,则是很容易理解的。在软件工程领域中,软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者。软件架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本

软件架构师是如何工作的

微笑、不失礼 提交于 2020-02-19 17:31:28
  学习计算机技术的过程中往往会遇到一个问题:这个东西是干什么的。如果能弄清这个问题的答案,那就能理解我们所要学习的技术的整体架构。在这就有了架构这个概念。 架构是什么   在弄清架构是什么之前,更需要弄清我们日常生活中常见事务的过程,这是因为计算机是个神奇的领域,在需求我们的创造力的同时,更需要我们的逻辑感,所以软件工程师往往会用现实生活中的东西来作为灵感来源,方便他们为手上的工作做出最精妙的设想。从原始社会开始就有了分工这个概念,男人狩猎女人采摘,使得整个氏族能有条不紊地发展起来,这对于古人类学家来说就是一种社会架构;而随着人类社会的复杂化,这种简单的工作划分就完全不再适用了,而到了现代社会,估计就人类学家而言这个社会架构也就像他们这一辈子都无法完全研读的一本百科全书了。   计算机是人类为了降低自己的工作复杂度而产生的工具,也不知道为什么,在创造这个机器的时候,人们总是有意无意的使它更接近于现实中存在的东西或者逻辑,面向对象技术就是最好的例子,这也是软件工程师为了把现实映射到计算机里的伟大实践。如果计算机工作的过程只是二进制的不断延伸,那估计没几个人能用计算机。所以,我们现实中存在的架构这个东西也就顺理成章地在计算机里面产生了。 软件架构师能力一——判断   架构好比分层的鸡尾酒,相互之间不能过度的交流,否则会混成一杯平凡的酒,如何判断出某种液体适合这种酒就是调酒师的工作了—

JAVA之学生信息管理系统

ε祈祈猫儿з 提交于 2020-02-18 19:14:15
StudentManager系统 系统的数据: 变量 stunumber 为字符串类型 String,用于存储学生的学号(有 8 位数字组成) 变量 name 为字符串类型 String,用于存储学生的姓名。 变量 mathematicsscore 为 double 类型,用于存储学生的高等数学成绩,高等数学的学分为 4 分。 变量 englishiscore 为 double 类型,用于存储学生的大学英语成绩,大学英语的学分为 3 分。 变量 networkscore 为 double 类型,用于存储学生的计算机网络成绩,计算机网络的学分为 4 分。 变量 databasescore 为 double 类型,用于存储学生的数据库成绩,数据库的学分为 3 分。 变量 softwarescore 为 double 类型,用于存储学生的软件工程成绩,软件 工程的学分为 2 分。 功能要求: 1.实现成绩的录入 2.学生成绩修改 3.计算学生成绩绩点 4.退出程序界面 思路: 首先,利用对象数组来存储5个数据,只存学号和姓名,成绩都默认为零 利用while循环来控制选择的功能,选择4就退出循环,否则继续循环 根据所选的功能,利用case语句分开,分被执行功能 该程序会重复用到查找学号的方法,因此建立一个find()方法 该录入功能会有一个难题,就是如何实现实时的更新 因此

计算与软件工程作业一

别说谁变了你拦得住时间么 提交于 2020-02-18 09:58:44
准备过程中遇到的困难 1.在手机和电脑上安装钉钉并完成注册以及加入班级的过程中并未遇到困难。 2.在cnblogs注册账户,加入班级时发现需要填写 我的码云主页 ,在请教老师后顺利申请注册了自己的码云主页并加入了班级。 3.不知道如何将编辑器设为markdown编辑器,经查找后将默认编辑器设为了markdown编辑器。 工具软件认识及看法 markdown 一种纯文本格式的标记语言。通过简单的标记语法,它可以使普通文本内容具有一定的格式。只要支持Markdown的地方都能获得一样的编辑效果,可以让作者摆脱排版的困扰,专心写作。 博客园 一个面向开发者的知识分享社区。 概述读后感 在看了概论之后,自己对于程序、软件又有了进一步的理解,知道了什么是软件工程以及软件工程的作用。 程序=数据结构+算法 程序,在这里指的是源程序,是一行一行的代码,是建立在数据结构上的一些算法。但是这些一行一行的代码不会自己运行,需要有人编译成机器能懂的目标代码。 软件工程 软件工程是把系统的, 有序的, 可量化的方法应用到软件的开发, 运营, 和维护上的过程。 软件工程包括下列领域: 1、软件需求分析 2、软件设计 3、软件构建 4、软件测试 5、软件维护 软件 = 程序 + 软件工程 软件的生命周期 (Software Life Cycle, SLC) 软件的构建 软件测试 源程序管理 配置管理 需求分析

对于软件工程专业的思考

孤街醉人 提交于 2020-02-18 08:20:18
(1)回想一下你对计算机/软件工程专业的畅想 考研时你是如何做出选择计算机/软件工程专业的决定的? 我本科就读的专业是电子信息工程,在本科的学习中接触到了C语言程序设计以及数据结构和算法。感觉自己相比与模拟,数字电路,更加喜欢软件和网络的内容。本科做单片机的小组课题设计时,我都是给小组提供编程上的支持和帮助。可是一直没能有转专业的机会。直到大三,家里人建议我考研才发觉这是一个学习软件工程的。于是开始着手准备,而且因为爱好的缘故,考研的专业课“数据结构与算法”对我并没有太大的难度,只要好好复习其他科目就行了。所以毅然决然的选择了福州大学的软件工程专业。 你认为本科阶段所学的知识是否符合你对计算机/软件工程专业的期待,为什么? 上一题说到我的本科专业是电子信息工程。本科在课堂上学习的软件工程相关知识只有C语言程序设计,数据结构与算法和网络工程。这和本科是软件工程的相比起来太少了,知识储备完全不够。但是对于我一个跨专业的学生来说已经很满足了。也是这些课程让我接触到软件工程,从而决定来到这所学府学习。 你觉得计算机/软件工程是你喜欢的领域吗,它是你擅长的领域吗? 我百分百确定软件工程是我喜欢的领域,特别是网络方向的研究。或许和本科是软件工程的学生相比,我没有JAVA或C++项目的经验,但是我也有我擅长的领域。因为本科学过数字电路,主动联系张栋老师希望和他进行sdn网络底层的研究

《软件工程与计算(卷二)》-Chapter19-软件测试

邮差的信 提交于 2020-02-17 22:50:09
A级: 白盒测试和黑盒测试:(给出一个场景,判断应该使用哪种测试方法,如何去写) 黑盒测试:把测试对象看做一个黑盒子,完全基于输入和输出来判断测试对象的正确性 优点 : 1) 比较简单,不需要了解程序的内部的代码及实现 2) 与软件的内部实现无关 3) 从用户的角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题 4) 基于软件开发文档,所以也能知道软件实现了文档中的哪些功能 5) 在做软件自动化测试时较为方便 缺点:不可能覆盖所有的代码 常见方法: 1)等价类划分 2)边界值分析 3)决策表 4)状态转换 白盒测试:把测试对象看做透明的,按照测试对象内部的程序结构来设计测试用例进行测试工作 优点:帮助软件测试人员增大代码的覆盖率 缺点: 不可能覆盖所有的代码 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求 系统庞大时,测试开销会非常大 (能解释并区别白盒测试三种不同的方法) 常见方法: 1)语句覆盖:保证每一行代码都至少执行一次。 2)分支覆盖:保证每个判断结果都至少满足一次。 3)路径覆盖:保证每条独立的执行路径都至少执行一次。 测试层次: 按测试对象: 单元测试:对程序单元进行正确性检验的测试工作。一个单元就是类的一个方法 集成测试(组装测试):对程序模块一次性或采用增量方式组装起来,对系统的接口进行正确性检验的测试工作

《软件工程与计算(卷二)》-Chapter21-软件维护

微笑、不失礼 提交于 2020-02-17 22:42:52
A级: 软件维护:交付之后修改软件系统或其部件的活动过程,以修正缺陷,提高性能或其他属性、适应变化的环境 软件演化生命周期模型 初始开发 演化 服务 逐步淘汰 停止 逆向工程:分析目标系统,标识系统的部件及其交互关系,并且使用其他形式或者更高层的抽象创建系统表现的过程 再工程:检查和改造一个目标系统,用新的模式及其实现复原该目标系统 两类活动: 改进人们对软件的理解 改进软件自身 维护类型 完善性维护 适应性维护 修正性维护 预防性维护 B级: 软件维护的场景 问题发生了改变 环境发生了改变 软件产品中存在缺陷 软件维护的高代价性 变更的频繁性 维护的困难性 开发可维护的软件 考虑软件的可变更性 为降低维护困难而开发 来源: CSDN 作者: 什么你竟然不会敲代码 链接: https://blog.csdn.net/m0_37302219/article/details/104363038