转:迅雷亲历面经:笔试+上机+面试(完整JAVA面试题求解大讨论)



------
转另一个论坛的帖子:

迅雷面试回来,用了整整一下午(不知道怎么说了,其中等待时间都快2小时了),自己感觉笔试和上机还可以,但技术面谈这一关答得不太好,现在再次感觉互联网公司与一般软件公司的区别了,其中一点就是互联网应用在性能上要求很高,谈了一个小时大部分题目感觉都在谈论性能问题,自己在方面一直是弱项,汗啊:( 

仔细回忆了一下整个面试过程的题目,记录下来,希望大家多多给点意见讨论下啊 

一、笔试题: 
A)JAVA基础多项选择题,比较简单,略 

B)问答: 
1)ajax原理、如何实现刷新数据及优点? 
2)门面模式的解释、适用场合? 
3)写6个linux常用命令? 
4)SQL语句题,较简单 

C)编程: 
1)有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC… 
2)假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)? 

二、上机题: 
Java上机实现统计某一目录下每个文件中出现的字母个数、数字个数、空格个数及行数? 

三、面试题: 
1、说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 
2、用java怎么实现有每天有1亿条记录的DB存储?mysql上亿记录数据量的数据库如何设计? 
3、mysql支持事务吗?DB存储引擎有哪些? 
4、mvc原理,mvc模式的优缺点,如果让你设计你会怎么改造MVC? 
5、hibernate支持集群吗?如何实现集群? 
6、tomcat 最多支持并发多少用户? 
7、map原理,它是如何快速查找key的?map与set区别? 
8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G??? 
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户? 
10、Spring如何实现IOC与AOP的,说出实现原理? 

期待大家的探讨,共同提高,多谢
------
顶一下
------
这种公司真会搞噱头

那么难 他们自己公司又有几个人都会?
------
此贴必火,坚定完毕
------
引用楼主 wmbjhlj 的回复:
12)假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?

------
一个不懂,纯接分!
------
看一遍下来,感觉又把我做好的很少~~~ - -!
------
基本只懂java语言是不可能找个java的工作了。
------
凶猛
------
迅雷要的就是速度
------
引用 7 楼 zangxt 的回复:
基本只懂java语言是不可能找个java的工作了。

------
mark
------
妈呀 做梦学习去了
------
mark
------
顶一下。。。
------
能完整的把题目做完,工资肯定不低于1.5万.
------
恩 要求全才啊 呵呵

感觉对于应届生有点要求小高
------
引用 16 楼 justinavril 的回复:
恩 要求全才啊 呵呵

感觉对于应届生有点要求小高

------
能答好这些题,得是工作几年的人呢?
------
接分,
对这个问题十分感兴趣:
mvc原理,mvc模式的优缺点,如果让你设计你会怎么改造MVC? 

麻烦大牛们发表点意见
------
very hard
------
精通里面的任意一个就不简单了!
------
考地也太杂了
------
lz浪费啊,光面试题,就能开10个帖子了
------
好多都不明白啊,java web才起步,要学的很多啊,基本上面试题 觉得没经验的人去了,百分之九十的新手都答不上来
------

------
太难了
------
好多啊
------
难!!!
------
mark!
------

------
看此贴之后
有又矮一节的感受
------
看来我们这些菜鸟的路还很长啊
------
一个字:难!
------
受不了这样的面试!
------
我 来领5分的
------
确实有点难。

7、map原理,它是如何快速查找key的?map与set区别?
这里应该问hashMap的原理才对吧?单纯的map只是一个接口,各种不同的实现类采用的算法可能不一样。

8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
这个有点意思,等大牛来讲。1亿条用户信息,那文件得多大了?

9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?
建索引。
------
顶起
------
mark
------
同感
------
路过
------
只有一半是能吹的,而且还不敢在这里吹,惭愧中~~~~~~~~
------
希望牛人解答!!!
------
刚毕业 这样的题 太受打击了
------
看来我是找不到工作了。
------
望题生畏啊
------
可以呀,问下他可以提供的待遇是多少
------
mark
------
路过~并学习高手解答

留帖备查!
------
引用 17 楼 zangxt 的回复:
引用 16 楼 justinavril 的回复:
恩 要求全才啊 呵呵

感觉对于应届生有点要求小高

呵呵,估计这是问题总结吧。问一个人这么多,感觉可能性不大。

------
mark
------
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…

对这个感兴趣,等待高人
------
jf~~~~~~~~~~~~~~~~~~~~~~~~~~
------
关注中
------
引用 52 楼 yukang_ky 的回复:
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…

对这个感兴趣,等待高人

------
8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G??? 

核心算法就是归并算法。算法基本如下描述:

操作系统块大小是B字节(这个块是有效块,是人为规定,一般是4的倍数较为高效)。
主存是1*1024*1024*1024字节,设为M
记录占用R字节。

填满内存须要M/B次,一个块用于临时交互,那么一次可以为M/B-1个快集合填充。

得出B/R等于多少?用这个值进行划分记录。大约出现N个有限集合。

最后使用归并算法对N个集合进行归并。使用两趟归并算法就是TB数据集。基本够用。

说简单,实现也要一段时间,参考数据库大型算法中的多路归并就解决了。

9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?

这个问题意义不大:

没有关系结构,电影重复看算不算5个?但是关系中count和用户信息都在一个临时记录中这倒是真的。
------
顶一下
------
呵呵,我关心的是他们能给出多高的薪水
------
引用 56 楼 whut0802 的回复:
引用 52 楼 yukang_ky 的回复:
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…

对这个感兴趣,等待高人

Java codepublicclass ThreadTestextends Thread {publicvoid run() {for (int i=0; i<10; i++) {
System.out.print(this.getName());try {
Thread.currentThread().sleep(2000);
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}publicstaticvoid main(String[] args)throws InterruptedException {
ThreadTest a=new ThreadTest();
a.setName("A");
ThreadTest b=new ThreadTest();
b.setName("B");
ThreadTest c=new ThreadTest();
c.setName("C");
a.start();
b.start();
c.start();
}
}

------
引用楼主 wmbjhlj 的回复:

2)假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?

------
多线程的题,我感觉这样可以,100次没有问题

public class testThread implements Runnable {

public void run() {
for(int i=0; i<1000; i++ ) {
System.out.print(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) throws InterruptedException {
testThread a = new testThread();
testThread b = new testThread();
testThread c = new testThread();

Thread ta = new Thread(a);
ta.setName("A");
Thread tb = new Thread(c);
tb.setName("B");
Thread tc = new Thread(b);
tc.setName("C");

ta.start();
Thread.sleep(50);
tb.start();
Thread.sleep(50);
tc.start();
}

}
------
引用 62 楼 raul317 的回复:
多线程的题,我感觉这样可以,100次没有问题

public class testThread implements Runnable {

public void run() {
for(int i=0; i <1000; i++ ) {
System.out.print(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) throws InterruptedException {
testThread a = new testThread();
testThread b = new testThread();
testThread c = new testThread();

Thread ta = new Thread(a);
ta.setName("A");
Thread tb = new Thread(c);
tb.setName("B");
Thread tc = new Thread(b);
tc.setName("C");

ta.start();
Thread.sleep(50);
tb.start();
Thread.sleep(50);
tc.start();
}

}

------
学习了 哈哈
------
我是来拿大鸭蛋的.....
------
对于迅雷这样的要求也很正常,题目不算太难
------
自卑中……
------
哎呀!mark
------
引用 7 楼 zangxt 的回复:
基本只懂java语言是不可能找个java的工作了。

------

------
好多不清楚,前方的路还远着,先mark一下!
------

------
不错,顶。。。。。。。。。
------
学了一年java,差不多全部做不出来!我怕我得睡觉的梦中都在自动看书才行!
------
看看再看看 越来越想学啦 为什么啦 》》》???有挑战性
------
我唯一能想到的是替换字符串那个题。。。用正则表达式
------
引用 71 楼 wzju64676266 的回复:
Java codechar []charNum={'6','s','a','b','c','s','s','s','f','s','f','s','3'};for(int i=0;i<charNum.length;i++)
  {if('a'==charNum[i]||'b'==charNum[i]||'3'==charNum[i])
  {char []temp=?-

------
惭愧中,唉……感觉好难啊,真的要很厉害才行啊
------
很有代表性的题目 不过



惭愧 惭愧  




  面壁思过去....
------
引用 60 楼 dlnu05610 的回复:
引用 56 楼 whut0802 的回复:
引用 52 楼 yukang_ky 的回复:
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…

对这个感兴趣,等待高人

Java codepublicclass ThreadTestextends Thread {publicvoid run() {for (int i=0; i <10; i++) {
            System.out.print(this.getName());try {
                Thread.currentThread().sleep(2000);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }publicstaticvoid main(String[] args)throws InterruptedException {
        ThreadTest a=new ThreadTest();
        a.setName("A");
        ThreadTest b=new ThreadTest();
        b.setName("B");
        ThreadTest c=new ThreadTest();
        c.setName("C");
        a.start();
        b.start();
        c.start();
    }
}

你要是这么写还不如不写,因为你是对线程的极度不熟悉,要是让你打印100次,你自己看看结果吧,cpu的时间片不是你想的那么简单的,这个题目得用同步来做,否则就不会是出现以上的结果(使用一个static类型的变量来控制打印的除外,因为考官压根就不是要考的这个)

------
难!!!
------
MARK,期待高人出现
------
- -~!
------
up
------
引用 85 楼 yang677888 的回复:
来自是一位csdn朋友的贴,转载,呵呵,大家共同讨论,学习

Java codepackage com.saturday;publicclass KMP {publicstatic String myReplaceAll(
String input,
String replaced){//短路掉不可能匹配的情况if(replaced.equals("")||input.length()<replaced.length()){return input;
}

StringBuffer buf=new StringBuffer();char[] s=input.toCharArray();char[] r=replaced.toCharArray();int rLen=r.length;int matchCount;for(int i=0,sLen=s.length;i<sLen;){if(i<sLen-rLen){//检查匹配 matchCount=0;for(int j=0;j<rLen;j++){if(s[i+j]==r[j]){
matchCount++;
}else{break;
}
}//完全匹配if(matchCount==rLen){
i+=rLen;continue;
}//部分匹配if(matchCount>0){for(int j=0;j<matchCount;j++){
buf.append(s[i++]);
}continue;
}
}

buf.append(s[i++]);
}return buf.toString();
}publicstaticvoid main(String[] args){
String input="123 mfc mf fc mfdC mfmfc cmfc dd abc";
String replaced="1234";

System.out.println(
myReplaceAll(input,replaced).equals(input.replaceAll(replaced,""))
);
}
}


from
http://topic.csdn.net/u/20091130/23/79caaaa8-fb36-4dc4-a23a-13e816a28329.html?seed=653129929&r=61557319#r_61557319

------
大公司能随便进,那么毕业就不失业了。
------
国内大型电信供应商,高薪诚聘JAVA,数据库开发人员

要求如下: 
1、计算机、软件、通讯等相关专业; 
2、本科2年以上JAVA开发经验, 硕士1年以上相关经验; 
3、能够掌握当前主流的J2EE开发框架中的一种,或者熟悉ORACLE等大型关系数据库; 
4、工作地:深圳。 
如有意愿,请把简历发送到:hwzhp2007@gmail.com. 
欢迎来信咨询,有信必复!
薪水上不封顶,只要能力强,开多少都可以满足!
职位:系统分析,架构设计,高级程序员,程序员,数据库开发人员,软件测试等。

------
迅雷不及掩耳盗铃之势
------
惭愧呀 ~~~  

------
没有能看懂的。。。
------
引用 60 楼 dlnu05610 的回复:
引用 56 楼 whut0802 的回复:
引用 52 楼 yukang_ky 的回复:
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…

对这个感兴趣,等待高人

Java codepublicclass ThreadTestextends Thread {publicvoid run() {for (int i=0; i <10; i++) {
            System.out.print(this.getName());try {
                Thread.currentThread().sleep(2000);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }publicstaticvoid main(String[] args)throws InterruptedException {
        ThreadTest a=new ThreadTest();
        a.setName("A");
        ThreadTest b=new ThreadTest();
        b.setName("B");
        ThreadTest c=new ThreadTest();
        c.setName("C");
        a.start();
        b.start();
        c.start();
    }
}

你要是这么写还不如不写,因为你是对线程的极度不熟悉,要是让你打印100次,你自己看看结果吧,cpu的时间片不是你想的那么简单的,这个题目得用同步来做,否则就不会是出现以上的结果(使用一个static类型的变量来控制打印的除外,因为考官压根就不是要考的这个)

------
一个都不会,我日
------
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC… 

public class TestABC implements Runnable{
private int i=1;
  public synchronized void run()
{
while(i<=30)
{
if(i%3==0)
{
System.out.print(Thread.currentThread().getName());
i++;
try {
this.wait(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.notify();
}

if(i%3==1)
{

System.out.print(Thread.currentThread().getName());
i++;
try {
this.wait(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.notify();
}

else
{
System.out.print(Thread.currentThread().getName());
i++;
try{this.wait(100);}
catch(InterruptedException e)
{
e.printStackTrace();
}
this.notify();
}

}

}
public static void main(String[] args) {

  TestABC t=new TestABC();
  Thread th=new Thread(t);
  th.setName("A");
  th.start();
  Thread th1=new Thread(t);
  th1.setName("B");
  th1.start();
  Thread th2=new Thread(t);
  th2.setName("C");
  th2.start();
   
   
}

}
public class TestABC implements Runnable{
private int i=1;
  public synchronized void run()
{
while(i<=30)
{
if(i%3==0)
{
System.out.print(Thread.currentThread().getName());
i++;
try {
this.wait(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.notify();
}

if(i%3==1)
{

System.out.print(Thread.currentThread().getName());
i++;
try {
this.wait(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.notify();
}

else
{
System.out.print(Thread.currentThread().getName());
i++;
try{this.wait(100);}
catch(InterruptedException e)
{
e.printStackTrace();
}
this.notify();
}

}

}
public static void main(String[] args) {

  TestABC t=new TestABC();
  Thread th=new Thread(t);
  th.setName("A");
  th.start();
  Thread th1=new Thread(t);
  th1.setName("B");
  th1.start();
  Thread th2=new Thread(t);
  th2.setName("C");
  th2.start();
   
   
}

}
结果是ABCABCABCABCABCABCABCABCABCABC
------
ls这个靠谱
------
引用 63 楼 raul317 的回复:
引用 62 楼 raul317 的回复:
多线程的题,我感觉这样可以,100次没有问题

public class testThread implements Runnable {

public void run() {
for(int i=0; i <1000; i++ ) {
System.out.print(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) throws InterruptedException {
testThread a = new testThread();
testThread b = new testThread();
testThread c = new testThread();

Thread ta = new Thread(a);
ta.setName("A");
Thread tb = new Thread(c);
tb.setName("B");
Thread tc = new Thread(b);
tc.setName("C");

ta.start();
Thread.sleep(50);
tb.start();
Thread.sleep(50);
tc.start();
}

}

i改成 <10啊,后来没改

桂ICP备07017180号