String,StringBuilder 和 StringBuffer 的区别
string 是不可变的内部是final修饰,不适合大量字符的拼接
stringbuilder,StringBuffer动态数组
stringbuilder 不适合多线程,未加锁
StringBuffer已经加锁
什么是序列化与反序列化
- 序列化 = 对象 → 字节流(用于存储或传输)
- 反序列化 = 字节流 → 对象(用于重建状态)
序列化是对象状态的“冷冻干燥”,反序列化是“加水复活”。
序列化:动变静,
反序列化:静变动
说说 Java 中的异常
throwable父类,子类由error和exception,error jvm问题,无法处理,exception分为运行时runtimeexception和其他。运行时异常常见的由空指针异常,除数为0,,处理可以使用throw或者trycatch处理
你知道的数据结构有哪些
线性结构
动态数组:可以扩容,连续存储( ArrayList)
链表:不连续存储,有当前节点,才能找到相邻节点(linkedlist)
栈:先进后出,常用方法pop(出栈) push(入栈)peek(栈顶获取)linkedlist
队列:先进先出, linkedlist实现的是双端队列,常用方法:addfirst,addlast,标准队列off队尾添加。poll队头移除
非线性结构:
优先级队列: 保证优先级高的先出队,实现方式小顶堆(优先级小的都是根节点),或者大顶堆(优先级高的都是根节点)适合流式数据的处理(流式数据:无结束点,持续性)
hash表 key-value结构,根据key生成hash码存储数据value,适合数据的快速查找,实现有 HashMap(初始链表+数组,链表长度大于8数组长度大于64转化为红黑树,单线程首选),Hashtable(线程安全,效率低下)
红黑树:自平衡的二叉查找树,相对线性结构性能较好, TreeMap 属于红黑树
跳表:多级链表结构,链表上有多层索引,层级随机,比红黑树实现简单,性能差不多 。java 中的 ConcurrentSkipListMap 用跳表结构实现,redis 中的 SortedSet 也是用跳表实现
B+ 树:可以自平衡的 N 叉查找树。关系型数据库的索引常用 B+ 树实现
io流
要注意流的关闭