论坛首页 招聘求职论坛

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

浏览 90210 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-12-15   最后修改:2009-12-16
import java.util.Arrays;
import java.util.Date;
import java.util.regex.*;
public class DTest {  
	public void test1(){
		char[] chars="6sabcsssfsfs33".toCharArray();
		boolean[] removeChars = new boolean[256];  
		removeChars['a'] = true;  
		removeChars['b'] = true;  
		removeChars['3'] = true;  
		StringBuffer sb = new StringBuffer();  
		for (int i = 0; i < chars.length; i++) {  
			if (!removeChars[chars[i]]) {
				sb.append(chars[i]);  
			}
		}    
		//System.out.println(sb.toString());  
	}
	public void test2(){
		char[] chars="6sabcsssfsfs33".toCharArray();
		StringBuffer sb=new StringBuffer();
		for(int i=0;i<chars.length;i++){
			if(chars[i]=='a'||chars[i]=='b'||chars[i]=='3'){
				continue;
			}
			sb.append(chars[i]);
		}
		//System.out.println(sb.toString());  
	}
	public void test3(){
		String regx="[^a|b|3]";  
    	String temp="6sabcsssfsfs33";  
    	Pattern p=Pattern.compile(regx);  
    	Matcher m=p.matcher(temp);  
    	StringBuffer sb=new StringBuffer();
    	while(m.find())  {
    		sb.append(m.group());
    	}
     	//System.out.print(sb); 
	}
	public static void main(String args[]) {   
		DTest dt=new DTest();
		Date now1=new Date();
		for(int i=0;i<100000;i++){
			dt.test1();
		}
		Date now2=new Date();
		System.out.println(now2.getTime()+"-"+now1.getTime()+",共用:"+(now2.getTime()-now1.getTime()));
		Date now3=new Date();
		for(int i=0;i<100000;i++){
			dt.test2();
		}
		Date now4=new Date();
		System.out.println(now4.getTime()+"-"+now3.getTime()+",共用:"+(now4.getTime()-now3.getTime()));
		
		Date now5=new Date();
		for(int i=0;i<100000;i++){
			dt.test3();
		}
		Date now6=new Date();
		System.out.println(now6.getTime()+"-"+now5.getTime()+",共用:"+(now6.getTime()-now5.getTime()));
		
	}   
}  

用事实说话,test2小胜
0 请登录后投票
   发表时间:2009-12-16  
test1中把hash数组取出去,没必要每次都建立,要不然就没意义了。   


public static boolean[] removeChars;

    public Test()
    {
        removeChars = new boolean[256];
        removeChars['a'] = true;
        removeChars['b'] = true;
        removeChars['3'] = true;
    }
public void test1()
    {
        char[] chars = "6sabcsssfsfs33".toCharArray();

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < chars.length; i++)
        {
            if (!removeChars[chars[i]])
            {
                sb.append(chars[i]);
            }
        }
    }

再试试
0 请登录后投票
   发表时间:2009-12-25   最后修改:2009-12-25
linyvlu 写道
		StringBuilder sb = new StringBuilder("6sabcsssfsfs33");
		sb.delete(2, 4);
		sb.delete(sb.length()-2, sb.length());

哈哈,看到你的帖子,我想到一个更简单的方法,人工识别:
StringBuilder sb = new StringBuilder("6sabcsssfsfs33");
//使用“眼睛”去掉ab3
System.out.println("6scsssfsfs");


显然可以证明,这样耗时最少,效率最高^_^
0 请登录后投票
   发表时间:2009-12-29  
giginet 写道
一般拒绝笔试的很多都是技术比较牛但理论基础比较差的,很多工作久的人都会有这种感觉。毕竟实际动手能力最重要,虽然理论也是必不可少的。

另外,想想一把年纪还要参加笔试,不能不说是技术人员的悲哀~~~想想都很窝火的,但又很无可奈何。

深有同感.
0 请登录后投票
   发表时间:2010-01-11  
哗,面试题很有深度,很多我都不会答。
0 请登录后投票
   发表时间:2010-01-12  
看来我是要多学一点性能上的东西在去面试这样的公司比较可能性大一点
0 请登录后投票
   发表时间:2010-02-12  
ckn126 写道
看来我是要多学一点性能上的东西在去面试这样的公司比较可能性大一点

在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?
----可以参考 位图索引的原理
0 请登录后投票
   发表时间:2010-02-14   最后修改:2010-02-14
用信号量实现的,,,

class MyWorker implements Runnable {

	private static Semaphore[] semaphores = { new Semaphore(1),
			new Semaphore(0), new Semaphore(0) };

	private int index = 0;
	private int count = 0;

	public MyWorker(int index) {
		this.index = index;
	}

	public static void main(String[] args) {
		new Thread(new MyWorker(0), "A").start();
		new Thread(new MyWorker(1), "B").start();
		new Thread(new MyWorker(2), "C").start();
	}

	public void run() {
		for (;;) {
			try {
				semaphores[index].acquire();
				System.out.println(Thread.currentThread().getName());
				count++;
				semaphores[(index + 1) % 3].release();
				if (count >= 10)
					break;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
0 请登录后投票
   发表时间:2010-03-24   最后修改:2010-03-24
解一下这个吧
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…



package ThreadTest;

import java.util.concurrent.Semaphore;

/**
 * 
 * @author zhangdepeng318@gmail.com
 * 
 */
public class TestOderThread {

	private static Semaphore semaphore1 = new Semaphore(0);
	private static Semaphore semaphore2 = new Semaphore(0);
	private static Semaphore semaphore3 = new Semaphore(0);
	public Thread t1;
	public Thread t2;
	public Thread t3;
	public volatile boolean x1 = true, x2 = true, x3 = true;

	public TestOderThread() {
		t1 = new Thread() {
			public void run() {
				try {
					semaphore1.acquire();// 必须先获得 锁才可以继续,要等release释放的。
					System.out.print("B");
					semaphore2.release();
					semaphore3.acquire();
					x1 = false;
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		};
		t2 = new Thread() {
			public void run() {
				System.out.print("A");
				semaphore1.release();
				x2 = false;
			}
		};
		t3 = new Thread() {
			public void run() {
				try {
					semaphore2.acquire();
					System.out.print("C");
					semaphore3.release();
					x3 = false;
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		};

	}

	public void run() {
		t1.start();
		t2.start();
		t3.start();
	}

	public static void main(String args[]) {
		TestOderThread t = new TestOderThread();
		for (int i = 0; i < 10; i++) {
			t = new TestOderThread();
			t.run();
			//如果有一个为真 的话 就代表没有全部完成。
			//采用繁忙等待模式
			while (t.x1 || t.x2 || t.x3) {
				if (!t.x1&&!t.x2&&!t.x3) {
					//代表全部完成
					//System.out.println();
				    break;
				}else{
					//break;
				}
			}
		}
	}
}




输出:ABCABCABCABCABCABCABCABCABCABC
0 请登录后投票
   发表时间:2010-03-24  
ppm10103 写道
ckn126 写道
看来我是要多学一点性能上的东西在去面试这样的公司比较可能性大一点

在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?
----可以参考 位图索引的原理


关键是表很大,索引也无能为力。

策略性分表是一个方法。大表化小或化区


0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics