java面试

WuYiLong原创大约 2 分钟java面试题

java远程调用的对象流

java 在远程通信时,发送方会把对象变成字节序列,接收方再把字节序列变成对象

已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性。请写一个方法实现对 HashMap 的排序功能,该方法接收 HashMap<Integer,User>为形参,返回类型为 HashMap<Integer,User>, 要求对 HashMap 中的 User 的 age 倒序进行排序。排序时 key=value 键值对不得拆散。

public class App 
{
    public static void main( String[] args )
    {
        HashMap<Integer,User> map = new HashMap();
        map.put(1,new User("张三",20));
        map.put(2,new User("张三1",19));
        map.put(3,new User("张三2",28));
        System.out.println(JSON.toJSONString(map));
        HashMap<Integer,User> users= sortMap(map);
        System.out.println(JSON.toJSONString(users));
    }

    public static HashMap<Integer,User> sortMap(HashMap<Integer,User> users) {
        Set<Entry<Integer, User>> entries = users.entrySet();
        List<Entry<Integer, User>> list = new ArrayList<>(entries);
        Collections.sort(list, new Comparator<Entry<Integer, User>>() {
            @Override
            public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {
                return o2.getValue().getAge()-o1.getValue().getAge();
            }
        });
        LinkedHashMap<Integer, User> hashMap = new LinkedHashMap<>();
        for (Entry<Integer, User> user: list) {
            hashMap.put(user.getKey(),user.getValue());
        }
        return hashMap;
    }
}

ArrayList、HashSet、HashMap是线程不安全的,如何让他们线程安全

List list = new ArrayList();
Set hashSet = new HashSet();
Map map = new HashMap();
Collections.synchronizedList(list)
Collections.synchronizedMap(hashSet)
Collections.synchronizedSet(map)
  • 附加: 在集合中 Vector 和 HashTable 是线程安全的

单例模式

/**
 * @ClassName 单例模式
 * @Description
 * @Author yilongwu
 * @DATE 2020-01-15 15:59
 * @Version 1.0.0
 **/
public class Single { // 饿汉模式
    public static Single single= new Single();
    private Single(){

    }

    public static Single getIntance() {
        return single;
    }
}

public class Single2{ // 懒汉模式
    public static volatile Single2 single = null;
    private Single2(){

    }
    public static Single2 getIntance() {
        if(single == null) {
            synchronized (Single2.class) {
                if(single == null) {
                    single = new Single2;
                }
            }
        }

        return  single;
    }
}

mysql性能优化

  • 当只要一行数据时使用 limit 1
  • 用 not exists 代替 not in
  • 对操作符的优化,尽量不采用不利于索引的操作符,如:in not in is null is not null <> 等
  • 某个字段总要拿来搜索,为其建立索引:
上次编辑于:
贡献者: wuyilong