1. 2乘以8的最效率(简便)算法。
2. 有关同步与异步的一些问题。
3. 有关多线程的一些问题。
描述下:我不是想问这些问题的答案,就是想请问下各位你们做Java开发会遇到这样子的问题吗?
例如:java开发会出现让你做2*8的最简便算法?
java的BS架构的程序会不会用到同步异步与多线程的一些情况,都在哪里。
还有如果你们是面试官会让什么人做纸面答题,会让什么人直接聊聊就OK(技术方面)。最后:谢谢各位!

解决方案 »

  1.   


    2<<3 才对吧 。
    呵呵。
      

  2.   

    2<<3是8 现在是问2*8 所以是2<<4
    不过人家说的不是答案,是面试会不会问到,实际会不会用到多线程,同步异步,你深入到项目就会用到的,譬如让你做一个东西,需要启一个线程定时去扫描一部分对像的数据,就会涉及;再或者需要你启动一个多线程同时操作某一部分数据之类;再或者编写代码的时候就要考虑你的对像会不会被同时访问到;譬如SimpleDateFormat的format方法
    public StringBuffer format(Date date, StringBuffer toAppendTo,
                                   FieldPosition pos)
        {
            pos.beginIndex = pos.endIndex = 0;
            return format(date, toAppendTo, pos.getFieldDelegate());
        }
    不是同步的,如果多个人同时调用该方法,就有可能错位;面试官问到的话,你随便说说就能知道你的水平的。
      

  3.   


    2<<3 是16啊。怎么会等于8?????请补习java基础吧。 不相信的话验证一下啦。 哎~~~~~~
      

  4.   

    忘记说了 在Java项目中,我们通常会自己写一个DateUtil类,处理日期和字符串的转换。如下 public class DateUtil{      private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");     public static formatDateToYYYYMMDDStr(Date date){              return sdf.format(date);     }      public static formatYYYYMMDDStrToDate(String str){            return sdf.parse(str);      }} 然而,由于SimpleDateFormat类不是线程安全的,所以在多线程的环境下,往往会出现意想不到的结果。
      

  5.   

    "2<<3 是16啊。" 呵呵 是要补基础了在Java项目中,我们通常会自己写一个DateUtil类,处理日期和字符串的转换。如下 public class DateUtil{      private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");     public static formatDateToYYYYMMDDStr(Date date){              return sdf.format(date);     }      public static formatYYYYMMDDStrToDate(String str){            return sdf.parse(str);      }} 然而,由于SimpleDateFormat类不是线程安全的,所以在多线程的环境下,往往会出现意想不到的结果。
      

  6.   


    呵呵 是要补基础了在Java项目中,我们通常会自己写一个DateUtil类,处理日期和字符串的转换。如下 public class DateUtil{      private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");     public static formatDateToYYYYMMDDStr(Date date){              return sdf.format(date);     }      public static formatYYYYMMDDStrToDate(String str){            return sdf.parse(str);      }} 然而,由于SimpleDateFormat类不是线程安全的,所以在多线程的环境下,往往会出现意想不到的结果。
      

  7.   

    谢谢 ouwaner  的回复,不过有些地方还需要请教各位大大一下。
    这些位运算在BS项目中会遇到吗?还有位运算说句实话,做Java开发会遇到这种东西吗?虽然绝大部分的人都会学到,但是老实说我根本没学过数据结构,不会位运算。还有关于多线程和同步异步方面的。
    BS项目那些模块或者那些领域中会遇到多线程和同步异步的情况。请举例说一下,谢谢~~~~
      

  8.   

    不会位运算行不?
    各位大大在Java的BS架构开发中有用到位运算吗?
    一般用不到的,对吧?有木有?有木有?有木有?有木有?有木有?
      

  9.   

    2<<3 是等于16   顶一下!
      

  10.   

    这种面试题真是垃圾得要死!位运算,如看看 Hacker's Delight(中文版书名《高效程序的奥秘》)这本书就知道其实根本就不懂位运算!
      

  11.   

    虽然是小白,不过我也感觉在BS架构的Java项目中,几乎用不到的位运算吧~~~(当然,MD5这种东西也是有的)另外还是想请教某些大大们,在BS的项目中有关  同步! 异步! 线程!  的各种东东,
    主要是说下在BS的那些方面会应用,如果能举个案例就更好了,谢谢各位了~
      

  12.   

    面试的时候问你位运算的意思是一定要在工作中让你用到这个吗?
    那面试的时候问你的个人爱好是不是也让你工作的时候用呢?
    那道题只是考你的思路和java基础
    工作的时候用的东西你不可能都会,重要的是你不会的东西你懂得怎么去做出来,思路是最重要的
      

  13.   

    位运算不知道有没有思路不思路一说,我真不会~但单单从以上朋友说的来看应该就是那种会就是会,不会就是不会的东西吧。你知道是2<<3就是知道,不知道就是不知道啊~就跟你会1+1=2一个道理。难道会用计算器求一个10位数的平方根的人就必须会开平方根的算法吗?
      

  14.   

    同样的,我还可以问你,大数除法怎么做?你觉得这个跟你的工作没有关系,他问你干什么?让你思考啊,难道你写程序都不思考吗,什么算法不会就google一下?任何情况下都有现成的一模一样的代码让你copy吗?
      

  15.   

    2 * 8 最有效率的方法难道你不能写成8 << 1这样吗
      

  16.   


    2*8表示的是8个2相加
    8<<1相当于8*2 表示2个8相加嘿嘿意义不同
      

  17.   

    2左移3位相当于2的三次方,计算机中cpu对二进制的处理速度是最快的。
      

  18.   

    int i = 2 << 2
      

  19.   


    楼上的答案a = a ^ b;b = b ^ a;a = a ^ b;
      

  20.   

    2<<4
    想想HIBERNATE吧,就能知道同步与异步
      

  21.   


    其实在我们编程过程中,默认都是以异步的方式进行调用的。仅当显示的声明synchronized(同步)的时候,此时才会以同步的方式进行调用。
    举个简单的例子:叫你用BS结构开发一个购票系统。
    目前库中只有一张票,有很多客户端,他们都能看到此时库中还有一张票。
    好,他们同时进行购买操作。
    程序怎么实现?先查看库中是否有一张票,有则可购买(更新数据库,使库中票数减一),没有则不能购买。这种逻辑很正常,对吧?但如果大家都同时做这样的操作(客户端越多,这种事就越正常)。
    大家同时查看,数据库都有一张票,且只有一张票,OK,大家都是购买,都同时update。问题来了,本来都只有一张票,现在有几个异步的客户端,就卖出了几张票。
    当然,你要告诉我,你用事务原子锁。正确。
    我也可以告诉你,我不用原子锁,我只用在更新操作这个方法上加个synchronized(同步)。多线程更不用说啦,做WEB的都应该了解WEB处理机制吧?WEB系统本身就是以多线程方式运行的。不然怎么支持那么多接入访问客户端?
      

  22.   

    2*8 = 2<<3   哈哈哈
      

  23.   

    直接写 16嘛。。这么麻烦干嘛  还有哦 BS并发很重要 记得 Servlet与JSP核心编程 前面一直在说并发问题  楼主基础很不好
      

  24.   

    我不知道这道面试提的意义何在 但是我知道企业更重视的应该是实际中解决问题的方式,比如我们公司领导刚才就说更希望得到直接输出16的结果   我是一名.NET 程序员可能对Java的编译器机制不甚了解但是在 .NET 中我看到得是如下结果
        11:             int i = 2 << 3;
    00000027 BE 10 00 00 00   mov         esi,10h 这是int i = 2 << 3 进行反汇编的结果  表明一点  编译器确实是直接把 16的值在编译期计算出来并且直接赋给了 i 位移操作的指令应该是 
    mov ax,2
    shl ax,3
    所以在编译器上面写 16和 2<<3最大的意义不是效率问题 而是可读性的问题  常量计算是在编译器完成的。
      

  25.   

    如果这道题的意思是在后面会用这个结果做位运算 以对某个变量进行置位或置零 那么这种方式的可读性更高 但我觉得 1<<4的格式应该更合适啊
      

  26.   

    显然这是重点。.NET是如此,Java也是如此。不管你是写“2<<3”也好,“2×8”也好,都是一个常量表达式,编译器都直接给计算好,并且当作常量编译进去了。而自作聪明的把8转换成为“左移三位”不是自找麻烦么,到底是3位还是4位都有人在打唧唧,这就证明了出问题是随时的。能做出来的不要自夸牛。踏实扎实是基本素质。
      

  27.   


    9494  无端的使用复杂的语法会增加软件的复杂度这也是Java这类语言所面对的一个最大的问题,很多人使用复杂的语法实现其实和简单语法实现的相同的功能,这样就增加了以后所有要阅读这些代码的程序员的门槛 而还自以为优雅实质上晦涩难懂 如果真的能提高效率和复用性也就算了 如果用了还没有在这些方面有实质行的提高 那么我说这样的代码是没有价值的
      

  28.   


    a=a+b;
    b=a-b;
    a=a-b;
    不OK?
      

  29.   

    java  肯定用到多线程工作几年跳巢的肯定就直接聊啊,那个阶段笔试已经 么有意义了
      

  30.   

    没开发过java多线程之类的东西