成为中级开发人员的痛苦越来越大
因此,您在工作中已经有点自在。 部署生命周期不再是魔咒。 代码审查比您的代码短。 而且您已经运送了一些东西。
希望您有动力去分支并了解更多信息。 但是庞大的资源量令人难以置信!
一种务实的方法是坚持做事,这也将帮助您更好地进行面试。
这样,您将有进步的感觉,并有一个专注的目标。
专注于这5个领域 -
1.低层/库设计
2.系统设计
3.并发
4.设计模式
5.一般编码惯例
我列出的资源将是大量Java语言,但是您应该能够找到其他语言的等效语言。 无论如何,大多数设计概念都与语言无关。
低层/库设计
如果您查看过去在Uber,Amazon等人那里对SDE2 / 3进行的采访问题,您会发现至少有一个回合倾向于问这样的低级设计。 我听说过的两个共同点是-
1.设计一个记录器库
2.用Java实现Streams框架
我特别喜欢Logger问题; 您可以根据受访者的熟练程度获得一系列答案。
停一分钟,然后尝试。 完成后,请问自己以下问题-
1.您是否将实现分解为不同的接口? 还是拥有一切的超一流?
2.您是否知道类的线程安全性?Logger是单例吗?
3.懒加载还是渴望加载? 为什么?
4.可插拔吗? 第三方可以使用其他实现扩展您的库吗?
5.垃圾收集怎么样? 您是否创建了太多对象并导致内存不足?
Log4j2在记录自己的设计方面做得非常出色。 完成尝试问题后,快去看看 。
我没有找到其他任何可以用于低设计的好的资源。 如果您发现任何有用的信息,请在下面的Holler评论中进行。
系统设计
这更符合开发人员在有人说“设计问题”时会想到的想法。 这里有两个共同点-
1.设计URL缩短系统
2.设计Twitter的Newsfeed系统
入门的可靠方法是Donne Martin的Design Primer 。 它很长,但是它是使系统设计满意的极好的广度优先方法。
至少,您应该对-
1.异步v / s同步写入; 消息队列
2.一致性模式-尤其是最终的一致性
3.数据库类型(SQL v / s NoSQL)和扩展模式
4.不同级别的缓存
5.将问题陈述分解为不同的独立服务
跟踪系统设计采访是一个很好的后续资源。 它对特定的系统设计问题进行了详细的讨论,例如我上面提到的两个问题。 这是一种有偿资源,但却是一个极好的资源。
[来源: https : //github.com/donnemartin/system-design-primer ]
并发
并发是区分初级工程师和高级工程师的另一个主题。 令人难以置信的是,它很难做到。
应该阅读“实践中的Java并发性” 。 您将对以下内容有更好的了解:
1. Java的内存模型
2.发生之前的关系
3.虚假唤醒电话
4.挥发性v / s已同步
5.线程安全,等待和通知等
如果您使用其他语言编写代码,请找到等效的书籍。 在没有完全掌握概念的情况下调试竞态条件将非常痛苦。
Educative的Java Multithreading and Concurrency是很好的后续资源。 通读概念; 然后凝视几个已解决的面试问题。 这比尝试冷火鸡要容易得多。
设计模式
您不太可能对此感兴趣。 但是,当您研究不同的设计问题时,您会看到它们出现。
阅读它们之后,您将开始在各处看到它们。 一些例子
1.适配器— Arrays.asList()
2.装饰器— Collections.synchronizedCollection(new ArrayList <>())
3.原型-Immutables.copyOf()
4.命令-可运行界面
5.策略-java.util.Comparator#compare()
StackOver在Java的核心库中找到的模式的巨大的名单在这里 。
我尝试阅读具有**色彩的GoF书-“设计模式:可重用的面向对象软件的元素”,但我承认我无法通过它解决问题。
相反,我尝试了Head First Design Patterns 。 它看起来根本不是一本技术性的书,但实际上是一本好书。
不同的怪诞故事坚持不懈,并且在消除相似模式的微妙之处方面做得很好。 我在一个周末里完成了这个工作,并笑了很多本书。
几个月后,我将再次尝试GoF。 其中的讨论可能与经验更相关。
通用编码
书籍,书籍,书籍
“有效的Java” 。 这是习惯Java习惯用法和最佳实践的绝妙方法。 它分为90个独立主题,每个主题长达两页。 因此,您可以阅读与您正在从事的工作有关的部分。
“清洁代码” -我保证的最后一个! -是另一本很好的读物,当您开始查看其他人的代码时非常方便。 它可以帮助您在心跳中找出代码气味。 像“有效的Java”一样,现在只需略过您认为相关的部分即可。
适应您的IDE
很好,这没有通过“使您在面试时变得更好”的测试。 但是,实际上,精通您的IDE使编写helluva变得更加有趣!
我使用IntelliJ,它有一个漂亮的“ Key Promoter X”插件。 每次使用鼠标而不是键盘快捷键时,它都会向您尖叫。 您应该在几周内感到自己像个职业球员(并且非常骚扰)。 如果您使用的是其他IDE,请尝试在那里找到等效的IDE。 或使用IntelliJ,它很棒。
42 IntelliJ创意提示和技巧是有关YouTube的会议演讲。 熟悉其中最常用的电源功能是一种有趣的方式。
这是一个很大的清单-并且有书! 不要急于完成事情,可以考虑通过其中的一些步骤来每天改善一点。 祝好运!
哦,顺便说一句,我假设大多数读者都有0–4年的经验。 如果您尚未开始工作,请继续使用LeetCoding。 稍后再说。
在您使用了现实世界中的几个系统之前,设计概念往往不会陷入。
附录
链接
图书
我喜欢在每个基础区域中挑选一本好书,并确保每本书与其余书正交。
有效的Java -Java最佳实践入门。 非常容易阅读。
干净的代码 -良好的编码经验法则
Java Concurrency in Practice —掌握并发性的基础书
头先设计模式 —有趣,有效的面向对象设计思维方式
设计数据密集型应用程序 -我见过的最高评分的技术书。 非常适合系统设计,但很有用。 最好一次阅读一点。
From: https://hackernoon.com/growing-pains-becoming-an-intermediate-developer-y03ee38yw