首页 > 编程知识 正文

程序员工作成果总结(程序员的工作总结)

时间:2023-05-05 03:53:38 阅读:96172 作者:2502

我们在工作中逐渐找到了状态,部署生命周期不再是一个神秘的问题,代码评审的速度终于超过了代码编写的速度。最重要的是,我们开始发布真正有效的结果。

但是接下来,我们能放松一下吗?当然不是!探索知识永远是我们的目标。

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

这样,我们就会有一个明显的进步和一个值得坚持的目标。

请注意以下五个方面——

低级/库设计系统设计并行设计模式通用编码约定我在本文中给出的资源主要与Java相关,但是您肯定可以找到其他语言的类似材料。无论如何,这里提到的大多数设计概念都与语言无关。

低级 / 库设计

如果你回顾一下优步、亚马逊等公司在第二轮/第三轮软件开发工程师面试中提出的问题,你会发现其中至少有一个主要涉及这样的低层次设计方向。我听说过的两个常见场景是:

设计了一个记录器库,并用Java语言实现了流程框架。我特别喜欢这个关于录音机的问题。因为根据求职者的业务水平,你可能会想到各种各样的答案。

你可以先在这里试试。完成后,请思考以下问题:

你是否将实现分解成不同的接口?还是你用超类覆盖了一切?你考虑过班里的线程安全吗?你的录音机是单的吗?懒装还是急装?为什么呢?是可插拔的吗?第三方可以用其他实现扩展您的库吗?垃圾收集机制是如何实现的?你创造了太多的物体吗?Log4j2在设计上是一个优秀的记录工具。感兴趣的朋友可以点击这里参考一下它的实现思路。

暂时没有找到更好的低级设计资源。如果你有什么好的想法,请评论。

系统设计

开发者可能更熟悉“设计问题”这个表述。我听说过一些具体的案例,包括:

设计一个网址缩短系统,设计推特的新闻提要系统。在这里,我推荐多恩马丁的《设计入门》。虽然长度很长,但确实是一种优秀的广度优先方法,可以帮助你快速熟悉系统设计原理。

至少,每个人都应该熟悉以下知识:

异步和同步写入;消息队列一致性模式——,特别是最终的一致性数据库类型(SQL和NoSQL)和具有规模伸缩的不同级别的缓存,将问题语句分解成不同的独立服务。在这里,我向大家推荐《深入理解系统设计访谈》。详细讨论了系统设计的具体问题,包括我前面提到的两个例子。虽然是付费资源,但绝对值得。

00-1010并发是初级工程师和高级工程师的一个核心区别。很多朋友可能想象不到并发实际上是很难实现的。

建议您阅读Java并发实践(Java Co

ncurrency in Practice)》一书。在读完之后,大家应该会对以下问题拥有更深刻的理解:

Java 的内存模型发生前关系虚假唤醒调用易失性与同步性线程安全、等待与通知等

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

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

来源图虫创意

设计模式

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

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

Adapter — Arrays.asList()Decorator — Collections.synchronizedCollection(new ArrayList<>())Prototype — Immutables.copyOf()Command — Runnable interfaceStrategy — 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 入手,等有了一定积累之后再阅读这份书单。

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

相关书籍

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

Effective Java — Java 最佳实践入门,阅读难度很低。Clean Code — 助您快速掌握编码中的经验法则。Java Concurrency In Practice — 用于掌握并发机制的基础书籍。Head First Design Patterns — 有趣、有效的面向对象设计思维学习方式。Designing Data Intensive Applications — 我见过的最高级别的技术类书籍,包含极为丰富的系统设计知识——但也非常难啃,建议大家一次读一点慢慢消化。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。