Author: ukmentor

Java 9至12的新功能(第三集)《G1 GC》

《這一回的內容會對於新手比較複雜。儘管很多編程新手都聽過垃圾回收(Garbage Collection或GC)的概念,但通常中級程序員才會比較深入地探索這概念。 雖然GC的背後運作原理是比較複雜,但畢竟它是一個非常重要的概念,它存在是因為在一個程式有很多的Object都是臨時製造的,而很多Object用完了之後就可以被刪除(就好像你硬碟有很多文檔都可以用完之後被刪除),從而騰空RAM記憶體的一些空間。 有很多科技企業都非常注重研究一些方法令一個大型的程式去盡量減少使用RAM,所以我建議新手也可開始學習GC。 (我未來可能會寫帖子講解一下GC的基本概念,但這一回我會跳過GC的基本概念)》 雖然G1 GC已於Java 7推出的時候面世,但到了Java 9才成為JVM預設的GC。 使用G1 GC 想享用G1 GC的話就會在VM options加–XX:+UseG1GC flag G1 GC的架構 O = OldS = SurvivorE = EdenU = Unassigned G1 GC的架構就是它不會像傳統的CMS GC那樣分為3個heaps,而是分為不同的regions,每個region都可以為2MB到32MB的面積不等,目的就是要減短GC進行的時間。 CMS GC需時長的原因正正是因為它要清理垃圾的時候,它要掃整個heap,將垃圾從Old傳送到去Survivor,再從Survivor傳到Eden,但是G1 GC的速度比較快就在於它可以挑選一些細小的regions掃,不必一次掃整個GC。 為什麼擁有很多細小的region可以提升清理垃圾的速度呢? 如果GC想騰空出記憶體的話,它就會挑選一些比較多垃圾的regions去騰空。譬如region A是一個2MB的Eden Space region,它當中有89%都是可丟棄的垃圾,那G1 GC就可以很快地將剩餘11%的live reference傳到鄰近region B的survivor space,而不需像CMS GC那般每次想騰空記憶體的時候都掃整個Eden space(一般的Eden space可以被設為64MB或更大),你每次掃64MB的空間就會花費更長的時間(相比起掃G1 GC的2MB region)。 當G1 GC一個region擁有100%垃圾的時候 但是G1 GC最理想的情況就是當一個region全部都是100%垃圾,G1 GC就可以直接把它垃圾抗直接變為Unassigned,這就會非常省時。當一個region變為Unassigned的時候,那個空間就是被騰空出來,令將來的live references倒進去。 相反,CMS GC就不可以這樣挑選一個擁有100%垃圾的region出來,除非你整個Young space都滿了。但Young space滿了就代表你JVM不夠記憶體去容納更多的live […]

最新消息和分析:英國政府將宣布把外勞薪酬門檻從£30000調低到£25600

《最新消息和分析:英國政府將宣布把外勞薪酬門檻從£30000調低到£25600,意味著更多的留學生,打工度假及移民英國人士可以赴英或留英工作 》 https://www.bbc.co.uk/news/uk-politics-51430811 有趣的是,英國大學生剛畢業的年薪一般是£20000至£30000,倫敦則高一點。 若把下限從£30000調低到£25500,這意味著很多留學生畢業後或許可以留英工作,特別是這幾門專業平均都是£25500左右: • Social Work(剛畢業平均薪酬為£25,111)• Nursing(剛畢業平均薪酬為£25,285)• Geology(剛畢業平均薪酬為£26,679)• Civil Engineering(剛畢業平均薪酬為£26,882)• Building(剛畢業平均薪酬為£25,079)• Veterinary Medicine(剛畢業平均薪酬為£28,277)• Russian & East European Languages(剛畢業平均薪酬為£24,191)• Physics & Astronomy(剛畢業平均薪酬為£26,731)• Philosophy(剛畢業平均薪酬為£ 23,521)• Materials Technology(剛畢業平均薪酬為£23,080) 直到現在,通常是Big4和投行才會批發工作簽證給畢業生,前者就是因為它是從超級大企業,後者就是因為它的畢業薪酬遠高於£30000。 這政策調整可能會改變英國的勞工市場架構,特別是為脫歐之後彌補東歐勞工的短缺。2016脫歐公投後,很多東歐人都離開英國了,但因為很多東歐人都是來英國從事低技術的工種,所以這其實就讓英國本土的低技術勞工的工資漲了。但也有高技術的東歐人如從事程序編碼員都離開英國了,所以企業都嘆難招聘人才,因此英國一般的企業都不想英國硬脫歐(Hard Brexit),現在英國政府不會硬脫歐對他們也是一件好事。 返回正題,我相信很多英國大中小企業都會歡迎政府把薪酬門檻調低,令他們招聘人才的過程容易點。小篇相信NHS是最受惠的企業,畢竟NHS長期已經依賴外來的勞工(包括很多的東歐勞工)來填補英國本土的職位空缺了。 小篇則會用拭目以待的眼光看待英國的其他大企業如Sky TV,BBC會不會因為這政策改變而開放外國留學生去申報他們的graduate scheme(類似培管生計劃)。 再加上英國政府早前公佈的Post-work Study Visa (PSW)讓留學生可以畢業後留英2年找工作,大家是不是覺得在英國畢業後再找工作會輕鬆點呢? 資料來源: https://www.bbc.co.uk/news/uk-politics-51430811 https://www.gov.uk/government/news/uk-announces-2-year-post-study-work-visa-for-international-students 畢業生薪酬列表: https://www.thecompleteuniversityguide.co.uk/careers/what-do-graduates-do-and-earn/starting-salaries-–-do-graduates-earn-more

Java 9至12的新功能(第二集)《Modules》

我這回會說一下Java 9的Modules,它屬於架構性的功能(Architecture-level features): Java 9 Modules是什麽,跟Python package又有什麼關係? Java Modules就是好像Python的packages,其最主要的功能就是export跟import一些其他modules板塊的inter-dependencies,下圖就是一個簡單Java Modules的例子,你會看到有於package “org.codefx.demo.jpms”外面會附上一個”module-info.java” –> 這檔案是於Java 8或之前是沒有的: 而”module-info.java”就是這樣寫的: module org.codefx.demo.jpms_hello_world {    // this module only needs types from the base module ‘java.base’;    // because every Java module needs ‘java.base’, it is not necessary    // to explicitly require it – I do it nonetheless for demo purposes    requires java.base;    // this export makes little […]

Java 9至12的一些新功能(第一集)

《怎麼樣學Programming篇》最近我於公司做了一個短短的簡報(technical presentation)主要講述Java 9至12的新功能,有很多幹Java的同事都覺得蠻好奇的,因為畢竟我們公司很多的系統還停留於Java 8。。。 身為一名Java軟件工程師,我一直需要提升我的技能。你越懂一種編碼語言的新功能就可以在求職市場上凸顯自己的優勢。譬如我最初是於2013年在大學開始學Java的,那時候還是Java 7盛行的年代,跟本沒有Functional Programming的性能。Functional programming的性能是於Java 8開始才有的。 就算Java 8最終於2014年推出了,但是2014至2016年期間很多企業跟本也還沒用Java 8,直到2016開始企業才開始慢慢地升級用Java 8,所以2014至2016年便是『空窗期』 – 面試考官通常不會需要你懂Java 8,只是“nice to have”而已,你若能描述Java 8新功能的一些細節便會於面試大大加分。 同樣地,很多Java工程師也不懂2019年推出Java 12和Java 13的新功能。你能夠掌握到Java 12和13的新功能便能於面試加分。 你越懂一種編碼語言的新功能就可以在求職市場上凸顯自己的優勢。 這次我會講一些新Java語法的功能(Syntax-level features),我於下面並加插了自己的中文演繹(我為公司做的簡報是沒有這些加插的演繹),下集會提及一些新Java比較複雜的架構性能(Architecture-level features)。 Syntax-level features: Enhanced Stream API (Java 9) Java REPL (Java 9) New Factory Methods for Collections (Java 9) Var keyword (Java 10) Switch-case statement (Java 12) Architecture-level features: […]

《暑假實習篇》9項建議讓你得到投資銀行的final round interview終極面試

跟許多倫敦帝國理工學院Imperial College的學生一樣,筆者還唸year 2大二的時候就申報了不同投行的Sales & Trading的summer internship暑假實習計劃。從申報到拿到面試機會的過程 感覺就像玩電子遊戲一樣,要時刻裝備自己過關斬將。 一般來說,你填完了申報工作的表格後便會有線上檢測,過了之後就可能有面試機會。 為了備戰,有些倫敦帝國理工學院學生還會於校內24小時開放的圖書館操練線上檢測的試題(online competency reasoning test)。 儘管筆者經過屢次的面試失敗,筆者也可以學到了面試的技巧,方便應付其他公司的面試。最後,我也拿到了幾家投行Trading的final round interview,當中包括野村證卷。 以下是筆者的9個建議讓你增加成功率拿到投行的final round interview: 有些投行的申報程序比其他的簡單。一般投行的網申程序都需要你填2至3篇200字作文,那些作文問題總會是what was your most difficult situation in life and how you overcame it?或者why do you want to work for bank x but not bank y? show me one time in which you demonstrated leadership skills?但是有少量投行不會問這些問題,你直接交上CV和cover letter便可以了(Cxxxxx Sxxxxx和Mxxxxx […]