自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(420)
  • 资源 (4)
  • 收藏
  • 关注

转载 RabbitMQ和Kafka到底怎么选?

前言开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个?RabbitMQ架构RabbitMQ是一个分布式系统,这里面有几个抽象概念。broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个队列都分为一个主队列和若干个镜像队列。 mirror queue:镜像队列,作为master que.

2021-02-23 14:54:07 9

原创 linux系统IO概念及文件描述符

2021-02-03 15:00:18 18

原创 计算机总线结构图

![graph TD;A-->B;B-->C;](https://img-blog.csdnimg.cn/20210203142400678.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NodWl4dWUyNA==,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.cs

2021-02-03 14:24:14 26

原创 CPU中的“程序计数器”和JVM内存模型中的“程序计数器”

在理解JVM内存模型中的“程序计数器”时,可能会与CPU中的“程序计数器”混淆。CPU中的“程序计数器”属于硬件层面,如下图中的PC:JVM内存模型中的“程序计数器”属于内存中的一块区域,如下图中的程序计数器:...

2021-01-26 15:51:37 19

转载 JVM体系结构之:本地方法栈

JVM体系结构之五:本地方法栈对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。本地方法可以通过本地方法接口来访问虚拟机的运行时数据区,但不止如此,它还可以做任何它想做的事情。  本地方法本质上时依赖于实现的,虚拟机实现的设计者们可以自由地决定使用怎样的机制来让Java程序调用本地方法。  任何本地方法接口都会使用某种本地方法栈。当线程调用Java方法时,虚拟机会创建一个新的栈帧并压.

2021-01-26 15:48:12 11

转载 程序计数器(PC寄存器)以及java虚拟机栈的存储结构与运行原理的基本介绍

学习内容:1、运行时数据区的结构2、JVM线程的说明3、程序计数器(PC寄存器)4、java虚拟机栈内容详情:1、运行时数据区的结构其中:上面的本地方法栈,程序计数器,虚拟机栈是每个线程都有一份的,堆区和和右边的方法区是线程共享的。一个进程有多个线程,每个线程都有自己的本地方法栈,程序计数器,虚拟机栈,他们共享堆区和方法区。右下角的元数据区和JIT编译产物就是方法区,可以将JIT编译产物认为是不属于方法区的,也可以认为是的,我就先认为是的,只要知道它不是堆区的,这样好描述,而且这个细节也不影

2021-01-26 15:46:03 16

转载 DriverManager与桥接(Bridge)模式

结构型—桥接(Bridge)模式1、意图:  将抽象部分(抽象接口)与它的实现部分(代码实现)分离,使它们都可以独立地变化。  理解:抽象部分是对外展现的接口(api),而实现部分是针对抽象接口提供的不同版本的功能实现,使两者独立变化指两者可以在各自的维度上自由变化,而不会产生太大的影响。如可以在api中添加新的接口,而不影响具体实现部分;可以在实现部分针对特定接口添加新的实现方式,而不影响抽象接口定义。  桥接模式将类的继承关系转变为类的聚合关系(见下图)。对于抽象接口及其实现,Java中

2021-01-22 00:03:37 30

转载 类加载器、双亲委派机制与打破(Driver、TCCL、Tomcat等)

类与类加载器、Class< T>对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每 一个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通俗一些:比较两个类是否“相 等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class文件,被同一个Java虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。这里所指的“相等”,包括代表类的Class对象的equals()方法、isAssig

2021-01-21 23:50:44 20

转载 真正理解线程上下文类加载器(多案例分析)

目录JDBC案例分析JDBC中的SPI校验实例的归属Tomcat与spring的类加载器案例Tomcat中的类加载器Spring加载问题解答源码分析总结前置知识:java类加载器不完整分析#前言此前我对线程上下文类加载器(ThreadContextClassLoader,下文使用TCCL表示)的理解仅仅局限于下面这段话:Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的.

2021-01-21 23:45:27 32

原创 设计模式学习

http://c.biancheng.net/view/1317.html

2021-01-21 20:54:37 21

转载 23种设计模式

零:简单工厂模式(1)设计思想:(a)单个方法(b)多个方法:(2) 应用场景:总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。创建型模式(5种)一 :工厂方法模式(Factory Method)(1)设计思想 :(2)应用场景:其实这个模式的好处就是,如果你现在想

2021-01-21 00:59:31 52

原创 常见数据结构排序算法时间复杂度

2021-01-21 00:35:04 31 1

转载 Restful 应用分析

Restful API 近年来应用越来越广泛,各大互联网公司纷纷推出了自己的 Restful API 服务。本文将从实际应用出发,从 REST 到 Restful 再到 Restful API ,逐一进行介绍和分析。REST 风格REST 风格最早由 Roy Thomas Fielding 博士提出, REST 是一种系统架构设计风格,主要面向基于网络的软件架构设计。这一架构风格,包含了以下一些基本要求:客户-服务器在 REST 风格中,最基本的要求就是对于一个程序来说,应当分离用户接口

2021-01-20 23:21:56 11

转载 深入学习MySQL事务:ACID特性的实现原理

事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。一、基础概念事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。首先回顾一下MySQL事务的基础知识。1.

2021-01-20 22:23:45 42

转载 redis 优化

Redis 单线程为什么还能这么快?因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性 能损耗问题。Redis 单线程如何处理那么多的并发客户端连接?Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到 文件事件分派器,事件分派器将事件分发给事件处理器。Redis 单线程为什么还能这么快?因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性 能损耗问题。Re

2021-01-20 17:40:22 20

转载 Spring、SpringMVC和SpringBoot看这一篇就够了!

一、概念1、SpringSpring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。2、SpringMVCSpring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校

2021-01-20 17:21:03 13

转载 简述SpringAop以及拦截器和过滤器

简述AOP是面向切面编程(Aspect-Oriented Programming)的简称。它不是一项技术,和平常说的OOP(Object-Oriented Programming)一样,它是一种编程思想。这里不再做更多的名词解释。上图:从这个丑陋的图中可以看出,利用AOP后,OOP的Objects 都可以只专注于自己的事情,而不需要去管用户是否登录以及记录本次操作日志的事情了。 而且关于用户的判断以及日志记录的代码也只需要一份,不再关心需要将这些额外的操作加在哪里。实现aop的实现主要有

2021-01-18 23:42:02 13

原创 java并发笔记

java并发笔记一之java线程模型https://www.cnblogs.com/yuhangwang/p/11295940.htmljava并发笔记二之证明 synchronized锁 是否真实存在https://www.cnblogs.com/yuhangwang/p/11295940.htmljava并发笔记三之synchronized 偏向锁 轻量级锁 重量级锁证明https://www.cnblogs.com/yuhangwang/p/11295940.html..

2021-01-14 23:33:53 11

原创 深入浅出计算机组成原理

https://time.geekbang.org/column/article/98872

2021-01-14 22:46:20 40

转载 CPU中的指令周期、CPU周期和时钟周期

计算机中我们常常会混淆指令周期、CPU周期和时钟周期,要区分这些并不难,但要想彻底弄懂这些,就得要求我们对CPU底层有一定了解。一.指令周期指令周期:是指计算机从取指到指令执行完毕的时间计算机执行指令的过程可以分为以下三个步骤:Fetch(取指),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。 Decode(译码),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J

2021-01-14 22:44:00 107

原创 时间单位换算

1s=1000ms=1000000微秒=1000000000纳秒=1000000000000皮秒=10^15飞秒=10^18啊秒=10^21仄秒=10^24幺秒1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)=10^12ps(皮秒)=10^15fs(飞秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)

2021-01-14 22:20:59 14

转载 Redis 主从复制、哨兵和集群原理与区别

简介谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能。复制(Replication):则是负责让一个Redis服务器可以配备多个备份的服务器。Redis正是利用这两个功能来保证Redis的高可用哨兵哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预的问题。Redis哨兵主要功能(1)

2021-01-05 14:17:37 43

原创 Spring数据库连接与Threadlocal

目录关键类:数据库连接放入Threadlocal:从ThreadLocal取数据库连接:关键类:TransactionSynchronizationManager数据库连接放入Threadlocal:TransactionInterceptor.invoke(MethodInvocation invocation)---》TransactionStatus org.springframework.transaction.support.AbstractPlatformTra.

2021-01-04 18:29:06 30

转载 Java8中重要的收集器Collector

Collector介绍Java8的stream api能很方便我们对数据进行统计分类等工作,函数式编程的风格让我们方便并且直观地编写统计代码。例如:Stream<Integer> stream = Stream.iterate(1, item -> item+2).limit(6);// stream.filter(item -> item > 2).mapToInt(item -> item * 2).skip(2).limit(2).su

2021-01-04 15:01:39 15

转载 Mysql中的MVCC

Mysql到底是怎么实现MVCC的?这个问题无数人都在问,但google中并无答案,本文尝试从Mysql源码中寻找答案。 在Mysql中MVCC是在Innodb存储引擎中得到支持的,Innodb为每行记录都实现了三个隐藏字段:6字节的事务ID(DB_TRX_ID) 7字节的回滚指针(DB_ROLL_PTR) 隐藏的ID6字节的事物ID用来标识该行所述的事务,7字节的回滚指针需要了解下Innodb的事务模型。1. Innodb的事务相关概念为了支持事务,Innbodb引...

2021-01-04 10:07:59 11

转载 LRU和LFU的区别

对于web开发而言,缓存必不可少,也是提高性能最常用的方式。无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:://cache查看),还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问,同时也可以降低服务器的负载和压力。那么,了解常见的缓存淘汰算法的策略和原理就显得特别重要。常见的缓存算法LRU (Least recently used) 最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高。 LFU (Least frequ

2021-01-04 09:23:07 41

转载 Redis的过期策略和内存淘汰机制

过期策略  我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效。  如果假设你设置一个一批key只能存活1个小时,那么接下来1小时后,redis是怎么对这批key进行删除的?  答案是:定期删除+惰性删除  所谓定期删除,指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。  注意,这里可不是每隔100ms就遍历所有的设置过期时间的ke.

2021-01-04 09:12:52 20

转载 Redis5.0淘汰策略

作为一个内存数据库,redis在内存空间不足的时候,为了保证命中率,就会选择一定的数据淘汰策略,这篇文章主要讲解常见的几种内存淘汰策略。和我们操作系统中的页面置换算法类似。一、参数设置我们的redis数据库的最大缓存、主键失效、淘汰机制等参数都是通过配置文件来配置的。这个文件是我们的redis.config文件,我们的redis装在了/usr/local/redis目录下,所以配置文件也在这里。首先说明一下我使用的redis是5。也是目前最新的版本。1、最大内存参数关键的配置就在最.

2021-01-04 09:10:25 20

转载 Java 代码是怎么执行的

结合 CPU 理解一行 Java 代码是怎么执行的根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器、控制器、存储设备,以及输入输出设备,如下图所示。我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单元,存储单元。控制单元是 CPU 的控制中心, CPU 需要通过它才知道下一步做什么,也就是执行什么指令,控制单元又包含:指令寄存器(IR ),指令译码器( ID )和操作控制器( OC )。 当程序被加载进内存后,指令就在内存中了,这个时候说的内存是

2021-01-04 00:15:52 98

转载 JVM 执行引擎的作用及工作过程

执行引擎的概述执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构关系,能够执行那些不被硬件直接支持的指令集格式。JVM 的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,...

2021-01-04 00:03:29 28

转载 聊聊Java的字节码

一、什么是Java字节码?借用Algorithm(4th)节选:它是程序的一种低级表示,可以运行于Java虚拟机上。将程序抽象成字节码可以保证Java程序在各种设备上的运行。OK,这个回答可以让我们回到程序执行上来看下一个问题:二、程序是怎么执行的?学习过计算机的同学都应该深恶痛绝一门课程——编译原理,这门课程的主要目的就是向你解释你所见所写的代码的执行过程。我们通常使用的C++、Java、python等等都属于高级计算机语言,但是计算机只能够理解“0”和“1”也就是二进制机器码,所以高级程序语

2021-01-03 22:56:01 15

原创 从电路到cpu

请看这个视频。只看1-7集从最基本的电路到cpu,总共不过80分钟,讲的非常详尽又浅显易懂,而且逻辑清晰层层递进,高中水平可看懂。(已经由CrashCourse字幕组翻译为中文):https://www.bilibili.com/video/av21376839/​www.bilibili.com...

2021-01-03 16:16:38 22

转载 Java多线程Condition接口原理详解

Condition接口提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的Condition接口详解Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition对象关联的锁。Condition对象是由Lock对象(调用Lock对象的newCondition()方法)创建出来的,换句话说,Condition是依赖Lock对象的。Lock lock = new ReentrantLoc

2021-01-03 11:22:59 12

转载 JVM总结

目录1.什么是JVM2.JVM基本结构3.运行时数据区4 hotspot方法区的实现5 堆的结构6 为何新生代要设置两个survivor区7 对象访问定位8 判断对象存活方式9 GC安全点10 GC11 内存回收和分配策略12 GC收集器13 类加载过程1.什么是JVM说一说什么是JVMJVM,即 Java Virtual Machine,Java 虚拟机。它通过模拟一个计算机来达到一个计算机所具有的的计算功能。JVM 能够跨计算机体系结构

2021-01-02 18:27:38 78

转载 浅谈JVM GC算法、垃圾收集器及如何选择

引言GC算法(引用计数/复制/标记清除/标记整理)是内存回收的方法论,垃圾收集器就是算法的落地实现。目前还没有完美的收集器,只是针对具体应用最合适的收集器,进行分代收集。四大GC算法引用计数:每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗,较难处理循环引用,JVM的实现一般不会采用这种方式。复制算法:复制–>清空–>互换 --如此15次后如果还有对象存活则进入老年代(JVM参数MaxTenuringThreshold默认为15)1 复制(eden、survivo

2021-01-02 18:27:14 35

转载 OpenJDK能替代Oracle JDK 吗

Oracle 要对JAVA收费了,许多人说可以用 OpenJDK替代,但这会对应用有影响吗?OpenJDK 项目主要基于 Sun 捐赠的 HotSpot 源代码。此外,OpenJDK 被选为 Java 的参考实现,由 Oracle 工程师维护。关于 JVM,JDK,JRE 和 OpenJDK 之间的区别,Oracle 博客帖子在 2012 年有一个更详细的答案:问:OpenJDK 存储库中的源代码与用于构建 Oracle JDK 的代码之间有什么区别?答:非常接近 - 我们的 Oracle JD

2021-01-02 18:26:33 84

转载 jstat,jinfo,jmap,jhat,jstack

内容大纲:涵盖java以下常用工具的概念和用法,及其常用案例jps,jstat,jinfo,jmap,jhat,jstackjps使用频率最高的JDK命令工具:可以列出正在运行的JVM进程,并可以显示出JVM执行主类和进程号(LVMID:本地虚拟机唯一ID)1.常用命令命令 作用 jps 显示进程号和主类名 jps -l 显示进程号和主类全名 jps -m 输出执行主类main()函数的参数 jps -v 输出启动时JVM参数 2.

2021-01-02 18:26:08 14

转载 基础篇:深入JMM内存模型解析volatile、synchronized的内存语义

先介绍下多进程多线程在linux几种通信方式管道:管道的实质是一个内核缓冲区,需要通信的两个进程各在管道的两端,进程利用管道传递信息 信号:信号是软件层次上对中断机制的一种模拟,进程不必阻塞等待信号的到达,信号可以在用户空间进程和内核之间直接交互 消息队列:消息队列是消息的链表,存放在内存中并由消息队列标识符标识,允许多个进程向它写入与读取消息 共享内存:多个进程可以可以直接读写同一块内存空间,是针对其他通信机制运行效率较低而设计的 信号量:信号量实质上就是一个标识可用资源数量的计数器,它的值总

2021-01-02 18:25:15 26

转载 JVM的Client模式与Server模式

概述JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。1. 当前是Client or Server?使用Java-version命令就能显示出.

2020-12-31 18:08:19 22

转载 -XX:PretenureSizeThreshold的默认值和作用浅析

一、背景《深入理解Java虚拟机》第93页,3.6.2 大对象直接进入老年代。讲到大对象主要指字符串和数组,虚拟机提供了一个-XX:PretenureSizeThreshold参数,大于这个值的参数直接在老年代分配。这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存复制(新生代采用复制算法)。但是这里没讲清楚默认值是多少,默认会不会“大”对象直接进入老年代。二、解析2.1 参考文章找到了一篇相关问题的文章《Frequently Asked Questions

2020-12-31 17:55:33 72 1

全文检索详细设计文档.docx

基于elasticSearch做的全文检索,这是详细设计文档。包括结构化数据的检索,非结构化数据(文档类,如word,pdf等)检索。结构化数据,基于logstash导入。非结构化(文档),可以通过接口,本地扫描/远程扫描进入ES。

2020-03-17

java记事本程序源码

这是一套用java语言开发的记事本程序源码,功能很完善,没有bug。

2011-01-13

hibernate学习笔记

很全比较深的hibernate学习及参考资料 里边是中文繁体的 有些用语比较难懂 但很经典 【Word版】

2009-07-07

JAVA核心知识点整理.rar

JAVA核心知识点整理,针对java体系的一个核心知识点的总结,比较详细和有深度,可以提高和完善自己的能力,对求职面试也有很大的帮助。

2020-01-03

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除