自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 java面试大纲(三年工作经验——高级开发工程师、自己总结不喜勿喷)

Java基础一、HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。二、HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小。三、HashMap,HashTable,ConcurrentHashMap的区别。四、极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的。五、HashMap在高并发下如果没有处理线程安全会...

2019-05-23 21:52:47 315

原创 消息中间件

RabbitMQ:采用Erlang语言实现的AMQP协议的消息中间件,最初起源于金融系统,用于在分布式系统中存储转发消息,它在可靠性、可用性、扩展性、功能丰富等方面表现良好 Kafka:采用Scala语言开发的一个分布式、多分区、多副本且基于zookeeper协调的分布式消息系统,它是一种高吞吐量的分布式发布订阅消息系统,以可水平扩展和高吞吐率而被广泛使用 RocketMQ...

2019-05-12 16:45:57 179

原创 Doubbo工作原理

服务定义: 服务是围绕服务提供方和服务消费方的,服务提供方实现服务,而服务消费方调用服务 服务注册: 对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀 对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用,而且对于服务提供方和服务消费方来说,他们还有可能兼具...

2019-05-12 16:29:49 910

原创 kafka高性能原理

Topic: 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上 Partition: 是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition Offset: 消息在Partition中的编号,编号顺序不跨Partition Consumer: ...

2019-05-12 16:24:59 994

原创 redis集群模式、持久化

Redis特点: 存取快速:Redis数据库完全在内存中,因此处理速度非常快,每秒能执行约11万集合,每秒约81000+条记录 数据持久化:Redis支持数据持久化,可以将内存中的数据存储到磁盘上,方便在宕机等突发情况下快速恢复 数据一致性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值 ...

2019-05-12 15:55:54 3719 3

原创 nginx负载均衡

五种负载均衡策略: location /xxx { root html; index index.html index.htm; proxy_pass http://backserver; } 轮询(默认): 每个请求按时间顺序逐一分配到不同的...

2019-05-12 15:25:50 187

原创 分布式事物

BASE理论:BASE理论是对CAP(Consistency:一致性、 Availability:可用性、Partition tolerance:分区容错性)中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency) Basical...

2019-05-12 15:17:25 92

原创 分布式锁实现

基于数据库: 基于数据库的实现方式的核心思想是:在数据库中创建一个表,表中包含自定义业务名字段并在其上创建唯一索引,想要执行某段业务,就使用这个业务名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁 使用基于数据库的这种实现方式很简单,但是对于分布式锁应该具备的条件来说,它有一些问题需要解决及优化: 因为是基于数据库实现的,...

2019-05-12 13:45:06 120

原创 设计模式

1、单例模式 优点: 由于单例模式在内存中只有一个实例,减少内存开支 由于单例模式只生成一个实例,所以,减少系统的性能开销 单例模式可以避免对资源的多重占用 单例模式可以在系统设置全局的访问点,优化和共享资源访问 缺点: 单例模式一般没有接口,扩展很困难 单例对象如果持有Context,...

2019-05-12 11:15:14 95

转载 Java内存模型

java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。1. 定义模型的目标Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。这里说的变量包括实例字段、静态字段和...

2019-05-12 10:29:19 94

转载 Volatile关键字

Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。  在访问volati...

2019-05-12 10:19:20 92

原创 spring cloud

1、zookeeper、spring cloud eureka注册中心: 分布式CAP理论: Consistency(一致性),数据一致更新,所有数据变动都是同步的 Availability(可用性),好的响应性能 Partition tolerance(分区容忍性),可靠性 Zookeeper保证CP,当向注册中心查询服务列...

2019-05-08 14:55:00 122

原创 DB相关知识

1、数据库引擎: oracle中不存在引擎的概念,数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing) OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLTP系统强调数据库内存效率,强调内存各种...

2019-05-08 14:32:37 147

原创 MyBatis相关介绍

1、MyBatis配置: mybatis配置项分别是:properties、settings、typeAliases、typeHandlers、plugins、environments、mappers,这些配置项必须按照先后顺序进行配置 properties: 用于配置属性信息 settings: 用于配置MyBatis的运行时方式...

2019-05-05 16:40:51 143

原创 Spring相关介绍

1、springMVC执行流程: 1.用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问,就是url-pattern的作用,并且会加载springmvc.xml配置文件 2.前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件...

2019-05-05 15:57:53 192

原创 Servlet相关介绍

Servlet的三种创建方式: 1、实现servlet接口,2、继承GenericServlet类,3、继承HttpServlet类Servlet生命周期: Servlet通过调用init()方法进行初始化 Servlet调用service()方法来处理客户端的请求 Servlet通过调用destroy()方法终止(结束) 最后,Servlet是由JVM...

2019-05-04 16:55:58 170

原创 jvm性能调优工具

jconsole:一种基于JMX的可视化监控、管理工具。包括概述、内存(jstat)、线 程(jstack)、类(jstat)、vm概要(jinfo) jvisualvm:主体功能和jconsole差别不大,区别在于:1.具备插件扩展的能力,2.能生成堆、栈的存储快照,3.分析程序性能 Eclipse Memory Analyzer: jps: jp...

2019-05-04 16:25:16 324

原创 jvm垃圾回收

可达性分析算法: 通过一系列的称为GC Roots的对象作为起点,然后向下搜索,搜索所走过的路径称为引用链/Reference Chain,当一个对象到GC Roots没有任何引用链相连时,即该对象不可达,也就说明此对象是不可用的 可作为GC Roots的对象包括: 1、方法区:类静态属性引用的对象 2、方法区:常量引用的对象 3、虚...

2019-05-04 16:14:21 169

原创 jvm问题解决方案

1、什么情况下出现堆溢出?怎么解决? 产生原因: 堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收实例对象,就会在对象数量达到堆最大容量时产生OutOfMemoryError异常 解决办法: 使用-XX:+HeapDumpOnOutOfMemoryError可以让java虚拟机在出现内存溢出时产...

2019-05-04 15:37:14 341

原创 jvm参数配置

内存参数: -Xmx3550m: 设置JVM最大堆内存为3550M -Xms3550m: 设置JVM初始堆内存为3550M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存 -Xss128k: 设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,之前每个线程栈大小为256K。应当根据应用的线程所需内存大...

2019-05-04 13:59:12 261

原创 jvm内存模型

jdk1.6:程序计数器、Java栈、本地方法栈、堆、方法区(包括:运行时常量)jdk1.7:程序计数器、Java栈、本地方法栈、堆(包括:运行时常量)、方法区jdk1.8:程序计数器、Java栈、本地方法栈、堆(包括:运行时常量)、元空间(本地内存)程序计数器: 较小的内存空间,当前线程执行的字节码的行号指示器,各线程之间独立存储互不影响Java栈: ...

2019-05-04 13:41:28 118

原创 阻塞队列

BlockingQueue是一个继承自Queue的接口,在Queue的队列基础上增加了阻塞操作,在BlockingQueue为空时从队头取数据将会被阻塞,因为此时还没有数据可取,一旦队列中有数据了,取数据的线程就会释放得到了数据,如果BlockingQueue有容量限制且满了,那么插入数据的线程将会阻塞,直到队列中有空闲位置可以插入数据了才会释放Queue接口方法: add(e...

2019-05-03 18:10:27 117

原创 java反射简述

java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 Class是一个类,封装了当前对象所对应的类的信息 Class类是一个对象照镜子的结果,对象可以看到自己有哪些属性,方法,构造器,实现了哪些接口等等 对于每个类而言,J...

2019-03-25 17:32:18 205

原创 强引用、软引用、弱引用和虚引用

在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收强引用:强引用就是指在程序代码之中普遍存在的,比如下面...

2019-03-25 17:10:01 131

原创 HashMap、HashTable、ConcurrentHashMap简述

HashMap:JDK1.7中使用一个Entry数组来存储数据,用key的hashcode取模来决定key会被放到数组里的位置,如果hashcode取模结果相同,那么这些key会被定位到Entry数组的同一个格子里,这些key会形成一个链表 JDK1.8中使用一个Node数组来存储数据,但这个Node可能是链表结构,也可能是红黑树结构,如果插入的key的hashcode取模结果相同,那么这些...

2019-03-18 17:26:53 164

原创 synchronized与lock的区别

synchronized: synchronized关键字最主要有以下3种应用方式:修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁 Java对象头和monitor是实现synchronized...

2019-03-18 17:02:11 110

原创 Java类初始化顺序

静态代码块:用staitc声明,jvm加载类时执行,仅执行一次,静态代码块是由类调用的,类调用时先执行静态代码块,然后才执行主函数的,静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的,一个类中可以有多个静态代码块 构造代码块:类中直接用{}定义,每一次创建对象时执行,构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的...

2019-03-18 14:37:17 148

原创 JDK动态代理和CGLIB动态代理简单区别介绍--实例

静态代理的缺点很明显:一个代理类只能对一个业务接口的实现类进行包装,如果有多个业务接口的话就要定义很多实现类和代理类才行,而且,如果代理类对业务方法的预处理、调用后操作都是一样的(比如:调用前输出提示、调用后自动关闭连接),则多个代理类就会有很多重复代码。JDK动态代理所用到的代理类,在程序调用到代理类对象时才由JVM真正创建,JVM根据传进来的业务实现类对象以及方法名,动态地创建了一个代理类...

2019-03-03 22:57:17 325

空空如也

空空如也

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

TA关注的人

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