Geekiter/geekiter.github.io

240213Note: 喜马拉雅Java一面

Opened this issue · 0 comments

JDK17有啥新特性

  1. 封闭类,sealed classes,限制那些类可以拓展和实现某个类
  2. switch语句的模式匹配
  3. 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的线程安全版本