左耳听风-ARTS-第8周(2019/05/26-2019/06/01)
Algorithm
本周的算法题简单(https://leetcode.com/problems/length-of-last-word/)。求最后一个有效单词的长度,我做的是按从头都尾遍历,而更好的办法的是从尾到头遍历。
public int lengthOfLastWord(String s) { char[] chars = s.toCharArray(); int i = chars.length - 1; int len = 0; while (i >= 0 && chars[i] == ' ') { i--; } while (i >= 0 && chars[i] != ' ') { i--; len++; } return len; }
Reading
这周读的是The Boy Scout Rule(https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/en/thing_08/)。
童子军中有一条规则:总是让营地在你走的时候比你来的时候更干净。这一条放在软件开发中同样适用,总是让模块在你交出去时比你接手时更干净。如果我们每个人都让模块提升一点,那我们会看到这个软件系统不断恶化的结束,我们的系统会持续的变好,并不断的进化,我们的团队像整体一样关注这个整个系统,而不是每个人只关心自己的一小块。
首先要保证自己在模块中新加的代码干净,然后稍稍优化一点你接手以前的代码,你可能只是优化了一个变量名,或者把一个很长的函数变为多个短的函数,或者是添加一个接口分离定义和具体实现。就这么简单,这样对大家都好
Tip
Java中的final修饰符。
final可以修饰类、字段(全局字段、局部字段、形参)、方法:
- final修饰类表示该类不能继承,该类的所有方法为final方法。
- final修饰方法表示该方法不能被子类覆写。
- final修饰的全局字段必须确保该字段在每个构造器执行后被赋值,且不能再修改。
- final修饰局部字段和形参表示该字段必须被赋值,且不能再修改。
将类和方法声明为final主要目的是确保他们不会在子类中改变语义。
如果一个方法没有被覆盖并且很短,编译器就能对它进行优化处理,这个过程被成为内联(inlining)。如内联会将调用e.getName()替换成访问e.name。但虚拟机中的即时编译器比传统编译器的处理能力强很多,如果方法很简短、被频繁调用且没有真正被覆盖,那么即时编译器会将这个方法进行内联处理。
Share
Bean的高级装配(https://www.cnblogs.com/minguo/p/10964263.html)