自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曾经沧海难为水,除却巫山不是云

学技术、学知识、学生活

  • 博客(207)
  • 收藏
  • 关注

原创 扫描机驱动备份

扫描机型号扫描驱动名称驱动下载地址KODAK i2400,i2420,i2600,i2620InstallSoftware_i2000_v5.1.exehttps://resources.kodakalaris.com/docimaging/drivers/i2000March2018/InstallSoftware_i2000_v5.1.exeKODAK...

2020-01-16 10:26:14 1375

原创 Redis分布式锁使用总结

Redis分布式锁使用总结前言最近因为项目需要进行多实例的协调,使用到了分布式锁,所以对分布式锁的原理、使用等做了一番调查、学习,顺便将其记录下来,供需要的同学学习交流。项目中使用的是基于Redis的分布式锁,所以这篇文件的内容都是是基于Redis分布式锁。分布式锁简介谈起编程语言中的锁,开发者应该是相当熟悉的,当系统中存在多线程并且多线程之间存在竞态条件或者需要协作的时候,我们就会使用...

2019-07-02 14:59:34 1298

原创 浅谈SPI机制

浅谈SPI机制前言这段时间在研究一个开源框架,发现其中有一些以SPI命名的包,经过搜索、整理以及思考之后,将学习的笔记、心得整理出来,供日后复习使用。SPISPI全称是Service Provider Interface,翻译过来是服务提供者接口,这个翻译其实不那么形象,理解起来也不是很好理解,至少不那么见名知意。其实SPI是一种机制,一种类似于服务发现的机制,什么叫做服务发现呢,就是能...

2018-11-09 18:20:13 799

原创 【SpringBoot】 在SpringBoot中使用Hibernate Validate

【SpringBoot】 在SpringBoot中使用Hibernate Validate前言在做web相关的应用时,经常需要提供接口与用户交互(获取数据、上传数据等),由于这个过程需要用户进行相关的操作,为了避免出现一些错误的数据等,一般需要对数据进行校验,随着接口的增多,校验逻辑的冗余度也越来越大,虽然可以通过抽象出校验的方法来处理,但还是需要每次手动调用校验逻辑,相对来说还是不方便。为...

2018-11-09 11:17:45 4477 2

原创 Netty学习之内置处理器以及编解码器

Netty学习之内置处理器以及编解码器前言SSL/TLSSSL/TLS是目前广泛使用的加密,位于TCP之上,其他的应用层协议之下,当应用层将数据交给SSL/TLS之后,数据会被进行加密,关于SSL/TLS更多的内容,可以参考:SSL/TLS协议运行机制的概述、OpenSSL 与 SSL 数字证书概念贴在javax.net.ssl中提供了原生的SSL/TLS支持,通过SSLContext、S...

2018-10-15 16:09:28 549

原创 Netty学习之Bootstrapping

Netty学习之Bootstrapping前言在前面的内容中,我们基本把Netty的核心组件都学习完了,各个组件的作用及组件之间的关系也基本理清楚了,一个完整的Netty应用基本上也能写出来了,当然,还差最后一步,启动应用,本小节我们来学习如何启动一个Netty应用。Bootstrap ClassBootstrap类包含两个子类,Bootstrap及ServerBootstrap,分别对应...

2018-10-11 15:29:51 217

原创 Netty学习之EventLoop&Threading Model

Netty学习之EventLoop&Threading Model前言在前面我们学习了Netty的众多组件,如ByteBuf、Channel、ChannelHandler、ChannelPipeline等,这些组件组合起来具有神奇的魔力,而EventLoop则是赋予它们魔力的源泉,EventLoop是Netty的线程模型,也是Netty的心脏,本小节我们就来学习EventLoop相关的...

2018-10-11 15:28:47 191

原创 Netty学习之ChannelHandler&ChannelPipeline

Netty学习之ChannelHandler&ChannelPipeline前言ChannelHandlerChannel生命周期ChannelUnregistered,Channel被创建,但是还没有注册到EventLoop中ChannelRegisted,Channel注册到EventLoop中ChannelActive,Channel激活(连接到远程端口),能够发送以及...

2018-10-10 09:01:11 215

原创 Netty学习之ByteBuf

Netty学习之ByteBuf前言在网络中传输的基本单元是字节byte,虽然在NIO中提供了一个ByteBuffer作为字节的容器,不过由于ByteBuffer比较难使用,所以Netty自己实现了一个,ByteBuf,并且提供了比较灵活的操作方式以及操作工具,本节我们将详细学习这一部分的知识。ByteBuf在Netty中,数据通过ByteBuf以及ByteBufHolder来进行操作,By...

2018-10-10 08:59:40 771

原创 Netty学习之数据传输

Netty学习之数据传输前言在前面的小节中,我们简略地学习了Netty及Netty的核心组件,在本小节中,我们来学习一个重要但是不太好归类的内容,Netty的数据传输方式。数据传输在Netty中,Channel可以说是非常重要的一个组件了,数据之间的传递正是通过Channel来完成的。在Netty中,Channel是线程安全的,所以一个Channel可以被其他线程引用,也可以在多线程环境...

2018-10-08 16:26:32 308

原创 Netty学习之组件和设计

Netty学习之组件和设计前言前面我们简单地介绍了Netty,然后学习了一个简单的小例子,接下来我们来学习Netty的组件概要及组件之间的关系。Channel,EventLoop,ChannelFuture对于Netty来说,Channel、EventLoop、ChannelFuture三者的结合,就是Netty的网络抽象Channel代表的是SocketEventLoop代表的是控...

2018-10-08 15:31:26 160

原创 Netty学习之Netty介绍

Netty学习之Netty介绍前言本周开始学习Netty,主要的参考资料是《Netty In Action》原版书,这本书写得真好,一开始学习Netty的时候,看得有些云里雾里,后面弄懂之后,再回头看一下这本书,就发现这本书真的言简意赅,精炼地将Netty的各个组件展现出来。传统的Java网络编程在传统的Java网络编程中,是基于阻塞形式的IO,在这种形式的IO模型中,由于当数据没有到来的...

2018-10-08 15:30:12 221

原创 Redis学习之缓存

Redis学习之缓存前言在前面的学习中,我们学习了Jedis以及Spring-redis-data的使用,这些内容主要是直接使用Redis作为数据库,接下来,我们从另一个角度来学习Redis,将Redis作为缓存来使用,在使用Redis的场景中,很大一部分就是将Redis作为缓存来使用。Redis缓存使用为了操作的方便,这里我们同样采用Spring Boot作为脚手架,你可以直接复用上一小...

2018-09-28 10:51:54 159

原创 Redis学习之Spring-data-redis使用

Redis学习之Spring-data-redis使用前言在前面,我们学习了Redis的基础知识,也学习了在Java中通过Jedis来操作Redis,同时我们也提到了,Jedis的操作过于底层,或者说封装得不够彻底,当我们要存储一个对象的时候,其实是比较麻烦的,所以接下来我们来学习另外一个操作工具,spring-data-redisSpring-data-redis是Spring-Data项...

2018-09-28 10:51:20 517

原创 Redis学习之集群

Redis学习之集群前言在前面,我们学习了Redis的基本操作,Jedis的使用以及Redis的持久化方案,接下来我们来学习Redis的集群管理。复制当数据存储在一台服务器上时,如果该服务器挂了,那么数据就会丢失了,所以Redis提供了复制的功能来实现将一台服务器上的数据自动地同步到其他的服务器上。在复制的操作中,数据库可以分为两类:主数据库(master)和从数据库(slave),主数...

2018-09-28 10:50:08 155

原创 Redis学习之持久化

Redis学习之持久化前言在前面我们学习了Redis的基本操作,也学习了Redis的Java客户端Jedis的使用,接下来我们来学习Redis的持久化。在前面的学习中,我们知道Redis是基于内存的键值对数据库,众所周知,基于内存的数据会在内存断电之后丢失,所以,如果Redis中没有持久化机制,那么,当Redis服务器重启之后,存储的数据就丢失了,这显示是不能接受的,所幸,Redis有持久化...

2018-09-28 10:49:37 127

原创 Redis学习之进阶知识

Redis学习之进阶知识前言在前面的小节中,我们学习了Redis的五种数据类型,并且动手操作了这些数据类型,在本小节中,我们将学习Redis的事务、排序、消息通知等功能事务Redis中的事务,指的是一组命令的集合,与关系型数据库的事务的概念是一样的,事务是一个原子操作,要么都执行,要么都不执行,但与关系型数据库不同,Redis中的事务是不支持回滚操作的。需要注意的是,Redis中的事务执...

2018-09-28 09:27:06 159

原创 Redis学习之Jedis使用

Redis学习是Jedis使用前言在前面的内容中,我们简单学习了Redis的基本操作,并且通过redis-cli客户端操作redis,在本小节中,我们将学习在代码中操作Redis的方式,本小节中,我们使用的是JedisRedis提供了众多的客户端,支持众多的编程语言,如果你使用的不是Java的话,可以在官方网站找到合适的客户端 Redis客户端Jedis是官方推荐的Java连接Redis的...

2018-09-28 09:26:16 128

原创 Redis学习之数据类型及操作

Redis学习之数据类型及基本操作前言在前面一个小节中,我们学习了Redis的安装、客户端的使用等,在这一小节中,将学习Redis的五种数据结构及对应的操作。在前面我们提到了,Redis是基于键值对的,也就是说,所有的数据类型都必须有一个键与其对应,而这里五种数据结构,指的是对应的值的类型,这一点需要注意一下。基本操作Redis中有非常多的命令,有一些命令是用于操作特定数据结构的,而有一...

2018-09-27 09:30:49 193

原创 Redis学习之环境准备

Redis学习之环境准备Redis介绍Redis是一个开源的,高性能的,基于内存的,基于键值对的缓存与存储系统,属于NoSQL的一个分支,支持五种的数据结构,string、hash、list、set、sort setRedis官网:Redis官网Redis特性高性能支持丰富的数据结构支持持久化支持多种语言主从复制支持分片Redis的主要应用场景缓存队列发布订阅自...

2018-09-27 09:29:15 184

原创 【MyBatis】MyBatis动态SQL

MyBatis动态SQL前言在前面,我们已经学习了MyBatis的单表操作以及多表操作,在体验了MyBatis提供的对于结果集的封装之后,我们接下来来学习MyBatis中的动态SQL。动态SQL所谓的动态SQL,就是根据不同的情况来产生不同的SQL,比如在查询用户的时候,我们可以根据用户的ID、名称、邮箱来查询,当然,这三者也可以进行组合,如果要为每一种情况写一个查询,那工...

2018-08-17 10:40:53 166

原创 【MyBatis】MyBatis多表操作

MyBatis多表操作前言在前面的两个小节里,我们已经初步接触到MyBatis,并且通过MyBatis实现了单表的增删改查操作,但在实际开发过程中,经常遇到的是多表之间的操作,MyBatis在多表操作方面也提供非常方便的工具用于将结果集映射到对象中,这一节,我们将详细学习这一部分。多表操作由于本节涉及到多表操作,在前面建立的数据表明显不符合,所以这里我们需要再建立一些表以及...

2018-08-17 10:02:57 893

原创 【MyBatis】MyBatis单表操作

MyBatis单表操作前言在前面一小节中,介绍了MyBatis以及MyBatis的简单操作,并且简单地分析了MyBatis的工作机制,接下来这一小节,我们来学习MyBatis的单表操作,包括简单的增删改查MyBatis单表操作在本小节中,依然沿用上一小节所使用的环境以及资源增加数据在CountryMapper.xml中加入下面插入代码<insert i...

2018-08-15 15:10:32 556

原创 【MyBatis】MyBatis介绍及基本使用

MyBatis介绍及基本使用前言关于MyBatis,其实去年学习的时候就开始使用了,不过当时由于刚开始学习框架,对一些东西的理解不是很好,所有在学习MyBatis的时候,虽然有想法想把笔记整理出来作为博客发布,但是一直不敢动手,一方面是对MyBatis的使用不是很熟悉,另一方面是懒吧,囧,这几天趁着有时间重新回顾了MyBaits并且加上接触一些项目,所以就把学习的过程笔记整理出来。...

2018-08-15 11:45:16 380

原创 【Java8】Java8实战之时间日期操作

Java8实战之时间日期操作前言前面我们已经基本学习完Java8中应用场景比较广泛的新功能或者说新特性,在本小节中,我们再来学习多一个新特性,时间日期操作。时间日期操作在Java8之前,由于JDK本身设计的问题,导致了存在的时间日期API使用起来不是很好用,其语义也不是很好,比如Date表示的是时间以及日期,为了使得时间日期相关的API操作起来比较方便,语义更好,Java8...

2018-08-14 16:50:41 257 1

原创 【Java8】Java8实战之Optional

Java8实战之Optional前言在前面的几个小节中,我们已经学习了Lambda表达式、Stream以及默认方法,在体会到Java8所带来的极大的便利之后,这小节我们来学习Java8中一个新的功能–Optional。OptionalOptional的出现是为了解决null的问题,在Java中,如果一个对象指针没有被初始化,默认就指向null,而这种情况是比较危险的,在使用...

2018-08-13 19:43:11 522 1

原创 【Java8】Java8实战之默认方法

Java8实战之默认方法前言在前面,我们学习了Lambda以及Stream,也体会到了这两者结合后所带来的方便性,尤其是Stream,有了Stream之后,对于容器的大部分操作都变得非常简单,只需要通过组合一系列的中间操作以及结束操作,就能筛选,转换,收集需要的对象,然而,这中间有一个问题,那就是似乎大部分的容器都支持stream()这个方法,难道是所有的实现都进行了修改了吗?这肯定是...

2018-08-10 09:13:47 139

原创 【Java8】Java8实战之Stream

Java8实战之Stream前言在前面一个小节中,我们已经学习了行为参数化以及Lambda表达式,通过Lambda表达式,可以使得代码更加简洁,尤其是当一个方法只需要使用一次的时候,然而,如果Java8中只有Lambda表达式的话,那还是不足以让人感到兴奋的,个人感觉,Java8中最有意思,也是最方便的功能,莫过于Stream了Stream初窥Stream可以翻译为流,实际...

2018-08-09 09:06:14 300 1

原创 【Java8】Java8实战之行为参数化与Lambda

Java8实战之行为参数化与Lambda前言现在Java的迭代速度比以前快了很多,然而,本渣渣最近才开始学习Java8,相比于之前的版本,Java8中引入了许多新的特性,其中最主要的是Lambda、Stream、Optional<T>、新的时间日期API,接下来将分成几个小节,分别学习这些内容,并且将学习笔记整理出来,参考书籍为《Java8实战》。本小节主要学习行为参数...

2018-08-03 17:32:38 873 1

原创 AOP实战小案例

AOP实战小案例前言AOP技术是指面向切面编程技术,主要用于在具有横切逻辑的场景中,将横切逻辑提取出来,形成独立的模块,然后通过特殊的技术,如Java中的动态代理技术,动态地将横切逻辑织入到具体的应用场景中大概在去年的这个时候,学习过AOP技术,对AOP中的一些概念也有一些了解,不过基本都是理论上的内容,缺乏实战经验,所以,对AOP的理解并不是很充分,加上最近刚好有个项目需要用到,...

2018-07-31 10:52:14 1956

原创 IDEA工具使用

IDEA工具使用前言IDEA工具是一款目前比较流行的Java开发工具,其实使用该工具已经挺长时间了,不过这个工具总能给人一些小惊喜,加上记忆力本身不是很好,所以写下这篇文章,用来不断记录开发中需要使用到的,容易忘记的一些小技巧或者设置。由于只是我的使用笔记,而不是教程类文章,所以这里不详细介绍IDEA的安装等各方面的内容了,只是记录我所觉得有用的功能,目前使用的平台是Windows,2...

2018-07-21 11:46:53 2835

原创 Git学习笔记

Git学习笔记Git背景介绍Git是一个分布式版本控制工具,这里需要注意的是分布式,对于Git来说,每个独立的计算机即是客户端也是服务器,每个计算机都包含完整的代码仓库,这里注意与SVN进行区分,SVN需要一个集中的服务器来统一管理所有的仓库Git官网:Git官网Git安装:Git是一个跨平台工具,这里我使用的是Linux系统,如果是使用Mac或者Windows,则可以根据官网...

2018-03-10 20:18:17 185

原创 SVN学习笔记

SVN学习笔记SVN背景知识SVN,全称Subversion, 是一个开放源码的集中式版本控制系统,这里需要注意的一个点就是集中式,所谓的集中式,就是说,SVN管理的所有仓库都位于一个集中的服务器上,如下图所示SVN官网:SVN官网SVN安装:SVN支持多个平台,包括Windows,Mac,Linux等,官网上提供了详细的安装指南,这里我使用的是Centos6,对应的安装步...

2018-03-10 14:05:25 766

原创 一个简单的内核模块实现

一个简单的内核模块实现前言这几天因为某些原因,需要学习下Linux内核模块相关的知识,今天刚刚好学习完模块的简单实现,故将其整理出来,以供日后复习之用一个简单的内核模块模块化的意义在目前,内核的设计中,有两种不同的趋势,一种是单内核,另外一种是微内核,简单而言 - 单内核就是一个很大的进程,在运行的时候,是一个单独的二进制映像,模块之间的通信是通过函数调用来实现

2018-01-04 21:20:24 622

原创 2017年终总结

2017年终总结前言一眨眼之间,2017年已经到了年末了,之前一直没有写年终总结的习惯,在前写年,偶尔有看到网络上很多朋友分享他们的年终总结,就一直想自己也写写总结,无奈一直没有着手落实。今年刚刚好想起来,加上今年发生的一些事情,对我影响比较大,所以乘着有时间,回顾下今年,写下今年的总结以及对明年的期望回望20172017年,对我来说是一个比较特殊的年份,也可以说是我自己定义的一个分水岭吧,今年过后

2017-12-26 10:42:40 779

原创 【Java并发学习】之原子类

【Java并发学习】之原子类前言在前面的学习中,在处理一些数据的增加,减少,比如Integer类型的数据的增加或者减少的时候,为了使数据保持一致,使用了synchronized 或者Lock对方法或者代码块进行锁操作,进入临界区的时候,进行加锁,离开临界区的时候,进行解锁。除了这种方式外,在JDK1.5中,提供了另外一种机制,原子类操作对象,接下来我们来具体学习这几个有用的工具Atomic*家族介绍

2017-11-28 22:57:51 186

原创 【Java并发学习】之详解线程的点滴2

【Java并发学习】之详解线程的点滴2前言在前面一个小节中,我们学习了线程的属性如,ID、名字、优先级、状态的获取以及设置(如果可以操作)以及守护线程的概念和将线程设置为守护线程的方法,接下来这个小节,我们来学习多线程中的异常处理以及停止一个线程常用方法异常处理异常处理是一个非常重要的内容,当系统出现可能出现某些问题的时候,我们可以借助异常机制这个强有力的工具来辅助,从而可以在可能出现问题的时候,决

2017-11-13 23:11:24 166

原创 【Java并发学习】之详解线程的点滴(1)

【Java并发学习】之详解线程的点滴(1)前言在前面的几个小节中,我们粗略地学习了线程的基本概念,定义任务的方式,并且通过Java中的多线程API来驱动对应的任务,然后学习了线程的互斥与同步关系,线程之间进行资源共享后的同步操作等等一些简单的内容,可以说,线程中的主要内容我们已经掌握了,然而,也仅仅只是简单内容,很多比较细节、复杂的东西在之前我们刻意避开了,接下来的几个小节中,我们就来具体地学习线程

2017-11-12 23:02:52 189

原创 【Java并发学习】之线程合作

【Java并发学习】之线程合作前言在前面的小节中,我们谈到了线程之间有两种主要的关系,一种是竞争关系,另外一种是合作关系,竞争关系的基本概念以及基本操作我们已经在前面一个小节中有所学习,本小节呢,主要学习的是线程之间的合作,通过协调过多个线程之间的关系,使得多线程能更好地为我们服务,提高性能线程合作正如在人类世界中,合作是一种非常常见的事情一样,在程序的时间中,合作也是一件非常常见的事情,多个线程共

2017-11-07 18:50:45 166

原创 【Java并发学习】之线程的同步

【Java并发学习】之线程的同步前言在前面一个小节中,我们学习了线程的概念以及在Java中创建任务的方式,并且将任务委托给对应的线程进行执行,本小节我们主要来学习线程之间的关系之一的同步,包含临界区、临界资源、线程同步的两种主要方法线程的关系从广义上来讲,线程之间有三种关系没有关系:多个线程之间相互独立,既不竞争资源,也没有任何的合作关系,只是各自完成自己的任务竞争关系:两个及以上的线程之间存在

2017-10-27 16:29:07 192

空空如也

空空如也

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

TA关注的人

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