配置文件
- yaml
- properties
CompositeConfiguration conf = new CompositeConfiguration();
conf.addConfiguration(new PropertiesConfiguration("SWC.properties"));
String ts = conf.getString("spark.name");
序列化Serializable
- 对象序列化的定义:将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象。这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新"装配"。像RMI、Socket、JMS、EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳。
- 实现序列化的类必须实现Serializable接口。序列化时,类的所有数据成员应可序列化除了声明为transient或static的成员.
Hashmap
get后,通过函数修改了类里面的东西,那么这个value也就修改了。
![](https://img.haomeiwen.com/i8927033/ee762f302c039aa5.png)
字符间加入符号
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("s1");
list.add("s3");
list.add("s5");
list.add("s7");
System.out.println(String.join(",", list));
}
//结果:s1,s3,s5,s7
代码规范
常量
全局常量和类内常量采用字母全部大写、单词之间加下画线,局部常量采用小驼峰形式
数据结构
- List集合
常用的时ArryList好LinkedList两个集合类。- ArraList是使用数组进行存储。扩容的时候是把数据复制到新数组中。特点:随机访问快速,但是插入和删除速度很慢,因为可能移动其他元素。
- LinkedList的本质是双向链表。特点:插入和删除的速度快,但是随机访问慢。
- Queue集合
先进先出的数据结构FIFO的特性,经常作为Buffer(数据缓冲区)使用。 - Map集合
- HashTable因为性能瓶颈被淘汰。
- HashMap应用广泛,线程不安全。
- ConcurrentHashMap是线程安全的,JDK8中进行了锁的大幅度优化,在多线程并发场景中,优先推荐使用ConcurrentHashMap.
- TreeMap是Key有序的Map类集合。
- Set集合
Set是不允许出现重复元素的集合类型。- HashSet使用HashMap实现的,只是Value固定为一个静态对象,使用Key保证集合元素的唯一性。但是不保证集合的顺序。
- TreeSet使用TreeMap实现的,底层是树结构,保证了集合的有序。
- LinkedHashSet继承自HashSet,内部使用链表维护了元素的插入顺序。
集合初始化
ArrayList使用无参数构造的时候,默认大小为10,如果放入1000个元素,那么需要扩容13次才完成存储,但是如果初始化的时候指定了容量New ArrayList(1000)的话,初始化的时候就会直接分配1000个存储空间,从而避免了被动扩容和数组复制的额外开销。注意,如果这个值很大,而且没有初始化复制,那么会造成很大的额外性能损耗,甚至导致OOM的风险。
默认初始值:ArrayList的是10,HashMap的是16
maven编译报错
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (make-assembly) on project flink_WC: Failed to create assembly: Error creating assembly archive jar-with-dependencies: IOException when zipping org/apache/flink/streaming/connectors/fs/Clock.class: invalid LOC header (bad signature) -> [Help 1]
问题:对应的依赖没下载好,去仓库里删除重新下
解决:删除仓库中的残余,重新下载。
Comparator的理解
// 按照点击量从大到小排序
allItems.sort(new Comparator<ItemViewCount>() {
@Override
public int compare(ItemViewCount o1, ItemViewCount o2) {
return (int) (o2.viewCount - o1.viewCount);
}
});
总结:compare的比较结果如果返回1的话,那么表示要交换位置。如上述代码,o2.viewCount - o1.viewCount如果是1的话,表示o2比较大,那么o2要和o1交换位置,从大到小。
Json的使用
链接:https://www.cnblogs.com/geek1116/p/7413619.html
多线程
一个进程里面可以有多个线程,每个线程最多使用完一个核的CPU
网友评论