华为面试改革,我们该怎么跟进?


戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg

技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!

近日,华为轮值董事长徐直军撰写了《关于公司高端精英类、软件类人才面试方法调整的建议》。其中重点讲到:软件类人才面试要以考察软件工程能力与编程能力,识别出真正的软件开发与设计高手。

文章也给出了具体的考核方式:

应聘人员首先应该进行网上编程,时间 90 分钟,网上编程符合要求的进入面试环节。

在网上编程环节中,有两轮面试,每轮 45 分钟。每轮面试当面或视频面试,考察实际编程能力及相关知识技能的掌握程度。编程时间 30 分钟,提问与讨论 15 分钟。

看到网上编程这种考核方式的时候,我立刻想到了 ThoughtWorks 这家公司。ThoughtWorks 的面试重点就是考核面试者的编程能力和设计能力。

面试者在正式面试之前,首先会受到一个 homework,只有做完这个 homework,并且达到要求的候选人才能进入后续的面试。而后续面试也与我们平常的面试不同,ThoughtWorks 的后续面试都会围绕这份 homework 进行编程面试。例如:当场给出新的需求,让你重构你原来的代码。

对于习惯了国内面试流程的开发者来说,如果去 ThoughtWorks 面试,homework 过不了都是一种常态。因为国内互联网公司因为追求速度,所以很多时候就牺牲了代码的质量。如果平时都是这么一种状态,那么面试的时候自然不会考察编程能力了。

华为注重编程能力的考察、注重软件工程实践也是一件好事。短期来讲会提高门槛,但是长期看来会提高编程的科学性,减少重复劳动。而且随着国内 IT 行业的不断成熟,国内公司会越来越注重编程能力的考核。那作为软件开发者的我们,应该如何顺应这一趋势提升自己呢?

测试驱动

测试驱动是一种编程的思想,简单地说就是用测试来驱动编程。想象一下:当我们在重构一个系统的时候,如果没有测试用例,那么我们重构完成之后怎么能保证它是没有问题的呢?而如果你的项目一开始就是采用测试驱动开发的,那么当你完成重构后,只需要运行一遍测试用例,就可以发现存在的问题,从而减少潜在的 bug。

当然测试驱动并没有我说的那么简单,上面只是测试驱动开发带来的一个好处。真正的测试驱动需要遵循一套比较完整的流程:

  • 首先,分析需求,针对需求编写测试用例。

  • 接着,针对测试用例编写业务代码。

  • 接着,对通过测试用例的代码进行重构,使其更易于扩展。

  • 最后,还需要运行一次测试用例,确保重构后的代码没有问题。

通过这么一种方式,我们能够在一开始的时候就发现需求中的问题,从而避免代码写完之后进行变更,从而提高了效率。而有了测试用例的存在,我们可以确保重构时不会使原有功能受损。

设计模式

在测试驱动中我们说到重构,而在重构中不得不说的就是设计模式。设计模式对于初学者来说就像天书一样,完全搞不懂它是做什么的。但如果你有一定的项目经验和源码阅读经验,你会发现设计模式的好处。设计模式的本质是用编程模式去承载业务的复杂性,使得业务代码更加容易扩展。

例如我们使用得最多的策略模式,其实就是将每种可能的情况放到一个单独的类中,使得每种情况单独分开,从而有利于扩展和修改。

  1. public interface PeelOff {

  2. void peelOff();

  3. }

  4. public class ApplePeelOff implement PeelOff{

  5. void peelOff(){

  6. //deal with apple

  7. }

  8. }

  9. public class BananaPeelOff implement PeelOff{

  10. void peelOff(){

  11. //deal with banana

  12. }

  13. }

而模板模式在源码设计中也用得非常多。例如在 AQS 的实现中,在 AQS 的实现中调用了 tryAcquire() 方法,但在 AQS 中的 tryAcquire() 方法中却没有具体实现。这是因为其将 tryAcquire() 的具体实现交给了子类,从而实现了实现方式的多样化。

  1. // AQS的tryAcquire实现,使用了模板方法

  2. // 在AQS中直接抛出异常,没有具体实现,具体的实现在子类中

  3. protected boolean tryAcquire(int arg) {

  4. throw new UnsupportedOperationException();

  5. }

  6. // 在acquire方法中调用tryAcquire方法

  7. public final void acquire(int arg) {

  8. if (!tryAcquire(arg) &&

  9. acquireQueued(addWaiter(Node.EXCLUSIVE), arg))

  10. selfInterrupt();

  11. }

类似的设计模式还有很多,这里就不过多介绍了。从这些例子中我们可以看到,因为设计模式的存在,使得程序更加灵活、更加易于扩展了。了解常见的设计模式只是开始,我们需要在日常工作中不断地尝试使用它们。在不断的实践中加深对于设计模式的理解,最终才能对设计模式有深层次的理解和运用。

重构

重构可以说是高级开发人员必备的技能了,前面所说的设计模式在重构的时候会发挥很大的作用。但设计模式只是重构过程的一个重要运用,在重构过程中还有许多可以运用的原则,例如:单一职责原则等。

关于重构这块的知识点有很多,这里就不深入介绍了。关于重构建议阅读《重构》这本书,相信会有不少收获。

软件工程

关于这块知识点,我们许多人都是忽略的。我现在能回想得起也是在大学的时候,那时候有一门课程叫软件工程。但是自从工作之后,基本上就和软件工程断了联系。

随着工作年限的增长,慢慢发现这块东西还是非常有用的。特别是当你作为一个团队 leader或项目经验,要去管理整个技术团队的时候,软件工程就是你必须要懂的东西。我们前面所说的「测试驱动编程」就是软件工程中的一块,除此之外还有「领域编程(DDD)」等。

软件工程可以从项目角度让我们更科学地把我研发进度,形成更合理的研发体系。所以关于软件工程的知识点也是我们需要重点学习的。

总结

或许是由于 IT 发展历程的原因,所以国内 IT 公司都不怎么注重编程能力和软件工程的考核。但如果你有留意国外公司的面试流程,你会发现国外公司都比较注重编程能力的考核,通常都会有手写代码、在线编程等考核。我相信随着国内 IT 行业越来越成熟,肯定有越来越多的公司将编程能力纳入考核范围。

对于软件开发从业者的我们,我觉得这是一件好事。编程能力的提升、软件工程的实践会使得项目变得更加可控,这在一定程度上会减弱无效的编程劳动,提高软件开发从业者的幸福感。与此同时,它也对我们提出了更高的要求,需要我们掌握更多的专业知识技能。

简单地说,我们不应该只是简单地思考如何应付这次面试改革,而应该去思考这背后的原因。从而让我们的能力跟上市场的需求,只有这样我们才能立于不败之地。在我看来,测试驱动、设计模式、重构、软件工程是我未来要重点加强的能力。

对于这次华为面试改革,你觉得软件从业者应该加强哪方面的能力,欢迎留言讨论。


640?wx_fmt=png


640?wx_fmt=jpeg


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 刷了一个半月算法题,我薪资终于Double了

  • 掌声送给TensorFlow 2.0!用Keras搭建一个CNN | 入门教程

  • 中国AI开发者真实现状:写代码这条路,会走多久?

  • 520 这天,我突然意识到,她根本配不上我这么聪明的男人

  • 厉害!女学生偷师男子学校,变身区块链开发工程师

  • 确实, 5G与物联网离不开区块链!

  • Linux 之父:我就是觉得苹果没意思!| 人物志


640?wx_fmt=png真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中单链表的实现

单链表的实现单链表示例代码开发环境运行结果单链表 链表内存空间不一定连续,其扩展性较好。多余的不多说了。该文主要记录单链表的实现,该单链表含有一个非空的头节点。链表的操作实际上是对其指针域与数据域的操作。 示例代码 直接上代码&#xff1…

使用说明_预拌混凝土使用说明

尊敬的客户感谢您使用我公司的混凝土。为保证您的工程质量,我公司根据配制的混凝土性能,参与《预拌混凝土》GB/T14902-2003、混凝土施工有关标准以及工程施工过程中常见问题制定出本说明书和技术交底。敬请认真阅读并按本说明书和技术交底等规定的有关操…

【算法精讲】分享一道很不错的算法题

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作者:帅地转自:苦逼的码农分享一道leetcode上的题,…

C++中实现Stack

栈的实现栈示例代码开发环境运行结果栈 栈本着先进后出的原则,来存取数据。作为数据结构中的一种,这里不多介绍相关栈。仅以此文记录C中栈的实现,可帮助提升编程能力与对栈的理解。 示例代码 直接上代码。 SeqStack.h #pragma once#defin…

使用码云

使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法连接的情况(原因你懂的)。 如果我们希望体验Git飞一般的速度,可以使用国内的Git托管服务——码云(gitee.com)。 和G…

vstar为什么登录不了_一手的闲鱼号,为什么现在闲鱼号一号难求

现在随着闲鱼不断被众人发现是一个新的发财之地,之后便各种有关闲鱼项目的方案是层出不穷,比如闲鱼店群啊,那么一个人顶多只能够拥有几个闲鱼号,那么对于一些想要在闲鱼里面赚取一笔的人是远远不够的,那么自然也就造成…

游戏直播行业真的如你想象般暴利? | Alfred数据室

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作者:AlfredWu转自:Alfred数据室最近几年游戏直播行业火了&…

C++使用模板实现元素的反序

实现任意类型序列中元素的反序所涉知识点示例代码开发环境运行结果注意所涉知识点 阅读此文需要掌握的知识点&#xff1a;回调函数&#xff0c;模板类&#xff0c;类模板&#xff0c;栈。 示例代码 这里直接上代码。 #pragma once #include <Stack> using namespace …

Maven配置、使用

一、Maven安装与配置 1.1 下载maven安装包&#xff0c;解压即可使用 官网&#xff1a;http://maven.apache.org/download.cgi 1.2 配置maven环境变量 1.2.1 此电脑-【属性】-【高级系统设置】-【环境变量】-【建系统变量】 第一处&#xff1a;M_HOME 解压路径&#xff1a…

5G精华问答 | 5G的关键无线技术是啥?

5G的概念虽然很早就已经提出&#xff0c;但是对于大多数用户来说&#xff0c;真正听到并且对5G有了初步的了解还是在今年。今天就让我们来看看关于5G的精华问答吧。1Q&#xff1a;5G能干什么&#xff1f;A&#xff1a;5G将带来光纤般的“零”时延接入速率&#xff0c;同时将给网…

C++中实现链栈

链栈链栈简述示例代码开发环境运行结果注意链栈简述 链栈从概念上看是链表和栈的结合&#xff0c;含有栈先进后出的特性&#xff0c;也具有链表的动态增加节点的特性&#xff0c;这里相当于在链表的基础上增加只能从一端操作&#xff0c;且保持先进后出的特性。将头节点所在的…

Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案

相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码&#xff1a; 可以看到 userMapper 下有个红色警告。虽然代码本身并没有问题&#xff0c;能正常运行&#xff0c;但有个警告总归有点恶心。本文分析原因&#xff0c;并列出解决该警告的几种方案。 原因 众所周知&…

强封锁之后,华为正寻求10亿美元贷款;苹果发布iOS 12.3.1正式版,出击垃圾短信;联想CFO为“联想搬出中国”言论道歉;...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 中芯国际宣布从美国退…

C++中队列的顺序存储

队列引言示例开发环境运行结果引言 队列先进先出&#xff0c;队头出队&#xff0c;队尾入队&#xff0c;其存储可以分为顺序存储和链式储存。本文记录队列的顺序存储。也就是队列中的元素存储的内存空间是连续的&#xff0c;这里使用数组来模拟线性队列。 示例 直接上代码&a…

全球再迎超级飓风,黑客可利用微软“蠕虫级”高危漏洞暴击全球

戳蓝字“CSDN云计算”关注我们哦&#xff01;WannaCry 余威未散&#xff0c;一场新的全球性“安全浩劫”接踵而来。“WannaCry”勒索病毒爆发刚满两年&#xff0c;Windows再次被曝出一个“蠕虫级”的高危远程漏洞CVE-2019-0708。攻击者一旦成功利用该漏洞&#xff0c;便可以在目…

.net redis定时_一场由fork引发的超时,让我们重新探讨Redis的抖动问题

​​​​​​​​​​​​​​​​​​​​​​​​​​​​摘要&#xff1a;一次由fork引发的时延抖动问题。背景介绍华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构&#xff0c;兼容Redis生态的云原生NoSQL数据库&#xff1b;它依靠共享存储池实现了强一致&…

C++中关于树的一些定义

树概念树树的叶子节点节点的度分支结点树的度树的高度树的深度二叉树二叉树的特点满二叉树完全二叉树二叉查找树示例代码实现开发环境运行结果概念 本文以一个简单的树为例&#xff0c;如下图&#xff0c;来记录树的一些概念。 树 一种由n个节点组成的具有一定层次关系的有…

02_Spring Cloud Alibaba整合通用Mapper+Lombok+Mysql

Spring CLoud 整合通用MapperLombokMysql 文章目录一、使用Spring Initializr快速创建Spring Boot应用二、相关依赖2.1. 添加依赖2.2. mybatis添加插件2.3. 在resources目录下面创建generator目录存放generatorConfig.xml2.3.1. config.properties配置文件2.3.2. lombok插件2.3…

如何快速深入理解监控知识? | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;叶左左链接&#xff1a;https://www.jianshu.com/p/5d76d31b39580 监…

bootstrap 模态框无法使用_模态窗 Modal Window - 产品中的??注意力设计

本文是「经典交互模式」系列第二篇&#xff0c;前文回顾&#xff1a;面包屑导航 Breadcrumbs Trail全文目录什么是模态窗 模态窗的使用问题 模态框应用实践 什么是模态窗 Modal Window我们在各种不同的屏幕应用中见过「模态窗」&#xff0c;全屏幕模态窗、弹出信息框、&#xf…