0%

java面试一

java远程调用的对象流

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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是线程不安全的,如何让他们线程安全

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

单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* @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 <> 等

某个字段总要拿来搜索,为其建立索引:

-------------本文结束感谢你的阅读---------