精华内容
下载资源
问答
  • 中级软件工程师资格证 软件开发人员的职业阶梯基本上由三个梯级组成:初级,中级和高级。 业界使用此术语来更好地理解和分配资格等级,以及确定薪资水平和职责。 了解开发人员的资历水平将有助于为特定工程师...

    中级软件工程师资格证

    软件开发人员的职业阶梯基本上由三个梯级组成初级,中级和高级。 业界使用此术语来更好地理解和分配资格等级,以及确定薪资水平和职责。

    了解开发人员的资历水平将有助于为特定工程师设定更准确的期望。 此外,这种区别不仅将改善内部沟通,还将增强客户和供应商之间的沟通,使所有交互更加有效。 通过区分这些职位,客户将更好地了解IT行业的能力水平。

    在本文中,我们将根据以下标准分析软件开发人员的资历:技术知识,日常职责,独立工作,与团队的互动以及远见。

    软件开发专业知识评估的方法

    作为资历级别分析的一部分,我们将描述几种评估程序员专业知识的现有方法。 将它们应用于给定的等级将为软件开发的资历提供更广阔的视野。

    技能获取的德雷福斯模型确定了获得和掌握技能的5个阶段。 安迪·亨特(Andy Hunt)在他的《 实用思维与学习:重构您的湿软件》中将Dreyfus模型应用于软件开发。 作者使用Dreyfus模型来构造在整个学习过程中发生的根本变化。 这使他可以并置不同阶段的程序员如何看待开发过程和方法问题,以及它们如何形成思维模型。

    Dreyfus模型的五个阶段说明了从新手到专家的方式中最重要的变化
    资料来源:实用思维与学习:安迪·亨特(Andy Hunt)重构您的垃圾软件

    软件工程专业知识的七个阶段。 这是Meilir Page-Jones对软件工程专业知识进行分类的另一种方法。 分类将专业知识分为七个阶段,并以生产率为主要标准。 尽管最初在90年代用于评估软件工程,但是该方法可以轻松地重新应用到我们的现实中。

    生产率曲线
    资料来源:Meilir Page-Jones撰写的软件工程专业知识的七个阶段

    程序员能力矩阵。 程序员技能集的矩阵是由技术领导者Sijin Joseph开发的,他在设计和构建软件产品方面拥有超过15年的经验。 该矩阵具有三级结构,与初级-中级-高级角色分布相关。 该矩阵还包括0级,我们认为这等于一个见习级软件工程师。 我们将在描述每个资历级别的技术知识期望时参考此资源。

    比较专业知识评估的方法

    见习生:刚从学校毕业

    一些公司设有实习计划,聘用入门级工程师,这些工程师基本上只具有理论知识,而没有工作经验。 在这种情况下,初学者的职位将为见习生。

    应用Meilir Page-Jones的专业知识阶段,我们将开发人员职业生涯的这一早期阶段分为三个阶段: InnocentExposedApprentice

    最初,工程师很少或根本没有接触过实际开发的经验。 暴露的开发人员以专业的方式迈出了编码的第一步。 最后,学徒已经具备了应对实际项目的最低限度的设备。

    说到技术知识,受训人员主要限于使用IDE作为编码的文本编辑器,而没有利用其附加功能。 他们很少处理API,常常不得不查阅文档。 除了他们专门研究的核心平台之外,受训人员对任何框架都不熟悉,对数据库是什么只有模糊的认识。

    初级开发人员:通过反复试验

    作为初级开发人员很难进入,因为它们经常来来往往。 雇主倾向于雇用初级开发人员来从事自由职业者或短期合同,以期降低合同成本。

    然而,大三学生的王牌是许多老年人不再拥有的动力和能量。 大三学生知道,他们投入的精力将使他们更快地进入下一个阶段,从而获得回报。

    替代方法。 参考Dreyfus模型,我们可以将初级阶段分为两个阶段: 新手阶段和高级初学者

    为了使一切顺利,新手开发人员需要通用的上下文无关规则。 由于急躁,他们希望立竿见影。 同时,由于错误不知道如何处理,因此错误会使它们瘫痪。

    高级初学者开始遵循固定的规则,并根据所处理的类似情况制定通用原则。 主要问题是,他们可能忽略了更大的背景,也许认为这无关紧要。

    使用Meilir Page-Jones的等级,我们可以将大三称为Practitioner 那就是当开发人员开始通过反复试验采用新技术并将其应用于公司项目时,其生产力得到充分提高的时候。

    初级技术技能和职责

    IDE。 初级用户使用任务栏导航界面并有效地操作IDE。

    API。 他们知道如何处理最常用的API。

    构架。 初级开发人员已经使用了一些框架,并了解了值得在其语言堆栈中使用的流行框架。

    数据库开发。 三年级的学生知道数据库的基本设计技术,ACID属性和事务。 此外,初级人员可以编写简单的select语句以从数据库中检索信息。

    编程语言。 初级开发人员通常熟悉一种编程语言。 他们将立即选择并实施一个半稳定的解决方案,以解决某些用例中的大多数问题。

    平台和工具。 大三学生具有大约三个平台的专业经验。 他们对平台内部知识的了解很肤浅。 他们知道流行和标准工具的替代方法。

    日常职责。 初级人员通常会完成最简单的任务,而这些任务对最终产品的影响很小。

    初级团队合作和观点

    独立工作。 当然,大三学生需要密切监督。 他们需要强有力的指导来提高自己的技能。

    在团队中工作时,初级人员必须保持参与并从团队中吸收尽可能多的知识。

    视力。 大三学生的问题是他们关注代码,而不关注开发。 这样可以防止他们了解大局。

    中级开发人员:编程世界的主力军

    具有三年以上经验的初级开发人员可以利用他们的技能成为中级专家。 中级开发人员有时被称为“编程世界的主力军”,它们对常规代码的影响最大。

    替代方法。 Dreyfus模型将中间开发人员描述为Competent 在此阶段,他们还可以在故障排除和调试方面做得不错。

    称职的程序员非常主动并且足智多谋。 他们在团队中担任领导角色,并可以指导新手。 但是,有能力的开发人员仍然缺乏在进行项目时优先关注其注意力的经验,并且他们几乎无法反思自己的错误。

    就专业知识的七个阶段而言,我们可以将中级开发人员视为“ 旅人” 他们致力于提高技能并提高生产力。 服务员足够胜任,可以成为软件工程建议的来源。

    中级技术技能和职责

    IDE。 在使用IDE一段时间后,一名中级开发人员记住了大多数常用操作的快捷键,从而确实加快了工作速度。

    API。 中级水平对主要API有深入而扎实的知识。

    构架。 中间人精通技术,其框架有助于他们编写更清晰,更短的代码。

    数据库开发。 中级擅长管理数据库。 他们可以设计标准化的数据库架构,同时考虑将要发出的查询。 中级开发人员精通使用数据库视图,存储过程,触发器和用户定义的数据类型(UDT)。 它们擅长用于在不兼容类型系统之间转换数据的对象关系映射技术(ORM)。 为了加快查询过程,他们应用了索引语法知识来创建自定义的聚集索引和非聚集索引。

    编程语言。 中级开发人员了解功能编程,并且知道何时以及如何以任何语言应用功能概念。

    平台和工具。 Middles已经与四个以上的平台合作,并且对平台如何执行功能(包括代码执行)有深入的了解。 他们对软件包管理器工具非常满意。

    日常职责。 中级软件工程师通常不会承担高度复杂的任务,这些任务可能需要深入的工程知识。 同时,他们可能需要设计一部分应用程序,以准备进一步过渡到高级开发人员。 他们已经能够将票证转化为解决方案,提供任务估计并协助分解较大的工作部分。

    中层团队合作和观点

    独立工作。 在分配给相对常规的任务时,中层可以在较少的监督下完成工作。

    团队合作。 Middles与团队成员(包括设计师,业务分析师和架构师)积极合作。

    视力。 中级开发人员加深了对开发周期方案的理解,使他们可以更准确地实践敏捷方法。 他们了解出现问题的结果,并学习如何在将来避免这些问题。

    邓宁-克鲁格效应

    许多中级开发人员都受Dunning-Kruger效应的影响 ,这阻碍了他们进一步的职业发展。 这种心理现象描述了一点知识实际上可能是一件危险的事情。 由于自我保证,开发人员可能倾向于高估自己的技能,从而阻碍了他们的进步。 也就是说,这种情况是软件开发中的一个大问题。 尽管这种认知偏见可能发生在各个资历级别的工人上,但中产阶级最容易受到这种偏见的影响。

    事实上,许多工程师无法比他们目前正在实施的方法和实践更好。 曾经有过一系列不成功的项目的程序员可能会相信,一个项目通常是一场噩梦。

    在相反的情况下,软件工程师有时可能会意识到他们所了解的知识很少,还有很多东西需要学习。 那就是程序员开始向更高的资历过渡的时候。

    Dunning-Kruger对开发人员的影响,取决于他们的资历和知识的图形化显示。
    图片来源: 初级开发人员: Amando Abreu, 您不再是初级

    为了减少不正确的自我评估对技能获得和整体职业发展的影响,开发人员应通过扩展知识领域并收集企业不同部门的反馈意见,不断提高自己的能力水平。 他们应始终抽出时间反思自己的进步并得出正确的结论。

    高级开发人员:问题解决者

    具有深厚专业知识和详尽经验的开发人员,使他们可以指导同龄人,被称为资深人士。 此外,高级开发人员在他们所支持的业务领域中也很有知识。 他们的能力甚至可以扩展以帮助市场营销和整体业务发展。 高级开发人员将始终在考虑自己在做什么,从而为业务带来多少收益。

    简而言之,他们的工作是为问题提供最佳解决方案。 实际上,一位长者正试图预见并解决问题。 作为解决问题的人员,长者必须事先考虑系统瓶颈,并牢记由不当使用工具引起的漏洞和问题。

    在领导一个项目时,一位高级管理人员会根据该领域的最佳实践知识,对软件设计和实施做出明智的决策。

    替代方法。 根据Dreyfus模型,资历可分为两个阶段: 熟练 (初级专家)和专家。

    熟练的程序员取得了重大突破-他们能够反思自己的工作表现,分析错误并向他们学习以得出正确的结论。 通过利用反射和反馈,熟练的开发人员可以显着提高其性能。 这种方法是敏捷项目管理的核心。

    现在,开发人员已经知道上下文是成为专家的关键。 因此,他们不遵守规则,而是执行各种方法来将其调整为特定的上下文。

    专家是Dreyfus模型中的最高等级。 根据安迪·亨特(Andy Hunt)的说法,经过十多年的坚定实践,人们可以到达那里。 因此,专家是稀有物种。 这些高级开发人员将他们的专业知识转变为直觉。

    专家将从其广泛的经验中汲取最佳实践,并具有不同的角色,技术和情况。

    就七个软件工程专业知识阶段而言,该级别有两个: 硕士研究员

    硕士是一位熟练的技术人员和良好的指导者,具有深厚的方法论基础。 更重要的是,该开发人员了解产品背后的商业价值。

    研究人员是高级开发人员,他正在从特定项目转向一般方法研究。 研究人员追踪软件工程技术中的缺陷以改善缺陷。 他们还寻求新的问题,以找到对解决这些问题有用的技术。

    高级技术技能和职责

    具有较高的技术技能,高级开发人员对多种技术很满意。 老年人应该以获取可转让的知识为目标,这将使他们能够识别和编写任何编程语言的良好代码。 这些知识还有助于适应不断变化的技术。

    IDE。 年长者的专业知识使他们能够编写自定义宏来优化工作流程。

    API。 大四学生编写了库,以添加更多功能或使最常见的流程自动化,而无需为其编写代码。

    构架。 老年人有足够的知识来建立自己的自定义框架。

    数据库开发。 一位资深的人精通数据库管理,性能和索引优化。 通常,它们会做复杂的工作,组成高级选择查询。 由于老年人从内部了解给定的数据库结构,因此他们熟悉数据库维护功能,尤其是数据库镜像和数据库复制。 这些是将数据从主数据库传输到辅助数据库的方法。 年长者了解用于协调分布式事务(提交/中止) 的两阶段提交算法(2PC )。 在可能的情况下,它们可以用效率更高的JOIN语句代替基于游标的慢速操作。

    编程语言。 除了功能编程和OOP外,它们还与并发和逻辑语言(例如,Erlang和Prolog)一起使用。

    平台和工具。 老年人在6个以上平台上拥有专业经验。 他们已经在创建调试器或其他增强平台所需的工具。 年长者是有关平台内部的源建议。

    日常职责。 多方面的责任远远超出了编码范围。 老年人为复杂的问题集思广益,寻求正确的技术解决方案。 他们负责团队,协调其工作流程以持续产生业务价值。

    高级团队合作和观点

    独立工作。 前辈是提供指导的人。

    前辈把团队放在第一位,并且一直在努力弄清楚他们可以做什么来帮助成员。 他们在客户和团队之间保持平衡的同时具有良好的软技能。

    视力。 老年人看到了最终目标-完成的应用程序必须解决的问题。 长远的眼光是为最终用户带来价值的关键。

    开发人员资历水平的能力

    高级开发人员之后会怎样?

    高级开发人员是梯子上另一个梯级的良好起点。 一些前辈想升任更多技术职位,另一些人更喜欢担任管理职位。 以下是高级人士可能考虑采用的一些选择。

    建筑师。 这是技术职业阶梯上的最高等级。 架构师的工作是设计复杂的系统,该系统将由高级和初级开发人员团队实施。 根据业务问题的重点,有企业,技术和解决方案架构师 您可以在我们的专用文章中阅读更多内容。

    产品经理 具有编码经验的产品经理会更轻松地领导产品交付。 他们从内部了解开发过程,就能更加有效地管理产品上的工作。

    高级领导。 高级领导者的工作与编程无关,而与人的技能有关:鼓舞,激励,领导和制定策略。 在制定决定公司发展方向的高层决策时,高级领导者应确保所有员工都遵循这些决策并相信使命。

    影响资格水平的外部条件

    在定义开发人员的资历级别时,重要的是要考虑以下对等级有实质性影响的可变因素。

    技术栈。 机器学习方面 ,可以是专家,但在Web开发中仍处于中级水平。 同时,开发人员甚至可以成为许多其他领域的初级人员。

    项目。 一个项目可以水平和垂直扩展,这需要不同的技能和专业知识。

    组织。 招聘组织的特征也应考虑在内。考虑公司的规模和他们为候选人设定的个人要求。 较小的企业通常会寻找具有广泛技能和责任的专家。 例如,较小企业的工程师可以负责产品开发和部署。 相比之下,大型组织可能需要高度专业的专业知识,例如将与某种自动化工具一起使用的DevOps生命周期特定阶段的工程师。

    而且,每个组织对这些术语都有自己的含义。 因此,根据工作场所的不同,两个高级程序员可能彼此非常不同。 《卫报》数字开发团队的高级开发经理罗伯特·里斯(Robert Rees)对此评论道:“ 在招聘时,我们需要向我们以及公司外部人员解释高级开发人员的含义。 有时,我们也很难向目前拥有“高级开发人员”头衔的人们解释为什么我们不认为他们是《卫报》的高级开发人员。”

    选择适合您项目的专业知识的开发人员的提示

    与就业有关的一个重要问题是,这项或这项任务需要什么专业知识。 如果您对满足您的项目的能力水平只有一个抽象的想法,雇用开发人员通常会很乏味。 以下是一些有用的提示,它们将帮助您浏览整个招聘过程,从而为您提供正确的选择。

    • 对项目目标有一个清晰的了解,并对达到该目标所需的专业知识有基本的了解。
    • 考虑您可支配的时间和预算。 大三学生需要更多时间进行培训,而大三学生并不需要太多的准备,而是会立即开始贡献自己的力量。 但是,这样的员工将变得更加昂贵。
    • 专注于团队和组织人才的组成。 从第一天开始,由高级开发人员担任领导角色是组织工作流程的必要条件,因为只有高级人员才有资格为项目选择合适的技术和平台。
    • 停止根据职称招聘。 拥有头衔不同于拥有成功胜任工作所需的技能和能力。 在成为高级开发人员的过程中积累的经验比获得的头衔要重要得多。 因此,为了使现有角色有意义,我们必须抵制职务膨胀。

    最初发布在AltexSoft技术博客上 软件工程师资格等级:初级,中级和高级

    翻译自: https://hackernoon.com/software-engineer-qualification-levels-junior-middle-and-senior-f2229591df1c

    中级软件工程师资格证

    展开全文
  • 初级软件工程师考试 I recently responded on LinkedIn to a developer who posted the following question: 我最近在LinkedIn上回复了一个发布以下问题的开发人员: “As a junior developer, all I can do now is ...

    初级软件工程师考试

    I recently responded on LinkedIn to a developer who posted the following question:

    我最近在LinkedIn上回复了一个发布以下问题的开发人员:

    “As a junior developer, all I can do now is to take online courses on codecademy, freecodecamp, edx, coursera and add the certifications to my resume. do you think if it’s a good idea to do that?”

    “作为一名初级开发人员,我现在所要做的就是参加有关代码学院,freecodecamp,edx,coursera的在线课程,并将证书添加到我的简历中。 您认为这样做是个好主意吗?”

    A lot of folks chimed in with various thoughts on the matter, specifically around the certification part of the question. However, right now there are a lot of questions like these floating around LinkedIn, generally around the topic of Coding Bootcamps. Coding Bootcamps have become all the rage lately, and at the time of this post (right in the middle of the Covid-19 pandemic), they are even more popular than ever!

    许多人对此事有各种各样的想法,特别是在问题的认证部分周围。 但是,目前在LinkedIn上有很多类似的问题,通常是围绕编码训练营的话题。 最近,编码训练营已经风靡一时,在撰写本文时(就在Covid-19大流行期间),它们比以往任何时候都更加受欢迎!

    My path to a career in software development was very non-traditional, much like these boot camps. What I mean by that is, you are coming to this career path without obtaining a Computer Science degree, or perhaps a degree at all. My path was the latter, and when I was coming up these boot camps didn’t exist. However, I have made a successful career nonetheless. In this post, I’ll walk you through the steps I took, which I believe helped immensely in my career. If you’re coming off a boot camp, these things can help give you an edge over everyone else!

    我从事软件开发的职业非常传统,就像这些新手训练营一样。 我的意思是,您是在没有获得计算机科学学位,或者根本没有计算机科学学位的情况下进入这一职业道路的。 我的道路是后者,当我上来时,这些训练营并不存在。 但是,尽管如此,我还是取得了成功的职业。 在这篇文章中,我将引导您完成我所采取的步骤,我认为这对我的职业生涯有极大的帮助。 如果您要去新兵训练营,这些东西可以帮助您超越其他所有人!

    网络 (Network)

    Build a strong local network as well as one on LinkedIn. It’s been my experience that most of the opportunities in my career have come from others. Earlier in my career, I would attend as many user groups and meetups as I could to meet people. At these meetings, I would always make a point to introduce myself to the presenter and ask a question about the presentation. Personal connections go a long way!

    建立强大的本地网络以及在LinkedIn上建立网络。 根据我的经验,我职业生涯中的大多数机会都是来自其他人。 在我职业生涯的早期,我会参加尽可能多的用户组和聚会以结识人们。 在这些会议上,我总是会向介绍人介绍自己,并提出有关介绍的问题。 个人关系大有帮助!

    Another way I capitalized on personal connections was by taking a “Beginning C#” class at my local community college. The instructor happened to be a really well-known engineer in my city, and highly respected. By taking this class, I was able to form a very personal relationship with him. He could see my passion for learning, and how I was progressing. Later, he referred me to his firm, where I landed an amazing job.

    我利用个人关系的另一种方法是在当地社区大学参加“入门C#”课程。 这位讲师恰好是我所在城市的一位真正知名的工程师,并受到高度重视。 通过参加这堂课,我与他建立了非常私人的关系。 他可以看到我对学习的热情以及我的进步。 后来,他把我引到他的公司,在那里我找到了一份了不起的工作。

    Along with this, using LinkedIn to its maximum potential is a must. Connect with as many people as you can and post a lot about what you are doing, courses you’re taking, certs, etc. You never know where the next opportunity may come from, so getting your name and accomplishments in front of people is a must. Keep your LinkedIn profile up to date always, and add certifications, boot camps, etc once you have them.

    与此同时,必须使LinkedIn发挥最大潜力。 与尽可能多的人联系,并发布有关您的工作,所修课程,证书等的大量信息。您永远不知道下一个机会可能来自何处,因此,在人们面前展现自己的名字和成就是必须的。 始终保持最新的LinkedIn个人资料,并在获得认证后添加认证,新手训练营等。

    建立资料 (Build Stuff)

    You’re probably building a lot of stuff right now, but make sure it is on GitHub for all to see. This can be a tough one I know. You’re early in your career, you don’t feel like you have an amazing grasp on the code, and you’re worried about how that will look. Well, guess what, nobody cares. It doesn’t have to be amazing code, but it will show you’re working on things and is tangible proof you’re learning things.

    您现在可能正在构建很多东西,但是请确保它在GitHub上供所有人查看。 我知道这可能很难。 您在职业生涯的初期,就不会觉得自己对代码掌握得非常好,并且担心它的外观。 好吧,猜猜是什么,没人在乎。 它不一定是令人惊叹的代码,但是它将显示您正在从事的工作,并且是您正在学习的切实证据。

    I have several repos on GitHub with code that I wouldn’t want to show off as the shining example of how to do things. But this doesn’t matter! What matters is it shows you’re curious about code, and you like building things. So as you’re going through tutorials or coursework, spin up a repo and put the code out there for your next employer or connection to see.

    我在GitHub上有几个存储库,其中包含我不想炫耀的代码,作为如何做事的光辉典范。 但这没关系! 重要的是它表明您对代码感到好奇,并且喜欢构建代码。 因此,当您进行教程或课程学习时,请启动一个仓库,并将代码放到那里,供您的下一个雇主或联系人查看。

    取得认证 (Get Certifications)

    Before moving on, I should point out that you should not Google the question “Are certifications worth it?”. You’re going to get a million posts for and against certifications. Don’t waste your time. Read on, as I have gotten a lot of certifications and it’s not a black and white answer.

    在继续之前,我应该指出,您不应该向Google提问“认证值得吗?”。 您将获得一百万份支持和反对认证的职位。 不要浪费你的时间。 请继续阅读,因为我已经获得了很多认证,这不是一个黑白答案。

    My viewpoint on certs is, at a certain point in your career they become less impactful. However, early on, they are a great example of the learning you have done. I got a ton of certs early on, and I can say, I learned A LOT during that process and I tell people this all the time. When studying for a cert, you get exposed to a lot of things you don’t normally use or have even ever heard of. Even if you don’t go on to use some of the things you have learned, it's in your head now. So you can speak more intelligently about topics, and more importantly, know what terms to Google when you do want to learn more about it.

    我对证书的看法是,在您职业生涯的某个阶段,它们的影响力降低了。 但是,从一开始,它们就是您学到的很好的例子。 我很早就拿到了很多证书,我可以说,我在那个过程中学到了很多,而且我一直都在告诉人们。 在学习证书时,您会接触到很多通常不使用或从未听说过的东西。 即使您不继续使用已学到的一些东西,也已成为您的头脑。 因此,您可以更明智地谈论主题,更重要的是,当您确实想了解更多信息时,知道Google用什么术语。

    面试时要有成长心态 (Have a Growth Mindset in Your Interview)

    One of the most important things you need to have as a software engineer is a growth mindset. Things are constantly changing, new languages and patterns pop up all the time. If you don’t like learning, you will not succeed in this career. So make sure you bring that to your interview. I’ll explain with an example.

    作为一名软件工程师,您需要具备的最重要的一件事就是成长心态。 事情在不断变化,新的语言和模式不断出现。 如果您不喜欢学习,那么您将不会成功。 因此,请确保将其带入面试。 我将举例说明。

    On one of my first interviews, I was peppered with tough technical questions and I missed probably half of them! However, I had a piece of paper and a pencil with me, and every time I couldn’t answer a question I asked the interviewer to walk me through it. I took notes and let them know I would learn all of that for the future. The feedback I got was “you were not as strong technically as we like, but we absolutely loved that you wanted to know how and why something worked”. I ended up getting that job. Not because I was the strongest engineer at the time, but because I showed that I wanted to learn and grow.

    在我的第一次面试中,我遇到了棘手的技术问题,可能错过了一半! 但是,我有一张纸和一支铅笔,每当我无法回答一个问题时,我都会要求面试官引导我进行学习。 我记下笔记,让他们知道我将来会学到所有这些。 我得到的反馈是“您在技术上并不如我们所愿,但我们绝对喜欢您想知道某事如何以及为什么起作用”。 我最终得到了这份工作。 不是因为我当时是最强大的工程师,而是因为我表明我想学习和成长。

    那些很好,但是… (Those Are Good, However…)

    Image for post

    Those 4 topics alone will get your career going, and those 4 alone got me in the door. But what if you want to take it a step further? Here are a few ways I kept growing my career once I got past the initial hurdle.

    仅靠这4个主题就可以使您的事业发展,而仅靠这4个主题就可以使我参与进来。 但是,如果您想更进一步,该怎么办? 一旦克服最初的障碍,以下是我保持职业发展的几种方法。

    寻找利基 (Find a Niche)

    Software engineers are finicky people. They like certain languages, frameworks, IDEs, etc, and you can’t sway them in their opinions. If a software engineer thinks the sky is red, there is no way you can convince them it’s blue. To that end, there is always something that your co-workers do not want to be involved with. For me, this was SharePoint.

    软件工程师是挑剔的人。 他们喜欢某些语言,框架,IDE等,并且您不能在他们的意见中摇摆它们。 如果软件工程师认为天空是红色,则无法说服他们是蓝色。 为此,您的同事总会不想参与其中。 对我来说,这就是SharePoint。

    I was employed by a company that was getting heavy into SharePoint and needed a lot of custom development work done on it. Most of my co-workers absolutely hated SharePoint, and some flat out refused to work on it. For me, I saw this as an opportunity to differentiate myself. I asked to be put on a SharePoint project. I learned all I could and took as many certifications as I could. Six months later I was one of the stronger SharePoint developers at the company. Three months later I was put on a project as a SharePoint Architect!

    我受雇于一家致力于SharePoint的公司,需要在其上进行大量自定义开发工作。 我的大多数同事都非常讨厌SharePoint,有些人则拒绝使用SharePoint。 对我来说,我认为这是一个与众不同的机会。 我要求加入SharePoint项目。 我学会了所有可能的知识,并获得了尽可能多的认证。 六个月后,我成为公司实力更强的SharePoint开发人员之一。 三个月后,我被任命为SharePoint Architect的一个项目!

    Now be careful with this approach! For me, it was a way to stand out, but not fall behind on technology. Make sure you pick something that will allow you to grow in your career.

    现在,请谨慎使用此方法! 对我而言,这是一种脱颖而出的方法,但并不落后于技术。 确保您选择可以使您的职业发展的东西。

    发表演讲 (Give Talks)

    This may feel overwhelming if you’re a junior developer, but it’s a very good option. In a similar vein of “Find a Niche”, what worked for me was finding topics in my city that weren’t being talked about much, and crafting an “Intro To [Insert Topic Here]” talk. In my case, I did talks around SharePoint, Chat Bots, REST APIs, etc. These were all “getting started” type talks, that allowed me to play in a space I felt comfortable in but also get out in front of people. More often than not you’ll find there are experts in the crowd who can field questions for which you can’t answer.

    如果您是初级开发人员,这可能会让人感到不知所措,但这是一个非常好的选择。 与“寻找合适的位置”类似,对我有用的是在我所在的城市中找到话题不多的话题,并撰写“在[在这里插入话题]简介”演讲。 就我而言,我进行了有关SharePoint,聊天机器人,REST API等的讨论。所有这些都是“入门”类型的讨论,这些讨论使我可以在一个舒适的空间中玩耍,还可以在人们面前露面。 通常,您会发现人群中有专家可以提出您无法回答的问题。

    This absolutely happened during my chatbot talk. I was doing really well until this one guy started asking questions well outside what I was prepared to answer. Luckily, there was someone in the audience with way more experience than me who answered all those questions. I ended up having a great conversation with the expert afterward and made a great connection.

    这绝对是在我的聊天机器人对话期间发生的。 直到这个人开始问我准备回答的问题之外,我一直做得很好。 幸运的是,听众中有人比我回答所有这些问题的经验都多。 最后,我与专家进行了精彩的交谈,并建立了良好的联系。

    结语 (Wrapping Up)

    These things really helped me stand out as I was getting going in my career. However, these did not stop once I landed a job. I still do all these things all the time, only I feel way more comfortable with all of them! Even if you’re 20 years into your career, all these topics can make you more attractive to potential employers and everyone should be practicing them. That being said, none of this is a silver bullet either. You still need to get a solid grasp on your language of choice, any frameworks you use, etc. Also, just being a nice person, easy to get along with, and a team player is equally important!

    这些事情确实帮助我在事业发展中脱颖而出。 但是,一旦我找到工作,这些并没有停止。 我仍然一直在做所有这些事情,只是我对所有这些事情感到更加自在! 即使您已经进入职业生涯20年,所有这些主题都可以使您对潜在的雇主更具吸引力,每个人都应该实践它们。 话虽这么说,但这都不是灵丹妙药。 您仍然需要牢牢把握自己选择的语言,使用的任何框架等。此外,成为一个好人,容易相处和团队合作者同样重要!

    翻译自: https://medium.com/swlh/how-to-get-ahead-as-a-new-or-junior-software-engineer-61a8f1c57351

    初级软件工程师考试

    展开全文
  • 软件工程师资格证

    千次阅读 2019-03-06 14:28:06
    软件工程师是一个认证考试,具体地说是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格.与其它职称一样也分:助理,初级,高级工程师。 报考条件和等级 一、助理软件工程师: 1、本科以上或...

    软件工程师是一个认证考试,具体地说是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格.与其它职称一样也分:助理,初级,高级工程师。

    报考条件和等级

    一、助理软件工程师:   1、本科以上或同等学历学生;  2、大专以上或同等学历应届毕业生并有相关实践经验者;  二、软件工程师:   1、已通过助理软件工程师资格认证者;  2、研究生以上或同等学历应届毕业生;  3、本科以上或同等学历并从事相关工作一年以上者;  4、大专以上或同等学历并从事相关工作两年以上者。   三、高级软件工程师:  1、已通过软件工程师资格认证者;  2、研究生以上或同等学历并从事相关工作一年以上者;  3、本科以上或同等学历并从事相关工作两年以上者;  4、大专以上或同等学历并从事相关工作三年以上者。

    考试时间

    每年统考四次,时间为4月、6月、10月和12月。具体考试日期、地点、方式,由考生所在地的考试机构或培训机构另行通知。 发证机构  经职业技能鉴定、认证考试合格者,颁发加盖全国职业资格认证中心(JYPC)职业技能鉴定专用章钢印的《软件工程师职业资格证书》。权威证书,全国通用。政府认可,企业欢迎。网上查询,就业首选。

    职业定义

    软件工程师主要进行软件前期的项目需求的分析,然后对项目进行风险评估并试图解决这些风险,然后开始进行软件的开发,后期对软件的进度做相关的评估。

    就业前景

    目前国内软件测试工程师的来源主要有三方面:一是以前专业做软件开发的人员后来转行做软件测试,二是从大学招聘的本科或者研究生,三就是通过培训机构招聘的专业学员。据了解,在国外测试人才的供应方式多以第三种为主,而国内目前除少数培训机构外尚未形成足够的人才供应规模。以北京中关村为例,现有软件企业5000多家,仅对曰本软件外包领域的人才缺口就高达5000人,而对美软件外包人才缺口更大,可供量不足10%。中关村一位负责人介绍,未来5年北京将有至少200亿美元的外包订单,由此可推算出中关村将出现100万的软件人才缺口。巨大的产业前景和匮乏的人才现状,使越来越多的IT企业关注软件测试人才的储备工作。

    展开全文
  • Java 初级软件工程师 认证考试试卷1

    千次阅读 2019-01-10 19:53:00
    Java 初级软件工程师 认证考试试卷 笔试(A卷) 考试时间150分钟 总分 100分 姓 名_______________________ 身份证号_______________________ 考试结束后考卷必须收回,否则考试成绩无效 ...

    Java 初级软件工程师

    认证考试试卷

     

    笔试(A卷)

     

     

    考试时间150分钟

     

    总分 100分

     

     

    姓    名_______________________

    身份证号_______________________

     

     

     

    考试结束后考卷必须收回,否则考试成绩无效

     

     

    尚学堂Java 初级软件工程师认证考试试卷

     

     

    一、    填空题(共20个题目,总计20分)

    1. 安装JDK后,为了告诉计算机javac.exe和java.exe等执行文件的位置,需要配置的环境变量是______Path_______。
    2. Java提供了三种注释类型,分别是单行注释,多行注释和_____文档注释________。
    3. char 类型用来表示在Unicode编码表中的字符,长度是___2___个字节。
    4. ___&&______是短路与运算符,如果左侧表达式的计算结果是false,右侧表达式将不再进行计算。
    5. _____contiune________语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
    6. 基本数据类型的类型转换中,要将double类型的常量3.14159赋给为整数类型变量n的语句是________int n = int(3.14159);_____________。
    7. 执行Person p = new Person();语句后,将在___堆内存________中给Person对象分配空间,并在栈内存中给引用变量p分配空间,存放Person对象的引用。
    8. 使用static修饰的变量称为静态变量,静态变量可以有两种访问方式,分别是类名.静态变量名和_______对象名.静态变量名________________。
    9. 在一个类文件中的关键字package,import,class出现的可能顺序是________________package,import,class______________。
    10. 异常是由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等,可分为两类:Checked异常和__运行时异常(RuntimeException)________________。
    11. 数组在内存中分配连续的空间,数组的长度固定,一经分配无法改变,可以使用___length_________属性获取数组的长度。
    12. DateFormat类可以实现字符串和日期类型之间的格式转换,其中将日期类型转换为指定的字符串格式的方法名是_____Forma_________。
    13. JDK1.5后提供了____enum________关键字,用以定义枚举类。枚举类是一种特殊的类,可以有自己的属性、方法和构造方法。
    14. 如果希望将自定义类Student的多个对象放入集合TreeSet,实现所有元素按照某个属性的自然顺序排列,则需要Student类实现___Comparabe_______________接口。
    15. 迭代器Iterator为集合而生,专门实现集合遍历,该接口有三个方法,分别是hasNext() 、___next()_________、remove()。
    16. Java IO体系中,__DataInputStream__________________是字节输入流,提供了可以存取所有Java基础类型数据(如:int,double 等)和String的方法,但没有提供存取对象的方法。
    17. ____序列化________是指将Java对象转换成字节序列,从而可以保存到磁盘上,也可以在网络上传输,使得不同的计算机可以共享对象。
    18. Java反射技术中,每个Method对象对应一个方法,获得Method对象后,可以调用其__invoke_________来调用对应方法。
    19. 处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入____阻塞_____状态。
    20. 统一资源定位符URL是指向互联网“资源”的指针,由4部分组成:协议、存放资源的主机域名、____端口号______和资源路径和文件名。

    二、    选择题(共25个题目,总计25分)

    1)

    以下选项中是对一个Java源文件进行正确编译的语句是( A   (选择一项)

     

     

     

     

    A.

    javac Test.java

     

    B.

    javac Test

     

    C.

    java Test

     

    D.

    java Test.class

    2)

    以下选项中属于合法的Java标识符的是(CD    。(选择项)

     

     

     

     

    A.

    public

     

    B.

    3num

     

    C.

    name

     

    D.

    _age

    3)

    以下代码的执行结果是(  B  。(选择一项)

     

    boolean m = true;

    if(m = false){

        System.out.println("false");

    }else{

        System.out.println("true");

    }

     

     

     

     

    A.

    false

     

    B.

    true

     

    C.

    编译错误

     

    D.

    无结果

    4)

    以下do-while循环代码的执行结果是( A   。(选择一项)

     

    int a=0;

    int c=0;

    do{

        --c;

        a=a-1;

    }while(a>0);

    System.out.println(a+"  "+c);

     

     

     

     

    A.

    -1  -1

     

    B.

    死循环

     

    C.

    -1  -2

     

    D.

    -1  0

    5)

    while循环和do-while循环的区别是( D   。(选择一项)

     

     

     

     

    A.

    没有区别,这两个结构在任何情况下效果一样

     

    B.

    while循环比do-while循环执行效率高

     

    C.

    while循环是先循环后判断,所以循环体至少被执行一次

     

    D.

    do-while循环是先循环后判断,所以循环体至少被执行一次

    6)

    分析下面的Java多重循环代码片段,编译运行后的输出结果是( D   。(选择一项)

     

    for (int i = 0; i < 6; i++) {

        int k = ++i;

        while (k < 5) {

           System.out.print(i);

           break;

        }

    }

     

     

     

     

    A.

    024

     

    B.

    02

     

    C.

    123

     

    D.

    13

    7)

    以下关于方法调用的代码的执行结果是(   B 。(选择一项)

     

    public class Test {

        public static void main(String args[]) {

           int i = 99;

           mb_operate(i);

           System.out.print(i + 100);

        }

        static void mb_operate(int i) {

           i += 100;

        }

    }

     

     

     

     

    A.

    99

     

    B.

    199

     

    C.

    299

     

    D.

    99100

    8)

    以下关于继承条件下构造方法执行过程的代码的执行结果是(  A  。(选择一项)

     

    class Person {   

        public Person() {

           System.out.println("execute Person()");1

        }

    }

    class Student extends Person { 

        public Student() {      

           System.out.println("execute Student() ");2

        }  

    }

    class PostGraduate extends Student {  

        public PostGraduate() { 

           System.out.println("execute PostGraduate()");3

        }  

    }

    public class TestInherit {

        public static void main(String[] args) {

           new PostGraduate();     

        }

    }

     

     

     

     

    A.

    execute Person()

    execute Student()

    execute PostGraduate()

     

    B.

    execute PostGraduate()

     

    C.

    execute PostGraduate()

    execute Student()

    execute Person()

     

    D.

    没有结果输出

    9)

    以下语句中关于Java构造方法的说法错误的是(  B  。(选择一项)

     

     

     

     

    A.

    构造方法的作用是为创建对象进行初始化工作,比如给成员变量赋值

     

    B.

    一个Java类可以没有构造方法,也可以提供1个或多个构造方法

     

    C.

    构造方法与类同名,不能书写返回值类型

     

    D.

    构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法

    10)

    以下关于thissuper关键字的说法错误的是(  BD  。(选择二项)

     

     

     

     

    A.

    this关键字指向当前对象自身,super关键字指向当前对象的直接父类

     

    B.

    在main方法中可以存在this或super关键字,但不能同时存在。

     

    C.

    this和super关键字都可以访问成员属性,成员方法和构造方法

     

    D.

    在一个类的构造方法中可以同时使用this和super来调用其他构造方法

    11)

    以下选项中可以使成员变量m 被函数fun()直接访问的是(  C  。(选择一项)

     

    class Test {

        private int m;

        public static void fun() {     

           System.out.println(m);

        }

    }

     

     

     

     

    A.

    将private int m 改为protected int m

     

    B.

    将private int m 改为 public int m

     

    C.

    将private int m 改为 static int m

     

    D.

    将private int m 改为 int m

    12)

    Person类和Test类的代码如下所示,则代码中的错误语句是( C   。(选择一项)

     

    public class Person {

        public String name;

        public Person(String name) {

           this.name = name;

        }

    }

    public class Test {

        public static void main(String[] args) {

            final Person person = new Person("欧欧");

            person.name = "美美";

            person = new Person("亚亚");

        }

    }

     

     

     

     

     

    A.

     

    final Person person = new Person("欧欧");

     

    B.

    person.name = "美美";

     

    C.

    person = new Person("亚亚");

     

    D.

    没有错误

    13)

    以下关于异常的代码的执行结果是(  C  。(选择一项)

     

    public class Test {

        public static void main(String args[]) {

           try {

               System.out.println("try");        

               return;

           } catch(Exception e){

               System.out.println("catch");

           }finally {

               System.out.println("finally");

           }

        }

    }

     

     

     

     

    A.

    try

    catch

    finally

     

    B.

    catch

    finally

     

    C.

    try

    finally

     

    D.

    try

     

    14)

    以下关于String类的代码的执行结果是( B   。(选择一项)

     

    public class Test2 {

        public static void main(String args[]) {

            String s1 = new String("bjsxt");

            String s2 = new String("bjsxt");

            if (s1 == s2)

                System.out.println("s1 == s2");

            if (s1.equals(s2))

                System.out.println("s1.equals(s2)");

        }

    }

     

     

     

     

    A.

    s1 == s2

     

    B.

    s1.equals(s2)

     

    C.

    s1 == s2

    s1.equals(s2)

     

    D.

    以上都不对

     

     

    15)

    以下关于StringBuffer类的代码的执行结果是(  D  。(选择一项)

     

    public class TestStringBuffer {

        public static void main(String args[]) {

           StringBuffer a = new StringBuffer("A");

           StringBuffer b = new StringBuffer("B");

           mb_operate(a, b);

           System.out.println(a + "." + b);

        }

        static void mb_operate(StringBuffer x, StringBuffer y) {

           x.append(y);

           y = x;

        }

    }

     

     

     

     

    A.

    A.B 

     

    B.

    A.A

     

    C.

    AB.AB

     

    D.

    AB.B

    16)

    以下选项中能够正确创建一个数组的是( AD   。(选择二项)

     

     

     

     

    A.

    float []f[] = new float[6][6];

     

    B.

    float f[][] = new float[][];

     

    C.

    float [6][]f = new float[6][6];

     

    D.

    float [][]f = new float[6][];

    17)

    以下选项中关于intInteger的说法错误的是(  BD。(选择二项)

     

     

     

     

    A.

    int是基本数据类型,Integer是int的包装类,是引用数据类型

     

    B.

    int的默认值是0,Integer的默认值也是0

     

    C.

    Integer可以封装了属性和方法提供更多的功能

     

    D.

    Integer i=5;该语句在JDK1.5之后可以正确执行,使用了自动拆箱功能

    18)

    以下选项中关于Java集合的说法错误的是( AC   。(选择二项)

     

     

     

     

    A.

    List接口和Set接口是Collections接口有两个子接口

     

    B.

    List接口中存放的元素具有有序,不唯一的特点

     

    C.

    Set接口中存放的元素具有无序,不唯一的特点

     

    D.

    Map接口存放的是映射信息,每个元素都是一个键值对

    19)

    以下代码的执行结果是(B 。(选择一项)

     

    Set<String> s=new HashSet<String>();

    s.add("abc");

    s.add("abc");

    s.add("abc");

    s.add("abcd");

    System.out.println(s.size());

     

     

     

     

    A.

    1

     

    B.

    2

     

    C.

    3

     

    D.

    4

    20)

    下面集合类中属于非线程安全,且结构采用了哈希表的是( C 。(选择一项)

     

     

     

     

    A.

    Vector

     

    B.

    ArrayList

     

    C.

    HashMap

     

    D.

    Hashtable

    21)

    以下选项中关于如下代码的说法正确的是(  AD。(选择二项)

     

    public class TestBuffered {

        public static void main(String[] args) throws IOException {

           BufferedReader br =

               new BufferedReader(new FileReader("d:/bjsxt1.txt"));

           BufferedWriter bw =

               new BufferedWriter(new FileWriter("d:/bjsxt2.txt"));

           String str = br.readLine();

           while(str !=null){

               bw.write(str);

               bw.newLine();

               str = br.readLine();

           }

           br.close();

           bw.close();  

        }

    }

     

     

     

     

    A.

    该类使用字符流实现了文件复制,将d:/bjsxt1.txt复制为d:/bjsxt2.txt

     

    B.

    FileReader和FileWriter是处理流,直接从文件读写数据

     

    C.

    BufferedReader和BufferedWriter是节点流,提供缓冲区功能,提高读写效率

     

    D.

    readLine()可以读取一行数据,返回值是字符串类型,简化了操作

    22)

    InputStreamReader是转换流,可以将字节流转换成字符流,是字符流与字节流之间的桥梁。它的实现使用的设计模式是( C  。(选择一项)

     

     

     

     

    A.

    工厂模式

     

    B.

    装饰模式

     

    C.

    适配器模式

     

    D.

    代理模式

    23)

    以下选项中可以填写到横线处,让代码正确编译和运行的是( A   。(选择一项)

     

    public class Test implements Runnable {

        public static void main(String[] args) {

           ___________________________________

           t.start();

           System.out.println("main");

        }

        public void run() {

           System.out.println("thread1!");

        }

    }

     

     

     

     

    A.

    Thread t = new Thread(new Test());

     

    B.

    Test t = new Test();

     

    C.

    Thread t = new Test();             

     

    D.

    Thread t = new Thread();

    24)

    在多个线程访问同一个资源时,可以使用(  A  关键字来实现线程同步,保证对资源安全访问。(选择一项)

     

     

     

     

    A.

    synchronized

     

    B.

    transient

     

    C.

    static

     

    D.

    yield

    25)

    以下说法中关于UDP协议的说法正确的是(  AD  。(选择二项)

     

     

     

     

    A.

    发送不管对方是否准备好,接收方收到也不确认

     

    B.

    面向连接

     

    C.

    占用系统资源多、效率低

     

    D.

    非常简单的协议,可以广播发送

           

     

    三、    判断题(共20个题目,总计10分)

    1. 一个Java源文件中可以定义多个类,但是至多只能有一个public类。(T )
    2. Java的字节码文件的扩展名是class,是一种平台独立的非二进制文件。( F  )
    3. ^ 是异或位运算符,运算规则是如果两个操作数相同,结果是0,否则结果是1。( T )
    4. 赋值运算符优先级别低于条件运算符,条件运算符优先级别低于算术运算符。( T  )
    5. switch选择语句是多分支选择语句,只能处理等值条件判断的情况,表达式可以是int类型、char类型,但不能是double,float类型。( T  )
    6. 在多重循环中,外层循环变量变化一遍,内层循环变量要变化一次 。( F  )
    7. 程序调用自身的编程技巧称为递归。递归的特点是编程简单并且节省内存。(  F )
    8. 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。( T  )
    9. 使用public修饰的成员属性和方法可以被当前项目中所有包的所有类访问。( T  )
    10. 将子类对象赋给父类引用变量,称为向下转型,将无法访问子类特有的方法。( F  )
    11. 继承是多态的基础,没有继承就没有多态。(  T )
    12. 内部类作为外部类成员,权限修饰符和其他成员一样,可声明为private、默认、protected或public。(  T )
    13. 对于物理连接,比如数据库连接、输入流输出流、Socket连接等,垃圾回收机制无能为力,必须手动关闭才可以。(  T )
    14. 数组和集合中的元素可以是任何数据类型,包括基本类型和引用类型。( F  )
    15. 增强的for循环可以遍历数组和集合,语法简单 不需要知道数组的长度,不能实现与下标相关的操作。(  T )
    16. LinkedHashMap是一种有序的HashMap,查询速度快,便于进行添加删除操作。( T  )
    17. Collection类是专门用来操作集合的工具类,提供一系列静态方法实现对各种集合的操作。(  F )

    Collection是接口类型,存放单值的最大接口;
     Collections是操作集合的工具类,就像数组一样,Arrays类是数组工具类。

    1. 一个File对象可以代表一个文件或目录,它可以获取文件和目录属性,也可以访问文件内容。F )
    2. 进程是线程Thread内部的一个执行单元,它是程序中一个单一顺序控制流程。( F  )
    3. Socket是传输层供给应用层的编程接口,是应用层与传输层之间的桥梁 。(  T )

     

    四、    简答题(共5个题目,总计25分)

    1. 方法重载和方法重写(覆盖)的区别。(4分)

     

    英文

    位置不同

    修饰符

    返回值

    方法名

    参数

    抛出异常

    方法体

    重载

    overload

    同一个类中

    无关

    无关

    相同

    不同

    无关

    不同

    重写

    override

    子类和父类间

    大于等于

    小于等于

    相同

    相同

    小于等于

    不同

     

        答:

        (1)相同点:

        ①方法名称相同。

        ②都属于多态机制。

        (2不同点:位置、参数列表、权限修饰符、返回值类型、抛出异常不同。

        重载(overload)发生在同一个类中,方法名相同,参数列表不同,与权限修饰、返回值类型、抛出异常无关。

        重写(override): 发生在继承类中,方法名和参数列表相同,权限修饰符大于等于父类、返回值类型小于等于父类、抛出异常小于等于父类。

     

    1. 写出java.lang.Object类的六个常用方法的声明并说明其作用。(6分)

        1)       public boolean equals(java.lang.Object) 比较内容

        2)       public native int hashCode() 哈希码

        3)       public java.lang.String toString() 变成字符串

        4)       public final native java.lang.Class getClass() 获取类结构信息

        5)       protected void finalize() throws java.lang.Throwable 垃圾回收前执行的方法

        6)       protected native Object clone() throws java.lang.CloneNotSupportedException 克隆

        7)       public final void wait() throws java.lang.InterruptedException 多线程中等待功能

        8)       public final native void notify() 多线程中唤醒功能

        9)        public final native void notifyAll() 多线程中唤醒所有等待线程的功能

    1. 接口和抽象类的联系和区别。(5分)

        相同点

    • 抽象类和接口均包含抽象方法,类必须实现所有的抽象方法,否则是抽象类
    • 抽象类和接口都不能实例化,他们位于继承树的顶端,被其他类继承和实现

        两者的区别主要体现在两方面:语法方面和设计理念方面

        语法方面的区别是比较低层次的,非本质的,主要表现在:(2分)

    • 接口中只能定义全局静态常量,不能定义变量。抽象类中可以定义常量和变量。
    • 接口中所有的方法都是全局抽象方法。抽象类中可以有0个、1个或多个,甚至全部都是抽象方法。
    • 抽象类中可以有构造方法,但不能用来实例化,而在子类实例化时执行,完成属于抽象类的初始化操作。接口中不能定义构造方法。
    • 一个类只能有一个直接父类(可以是抽象类),但可以充实实现多个接口。一个类使用extends来继承抽象类,使用implements来实现接口。

        二者的主要区别在设计理念上,决定了某些情况下使用抽象类还是接口。(2分)

    • 抽象类体现了一种继承关系,目的是复用代码,抽象类定义了各个子类的相同代码,可认为父类是一个实现了部分功能的“中间产品”,而子类是“最终产品”。父类和子类间须存在“is-a”关系,即父类和子类在概念本质上是相同的。

        接口并不要求实现类和接口在概念本质上一致,仅仅是实现了接口定义的约定或能力而已。接口定义了“做什么”,实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。接口和实现之间可以认为是一种“has-a的关系

     

        1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

        2、抽象类要被子类继承,接口要被类实现。

        3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

        4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

        5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

        6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

        7、抽象类里可以没有抽象方法

        8、如果一个类里有抽象方法,那么这个类只能是抽象类

        9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

        10、接口可继承接口,并可多继承接口,但类只能单根继承。

     

    1. Vector和ArrayList、ArrayList和LinkedList的区别和联系。(6分)

        VectorArrayList的区别和联系

        实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用(1分)

        两者的主要区别如下

    1. Vector是早期JDK接口,ArrayList是替代Vector的新接口(0.5分)
    2. Vector线程安全,ArrayList重速度轻安全,线程非安全(1分)
    3. 3.       长度需增长时,Vector默认增长一倍,ArrayList增长50%(0.5分)

        ArrayListLinkedList的区别和联系

        ArrayList和LinkedList都是List的实现类,元素具有有序,不唯一特点。(1分)

        ArrayList实现了长度可变的数组,在内存中分配连续空间。遍历元素和随机访问元素的效率比较高;(1分)

     

        LinkedList采用链表存储方式。插入、删除元素时效率比较高(1分)

     

     

    1. 面向对象设计原则有哪些。(4分)

        面向对象设计原则是面向对象设计的基石,面向对象设计质量的依据和保障,设计模式是面向对象设计原则的经典应用

    1. 单一职责原则SRP
    2. 开闭原则OCP
    3. 里氏替代原则LSP
    4. 依赖注入原则DIP
    5. 接口分离原则ISP
    6. 迪米特原则LOD
    7. 组合/聚合复用原则CARP

    开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他设计原则都可以看作是开闭原则的实现手段或方法。

      1 一、    编码题(共3个题目,总计20分)
      2 1.    写出饿汉式单例模式、懒汉式单例模式、多线程情况下懒汉式双重判断单例模式的示例代码。(7分)
      3 
      4 public class Student_1 {
      5     //饿汉式
      6     private static Student_1 student = new Student_1();
      7 
      8     public static Student_1 newInstance() {
      9         return student;
     10     }
     11 
     12     public Student_1() {
     13         System.out.println("饿汉式创建对象");
     14     }
     15 
     16 }
     17 
     18 class Student_2 {
     19     //懒汉式
     20     private static Student_2 student2;
     21 
     22     static Student_2 newInstance2() {
     23     //提高效率,如果第一次创建对象成功,后面就不用进入同步当中,直接返回对象即可
     24         if (student2 == null) {
     25             synchronized (Student_1.class) {
     26                 //如果是第一次调用方法,进入if,创建对象
     27                 if (student2 == null) {
     28                     student2 = new Student_2();
     29                 }
     30             }
     31         }
     32         return student2;
     33     }
     34 
     35     public Student_2() {
     36         System.out.println("懒汉式双重检验创建对象");
     37     }
     38     
     39 }
     40 public class Danli_1 {
     41   
     42     public static void main(String[] args) {
     43         Student_1 s =Student_1.newInstance();
     44         
     45         Student_2 s2 =Student_2.newInstance2();
     46         
     47     }
     48 }
     49 
     50 2.    写出使用JDBC访问数据库表t_student中所有数据,并将结果集内容封装成List返回的代码。(6分)
     51 1)    数据库表已经创建,表名称及字段信息如下
     52 表名    t_student    中文表名称    学生信息表
     53 序号    字段名称    字段说明    类型    长度    备注
     54 1    id    学生编号    number    6    主键
     55 2    name    学生姓名    varchar2    8    非空
     56 3    age    学生年龄    number    3    非空
     57 4    score    学生分数    number    5,1    非空
     58 5    enterdate    入学时间    date        非空
     59 2)    实体类Student已经提供,和数据库表字段对应,有id,name,age,score,enterDate五个属性及相应的getter和setter方法,提供了各种参数的构造方法。
     60 3)    使用JDBC访问数据库四个连接参数分别为
     61 a)    driver:oracle.jdbc.driver.OracleDriver
     62 b)    url:jdbc:oracle:thin:@localhost:1521:orcl
     63 c)    username:bjsxt
     64 d)    password:bjsxt                
     65 4)    方法的声明为public List<Student> findAll(){ },在方法体中书写JDBC代码完成功能即可。
     66 3.    使用TCP网络编程完成用户登录功能:客户端输入用户名和密码,向服务器发出登录请求;服务器接收数据并进行判断,如果用户名和密码均是bjsxt,则登录成功,否则登录失败,返回相应响应信息;客户端接收响应信息并输出登录结果。(7分)
     67 1)    用户User类已提供构造方法 public User(String username,String password)。
     68 2)    客户端采用ObjectOutputStream发送封装了用户名和密码的User对象。
     69 3)    服务器端和客户端的类名和方法声明如下所示。
     70 
     71 import java.io.BufferedReader;
     72 import java.io.BufferedWriter;
     73 import java.io.IOException;
     74 import java.io.InputStreamReader;
     75 import java.io.OutputStreamWriter;
     76 import java.net.Socket;
     77 import java.util.Scanner;
     78 
     79 public class UserClint_3 {
     80     static Scanner sc = new Scanner(System.in);
     81     public static void main(String[] args) throws IOException {
     82         //1.创建客户端套接字
     83         Socket s = new Socket("localhost", 152);
     84         //2.创建客户端输出流
     85         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
     86         //3.用户输入用户和密码,并写入输出流
     87         System.out.println("请输入用户名:");
     88         String user = sc.nextLine();
     89         System.out.println("请输入用户密码:");
     90         String password = sc.nextLine();
     91         bw.write(user);
     92         bw.flush();
     93         bw.newLine();
     94         bw.write(password);
     95         bw.flush();
     96         
     97         //4.通知服务端客户端用户信息写入完毕
     98         s.shutdownOutput();
     99         
    100         //5.创建输入流来接受服务端响应的信息
    101         BufferedReader br=  new BufferedReader(new InputStreamReader(s.getInputStream()));
    102         String info = br.readLine();
    103         //6.输出响应信息
    104         System.out.println(info);
    105         //7.关闭套接字
    106         s.close();
    107     }
    108 }
    109 
    110 import java.io.BufferedReader;
    111 import java.io.BufferedWriter;
    112 import java.io.FileInputStream;
    113 import java.io.IOException;
    114 import java.io.InputStreamReader;
    115 import java.io.OutputStreamWriter;
    116 import java.net.ServerSocket;
    117 import java.net.Socket;
    118 import java.util.HashMap;
    119 import java.util.Map;
    120 import java.util.Properties;
    121 
    122 public class UserServer_3 {
    123     public static Map<String, String> User() throws  IOException{
    124         //将用户信息存放在User.properties文件中
    125         //创建properties类获取用户信息
    126         Properties p = new Properties();
    127         //通过load()方法读取用户信息
    128         p.load(new FileInputStream("User.Properties"));
    129         //通过getProperty()方法获取用户信息的键,得到用户信息的值
    130         String user = p.getProperty("username");
    131         String pwd = p.getProperty("pwd");
    132         
    133         //创建map集合,将用户信息的键以及对应的值放入集合中
    134         Map<String, String> map = new HashMap<>();
    135         map.put("username", user);
    136         map.put("pwd", pwd);
    137         return map;
    138     }
    139     public static void main(String[] args) throws IOException {
    140         //1.创建服务器端套接字
    141         ServerSocket ss = new ServerSocket(152);
    142         //2.监听客户端套接字
    143         Socket s = ss.accept();
    144         //3.创建输入流用来读取客户端发送的用户信息
    145         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    146         //4.读取客户端发送的用户信息
    147         String username = br.readLine();
    148         String password = br.readLine();
    149         
    150         //5.调用map集合,拿到map集合里面的用户信息和客户端发送的信息进行比对
    151         Map<String, String> map = User();
    152         //6.创建输出流用来响应客户端
    153         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    154         //7.进行信息比对
    155         if(map.get("username").equals(username)&&map.get("pwd").equals(password)){
    156             //8.写入响应信息
    157             bw.write("恭喜您,登录成功!");
    158             bw.flush();
    159         }else{
    160             bw.write("登录失败,用户或用户密码错误!");
    161             bw.flush();
    162         }
    163         //9.关闭客户端套接字
    164         s.close();
    165     }
    166 }

     

    转载于:https://www.cnblogs.com/topshark/p/10252020.html

    展开全文
  • 中级软件工程师证书报考条件有哪些要求?软件工程师资格证认证考试分助理,初级,高级工程师。考试合格者由国家人事部和信息产业部颁发相应级别的计算机软件专业技术资格证书。报考资格考试又达到水平考试合格标准者...
  • JAVA的考试试题,大家可以试一试讲话太经典了,什么时候嗯看都来得及,然后呢?,头疼头疼,正常也感觉不错,不好意思,我记错了
  • 中级软件工程师证书报考条件有哪些要求?软件工程师资格证认证考试分助理,初级,高级工程师。考试合格者由国家人事部和信息产业部颁发相应级别的计算机软件专业技术资格证书。报考资格考试又达到水平考试合格标准者...
  • ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2)必须掌握一个嵌入式操作系统 (初步定 为uclinux或linux,版本待定) (3)必须...
  • 软件测试工程师相关证书

    千次阅读 2020-06-04 00:55:16
    今天逛了一圈技术博客,看到一位很厉害的测试写关于她考了高项、软件评测师、pmp等证书,突然想到自己做软件测试工作三年多了,一个证书都没有。那作为测试人员,我们可以考哪些证书呢? 国家职业资格证书 国家职业...
  • 随着职业资格认定的发展越来越成熟,国内无论是企业还是政府,越来越重视职业资格认定证书了,比如说有一些地方的人才认定,中级职业资格证书能认定的人才等级往往比本科学历高,一般都是跟硕士学历同等级或者比硕士...
  • IP-guard初级认证工程师考试笔试部分 单选题 1、略 2、略 3、安装客户端,会自动开启什么端口( ) A,8235 B.8236 C.8237 D.8240 4、IP-guard客户端远程控制默认是那种验证方式 ( ) A.客户端主动申请 B. ...
  • 求职目标:Java软件工程师姓名:张XX年龄:24岁住址:北京市朝阳区电话:135xxxxxxxx邮箱:lucky@ijianli.com教育背景2013.09-至今 ? ?XXXXX大学 ? ?通信工程( 本科)主修课程:电路理论基础、电子线路(线性与非线性)...
  • 信息处理技术员初级证书入户深圳能加分吗具有计算机与信息处理的基础知识,能根据应用部门的要求,熟练使用计算机有效地、安全地进行信息处理操作,能对个人计算机系统进行日常维护,具有助理工程师(或技术员)的实际...
  • 程序员考试目标 通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照程序设计规格说明书编制并调试程序,写出程序的相应文档,产生符合标准规范的、实现设计要求的、能正确可靠运行的程序。...
  • 软考专业技术资格证书:软考通过后既可获得《中华人民共和国计算机技术和软件专业技术资格(水平)证书》(以下简称软考证书),这个证书意味这你已经取得我国相应级别的专业技术资格证书(即俗称的职称证书)。...
  • 1. 软件工程师资格证 1 1.1. 法规规范 十大标准,三级五晋制。 1 1.2. 组织架构 域职称评级委员会 2 1.3. 人员职责流程表 2 1.4. 人事安排 2   收藏 102 29 软件工程师资格证  编辑 软件工程师是一个...
  • 1. 软件工程师资格证 1 1.1. 法规规范 十大标准,三级五晋制。 1 1.2. 三级制 使用者 原理维修者 制造设计者 1 1.3. 组织架构 域职称评级委员会 2 1.4. 人员职责流程表 2 1.5. 人事安排 2   收藏 102 29 ...
  • 软件工程师

    2014-12-14 11:26:35
    软件工程师英文是Software Engineer,是一个认证考试,具体地说是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格软件工程师是从事软件开发相关工作的人员的统称。 它是一个广义的概念,...
  • 初级工程师必备(unity)

    万次阅读 2018-12-03 11:56:14
    由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。 5、迪米特法则,又称最少知道原则(Demeter Principle)  最少知道原则是指:一个实体应当尽量少地...
  • 在非专业人的眼里,似乎软件工程师出了写代码还是写代码。当然,也有不了专业人士会问到这几个问题:“我接下来应该学哪种语言?”、“如何准备技术面试?”、“你们招人吗?” 这个问题无法给出很好的答案,那就是,...
  • IP-guard企业信息监管系统,是一款领先的内网安全软件,它能够协助企业解决最棘手的内网安全问题,借助IP-guard强大的功能,企业能够有效地进行用户行为管理,防范信息外泄,文档透明加密,敏感内容识别管理系统DLP...
  • 满意答案eVans666推荐于 2017.09.24采纳率:49%等级:13已帮助:23470人计算机程序设计工程师技术水平(java)证书就是计算机技术与软件专业技术资格考试的程序员证书。计算机技术与软件专业技术资格(水平)考试是原...
  • 二、软件测试工程师:简历模板 三、软件测试工程师:简历包装 1.基本信息: 2.教育背景: 3.专业技能 4.工作经历 5.项目经验 6.自我评价 四、软件测试工程师:简历总结 一、前言:浅谈面试 面试是我们...
  • 工信部‘ 软件工程师Dear Self, 亲爱的自我, You just graduated and you are ready to start your career in the IT field. I cannot spoil anything, but I assure you it will be an interesting ride. 您...
  • 软件工程师的衰落与程序员的崛起

    千次阅读 多人点赞 2020-02-24 16:14:29
    我周围大多数人都是软件工程师或计算机科学家,大多经验丰富且接受过严格的计算机科学教育。当然,这只能成就一个计算机科学,却不一定能成就编程。许多经验丰富的同事都痛惜年轻同事技能和教育水平的下降。 同时...
  • 软件工程师的工作在最近几年变得尤为紧俏,那么,如果想成为一名软件工程师,需要具备什么素质?同时,如何进行自我学习?  【一】软件工程师解读  【二】软件工程师的三个进阶  【三】Google前工程经理王忻:...
  • 盛泰鼎盛软考,全称为计算机技术与软件专业技术资格(水平)考试。它既是职业资格考试,又是职称资格考试。同时,它还具有水平考试的性质。由此可见,软考证书肯定是有用的,只是每个人考取证书的意义不一样,有些人是...
  • 软件测试工程师认证

    千次阅读 2014-08-18 21:25:31
    1.四级软件测试工程师:它是全国计算机等级考试中四级的一类,在校大学生可以参加这个考试,在求职测试职位时可以加分不少。 2.软件评测师:它属于全国计算机技术与软件专业技术资格考试(软考)中的一个中级考试。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,223
精华内容 1,289
关键字:

初级软件工程师证书