提交人绍拉布·毛里亚,
三杯核可乐
计划三蒂娜
我们在工作中逐渐找到了状态,部署生命周期不再是一个神秘的问题,代码评审的速度终于超越了代码编写的速度。最重要的是,我们开始发布真正有效的结果。
但是,我们能放松一下吗?当然不是!探索知识永远是我们的目标。
在克服惰性的过程中,一个实用的方法是不断学习能够帮助我们在面试中表现得更好的知识。
这样,我们就会有一个明显的进步和一个值得一直坚持的目标。
请注意以下五个方面-
低级/库设计
系统设计
同时爆发
设计模式
通用编码约定
我在本文中给出的资源主要与Java相关,但您肯定可以找到其他语言的类似材料。无论如何,这里提到的大多数设计概念都与语言无关。
低级/库设计
如果你回看优步、亚马逊等公司在软件开发工程师第2/3次面试中提出的问题,你会发现其中至少有一个会主要涉及这样的低层次设计方向。我听过的两个常见场景是:
设计记录器库
用Java语言实现流程框架
我特别喜欢这个关于录音机的问题;因为根据求职者的专业水平,你可能会想到各种各样的答案。
这里,你可以先试试。完成后,请思考以下问题:
你是否将实现分解成不同的接口?还是用超类覆盖一切?
你考虑类中的线程安全吗?
你的录音机是单的吗?懒装还是急装?为什么呢?
是可插拔的吗?第三方可以用其他实现扩展您的库吗?
垃圾收集机制是如何实现的?你创造了太多的物体吗?
Log4j2在设计上是一个优秀的记录工具。感兴趣的朋友可以点击这里参考一下它的实现思路。暂时没有找到更好的低级设计资源。如果你有什么好的想法,请随时评论。
系统设计
开发者可能更熟悉“设计问题”这个表述。我听到的具体案例包括:
设计一个网址缩短系统
设计推特的新闻订阅系统
这里我推荐多恩·马丁的《设计导论》。虽然篇幅很长,但确实是一种优秀的广度优先方法,可以帮助大家快速熟悉系统设计原理。
至少,每个人都应该熟悉以下知识:
异步和同步写入;信息排队
一致性模型——尤其是最终一致性
数据库类型和规模扩展
不同级别的缓存
将问题陈述分解成不同的独立服务
在这里,我推荐“系统设计面试深度理解”。它详细讨论了系统设计的具体问题,包括我前面提到的两个例子。虽然是付费资源,但绝对值得。
发送
并发是初级工程师和高级工程师的一个核心区别。很多朋友可能想象不到并发实际上是很难实现的。
我推荐你读《Java并发实践》这本书。看完之后,大家应该对以下几个问题有了更深入的了解:
Java的内存模型
发生前关系
假叫醒电话
波动与同步
线程安全、等待和通知等
如果使用其他编程语言,请参考相应的书籍。总之,如果我们不能彻底掌握相关概念,我们将很难调试竞争条件。
Educative的Java多线程和并发也是一个很好的资源。建议你先阅读其中的概念,然后用常见的面试问题来理解。
设计模式
虽然这些问题通常不会在采访中被问到,但是人们在研究不同的设计用例时或多或少会接触到这些问题。
了解了相关概念后,我们会意识到这些模式无处不在。举几个例子:
适配器—数组。列表
装饰器—集合。同步集合)
原型—不变的。副本
命令—可运行的界面
策略— java.util.Comparator#compare
StackOverflow列出了一长串Java核心库模式,我们建议您了解这些模式。
我也试着读了经典的《设计模式:可重用面向对象软件中的元素》,但我承认我真的啃不下它。
但我也尝试过《用简单的文字谈设计模式》,看起来不像是技术读物,但却给我带来了很大的帮助。
本书故事选得好,相似模式之间的细微差别梳理得很清楚。我花了一个周末读它。真的是干货很多,很有意思。过了一段时间,我想回去好好研究一下可重用面向对象软件中的元素。这本书也是极其有价值的,但是很硬核,需要更高的开发经验。
通用编码约定
读,读,再读
高效的Java。这是每个人熟悉Java表达式和最佳实践的理想方式。它分为90个独立的主题,每个主题都有几页长。因此,我们可以选择与当前工作内容最相关的部分。
干净的代码——在这本书的帮助下,人们可以更快、更方便地阅读和复习别人写的代码。类似于高效Java,我也建议大家有选择地阅读本书的相应章节。
掌握你的IDE。
这和面试无关。但是说实话,掌握IDE可以大大提高编程的效率和兴趣!
我个人使用IntelliJ,还安装了一个“Key Promoter X”插件。每当我用快捷键可以实现的鼠标操作,它都会发出提醒。短短几个星期,大家就能掌握快捷键操作,让自己看起来很专业~当然,这些都是被提示做出来的。如果您正在使用其他IDE,也可以尝试类似的小工具。但是我还是强烈推荐IntelliJ,真的很棒。
“42 IntelliJ技巧与技巧”是YouTube上的一个讲座,你可以通过这种有趣的方式来熟悉IntelliJ提供的各种常用功能。
这份清单挺长的,不过不用担心,阅读的意义不是为了完成它,而是为了提升你的日常工作体验。来啊!
顺便说一下,这个列表主要是给有0到4年开发经验的人看的。如果你还没有开始工作,请从Leet Code开始,积累一定量后再看这个列表。
一般来说,人们只有在现实场景中接触到实际的系统,才会在设计的概念层面遇到问题。
相关书籍
接下来,我推荐一本基于各种基本方向的好书,并尽可能地把它们组织成一个学习系统。
有效的Java——Java最佳实践的Java介绍,非常难读。
干净的代码——帮助您快速掌握编码的经验法则。
《实践中的Java并发》——一本掌握并发机制的基础书籍。
head First Design Patterns——一种有趣而有效的面向对象设计思维的学习方法。
设计数据密集型应用程序——我见过的最高水平的技术书籍,其中包含了极其丰富的系统设计知识——也非常难啃,所以我建议你一次读一点,慢慢消化。
https://medium . com/javare visited/growing-阵痛-成为中间开发者-6108a00211d5
单击一个可以少看到一个bug