高德多线程题
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
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
相关推荐
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...
云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...
文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...
2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...
最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...
(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题...
现在五块钱的付出,将来收获的可能是一份心仪的offer,干货满满,建议下载。...友情提示:本套面试题包括面试题900题+公司实战面试题400问,面试题已经整理好答案,公司题由于新收录没有答案,但非常有参考价值。
【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】...
Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
超全的嵌入式工程师笔试面试题汇总 单片机嵌入式应聘测试题(含答案).pdf 经典嵌入式面试题.pdf 嵌入式工程师笔试题带答案.pdf 嵌入式工程师经典面试题.pdf 嵌入式软件工程师笔试集锦.pdf 嵌入式软件工程师笔试题__...
【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...
前端笔试面试题部分 试题链接 原题概述 标签分类 1.md CSS部分 CSS 2.md HTML部分 HTML 3.md FEX 面试题 General 4.md 前端面试常见问题 General 5.md 前端面试HTML 相关问题 HTML 6.md 前端面试CSS 相关问题...
内容概要:本面试题涵盖了各种类型的技术面试题,包括编程语言、算法、数据结构、操作系统、计算机网络、数据库等多个方面。这些面试题都是经过精心筛选和整理的,涵盖了常见的面试题型和知识点,能够帮助求职者全面...
ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题
我们在找嵌入式方面的工作时,让我们头疼的恐怕就是面试题了,因为我们摸不到企业的命题规律,也不知道该怎样去准备,今天将各大企业的面试题进行汇总,分享给大家,希望可以帮到各位小伙伴。加油哦!
Java面试题,J2EE面试题,.net面试题,PHP面试题,数据库面试题,英语面试,外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux...
java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助