Java
未读
Java 共享资源同步访问策略
这是一篇关于共享资源的同步访问的文章,介绍了并发编程中如何确保多个线程安全地访问共享资源。线程安全性包括原子性、可见性和有序性,Java提供了多种同步机制来解决这些问题。synchronized关键字可用于同步代码块和方法,实现对共享资源的访问控制,支持对象锁和类锁。volatile关键字确保变量的可见性,但不保证原子性。Java还提供了原子类如AtomicInteger,以及Lock接口和Condition接口用于更灵活的同步控制。通过这些机制,可以确保线程安全,避免竞态条件和数据破坏。
Java
未读
Mockito 模拟
这篇文章介绍了如何使用 Mockito 进行单元测试,特别是在无法直接获取或构造某些数据的情况下。Mockito 是一个开源测试框架,用于模拟复杂数据或场景,以替代真实对象,常见应用场景包括数据库、微服务、Redis、Kafka 等。文章首先简要介绍了 Mockito 的基本概念和常见应用,然后介绍了如何在 Java 测试中使用 Mockito,包括创建 mock 实例、初始化 mock 对象、模拟方法返回值以及如何使用参数化匹配器等技术。还详细讲解了如何验证方法调用次数、使用 Spy 模拟对象的真实方法、使用 @InjectMocks 注解处理依赖注入等高级功能。通过这些技巧,可以在不依赖外部资源的情况下,灵活进行单元测试。
数据库
未读
MongoDB 基础
这篇文章介绍了MongoDB的基本操作和SQL与MongoDB的常见术语对比。首先,解释了SQL和MongoDB的术语差异,如表和集合、行和文档、列和字段等。接着,详细讲解了MongoDB数据库的基本概念和特殊数据库,如admin、local和config等。文章还描述了数据库操作的基本方法,包括选择、创建和删除数据库,集合的创建和删除,以及隐式创建集合的方式。文档的CRUD操作也被详细阐述,包括插入、更新、删除、查询和统计操作。特别提到MongoDB中的文档使用BSON格式,文档字段命名规则,更新时的操作符使用,以及复杂查询(如正则、比较、连接查询等)。最后,介绍了分页查询和聚合查询操作,使用了MongoDB的聚合管道进行数据处理和分组统计等操作。
Java
未读
Java 线程池
这是一篇线程池使用与配置的文章。文章详细介绍了线程池的优势,包括降低系统资源消耗、提高响应速度、方便线程并发管控以及提供更强大的功能如延时定时线程池。接着解释了线程池的主要参数,如核心线程数、最大线程数、线程存活时间、任务队列、线程工厂和饱和策略。文章还阐述了线程池的工作流程,如何判断是否需要创建新线程或将任务添加到队列,并介绍了阻塞队列的使用原因。接着讨论了如何根据任务类型(如CPU密集型、IO密集型和混合型任务)配置线程池,并介绍了Java中提供的四种线程池。最后,文章分析了execute()和submit()方法的不同,并介绍了Future和FutureTask的使用及其实现。
运维
未读
Linux 启动Java服务脚本
这篇文章介绍了一个用于Spring Boot项目的启动、停止、查看状态和重启的Shell脚本集合。start.sh脚本负责启动Spring Boot项目,设置JVM参数、配置日志输出,并通过nohup命令在后台运行应用。status.sh脚本用于检查项目是否正在运行,并输出当前进程ID。stop.sh脚本用于停止正在运行的Spring Boot项目,先通过进程ID找到对应的进程并终止,随后确认进程已被停止。restart.sh脚本则自动调用stop.sh和start.sh脚本,实现项目的重启。
Java
未读
LocalDate、LocalDateTime
1、 获取当前的日期 Java 8 中的LocalDate用于表示当天日期。和 java.util.Date不同,它只有日期,不包含时间。当你仅需要表示日期时就用这个类。 //获取今天的日期
public void getCurrentDate(){
LocalDate today = Lo
Java
未读
Java 多线程常用API
这是一篇关于Java多线程及并发工具类的文章。文章首先介绍了Object和Thread类的常用API,如wait()、notify()、interrupt()、join()等,重点描述了线程间的同步与通信方法。接着,文章讲解了JDK5之后新增的一些并发工具类,包括线程池操作方法、阻塞队列、ConcurrentHashMap、CountDownLatch、CyclicBarrier、Exchanger、Semaphore、Lock、ReadWriteLock等。每个工具类的功能和应用场景进行了简要说明,如线程池的管理、任务的等待和通知机制、锁的使用等。最后,介绍了ForkJoinPool和原子类(AtomicBoolean、AtomicInteger等),这些工具有助于更高效和安全地进行多线程编程。