自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 零拷贝原理

什么是零拷贝 CPU不需要再为数据在内存之间拷贝而消耗资源。通常指计算机在网络上传输数据时,不需要把数据拷贝到用户空间(User Space) 而直接在内核空间将数据传输到网络上的方式。零拷贝的优点 减少不必要的CPU拷贝; 减少内存带宽的占用; 减少用户空间和内核空间的上下文切换。预备知识 在理解零拷贝之前需要先了解一下两种I/O读写方式 1.I/O中断方式 使用这种方式应用程序与磁盘之间的I/O操作,都是通过CPU的中断来完成的,...

2020-09-10 21:52:35 264

原创 ThreadLocal实现原理与应用

1.ThreadLocal的概念 ThreadLocal即线程本地变量,或者称为线程变量。它是一个以ThreadLocal对象为key,任意对象为value的存储结构。这个存储结构附属在某个线程上。也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。也就是说ThreadLocal为变量在每个线程中都创建了一个副本,这样每个线程可以访问属于自己的变量副本,对这个变量副本的操作只会影响到该线程自身的数据,不会对其他线程中的数据造成影响。2.ThreadLoca...

2020-09-06 12:29:08 241 1

原创 synchronized的实现原理

Synchronized很多人称呼其为重量级锁,随着JAVA6对synchronized进行了各种优化,减少了获得锁和释放锁的性能消耗,引入了偏向锁和轻量级锁,以及锁的存储结构和升级过程。Synchronized同步基础:1.对于普通方法,锁是当前实例对象;2.对于静态同步方法,锁是当前类的Class对象;3.对于同步方法块,锁是Synchronized括号里配置的对象。Synchronized实现原理JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节

2020-09-02 17:50:02 163

原创 Spring如何处理循环依赖

1.什么是循环依赖?<bean id="A" class="com.test.A"> <constructor-arg index="0" ref="B"> </constructor-arg></bean><bean id="B" class="com.test.B"> <constructor-arg index="0" ref="A"> </constructor-arg>&

2020-08-26 22:12:32 224

原创 Java中的四种引用

1.强引用是指创建一个对象并把这个对象赋值给一个引用变量。比如:Object object = new Object();String str = “hello”;强引用有引用变量指向时,永远不会被垃圾回收,JVM宁愿OOM错误也不会回收强引用对象。如果跳出了强引用变量所在函数,如果想要中断强引用和某个对象之间的关系,可以显示的将引用赋值为null。这样JVM就会在合适的时间回收。2.软引用如果一个对象具有软引用,内从空间足够,则不回收,如果内存不足,则回收。软引用可以用来实现内

2020-08-25 21:16:28 94

原创 Spring XML配置文件中的重要元素

1.<beans> <beans>是Spring XML配置文件最顶层的元素,<beans></beans>中可以包含一个<description>和多个<bean>、<import>、<alias> beans的属性 beans可以对其包含的bean进行统一的默认设置,主要属性有: default-lazy-init:默认false。标识是否对所有bean进行延迟初始化。 ...

2020-08-20 22:52:22 1467

原创 BeanFactory与FactoryBean

定义BeanFactory是Spring IoC容器实现的顶层接口,是管理IoC容器中对象的工厂类定义。FactoryBean本质上就是一个Bean,但是这个Bean是一个能产生对象的工厂。FactoryBean的作用FactoryBean的作用是,当某个对象实例化很繁琐,通过XML配置文件定义非常复杂,这个时候就可以使用FactoryBean通过代码的方式实现对象的实例化逻辑。FactoryBean接口FactoryBean也是一个接口,它的定义很简单,如下:public inte

2020-08-18 23:09:36 97

原创 Spring IoC容器-BeanFactory

IoC的职责上一篇博文介绍了IoC的概念,从实际应用角度看,IoC这种编程思想主要解决的问题有两个:对象创建管理:使用IoC时,应用这无需关心所依赖对象如何创建如何获取,IoC将这部分思想逻辑从客户端玻剥离出来,实现对客户端逻辑的低入侵。对象依赖关系管理:这是IoC的核心功能,IoC通过对象创建管理,以及通过识别各个对象之间的依赖关系,将这些对象所依赖的对象注入、绑定。Spring IoC容器Spring IoC容器是实现“控制反转”编程思想的一个框架,Spring IoC容器除了能够解

2020-08-17 22:53:44 110

原创 Spring IoC简介

什么是Spring IoCIoC即“控制反转”的意思,是Spring框架的核心概念之一,它还有另外一个名字DI(Dependency Injection),即依赖注入。“控制反转”的概念有点模糊,通俗的解释就是找个人来为你服务,满足你的需求。比如,想喝鲜榨橙汁,如果自己做需要去水果店买橙子、清洗、扒皮,放到榨汁机里,然后才能喝到橙汁。也可以有另外一种方法,你到水果店旁边的咖啡厅,直接点一杯鲜榨橙汁,两分钟后你就可以喝到。换句话说就是主动创造到被动接收服务的过程。传统的面向对象的Java程序设...

2020-08-16 23:17:07 87

原创 Redis-集群搭建

在生产环境中,如果用到了Redis存储数据,那么就不可能让Redis运行在单台服务器上,而是需要搭建Redis主从复制集群。这样做的好处是:主从备份,防止主机宕机导致数据丢失。完成读写分离,分担主服务器的读写压力。任务分离,例如将备份和计算工作让从服务器完成。1.常见的Redis集群架构常见的Redis架构有两种,如下图:星型架构:线型架构:采用线型结构的好

2018-01-17 12:17:45 299

翻译 kafka官方文档-快速开始

本教程假设您的服务器是一个全新的环境,并没有安装kafka及zookeeper。由于Unix和Windows平台的kafka命令脚本不同,在Windows平台上需要使用bin\Windows\而不是bin/,并且需要修改脚步的扩展名为.bat。第1步:下载安装包下载1.0.0 release版,并解压:> tar -xzf kafka_2.11-1.0.0.tgz> cd kafka

2018-01-15 17:08:16 508

翻译 kafka官方文档-应用案例

1.2 应用案例下面介绍一些kafka的典型应用案例。消息kafka可以很好的取代传统的消息中间件。很多时候我们需要使用消息中间件(前后台数据解耦,消息缓存缓冲等)。与大多数消息系统相比,kafka具有更好的吞吐量、内置分区、复制和容错机制,这使得kafka成为大型消息处理系统的良好的解决方案。根据我们的经验,消息的使用通常具有相对低的吞吐量,但可能需要端到端的低延迟,以及高可

2018-01-12 17:33:55 923

翻译 kafka官方文档-简介

1.1 简介Apache kafka 是一个流数据平台。我们认为一个流式数据处理平台有以下三个方面的能力:1.它可以发布或订阅流数据,类似于消息队列或者企业消息系统。2.它可以容错存储记录的数据流。3.它可以实时的处理记录的数据流。kafka用途1.在系统或者应用程序之间构建实时数据传输管道。2.构建实时处理数据流的应有程序。基本概念1.kafka是

2018-01-12 11:58:14 370

原创 Redis-aof持久化

在Redis的rdb快照持久化,可以让我们每个几分钟将缓存中的数据以快照方式保存到磁盘上进行持久化,这种持久化方式有一个很大的弊端就是在两次持久化之间如果发生了故障,那么这几分钟的数据将会丢失。为了解决这个问题,在Redis2.4版本之后引入了aof持久化方式。并且官方建议我们让这两种持久化方式同时进行以保证持久化工作的效率与安全。1.注意事项    强烈建议在配置Redis的时候,一开始

2018-01-11 15:00:33 390

原创 Redis持久化-rdb快照

在使用Redis的过程中,经常需要将内存中的数据保存到磁盘上进行持久化存储,Redis中提供了两种将内存数据持久化到磁盘上的方法,一种是rdb快照持久化,另一种是aof持久化。这两种持久化方式经常一同使用,以达到安全持久化的目的。本文主要介绍rdb持久化。rdb持久化的工作原理   在redis2.X版本之后,redis的rdb持久化是通过一个rdb dump进程完成的,这个进程每隔N秒或

2018-01-08 17:16:44 244

原创 双向链表

相比于单向链表,双向链表的优点是:对于链表中的任意一个节点,可以从两个方向进行操作,在单向链表中,只有获得结点的前驱结点的指针,才能删除该结点。双向链表中,因为每个结点都有指向前驱节点的指针,所以不必知道前驱结点的地址也能进行删除操作。但是也有缺点:每个节点多出了一个额外的指向前驱结点地址的指针,需要更多的空间开销,另外,对于节点的插入或者删除需要操作更多的指针。1.双向链表的定义

2018-01-04 15:54:00 806

原创 MySQL主从复制原理

MySQL主从复制原理如下图:    基本上是分为三步:1.主数据库(Master)将变更信息写入到二进制日志文件中,这里需要注意的是旧版本的MySQL数据库默认是不开启二进制日志的,强烈建议在安装好数据库启动之前一定要先检查一下二进制日志文件是否开启,即使不做主从复制架构也要开启,否则当数据库启动之后再开启二进制日志时需要重新启动数据库。2.从数据库(Slave)开启一个IO工作

2018-01-04 14:33:21 1036

原创 Redis消息发布与订阅

在实际开发工作中,经常会遇到消息发布、订阅的应用场景,就好象是电台广播,只要你收听了某个频道,那么在这个频道上播放的内容你都能够听到,没有收听的自然也就听不到,很多开源工具都对这种设计模式有很好的支持,比如RabbitMQ中就有Pub/Sub消息队列。同样Redis也支持这种模式的消息发布,而且非常简单。在我的实际工作中,只用到过三个命令就能实现消息发布与订阅:    1.publish ch

2018-01-04 11:21:40 1535

原创 volatile实现可见性的原理

在java并发编程中,一定绕不开volatile、synchronized和lock几个关键字,其中volatile关键字是用来解决共享变量(类成员变量、类的静态成员变量等)的可见性问题的,非共享变量(方法的局部变量)是分配在JVM虚拟机的栈中,是线程私有的,不涉及可见性问题。那么什么是可见性?可见性在JAVA规范中是这样定义的:java编程语言允许线程访问共享变量,为了确保共享变量能被准

2017-12-28 17:50:19 11314 4

原创 MySQL二进制日志文件格式

在MySQL中,二进制日志文件是非常重要的一种日志文件,MySQL数据库的高可用架构都是以二进制日志文件为基础的,在备份数据库时,除了要备份数据文件之外,二进制日志文件也一定要备份,如果忽略了这一点,可能会给以后的工作中造成很大的麻烦,MySQL数据库的二进制日志文件中存储的是所有执行成功的,注意是执行成功的对MySQL数据库的修改事件,包括增删改查时间和对表结构的修改事件。那么二进制日志文件以什

2017-12-28 13:33:44 742

原创 Redis的事物及锁操作

Redis中也提供了类似数据库中的事务和锁的概念,基本用法如下:    开启事务:multi    取消事务:discard    提交事务:exec    例如转账交易,用户张三需要将自己账户中的钱转出100元到李四的账户,具体的操作可以分为两步,第一步将张三账户中的钱减少100元,第二步将李四账户的钱增加100元。这个转账交易必须是一个原子操作,也就是说上述两步必须同时执行成功

2017-12-28 10:26:45 974

原创 MySQL数据类型选择

在数据库设计的时候,如果数据类型选择不当,可能会对性能造成很大的影响,比如存储姓名的字段,如果选择VCHAR(255),那么暂用更多的存储空间,同时也会对IO产生影响,因此在数据库设计时对数据库数据类型的准确选择,也会对数据库的性能有一个很大的提升。我再工作中就遇到过很多时候一些开发人员不注意对数据类型认真选择,而是只要能存储下数据就可以,例如,使用VARCHAR(100)类型存储姓名字段,用VA

2017-12-26 15:27:08 555

原创 单向链表

1.链表的定义链表是一种用于存储数据集合的数据结构,有如下特点:相邻两个元素之间通过指针链接;最后一个元素后继指针为NULL;在程序执行过程中,链表的长度可以增加或减小;链表的空间能够扩展;内存浪费很少。2.链表的基本操作插入:插入一个元素到链表中;删除:移除并返回链表中指定位置的元素;删除链表:清空链表中所有元素;计数:返回链表中元素的个数;查找:

2017-12-26 12:27:13 238 1

原创 Redis-Hash类型常用操作命令

1.hset key field value设置一个hash结构域2.hmset key field1 value1 [field2 value2 field3 value3 ...fieldn valuen]设置多个hash结构域3.hget key field查看某个域4.hmget key field1 field2...fieldn获取某几个域5.hgeta

2017-12-26 08:44:50 859

原创 递归算法

1.什么是递归算法    任何调用自身的函数称为递归。用递归算法求解问题,要点在于递归函数调用自身去解决一个规模比原始问题小一些的问题。这个过程成为递归步骤。递归算法执行递归步骤,直至到达基本情况。2.为什么要用递归算法    递归算法通常比循环迭代方法要更加简洁易懂,当任务能够被相似的子任务定义时,采用递归处理十分有效。3.递归算法的基本格式    递归算法有两个要点,当编写

2017-12-25 13:06:01 452

原创 Redis-list类型常用操作命令

1.lpush key value在链表的左侧push一个值,当没有key这个链表时,创建这个链表。例如在user链表的左侧添加一个元素:lpush user admin2.rpush key value在链表的右侧push一个值,当没有key这个链表时,创建这个链表。例如在user链表的右侧添加一个元素rpush user dba3.lrange key start st

2017-12-20 10:40:50 317

原创 MySQL数据库参数优化

在MySQL数据库使用之前,根据实际业务情况,对一些重要的参数进行优化将有利于数据库的性能的提升及可靠性,首先查看MySQL的参数配置文件可以通过mysql --help|grep my.cnf,注意这个命令输出的配置文件不只一个,如:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf MySQL数据库启动之后会到

2017-12-19 17:51:22 3291

原创 Redis-Set类型常用操作命令

集合(Set)的特点:无序性{1,2}={2,1};唯一性,结合里面的值是唯一的。1.sadd key value1 value2...value3创建并增加元素到集合sadd student john lucy当再次添加lucy时,会不成功,因为集合里面已经有lucy元素2.smembers key查看集合中的所有元素3.srem key value1 value

2017-12-19 15:11:28 413

原创 CentOS系统参数优化-提升MySQL服务器性能

相信大多数MySQL数据库都会部署在Linux系统之中,我所用到的MySQL数据库都是部署在CentO64位操作系统上的,对操作系统默认参数的一些修改配置,可以让数据库的性能得到进一步的提升。我们最好不要把数据库装好之后马上就运行使用,而是应该将数据库的操作系统,以及数据库本身的一些参数配置好后再使用。    1.网络参数配置     网络参数配置需要修改配置文件/etc/sysctl.c

2017-12-18 16:09:30 5088

原创 Redis常用命令-String类型操作

1.set key value [ex 秒数]/[px 毫秒] [nx]/[xx]使用该命令可以设置一个key-value,ex或者px表示该key的生命周期,比如:ex:set name john ex 10 表示name这个key在10秒钟后会自动被销毁;px:set name joh px 6548 表示name这个key在6548毫秒后会被自动销毁;注意以上两个选项不能同时

2017-12-18 10:47:04 775

原创 JDK动态代理模式

JAVA的动态代理模式,在Spring的AOP中有着重要的应用,也不容易理解,动态代理模式的定义是:生成一个代理对象,来代理真实对象,通过这个代理对象来控制对真实对象的访问。要实现动态代理必须实现来两个步骤:代理对象和真实对象建立代理关系;实现代理对象的代理逻辑方法。常用的动态代理方式有两种,一种是JDK动态代理,一种是CGLIB动态代理。在Spring中这两种代理方式都用到了。J

2017-12-15 18:25:28 560

原创 JAVA反射机制创建对象

在实际开发过程中,JAVA的反射技术应用广泛,尤其是在一些广泛使用的框架中,如Spring、mybatis中更是大量使用。java语言并不是一种动态语言,也就是说在运行时不能改变程序结构或者变量类型,但是JAVA提供了反射技术,可以让我们在运行时加载所需要的类。反射的英文单词是reflect,也可以翻译成为映像,个人认为叫映像可能更好理解一些。反射技术就是在程序运行时将所需要的类通过Class.f

2017-12-15 16:04:49 2566

原创 Redis常用命令-通用key-value操作

1.keys pattern查询相应的key,pattern表示查询条件,可以实现模糊查询* 通配任意多个字符,keys * 表示返回当前redis数据库中所有的key。? 通配任意一个字符,比如已经有两个key,分别是aba或abb,如果要查询以ab开头的后面只有一个字符的key,就可以使用keys ab?命令查询。[] 通配[]内的某一个字符,比如说,我们只知道ke

2017-12-15 10:16:44 36606

原创 MAVEN的依赖

1.依赖范围在maven工程中,我们可以在pom.xml文件中通过配置来管理我们的依赖包mysqlmysql-connector-java${mysql.version}实际上,如上的配置还隐藏着一个熟悉描述:compile。在maven中用于定义包依赖关系,有如下四个value:1).compile 默认的依赖范围,将依赖在编译和打

2017-12-14 19:09:34 159

原创 MAVEN在Eclipse中的配置

maven安装之后,需要做一些简答的修改,以便能在Eclipse中更好的使用,即使现在很多IDE已经集成了maven插件:1.修改.m2目录路径默认情况下,maven管理的本地库是保持在当前用户的.m2目录下:一般情况下,最后将这个文件夹挪到其他磁盘上,否则一旦从装系统,本地的依赖库就都要重新下载。在maven的安装目录下,会有一个settings.xml配置文件,修改

2017-12-14 18:08:45 236

原创 Redis下载与安装

1.下载Redis访问Redis的官方网站redis.io这里介绍了Redis是干什么的,它是一个开源的,使用BSD许可的,基于memory的key-value存储系统。提供字符串、哈希结构、链表、集合等数据类型,常用来提供数据结构服务。现在的最新稳定版本是4.0.6,这里建议大家下载稳定版本,尤其是在生产环境中,不要追求最新版本。点击右上角的Download菜单。会出现以

2017-12-14 17:11:21 899

原创 MAVEN的常用命令

MAVEN安装成功之后,可以通过以下一些常用命令管理我们的工程,在介绍MAVEN的命令之前,需要看一下MAVEN工程的标准目录结构:src文件夹下存放我们的源代码,main文件夹下是源码,test文件夹下是测试代码,如果需要资源文件如MyBatis的配置文件等,还需要在main和test目录下建立resource文件夹。target目录下是我们编译和打包生成的文件,如.jar包,编

2017-12-07 10:49:55 183

原创 MAVEN的安装

百度百科上对MAVEN是这样描述的:Maven是一个项目对象模型(PMO),可以通过一小段描述信息来管理项目的构建,报告和文档的软件管理工具。它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。从描述来看是不是有些迷茫?其实MAVEN之所以被广泛的使用,就是因为它不但给我们的项目管理带来了巨大的便利,也因为它简单易用。要想学

2017-12-07 10:46:35 137

原创 MySQL数据库的重要文件

前言    在使用MySQL数据库的时候,必须要熟悉MySQL数据库中的一些重要的文件,在查找错误、备份数据库、主从复制等各种应用场景中都需要用到这些文件。如果这些文件没有设置好或者没有开启,将对后面的维护工作带来巨大的不便。1.参数文件    MySQL数据库和其他数据库一样,都有一个记录数据库参数的参数文件,数据库在启动的时候读取这个文件,并且设置文件中配置的相关参数。与Oracl

2017-12-04 13:46:45 822

原创 谈谈索引

前言    索引是数据库设计和开发的一个重要方面,在程序开发过程中,经常有些技术人员会有两个极端的思想。比如:在设计数据库表时不设计索引,而是在数据库上线之后再创建索引或者干脆交给DBA去创建索引。数据库上线后,创建索引的很有可能会影响到业务,而专职的DBA不会特别关注业务逻辑,因此仅仅从数据库知识出发而不结合实际业务,对数据库索引的创建可能不会达到很好的效果;另外一些开发人员 恰恰相反他们在

2017-12-02 21:06:46 371

空空如也

空空如也

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

TA关注的人

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