并发编程知识精粹

C++并发编程经典实例与实战精粹 C++11并发库为线程管理、同步机制、原子操作等提供了标准化的API。它包括了<thread><mutex><future><atomic>等头文件,它们支持互斥锁、条件变量、未来(future)和承诺(promise)对象等并发编程元素。C++11提供了一系列的原子操作类,这些类位于<atomic>头文件中,例如和。模板类可以对任何可赋值的类型提供原子操作,而则是一个简单的原子布尔标志。 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

一、并发编程知识体系

并发编程是计算机科学中一个重要的领域,它涉及到多线程、多任务处理以及同步机制等方面。以下是对并发编程知识体系的详细描述,并补充其技术实现细节:

  1. 线程基础 线程是程序执行的最小单位,是操作系统能够进行运算调度的最小单位。线程具有以下特点:

    • 并行性:通过操作系统的时间片轮转调度机制,多个线程可以在同一时间共享CPU资源,从而实现并行执行。
    • 独立性:每个线程拥有独立的栈空间和程序计数器,线程之间的局部变量互不影响。
    • 异步性:线程之间的执行是异步的,线程的创建、调度、执行和终止都是独立的。
  2. 线程生命周期 线程的生命周期包括以下五个阶段:

    • 新建(New):线程创建后,通过Thread类或其子类构造器创建,此时线程尚未启动。
    • 就绪(Runnable):线程创建后,调用start()方法,进入就绪状态,等待CPU调度。
    • 运行(Running):线程被CPU调度执行,执行其任务。
    • 阻塞(Blocked):线程因等待某些资源(如锁、条件变量等)而无法执行。
    • 死亡(Terminated):线程执行完毕或被终止,其资源被系统回收。
  3. 线程优先级 线程优先级表示线程执行的重要程度,优先级高的线程可以获得更多的CPU时间。线程优先级分为以下等级:

    • MAX_PRIORITY:最高优先级,通常为10。
    • MIN_PRIORITY:最低优先级,通常为1。
    • NORM_PRIORITY:默认优先级,通常为5。
  4. 守护线程 守护线程是服务线程,当守护线程结束时,程序不会结束。守护线程常用于后台服务,如垃圾回收器。在Java中,可以通过调用setDaemon(true)方法将线程设置为守护线程。

  5. 线程池 线程池是一种管理线程的方式,它将多个线程封装在一个池中,按照一定的策略进行调度和回收。线程池具有以下优点:

    • 降低系统资源消耗:通过重用线程,减少线程创建和销毁的开销。
    • 提高系统吞吐量:线程池可以并行处理多个任务,提高系统处理能力。
    • 提高线程的可管理性:线程池允许对线程的运行状态进行监控和管理。
  6. 核心参数配置 线程池的核心参数配置包括:

    • 核心线程数:线程池中最小线程数,当任务到达时,会创建一定数量的核心线程来处理任务。
    • 最大线程数:线程池中最大线程数,当任务数量超过核心线程数时,会创建额外线程来处理任务。
    • 队列容量:工作队列的容量,用于存放等待执行的任务。
    • 活跃时间:线程空闲时间,超过该时间后,线程将被回收。
  7. 拒绝策略 线程池的拒绝策略有以下几种:

    • AbortPolicy:抛出RejectedExecutionException异常,直接拒绝任务。
    • CallerRunsPolicy:调用者运行策略,将任务交还给调用者,由调用者处理。
    • DiscardPolicy:丢弃任务,不抛出异常。
    • DiscardOldestPolicy:丢弃最早的任务,然后尝试执行当前任务。
  8. 工作队列类型 线程池的工作队列有以下几种类型:

    • 阻塞队列:ArrayBlockingQueue、LinkedBlockingQueue,支持阻塞操作,如put、take等。
    • 非阻塞队列:SynchronousQueue,不支持阻塞操作,线程必须等待另一个线程准备好数据。
  9. 同步机制 同步机制用于保证线程之间对共享资源的访问顺序,以下为几种常见的同步机制:

    • 锁(Lock):ReentrantLock、synchronized,通过锁定和解锁操作,保证线程对共享资源的互斥访问。
    • 信号量(Semaphore):允许多个线程同时访问一定数量的资源,通过信号量控制线程的并发访问。
    • 读写锁(ReadWriteLock):允许多个线程同时读取资源,但写入资源时需要独占访问。
    • 条件变量(Condition):允许线程在某个条件成立时等待,条件成立时唤醒等待线程。
  10. 悲观锁/乐观锁 悲观锁和乐观锁是两种常见的并发控制策略:

  • 悲观锁:在操作共享资源前,先对资源加锁,保证资源在操作过程中不会被其他线程访问。例如,使用synchronized关键字实现悲观锁。
  • 乐观锁:在操作共享资源时,假设其他线程不会修改该资源,通过版本号或时间戳来检测资源是否被修改。例如,使用CAS算法实现乐观锁。
  1. 读写锁 读写锁是一种支持并发读、独占写的锁,可以提高读操作的性能。以下为几种常见的读写锁:
  • ReentrantReadWriteLock:允许多个线程同时读取资源,但写入资源时需要独占访问。
  • ReadWriteLock:接口,定义了读写锁的基本操作。
  1. 条件变量 条件变量是一种线程间的通信机制,可以用来阻塞或唤醒线程。以下为几种常见的条件变量:
  • Condition:接口,定义了条件变量的基本操作。
  1. 并发集合 并发集合是专门为并发环境设计的集合类,以下为几种常见的并发集合:
  • ConcurrentHashMap:线程安全的HashMap,支持并发读、写操作。
  • CopyOnWriteArrayList:基于写时复制的并发容器,适用于读操作多于写操作的场景。
  1. ConcurrentMap ConcurrentHashMap是一种线程安全的HashMap,以下为其特点:
  • 高并发性能:通过分段锁(Segment Locking)技术,将数据分为多个段,每个段有自己的锁,从而提高并发性能。
  • 支持并发读、写操作:允许多个线程同时读取和写入数据。
  1. CopyOnWrite容器 CopyOnWrite容器是一种基于写时复制的并发容器,以下为其特点:
  • 写操作时,复制原容器,创建新容器,并将新容器的引用赋给容器变量。
  • 读操作时,返回原容器的引用。
  1. BlockingQueue BlockingQueue是一种线程安全的队列,以下为其特点:
  • 支持阻塞操作,如put、take等。
  • 支持并发操作:允许多个线程同时向队列中添加或从队列中取出元素。
  1. 并发工具类 以下为几种常见的并发工具类:
  • CountDownLatch:允许一个或多个线程等待一组事件发生。
  • CyclicBarrier:允许一组线程在到达某个屏障点时等待,然后继续执行。
  • Semaphore:允许多个线程同时访问一定数量的资源。
  1. Phaser Phaser是一种线程同步工具,用于实现多线程间的协作。以下为其特点:
  • 支持线程间的等待、通知、比较等操作。
  • 支持动态增加参与者。
  1. Exchanger Exchanger是一种线程间交换数据的工具,以下为其特点:
  • 支持线程间交换数据。
  • 支持动态增加参与者。
  1. FutureTask FutureTask是一种线程执行结果存储的工具,以下为其特点:
  • 支持线程的异步执行。
  • 支持获取线程执行结果。
  1. 非阻塞算法 非阻塞算法是一种避免线程间锁竞争的算法,以下为几种常见的非阻塞算法:
  • CAS(Compare-And-Swap)算法:通过原子操作比较和交换操作数,实现线程间的同步。
  • Volatile关键字:保证变量的可见性和有序性,避免指令重排。
  1. CAS原理 CAS(Compare-And-Swap)算法是一种无锁算法,用于实现线程间的同步。以下为CAS算法的原理:
  • 比较操作数A和期望值B。
  • 如果A等于B,则将操作数A的值更新为新的值C。
  • 否则,不进行任何操作。
  1. Atomic类 Atomic类是Java并发包中提供的一种原子操作类,以下为几种常见的Atomic类:
  • AtomicInteger:原子操作整型变量。
  • AtomicLong:原子操作长整型变量。
  • AtomicReference:原子操作引用类型变量。
  1. 无锁队列 无锁队列是一种基于CAS算法实现的线程安全队列,以下为几种常见的无锁队列:
  • ConcurrentLinkedQueue:基于CAS算法实现的线程安全队列。
  1. 并发框架 以下为几种常见的并发框架:
  • Netty:高性能的NIO框架,支持异步事件驱动编程。
  • Akka:基于Actor模型的并发框架,支持消息驱动和分布式计算。
  • Disruptor:基于环形缓冲区的并发框架,提供高性能的并发编程模型。
  1. Netty线程模型 Netty是一种高性能的NIO框架,其线程模型如下:
  • BossGroup:负责接收客户端连接。
  • WorkerGroup:负责处理客户端连接后的读写操作。
  1. Akka Actor模型 Akka是一种基于Actor模型的并发框架,以下为Actor模型的特点:
  • 消息驱动:Actor通过发送和接收消息进行通信。
  • 分布式:Actor可以在不同的节点上运行,支持分布式计算。
  • 可扩展:Actor可以根据需要动态增加或减少。
  1. Disruptor环形缓冲区 Disruptor是一种基于环形缓冲区的并发框架,以下为环形缓冲区的特点:
  • 高性能:通过环形缓冲区和无锁算法,提供高性能的并发编程模型。
  • 低延迟:通过环形缓冲区和无锁算法,降低线程间的竞争,减少延迟。

二、MyBatis知识体系

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。以下是对MyBatis知识体系的详细描述,并补充其技术实现细节:

  1. SQL映射 SQL映射是指将Java对象映射到数据库表的操作。MyBatis通过XML或注解的方式实现SQL映射。

  2. 注解映射 MyBatis支持使用注解进行SQL映射,以下为几种常见的注解:

    • @Select:用于定义查询操作,指定SQL语句。
    • @Insert:用于定义插入操作,指定SQL语句。
    • @Update:用于定义更新操作,指定SQL语句。
    • @Delete:用于定义删除操作,指定SQL语句。
  3. 结果集映射 结果集映射是指将数据库表中的数据映射到Java对象的过程。MyBatis支持以下几种结果集映射方式:

    • 结果映射(ResultMap):通过XML或注解定义结果集与Java对象的映射关系。
    • 类型处理器(TypeHandler):自定义类型处理器,将数据库类型转换为Java类型。
  4. 关联查询 关联查询是指查询多个表之间的关系。MyBatis支持以下几种关联查询方式:

    • 一对一关联查询:通过一对一映射关系,查询关联表的数据。
    • 一对多关联查询:通过一对多映射关系,查询关联表的数据。
    • 多对多关联查询:通过多对多映射关系,查询关联表的数据。
  5. 动态SQL 动态SQL是指根据不同的条件生成不同的SQL语句。MyBatis支持以下几种动态SQL方式:

    • 标签:根据条件判断是否执行SQL语句。
    • 标签:根据条件选择不同的SQL语句执行。
    • 标签:遍历集合,生成循环的SQL语句。
  6. OGNL表达式 OGNL(Object-Graph Navigation Language)是一种表达式语言,用于访问和操作对象属性。MyBatis支持OGNL表达式进行结果集映射。

  7. 分支语句 分支语句用于实现SQL映射中的条件判断。以下为几种常见的分支语句:

    • 标签:根据条件判断是否执行SQL语句。
    • 标签:根据条件选择不同的SQL语句执行。
  8. 批量操作 批量操作是指一次性执行多个SQL语句。MyBatis支持以下几种批量操作方式:

    • 标签:遍历集合,生成循环的SQL语句。
    • SqlSession的flushStatements方法:刷新SqlSession中的SQL语句,执行批量操作。
  9. 缓存机制 MyBatis支持一级缓存和二级缓存机制,以下为两种缓存机制的特点:

    • 一级缓存:SqlSession级别的缓存,用于缓存查询结果,避免重复查询。
    • 二级缓存:Mapper级别的缓存,用于缓存查询结果,避免重复查询。
  10. 自定义缓存 MyBatis支持自定义缓存,以下为自定义缓存的方式:

  • 实现Cache接口:自定义缓存实现,实现Cache接口中的基本操作。
  • 使用@Cache注解:在Mapper接口或方法上使用@Cache注解,指定缓存配置。
  1. 代理模式 MyBatis使用代理模式实现动态代理,以下为代理模式的特点:
  • 面向接口编程:通过接口定义Mapper接口,实现动态代理。
  • 动态生成代理对象:通过JDK动态代理或CGLIB技术,动态生成代理对象。
  1. MapperProxy MapperProxy是MyBatis中的动态代理类,用于实现Mapper接口的代理。MapperProxy通过反射机制调用Mapper接口的方法,并执行相应的SQL语句。

  2. 插件拦截 MyBatis支持插件拦截,以下为插件拦截的特点:

  • 插件可以拦截MyBatis的执行流程。
  • 插件可以修改SQL语句、结果集等。
  1. 动态代理执行流程 MyBatis使用动态代理实现Mapper接口的代理,以下为动态代理执行流程:
  • 创建Mapper接口的代理对象。
  • 调用代理对象的方法。
  • 根据方法名查找对应的Mapper方法。
  • 执行Mapper方法。
  1. SqlSession生命周期 SqlSession是MyBatis的核心对象,以下为SqlSession的生命周期:
  • 创建SqlSession:通过SqlSessionFactory创建SqlSession。
  • 使用SqlSession执行数据库操作:通过SqlSession执行查询、插入、更新、删除等操作。
  • 关闭SqlSession:释放SqlSession占用的资源。
  1. 执行器类型 MyBatis支持以下几种执行器类型:
  • SimpleExecutor:简单执行器,直接执行SQL语句。
  • ReuseExecutor:重用执行器,重用预处理语句和连接。
  • BatchExecutor:批量执行器,支持批量操作。
  1. 延迟加载 延迟加载是指在需要时才加载资源,以下为延迟加载的特点:
  • 提高系统性能:减少初始化时的资源消耗,提高系统启动速度。
  • 降低资源消耗:避免提前加载不必要的数据,降低资源消耗。
  1. 扩展机制 MyBatis支持扩展机制,以下为扩展机制的特点:
  • 可以自定义插件:自定义插件,拦截MyBatis的执行流程。
  • 可以自定义结果集映射:自定义结果集映射,实现复杂的映射关系。
  1. 类型处理器 类型处理器用于将数据库类型转换为Java类型,以下为类型处理器的特点:
  • 支持自定义类型处理器:自定义类型处理器,实现数据库类型与Java类型的转换。
  • 可以实现TypeHandler接口:通过实现TypeHandler接口,自定义类型处理器。
  1. 拦截器链 拦截器链是MyBatis中的拦截器执行顺序,以下为拦截器链的特点:
  • 可以自定义拦截器:自定义拦截器,拦截MyBatis的执行流程。
  • 拦截器可以修改SQL语句、结果集等。
  1. 方言支持 MyBatis支持方言,以下为方言的特点:
  • 可以自定义方言:自定义方言,实现数据库特有的语法和功能。
  • 可以实现Language接口:通过实现Language接口,自定义方言。

通过以上对并发编程和MyBatis知识体系的详细描述,相信大家对这两个领域有了更深入的了解。在实际开发中,我们可以将并发编程和MyBatis相结合,提高系统的性能和可扩展性。希望本文对大家有所帮助。

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

Python编程实践项目精粹.zip Python 是一种解释型、高级、通用编程语言,以其简洁明了的语法和强大的功能库而闻名。在开始编写 Python 代码之前,必须确保安装了 Python 解释器。安装完成后,开发者可以使用任何文本编辑器或集成开发环境(IDE)来编写和运行代码。Python的标准库中包含了大量的模块,每个模块都提供了特定的功能。这里举例介绍一些常用的模块并结合案例进行分析。datetime模块提供了操作日期和时间的函数和类,适用于需要处理时间数据的场景。json。 阅读详情

相关推荐

10X Genomics数据实战:手把手教你用Seurat处理单细胞PBMC数据(附完整代码)

本文详细介绍了如何使用Seurat处理10X Genomics的单细胞PBMC数据,从数据获取、质控到降维分析和细胞分群的全流程。通过实战代码演示,帮助研究者掌握单细胞RNA测序数据分析的核心技术,提升对细胞异质性的理解。

weixin_29053577的博客 254

学习记录

编号 书名 学习内容 学习时间 记录的博客 1 《数据结构与算法Java版》 1、什么时间复杂度 2、Big O表示法 3、数组的其他实现 4、栈的实现 5、队列的实现 6、单链表和双向链表、双端链表 7、什么是二叉树 8、红黑树 9、2-3-4树 10、二叉搜索树 2018.10.1-2018.10.20 https://blog.youkuaiyun.com...

BoringError的博客 651

六轴机器人正解

采用的是John H.Craig在【机器人学导论】中的改进DH模型 1.六轴坐标系 2.DH参数 i αi−1\alpha_{i-1}αi−1​ ai−1a_{i-1}ai−1​ did_idi​ θi\theta_iθi​初值 1 0 0 0 0 2 -90 a1a_1a1​ 0 -90 3 0 a2a_2a2​ 0 -90 4 -90 a3a_3a3​ d4d...

m0_37581770的博客 2511

并发编程与MyBatis精粹

不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。并发编程是计算机科学中的重要领域,它允许程序在同一时间执行多个任务,从而提高系统的响应性和资源利用率。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1001

Vscode远程免密连接Linux虚拟机,并配置C/C++运行环境

目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )

m0_56779872的博客 8679

【雷达】一维和二维自适应波束形成(DBF))DBF附matlab代码

1 简介 数字波束形成技术是天线波束形成原理与数字信号处理技术相结合的产物,其广泛应用于阵列信号处理领域.由于电磁工作环境的恶化和大量射频干扰的存在,在极低的信干噪比(SINR)条件下进行目标检测和信息提取十分困难.对于阵列系统,往往采用自适应数字波束形成(ADBF)技术,来抑制强干扰和方向性干扰对有用信号的影响.介绍了数字波束形成器的基本原理及其DSP的实现结构.​ 2 完整代码 clc;clear all;close all;%%%%%%%%%%%%%%%%%一维DBF%%%%%%%%%%%%%

qq_59747472的博客 7269

《Java核心技术·卷 I》知识点精粹总结

这本书适合有一定编程基础(不一定是Java)的学习者,也适合想要巩固和深化Java基础的开发者。它覆盖了Java SE(标准版)的核心特性,是学习后续高级框架(如Spring)的坚实地基。对于读过的人,它可以作为一个优秀的知识点回顾清单,帮你查漏补缺。我的总结将按照书中知识点的递进顺序,从基础到进阶,为你清晰地梳理出整个知识体系。这是本书的核心和精华所在,深入讲解了Java的OOP思想。这本书被誉为Java领域的“圣经”之一,它的特点是。这部分是Java的入门,涵盖了最基本的语法和概念。

千里之外的专栏 1259

AMD机密计算虚拟机介绍

AMD机密计算虚拟机介绍

木简熙的博客 526

C#精粹,一本都不能少

C#与.NET框架,入门 + 进阶 + 精通,外加并发编程实例,8本C#图书,一本都不能少。

图灵教育 3524

couldn‘t upgrade db schema: insert into ACT_GE_PROPERTY values (‘common.sche[已解决]

启动整合了flowable的项目,初始化时报错。flowable没有自动建表, 原因 测试数据库版本是MySQL5.7。经过查询和尝试,原因是:在这个数据库里面,已经有一个数据库里面有activiti的这些表了,它检索的时候全库检索查到它了,所以flowable不去建表了,但是我们指定的这个schema里卖弄还是空的,所以它报了找不到表。解决方法:mysql的链接上加上参数如下,让本schema成为默认的schema。...

JavaPub 6018

9.1 机器人动力学建模

目录9.1 机器人动力学建模一、机器人动力学的基本概念1. 什么是机器人动力学?2. 动力学方程二、机器人动力学建模方法1. 拉格朗日方法2. 牛顿-欧拉方法三、Simulink 中的机器人动力学建模1. 使用 Simscape Multibody 建模示例:构建一个两连杆机械臂的动力学模型。步骤:2. 使用 Robotics System Toolbox 建模示例:构建一个六自由度工业机器人的动力学模型。步骤:四、示例:两连杆机械臂的动力学建模目标:步骤:五、结果分析1. 动态响应2. 参数敏感性六、总结

xiaoheshang_123的博客 626

Java面试进阶指南:高级知识点问答精粹(二)

Java内存模型(JMM)是一个抽象的模型,它定义了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下这些变量如何被不同线程所看到。JMM规定了主内存和工作内存的概念,以及它们之间的交互规则。在并发编程中,JMM确保了多线程间操作的原子性、可见性和有序性。它允许合理的并行执行,同时保证程序结果的正确性。例如,volatile关键字的使用就是基于JMM来保证变量的可见性。强引用:如果一个对象具有强引用,那么它永远不会被垃圾回收器回收。软引用。

Layla_c的博客 672

告别标注地狱!YOLO+CLIP多模态零样本检测全实战:图文联合推理,想检测什么直接输文字,不用训模型

这套方案我给朋友的超市用了快3个月,运行极其稳定,临期商品的检测准确率能到96%,后续加了“货架空货检测”“通道杂物堆积检测”,都是改一行文本就搞定,完全不用重新开发,朋友说省了十几万的定制开发费用。很多做计算机视觉的朋友,总觉得目标检测必须标数据、训模型,其实不是的。现在多模态大模型的能力已经足够强,把YOLO的定位能力和CLIP的图文泛化能力结合起来,就能用极低的成本,搞定绝大多数定制化检测需求。对于我们开发者来说,技术的价值从来不是炫技,而是用最简单的方案,解决最实际的问题。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 516

Java开发工程师面试题!java项目开发案例精粹

前言 今年我也33了,离传说中不好找工作的35岁又更近了。说没有焦虑是对自己撒谎,于是我采访了一些人,自己思考了下,写下了这篇文章,希望能有些共鸣。 先看看大家的态度: 色老力衰,不好忽悠,不能带头加班 老油条,学不动,加班就是磨洋工 关键还是贡献的价值。能不能给业务带来价值 找背书 基本逻辑就是,比你这个难得多的哥们都搞定了,你这点小事根本不再话下 去bat镀镀金,捷径 看看你的上司是咋过来的 不知从何时起,很多企业将入职门槛限定在35岁以下,“35岁”已然成为职场老鸟的魔咒,而近年来有关**“程序员

m0_57768082的博客 329

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 微服务架构核心技术与实践
下一篇: 并发编程与MyBatis深度解析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值