java面试题

1.java中的八大基本类型   

int     4字节   

short   2字节

long    8字节

 

float    4字节

double   8字节

 

boolean   1字节

byte   1字节

 

char  2字节

 

2.hashmap:线程不安全的,其中是已键值对的形式存储

hashmap遍历:

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public final class TestClass {

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("a", 12);
        map.put("b", 22);
        map.put("c", 32);
        map.put("d", 42);
        map.put("e", 52);
        
       
      //1.key-value 键值对遍历
        //第一步:entrySet()方法调用迭代器方法iterator(),
        //第二步:用hasNext()方法遍历迭代器,
        //第三步:(Map.Entry)iterator.next();
        
          Iterator iterator = map.entrySet().iterator(); while(iterator.hasNext()){
          Map.Entry entry = (Map.Entry)iterator.next();
          System.out.println(entry.getKey()+" key值");
          System.out.println(entry.getValue()+" value值"); }
         
      
        
        
        //2. 遍历map的值
        //第一步:values()方法调用迭代器方法iterator(),
        //第二步:用hasNext()方法遍历迭代器,
        //第三步:iterator.next();
//        Iterator iterator = map.values().iterator();
//        //Iterator iterator = c.iterator();
//        while (iterator.hasNext()) {
//             System.out.println(iterator.next());
//            
//        }
        
        
    }
    
    
}

3.Linkedhashmap:相比较hashmap  多了两个方法,有afer和behind  。想要输入的顺序和输出的顺序相同,向这个方法,

Concurrenthashmap:线程安全hashmap

Weakhashmap:弱型的,自动会都外部不引用的key。而hashmap只有在移除的时候才会删除key 的值

4.线程安全的集合:

Vector   stack  hashtable  ConCurrentHashmap  

5.reentrantlock的实现和Synchronied的区别:

1.nchronized:Synchronized进过编译,会在同步块的前后分别形成monitorenter和monitorexit这个两个字节码指令。在执行monitorenter指令时,首先要尝试获取对象锁。如果这个对象没被锁定,或者当前线程已经拥有了那个对象锁,把锁的计算器加1,相应的,在执行monitorexit指令时会将锁计算器就减1,当计算器为0时,锁就被释放了。如果获取对象锁失败,那当前线程就要阻塞,直到对象锁被另一个线程释放为止。

2.ReentrantLock:由于ReentrantLock是java.util.concurrent包下提供的一套互斥锁,相比Synchronized,ReentrantLock类提供了一些高级功能,主要有以下3项:

a.等待可中断,持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待,这相当于Synchronized来说可以避免出现死锁的情况。
b.公平锁,多个线程等待同一个锁时,必须按照申请锁的时间顺序获得锁,Synchronized锁非公平锁,ReentrantLock默认的构造函数是创建的非公平锁,可以通过参数true设为公平锁,但公平锁表现的性能不是很好。
c.锁绑定多个条件,一个ReentrantLock对象可以同时绑定对个对象。

 

6.CAS原理及问题:是乐观锁,比较并且交换   CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 

①.CAS容易造成ABA问题。一个线程a将数值改成了b,接着又改成了a,此时CAS认为是没有变化,其实是已经变化过了,而这个问题的解决方案可以使用版本号标识,每操作一次version加1。在java5中,已经提供了AtomicStampedReference来解决问题。

②.CAS造成CPU利用率增加。之前说过了CAS里面是一个循环判断的过程,如果线程一直没有获取到状态,cpu资源会一直被占用。

posted @ 2019-11-11 21:42  旺旺a  阅读(164)  评论(0编辑  收藏  举报