240213Note: 喜马拉雅Java一面
Opened this issue · 0 comments
Geekiter commented
JDK17有啥新特性
- 封闭类,sealed classes,限制那些类可以拓展和实现某个类
- switch语句的模式匹配
- jvm启动时处理并行线程
如何使用Git进行版本控制
初始化:git init
添加到暂存区:git add
提交更改:git commit
提交到远程仓库:git push
为什么用RabbitMQ
RabbitMQ是一个流行的开源信息代理软件,被用于构建分布式系统和大规模信息传递。
- 异步通信
- 消息队列
- 解耦和削峰
- 持久化
- 灵活性
- 可拓展性
线程和进程区别
- 定义
- 线程:线程是进程的一个执行单元,共享进程的资源。一个进程可以包含多个线程
- 进程:进程是一个独立的执行环境,包含独立地址空间、代码、数据和系统资源
- 资源分配上
- 线程:共享同一进程的资源,如内存空间和文件句柄等
- 进程:拥有独立的资源,进程之间的资源不直接共享,需要通过进程间通信IPC实现
- 通信机制
- 线程:可以通过共享的内存空间直接进行通信,但需要注意同步问题
- 进程:通信需要使用IPC机制,如消息队列、管道等
- 开销
- 线程:创建和切换线程的开销较小,因为他们共享相同的地址空间
- 进程:创建和切换进程的开销较大,因为他们需要独立的地址空间和资源
- 健壮性:
- 线程:一个线程的崩溃可能会影响整个进程,因为他们共享相同资源
- 进程:一个进程的崩溃通常不会影响其他进程,因为他们拥有独立资源
总之,线程适用于轻量任务,能够高效实现并发。进程则提供更强的隔离性,适用于需要独立执行环境的场景。
HashTable 和 HashMap 的区别
- 线程安全:
- HashTable是线程安全的,即多个线程可以同时访问一个HashTable实例,这是通过在每个公共方法上添加同步锁来实现的
- HashMap不是线程安全的,如果多个线程同时访问一个HashMap实例,那么其中至少一个线程修改了该HashMap的结构,必须通过外部同步来确保其线程安全
- 空键和空值
- HashTable不允许使用null作为键或值,会抛出nullpointerexception
- HashMap允许使用null作为键或值
- 性能
- 由于HashTable在并发时使用了同步锁,性能可能相对较低
- HashMap在非并发环境下通常更好,因为没有额外的同步开销
- 迭代器
- HashTable和HashMap都是快速失败的,不允许在迭代过程中对结构进行修改。
总得来说,HashMap在性能上比HashTable更优,带不提供线程安全,如果在多线程环境下需要线程安全的键值对存储结构,则可以考虑使用ConcurrentHashMap,这是HashMap的线程安全版本
- HashTable和HashMap都是快速失败的,不允许在迭代过程中对结构进行修改。