自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java面试知识点梳理(中级)

一.最近比较有时间,就想回忆梳理一下java的知识点,目前是第一期,陆续会不断更新。xmind文件下载链接:https://pan.baidu.com/s/1wi25EaDmXhpXF8oJTmoVSQ 提取码:yo8j

2020-08-28 13:59:00 290

原创 @Transactional失效的场景及原理

1.@Transaction修饰的方法为非public方法,这个时候@Transaction会实现。失败的原理是:@Transaction是基于动态代理来实现的,非public的方法,他@Transaction的动态代理对象信息为空,所以不能回滚。2.在类内部没有添加@Transaction的方法,调用了@Transaction方法时,当你调用是,他也不会回滚测试代码如下@Service...

2019-10-11 14:46:22 11426

原创 设计模式-单例模式

1.简单的介绍一下单例模式(1)什么是单例模式?单例模式java里面常用的一种设计模式,他从系统启动,到结束,该类都只有一个实例对象在内存里面,并且提供了获取这个实例的方法。(2)单例模式有哪几种实现的方式?饿汉模式,饿汉-静态代码块模式,懒汉-同步模式,懒汉-双重锁检查模式,懒汉-内部类延迟模式,注册模式2.接着介绍饿汉模式:(1)饿汉模式是在代码初始化的时候就创建对象的,懒汉模式是线程...

2019-10-10 14:39:25 194

原创 设计模式-工厂模式

1.首先我们先简单的介绍一下工厂方法(1)什么是工厂方法?工厂方法是一种设计模式(2)工厂方法有什么用?工厂方法主要是用来解决用户与产品之间的问题,他可以向用户隐藏产品的复杂的创建过程,从而可以向用户批量化,标准化的提供对象。(3)工厂模式又可以细分为多少种?他可以又分为简单工厂模式、工厂方法模式、抽象工厂模式2.首先我们来接单的介绍一下简单工厂模式:(1)什么是简单工厂模式?他可以想象...

2019-10-10 10:52:54 135

原创 ReentrantLock原理浅析

一.简单概括1.1Java.util.concurrent juc包里面的类实现的核心是AQS(AbstractQueueSynchronizer)抽象队列同步器,要分析ReentrantLock的实现的原理,离不开分析AQS和AQS与ReentrantLock之间的关系二.分析AQS(AbstractQueueSynchronizer)2.1:AQS(AbstractQueueSynchr...

2019-10-09 17:22:21 214

原创 zookeeper简介

一.什么是zookeeperzookeeper是开源的分布式协调框架,提供地址管理,服务发现等功能,让开发者更加的关注程序的本身,而不是服务之间的协调调用。二.zookeeper的功能1.地址管理2.发现服务的上下线3.程序的配置三.zookeeper的数据结构zookeeper的数据结构有点类似于文件夹的,一个znode下面可以又有多个节点,没有节点的数据结构都是k-v的模式zo...

2019-10-09 11:57:01 181

原创 计算机网络TCP/IP协议

一.计算机网络的七层架构1.物理层2.数据链路层3.网络层4.传输层5.会话层6.表示层7.应用层二.TCP/ip协议1.TCP/IP协议不是TCP协议和IP协议的合称,而是对整个因特网的TCP/IP协议的族称。TCP/IP协议包括四个层:网络接口层,网络层,传输成,应用层传输层主要包括两个端对端的协议:TCP-传输控制协议,他是可靠的,UDP-用户报文协议,不可靠的三.TC...

2019-09-27 22:56:50 297

原创 深入了解kafka(四)

一.学习kafka的副本机制(replic)1.为什么我们需要副本机制我们知道kafka的每一个topic下面都可以多个partition,各个partition会均匀的分布在broker上面,但是我们每一个partition都只有一个,如果某一个broker挂掉了之后,那么这个broker上面的消息就没有办法被消费了,所以kafka为了提高partition的可靠性而提出了副本的概念,通过副...

2019-04-19 11:19:26 345

原创 深入了解kafka(三)

1.kafka消息的存储原理1.简要说明:在kafka中,一个topic下面会有多个partition,partition在磁盘上是存在物理路径的,在partition目录下存放着kafka对应的日志文件。(我们存了哪些文件)总结我们partition下存了哪些文件:index,log.timeindex2.kafka会使用分段的方式(LogSegment)来存储数据,LogSement只...

2019-04-17 11:47:28 387

原创 深入了解kafka(二)

1.kafka中topic的概念在kafka中,topic只是存储消息的一个逻辑的概念,他并没有实际的文件存在磁盘上,可以认为是某一类型的消息的集合。所有发送到kafka上的消息都一个类型,这个类型就是他的topic。在物理上来说,不同的topic的消息是分开存储的。同时,一个topic可以有多个producer和多个consumer。2.kafka中partition的概念每个topic...

2019-04-16 17:12:11 422

原创 深入了解kafka(一)

1.什么是kafka1.kafka是一筐高效的消息发布订阅消息中间件,具有高吞吐量,内置分区,冗余,容错等等的特点2.他使用的是Scala语言编写完成的。2.kafka有什么应用场景1.用户行为跟踪2.日志收集系统:ELKK3.kafka的架构:1.一个kafka包含会包含若干个producer(消息的生产者),若干个broker(支持kafka进行水平扩展),若干个consumer...

2019-04-15 16:07:15 341

原创 mysql性能优化(二)

Profiling(DBA)使用profiling可以查看sql的占用CPU ,I/O的使用情况,具体的使用方法为:1.set pfofiling=1;2.select XXXXXXXXX (需要分析的sql)3.show profiles;之后就会出现对应的查询序列的ID,有对应的cpu占用的时间4.show profile cpu,block,io for query xx;...

2019-04-01 21:10:55 255

原创 mysql性能优化(一)

锁MySQL里面的所分为表锁和行锁不同存储引擎它的锁也不一样,Innodb有表锁和行锁,而mysiam只有表锁具体的操作验证Innodb的(索引字段)行锁1.set autocommit=0 取消自动提交2.使用A,B两个窗口分别update同一行数据,过滤条件必须是索引,因为索引是行锁,非索引是表锁A窗口先update数据,B窗口后update数据,发现B阻塞了然后使用A,B窗...

2019-04-01 21:10:46 307

原创 mysql的性能优化介绍(二)

为什么使用好索引可以优化性能因为无论是在Innodb还是在mysiam里面,他们底层的数据都是存放在.idb或者.mdb文件夹里面,当没有索引的时候,他们遍历表里面的每一行数据,无论是IO还是CPU使用率都会占用比较高,导致性能问题,而使用索引,可以通过索引获取到对应的内存地址,迅速地查找到数据,如图:MySQL性能优化的关键是索引:在MySQL的存储引擎中,Innodb和mysiam使用...

2019-04-01 21:10:35 206

原创 JVM性能调优(二)

使用jstack如何发现死锁?使用jstack观察程序有没有死锁的时候,首先检索文件,看看有没有dead lock这些字眼,接着就要检测有没有blacked这些字眼使用MAT分析发现内存泄漏的问题1.首先调用-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/home/administrator/james/error.hprof然后就可...

2019-04-01 21:10:25 288

原创 JVM性能调优(一)

如何查看当当前的垃圾回收器-XX:+PrintFlagsFinal-XX:+PrintCommandLineFlagsserver(64bit版本的JDK,默认使用的是Parallel Scavenges) client(32bit的可选)MBean如何分析GC日志1.首先你需要打印输出GC日志-XX:+PrintGCTimeStamps-XX:+PrintGCDetails...

2019-04-01 21:10:16 163

原创 JVM垃圾回收机制(三)

知识点补充G1垃圾回收器:garbage first,G1垃圾回收器是吧内存分成很多块,每次GC的时候回收内存最大的哪一块,G1每块大小为1-32M,最多有2000块2.由于GC线程与用户线程是共享堆内存的,那么就存在GC线程与用户线程之间的协调问题。(1)协调方式有两种:抢占式的:就是GC线程主动的去发现安全点,当用户线程运行到安全点时,且有需要进行swt时,GC线程进行垃圾回收主动...

2019-04-01 21:10:08 281

原创 JVM垃圾回收机制(二)

什么样的对象,在什么条件下回收(1)强引用:Object object = new Object();强引用的对象需要在判断引用计数法,或者可达性分析法下判断是否需要被回收(2)软引用:在新生代内存满了,进行GC的时候会进行回收,常用在缓存的用途(3)弱引用:每次GC的时候都会被回收JVM的回收算法(1)标志-清除算法 (主要是使用在CSM垃圾回收器上面)缺点:不连续会产生大量的空间...

2019-04-01 21:09:59 137

原创 JVM垃圾回收机制(一)

分析Java堆对象的生命流程1.对象在内存分配(1)内存规整的情况:内存规整的时候添加一个对象,指针就会下滑,但是会存在多线程的情况下,会存在指针碰撞的情况,使用CAS会降低性能,所以使用了一个叫栈上分配方法(2)内存不规整的时候:内存不规整的时候使用的是标志空闲法。(3)任何新的对象都会进入新生代的eden区2.对象的GC回收理解GC过程:理解:新创建的对象会进入到新生代的ed...

2019-04-01 21:09:49 170

原创 JVM介绍

什么是JVM1.软层面的机器翻译:我们编写的java文件,编译后会被编译为class文件,之后会被类加载器加载到JVM里面,而JVM则把他翻译为计算机可以读懂的语言2.内存管理(GC),Java对比与C,C++这些语言最大的优势就是可以实现GC内存回收。Java运行时数据区1.Java运行时数据区包括:程序计数器,虚拟机栈,本地方法方法栈,方法区,堆简述运行时数据区的各个组成:1....

2019-04-01 21:09:38 173

原创 mysql的性能优化介绍(一)

首先我们关注一下MySQL的总体的架构细说SQL LAYER思想的逻辑类似于我们的写的server服务,其实他就是一个MySQL的server服务比较关注的点是:1.我们的查询缓存模块:当我的查询在查询缓存模块已经获取到数据的时候,我们就不会进行下面的流程了,我的可以设置查询缓存模块的大小我们关注的存储引擎无论是关系型数据库,还是No SQL它底层存储的数据都是文件在MySQL里...

2019-03-23 12:16:34 321

原创 认识nginx(1)

一.nginx的安装过程解压安装包./configure --prefix=/XXX/XXX(默认不修改是在user/local目录下面)make && make install (可能会遇到缺少openssl、pcre)yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel、yum ins...

2020-03-08 19:57:05 160

原创 简单理解springboot自动装配的原理

一.概要首先我们都知道所有的springboot的程序的入口都是有一个@SpringBootApplication来作为程序的入口的,接下来,我们来观察这个注解,其实他是一个复合的注解,点进去,源码如下:@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBo...

2020-03-03 11:20:00 987

原创 java排序算法-选择排序和插入排序

选择排序1.选择排序的时间复杂度为O(n^2),数据规模越小越好。2.步骤(1)在没有排序的数中,选择最小的一个数放在第一位(2)接着在剩余的数中继续选择到最小的一个数,放在已经排序的数后面。(3)不断重复2.算法的具体的实现:(1)关键是:遍历的n-1伦,假设每轮的第一个数为最小的数据,随后和这个数后面的数进行遍历比较,得到最小数,判断下标是否相同,不相同的话,则需要交换。pac...

2019-11-04 08:38:35 142

原创 redis缓存一致性的问题

简介1.在系统中,我们经常使用redis来作为缓存,存储一些数据变化频率低的热点数据,这是处理高并发的常规做法,他可以减少数据库的压力,但是随之而来的是redis数据和db数据的一致性的问题。是先更新(淘汰)缓存,还是先更新db1.在更新缓存和更新db的两个操作之间,明显的不是原子性操作,在这里,我们建议先更新或者是淘汰缓存,然后再更新db,原因如下:(1)如果先更新缓存,那么在更新db的...

2019-11-03 13:34:00 289

原创 分布式系统session一致性的解决方案

遇到的问题1.在分布式集群中,我们该如何确保每一次用户访问集群的session都是原来的session解决方案1.基于服务器端(1)基于session stcikly:他可以在用户登录的时候,将这个session与集群的一台机器绑定起来,以后这个session的请求都会落到这台机器上面。(2)将session复制到集群中的每一台机器上面(3)使用缓存,例如redis等等保存sessio...

2019-11-02 17:39:21 495 1

原创 mysql优化-explain和索引有效性分析

定位有效率问题的sql1.通过开启慢查询日志来定位有效率问题的sqllog_output=fileslow_query_log=onslow_query_log_file = /tmp/mysql-slow.loglog_queries_not_using_indexes=onlong_query_time = 12.如果你是使用阿里巴巴的Druid数据源的话,可以接入阿里巴巴的数...

2019-11-02 11:58:56 201

原创 ThreadPoolExecutor原理和使用

一.ThreadRoolExecutor简介1.ThreadRoolExecutor的继承关系如下图:2.ThreadRoolExecutor里面的属性和方法,还有内部类:二.分析ThreadRoolExecutor执行流程及原理1.首先我们来分析的他的构造函数: Executor executor = new ThreadPoolExecutor(10, 10, 1000L, Ti...

2019-10-24 10:45:10 851

原创 Redis-认识Redis的其他功能

一.简介1.Redis除了提供5种类型的数据之外,还提供能很多其他的功能,比如慢查询分析、PiPeLine(流水线)、事务与Lua、消息队列功能等等二.慢查询分析1.很多的关系型数据库例如mysql,都能提供输出打印慢查询日志,进行慢查询分析,redis也一样,一般当命令的执行时间超过一定的阈值,就会记录到慢查询。2.首先,我们来分析一下一个命令他的执行过程,(1)客户端发送命令道red...

2019-10-23 11:34:09 172

原创 java排序算法-桶排序和计数排序

一.桶排序1.算法的原理:待排序的数据分别放进几个有序的桶里面,然后再在桶里面进行排序,接着把按顺序从桶里面一个个取出,这时候的数据已经是有序的了。算法的实现:/** * @author zhouyongquan * @date 2019/10/22 上午10:18 * @description */public class BucketSortTest { //桶排序的...

2019-10-22 15:38:45 171

原创 spring源码分析-springAOP

一.实现的原理简介1.我们都只知道AOP是基于代理模式来实现的,这里我们来思考spring是如何基于动态代理来实现AOP?通过分析,他实现的大概的流程如下图:接着,我们用代码来实现一个基于注解模式的简单的spring AOP,代码如下:import org.springframework.stereotype.Component;/** * @author zhouyongquan...

2019-10-21 21:33:25 126

原创 java排序算法-冒泡排序和基数排序

一.冒泡排序冒泡排序是经典的排序算法,他的算法思路如下:就像一个气泡从水底升到水面一样,他在上升的过程中不断变大,最后的数总是最大的,因此它是两两之间不断比较,如果前一个数,比后一个数要大,则需要交换位置。比较轮数是总数量-1,每一轮的比较次数是总数量-已经排好的数量-1,代码如下:public void bubbleSort(int[] testArray) { if (0...

2019-10-18 18:03:25 168

原创 Redis-初步认识Redis

一.简介1、究竟什么是Reids? Redis是基于key-value的NoSql数据库,他的数据类型有五种,包括string,hash,list,set,zset。它具有一下几个特点:速度快、支持主从复制、支持事务、支持持久化、支持分布式和高可用等等特点。2、我们程序元在日常中有什么场景会使用到Redis? (1)我们经常拿Redis用作缓存(2)用来做排行榜系统(3)也可以用来做计数器,类...

2019-10-18 11:40:15 308

原创 spring源码分析-springMVC

一.springMVC简介1.springMVC是什么?springMVC是spring的一个模块,他是一个webmvc模块,有M(model),V(view),C(controller)三个组成部分。2.springMVC做了什么?简单来说他就是接收到客户端请求,人后controller逻辑处理,V返回页面3.springMVC他的工作过程是怎样的?他的工作过程如图所示,接着我们要分析...

2019-10-17 10:00:43 150

原创 ThreadLocal浅析

一.ThreadLocal简介1.ThreadLocal是用来存储线程级别的变量的,他的目的是降低同一个变量在同一个线程里面来回切换造成的开销。他存储的变量是绝对的线程安全的,一般我们在实在的应用中用在回话session里面比较多:代码如下private static final ThreadLocal threadSession = new ThreadLocal();public sta...

2019-10-15 12:03:02 134

原创 spring boot自动配置原理简介

1.简单介绍一下spring boot的自动配置:使用spring boot带来的最大的好处莫过于他的自动配置,他给程序员带来的极大的便利。在spring的程序中,我们使用@SpringApplication注解来创建一个spring boot程序,并且作为程序的入口,需要理解的是@SpringApplication是一个复合注解,点击去看,他的代码如下:@Target({ElementType...

2019-10-11 18:05:49 290

原创 https的原理

一.https:1.https是基于对称加密和非对称加密实现的。2.如果只是使用对称加密:存在的问题是没有爆发将秘钥从服务器端广播到各个客户端3.如果只是使用非对称加密:存在的问题是如何将公钥安全送到客户端https的原理过程:(1)服务器端将(公钥)FK.PUB送到客户端(2)客户端将(对称加密)DK+(私钥)FK.PRI发送的服务器端(3)服务器端解密,解密正确,DK存到...

2019-10-09 10:28:49 213

原创 分布式锁的实现和使用

一.代码public class RedisLock { private static Logger logger = LoggerFactory.getLogger(RedisLock.class); private RedisTemplate redisTemplate; private static final int DEFAULT_ACQUIRY_RESOL...

2019-09-27 18:09:31 97

原创 Spring原理(二)

一.spring MVC的原理1.Spring MVC框架是围绕一DispatcherServlet 来设计的,这个 Servlet 会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染 。2.spring MVC的流程:1.请求到了DispatcherServlet2.DispatcherServlet分发到HandlerMapping3.Dispat...

2019-09-26 22:08:14 118

原创 Spring原理(一)

一.Spring的简介1.概念:spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。提供IOC和AOP的框架2.spring的特点:(1)轻量级:jar包不大,嵌入低(2)控制反转:对象被动的传入依赖的对象,自己不去创建和依赖对象,包依赖对象的创建和依赖关系的维护交给spring,这就是控制反转(3)面向切面:就是将业务核心代码和类似于日志,事务等...

2019-09-25 23:21:29 150

空空如也

空空如也

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

TA关注的人

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