转载

一则技术专家招聘要求引发的深度思考

  • 一个优秀程序员的最大的美德是懒惰

  • 授你以鱼不如授你以渔

  • 王炸不教你技术,只教你学技术

作者:王炸  |【坚持 1000 篇原创】

:iphone:2019.12.12 第 58 篇原创:iphone:

:point_up: 先赞后看是技术人的传统美德 :point_up:

关于王炸

一个懂天文学的程序员

拥有8年一线大厂经验,兴趣广泛,欢迎和我边玩边学,从今天起面朝大海。

我们的座右铭:“ 要好好学习,不然别人只会指着你的鼻子说“你看那个人,除了帅,一无是处。

言归正传

格局决定一切 思考决定成败 | 为什么会写此文?

北京时间22:00,我丝毫没想下班的冲动,献身程序员改变世界的伟大工程,身处望京一带 最高档 的写字楼内,窗外星光璀璨、五彩斑斓、华灯初上、光彩夺目、流光溢彩、灯火齐明、暮色弥漫,我实在找不到一个准确的词形容这座美丽的城市,只能感叹: “鸡你太美”

一则技术专家招聘要求引发的深度思考

我在公司内部最高端的千人技术群里看到一则招聘信息,这则招聘信息引发了我的关注,于是有了《一则技术专家招聘要求引发的深度思考》一文。

招聘要求还原:

加入我们,您将参与:

  1. 建设大规模分布式系统,打造新一代以云原生和 Serverless 技术为基础的互联网开发领域基础设施平台

  2. 打造一整套可支持各种复杂业务场景,具备高可用,高性能,高扩展性,从软件设计到上线运维,贯穿整个开发生命周期的开发框架;

  3. 提供全方位立体监控、高可用容灾、具备软件开发最佳实践的产品解决方案;

岗位要求:

  1. 熟悉 Java语言,有大型分布式、高并发、高性能、高可用系统的设计开发经验;

  2. 对Spring,Spring Boot等架构设计,核心功能熟悉,主要流程有代码级的了解,具备修改该框架的能力;

  3. 熟悉 CNCF 生态技术,如 Service Mesh、Prometheus、Service Catalog、Knative等;

  4. 熟悉主流Web容器如Tomcat、Jetty,GlassFish等的架构设计及核心逻辑,对部分组件具备代码级的了解及修改能力;

  5. 熟悉Jvm相关的基础知识,如类加载,并发原理等;

  6. 精通设计模式,能写出优雅的代码,并能进行高效的重构;

  7. 注重代码质量,有良好的 Test Driven 习惯;

  8. 具备复杂需求及技术的研究能力,善于进行需求分解、技术突破,擅长团队的沟通协作,具备亲和力。

思考决定成败:

针对 岗位要求 的内容,我分享下我的想法,只拿最简单的第1条第2条为例。

第1条:熟悉Java语言,有大型分布式系统开发经验,这个不用说,就是要求基础扎实,无话可说。致于分布式系统开发经验,5年前只会一门Java/SSH/M就能找到一份工作,如今已世殊时异,2020年如果还不了解 分布式 恐怕要转行送外卖了,兄弟,电瓶车转卖吗?

第2条:对Spring xxx 有代码级的了解,为什么要阅读Spring源码呢,工作中真的需要让你去修改spring源码吗?读源码有什么收益。

从岗位级别区间分析(p2-2到p3-2),毕竟这个是一个年薪30w起的岗位,这点要求不过分,不能再低了,再低就发不了offer了。

我从Spring源码里学到了什么,王炸授你以渔

1.从Spring中学习设计思想:

Spring使用了控制反转的理念解决了编码强依赖问题,不希望改一个类,依赖它的类也需要改,进而,我理解了微服务为什么会流行起来,答案是 解耦 ,第一次领略到Spring可以这么完美的解决解耦。

通过依赖注入和AOP,我学会了偷懒的思路,诸如日志,鉴权,很多地方都需要用到代码,在没有了解spring的年代,我只能到处复制粘贴这些恶心的代码,如今我再也不需要复制粘贴了,面向切面编程通通帮你搞定。

2.从Spring学习设计理念:

面试的使用面试官总喜欢问:你知道哪些设计模式呀?SOLID了解吗?

SOLID分别是:单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则,这乱七八糟的都什么呀,如果你理解了这些设计理念,你发现spring源码里随处可见这些原则,读Spring源码,第一次真正了解SOLID。

比如控制反转、依赖注入和AOP,分别对应了3个spring的jar包:spring-beans、spring-context、spring-aop。每个包独立负责一个核心功能的实现,第一次领会单一职责原则。

3.从Spring学习设计模式:

Spring中的 BeanFactoryApplicationContext ,用于创建 bean 对象,使用了工厂模式来管理程序中使用的对象Bean,第一次知道如何写带有Factory模式的代码。

通过 BeanFactory 源码我get到了什么是延迟注入,当程序使用到某个 bean 的时候才会注入,相比于 BeanFactory 来说会占用更少的内存,程序启动速度更快,想让系统更快,原来还可以这样设计。

通过注解: @Scope(value = "singleton") 我get到了什么叫做 单例模式

面试车祸现场

我还记得前几年我面试一家叫 艺龙网 的初面中,面试官问我的第一个问题就是手写一个double-check的单例模式。

public class SingletonClass {
    private static SingletonClass INSTANCE = null;

    private SingletonClass() {}

    public static SingletonClass getInstance() {
        if (INSTANCE == null) {
            synchronized (SingletonClass.class) {
                if (INSTANCE == null) {
                    INSTANCE = ;
                }
            }
        }
        return INSTANCE;
    }
}

不到一分钟时间写完扔给面试官,面试官似乎轻视了我,还沉浸在玩手机中, 这是我从Spring源码中学到的 ,还问了我为什么synchronized包住的是SingletonClass.class而不是方法,我给面试官解释了什么是原子操作,以及: new SingletonClass() 在虚拟机中究竟做了什么。

我还给面试官讲了double-check单例模式在Spring中的应用,Srping 通过 ConcurrentHashMap 巧妙的实现单例注册表。

讲了这些,面试官服服帖帖不在问我任何关于Spring的题目了,话锋一转到了问JVM源码,也就是上面 岗位要求 的第5条:熟悉Jvm相关的基础知识,言多必失?我给自己挖了一个坑?

一则技术专家招聘要求引发的深度思考

你以为JVM源码就能难住我了吗? 我的 王炸 牌还没打出:boom::boom:。

别跑题,接着说Spring源码

通过AOP(Aspect-Oriented Programming:面向切面编程)我学到了 代理模式

通过ApplicationListener我学到了 观察者模式

通过AdvisorAdapter我学到了 适配器模式

还有Spring如何解决事务问题,Bean如何解决循环依赖问题。

还有很多很多.....

读到我文章的各位侠客,您不点个赞 转发到朋友圈 ,我恐怕要写不动了。

总结:

有态度,对代码存敬畏之心。

下期预告

超过 2000个 阅读我写JVM源码?你们说了算,上面那些岗位要求哪里不懂你们提问, 步步高打火机,哪里不会点哪里。

毕竟文章开头是一个年薪30w起的岗位

大神还看了这这些文章

  1. 2020年没被淘汰的IT精英都看这14个全球知名网站

  2. 王炸吐血整理60个Redis面试题,全网最全了

  3. 月薪三万的码农: 工作拧螺丝有什么不好?

  4. Java和Python哪个更适合初学者的问题

一则技术专家招聘要求引发的深度思考

原文  https://mp.weixin.qq.com/s/moBjXGhspfpOFFKxSk9MQg
正文到此结束
Loading...