Java基础常识

简介: 本文简要介绍了Java中String、StringBuilder与StringBuffer的区别,阐述了序列化与反序列化的基本概念,并概述了Java异常体系及常用数据结构,如动态数组、链表、栈、队列、哈希表、红黑树、跳表、B+树等,同时提及IO流的使用与注意事项。

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流

要注意流的关闭

相关文章
|
JavaScript
【JS用法】js判断字符串是否包含某个字符串
【JS用法】js判断字符串是否包含某个字符串
842 0
|
4月前
|
消息中间件 存储 缓存
再次了解kafka
Kafka通过offset机制解决消息重复消费问题,支持手动提交偏移量及唯一ID去重。它保证分区内的消息顺序消费,结合集群、副本与重平衡实现高可用。高性能设计包括顺序读写、分区、页缓存、零拷贝等。数据清理依赖保留时间或大小策略,点对点和发布订阅模式则通过消费者组实现。
|
4月前
|
消息中间件 NoSQL Java
延时实现
本节介绍了多种关闭过期订单的实现方案,包括定时任务、JDK延迟队列、Redis过期监听、Redisson延迟队列、RocketMQ延迟消息及RabbitMQ死信队列。各自优缺点明显,适用于不同业务场景,如定时任务适合小数据量,RocketMQ适合高并发解耦场景,而Redisson则使用简单且高效。选择时需综合考虑系统复杂度、数据量及可靠性要求。
|
4月前
|
存储 缓存 Linux
CPU上下文切换的原理及其在系统调用和进程切换中的应用
本内容深入解析了CPU上下文切换的原理及其在系统调用和进程切换中的应用。详细说明了CPU寄存器、程序计数器在任务切换中的作用,以及系统调用与进程上下文切换的区别。同时探讨了上下文切换带来的性能开销,涉及TLB和虚拟内存管理机制,帮助理解操作系统如何高效调度进程。
|
4月前
|
负载均衡 网络性能优化
了解EMQ
EMQ通过MQTT协议的QoS机制保障消息可靠传输,支持QoS 0、1、2三个等级,分别实现消息最多一次、至少一次和恰好一次传递。对于延迟消息,EMQ X支持通过特殊主题前缀`$delayed/{DelayInterval}`实现延迟发布。点对点通信可通过不带群组的共享订阅(如`$queue/t/1`)实现,结合负载均衡策略如随机、轮询等,确保消息仅由一个订阅者接收;发布订阅模式则通过带群组的共享订阅(如`$share/组名称/t/1`)实现,确保每组一个订阅者收取消息。
|
4月前
|
存储 算法 Sentinel
熔断降级
本内容介绍了微服务中熔断降级的实现原理及Sentinel的底层机制。通过OpenFeign集成Sentinel,利用断路器统计异常和慢请求比例,触发熔断并降级,提升系统稳定性。还讲解了Sentinel使用的限流算法,如滑动窗口、令牌桶和漏桶算法,以应对不同场景下的流量控制需求。
|
4月前
|
Docker 容器
初始ollama
Ollama 按需加载模型,不持续运行,闲置时自动卸载,节省内存。模型响应请求时驻留内存,保留时间由 OLLAMA_KEEP_ALIVE 控制。类似 Docker 部署方式,但无单模型启停命令,默认时间内自动停止。可间接通过停止服务或配置多端口实现管理。
|
4月前
|
SQL JavaScript Java
三层架构理解(实现前后端分离)
本文介绍了三层架构实现前后端分离的流程,从前端Vue发起请求,到后端Spring处理数据,最后返回结果并由前端渲染展示。同时详细解析了Bean重复问题的解决方案,包括使用@Service、@Primary、@Qualifier和@Resource注解进行依赖注入控制。此外还介绍了MyBatis中#{}与${}的区别及使用场景,以及三层架构中各组件的协作方式。
|
4月前
|
SQL Java 数据库连接
事务的七种传播行为及其应用场景
本文介绍了事务的七种传播行为及其应用场景,包括 PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_REQUIRES_NEW 等,帮助开发者理解事务管理机制。同时讲解了 Java 中 SQL 操作与对象数据不同步的问题,强调重新查询与手动管理的必要性,并说明 MyBatis 批量操作的最佳实践。
|
4月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。