java技术圈 为您找到相关结果 55

关于java研发工程师面试相关的部分参考

今天受邀去参加了某个公司面试的第二轮复试,今天复试的是公司的一个项目主管,感觉比之前面试的更懂技术一些,还问了一些比较刁钻的问题,在这里记录一些自己的不足和自己觉得比较有价值的东西,作为自己的部分参考。 ①关于docker和vmware优势 docker在磁盘空间上的节省不用说了,MB 与 GB的对比; VMware公司指出虚拟化会只会引入大约2%到4%的性能损失。在Docker容器中运行像Redis这样的应用程序,其性能是完全可以接受的,而其在安全、管理等方面的优势使得Docker容器成为虚拟化方面的推荐选择; Docker的简易性。“Docker为从根本上为简化和加快软件产品的构建提供了巨大的潜力”; docker其他的优势: 轻量级的隔离环境比虚拟机能够更方便和快捷地启动和停止; 可以...阅读全文

博文 2019-04-04 09:45:38 www.allocmem.com

关于java部分知识点的总结(二)

之前一直使用云笔记写自己遇到的一些体会,最近因为工作需要,准备回头梳理下以前自己学习的知识点,想把以前的记录下载博客里,既方便自己以后查阅,同时也能让自己有一个更深刻的记忆。 关于反射: super.getClass() 得到的依然是runtime当前类,若要得到真正的父类,需要用super.getClass().getSuperclass() 虽然这里写的是super,但其实用this也一样 Integer i01=59 的时候,会调用 Integer 的 valueOf 方法, 1 2 3 4 5 publicstaticInteger valueOf(inti) { assertIntegerCache.high>= 127; if(i >= IntegerCache.low&& i ...阅读全文

博文 2019-04-04 09:44:16 www.allocmem.com

[转]静态方法加锁,和非静态方法加锁区别

文地址:http://greemranqq.iteye.com/blog/1974143 今天看了到有意思的题:在静态方法上加锁 和 非静态方法加锁 有什么区别,从而再次引出锁机制的一些理解。 先看方法: // 这是一个很简单的类,里面共享静态变量 num,然后一个静态 和 非静态方法,都加上锁 // 我们假设有两个线程同时操作这两个方法,那么数据能互斥吗? Java代码 public class Walk { public static int num = 100; public static Walk walk = new Walk(); // 静态 public synchronized static int run(){ int i = 0; while (i < 10) { try...阅读全文

博文 2019-04-04 09:46:49 www.allocmem.com

AbstractQueuedSynchronizer的介绍和原理分析

感谢同事【魏鹏】投递本稿。 Dedicate to Molly. 简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和release的方式来操纵状态。然而多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握,需要使用这个同步器提供的以下三个方法对状态进行操作: java.util.concurrent.locks.AbstractQueuedSynchronizer.getState() java.util.concurrent.locks.Abstract...阅读全文

博文 2019-12-04 08:36:15 并发编程网 – ifeve.com

图解Golang的内存分配

一般程序的内存分配在讲Golang的内存分配之前,让我们先来看看一般程序的内存分布情况: 以上是程序内存的逻辑分类情况。 我们再来看看一般程序的内存的真实(真实逻辑)图: Go的内存分配核心思想Go是内置运行时的编程语言(runtime),像这种内置运行时的编程语言通常会抛弃传统的内存分配方式,改为自己管理。这样可以完成类似预分配、内存池等操作,以避开系统调用带来的性能问题,防止每次分配内存都需要系统调用。 Go的内存分配的核心思想可以分为以下几点: 每次从操作系统申请一大块儿的内存,由Go来对这块儿内存做分配,减少系统调用 内存分配算法采用Google的TCMalloc算法。算法比较复杂,究其原理可自行查阅。其核心思想就是把内存切分的非常的细小,分为多级管理,以降低锁的粒度。 回收对象内存...阅读全文

博文 2019-09-11 08:49:15 RyuGou的博客

并发编程

TIP 本文主要是介绍 并发编程-JUC简介 。 1. JUC 简介2. volatile 关键字3. i++ 的原子性问题3.1 CAS 算法4. 并发容器类4.1 ConcurrentHashMap4.2 CountDownLatch(闭锁)5. 创建执行线程的方式三6. 同步锁(Lock)7. ReadWriteLock(读写锁)8. 线程同步锁9. 线程池9.1 线程调度10 Fork/Join 框架参考文章 # 导读【重要】 进入Java多线程进阶篇的学习。初学者通过基础篇的学习,应该已经对多线程的初步使用有了基本概念和掌握。多线程这块知识的学习,真正的难点不在于多线程程序的逻辑有多复杂,而在于理清J.U.C包中各个多线程工具类之间的关系、特点及其使用场景(从整体到局部、高屋建瓴,...阅读全文

博文 2021-12-26 14:31:56 JUC简介 | 智能后端和架构

一文解决内存屏障

内存屏障是硬件之上、操作系统或JVM之下,对并发作出的最后一层支持。再向下是是硬件提供的支持;向上是操作系统或JVM对内存屏障作出的各种封装。内存屏障是一种标准,各厂商可能采用不同的实现。 本文仅为了帮助理解JVM提供的并发机制。首先,从volatile的语义引出可见性与重排序问题;接下来,阐述问题的产生原理,了解为什么需要内存屏障;然后,浅谈内存屏障的标准、厂商对内存屏障的支持,并以volatile为例讨论内存屏障如何解决这些问题;最后,补充介绍JVM在内存屏障之上作出的几个封装。为了帮助理解,会简要讨论硬件架构层面的一些基本原理(特别是CPU架构),但不会深入实现机制。 内存屏障的实现涉及大量硬件架构层面的知识,又需要操作系统或JVM的配合才能发挥威力,单纯从任何一个层面都无法理解。本文...阅读全文

博文 2020-02-20 15:43:00 程序猿说你好

MongoDB运行状态、性能监控,分析 泛城科技技术博客

这篇文章的目的是让你知道怎么了解你正在运行的Mongdb是否健康。 mongostat详解 mongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。 它的输出有以下几列: inserts/s 每秒插入次数 query/s 每秒查询次数 update/s 每秒更新次数 delete/s 每秒删除次数 getmore/s 每秒执行getmore次数 command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令 flushs/s 每秒执行fsync将数据写入硬盘的次数。 mapped/s 所...阅读全文

博文 2019-09-01 12:58:00 泛城科技技术博客

内存屏障

内存屏障(Memory barrier) 为什么会有内存屏障 每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。 用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障是硬件层的概念,不同的硬件平台实现内存屏障的手段并不是一样,java通过屏蔽这些差异,统一由jvm来生成内存屏障的指令。 内存屏障是什么 硬件层的内存屏障分为两种:Load Barrier 和 Store Barrier即读屏障和写屏障。 内存屏障有两个作用: 阻止屏障两侧的指令重排序; 强制把写缓冲区/...阅读全文

博文 2019-06-20 09:18:04 简书

[总结]Spring事务管理中@Transactional的参数

@Transactional注解就代表支持事务管理,@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上。如果这个注解在类上,那么表示该注解对于所有该类中的public方法都生效;如果注解出现在方法上,则代表该注解仅对该方法有效,会覆盖先前从类层次继承下来的注解。 @Transactional 注解只能应用到 public 可见度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错, 但是这个被注解的方法将不会展示已配置的事务设置。 注意仅仅 @Transactional 注解的出现不足于开启事务行为,它仅仅 是一种元数据。必须在配置文件中...阅读全文

博文 2020-03-08 03:08:28 Mobabel

Java并行编程-lock中使用多条件condition(生产者消费者模式实例)_记忆力不好的博客

Java 并发包下的提供Lock,Lock相对于Synchronized可以更好的解决线程同步问题,更加的灵活和高效,并且ReadWriteLock锁还能实现读、写的分离。但线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。阻塞队列(BlockingQueue)就是使用condition的和lock实现的。可以查看:Java并发编程-阻塞队列(BlockingQueue)的实现原理 Condition 那么引入本篇的主角,Condition,Condition 将 Object的通信方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-...阅读全文

博文 2021-06-16 02:44:42 CSDN博客

java的synchronized锁实现与Monitor(管程)机制_ystyaoshengting的专栏

在《操作系统同步原语》 这篇文章中,介绍了操作系统在面对 进程/线程 间同步的时候,所支持的一些同步原语,其中 semaphore 信号量 和 mutex 互斥量是最重要的同步原语。 在使用基本的 mutex 进行并发控制时,需要程序员非常小心地控制 mutex 的 down 和 up 操作,否则很容易引起死锁等问题。为了更容易地编写出正确的并发程序,所以在 mutex 和 semaphore 的基础上,提出了更高层次的同步原语 monitor,管程就可以对开发者屏蔽掉这些手动细节,在语言内部实现,更加简单易用。 不过需要注意的是,操作系统本身并不支持 monitor 机制,实际上,monitor 是属于编程语言的范畴,当你想要使用 monitor 时,先了解一下语言本身是否支持 monit...阅读全文

博文 2021-06-16 02:57:45 CSDN博客

解决linux系统时间不对的问题_qq_39314099的博客

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉 前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金...阅读全文

博文 2020-07-13 15:24:14 CSDN博客_linux时间不对

JAVA并发(2)—PV机制与monitor(管程)机制

登录注册写文章首页下载APP抽奖JAVA并发(2)—PV机制与monitor(管程)机制小胖学编程关注赞赏支持JAVA并发(2)—PV机制与monitor(管程)机制在操作系统中,进程之间经常有互斥和协作两种关系,为了有效处理这两种情况,W.Dijkstra在1965年提出了信号量(semaphore 塞吗佛)和PV操作。 1. 信号量与PV机制 信号量是一种抽象的数据类型,由一个整型S变量和P原语、V原语组成(原语:即不可中断的过程)。并且这个整型变量只能由PV改变。 P(S)意味着S-1,若S-1<0,说明资源不够用,将进程加入到等待队列中; V(S)意味着S+1,若S+1<=0,说明等待队列中存在进程,那么唤醒一个等待进程; 信号是操作系统提供的一种协调共享资源访问的方法。信号量由操作...阅读全文

博文 2021-06-16 02:56:50 简书

锁原理 - 信号量 vs 管程:JDK 为什么选择管程 - binarylei

锁原理 - 信号量 vs 管程:JDK 为什么选择管程 目录锁原理 - 信号量 vs 管程:JDK 为什么选择管程1. 并发编程解决方案 - 信号量 vs 管程1.1 相关概念1.2 信号量 vs 管程2. 信号量(Semaphere)2.1 原理2.2 代码实现2.3 使用场景2.3.1 互斥访问2.3.2 条件访问2.3.3 阻塞队列2. 管程(Monitor)2.1 MESA 模型2.2 互斥2.3 同步2.4 wait() 的正确姿势2.5 notify() 何时可以使用2.6 AQS 和 synchronized 原理 并发编程之美系列目录:https://www.cnblogs.com/binarylei/p/9569428.html 管程和信号量都能解决并发问题,它们是等价的。...阅读全文

博文 2021-06-16 02:49:31 博客园

MGW——美团点评高性能四层负载均衡

本文整理自美团点评技术沙龙第14期:美团背后的故事-你不知道的美团云。美团点评技术沙龙由美团点评技术团队主办,每月一期。每期沙龙邀请美团点评及其他互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。目前沙龙会分别在北京、上海和厦门等地举行,要参加下一次最新沙龙活动?赶快关注微信公众号“美团点评技术团队”。本期沙龙包括三场讲座:美团云Docker平台、美团云对象存储系统、美团四层负载均衡网关MGW。其他几场讲座的图文实录会陆续发表,请继续关注。在高速发展的移动互联网时代,负载均衡有着举足轻重的地位,它是应用流量的入口,对应用的可靠性和性能起着决定性的作用,因此负载均衡需要满足高性能、高可靠两个特点。MGW是美团点评自研的一款四层负载均衡,主要用于替代原有环境的四层负载均衡LVS,目...阅读全文

博文 2021-09-08 03:33:51 美团技术团队

MySQL 加锁处理分析

本文来自:何登成的技术博客 一、背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。 注:MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。 1.1 MVCC:Snapshot Read vs Current Read MySQL InnoDB...阅读全文

博文 2020-07-24 17:02:19 Sina App Engine Blog

Java并发基石——所谓“阻塞”:Object Monitor和AQS(2)_JAVA入门中

(接上文《Java并发基石——所谓“阻塞”:Object Monitor和AQS(1)》) 3、AQS 上文我们较为详细的介绍了Java线程调度中的Object Monitor机制以及其工作情况,本文我们开始介绍Java线程调度中的另一种实现机制AQS,包括它的使用方式和底层工作原理。 3.1、AQS介绍 JAVA中的AQS队列从根本上来讲是基于CAS的典型实现(也是使用volatile关键字的典型案例)。从技术层面的依赖关系上讲它首先依赖于java中的java.util.concurrent.locks.LockSupport类,这个类在本专题之前的文章中已经介绍过,专门用来实现应用程序级别对硬件级别的“同步多线程(SMT)”技术的封装。 同步多线程(SMT) 技术是一种硬件层面的技术,具...阅读全文

博文 2021-06-16 02:47:38 CSDN博客

synchronized 实现原理

1234567891011121314151617181920212223IRT_ENTRY_NO_ASYNC(void, InterpreterRuntime::monitorenter(JavaThread* thread, BasicObjectLock* elem))#ifdef ASSERT thread->last_frame().interpreter_frame_verify_monitor(elem);#endif if (PrintBiasedLockingStatistics) { Atomic::inc(BiasedLocking::slow_path_entry_count_addr()); } Handle h_obj(thread, elem->obj()); ...阅读全文

博文 2021-06-15 02:23:20 小米信息部技术团队

MySQL中lock tables和unlock tables浅析 - 潇湘隐者

MySQL中lock tables和unlock tables浅析 在MySQL中提供了锁定表(lock tables)和解锁表(unlock tables)的语法功能,ORACLE与SQL Server数据库当中没有这种语法。相信刚接触MySQL的人,都想详细、深入的了解一下这个功能.下面就尽量全面的解析、总结一下MySQL中lock tables与unlock tables的功能,如有不足或不正确的地方,欢迎指点一二。 锁定表的语法: LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRIT...阅读全文

博文 2021-06-09 03:48:47 博客园

<转>一个最不可思议的MySQL死锁分析

1 死锁问题背景 1 1.1 一个不可思议的死锁 1 1.1.1 初步分析 3 1.2 如何阅读死锁日志 3 2 死锁原因深入剖析 4 2.1 Delete操作的加锁逻辑 4 2.2 死锁预防策略 5 2.3 剖析死锁的成因 6 3 总结 7 死锁问题背景 做MySQL代码的深入分析也有些年头了,再加上自己10年左右的数据库内核研发经验,自认为对于MySQL/InnoDB的加锁实现了如指掌,正因如此,前段时间,还专门写了一篇洋洋洒洒的文章,专门分析MySQL的加锁实现细节:《MySQL加锁处理分析》。 但是,昨天”润洁”同学在《MySQL加锁处理分析》这篇博文下咨询的一个MySQL的死锁场景,还是彻底把我给难住了。此死锁,完全违背了本人原有的锁知识体系,让我百思不得其解。本着机器不会骗人,既...阅读全文

博文 2020-07-24 17:17:16 阿里云开发者社区

淘宝分布式NOSQL框架:Tair - 如果的事

Tair 分布式K-V存储方案 tair 是淘宝的一个开源项目,它是一个分布式的key/value结构数据的解决方案。 作为一个分布式系统,Tair由一个中心控制节点(config server)和一系列的服务节点(data server)组成, config server 负责管理所有的data server,并维护data server的状态信息;为了保证高可用(High Available),config server可通过hearbeat 以一主一备形式提供服务; data server 对外提供各种数据服务,并以心跳的形式将自身状况汇报给config server;所有的 data server 地位都是等价的。 tair集群的基本概念: configID,唯一标识一个tair集群...阅读全文

博文 2020-11-02 06:38:49 博客园

1.5w字,30图带你彻底掌握 AQS!

点击上方"云时代架构", 右上角选择“设为星标”精品技术文章准时送上!前言AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock), concurrent 包中的各种同步器(如 CountDownLatch, Semaphore, CyclicBarrier)都是基于 AQS 来构建,所以理解 AQS 的实现原理至关重要,AQS 也是面试中区分侯选人的常见考点,我们务必要掌握,本文将用循序渐近地介绍 AQS,相信大家看完一定有收获。文章目录如下锁原理 - 信号量 vs 管程AQS 实现原理AQS 源码剖析如何利用 AQS ...阅读全文

博文 2021-06-16 02:52:41 墨天轮

利用硬链接和truncate降低drop table对线上环境的影响 - billy鹏

众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常。 首先,我们看一下为什么drop容量大的table会影响线上服务 直接执行drop table,mysql会将表定义和表数据全都删除,包括磁盘上的物理文件,也包括buffer pool中的内存数据。 这就分两步,第一步从buffer pool中删除,这会涉及到table_cache的lock,如果持有table_cache的lock,这将导致其他查询都无法执行。这种情况在没有innodb_per_table之前尤为严重。另外,mysql5.5.23之后添加lazy drop table功能,这个功能用来解决mutex on the LRU list。其中心思想就是加锁,找到需要...阅读全文

博文 2021-06-10 09:25:08 博客园

Java阻塞延迟队列DelayQueue原理及使用_Hopefully Sky的博客

阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,从队列中获取元素的消费者线程会一直等待直到队列变为非空。当队列满时,向队列中放置元素的生产者线程会等待直到队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。 在阻塞队列不可用时,这两个附加操作提供了4种处理方式: 抛出异常:当队列满时,插入元素会抛出IllegalStateException;返回特殊值:offer()是入队方法,当插入成功时返回true,插入失败返回false;poll()是出队方法,当出队成功时返回元素的值,队列为空时返回null一直阻塞:当队列满时,阻塞执行插入方法的线程;当队列空时,阻塞执行出队方法的...阅读全文

博文 2021-09-24 03:45:20 CSDN博客_java 延迟队列

深入学习MySQL事务:ACID特性的实现原理 - 编程迷思

事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。 MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。 一、基础概念 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。 首先回顾一下MySQL事务的基础知识。 1. 逻辑架构和存储引擎 图片来源:https://blog.csdn.net/fuzhongmin05/article/details/70904190 如上图所示,MySQL服务器逻辑架构从上往下可...阅读全文

博文 2021-08-17 06:36:55 博客园

Redis系列 | 缓存穿透、击穿、雪崩、预热、更新、降级 - 云+社区

Redis是高性能的分布式内存数据库,对于内存数据库经常会出现下面几种情况,也经常会出现在Redis面试题中:缓存穿透、缓存击穿、缓存雪崩、缓存预热、缓存更新、缓存降级。本篇分别介绍这些概念以及对应的解决方案。目录缓存穿透缓存击穿缓存雪崩缓存预热缓存更新缓存降级缓存穿透当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库中也没有这些数据,我们称这种现象为"缓存穿透"。缓存穿透会穿透Redis的保护,提升底层数据库的负载压力,同时这类穿透查询没有数据返回也造成了网络和计算资源的浪费。解决方案:在接口访问层对用户做校验,如接口传参、登陆状态、n秒内访问接口的次数;利用布隆过滤器,将数据...阅读全文

博文 2022-03-23 12:55:34 腾讯云

Seata 分布式事务 XA 与 AT 全面解析

Seata 分布式事务 XA 与 AT 全面解析 2021-04-23 FUNKYE Seata Seata 目录 1.XA模式是什么? 1.1什么是XA 1.2什么是Seata的事务模式? 2那么什么是Seata XA 模式? 2.1什么是Seata AT(TXC) 模式? 2.2AT 模式如何做到对业务的无侵入 ? AT模式一阶段 2.3 AT 模式如何保证隔离性 AT 模式二阶段提交 AT 模式二阶段回滚 3.为什么支持XA? 4.为什么Seata要支持XA模式? AT与XA的关系 Seata AT与XA的优劣 总结 Seata 是一款开源的分布式事务解决方案,star高达17300+,社区活跃度极高,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 注:本期分享借鉴于Sea...阅读全文

博文 2022-11-12 17:32:05 objcoding.com

java线程wait_Java线程中wait状态和block状态的区别?_weixin_39521835的博客

Thread is in the Blocked state while waiting for the monitor lock to enter a synchronized block or method or to reenter a synchronized block or method after calling Object.wait(). 这个地方是说synchronized会导致线程进入Blocked状态,Object.wait()导致线程进入Waiting状态,Waiting线程被其他线程调用Object.notify()唤醒之后,重新获取对象上的锁的时候也会进入Blocked状态 * The current thread must own this object's ...阅读全文

博文 2022-03-23 12:56:36 CSDN博客

深入理解Akka actor模型

Carl Hewitt 在1973年对Actor模型进行了如下定义:"Actor模型是一个把'Actor'作为并发计算的通用原语". Actor是异步驱动,可以并行和分布式部署及运行的最小颗粒。也就是说,它可以被分配,分布,调度到不同的CPU,不同的节点,乃至不同的时间片上运行,而不影响最终的结果。因此Actor在空间(分布式)和时间(异步驱动)上解耦的。而Akka是Lightbend(前身是Typesafe)公司在JVM上的Actor模型的实现。我们在了解actor模型之前,首先来了解actor模型主要是为了解决什么样的问题。Why modern systems need a new programming model在akka系统的官网上主要介绍了现代并发编程模型所遇到的问题,里面主要提...阅读全文

博文 2023-01-30 02:39:50 知乎

MySQL 优化系列(1)-- InnoDB重要参数优化 - 散尽浮华

1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。 2.之所以选用innodb作为存储引擎的考虑目前来说,InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。...阅读全文

博文 2023-09-13 16:39:23 博客园

高性能队列——Disruptor

背景Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。在美团技术团队它也有不少应用,有的项目架构借鉴了它的设计机制。本文从实战角度剖析了Disruptor的实现原理。需要特别指出的是,这里所说的队列是系统内部的内存队列,而不是Kafka这样的分布式队列...阅读全文

博文 2023-03-03 02:58:41 美团技术团队

Java架构师成长直通车

点击下载:架构师成长直通车第一阶段:单体项目开发与上线(1-5周)第1周 万丈高楼,地基首要在开始系统化成长之初,先从整体上认知大型互联网系统架构演变历程,明确架构师需要具备哪些技术栈与核心能力,之后开始筑基-单体开发。课程安排:1. 大型互联网系统架构演变历程2. Java架构师需要具备的技术栈与能力3. 项目演示与单体架构技术选型4. 前后端分离开发模式与项目分层设计原则5. 聚合工程构建与SpringBoot26. 基于PDMan工具为数据库建模7. 整合HikariCP与MyBatis8. MyBatis数据库逆向生成9. 结合通用Mapper,编写Restful风格Api10. 事务传播详解11. 用户注册/登录流程详解与功能开发12. 整合与优化Swagger2文档Api13. ...阅读全文

博文 2020-07-30 01:29:14 jmterorh

Actor模型是解决高并发的终极解决方案

写在开始一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争。处理各种锁的问题是让人十分头痛的一件事。 传统多数流行的语言并发是基于多线程之间的共享内存,使用同步方法防止写争夺,Actors使用消息模型,每个Actor在同一时间处理最多一个消息,可以发送消息给其他Actor,保证了单独写原则。从而巧妙避免了多线程写争夺。和共享数据方式相比,消息传递机制最大的优点就是不会产生数据竞争状态。实现消息传递有两种常见的类型:基于channel(golang为典型代表)的消息传递和基于Actor(erlang为代表)的消息传递。Actor简介Actor模型(Actor model)首先是由Carl Hewitt在1973定义, ...阅读全文

博文 2023-02-02 04:03:37 知乎

高性能无锁并发框架Disruptor,太强了

Disruptor是一个开源框架,研发的初衷是为了解决高并发下队列锁的问题,最早由LMAX提出并使用,能够在无锁的情况下实现队列的并发操作,并号称能够在一个线程里每秒处理6百万笔订单官网:http://lmax-exchange.github.io/disruptor/目前,包括Apache Storm、Camel、Log4j2在内的很多知名项目都应用了Disruptor以获取高性能为什么会产生Disruptor框架「目前Java内置队列保证线程安全的方式:」ArrayBlockingQueue:基于数组形式的队列,通过加锁的方式,来保证多线程情况下数据的安全;LinkedBlockingQueue:基于链表形式的队列,也通过加锁的方式,来保证多线程情况下数据的安全;ConcurrentLi...阅读全文

博文 2023-02-02 12:22:37 知乎

如此狂妄,自称高性能队列的Disruptor有啥来头? - 博学谷狂野架构师

并发框架Disruptor 1. Disruptor概述 1.1 背景 ​ Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级),基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注,2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。 ​ 目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。 ​ 需要特别指出的是,这里所说的队列是系统内部的内存队列,而不是Kafka这样的分布式队列。 有界无锁 高并发队列 1...阅读全文

博文 2023-03-03 02:58:58 博客园

WEB系统安全之开源软件风险使用评估

本文分享自天翼云开发者社区《WEB系统安全之开源软件风险使用评估》,作者:Coding中国信息通信研究院(China Academy of Information and Communications Technology,以下简称“中国信通院”)在2021年举办的“ OSCAR 开源产业大会”上,发布了《开源生态白皮书》,在其中虽然没有专门阐述开源软件的风险如何防范,但是在其中说明了开源软件的风险和挑战,以及我国在开源治理上的经验。在对WEB系统的开源软件风险进行评估时,需要参考白皮书中的开源治理要求。不管是直接使用开源软件,或者购买使用了开源技术的商业软件都需要去考虑开源技术带来的风险,但是这两种情况规避风险的责任主体不同。在风险评估时,按照违约风险、知识产权风险、技术锁定风险、数据安全...阅读全文

博文 2023-06-30 06:18:23 Tianyiyun

Java 魔法类 Unsafe 详解

本文整理完善自下面这两篇优秀的文章:Java 魔法类:Unsafe 应用解析 - 美团技术团队 -2019open in new windowJava 双刃剑之 Unsafe 类详解 - 码农参上 - 2021open in new window阅读过 JUC 源码的同学,一定会发现很多并发工具类都调用了一个叫做 Unsafe 的类。那这个类主要是用来干什么的呢?有什么使用场景呢?这篇文章就带你搞清楚!# Unsafe 介绍Unsafe 是位于 sun.misc 包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升 Java 运行效率、增强 Java 语言底层资源操作能力方面起到了很大的作用。但由于 Unsafe 类使 Jav...阅读全文

博文 2023-05-23 09:57:08 JavaGuide(Java面试 + 学习指南)

线程池的getActiveCount()不准确问题

线程池的getActiveCount()不准确问题 getActiveCount () 按照 javadocs 的说法是 “Returns the approximate number of threads that are actively executing tasks.” 也就是“返回正在执行任务的大致线程数”,请注意用词 approximate 。 查看一下源码: public int getActiveCount() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { int n = 0; for (Worker w : workers) if (w.isLocked()) ++n; retu...阅读全文

博文 2023-10-25 13:55:46 CSDN博客

Log4j2中的同步日志与异步日志 - Ye_yang

1.背景 Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式。 2.Log4j2中的同步日志 所谓同步日志,即当输出日志时,必须等待日志输出语句执行完毕后,才能执行后面的业务逻辑语句。 下面通过一个例子来了解Log4j2中的同步日志,并借此来探究整个日志输出过程。 log4j2.xml配置如下: ...阅读全文

博文 2023-09-13 16:05:00 博客园

linux中gz文件怎么解压,Linux解压gz文件的命令使用教程及详解_陳寶平的博客

今天小编给带来一篇linux解压方面的资料 Linux解压gz文件的命令有:gunzip命令、gzip命令、tar命令。下面本篇文章就来带大家了解一下 gz文件是一种压缩文件,以.gz或者.tar.gz(.tgz)为扩展名,在Linux、UNIX和OSX下常见,Linux和OSX都可以直接解压使用这种压缩文件。在Windows下常用压缩软件WinRAR打开gz文件,它相当于常见的RAR和ZIP格式。 .gz文件解压 如果是以.gz扩展名结尾的gz文件,可以使用gunzip命令、gzip命令来解压。 gunzip命令 作用是解压文件,使用权限是所有用户。例: gunzip FileName.gz gzip命令 gzip命令是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又...阅读全文

博文 2023-11-08 17:19:05 CSDN博客

[完结26章]Java主流分布式解决方案多场景设计与实战

![1.png](http://static.itsharecircle.com/231221/550e98b48493de30d73d64caedef007f.png) java中常用的分布式方法有哪些呢? 分布式系统分布式存储:GFS,HDFS(HBase) 分布式计算系统: MapReduce 消息中间件: Kafka 分布式处理管理器: Zookeeper RocketMQ : 负载均衡技术 分布式缓存技术: Redis 分布式锁 分布式系统设计 分布式优化策略 众所周知,随着互联网数据井喷式的发展,分布式技术应运而生。分布式因其高性能、高可用、高扩展的特点,成为微服务项目的基石。本篇文章将针对分布式六大主流问题进行多方案对比解析,多场景实战讲解,让大家深度掌握分布式原理和实战。我将...阅读全文

博文 2023-12-21 15:24:24 udbmaidns

Java主流分布式解决方案多场景设计与实战(完结26章)

![1.png](http://static.itsharecircle.com/231221/d93124c8b0c6e84bdc3a958466a8a461.png) 目前主流的Java分布式框架有哪些,学起来难不难? Java的框架主要有:SpringMVC、Spring、Mybatis、Dubbo、Maven、RabbitMQ、Log4j、Ehcache、Redis、Shiro等等 今天就给大家讲讲关于Java主流分布式的一些解决方法,内容包括:JVM锁和MySql锁解决库存超卖问题、基于Redisson框架实现分布式锁及实战&源码深入剖析、基于ZooKeeper实现分布式锁、分布式存储系统Etcd实现分布式锁、实现分布式锁通用SDK与集成、七种分布式事务解决方案、分布式事务Seat...阅读全文

博文 2023-12-21 16:09:06 giadnbhaytgw

首个基于Transformer的分割检测+视觉大模型视频课程(23年新课+源码+课件)

学习资料地址1:https://pan.baidu.com/s/1mpYHRFi68lzNuA8neYI15w 提取码:pwjd 学习资料地址2:https://share.weiyun.com/tnVNHGMD 密码:3fj7iy 自动驾驶是高安全型应用,需要高性能和高可靠的深度学习模型,Vision Transformer是理想的选摔。现在主流的自动驾驶感知算法基本都使用了Vision Transformer相关技术,比如分割、2D/3D检测,以及最近大火的大模型 (如SAM),Vision Transformer在自动驾驶领域的落地方面遍地开花。5一方面,在自动驾驶或图像处理相关算法岗位的面试题中,Vision Transformer是必考题,需要对其理论知识有深入理解,并且在项目中真...阅读全文

博文 2023-11-27 11:15:42 kaidnxhd2023

seata file模式引入springboot项目步骤(不使用注册中心) - 秋雨清笛

seata的官方文档如下 http://seata.io/zh-cn/docs/overview/what-is-seata.html seata-server的启动和配置 从官方下载seata-server安装包https://github.com/seata/seata/releases,下载完成后解压该安装包 tar -xvf seata-server-1.4.2.tar.gz 在配置文件中修改,设置部署模式为file模式 cd seata-server-1.4.2/confvim file.conf 配置文件如下 ## transaction log store, only used in seata-serverstore { ## store mode: file、db、redi...阅读全文

博文 2023-12-19 11:14:12 博客园

Mac 使用 tar 工具压缩到Linux 解压出现警告

在Linux 执行 tar xzf *.tar.gz 出现如下警告 Ignoring unknown extended header keyword 问题描述: tar: Ignoring unknown extended header keyword `SCHILY.fflags' tar: Ignoring unknown extended header keyword `LIBARCHIVE.xattr.com.apple.FinderInfo' tar: Ignoring unknown extended header keyword `SCHILY.fflags' tar: Ignoring unknown extended header keyword `LIBARCHIVE.x...阅读全文

博文 2024-02-12 20:41:36 Laravel China 社区

cnpm和package-lock.json踩过的坑_cnpm 不走package-lock

初步学习vue的时候学会两种创建vue项目的方法: 1.vue init webpack-simple 2.vue init webpack 一开始习惯使用vue init webpack-simple创建项目,发现vue init webpack-simple创建项目不会自动生成package-lock.json文件。(package-lock.json的功能:其实用一句话来概括很简单,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致。)不存在package-lock.json文件,拉取代码后,自己npm install还是有一定包冲突,还是那种很难解决的。 后来知道vue init webpack创建会产生package-loc...阅读全文

博文 2024-02-25 11:49:09 CSDN博客

实战Flink+Doris实时数仓教程

![1.png](http://static.itsharecircle.com/240304/463af8c87f05caafdcc12dd28e673c2a.png) 一、什么是实时数仓 实时数据仓库(Real-time Data Warehouse)是指能够实时地处理和分析数据,使得数据仓库中的数据是最新的、最准确的,并且可以实时响应用户的查询和分析需求的一种数据仓库系统。 与传统的数据仓库相比,实时数据仓库更加注重数据的实时性和对业务的实时响应能力。传统数据仓库通常是每日、每周或每月定期进行数据的抽取、转换和加载(ETL),更新的速度较慢,一般不支持实时查询和分析。而实时数据仓库则更加注重数据的实时性和对业务的实时响应能力,能够在数据发生变化时及时响应用户的查询和分析需求。 二、安装...阅读全文

博文 2024-03-04 11:28:29 feilipu2023nui