動機

就faq

OO

  1. 物件導向的特徵
  • 封裝
  • 多型
  • 繼承
  1. Overload和Override差在
  • Overload是同class同名的method但有不同的signatrue
  • Override child class把同名同signatrue的method蓋掉
  1. equals()與==
  • equals是比值
    • 因為他是method可以被蓋所以可以比值
      • 所以要一起改hashcode
  • ==是比記憶體位置
    • 這是operator不能override只能照設定的來
  • 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));
  1. Private, Public, Protected
  • private: class scope
  • protected: inherence scope
  • public: whatever
  • default (無修飾元): file(package) scope

java

  1. type
  • primitive
    • byte
    • int
    • short
      • short a; a+=1;
        • a = (short) (a+1)
    • char
    • long
    • float
      • 1.1F
    • double
      • 1.1
    • boolean
  • Object (有人叫他引用type)
  1. int與Integer差在
  • 一個是primitive一個是Object
    • 大小,使用方式都不一樣
  1. String與StringBuffer差在
  • String不可改動,每次+都是生新的String
  • StringBuffer可以改,像c的char[]
  1. Exception與Runtime Exception與Error差在
  • Exception會被宣告在method signatrue(throws)
    • 一定要被catch,compiler會檢查
  • Runtime Exception就是一般的例外
    • 丟了會stack trace back
    • 沒人接就壞掉
  • Error是硬體出事了,當他出現時世界就毀滅了
  1. ArrayList,Vector, LinkedList差在
  • LinkedList就是linkedlist,但是是雙向
  • ArrayList就是C++的vector
    • Vector就是有synchronized的ArrayList
      • 但現在都用Concurrent開頭的
  1. HashMap和Hashtable差在
  • HashMap不是thread safe,能放null
  • Hashtable有synchronized
  1. final, finally, finalize差在
  • final 這欄位不可變、不可繼承、不可override
    • final的instant variable沒有default value
  • finally不論有沒有例外,總是執行
    • 就算try裡面有放return也會跑!!
  • finalize被GC會被call的method
    • 現在用cleaner!!
  1. compareTo() vs equals() in String
  • compareTo就是一般比較的函數,ruby的<=>
  • equals只有boolean
  1. interface default & static method
  • default用在不用實做某些method的時候 (變得像abstrac class)
    • 可以延伸到abstract class與interface的差異
      • abstract class不一定要實作所有abstract,interface要
      • abstract class的method可以access attribute,interface只有常數
  • static method就是跟著interface的method,Iface.method()
  1. Anonymous Inner Class
  • 很像clousre,可以直接new interface接要override的method
  • 所以也沒辦法直接extend,implements
public class AnonymousInnerClass {

    public static void main(String[] args) {
        // Ex. Anonymous Inner Class
        new Thread() {
            @Override
            public void run() {
                // code...
                System.out.println("Anonymous Inner Class");
            }
        }.start();
    }
}
  1. Collection與Collections差在
  • Collection是interface,要實作add與remove與toarray
  • Collections是對Collection操作的方法,像C++的algorithm
  1. List、Set、Map 是否繼承自 Collection 介面
  • List與Set是
  • Map不是,是AbstractMap
  1. sleep & wait
  • sleep是thread睡覺,要時間到才會自己跑,不會放棄鎖
  • wait是針對monitor的工作,可以讓自己睡,或是收別人的signal,會放棄鎖
  1. 啟動一個線程是用 run() 還是 start()
  • start之後會invoke run跑需要的code
  1. 當一個線程進入一個物件的一個 Synchronized 方法後,其它線程是否可以進入此物件的其他方法?
  • 要看是不是吃同一個obj
    • 如果是一般method,就沒辦法進去
    • static method會吃class做為鎖,就可以進去
  1. java的記憶體
  • for runtime
    • stack
    • heap
    • method area
      • const pool
  • code
  • static
  1. 1/0 & 1/1.0
  • 1/0: ArithmeticException
  • 1/1.0: Infinite (沒有例外)
  1. constructor是否可被override?
  • 不行,可以overload
  1. jvm怎麼載入class
  • ClassLoader會根據繼承關係把class,讀進來會驗證、allocate mem、link、init static資料、生成物件讓jvm跑
  1. 從來沒有人說過Java的Class名字必須和其檔名相同。但public class的名字必須和檔名相同
// OtherThing.java
class Something {
  private static void main(String[] something_to_do) { 
    System.out.println("Do something ...");
  }
}
  1. Math.round(-1.5)
  • -1
  1. Thread state
  • start
  • ready
  • running
  • blocked
  • destroied
  1. 如何deepcopy
  • Cloneable
  • Serializable
  1. Inversion of Control
  • 原本是Logic去控制資料
  • 有些資料其實是一起的,所以可以根據我們這邊的需求去生
    • 但也可以讓外面給 (Dependency Injection)
      • 透過setter
      • 透過interface (我們只call method)
      • 透過constructor
      • 再跑logic之前讓資料就定位
    • 之後就是有一堆framework,想描述(變成像prolog那樣)給參數這行為就有了這個詞
    • 這到最後可以不管程式實作了!! 它本身就是程式阿

Servlet

  1. cgi與servlet差在
  • cgi是每次req都fork一個process去處理,之後回到parent
  • servlet是會初始化只後一直處理req,等server不要時再回收
  1. AOP
  • 有些與logic無關的code但要與logic放在一起的code(log),Aspect
  • 如果想分開就是要留callback的點,Joinpoint
  1. B+ tree
  • 每一個node代表一個range,下面的ptr指到符合範圍的node

design pattern

把object當成lambda就可以處理很多問題

之後就是用

  • interface
  • 繼承
  • 包成object 去傳需要的邏輯

剩下就visitor是pattern match

design pattern隨便筆記

正規化

讓table好join

  1. 把array轉90度
  2. 讓整個主鍵可以filter出所有欄目 (course ID, student ID去濾可以找出grade與student name,name要被割出去)
  3. 割出去的項目只能用主鍵去濾資料

note

GC

每個obj都是一個node,所以每個都有

  1. indegree
  • 當indegree為0就被回收
  • 如果有loop就不會被回收
  1. edge
  • 從root做traversal,有走到就是ok
  • 會產生記憶體斷片、物件多會跑很久(stop the world)
    • 物件多會跑很久: 區分世代使用不同algo
    • 產生記憶體斷片: 一次只用整條記憶體的一半,要換時就把剩下都copy去另一邊