阿里菜鳥網路筆試-(偷瞄過來的)
阿新 • • 發佈:2019-01-28
今天,我回到宿舍(在北京工作還有宿舍住,幸福感倍增),隨著隊友噓的一聲,發現和我一起住的在進行阿里菜鳥網路的電腦筆試,遠端答題。我偷偷瞄了一下,發現還挺有意思,餘思良久,最後我把程式碼貼出來,供大家參考,並希望大家給我點新的答案,共同進步。
package com.test; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicLong; /** * @author http://www.github.com/ouzhrm * 問題:後臺邏輯部分,如何快速獲取並處理100w條對映列表相關的資料? * */ public class Demo2 { private static AtomicLong at = new AtomicLong(1); private static ConcurrentHashMap<Long, String> chm = new ConcurrentHashMap<>(); private static int THREAD_COUNT = Runtime.getRuntime().availableProcessors()*2; public static void main(String[] args) throws Exception { for(long i = 1;i <=1000000;i++) { chm.put(i, "元素"+i); } System.out.println("----100w條資料載入完畢,開始執行-----"); ExecutorService tenThread = Executors.newFixedThreadPool(THREAD_COUNT); long start = System.currentTimeMillis(); for(long i = 1;i <=1000000;i++) { tenThread.submit(new Runnable() { @Override public void run() { //System.out.println(Thread.currentThread().getName()+"獲取的元素為:"+chm.get(at.getAndIncrement())); //列印也十分耗效能 chm.get(at.getAndIncrement()); } }); } tenThread.shutdown(); while (true) { if (tenThread.isTerminated()) { System.out.println("結束了!"); long end = System.currentTimeMillis(); System.out.println("獲取列表所有元素執行時間:"+(end-start)+"ms"); break; } } } }
雖然在北京所有同行中的工資不太高,但是我很滿足,
沒有網際網路式的加班,隨心做點自己喜歡的事,公司還
提供員工宿舍,最後還聽說,面菜鳥的這位隊友筆試還掛了,基礎沒打好,還想跳槽。。