Algorithm
本周的算法题是按顺序合并两个已排序的链表(https://leetcode.com/problems/merge-two-sorted-lists/)。和归并排序的合并已排序数组的过程类似。
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode left = l1; ListNode right = l2; ListNode head = null; ListNode node = null; while (left != null && right != null) { if (left.val <= right.val) { if (node == null) { node = new ListNode(left.val); head = node; } else { node.next = new ListNode(left.val); node = node.next; } left = left.next; } else { if (node == null) { node = new ListNode(right.val); head = node; } else { node.next = new ListNode(right.val); node = node.next; } right = right.next; } } while (left != null) { if (node == null) { node = new ListNode(left.val); head = node; } else { node.next = new ListNode(left.val); node = node.next; } left = left.next; } while (right != null) { if (node == null) { node = new ListNode(right.val); head = node; } else { node.next = new ListNode(right.val); node = node.next; } right = right.next; } return head; }
Reading
这篇文章名是《Act with Prudence》(https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/en/thing_01/),翻译过来时谨慎行事。文章主要讨论了技术债务这个问题。当在工作遇到必须在“正确的做”和“快速的做”这两种决策中选择时,我们往往倾向于“快速的做”,然后有时间再回来改,这时就埋下了技术债务。技术债务就像贷款,拖的时间越长,利息就越大。对于编程来说,结果可能最终导致代码难以维护。更糟的情况时,由于时间紧,需要在这些技术债务上再添加新的功能,到最后再回过头来偿还技术债务,可以说是灾难性的。这是像我这样的新手不知道,也意识不到的,需要特别注意。有了技术债务,要尽快偿还。
Tip
这周在看Spring cloud Netflix Zuul的源码时,发现Spring Cloud Netflix的内部添加了很多Filter,完成了主要的处理。直接读这些Filter的代码是枯燥的,就想看看真正的请求过来时,它怎么处理。一开始采用的笨办法是把要看的Filter源码复制出来,放在本地的Filter路径中看打印日志,弄了半天,才想起Debug更方便,明白自己很业余,这么好的工具已经忘了。
Share
这周工作中用到了Zuul网关,我研究了下,写了篇总结,https://www.cnblogs.com/minguo/p/10690433.html