作者:
qrtt1 (有些事,有時候。。。)
2017-11-19 01:10:47※ 引述《lueichun (no anonymous)》之銘言:
: ※ 引述《qrtt1 (有些事,有時候。。。)》之銘言:
: : 單純概念練題的話,
: : 用候捷早年放在網路上的 thinking in java 2/e 的 pdf
: : 看完該章本文然後做它的習慣就行了。
: : 章節集中在 6, 7, 8 章。
: : 不過,不趕時間的話,還是有 4, 5 開始做吧。
: : 目錄:
: : https://i.imgur.com/xf50Cv8.png
: : https://i.imgur.com/QwY0EYw.png
: 我也想問類似的問題 結果被搶先了 所以我就借這標題問一下
: 就是我目前從事java開發的工作已經兩年了
: 基本的語法大概都有印象 但是要具體描述自己到底哪裡會 不會還是不太行
: 剛好我找到TonyQ大以前的文 提到做個檢查表來檢視:
: 知道J2EE、J2SE、J2ME這三個領域的對象的差異
: 知道if-else、switch是什麼
: if-else常用 但switch幾乎不會用到 不熟
: 知道for、while是什麼
: 都會用
其實大部分的問題在第 1 年後,應該不再是問題。
它們會被內化為反射動作,或是解決問題的直覺。
像基本語法的問題就不太該再問了,並且要隨的新時代習得 lambda 語法
還有新的 api 例如,java 8 新 date/time api
: 知道 API Document的使用方法
: 需要的時候會查
: 知道String有哪些函式、怎麼切割字串跟組合字串。
: 切割用split 組合用concat
: 知道main的用途與main的參數用法
: main是jvm首先執行的方法 main的參數沒用過
api document 要查其實不是那麼方便,
因為隨著公司內專案建立的年代不同 library 凍結的版本不同
上網隨意要 google 到對的版本的 api 不那麼容易
一個正常稍有規模的專案不會只有用 standard library 的部分
像是常見的 spring framework 或 hibernate 就有許多版本
配合流行很久的 ant ivy 或 maven 或 gradle 作相依管理工具
應該有機會直接透過 IDE 追入函式看到它的 source code 的,
當然 api doc 的 annoation 也在裡面,IDE 會自然地帶出 api document
不過一旦你對基本語法沒有疑問,也漸漸能掌握 OOP 概念
與 Design Pattern 等等的想法,
你可能會覺得看 source code 是一件更加明確的事,
並且開始覺得看別人的 source code 其實並不可怕
比起對於『一時忘了改』就會過期的文件來說,source code 才是真理!
: 知道static method怎麼設計
: 不會 只有用過math.random() integer.parseInt()這類方法
: 知道class跟instance method怎麼設計
: 工作上還沒設計過 只有自己練習coding設計簡單的
當一個東西你需要隨著 class level 初始化時也需要用的 static 啊。
像 Jdbc Driver 就是典型的例子
: 知道Classpath是什麼,能引用第三方的套件。(通常是jar檔)
: classpath就是java檔被編譯後形成的class檔 所在的路徑
: 在eclipse新增dynamic web project時 會詢問你class檔要放哪
: 套件的話 ojdbc spring hibernate struts 1 都用過
: 但都只會基本功能
『現代化』一點的開發方式不會再自己加 jar 檔了,
除非是有特別的需求,或維護 legacy project 才會這麼做的。
這反而是該改成用相依性管理工具。
: 知道什麼是IDE,並瞭解IDE提供開發流程中哪些協助,扮演什麼角色。
: 這個不太會講
比起會講這個,更希望你專注在優化你運用『開發工具』開發的流程
有些人明明有了 IDE 但卻沒用到 IDE 的優點,
僅作為一種華麗的編輯器程式使用著它,這樣實在太浪費了。
熱鍵記熟了,有沒有調到最適合自己的狀態?
共通的 coding style 的 formatter / editor config (line width) /
code template / import orders / favorite static import 都設好了嗎?
輔助你提昇昇產力的 plugin 或元件裝了嗎?
: 2.資料結構基礎
: 知道什麼是Array
: 只知道中文叫陣列 長度是固定的...
: 知道什麼是List (ArrayList、LinkedList)
除了複雜度,重點在結構的特性,這影響到你的應用場景。
如果你總是需要在 index 0 做 insert/delete
或在中間 insert/delete,與你只需要簡單 append 的情況
會有不同的選擇。
: 只會用get set size 知道arrayList預設長度是10
: arrayList會隨著元素數量動態增減長度 其他的不會解釋...
: 知道什麼是Map (HashMap、TreeMap的不同點?)
: 一樣只會用基本的方法
: 知道如何瀏覽Map及其他Collection的瀏覽法(iterator())
: 只會forEach 另外知道forEach是語法蜜糖
: 編譯器會把forEach轉成iterator()的格式
在這新的時代,你更該關注 stream api 啊 :P
: 3.演算法基礎
: 知道什麼是演算法
: 講不出來Orz
:
: 有時間複雜度的概念
: 有空間複雜度的概念
: 知道什麼叫遞迴 (實務上偶爾會有機會用到)
: 太久沒用都忘光光QQ
看得我都要『迴』『光』返照了 orz..
:
: 對基本的演算法有一定瞭解
: 基本排序法(buble、selection、insertion、quick、merge)
: 動態規劃(Dynamic Programming)
: 以上都忘光光...
演算法的種類不少,若能對複雜度有概念是挺好的。
實際哪類都可能應用到,若不是為了要面試,而是要實作應用的東西。
那就不用太鑽基礎元件設計的演算法,
特別是別人都已經整包寫好的排序什麼的。
: 4.Java進階應用
: 能用java.text.* 做日期的格式化、數字的格式化
: 能用java.io.* 做文字檔的讀檔、存檔 (java.util.Scanner也行)
: 能用 java.lang.Math 做一些數學運算
: 這些都是要用到時才會去GOOGLE
由 console 輸入文字這東西太少用了,
直接手寫讀檔其實也沒想像中的多,即使有,也用用.
Apache Commons IO 系列,並記得現代的寫法可以
try-resource
: 知道什麼是Jar檔,並瞭解class是能夠被反編譯(de-compile)的。
: 一種java檔的壓縮檔 若要在專案引入框架或其他工具
: 常常需要引入jar檔 class是可以被反編譯 但我幾乎沒做過o.o
當然是裝 IDE plugin 做啊。
: 知道什麼是 JDBC ,能對資料庫操作有基本瞭解。
: 一種讓程式跟資料庫得以連接起來的介面
: 各家資料庫廠商實作了這個介面 並打包成jar檔 只要再專案引入jar檔
: 即可將專案連接到資料庫
JDBC 的部分
1. 它的 index 是由 1 起算的,這無敵重要。
2. 記得要有正確使用 connection pool
validation string / validation interval / ...
只有單一 connection 是難以逼出效能的,
並且斷線重連的處理也不好做。
3. 使用 transaction 前,請確定 db 有支援,不然就沒戲了
4. 如果是新專案,請開始以 UTC+0 作為資料庫時區,
之後要上雲比較方便
(舊專案就繼續 work around 吧)
: 能熟悉使用IDE,減少多餘開發時間在製造錯誤跟重複的行為上。
: 有時候同事會說我對工具不熟悉 甚至全選 複製的動作可以用滑鼠
: 點兩下全選再複製 而非用滑鼠拖曳再複製都是同事教的
: 能瞭解在Object這個基底類別中,toString、equals、hashcode
: 這三個method扮演什麼樣的角色。
: toString用來轉型成字串 equals用來比較物件的值 其他的不會= =
要知道這些東西都能用 IDE 產生,
或透過 Annotation Processing Tool 產生。
: 1.Java高階應用
:
: 會利用 java.net.* 處理網路上的溝通
: (ex. Socket、ServerSocket,也可以用URL抓抓網頁之類)
: 會利用 javax.swing.* 、 java.awt.* (或者SWT)做GUI的處理
: 沒做過
寫 Web 就寫 Spring Boot
實作網路底層就靠 Netty,如果要實作 RPC 那就要考慮學一下 gRPC 了
GUI .... 完全忽略吧,除非那是你的真愛。
: 瞭解什麼是介面,並能利用介面撰寫程式。
: 沒有設計過介面 只有拿既有的程式來改
: 瞭解什麼是 Design Pattern,並且能舉出java api中
: 使用Pattern的實例。
interface 只是個語法,它具體意義是『事先約定』好的事項
若都實作好,那依約定可以有可預期的行為。
像是 JDBC 在 standard libary 內,其實只有 interface 而已。
不同的 jdbc driver 有著不同的實現。
: 我只知道java io用到裝飾者模式
: 能以J2SE基礎切入J2EE的 JSP 網頁應用程式。(有興趣可再深入J2EE
: )
JSP ...(不想談他)
現在多為只出 restful api,前端另外搞不管是 reactjs 或 angularjs
直接寫 jsp 頁面轉來轉去的漸漸減少了,前後端分離,前端也能獨立做測試
: JSP會基本的語法 知道如何將後端傳過來的值寫在JSP檔上
至少要會搞定 servlet container 的 encoding
還有知道 get, post 的不同啊
: 能以J2SE基礎編寫J2ME的應用程式(MIDP)
: 不會
現在是 Android 的天下了,不用提這個歷史遺跡啊@@
: 有能力依需求編寫一個以上的Thread,並考慮到Thread-safe的問題。
: 工作上沒遇過多執行緒的狀況 都忘了QQ
你有在寫 web 一定有多執行緒,只是你是參與其中,並非製造新的 thread。
若是直接實作 servlet 那麼就有機會遭遇 thread safe 的問題。
或接續先前的 date format,要知道 SimpleDateFormat 這類東西
並不是 thread safe 的,所以你若要寫個公用函式來給 servlet/jsp
呼叫,記得每次都要 new 一個新的,才不會有 race condition 發生
: 2.工具部份
: 能瞭解 Framework 是什麼,並瞭解目前能見到的Framework的目標。
: 只有碰過Spring hibernate struts基本用法 不敢說會
: 也不敢說瞭解框架是什麼
你得了現一下新的趨勢,這檢查表舊了,你得找替代的問題放上去。
: 能瞭解 Ant 這個建立開發的自動化流程的工具
: 沒用過
ant, maven, gradle 常用的都要摸一下啊
: