2025上半年,最新 AI实践都在这!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:275305

评论 1 条评论

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

又双叒叕获奖!天翼云推动算力服务便捷普惠泛在!

天翼云开发者社区

云计算 网络安全 云服务

玩转云端| 如何防爬虫?天翼云边缘安全加速平台AccessOne带你涨姿势!

天翼云开发者社区

云计算 网络安全 云服务 云平台

上云有道 | 一图读懂天翼云边缘安全加速平台AccessOne!

天翼云开发者社区

边缘计算 云服务 云平台 边缘安全

一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)

不在线第一只蜗牛

Typora 编辑器

阿里云 ApsaraMQ 率先完成消息队列全系 Serverless 化,携手 Confluent 发布新产品

阿里巴巴云原生

阿里云 Serverless 云原生 Confluent ApsaraMQ

了解 Websocket 断连技巧:易懂的实战指导

Apifox

程序员 后端 网络协议 websocket 网络通信

科技改变财务规划:提升企业对自动化技术的管理

智达方通

企业管理 财务分析 财务规划与分析

xz工具供应链后门事件 紧急处理

徐凌云

Higress 基于自定义插件访问 Redis

阿里巴巴云原生

阿里云 云原生 Higress

NFTScan | 03.25~03.31 NFT 市场热点汇总

NFT Research

NFT\ NFTScan nft工具

一学就懂!Abaqus热分析发动机电池包和电池冲击分析

思茂信息

abaqus abaqus软件 abaqus有限元仿真

软件测试学习笔记丨被测系统架构数据流分析

测试人

软件测试

软件项目估算8大原则

俞凡

项目管理

软件测试学习笔记丨Goreplay流量回放

测试人

软件测试

Flink Checkpoint 机制深度解析:原理、注意事项与最佳实践

木南曌

flink 实时计算

用友陈强兵:企业数智化进入“加速期”

ToB行业头条

Redis开源协议调整,我们怎么办?

华为云PaaS服务小智

redis 华为云

大模型预测,下一个token何必是文字?

Openlab_cosmoplat

DIY 3 种分库分表分片算法,自己写的轮子才吊!

程序员小富

Java 分库分表

玩转云端| AccessOne实用窍门之三步搞定门户网站防护与加速

天翼云开发者社区

云计算 网络安全 云服务

探索GaussDB(DWS)湖仓融合:Hudi与元数据打通的深度解析

华为云开发者联盟

数据库 华为云 华为云开发者联盟 华为云GaussDB(DWS) 企业号2024年4月PK榜

黑科技优化产品质量,Fe-safe在电磁随机振动下的分析

思茂信息

仿真 Fe-safe 疲劳分析

base链市值机器人

区块链技术

飞天发布时刻丨阿里云 ApsaraMQ 全面升级,携手 Confluent 发布全新产品

阿里巴巴云原生

阿里云 云原生 Confluent ApsaraMQ

从定义到实践:学会在 C++ 中使用变量

秃头小帅oi

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