尝试并了解不同的技术堆栈:如果您想成为一名更好的架构师,我认为这是最重要的活动。试用(新)技术堆栈,并了解它们的兴衰。不同或新技术具有不同的设计方面和模式。您很可能从翻阅抽象幻灯片中不会学到任何东西,而是自己尝试一下,并感到痛苦或缓解。架构师不仅应该具有广泛的知识,而且在某些领域还应具有深厚的知识。掌握所有技术堆栈并不重要,但要对您所在地区的最重要知识有深入的了解。另外,请尝试不使用您所处领域的技术,例如,如果您深入 SAP R / 3,则还应该尝试 JavaScript,反之亦然。尽管如此,双方仍会对 SAP S / 4 Hana 的最新进展感到惊讶。例如,您可以自己尝试,然后免费在 openSAP 上课程。好奇并尝试新事物。还可以尝试一些您几年前不喜欢的东西。
重构不是邪恶的:如果找不到更好的主意,那么从更复杂的解决方案开始是完全可以的。如果解决方案遇到麻烦,您可以稍后重新考虑解决方案并应用您的学习。重构不是邪恶的。但是在开始重构之前,请记住要进行以下工作:(1)进行足够的自动化测试,以确保系统的正确功能;(2)从利益相关者获取支持。要了解有关重构的更多信息,建议阅读“Refactoring. Improving the Design of Existing Code”,作者是 Martin Fowler。
了解基本的项目管理原则:作为架构师或首席开发人员,经常会要求您提供估计以实现您的想法:多长时间,花费多少,多少人,哪些技能等?当然,如果您打算引入新的工具或框架,则需要为此类“管理”问题提供答案。最初,您应该能够进行粗略的估算,例如几天,几个月或几年。并且不要忘记,这不仅涉及实现,还有更多活动需要考虑,例如需求工程,测试和修复错误。因此,您应该了解所使用的软件开发过程的活动。您可以应用以获得更好的估计的一件事是使用过去的数据并从中得出您的预测。如果您没有过去的数据,也可以尝试使用 Barry W. Boehm 的 COCOMO 之类的方法。如果您部署在敏捷项目中,请学习如何进行估算和正确计划:Mike Cohn 撰写的《敏捷估算和规划》一书对此领域提供了扎实的概述。
寻找盟友:很难独自建立或执行您的想法,甚至是不可能的。尝试找到可以支持和说服他人的盟友。使用您的网络。如果还没有,请立即开始构建。您可以从与(思想开放的)同事讨论您的想法开始。如果他们喜欢它,或者至少喜欢它的一部分,那么如果别人提出来,他们很可能会支持您的想法(“ X 的想法很有趣。”)。如果他们不喜欢,问为什么:也许您错过了什么?还是您的故事不够令人信服?下一步是找到具有决定权的盟友。要求开放的讨论。如果您担心讨论,请记住,有时您需要离开舒适区。
public FileRecords slice(int position, int size)throws IOException { //省略校验代码 intend=this.start + position + size; // handle integer overflow or if end is beyond the end of the file if (end < 0 || end >= start + sizeInBytes()) end = start + sizeInBytes(); returnnewFileRecords(file, channel, this.start + position, end, true); }
private Record nextFetchedRecord() { while (true) { if (records == null || !records.hasNext()) { //略 } else { Recordrecord= records.next(); // skip any records out of range if (record.offset() >= nextFetchOffset) { // we only do validation when the message should not be skipped. maybeEnsureValid(record);
// control records are not returned to the user if (!currentBatch.isControlBatch()) { return record; } else { // Increment the next fetch offset when we skip a control batch. nextFetchOffset = record.offset() + 1; } } } } }
The committed offset should always be the offset of the next message that your application will read. Thus, when calling commitSync(offsets) you should add one to the offset of the last message processed
final Map<TopicPartition, List<ConsumerRecord<K, V>>> records = pollForFetches(timer); | V final Map<TopicPartition, List<ConsumerRecord<K, V>>> records = fetcher.fetchedRecords(); | V List<ConsumerRecord<K, V>> records = fetchRecords(nextInLineRecords, recordsRemaining); | V longnextOffset= partitionRecords.nextFetchOffset; log.trace("Returning fetched records at offset {} for assigned partition {} and update " + "position to {}", position, partitionRecords.partition, nextOffset); //这里就是所谓的offset+1,也就是开头问题的答案! subscriptions.position(partitionRecords.partition, nextOffset);