2016京東Android研發校招筆試題


一、選擇題匯總,具體的記不住啦。。

1.計網:ip的網絡前綴、SNMP(報文組成):http://blog.csdn.net/shanzhizi/article/details/11606767 參考這個博客

             TCP協議

2.數據庫連接查詢、全文索引:select * from product where match(detail) fulltext('jyc')

3.PAD圖、N-S圖

4.hash映射、

5.CSS中透明的部分

6.DMA、中斷

7.線性窺孔

8.編譯原理的表達式

9.android:接受廣播需要權限

  BroadcastReceiver能綁定service??

  前台進程包括PnReceive函數(BroadcastReceiver)么??

10.數據結構的前序中序遍歷

11.計數排序算法

12.基數排序、shell排序、桶排序是基於比較的么??

上邊的題還是很簡單的,很基礎。。。。

-----------------------------------------------------

二、大題:

1.多個Activity的退出:

   可以參考這個博客:http://www.cnblogs.com/jycboy/p/5891965.html#autoid-1-0-0

2.ForceClose和ANR

   http://www.cnblogs.com/jycboy/p/5754396.html 和 http://www.cnblogs.com/jycboy/p/5891992.html

3.單例模式(這里有好幾種實現,注意多線程的情況

   http://www.cnblogs.com/jycboy/p/5892185.html  參考這個

4.點9圖特點(感覺這個題考的很偏,關鍵是跟編程沒有關系。。。。)

5.多線程的幾種實現

  1. 使用Thread和Runnable實現多線程。
  2. 使用線程池,例如:ThreadPoolExecutor。
  3. 線程間的交互:Handler、Lock鎖機制、阻塞隊列等。

三、編程題

1.題目描述:

戰爭游戲的至關重要環節就要到來了,這次的結果將決定王國的生死存亡,小B負責首都的防衛工作。首都處於一個四面環山的盆地中,周圍的n個小山構成一個環,作為預警措施,
小B計划在每個小山上設置一個觀察哨,日夜不停的瞭望周圍發生的情況。
一旦發生外敵入侵事件,山頂上的崗哨將點燃烽煙。若兩個崗哨所在的山峰之間沒有更高的山峰遮擋且兩者之間有相連通路,則崗哨可以觀察到另一個山峰上的烽煙是否點燃。
由於小山處於環上,任意兩個小山之間存在兩個不同的連接通路。滿足上述不遮擋的條件下,一座山峰上崗哨點燃的烽煙至少可以通過一條通路被另一端觀察到。
對於任意相鄰的崗哨,一端的崗哨一定可以發現一端點燃的烽煙。小B設計的這種保衛方案的一個重要特性是能夠觀測到對方烽煙的崗哨對的數量,她希望你能夠幫她解決這個問題。
輸入
輸入中有多組測試數據。每組測試數據的第一行為一個整數n(3<=n <=10^6),為首都周圍的小山數量,第二行為n個整數,依次表示小山的高度h,(1<=h<=10^9)。
輸出
對每組測試數據,在單獨的一行中輸出能相互觀察到的崗哨的對數。

樣例輸入
5
1 2 4 5 3
樣例輸出
7

代碼:

package sample2;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner in = new Scanner(System.in);
		int n; int[] a= null;
		while(in.hasNextLine()){
			n = in.nextInt(); in.nextLine();
			a = new int[n];
			for(int i=0;i < n;i++){
			a[i] = in.nextInt(); 	
			}
			search(a);
		} 
	}
	static void search(int[] a){
		int n = a.length;
		int i,sum=0,max;
		HashMap<Integer,Integer> map = new HashMap<>();
		for(i =0;i<n;i++){
		
			if(a[i]>=a[(i-1+n)%n]){ //沒有擋住
				max = a[(i-1+n)%n];
				for(int j=(i-2+n)%n;j!=(i+1+n)%n ; j = (j-1+n)%n){
					 if(a[j] >= max){
					    max = a[j];
					    if(map.containsKey(i)){
							int num = map.get(i);
							num++;
							map.put(i, num);
						}else{
							map.put(i, 1);
						}
					    if(max>a[i]) break;
					 }   
				}
				
			}
			if(a[i]>=a[(i+1+n)%n]){
				max = a[(i+1+n)%n];
				for(int j = (i+2+n)%n;j!=(i-1+n)%n;j = (j+1+n)%n){
					if(a[j]>=max){
						//if(j == 1&& i == 4)System.out.print("..j=1..");
						
						max = a[j];
						if(map.containsKey(i)){
							int num = map.get(i);
							num++;
							map.put(i, num);
						}else{
							map.put(i, 1);
						}
						
						if(max>a[i]) break;
					}
				}
			}
			
		}
		for(Iterator iter = map.keySet().iterator();iter.hasNext();){
			int ii = (int) iter.next();
			
			sum +=map.get(ii);
			//System.out.println("key:"+ii+"  val:"+map.get(ii));
		}
		sum /=2;
		sum += n;
	   System.out.println(sum);
		
	}
/**
 * 5
1 2 4 5 3
key:1 value:4   key:2 value:4   key:4 value:2   8
還有個問題沒有處理!
 */
}

  輸出結果:

  5
  1 2 4 5 3
  7

2.題的大致意思是:

*輸入一個整數n,
* 計算從2到n-1進制的所有位數的和
* 例如:
* 輸入的5
* 對應的進制:
* 2進制:101
* 3進制:12
* 4進制:11
* 輸出的和:1+0+1+1+2+1+1= 7
* 所以輸入:5 輸出:7

代碼:

package sample2;

import java.util.Scanner;
/**
 * @author 超超boy
 *
 */
public class Main2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n,sum;
		while(sc.hasNextLine()){
			n = sc.nextInt();//A
			sc.nextLine();
			sum = jisuan(n);
			 int m = n-1-2+1;
			 System.out.println(sum+"/"+m);
			
		}
	}
 
  static int jisuan(int n){ //A
	     int h,sum;
	     h = n;
	    sum = 0;
	  
	  for(int i=2;i<=n-1;i++){
		  while(h>0){
			  sum = h%i+sum;
			  h =h/i;
		  }
		  h = n;
	  }
	  
    return sum;
 }
}

  前兩道還是挺簡單的,第三到題沒有記住。。。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM