java基础题

1,&&与&    &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为		null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 &    ++y>0)                       y会增长,If(x==33 && ++y>0)不会增长,&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作
2,Collection 和 Collections的区别。 
  Collection是接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
3,说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要 涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而 LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
4,  String,StringBuffer,StringBuilder
     同类型的String相加会产生新的String对象,而StringBuffer和StringBuilder不会,
       如果要操作少量的数据用 = String
  单线程操作字符串缓冲区 下操作大量数据 = StringBuilder 非线程安全
  .多线程操作字符串缓冲区 下操作大量数据 = StringBuffer  线程安全
5, 运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
6,HashMap和Hashtable的区别。 
HashMap 非线程安全的实现,他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 
7,error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
8,forward 和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送  
的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request       参数都可以获取。
9, 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
public class ThreadTest1{
<span style="white-space:pre">	</span>private int j;
<span style="white-space:pre">	</span>public static void main(String args[]){
<span style="white-space:pre">	</span>ThreadTest1 tt=new ThreadTest1();
<span style="white-space:pre">	</span>Inc inc=tt.new Inc();
<span style="white-space:pre">	</span>Dec dec=tt.new Dec();<span style="line-height: 18.7199993133545px; white-space: pre-wrap; font-family: Verdana;">	</span>
<span style="line-height: 18.7199993133545px; font-family: Verdana; white-space: pre-wrap;"><span style="white-space:pre">		</span>for(int i=0;i<2;i++){</span>
<span style="font-family: Verdana; line-height: 18.7199993133545px; white-space: pre-wrap;"><span style="white-space:pre">		</span>Thread t=new Thread(inc);</span>
<span style="white-space:pre">		</span>t.start();
<span style="white-space:pre">		</span>t=new Thread(dec);
<span style="white-space:pre">		</span>t.start();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>private synchronized void inc(){
<span style="white-space:pre">		</span>j++;
<span style="white-space:pre">		</span>System.out.println(Thread.currentThread().getName()+"-inc:"+j);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>private synchronized void dec(){
<span style="white-space:pre">		</span>j--;
<span style="white-space:pre">		</span>System.out.println(Thread.currentThread().getName()+"-dec:"+j);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>class Inc implements Runnable{
<span style="white-space:pre">		</span>public void run(){
<span style="white-space:pre">		</span>for(int i=0;i<100;i++){
<span style="white-space:pre">			</span>inc();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class Dec implements Runnable{
<span style="white-space:pre">		</span>public void run(){
<span style="white-space:pre">		</span>for(int i=0;i<100;i++){
<span style="white-space:pre">			</span>dec();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}
}
}

10, Java有没有goto?
java中的保留字,现在没有在java中使用。

11,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 
    Java 编程语言只有值传递参数。所以是值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用        的方法中改变,但对象的引用是永远不会改变的。
12,说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表  
记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接    表记为空闲,其他调用就可以使用这个连接。
13,new String(s.getBytes("ISO-8859-1"),"GBK")正确吗
	没问题,就是将ISO-8859-1字符集的s变量内容转换为GBK字符集类型。这个只有在页面、后台处理程序、数据库3者之间字符集不一致的情况下使用。
14,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值