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.多线程的几种实现
- 使用Thread和Runnable实现多线程。
- 使用线程池,例如:ThreadPoolExecutor。
- 线程间的交互: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; } }
前两道还是挺简单的,第三到题没有记住。。。。。。