面试时遇到的几个小问题,大家来讨论
面试时遇到的几个问题,大家来讨论啊1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明
面试时遇到的几个问题,大家来讨论啊 1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。 2、请列举出java用于线程同步的各种技术(如synchronized关键字),说出他们的区别。 3、写一个函数计算一个32位整数中有多少Bit位为1 public int countBits(int value){ }[解决办法] 2.synchronized有两中实现方法吧,一个是在方法或属性前加关键字 还有一个synchronized block是用来解决第三方提供的方法与属性的同步问题的[解决办法] 3、
Java code public int countBits(int value){ int count=0; while(value!=0){ count+=value&1; value>>>=1; } return count; }[解决办法] 3、这个更高效 Java code public int countBits(int value){ int count=0; int[] bits4={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4}; while(value!=0){ count+=bits4[value&0xf]; value>>>=4; } return count; }[解决办法] 探讨 3、这个更高效 Java codepublicint countBits(int value){int count=0;int[] bits4={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};while(value!=0){ count+=bits4[value&0xf]; value>>>=4; }return count; }[解决办法] 1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。 静态变量是JVM级别的,所以能在同一个WebServer中的多个WEBAPP中共享[解决办法] Java codepublic class Test{ public static void main(String[] args) { System.out.println(countBits(3)); } public static int countBits(int countValue){ int count=0; while (countValue!=0) { ++count; countValue=countValue>>1; } return count; }}[解决办法] 探讨 引用: 1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。 静态变量是JVM级别的,所以能在同一个WebServer中的多个WEBAPP中共享 一个类的静态变量不可以在同一个WebServer中的多个WebApp中共享的吧。 因为不同的WebApp有不同的逻辑,如果其中一个WebApp改变了这个变量势必会影响到其的WebApp,这样所造成的结果是无法预见的。 这是从逻辑上来分析,那么从技术的角度应该怎么分析呢?哪位大虾有好的想法?[解决办法] 不能用>>啊,负数就麻烦了,死循环了。[解决办法] 对wxwyes的例子的一点补充: package test; public class Test{ public static final int a=0; public Test(){ System.out.println(Test.class.getClassLoader().getClass().getName()); } } jsp中引用的时候: <% out.println(new test.Test().a %> 在构造函数中把类装载器打印出来。 结果发现,当放在tomcat的lib目录下面的时候,打印:org.apache.catalina.loader.StandardClassLoader 当放在某一个工程下面的classes下面的时候,打印: org.apache.catalina.loader.WebappClassLoader 既然不是由同一个类装载器载入的,肯定不可以共享。但是,在同一个类装载器内部, 应该只有一个静态变量。[解决办法] 1.是可以共享的. 以tomcat为例,它支持多个层次的类加载器.其中有shared类型加载器,其加载的类在所有webapps下的项目都可见. 把类的class文件放在shared/classes目录下即可.[解决办法] 探讨 1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。 2、请列举出java用于线程同步的各种技术(如synchronized关键字),说出他们的区别。 3、写一个函数计算一个32位整数中有多少Bit位为1 public int countBits(int value){ }------解决方案--------------------
忘记说明了 你那个第2题有点歧义 如果说是线程同步的方法应该就是 sychronized 和lock 这个区别就是 lock比sychronized有更精确的线程语义和更好的性能 stchronized会自动释放锁 lock 必须手动释放 必须在finally里面释放 如果说同步的几种实现方法 就应该是2种 一种是 sychronized 一种就是 wait()与notify()[解决办法] 执行到一个main方法的时候创建一个jvm, 不同的webapp应该理解为是不同的main方法 所以应该是不同的jvm, 所以就算时static的也不能共享。 (个人见解)[解决办法] 1.我原来以为可以...看了大家的回帖,才知道不可以. 2.除了sychronized,还有volatile变量可以控制同步.[解决办法] 学习,对第三个问题编程试了下,结果是2,但不怎么懂,我是菜鸟,有高手具体解释下不?[解决办法] 1. 不能. 原因不知道, 但实验证明, 不能[解决办法] 探讨 1.是可以共享的. 以tomcat为例,它支持多个层次的类加载器.其中有shared类型加载器,其加载的类在所有webapps下的项目都可见. 把类的class文件放在shared/classes目录下即可.[解决办法] 本人认为,不同的项目tomcat都为其创建一个类加载器(org.apache.catalina.loader.WebappClassLoader )的实例,不同的类加载器实例之间不能共享资源。。。[解决办法] 探讨 引用: 1.是可以共享的. 以tomcat为例,它支持多个层次的类加载器.其中有shared类型加载器,其加载的类在所有webapps下的项目都可见. 把类的class文件放在shared/classes目录下即可. tomcat 6.0 下没有 shared 目录了[解决办法] 探讨 引用: 引用: 1.是可以共享的. 以tomcat为例,它支持多个层次的类加载器.其中有shared类型加载器,其加载的类在所有webapps下的项目都可见. 把类的class文件放在shared/classes目录下即可. tomcat 6.0 下没有 shared 目录了 没有就放common/classes下面. 如果不能共享,目录名就没必要叫common,shared了.