Re: [問題] 物件導向的練習題

看板java作者 (有些事,有時候。。。)時間6年前 (2017/11/19 01:10), 編輯推噓3(300)
留言3則, 3人參與, 6年前最新討論串4/4 (看更多)
※ 引述《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 常用的都要摸一下啊 : -------------------------------------------------------------------------- : 我目前感覺就是這邊會一點 那邊會一點 但是都不熟 也不專精 : 我去書店 圖書館找書來看 要嘛覺得太簡單 要嘛覺得太難 : thinking in JAVA 或是 java how to program都看得頭昏腦脹 你要的是放較多的心力,選個主軸刻個喜歡的 side project 出來 由 side project 會用到的東西,去把它的周邊都學一學。 得滿足自己『讓事情發生』的能力,而不是讓自己得檢核表獲得高分。 所以,基本語法、語言的教學書籍,幫不上你太多的。 : 就算看到自己可以接受的 比方說Head first JAVA : 也不知道自己會不會不小心又看到太細或跟工作無關的地方 : 所以我現在想繼續自學 實在是找不到方向 : 如果是要能提升工作能力 我目前想到的方法是 : 自己重製一個我目前工作正在進行的專案 : 不知道可不可行 希望好心人的指點 感謝 是個好方向,那就開始動工吧。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.139.60 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1511025050.A.0C6.html

11/20 10:09, 6年前 , 1F
推這篇
11/20 10:09, 1F

11/20 22:31, 6年前 , 2F
11/20 22:31, 2F

11/22 17:49, 6年前 , 3F
良心推
11/22 17:49, 3F
文章代碼(AID): #1Q46cQ36 (java)
文章代碼(AID): #1Q46cQ36 (java)