如何成為一名合格的程序員
重新對程序員有了理解, ?合格的程序員不僅要求有專業的代碼能力, ?還需要1.良好的溝通能力 ?2.高的做事效率 ? 3.每天盡量多做一些事情,努力多成長一點.
1.學習了Logback 和 SLF4J 的使用.?怎么選擇合適的日志級別?
ERROT: ?說明這個地方有錯誤,必須馬上處理。
WARN:可以容忍這些信息,但應該盡快檢查及修復。
INFO: 可以說明應用程序的運行過程。
DEBUG ?:開發多用debug , ?會繼續執行后面的流程。
TRACE: ?只是開發階段使用。這些日志記錄只是臨時性的,最終應該關掉。DEBUG和TRACE的區別很難區分,不過如果加了一行日志,在開發測試完后又刪了它的話,這條日志就應該是TRACE級別的。
2.1 輸入文件應該放在resource文件中 ? ?獲取文件路徑采用 this.getClass().getResource("/").getPath()
2.2?依賴的版本應該在 標簽中管理
<properties>
<target.version>2.5.6target.version>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>your?groupIdgroupId>
<artifactId>your?artifactIdartifactId>
<version>$
{target.version}
version>
dependency>
dependencies>
dependencyManagement>
2.3 封裝了FileUtil類. ? ? 方法盡量只做一件事情, 少用static 最好有返回值. ?切記 !
閱讀Guava源碼:Optional & Present & Absent
簡介:Guava庫設計了Optional來解決null的問題。而Present Absent 均為final class 繼承自Optional .
若T類型數據可以為null,Optional是用來以非空值替代T數據類型的一種方法。
通過下面源碼發現,Optional初始化時即new一個Present來將傳遞的引用類型返回!使用了Preconditions的checkNotNull來保證參數不為 null!final class Present extends Optional {
private final T reference;
Present(T reference)
{ this.reference = reference; }
public static T checkNotNull(T reference, @Nullable Object errorMessage) {
if (reference == null)
{ throw new NullPointerException(String.valueOf(errorMessage)); }
return reference;
}
final class Absent extends Optional {
static final Absent INSTANCE = new Absent();
static Optional withType()
{ return (Optional) INSTANCE; }
那么當我確實需要使用null的時候應該怎么使用optional ?
方案:可以調用Optional.absent()方法
從以下源碼中可以看出Absent創建時并沒有像Present通過Preconditions 檢查引用是否為空!
public static Optional absent() {
return Absent.withType();
}
static final Absent INSTANCE = new Absent();
@SuppressWarnings("unchecked") // implementation is "fully variant"
static Optional withType() {
return (Optional) INSTANCE;
}通過兩個final class來實現Optional 在兩種不同情景下的功能,而且編譯器在遇到調用final方法的時候會轉入內嵌機制,執行效率較高.
筆記:
1.常用靜態方法:
Optional.of(T):獲得一個Optional對象,其內部包含了一個非null的T數據類型實例,若T=null,則立刻報錯。
Optional.absent():獲得一個Optional對象,其內部包含了空值
Optional.fromNullable(T):將一個T的實例轉換為Optional對象,T的實例可以不為空,也可以為空[Optional.fromNullable(null),和Optional.absent()等價。
2.實例方法:
1. boolean isPresent():如果Optional包含的T實例不為null,則返回true;若T實例為null,返回false
2. T get():返回Optional包含的T實例,該T實例必須不為空;否則,對包含null的Optional實例調用get()會拋出一個IllegalStateException異常
3. T or(T):若Optional實例中包含了傳入的T的相同實例,返回Optional包含的該T實例,否則返回輸入的T實例作為默認值
4. T orNull():返回Optional實例中包含的非空T實例,如果Optional中包含的是空值,返回null,逆操作是fromNullable()
5. Set asSet():返回一個不可修改的Set,該Set中包含Optional實例中包含的所有非空存在的T實例,且在該Set中,每個T實例都是單態,如果Optional中沒有非空存在的T實例,返回的將是一個空的不可修改的Set。