渥太华IT面试编程试题

我来个小儿科的答案吧

代码:
public class ReverseString {
    
    public static void reverse(String sSource) {
        try{
            byte[] bSource = sSource.getBytes("UTF-8");
            String sUTFSource = new String(bSource,"UTF-8");
            bSource  = null;
                
            StringBuilder sbRet = new StringBuilder();
            int nSize = sUTFSource.length() - 1;
            for (int i=nSize; i>=0; i--) {
                sbRet.append(sUTFSource.charAt(i));
            }
            System.out.println("source :" + sUTFSource);
            System.out.println("result :" + sbRet.toString());
            sbRet = null;
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        if (args != null && args.length > 0) {
            String sSource = args[0];
            ReverseString.reverse(sSource);
        }
    }
}

这个不错,考虑了UNICODE, 但是:

1. 占用了额外的空间.
2. 你应该向面试官指出Java里有个现成的function,以显示你知识渊博:
strOriginal = StringBuffer(strOriginal).reverse().toString(); </pre>
 
这个是Java吗?看上去,怎么这么复杂

改改再交一个
代码:
    public static String reverse2(String sSource) throws Throwable {
        int nSize = sSource.length();
        if (nSize <= 1) {
            return sSource;
        }
        int nMidPoint = nSize >> 1;
        String left = sSource.substring(0, nMidPoint);
        String right = sSource.substring(nMidPoint, nSize);
        return reverse2(right) + reverse2(left);
    }
 
其实这个也要看考官,如果是junior职位的话,说有那个reverser的话还管用,但是看看AbstractStringBuilder.reverse的method的话,就知道太复杂了,然后他就会问有没有可以提高的地方........然后开始扯算法,我最弱的就是算法了,lol
 
google面试题比这难的多了。去mitbbs看看吧。这样的题也就是以前第一轮电话面试的题。
 
其实这个也要看考官,如果是junior职位的话,说有那个reverser的话还管用,但是看看AbstractStringBuilder.reverse的method的话,就知道太复杂了,然后他就会问有没有可以提高的地方........然后开始扯算法,我最弱的就是算法了,lol

这种职位面试完全是coding

不要把自己局限于一个coder/小兵
 
再提高,就是分成四段,还是在一个循环里完成,这样循环可以短点?

其实这个也要看考官,如果是junior职位的话,说有那个reverser的话还管用,但是看看AbstractStringBuilder.reverse的method的话,就知道太复杂了,然后他就会问有没有可以提高的地方........然后开始扯算法,我最弱的就是算法了,lol
 
改改再交一个
代码:
    public static String reverse2(String sSource) throws Throwable {
        int nSize = sSource.length();
        if (nSize <= 1) {
            return sSource;
        }
        int nMidPoint = nSize >> 1;
        String left = sSource.substring(0, nMidPoint);
        String right = sSource.substring(nMidPoint, nSize);
        return reverse2(right) + reverse2(left);
    }

这个挺好!
用回归的人显得超人一等:cool:
 
顺便问一下:以C语言为例,学完语法,可以用基本语句来用解决一些智力题,比如走迷宫什么的,表明比较熟练了。然后应该学数据结构和算法了吧?
接着应该是什么?是不是学接口了或者操作系统下的应用程序了?

很菜,求指导。
 
后退
顶部