摘要: 更多内容,前往 IT-BLOG 一、概述 死锁是指两个或两个以上的进程在执行过程中,因争抢资源而造成的一种互相等待的现象,若无外力干涉它们将无法推进,如果系统资源充足,进程的资源请求能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。​ 死锁产生的原因:【1】系统资源不足;【2 阅读全文
posted @ 2020-11-18 20:55 Java程序员进阶 阅读(1702) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、并发编程模型的两个关键问题 【1】并发中常见的两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递;【2】在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存 阅读全文
posted @ 2020-11-18 20:45 Java程序员进阶 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 锁主要分为两种:乐观锁和悲观锁,而 synchronized 就属于一种悲观锁,每次在操作数据前都会加锁。乐观锁是指:乐观的认为自己在操作数据时,别人不会对当前数据进行修改,因此不会加锁。如果有人对数据进行了修改,则重新获取修改后的数据,进行操作。直到成功为止。而乐观 阅读全文
posted @ 2020-11-18 20:37 Java程序员进阶 阅读(2128) 评论(0) 推荐(0) 编辑
摘要: 系统性学习,移步IT-BLOG Java 对象拥有一组监视方法:wait()、wait(long timeout)、notify() 以及 notifyAll() 方法,这些方法与 synchronized 同步关键字配合,可以实现等待/通知模式,进行线程之间的通讯。Condition 接口也提供了 阅读全文
posted @ 2020-11-18 20:17 Java程序员进阶 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 一、什么是 Fork/Join框架 更多内容,前往 IT-BLOG Fork/Join 框架是 Java7提供的一个用于并发执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果得到大任务结果的框架。我们通过 Fork和 Join这两个单词来理解一下 Fork/Join框架。For 阅读全文
posted @ 2020-11-18 19:37 Java程序员进阶 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 对象头[每个对象都具有对象头] Mark:对象头的标记(32位),描述对象的 hash、锁信息、垃圾回收标记、年龄;内容包括:①、指向锁记录的指针;②、指向 monitor 的指针;③、GC 标记;④、偏向锁线程 ID;​ 一、偏向锁 偏向锁无法使用自旋锁优化,因为一旦有其他线程申请锁,就破坏了偏向 阅读全文
posted @ 2020-11-18 18:02 Java程序员进阶 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 一、什么情况下会发生栈内存溢出 【1】线程请求的栈深度大于虚拟机所允许的深度,将抛出 StackOverflowError 异常。递归的调用一个简单的方法,不断累积就会抛出 StackOverflowError 异常。【2】如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出 OutOfMemo 阅读全文
posted @ 2020-11-18 18:01 Java程序员进阶 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 一、整体架构 ​ 二、强引用(默认支持) 当内存不足,JVM 开始垃圾回收,对于强引用的对象,就算是出现了 OOM 也不会对该对象进行回收,死都不收。强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾回收器不会碰这种对象。在Java 中最常见的就是强引用,把一 阅读全文
posted @ 2020-11-18 17:51 Java程序员进阶 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 一、为什么要备份 【1】容灾恢复:硬件故障、不经意的 Bug 导致数据损坏,或者服务器及其数据由于某些原因不可获取或无法使用等(例如:机房大楼烧毁,恶意的黑客攻击或 Mysql 的 Bug 等)。【2】人们改变想法:很多人经常会在删除某些数据后,又想恢复这些数据。【3】审计:有时需要知道数据或 Sc 阅读全文
posted @ 2020-11-18 17:47 Java程序员进阶 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 更多内容,移步IT-BLOG 排查思路 【1】定位高负载进程 pid:登录进服务器使用 top 或 top -c命令[ps -ef | grep xxx 命令]查看当前 CPU消耗过高的进程,从而得到进程id。观察各个进程资源使用情况,可以看出进程id为18571的进程,有着较高的CPU占比。按P( 阅读全文
posted @ 2020-11-18 17:45 Java程序员进阶 阅读(305) 评论(0) 推荐(0) 编辑
摘要: kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 一、中间件常识 【1】消息系统分类(两种):1)、Peer-to-Peer:发送到队列中的消息仅仅被一个接收者接收。支持异步 “即发即弃” 的消息传送方式,也支持同步 “请求应答” 阅读全文
posted @ 2020-11-18 17:40 Java程序员进阶 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 一、消息队列的使用场景 ☞ 以下介绍消息队列在实际应用常用的使用场景。异步处理、应用解耦、流量削锋和消息通讯四个场景。【1】异步处理:场景说明:用户注册后,需要发注册邮件和注册短信。 引入消息队列后架构如下:用户的响应时间=注册信息写入数据库的时间,例如50毫秒。发注册邮箱、发注册短信写入消息队列后 阅读全文
posted @ 2020-11-18 17:39 Java程序员进阶 阅读(199) 评论(0) 推荐(0) 编辑
摘要: RabbitMQ 是实现高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源代理软件,也称为面向消息的中间件。支持多种操作系统、多种编程语言。RabbitMQ 服务器使用 Erlang 语言编写,其集群和故障转移是构建在开放电信平台框架上的。 AMQP 阅读全文
posted @ 2020-11-18 17:38 Java程序员进阶 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 一、生产者发送消息的步骤 ​创建一个 ProducerRecord 对象,对象中包含目标主题和要发送的内容。还可以指定键或分区。在发送 ProducerRecord 对象时,生产者要先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。接下来,数据被传给分区器。分区器直接把指定的分区返回。如果 阅读全文
posted @ 2020-11-18 17:36 Java程序员进阶 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从 Kafka文件存储机制和物理结构角度,分析 Kafka是如何实现高效文件存储,及实际应用效果。Kafka 的基本存储单位是分区。在配置 Kafka 的时候,管理员指定了一个用于存储分区的目录清单 阅读全文
posted @ 2020-11-18 17:08 Java程序员进阶 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 消费者不需要自行管理 offset(分组+topic+分区),系统通过 broker 将 offset 存放在本地。低版本通过 zk 自行管理。系统自行管理分区和副本情况。消费者断线后会自动根据上一次记录的 offset 去获取数据(默认一分钟更新一次 offset),同一个分组中的客户不能同时消费 阅读全文
posted @ 2020-11-18 16:17 Java程序员进阶 阅读(2356) 评论(0) 推荐(0) 编辑
摘要: 系统性学习,移步IT-BLOG 一、写日志引发故障 【故障现象】:应用服务集群发布后不久就出现多台服务器相继报警,硬盘可用空间低于警戒值,并且很快有服务器宕机。登录在线上服务器,发现 log 文件夹里面的文件迅速增加,不断消耗磁盘空间。【原因分析】:这是一个普通的应用服务器集群,不需要存储数据,因此 阅读全文
posted @ 2020-11-18 15:42 Java程序员进阶 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 如果把查询看作是一个任务,那么它由一些列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数。通常来说,查询的生命周期大致可以按照顺序来看:从客户端到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其 阅读全文
posted @ 2020-11-18 15:28 Java程序员进阶 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、Mybatis 实现 start 的原理 首先在写一个自定义的 start 之前,我们先参考下 Mybatis 是如何整合 SpringBoot:mybatis-spring-boot-autoconfigure 依赖包: <dependency> <groupI 阅读全文
posted @ 2020-11-18 15:26 Java程序员进阶 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 索引有很多种类型,为不同的场景提供更好的性能。在MySQL中,索引是在存储引擎层而不是服务器层实现。不同存储引擎的索引其工作方式并不一样。也不是所有存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引,其底层实现也可能不同。 一、B-Tree 索引 我们通过提到索引时,多半说的都是 B 阅读全文
posted @ 2020-11-18 15:25 Java程序员进阶 阅读(159) 评论(0) 推荐(0) 编辑