自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ITxy1234的博客

吾生也有涯,而知也无涯。以有涯随无涯,殆已。

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

原创 知识管理误区与正确学习的方法

前言每天热衷于各类知识的收集,比如在知乎上看到好的回答就想点收藏但收藏之后又不会多看一眼,潜意识里不愿花较多的时间在知识的消化上又偏偏是收集成瘾,最终导致采集的知识总量越来越大,逐渐产生一种时间不够用的错觉最终在知识的海洋里迷失自我,整日忙忙碌碌、碌碌无为。而这也是低效知识管理模式的典型,不但会影响个人知识体系的建立,长远看还会打击人的自信心,徒增焦虑感,那么我们要怎样做才能很好地解...

2018-10-11 20:08:29 336

转载 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

文章目录关于背景函数式接口(Functional interfaces)lambda表达式(lambda expressions)目标类型(Target typing)目标类型的上下文(Contexts for target typing)词法作用域(Lexical scoping)变量捕获(Variable capture)方法引用(Method references)方法引用的种类(Kinds...

2019-05-28 12:20:23 418

转载 Java 8 中的 Streams API 详解

Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。所以说...

2019-05-26 16:13:19 214

转载 Git和GitHub

文章目录前言配置 SSH克隆远程仓库Git 的基本配置配置 user 信息设置 Git 忽略提交规则Git 的三种状态和三个工作区域三种状态三个工作区域Git 分支理解 origin理解 HEAD 指针理解 push理解 fetch, pullGit 的日常操作Git 分支操作一次完整的提交Git 其它常用操作Log 操作Status 操作Diff 操作比较回滚和撤销回滚撤销Reset 命令的本质...

2019-05-26 00:34:47 294

原创 Spring之BeanPostProcessor

简介它是一个Factory hook,允许自定义修改新的bean实例,例如 检查标记接口或用代理包装它们ApplicationContexts可以在其bean definitions中自动检测BeanPostProcessor bean,并将它们应用于随后创建的任何bean。 普通bean factory允许对post-processors进行编程注册,适用于通过该factory创建的所有be...

2018-11-20 21:52:05 160

原创 Mybatis的SqlSessionFactory构造过程

创建SqlSession的关键是先创建SqlSessionFactory,创建SqlSessionFactory需要提供配置文件和相关的参数,然后可以使用SqlSessionFactoryBuilder去创建SqlSessionFactory,提供Configuration对象作为SqlSessionFactory构造函数入参。步骤如下: public SqlSessionFactory ...

2018-10-24 20:31:37 305

原创 Mybatis缓存解析

缓存是将数据保存到内存中,在读取的时候无需从磁盘读入,具备快速读取和使用的优点,缓存的关键在于缓存的命中率,命中率高就能极大提升系统性能,命中率低则不存在使用的意义。默认开启一级缓存一级缓存是在SqlSession层面上的,多个SqlSession之间不共享,SqlSession调用Mapper接口执行Sql语句查询时,会进行缓存,当第二次用相同的SqlSession调用相同的Mapper接口...

2018-10-14 19:18:55 152

原创 DAO解耦的本质——设计原则

DAO是用于访问数据的对象,数据可以保存到数据库、文件、网络、缓存中,存储介质多种多样即便是同种存储介质也有不同的访问方法,例如数据库,可以用不同的持久化框架和JDBC来实现数据的数据库存储。为了实现业务层和数据访问之间的解耦,定义DAO接口,用具体的技术实现DAO接口,业务层调用DAO接口进行数据的访问,当要切换不同的数据访问技术时,业务层无需改动,用新的访问技术去实现DAO层的实现即可。...

2018-10-14 15:03:30 809

原创 intellij idea操作maven时控制台中文乱码

windows环境下,Intellij idea中maven操作时,控制台中文乱码问题(编译报错或者clean install时出现的其他错误描述乱码)在cmd中mvn中文正常显示,log4j打印日志也是ok的。解决方法:Setting->maven->runner VMoptions: -Dfile.encoding=GB2312...

2018-10-12 20:06:20 171

原创 Servlet——JavaWeb技术的核心

前言JavaWeb的核心就是Servlet,各种web框架出现只是为了封装Servlet,简化开发,如果你要研究web框架,从头看源码,最后也还是会回到Servlet上来。Web框架是开发者在使用某种语言编写Web应用服务端是关于架构的最佳实践。很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处理有关,形成一个基础,在开发别的应用项目的时候则可以从这个剥离出来的基础做起,让...

2018-10-11 23:54:41 349

原创 SQL语法

创建表字段名 类型 [NULL|NOT NULL] [default ][AUTO_INCREMENT],[PRIMARY KEY ()]CREATE TABLE mytable ( id INT NOT NULL AUTO_INCREMENT, col1 INT NOT NULL DEFAULT 1, col2 VARCHAR(45) NULL, col3 DATE NULL...

2018-10-10 15:55:54 200

原创 数据库随便谈谈

概念事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。ACID原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。一致性(Consistency)数据库在事务执行前后都...

2018-10-10 12:20:38 238

转载 生产者消费者模式剖析

转载自并发编程网 – ifeve.com本文链接地址: 聊聊并发(十)生产者消费者模式在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。为什么要使用生产者和消费者模式在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必...

2018-10-09 11:44:41 242

原创 生产者消费者模型

在大型电商网站中,他们的服务或者应用解耦之后,是通过消息队列在彼此间通信的。消息队列和应用之间的架构关系就是生产者消费者模型。生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品。生产消费者模式如下图。在日益发展的服务类型中,譬如注册用户这种服务,它可能解耦成好几种独立的服务(账号验证,邮箱验证码...

2018-10-09 10:46:56 297

原创 Java线程的五种状态

NEW:一个线程被创建但是没有调用start方法RUNNABLE:可运行的线程,即线程执行了start方法之后,正在执行或者正在等待某个资源BLOCKED:线程等待锁来进入同步方法或代码块。WAITING:一个线程正在等待另一个线程来唤醒,可能是由于调用了以下方法:调用不带timeout参数Object.wait方法、调用不带timeout参数的 Thread.join方法、调用Lo...

2018-10-08 21:31:46 242

原创 线程池worker介绍

private final class Worker extends AbstractQueuedSynchronizer implements Runnable官方文档介绍:Class Worker主要维护正在运行任务的线程的中断控制状态,以及其他的次要信息。这个类扩展AbstractQueuedSynchronizer以简化获取和释放锁。 这可以防止中断...

2018-10-08 16:53:53 1638

原创 线程池ThreadPoolExecutor详解

官方文档介绍ExecutorService,它使用线程池中一个或者可能多个线程执行每个提交的任务,通常使用{@link Executors}工厂方法配置。线程池解决了两个不同的问题:它们通常在执行大量异步任务时提供改进的性能,这是由于减少了每个任务的调用开销,并且它们提供了一种绑定和管理资源的方法,包括执行任务集合时所消耗的线程。每个ThreadPoolExecutor还维护一些基本统计信息,...

2018-10-06 22:59:25 291

原创 ConcurrentHashMap详解

简介ConcurrentHashMap是一个哈希表,支持完全并发的读和高并发的更新,它和Hashtable的功能相同,并包含和Hashtable的每个方法对应的方法版本,虽然所有操作都是线程安全的,但是读操作不需要加锁,并且不支持以阻止所有访问的方式锁定整个表,在依赖于线程安全但不依赖于其同步细节的程序中,此类可以替换Hashtable。读操作(包括get)通常不会阻塞,所以可能与更新操作重叠...

2018-10-06 15:15:47 717

原创 Java中的容器

介绍容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。CollectionSetTreeSet:基于TreeMap实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。...

2018-10-03 20:36:14 184

原创 Java异常介绍

Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 分为两种:受检异常 :需要用 try…catch… 语句捕获并进行处理,并且可以从异常中恢复;为除Error和RuntimeException之外的异常非受检异常 :是程序运行时错误,例如除 0 会引发 Arithme...

2018-10-03 18:24:16 250

原创 final和static关键字

final数据声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。对于基本类型,final 使数值不变;对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。方法声明方法不能被子类重写。private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的...

2018-10-03 18:19:48 132

原创 抽象类和接口

抽象类抽象类和抽象方法都使用 abstract 关键字进行声明。抽象类一般会包含抽象方法,抽象方法一定位于抽象类中。接口从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。接口的成员(字段 + 方法)默认都是 public 的,并且不允许定义为 privat...

2018-10-03 17:02:23 214

原创 Java语法小细节

隐式类型转换在Java中,只会自动向上转型,而要强制向下转型因为向下转型对数值来说会影响数值精度,对类来说,子类可以向上转为父类类型,因为每一个子类都是可以替代父类的,而父类不能替代子类,因为子类是父类的特殊情况,增加或修改了父类,所以父类要转换成子类,要强制转换才行。对于浮点型例如:float f = 1.1 // 1.1是double类型的,精度更高,转换成float是向下转...

2018-10-03 16:39:52 180

原创 String详解

String不可变String被声明为final,不可被继承,就不能通过子类继承去更改String类内部使用final型的byte数组value保存字符串内容,意味着数组的地址空间不可改变,value不能再引用其他数组String内部没有提供改变value数组内容的方法不可变的好处线程安全String不可变,可以在多个线程中安全地使用可以缓存hash值String的hash值...

2018-10-03 15:40:26 285

原创 程序设计原则

十大设计原则单一责任原则修改一个类的原因应该只有一个。一个类应该只做一件事,当这个类需要做过多事情的时候,就需要分解这个类如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱这个类完成其它职责的能力。开放封闭原则类应该对扩展开放,对修改关闭。扩展就是添加新功能的意思,因此该原则要求在添加新功能时不需要修改代码。符合开闭原则最典型的设计模式是装饰者模式,...

2018-10-03 12:25:05 558

原创 Java多线程之四种实现方式

介绍继承Thread类,并重写其run方法实现Runnable接口实现Callable接口通过FutureTask包装器来创建Thread线程线程池,使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。方式一继承Thread类创建线程,重写run方法,开启线程直接调用start方法,...

2018-10-03 12:05:22 133

原创 spring的context:property-placeholder标签和PropertyPlaceholderConfigurer的bean配置

默认情况下,Spring容器仅允许最多定义一个PropertyPlaceholderConfigurer 或 <content:property-placeholder>,如果有多个属性文件,先扫描到的被保留,其余的会被Spring忽略解决办法:在所有PropertyPlaceholderConfigurer 或 <content:property-placeholder&g...

2018-10-01 17:02:10 653

原创 Redis客户端解析

客户端通信协议客户端和服务端之间的通信协议是在TCP协议上构建的Redis制定了RESP(Redis序列化协议)实现客户端和服务端的正常交互发送命令格式RESP的规定一条命令的格式如下,CRLF代表\r\n。*<参数数量> CRLF$<参数1的字节数量> CRLF<参数1> CRLF…$<参数n的字节数量> CRLF<参数n...

2018-10-01 16:52:35 185

原创 Redis键过期和键迁移

键过期命令expire key secondsexpireat key timestampttl keypttl keypexpire key millisecondspexpire key milliseconds-timestampsetex命令=set+expire的组合,不但是原子执行,同时减少了一次网络通讯的时间键迁移把部分数据从一个Redis实例迁移到另一个Redis...

2018-10-01 12:54:27 373

原创 Redis数据结构之有序集合

简介有序集合中的元素不重复,但是可以排序,和列表所用索引下标不同,它给每个元素设置一个分数作为排序的依据,有序集合提供了获取指定分数和元素范围查询、计算成员排名等功能常用命令介绍命令命令描述zadd key score member [score member....]添加成员,附加nx xx ch incr四个选项zcard key计算成员个数zscor...

2018-10-01 01:15:52 334

原创 Redis数据结构之集合

简介set类型是用来保存多个字符串元素,但是不允许有重复,并且集合中的元素是无序的。集合有增删改查的操作,还有求集合间的交集、并集、差集等常用命令介绍命令命令描述sadd key element [element...]添加元素srem key element [element...]删除元素scard key计算元素个数sismember key...

2018-09-30 16:22:04 145

原创 Redis数据结构之列表详解

参考自《Redis开发与运维》简介列表类型是用来存储多个有序的字符串,一个列表最多可存储2^32-1个元素,列表结构实际上是双向链表,可以当队列或者栈特点列表中的元素是有序的,可以通过下标访问或者某个范围内的元素列表中的元素可以是重复的命令介绍命令命令描述rpush key value [value...]右边插入元素,左边插入则是lpushlins...

2018-09-30 10:28:15 160

原创 Redis数据结构之哈希详解

简介Redis本身是键值对数据库,但是值对应多种数据结构,其中就有哈希(即键值对),值中的键值对称为field和value。基本命令命令命令描述hset key field value设置哈希,和字符串类似,也提供了hsetnx命令,不过是nx是针对fieldhget key field获取值hdel key field [field...]删除fie...

2018-09-29 17:59:45 2136

原创 Redis字符串介绍

参考自《Redis开发与运维》简介字符串是Redis最基础的数据结构,键都是字符串类型,而其他几种数据结构都是建立在字符串基础上。字符串类型的值实际上可以是字符串(简单字符串或复杂字符串JSON/XML等等),数字,二进制,值最大不能超过512MB字符串命令命令命令描述set key value [ex seconds] [px milliseconds] [nx|...

2018-09-29 16:01:12 178

原创 redis单线程架构解析

简介Redis使用单线程架构和I/0多路复用模型来实现高性能的内存数据库服务单线程模型介绍Redis单线程的优势Redis是基于内存的,数据都存放在内存中,访问速度极快,这是Redis达到每秒万级别访问的重要基础非阻塞的I/O,Redis使用epoll作为I/O多路复用技术的实现,加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换成事件,不在网络I/O上浪费...

2018-09-28 22:49:35 675

原创 redis数据结构

简介redis是KV型NoSQL,基于键值对中的值,提供了5中数据结构:string、list、zset、hash、set,每种数据结构都有多种底层编码实现,在合适的场景选择合适的内部编码Redis全局命令命令命名描述keys *查看所有键,时间复杂度O(N),会遍历所有键,当保存了大量key时,线上环境禁止使用,需要耗费非常多时间dbsize键总数,时间复杂...

2018-09-28 21:36:56 389

原创 Redis基本操作

####命令介绍redis-cli -v: 查看redis版本redis-server: 直接启动redis,终端打开的是服务端,此时服务端在运行,你在终端发出的任何指令都被阻塞,此时再打开一个终端去运行客户端就行了,在客户端发送指令redis-server &:后台启动redis,此时redis服务端在后台运行 ,终端可以执行其他的redis指令redis-...

2018-09-28 20:37:36 128

原创 HashMap详解

简介基于Map接口实现的哈希表,这个实现提供了所有可选的哈希桶的操作,允许null值和null键,除了HashMap是非同步和允许null之外,HashMap大致等同于Hashtable。HashMap不保证哈希桶的顺序,特别是它不保证哈希桶的顺序会随着时间的推移保持不变。假设散列函数在桶之间正确地分散元素,则HashMap为基本的get和put操作提供了恒定时间性能在集合视图上的迭代器需要...

2018-09-28 17:43:51 457

原创 Bean的生命周期

简介Bean的生命周期由多个特定的生命阶段组成,Spring在每个阶段都向外暴露出了一些接口,允许外界在Bean的生命周期阶段对其进行控制BeanFactory中Bean的生命周期...

2018-09-27 19:37:39 122

原创 WebApplicationContext详解

简介由于Web应用比一般应用拥有更多的特性,因此WebApplicationContext扩展了ApplicationContextWebApplicationContext是专门为Web应用准备的,它允许从相对于Web根目录的路径中装载配置文件完成初始化工作。从WebApplicationContext中可以获得ServletContext的引用,整个Web应用上下文对象作为属性放置到Se...

2018-09-27 18:22:48 4212

空空如也

空空如也

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

TA关注的人

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