Java知识点

jdk jre jvm区别?

jdk包含java就开发环境和运行环境
jre java运行环境,包含java虚拟机和基础库
jvm Java虚拟机,执行字节码
jvm是跨平台的关键

==,equal的区别?

== 比较的是值,基本数据类型比较的是数值, 引用类型比较的是指向的地址(值)
equals Object默认比较的是地址,如果比较内容,需要重写

final

表示不可变,不可继承,不可重写
final 修饰基本数据类型,值本身不可变
final修饰引用类型,引用指向不能改变

String StringBuffer StringBuilder区别

String是final类型,产生新的String对象,将指针指向新的String对象

StringBuffer, StringBuilder可修改
前者线程安全,后者不安全(性能高)

接口和抽象类

抽象类是同类事物的抽取,接口是系统或不同层之间对接标准

List中ArrayList和LinkedList

ArrayList底层是连续的存储空间,拥有数组的特性
在add元素时会检查剩余空间并进行1.5倍扩容
非线程安全
LinkedList是双向链表,非线程安全

synchronized到底做了什么?

IOC与实现注解

public class Book {
    private Integer id;
    private String name;
}
public class User {
    private Integer id;
    private String name;
}
public class BookService {
    public Book getBook(int bookId) {
        return new Book();
    }
}
public class UserService {
    public User getUser(int userId) {
        return new User();
    }
}
public class CartService {
    private UserService userService = new UserService();
    private BookService bookService = new BookService();

    public void addBook() {
        int userId = 1;
        User user = userService.getUser(userId);
        Book book = bookService.getBook(1);
    }
}
public class HistoryService {
    private UserService userService = new UserService();
    private BookService bookService = new BookService();
}
public class OrderService {..}

当多个service都依赖UserService和BookService,因此都需要实例化新的对象来完成调用,但共享一个UserService和BookService完全没有什么问题,也节省了资源。
问题是需要有一个管理者来创建共享资源,为其他service获取已经创建的资源和销毁资源,因此Ioc容器就出现了

HashTable HashMap ConcurrentHashMap

HashMap 不保证顺序, k v都可为空, 非线程安全
影响性能的两个因素capacity和load factor(默认为0.75),当entry数目超过capacity * load factor,就会发生rehash来进行扩容,否则冲突增多,解决冲突用拉链法,会导致get set效率降低。
所以在初始化时capacity应该大于max-entries / load factor
HashTable k,v 不能为空,且为线程安全
ConcurrentHashMap

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!