1. 程式人生 > >阿里菜鳥網路筆試-(偷瞄過來的)

阿里菜鳥網路筆試-(偷瞄過來的)

今天,我回到宿舍(在北京工作還有宿舍住,幸福感倍增),隨著隊友噓的一聲,發現和我一起住的在進行阿里菜鳥網路的電腦筆試,遠端答題。我偷偷瞄了一下,發現還挺有意思,餘思良久,最後我把程式碼貼出來,供大家參考,並希望大家給我點新的答案,共同進步。
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;  
            }  
        }  
	}
}
雖然在北京所有同行中的工資不太高,但是我很滿足,
沒有網際網路式的加班,隨心做點自己喜歡的事,公司還
提供員工宿舍,最後還聽說,面菜鳥的這位隊友筆試還掛了,基礎沒打好,還想跳槽。。