`
ruijin5566
  • 浏览: 4542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面试题

阅读更多

高德多线程题

1.主线程里创建N个子线程,等待N个子线程全部执行完后,打印每个子线程执行的时间。

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * 主线程里创建N个子线程,等待N个子线程全部执行完后,打印每个子线程执行的时间。
 * 一种可行的方法
 */
public class MainThread {
	
	public static void main(String[] args) throws InterruptedException {
		int threadNum = 5;
		CountDownLatch latch = new CountDownLatch(threadNum);
		Map<String, Long> map = new ConcurrentHashMap<String, Long>(threadNum);
		ExecutorService pool = Executors.newFixedThreadPool(threadNum);
		for (int i=0; i < threadNum; i++) {
			pool.submit(new SubThread(latch, map));
		}
		latch.await(); //计数减到0时一直等待
		
		for (Map.Entry<String, Long> entry : map.entrySet()) {
			System.out.println(entry.getKey() + "执行耗时:" + entry.getValue() + "毫秒");
		}
		
		pool.shutdown(); // Disable new tasks from being submitted
		try {
		     // Wait a while for existing tasks to terminate
		     if (!pool.awaitTermination(1, TimeUnit.SECONDS)) {
		    	 pool.shutdownNow(); // Cancel currently executing tasks
		    	 // Wait a while for tasks to respond to being cancelled
		    	 if (!pool.awaitTermination(1, TimeUnit.SECONDS)) {
		    		 System.err.println("Pool did not terminate");
		    	 }
		     }
		} catch (InterruptedException ie) {
			// (Re-)Cancel if current thread also interrupted
		    pool.shutdownNow();
		    // Preserve interrupt status
		    Thread.currentThread().interrupt();
		}
	}
	
}

class SubThread implements Runnable {
	private CountDownLatch latch;
	private Map<String, Long> map;
	
	public SubThread(CountDownLatch latch, Map<String, Long> map) {
		this.latch = latch;
		this.map = map;
	}
	
	@Override
	public void run() {
		long start = System.currentTimeMillis();
		System.out.println(Thread.currentThread() + "开始执行...");
		try {
			Thread.sleep(1000); //模拟执行操作
			latch.countDown();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		long end = System.currentTimeMillis();
		System.out.println(Thread.currentThread() + "执行完毕");
		map.put(Thread.currentThread().toString(), end-start);
	}
	
}

 2.一个大数据题,一个500G的文件里存的是url,有些是重复的,要求打印出重复的url。

 

去哪儿

1.假设字母"a-z"的序列中,后面的字母大于它前面字母任意个数的乘积,如:b > N * a,并且大于所有它前面字符的乘积之和,比如:d > 2a + 3b + 5c,则“qunaer”的最大子序列是“ur”,编程求最大子序列。意思就是说依次找出最大的那个字母,后面的字母没有比它大的,然后找出第二大的字母,依次类推,直到结束。

 要求完成函数 char[] maxSub(char[] src, char[] sub)。

public class Test {
	
	public static void main(String[] args) {
		char[] src = new char[]{'q', 'u', 'n', 'a', 'e', 'r'};
		char[] sub = new char[src.length];
		sub = maxSub(src, sub);
		System.out.println(sub);
	}
	
	public static char[] maxSub(char[] src, char[] sub) {
		int k = 0;
		for (int i=0; i<src.length; i++) {
			for (int j=i+1; j<src.length; j++) {
				if (src[i] < src[j]) { 
					i = j; //每次找出最大的那个字母,用i记录最大字母的下标
				}
			}
			sub[k++] = src[i];
		}
		return sub;
	}
}

 做完后面试官问你它的时间复杂度,是O(n的平方),然后问你有没有用O(n)的时间复杂度可以解决的方法,他说用动态规划很好解决,不过我不知道动态规划,这就是我最后的结果了,感觉算法真是可以看出一个人的水平。关于动态规划的文章可以参考:通过金矿模型介绍动态规划 http://www.cnblogs.com/sdjl/articles/1274312.html

 

 2.有字符串a和字符串b,编程求出字符串a是否包含字符串b中的所有字符,如果字符串b中有5个字符'z',那么字符串a的’z'个数必须大于等于5个。

public class Test {
	
	public static void main(String[] args) {
		String a = "aabeabecacad";
		String b = "aaaaabccde";
		boolean contain = isContain(a, b);
		System.out.println("字符串a包含字符串b:" + contain);
	}
	
	public static boolean isContain(String a, String b) {
		Map<String, Integer> aMap = stringToMap(a);
		Map<String, Integer> bMap = stringToMap(b);
		
		for (Map.Entry<String, Integer> entry : bMap.entrySet()) {
			String key = entry.getKey();
			Integer count = entry.getValue();
			if (!aMap.containsKey(key) || aMap.get(key) < count) {
				return false;
			}
		}
		return true;
	}
	
	public static Map<String, Integer> stringToMap(String str) {
		Map<String, Integer> map = new HashMap<String, Integer>(str.length());
		for (char c : str.toCharArray()) {
			String key = String.valueOf(c);
			if (map.containsKey(key)) {
				map.put(key, map.get(key) + 1);
			} else {
				map.put(key, 1);
			}
		}
		return map;
	}
}

 

 3.一个1T的文件存的是long型的字符串,给文件中的long型字符串排序。

 正确的解题思路就是分而治之,比如说读1T的文件,每次读1G到内存里,在内存里对这1G数据排序,排完后写到1024个不同的文件里,这样读1次,写1024次,数据分散到1024个不同的小文件,每个文件1G,而且是有序的。然后同时读1024个文件做多路归并排序,排完序之后再写回一个大文件里。(思路可以参考2个有序数组的归并排序,比如每个文件先读取一行,找出1024个数中最小的,写入文件,再读取最小的那个文件的下一行,继续排序写入)这个题的瓶颈在于IO,应该尽量减少IO次数,而在内存排序是很快的。

 

4.还问了多线程之间的同步,具体的BlockingQueue是怎么加锁同步的,比如说LinkedBlockingQueue

 

 5.Memcached数据失效或宕机了之后有很多并发访问数据库怎么办

应对Memcached缓存失效,导致高并发查询DB的四种思路:http://blog.csdn.net/hengyunabc/article/details/20735701

 

 搜狗的部分面试题

1.在数据库中有表MarkList,表中有下列数据,用一条sql语句查询出“每门”课程都大于80分的学生姓名。

Name Course Mark

张三   数学   75

张三   语文   81

李四   数学   90

李四   语文   76

王五   数学   81

王五   语文   100

王五   英语   90

 

给个思路,供参考:

先查出低于80分的学生名单,然后再用姓名作为条件对比,排除刚才查到的学生

SQL Server:

select distinct [Name] from [表] where [Name] not in ( select [Name] from [表] where [Mark]<=80 )。

或者:

select distinct Name from MarkList A where not exists( select * from MarkList where Mark <= 80 and Name = A.Name)

或者:按姓名进行分组查询 然后指定条件 分组中分数的最小值都大于80的

select Name from Marklist group by name having min(Mark)>80

参考:http://bbs.csdn.net/topics/190052824  

http://zhidao.baidu.com/link?url=yBK5XLXas9gAnlJNA6lZAI5FWV1U8yAEe8ZUeeC8hF10BVMkXPwEE2QH8ddvh6MiYOJ-hGxUyX9LmekLHtMDhK

 

2.写shell脚本统计日志文件中登录次数最多的用户

 

3.25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的3匹马

参考:http://blog.csdn.net/harbinzju/article/details/5838898

 

4.有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

参考:http://blog.csdn.net/zzran/article/details/8443655

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    牛客大数据面试题集锦+答案,共523道,46W+字。大厂必备

    大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...

    个人面试题总结(java,数据库,前端).zip

    文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...

    2023最新JAVA面试题集

    2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...

    (完整版)运维面试题(含答案).pdf

    (完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题...

    ajax面试题ajax面试题

    关于Ajax的常见面试题 1,Ajax和javascript的区别? javascript是一种在浏览器端执行的脚本语言,Ajax是一种创建交互式网页应用的开发技术 ,它是利用了一系列相关的技术其中就包括javascript。 Javascript是由...

    2020年前端面试真题(阿里、网易、滴滴等)文件为百度网盘链接永久有效

    现在五块钱的付出,将来收获的可能是一份心仪的offer,干货满满,建议下载。...友情提示:本套面试题包括面试题900题+公司实战面试题400问,面试题已经整理好答案,公司题由于新收录没有答案,但非常有参考价值。

    ERP工程师面试题ERP工程师面试题

    ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题

    【BAT必备】zookeeper面试题

    【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】...

    Python面试题及答案共70道.docx

    Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    超全的嵌入式工程师笔试面试题汇总.zip

    超全的嵌入式工程师笔试面试题汇总 单片机嵌入式应聘测试题(含答案).pdf 经典嵌入式面试题.pdf 嵌入式工程师笔试题带答案.pdf 嵌入式工程师经典面试题.pdf 嵌入式软件工程师笔试集锦.pdf 嵌入式软件工程师笔试题__...

    【BAT必备】dubbo面试题

    【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...

    H5前端面试大全-包含大厂面试题_25个md文件分类面试题.rar

    前端笔试面试题部分 试题链接 原题概述 标签分类 1.md CSS部分 CSS 2.md HTML部分 HTML 3.md FEX 面试题 General 4.md 前端面试常见问题 General 5.md 前端面试HTML 相关问题 HTML 6.md 前端面试CSS 相关问题...

    汇丰软件java面试题

    "汇丰软件Java面试题详解" 汇丰软件Java面试题是许多IT行业新人的梦寐以求的岗位,需要考生具备扎实的Java基础知识和良好的编程能力。以下是对汇丰软件Java面试题的详细解析。 笔试部分 笔试部分主要包含三部分:...

    嵌入式C语言面试题汇总(超经典).pdf

    我们在找嵌入式方面的工作时,让我们头疼的恐怕就是面试题了,因为我们摸不到企业的命题规律,也不知道该怎样去准备,今天将各大企业的面试题进行汇总,分享给大家,希望可以帮到各位小伙伴。加油哦!

    最全的IT公司面试题集 CHM版的

    Java面试题,J2EE面试题,.net面试题,PHP面试题,数据库面试题,英语面试,外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux...

    java高级软件工程师面试题大全及答案 含一些公司面试题

    java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助

    【推荐】架构师面试题最新汇总(附详细答案)

    【推荐】架构师面试题最新汇总(附详细答案),包含以下内容: 架构师面试题系列之Dubbo面试专题及答案(29题) 架构师面试题系列之Kafka面试专题及答案(26题) 架构师面试题系列之Maven面试专题及答案(18题) ...

Global site tag (gtag.js) - Google Analytics