栈区:前端
堆区:java
方法区:android
程序计数器:ios
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,而后在堆区建立一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,而且向Java程序员提供了访问方法区内的数据结构的接口。程序员
类的生命周期包括这几个部分,加载、链接、初始化、使用和卸载面试
判断对象是否存活通常有两种方式:算法
GC最基础的算法有三种:标记 -清除算法、复制算法、标记-压缩算法,咱们经常使用的垃圾回收器通常都采用分代收集算法。spring
Sun JDK监控和故障处理命令有jps jstat jmap jhat jstack jinfosql
管理方式数据库
空间大小
碎片相关
分配方式
效率
类加载器负责读取 Java 字节代码,并转换成java.lang.Class类的一个实例;有如下几张类加载去:
自定义类加载器须要继承抽象类ClassLoader,实现findClass方法,该方法会在loadClass调用的时候被调用,findClass默认会抛出异常。
使用双亲委托机制的好处是:
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为链接(Linking)
加载、验证、准备、初始化和卸载这5个阶段的顺序是肯定的,类的加载过程必须按照这种顺序循序渐进地开始,而解析阶段则不必定:它在某些状况下能够在初始化阶段以后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。如下陈述的内容都已HotSpot为基准。
Direct exchange(直连交换机):直连型交换机(direct exchange)是根据消息携带的路由键(routing key)将消息投递给对应队列的,步骤以下:
Topic exchange(主题交换机):主题交换机(topic exchanges)中,队列经过路由键绑定到交换机上,而后,交换机根据消息里的路由值,将消息路由给一个或多个绑定队列。
Headers exchange(头交换机):相似主题交换机,可是头交换机使用多个消息属性来代替路由键创建路由规则。经过判断消息头的值可否与指定的绑定相匹配来确立路由规则。 此交换机有个重要参数:”x-match”。
RabbitMQ
kafka
SQL标准中的事务四种隔离级别
InnoDB是一个事务型的存储引擎,支持回滚,设计目标是处理大数量数据时提供高性能的服务,它在运行时会在内存中创建缓冲池,用于缓冲数据和索引。
优势:
缺点:
MyISAM 是 MySQL 5.5.5 以前的默认引擎,它的设计目标是快速读取。
优势:
缺点:
适用场景:
MyISAM适合:
InnoDB适合:
Memcache
Redis
SET key value [EX seconds] [PX milliseconds] [NX|XX]
使用List做为队列,RPUSH生产消息,LPOP消费消息
缺点:没有等待队列里面有值就直接消费
解决方案:
Spring Cloud是一个全家桶式的技术栈,包含了不少组件,其中比较核心的有Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。
Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。每一个服务中都有一个Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。说白了,就是告诉Eureka Server,本身在哪台机器上,监听着哪一个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。服务调用者调用对应服务时,它的Eureka Client组件会找Eureka Server查找对应的服务信息进行调用,而后就能够把这些相关信息从Eureka Server的注册表中拉取到本身本地缓存起来,方便下次调用。
Feign基于动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求。Feign的一个关键机制就是使用了动态代理。
Ribbon的做用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上。Ribbon的负载均衡默认使用的最经典的Round Robin轮询算法。并且,Ribbon是和Feign以及Eureka紧密协做,完成工做的。
基于XA协议的两阶段提交方案
TCC方案
事务开始时,业务应用会向事务协调器注册启动事务。以后业务应用会调用全部服务的try接口,完成一阶段准备。以后事务协调器会根据try接口返回状况,决定调用confirm接口或者cancel接口。若是接口调用失败,会进行重试。
基于可靠消息的最终一致性方案
GTS
当所拦截的方法有指定异常抛出,事务才会自动进行回滚。默认状况下是捕获到方法的RuntimeException异常,也就是说抛出只要属于运行时的异常(即RuntimeException及其子类)都能回滚;但当抛出一个不属于运行时异常时,事务是不会回滚的。若是是其余异常想要实现回滚,能够进行配置。
事务的传播性通常在事务嵌套时候使用,好比在事务A里面调用了另一个使用事务的方法,那么这俩个事务是各自做为独立的事务执行提交,仍是内层的事务合并到外层的事务一块提交那,这就是事务传播性要肯定的问题。spring支持7种事务传播行为:
备注:经常使用的两个事务传播属性是1和4,即PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW
事务的隔离性是指多个事务并发执行的时候相互之间不受到彼此的干扰。
事务的隔离级别也分为四种,由低到高依次分别为:read uncommited(读未提交)、read commited(读提交)、read repeatable(读重复)、serializable(序列化),这四个级别能够逐个解决脏读、不可重复读、幻读这几类问题。
事务特性分为四个:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)简称ACID。
SpringIOC负责建立对象,管理对象(经过依赖注入(DI),装配对象,配置对象,而且管理这些对象的整个生命周期。
依赖注入,是IOC的一个方面。这概念是说你不用建立对象,而只须要描述它如何被建立。你不在代码里直接组装你的组件和服务,可是要在配置文件里描述哪些组件须要哪些服务,以后一个容器(IOC容器)负责把他们组装起来。
调用SpringApplication.run()方法
咱们这里描述的是应用Spring上下文Bean的生命周期,若是应用Spring的工厂也就是BeanFactory的话去掉第5步就Ok了。
本次面试题分享到此为止,限于篇幅,无法在这里给你们分享更多的面试题; 以前不少粉丝一直私信我让我整理一些面试题,近些天终于整理好了,笔者整理了一份包含Kafka、Mysql、Tomcat、Docker、Spring、MyBatis、Nginx、Netty、Dubbo、Redis、Netty、Spring cloud、分布式、高并发、性能调优、微服务等架构技术的面试题和部分视频学习资料;
须要的朋友点击下方传送门, 便可免费领取面试资料和视频学习资料
如下是部分面试题截图