免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

走向中级程序员的路上,我们给你总结出了一条捷径

  • 2019-08-30
  • 本文字数:2536 字

    阅读完需:约 8 分钟

走向中级程序员的路上,我们给你总结出了一条捷径

我们逐渐在工作当中找到了状态,部署生命周期不再是神秘的难题,代码审查的速度也终于超过了代码编写。最重要的是,我们开始发布真正能够运行的成果。


但是接下来,我们可以松懈吗?当然不行!对知识的探索,永远是我们时刻追求的目标。


在克服惰性方面,一种务实的方法是坚持学习那些能够帮助我们在面试中表现更好的知识。


如此一来,我们就会拥有一种明显的进步以及值得始终坚守的目标。


请关注以下五个方面——


  1. 低级/库设计

  2. 系统设计

  3. 并发

  4. 设计模式

  5. 一般编码惯例


我在本文中给出的资源主要与 Java 相关,但大家肯定也能找到针对其他语言的类似资料。无论如何,这里提到的大部分设计理念与语言无关。

低级/库设计

如果大家回顾一下 Uber、亚马逊等企业在第 2/3 轮软件开发工程师面试当中提出的问题,就会发现其中至少会有一轮主要涉及此类低级设计方向。我听说过的两大常见场景分别是:


  1. 设计一套记录器库

  2. 使用 Java 语言实现流框架


我特别喜欢这个关于记录器的问题;因为根据求职者的业务水平,大家可能会想到多种多样的答案。


这里大家可以先着手试试。在完成之后,请各位思考以下几个问题:


  • 您是否将实现分解为不同的接口?或者说使用了一个超类来涵盖一切?

  • 您是否考虑到类当中的线程安全问题?

  • 您的记录器是单体的吗?采用懒惰加载还是急切加载?为什么?

  • 它具备可插拔性吗?第三方可以利用其它实现来扩展您的库吗?

  • 垃圾收集机制是如何实现的?您是否创建了过多对象?


Log4j2 是一套设计上极为出色的记录工具,感兴趣的朋友可以点击此处参考它的实现思路。


我暂时没找到其它更好的低级设计资源。如果各位有什么好主意,请在评论中不吝赐教。

系统设计

开发人员们可能更熟悉“设计问题”这种表述。我听说过的具体案例包括:


  1. 设计一套 URL 缩短系统

  2. 设计 Twitter 的 NewsFeed 系统


这里我向大家推荐Donne Martin的《设计入门》。虽然篇幅很长,但这确实是一种优秀的广度优先方法,能够帮助大家快速熟悉系统设计原理。


至少,大家应该熟悉以下知识:


  1. 异步与同步写入;消息队列

  2. 一致性模式——特别是最终一致性

  3. 数据库类型(SQL 与 NoSQL)以及规模伸缩

  4. 不同级别的缓存

  5. 将问题陈述分解为不同的独立服务


这里我要向大家推荐《深入理解系统设计访谈》。其中详细探讨了系统设计的具体问题,包括我之前提到的两个例子。虽然属于付费资源,但绝对物有所值。


并发

并发性是初级工程师与高级工程师之间的一大核心区别。很多朋友可能想象不到,并发实际上非常难以实现。


这里推荐大家阅读《Java 并发实践(Java Concurrency in Practice)》一书。在读完之后,大家应该会对以下问题拥有更深刻的理解:


  1. Java 的内存模型

  2. 发生前关系

  3. 虚假唤醒调用

  4. 易失性与同步性

  5. 线程安全、等待与通知等


如果大家使用的是其他编程语言,也请参考对应的书籍。总之,如果没能彻底掌握相关概念,我们将很难对竞争条件进行调试。


Educative 的《Java 多线程与并发(Java Multithreading and Concurrency)》 也是很好的资源,推荐大家阅读其中的概念,而后结合常见的面试问题进行理解。

设计模式

虽然面试一般不会问到这些问题,但在研究不同的设计用例时,大家或多或少都会接触到。


而在了解了相关概念之后,我们就会意识到这些模式无处不在。举几个例子:


  1. Adapter — Arrays.asList()

  2. Decorator — Collections.synchronizedCollection(new ArrayList<>())

  3. Prototype — Immutables.copyOf()

  4. Command — Runnable interface

  5. Strategy — java.util.Comparator#compare()


StackOverflow 中列出一份长长的 Java 核心库模式清单,推荐大家了解一下。


我也尝试过阅读经典的《设计模式:可重用面向对象软件中的元素(Design Patterns: Elements of Reusable Object-Oriented Software)》,但我承认我真的啃不下来。


但我也试过《深入浅出谈设计模式(Head First Design Patterns)》,这看起来不像是技术读物,但却给我带来了巨大的帮助。


这本书里的故事选得很好,清晰梳理出了类似模式之间的微妙差别。我花了一个周末读完了它,真的是干货多多又有趣。


过一阵子我想再回去啃啃《可重用面向对象软件中的元素》,这本书同样极具价值,只是比较硬核、对开发经验的要求更高。

一般编码惯例

看书、看书、再看书


《高效 Java(Effective Java)》。这是大家熟悉 Java 表达与最佳实践的理想方法。其中分为 90 个独立的主题,每个主题都长达数页。因此,我们可以选择与当前工作内容相关性最强的部分。


《清洁代码(Clean Code)》——有了这本书的帮助,大家能够更快更方便地阅读并审查其他人编写的代码。与《高效 Java》类似,我同样推荐大家有选择地阅读这本书中的对应章节。


熟练掌握您的 IDE


好吧,这一点跟面试没什么关系。但说真的,熟练掌握 IDE 能够极大提升编程的效率与趣味性!


我个人使用 IntelliJ,还安装了一款“Key Promoter X”插件。每当我使用了能够通过快捷键实现的鼠标操作时,它都会发出提醒。只需要几周,大家就能掌握快捷键操作并让自己看起来专业万分~当然,这都是被提示磨出来的。如果大家使用的是其他 IDE,也可以试试类似的小工具。但我还是强烈推荐 IntelliJ,真的很棒。


《42 项 IntelliJ 提示与技(42 IntelliJ Idea Tips and Tricks)》是 YouTube 上的一段讲座,大家可以通过这种有趣的方式熟悉 IntelliJ 中提供的各种常用功能。


这份清单挺长的,不过大家不用着急,阅读的意义不在于读完,而在于借此改善自己在日常工作中的体验。加油!


顺便说一句,这份清单主要面向已经拥有 0 到 4 年开发经验的人群。如果各位还没开始工作,请先从 Leet Code 入手,等有了一定积累之后再阅读这份书单。


一般来说,直到接触现实场景中的实际系统之后,大家才会遇到设计概念层面的问题。


相关书籍


下面,我再立足各个基础方向推荐一本好书,尽可能把它们组织成一个学习体系。


  1. Effective Java — Java 最佳实践入门,阅读难度很低。

  2. Clean Code — 助您快速掌握编码中的经验法则。

  3. Java Concurrency In Practice — 用于掌握并发机制的基础书籍。

  4. Head First Design Patterns — 有趣、有效的面向对象设计思维学习方式。

  5. Designing Data Intensive Applications — 我见过的最高级别的技术类书籍,包含极为丰富的系统设计知识——但也非常难啃,建议大家一次读一点慢慢消化。


原文链接:


Growing pains — Becoming an Intermediate developer


2019-08-30 11:275167

评论 1 条评论

发布
用户头像
值得收藏
2019-09-03 16:02
回复
没有更多了
发现更多内容

Compressor for Mac(视频转码工具) 4.7永久激活版

mac

windows 苹果mac Compressor 视频压缩和转码软件

基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道

阿里巴巴云原生

阿里云 云原生 网格

全面的开发者文档和用户目标解析:API 文档指南和开发者旅程

小万哥

程序人生 软件工程 后端开发 API文档 技术写作

从学习到实践——火山引擎多媒体处理框架BMF的深度探索

熬夜磕代码、

怎么"黑"了ChatGPT?

Bob Lin

人工智能 openai ChatGPT GPT-4 #LangChain

2023 年最受欢迎的 12 款 Chrome 浏览器扩展

南城FE

前端 浏览器 Chrome Extension

AI元年:一名前端程序员的技术之旅

Serenade

#前端

Parallels Desktop 18 for Mac破解版:丰富的特性和便捷的体验

iMac小白

架构决策的弹性

agnostic

架构决策

文心一言 VS 讯飞星火 VS chatgpt (163)-- 算法导论13.1 3题

福大大架构师每日一题

福大大架构师每日一题

直呼过瘾!这本编程书真是进阶必备

Jackpop

机密计算容器前沿探索与 AI 场景应用

阿里巴巴云原生

阿里云 容器 云原生

基于 ACK One 实现简单的跨云协同,让业务管理更高效

阿里巴巴云原生

阿里云 容器 云原生

关于DDOS,有什么方法解决

德迅云安全杨德俊

DDoS 服务器安全 游戏安全 网站安全

GraphPad Prism 10 for Mac(统计分析绘图软件) v10.0.0.3注册激活版

mac

苹果mac Windows软件 GraphPad Prism 统计和绘图软件

Photoshop Elements 2020 for Mac(图形处理软件) v18.0(2020.01.20)永久激活版

mac

苹果mac Windows软件 Photoshop Elements 2020 图形处理工具 ps elements

Eagle for Mac(图片管理工具) 1.9.2永久激活版

mac

苹果mac Windows软件 Eagle 图片素材管理软件

Keka for Mac激活版下载:轻松解压缩,畅享文件管理

iMac小白

大学生电脑里的必备软件有哪些?

Jackpop

阿里云 ACK 新升级,打造智算时代的现代化应用平台

阿里巴巴云原生

阿里云 容器 云原生

FlowJo 10 for Mac特别版:流式细胞分析的强大助手

iMac小白

走向中级程序员的路上,我们给你总结出了一条捷径_语言 & 开发_Saurabh Maurya_InfoQ精选文章