自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 资源 (16)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring Cloud集成ELK完成日志收集实战(elasticsearch、logstash、kibana)

简介对于日志来说,最常见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:logstash(收集)、elasticsearch(存储+搜索)、kibana(展示),我们将这三个组合起来的技术称之为ELK,所以说ELK指的是Elasticsearch、Logstash、Kibana技术栈的结合。ELK对外作为一个日志管理系统的开源方案,能够可靠和安全地从任何格式的任何来源获取数据,...

2020-02-14 14:58:56 3871

原创 Swagger与SpringMvc集成生成Restful形式接口文档

swagger提供的接口文档相比传统的文档方式更加直观也更加高效,但是在网上找了很多关于Swagger与SpringMvc整合的资料,发现都比较繁琐,不是很满意,于是有了这篇博客,希望对大家有所帮助。

2017-06-29 18:20:42 20168

原创 达梦数据库同步部署方案

达梦数据复制(DATA REPLICATION)是一个分担系统访问压力、加快异地访问响应速度、提高数据可靠性的解决方案。将一个服务器实例上的数据变更复制到另外的服务器实例。可以用于解决大、中型应用中出现的因来自不同地域、不同部门、不同类型的数据访问请求导致数据库服务器超负荷运行、网络阻塞、远程用户的数据响应迟缓的问题。

2022-01-19 10:27:05 1952

原创 centos7防火墙常规操作-防火墙开启、关闭、查询防火墙状态、开放端口、查询开放端口等

Linux开启、关闭防火墙、查看防火墙状态、重启防火墙,开放指定端口等常规操作

2022-01-19 10:23:27 789

原创 Spring系列(五)Spring的多线程

1. 多线程Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用ThredPoolTaskExecutor可以实现基于线程池的TaskExecutor。为了实现异步任务,可以在配置类中通过 @Enable开启对异步任务的支持,并通过实际执行的Bean的方法使用 @Async 注解来声明是一个异步任务2. 代码示例配置类/** * 配置类 * @E...

2020-03-20 10:24:37 852

原创 Spring系列(四)Spring Aware

1. 什么是Spring AwareSpring的依赖注入的最大的亮点就是所有的Bean对容器的存在是没有意识的,即你可以将你的容器换成别的容器,这时Bean直接的耦合度最低。需要用到Spring容器本身的功能资源的时候,Bean必须意识到Spring容器的存在,才能调用Spring所提供的资源,这就是Spring Aware。若使用了Spring Aware,Bean将会和Spring框架耦...

2020-03-20 10:20:08 186

原创 使用Comparator实现集合排序

对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序.实现int compare(T o1, T o2);方法,返回正数,零,负数各代表大于,等于,小于。用于排序的示例代码如下:实体类:Studentpackage com.zjx;public class Student { private Stri...

2020-02-07 22:07:56 1099

原创 Spring系列(三)Spring AOP详解

文章目录1 什么是面向切面编程1.1 定义AOP术语1.2 Spring对AOP的支持2 通过切点来选择连接点2.1 编写切点2.2 在切点中选择bean3 使用注解创建切面3.1 定义切面3.2 创建环绕通知3.3 处理通知中的参数3.4 通过注解引入新功能4. 在XML中声明切面4.1 声明前置通知和后置通知4.2 声明环绕通知4.3 为通知传递参数4.4 通过切面引入新的功能5. 注入Asp...

2020-02-06 20:29:00 844

原创 JAVA NIO(四)NIO非阻塞式网络通信

1. 阻塞与非阻塞传统的IO流都是阻塞式的。也就是说,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行 IO 操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。Java NIO 是非阻塞模式的。当线程从某通道进行读写数据...

2020-02-06 12:21:22 550

原创 JAVA NIO(三)通道(Channel)

1. 通道(Channel)通道(Channel):由java.nio.Channels包定义的。Channel表示IO源与目标打开的连接。Channel类似于传统中的“流”,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。Channel在java NIO中负责缓冲区的数据传输。Channel本身不存在数据,因此需要配合缓冲区进行传输。Java 为 C...

2020-02-05 22:39:28 891

原创 JAVA NIO(二)NIO之缓冲区(Buffer)详解

缓冲区在java NIO中负责数据的存取。缓冲区就是数组,用于存储不同数据类型的数据

2020-02-05 21:16:56 579

原创 JAVA NIO(一)基本概念

Java NIO(New IO)是从java 1.4版本开始引入的一个新的IO API,可以替代标准的java IO API。NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。Sun官方标榜的特性如下:为所有的原始类型提供(Buffer)缓存支持字符集编码解码方案Channel:一个新的原始I/O抽象支持锁和内存映射文件的文件访问接口提供多...

2020-02-05 21:12:55 178 1

原创 IO系列之对象序列化

1. 对象序列化介绍对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流,都可以将这种二进制流恢复成原来的Java对象。 简单来讲,对象序列化就是将内存中的对象数据转换为二进制流进行传输的操作。对象序...

2020-02-05 11:41:13 227

原创 IO系列之缓冲流详解

缓冲流是一个包装类,起到缓冲作用。缓冲流分为-字符缓冲(BufferedReader和BufferedWriter)和字节缓冲流(BufferedInputStream和BufferedOutputStream)

2020-02-04 14:49:27 756

原创 图的广度优先搜索(java和Python实现)

广度优先搜索:bredth-first search BFS图由节点和边组成。一个节点可能与众多节点相连,这些结点被称为邻居。可以使用广度优先搜索查找最短路径队列是一种先进先出(First in First Out,FIFO)的数据结构。队列只支持两种操作:入队和出队栈是一种后进先出(Last In First Out,LIFO)的数据结构广度优先搜索运行时间为O(点数+边数),这通常写...

2020-02-04 10:22:11 243

原创 java实现文件夹的拷贝(复制文件夹)

复制文件夹其实就是通过递归复制文件的过程,具体实现如下: /** * 复制文件夹(使用缓冲字节流) * @param sourcePath 源文件夹路径 * @param targetPath 目标文件夹路径 */ public static void copyFolder(String sourcePath,String targetPath) ...

2020-02-03 20:44:08 4322

原创 java实现文件拷贝的七种方式

java拷贝文件的七中方式

2020-02-03 18:24:09 2820

原创 使用Java和Python实现快速排序算法

快速排序采用了分而治之的策略(divide and conquer,D&C),一种著名的递归式问题解决方法。分而治之的工作原理:找出简单的基线条件确定如何缩小问题的规模,使其符合基线条件使用递归实现数组元素求和:java版本 public static int sum(int[] array){ if(array.length <= 1){ ...

2020-02-02 21:59:57 1155

原创 IO系列之内存流

内存流:在内存中读写数据特点:数据在内存中处理比磁盘(硬盘)要更快一些,有时候可能需要临时在内存中保存并处理数据,内存流效率会更高java.io提供了字节内存流和字符内存流:字节内存流:ByteArrayInputStream和ByteArrayOutputStream字符内存流:CharArrayReader和CharArrayWriterByteArrayInputStr...

2020-02-02 21:58:31 414

原创 IO系列之字节流和字符流

IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流进行输入、输出操作一般都会按照如下步骤进行:通过File类定义一个要操作文件的路径通过字节流或字符流的子类对象为父类对象实例化进行数据的读(输入)、写(输出)操作数据流属于资源操作,资源操作必须关闭java.io包定义了两类流:字节流(JDK 1.0):InputStrea...

2020-02-02 12:14:50 524

原创 IO系列之使用File类操作文件

1. File类介绍五个核心类:File、InputStream、OutputStream、Reader、Writer一个核心接口:Serializable在整个java.io包里面,File类是唯一一个与文件本身操作有关的类,但是不涉及具体内容。文件本身是指文件的创建、删除等操作2. 通过构造方法设置文件路径public File(String pathname)pathna...

2020-02-01 22:49:03 249

原创 选择排序算法解析

选择排序是遍历列表,然后每次将最大或者最小的数保存到新的列表,这样就得到了排好序的列表。选择排序时间复杂度为O(n^2)实现选择排序的基本步骤如下:先从第一个元素开始,相邻的两个元素进行比较,最后得出第一次比较中最小的元素;记录好这个最小元素的位置,并把这个元素与第一个元素互换位置;接着再从第二个元素开始,相邻的两个元素再进行比较,得出第二次比较中最小的元素;记录好这个最小元素的位置,...

2020-02-01 10:26:32 182

原创 使用Java实现链表

链表(Linked List)介绍链表是有序的列表链表是以节点的方式存储的,是链式存储每个节点包含data域,next域:指向下一个节点链表的各个节点不一定是连续存储链表分带头节点的链表和没有头节点的链表。不带头节点的链表为单链表使用代码实现单向链表示例如下:package com.zjx.algorithm.linkedlist;/** * 单向链表的实现 */pub...

2020-01-30 16:29:35 228

原创 稀疏数组和队列

一、稀疏数组当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组(sparsearray)的处理方式:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小程序的规模。二维数组转稀疏数组的思路遍历原始的二维数组,得到有效数据(不同的值的数据)的个数sum根据sum可以创建稀疏数组sparse...

2020-01-20 09:41:30 255

原创 算法概述

1. 什么是算法算法是模型分析的一组可行的、确定的和有穷的规则。一个典型的算法可以从其中抽象出5个特征:有穷性、确切性、输入、输出和可行性有穷性:算法的指令或者步骤的执行次数是有限的,执行的时间也是有限的。确切性算法的每一个指令或者步骤都必须有明确的定义和描述。输入一个算法应该有相应的输入条件,用来刻画运算对象的初始情况。输出一个算法应该有明确的结果输出可...

2020-01-20 09:40:03 1291

原创 java身份证工具类(校验身份证是否合法、通过身份证获取年龄、性别、生日,将15位身份证转为18位等)

一、简介 因为工作需要经常用到身份证做一些相关操作,于是通过查阅资料总结出一些常用的工具方法,包括校验身份证是否合法、通过身份证获取年龄、通过身份证获取性别、通过身份证获取户籍地址、通过身份证获取生日、将15位身份证转为18位身份证等。

2020-01-08 14:27:20 6738

原创 java数组详解

数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。例如:int[] a;这条语句只是声明了变量a,并没有将a初始化为一个真正的数组,使用new运算符创建数组。int[] a = new int[10];创建一个数字数组时,所有元素都初始化为0,boolean数组的元素初...

2019-12-25 14:11:40 314

原创 Java实体转换相关工具类

主要实现相同属性的实体对象之间复制、将一个集合的对象复制为另一个集合、将json转换为对象以及将map集合拷贝为对象等功能。

2019-12-19 10:43:32 797

原创 通过身份证获取年龄和性别

需要引入commons-lang包package com.zjx.util;import org.apache.commons.lang.StringUtils;import java.text.SimpleDateFormat;import java.util.Date;/** * @author zhaojiaxing * @version 1.0 * @descrip...

2019-12-19 10:39:39 384

原创 mysql系列(十三)SQL语句之联结表

1.联结sql最强大的功能之一就是可以在数据检索查询的执行中联结(join)表。联结是利用SELECT能执行的嘴重要的操作。1.1 关系表关系表的设计就是要保证把信息分成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(relational))互相关联。 外键:外键为某个表中的一列,它包含另一个表的主键值,它定义了两个表之间的关系关系表的好处:...

2018-07-26 17:41:07 806

原创 mysql系列(十二)SQL语句之子查询

1.利用子查询进行过滤子查询:嵌套在其他查询中的查询SELECT column1_name FROM table1 WHERE column2_name IN ( SELECT column2_name FROM table2 WHERE column2_name &gt;...

2018-07-24 10:25:29 504

原创 mysql系列(十一)分组数据

1. 什么是分组?分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。2. 创建分组分组是在SELECT语句的GROUP BY子句中建立的,用法如下:SELECT column1_name,column2_name FROM table GROUP BY column1_nameGROUP BY子句可以包含任意数目的列。如果在GROUP BY子句中列出的每个列...

2018-07-23 14:24:44 297

原创 mysql系列(十)汇总函数

一、聚集函数聚集函数:运行在行组上,计算和返回单个值的函数SQL聚集函数 函数 说明 AVG() 返回某列的平均值 COUNT() 返回某列的行数 MAX() 返回某列的最大值 MIN() 返回某列的最小值 SUM() 返回某列值之和1.1 AVG()函数AVG():返回所有列、特定列或行的平均...

2018-07-23 14:07:01 284 1

原创 mysql系列(九)sql语句之使用数据处理函数

1.什么是函数函数一般是在数据上执行的,他给数据的处理和转换带来了方便 大多数SQL实现支持以下类型的函数 用于处理文本串的文本函数用于在数值数据上进行算术操作的数值函数用于处理日期和时间的日期和时间函数返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数。2.使用函数2.1 文本处理函数常见的文本处理函数 函数 说明...

2018-07-23 11:52:59 364

原创 Spring系列(二)Spring bean的高级装配详解

1 环境与profile在开发软件的时候,有一个很大的挑战就是将应用程序从一个环境迁移到另一个环境。在开发阶段中,某些相关做法可能并不适合迁移到生产环境中,甚至迁移过去也无法正常工作。数据库配置就是比较常见的例子。Spring为环境相关的bean所提供的解决方案其实与构建时的方案没什么差别,不过Spring并不是在构建时确定该创建哪个bean,而是在运行时决定。这样的结果就是同一个部署单元...

2018-06-28 23:32:54 615 1

原创 mysql系列(八)sql语句之创建计算字段

前言有时候储存在数据库表中的数据不是应用程序所需的格式,例如想在一个字段中既显示公司名又显示显示公司地址,但这两个信息一般保存在不同的表列中,这时候就需要使用计算字段,直接从数据库中检索出转换、计算或者格式化的数据,而不是直接返回数据库中的数据然后由应用程序来处理。 计算字段并不存在数据库中,是在运行SELECT语句内创建的1.拼接(concatenate)将值连接在一起构成...

2018-06-26 21:49:41 2078

原创 mysql系列(七)SQL语句之使用正则表达式进行搜索

一、什么是正则表达式正则表达式是用正则表达式语言来建立 ,用来匹配文本的特殊的串(字符集合) 。二、使用mysql正则表达式mysql用WHERE子句对正则表达式提供了初步的支持,允许你用正则表达式过滤SELECT检索出来的数据,使用正则表达式需要用 REGEXP 关键字。2.1 基本字符匹配检索column1_name包含文本1000的所有行SELECT column1...

2018-06-23 16:12:01 4810

原创 Spring系列(一)Spring装配bean详解

装配(wiring): 创建应用对象之间协作关系的行为。依赖注入的本质是装配。1 Spring配置的可选方案Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系。Spring提供了三种主要的装配机制: - 在XML中进行显示配置 - 在Java中进行显示配置 - 隐式的bean发现机制和自动装配这些装配机制可以同时使用,也可以单独使用2 ...

2018-06-17 21:32:54 637

原创 mysql系列(六)SQL语句之从数据库中查询数据

前言一、检索数据(基础查询)1.1 检索单个列1.2 检索多个列1.3 检索所用列1.4 检索不同的行(即返回没有重复的数据)1.5 限制结果1.6 使用完全限定的表名二、排序2.1 单个排序2.2 多个列排序2.3 指定排序方向三、过滤数据使用WHERE子句3.1 检查单个值3.2 不匹配检查3.3 范围值检查四、组合WHERE子...

2018-06-16 23:05:34 4135

原创 mysql系列(五)通过SQL语句更新和删除表中的数据

前言1.更新数据2.删除数据前言上一章讲了怎么向表中插入数据,本文接着讲怎么更新数据和删除数据。学习本章前可以先学习上一章内容:mysql系列(四)插入数据,或者向你的数据库依次导入两个sql脚本:student.sql 和 insert.sql1.更新数据更新数据使用UPDATE语句,可以更新表中特定的行,也可以更新所有的行。注意不要省略WHERE...

2018-05-30 21:57:00 8575

Java面试题2021.zip

最全Java面试题

2021-11-15

Leetcode刷题笔记.zip

力扣刷题笔记

2021-04-20

深入浅出MyBatis技术原理与实战(高清带目录版)

随着大数据时代的到来,Java 持久层框架MyBatis 已经成为越来越多企业的选择。遗憾的是,时至今日国内依然没有一本讨论MyBatis 的书,这增加了初学者的学习难度,初学者往往只能基于零星的案例来学习MyBatis,无法系统地掌握MyBatis,更不用说精通了。《深入浅出MyBatis 技术原理与实战》是笔者通过大量实践和研究源码后创作而成的,是国内系统介绍MyBatis 著作的先河。 《深入浅出MyBatis技术原理与实战》分为3 个部分,依次介绍了MyBatis 的基础应用、原理及插件开发、实践应用,使读者能够由浅入深、循序渐进地掌握MyBatis 技术。首先,《深入浅出MyBatis技术原理与实战》在官方API 的基础上完善了许多重要的论述和实例,并且给出了实操建议,帮助读者正确掌握MyBatis。其次,《深入浅出MyBatis技术原理与实战》详细讲述了MyBatis 的内部运行原理,并全面讨论了插件的开发。最后,本着学以致用的原则,笔者阐述了MyBatis-Spring 项目和一些MyBatis 开发常见的实例,使读者能够学得会,用得好。 《深入浅出MyBatis技术原理与实战》不是一本味同嚼蜡的理论专著,而是一本MyBatis 的实践指南,无论你是Java 程序员、MyBatis开发者,还是Java 持久层框架的研究者,你都能从本书中收获知识。

2018-04-28

Spring+Cloud与Docker微服务架构实战(带目录高清版)

内容简介 · · · · · · 作为一部帮助大家实现微服务架构落地的作品,《Spring Cloud与Docker微服务架构实战》覆盖了微服务理论、微服务开发框架(Spring Cloud)以及运行平台(Docker)三大主题。全书可分为三部分,第1章对微服务架构进行了系统的介绍;第2-11章使用Spring Cloud开发框架编写了一个“电影售票系统”;第12-14章则讲解了如何将微服务应用运行在Docker之上。全书Demo驱动学习,以连贯的场景、具体的代码示例来引导读者学习相关知识,最终使用特定的技术栈实现微服务架构的落地。 作者简介 · · · · · · 周立,Spring Cloud中国社区联合发起人。拥有近7年的软件系统开发经验,多年系统架构经验。对Spring Cloud、微服务、持续集成、持续交付有一定见地。 热爱技术交流,曾代表公司参加全球微服务架构高峰论坛、QCon等技术沙龙。拥抱开源,在GitHub与Git@OSC上开源多个项目,并获得了开源中国的推荐,例如开源电子书《使用Spring Cloud与Docker实战微服务》等。 笔者博客:http://itmuch.com,定期分享Spring Cloud相关博客。读者可扫码关注Spring Cloud 中国社区公众号以及作者公众号。 目录 · · · · · · 1 微服务架构概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 单体应用架构存在的问题1 1.2 如何解决单体应用架构存在的问题3 1.3 什么是微服务3 1.4 微服务架构的优点与挑战5 1.4.1 微服务架构的优点5 1.4.2 微服务架构面临的挑战5 1.5 微服务设计原则6 1.6 如何实现微服务架构7 1.6.1 技术选型7 1.6.2 架构图及常用组件8 2 微服务开发框架——Spring Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1 Spring Cloud 简介10 2.2 Spring Cloud 特点10 2.3 Spring Cloud 版本11 2.3.1 版本简介11 2.3.2 子项目一览12 2.3.3 Spring Cloud/Spring Boot 版本兼容性13 3 开始使用Spring Cloud 实战微服务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1 Spring Cloud 实战前提14 3.1.1 技术储备14 3.1.2 工具及软件版本15 3.2 服务提供者与服务消费者16 3.3 编写服务提供者16 3.3.1 手动编写项目17 3.3.2 使用Spring Initializr 快速创建Spring Boot 项目21 3.4 编写服务消费者23 3.5 为项目整合Spring Boot Actuator 25 3.6 硬编码有哪些问题27 4 微服务注册与发现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.1 服务发现简介29 4.2 Eureka 简介31 4.3 Eureka 原理31 4.4 编写Eureka Server 33 4.5 将微服务注册到Eureka Server 上35 4.6 Eureka Server 的高可用36 4.6.1 将应用注册到Eureka Server 集群上38 4.7 为Eureka Server 添加用户认证39 4.7.1 将微服务注册到需认证的Eureka Server 40 4.8 理解Eureka 的元数据41 4.8.1 改造用户微服务41 4.8.2 改造电影微服务41 4.9 Eureka Server 的REST 端点43 4.9.1 示例45 4.9.2 注销微服务实例49 4.10 Eureka 的自我保护模式51 4.11 多网卡环境下的IP 选择52 4.11.1 忽略指定名称的网卡52 4.11.2 使用正则表达式,指定使用的网络地址52 4.11.3 只使用站点本地地址53 4.11.4 手动指定IP 地址53 4.12 Eureka 的健康检查53 5 使用Ribbon 实现客户端侧负载均衡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.1 Ribbon 简介56 5.2 为服务消费者整合Ribbon 57 5.3 使用Java 代码自定义Ribbon 配置60 5.4 使用属性自定义Ribbon 配置63 5.5 脱离Eureka 使用Ribbon 64 6 使用Feign 实现声明式REST 调用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.1 Feign 简介67 6.2 为服务消费者整合Feign 67 6.3 自定义Feign 配置69 6.4 手动创建Feign 72 6.4.1 修改用户微服务72 6.4.2 修改电影微服务76 6.5 Feign 对继承的支持78 6.6 Feign 对压缩的支持79 6.7 Feign 的日志80 6.8 使用Feign 构造多参数请求82 6.8.1 GET 请求多参数的URL 82 6.8.2 POST 请求包含多个参数83 7 使用Hystrix 实现微服务的容错处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 7.1 实现容错的手段85 7.1.1 雪崩效应85 7.1.2 如何容错86 7.2 使用Hystrix 实现容错88 7.2.1 Hystrix 简介88 7.2.2 通用方式整合Hystrix 89 7.2.3 Hystrix 断路器的状态监控与深入理解91 7.2.4 Hystrix 线程隔离策略与传播上下文93 7.2.5 Feign 使用Hystrix 96 7.3 Hystrix 的监控101 7.3.1 Feign 项目的Hystrix 监控102 7.4 使用Hystrix Dashboard 可视化监控数据103 7.5 使用Turbine 聚合监控数据105 7.5.1 Turbine 简介105 7.5.2 使用Turbine 监控多个微服务105 7.5.3 使用消息中间件收集数据108 8 使用Zuul 构建微服务网关. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 8.1 为什么要使用微服务网关113 8.2 Zuul 简介115 8.3 编写Zuul 微服务网关115 8.4 Zuul 的路由端点118 8.5 Zuul 的路由配置详解119 8.6 Zuul 的安全与Header 122 8.6.1 敏感Header 的设置122 8.6.2 忽略Header 123 8.7 使用Zuul 上传文件124 8.7.1 编写文件上传微服务124 8.8 Zuul 的过滤器127 8.8.1 过滤器类型与请求生命周期127 8.8.2 编写Zuul 过滤器128 8.8.3 禁用Zuul 过滤器130 8.9 Zuul 的容错与回退130 8.9.1 为Zuul 添加回退131 8.10 Zuul 的高可用133 8.10.1 Zuul 客户端也注册到了Eureka Server 上133 8.10.2 Zuul 客户端未注册到Eureka Server 上133 8.11 使用Sidecar 整合非JVM 微服务134 8.11.1 编写Node.js 微服务135 8.11.2 编写Sidecar 136 8.11.3 Sidecar 的端点138 8.11.4 Sidecar 与Node.js 微服务分离部署139 8.11.5 Sidecar 原理分析139 9 使用Spring Cloud Config 统一管理微服务配置. . . . . . . . . . . . . . . . . . . . . . . 142 9.1 为什么要统一管理微服务配置142 9.2 Spring Cloud Config 简介143 9.3 编写Config Server 144 9.3.1 Config Server 的端点145 9.4 编写Config Client 147 9.5 Config Server 的Git 仓库配置详解149 9.6 Config Server 的健康状况指示器152 9.7 配置内容的加解密153 9.7.1 安装JCE 153 9.7.2 Config Server 的加解密端点153 9.7.3 对称加密153 9.7.4 存储加密的内容154 9.7.5 非对称加密155 9.8 使用/refresh 端点手动刷新配置155 9.9 使用Spring Cloud Bus 自动刷新配置157 9.9.1 Spring Cloud Bus 简介157 9.9.2 实现自动刷新158 9.9.3 局部刷新159 9.9.4 架构改进159 9.9.5 跟踪总线事件160 9.10 Spring Cloud Config 与Eureka 配合使用161 9.11 Spring Cloud Config 的用户认证162 9.11.1 Config Client 连接需用户认证的Config Server 163 9.12 Config Server 的高可用164 9.12.1 Git 仓库的高可用164 9.12.2 RabbitMQ 的高可用164 9.12.3 Config Server 自身的高可用165 10 使用Spring Cloud Sleuth 实现微服务跟踪. . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 10.1 为什么要实现微服务跟踪167 10.2 Spring Cloud Sleuth 简介168 10.3 整合Spring Cloud Sleuth 170 10.4 Spring Cloud Sleuth 与ELK 配合使用172 10.5 Spring Cloud Sleuth 与Zipkin 配合使用176 10.5.1 Zipkin 简介176 10.5.2 编写Zipkin Server 176 10.5.3 微服务整合Zipkin 178 10.5.4 使用消息中间件收集数据181 10.5.5 存储跟踪数据183 11 Spring Cloud 常见问题与总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 11.1 Eureka 常见问题186 11.1.1 Eureka 注册服务慢186 11.1.2 已停止的微服务节点注销慢或不注销187 11.1.3 如何自定义微服务的Instance ID 188 11.1.4 Eureka 的UNKNOWN 问题总结与解决189 11.2 Hystrix/Feign 整合Hystrix 后首次请求失败190 11.2.1 原因分析191 11.2.2 解决方案191 11.3 Turbine 聚合的数据不完整191 11.3.1 解决方案192 11.4 Spring Cloud 各组件配置属性193 11.4.1 Spring Cloud 的配置193 11.4.2 原生配置193 11.5 Spring Cloud 定位问题思路总结194 12 Docker 入门. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 12.1 Docker 简介197 12.2 Docker 的架构197 12.3 安装Docker 199 12.3.1 系统要求199 12.3.2 移除非官方软件包199 12.3.3 设置Yum 源199 12.3.4 安装Dokcer 200 12.3.5 卸载Docker 201 12.4 配置镜像加速器201 12.5 Docker 常用命令202 12.5.1 Docker 镜像常用命令202 12.5.2 Docker 容器常用命令204 13 将微服务运行在Docker 上. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 13.1 使用Dockerfile 构建Docker 镜像209 13.1.1 Dockerfile 常用指令210 13.1.2 使用Dockerfile 构建镜像215 13.2 使用Docker Registry 管理Docker 镜像217 13.2.1 使用Docker Hub 管理镜像217 13.2.2 使用私有仓库管理镜像219 13.3 使用Maven 插件构建Docker 镜像220 13.3.1 快速入门221 13.3.2 插件读取Dockerfile 进行构建222 13.3.3 将插件绑定在某个phase 执行223 13.3.4 推送镜像224 13.4 常见问题与总结226 14 使用Docker Compose 编排微服务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 14.1 Docker Compose 简介227 14.2 安装Docker Compose 227 14.2.1 安装Compose 228 14.2.2 安装Compose 命令补全工具228 14.3 Docker Compose 快速入门229 14.3.1 基本步骤229 14.3.2 入门示例229 14.3.3 工程、服务、容器230 14.4 docker-compose.yml 常用命令230 14.4.1 build 230 14.4.2 command 231 14.4.3 dns 231 14.4.4 dns_search 231 14.4.5 environment 231 14.4.6 env_file 232 14.4.7 expose 232 14.4.8 external_links 232 14.4.9 image 232 14.4.10 links 232 14.4.11 networks 233 14.4.12 network_mode 233 14.4.13 ports 233 14.4.14 volumes 233 14.4.15 volumes_from 234 14.5 docker-compose 常用命令234 14.5.1 build 234 14.5.2 help 235 14.5.3 kill 235 14.5.4 logs 235 14.5.5 port 235 14.5.6 ps 235 14.5.7 pull 235 14.5.8 rm 236 14.5.9 run 236 14.5.10 scale 236 14.5.11 start 236 14.5.12 stop 236 14.5.13 up 236 14.6 Docker Compose 网络设置237 14.6.1 基本概念237 14.6.2 更新容器237 14.6.3 links 238 14.6.4 指定自定义网络238 14.6.5 配置默认网络239 14.6.6 使用已存在的网络239 14.7 综合实战:使用Docker Comose 编排Spring Cloud 微服务240 14.7.1 编排Spring Cloud 微服务240 14.7.2 编排高可用的Eureka Server 243 14.7.3 编排高可用Spring Cloud 微服务集群及动态伸缩245 14.8 常见问题与总结247 后记. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

2018-04-28

Spring Cloud微服务实战(高清带目录书签)

《Spring Cloud微服务实战》从时下流行的微服务架构概念出发,详细介绍了Spring Cloud针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,《Spring Cloud微服务实战》主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。 《Spring Cloud微服务实战》适合所有Java开发人员,尤其适合正在做微服务架构技术选型或正在实施微服务架构的团队查阅和参考。 目录 · · · · · · 第1章 基础知识 1 什么是微服务架构 1 -- 与单体系统的区别 1 -- 如何实施微服务 2 为什么选择Spring Cloud 6 Spring Cloud简介 7 版本说明 8 第2章 微服务构建:Spring Boot 11 框架简介 12 快速入门 13 -- 项目构建与解析 13 -- 实现RESTful API 17 配置详解 20 -- 配置文件 20 -- 自定义参数 22 -- 参数引用 22 -- 使用随机数 23 -- 命令行参数 23 -- 多环境配置 24 -- 加载顺序 25 监控与管理 26 -- 初识actuator 27 -- 原生端点 28 小结 38 第3章 服务治理:Spring Cloud Eureka 39 服务治理 39 -- Netflix Eureka 40 --搭建服务注册中心 41 --注册服务提供者 43 --高可用注册中心 46 --服务发现与消费 48 Eureka详解 51 --基础架构 52 --服务治理机制 52 --源码分析 56 配置详解 65 --服务注册类配置 65 --服务实例类配置 67 跨平台支持 71 第4章 客户端负载均衡:Spring Cloud Ribbon 73 客户端负载均衡 73 RestTemplate详解 75 -- GET请求 75 -- POST请求 77 -- PUT请求 79 -- DELETE请求 79 源码分析 80 -- 负载均衡器 91 -- 负载均衡策略 109 配置详解 123 --自动化配置 124 -- Camden版本对RibbonClient配置的优化 125 -- 参数配置 127 -- 与Eureka结合 127 重试机制 128 第5章 服务容错保护:Spring Cloud Hystrix 130 快速入门 131 原理分析 135 -- 工作流程 135 -- 断路器原理 144 -- 依赖隔离 148 使用详解 151 -- 创建请求命令 151 -- 定义服务降级 154 -- 异常处理 157 -- 命令名称、分组以及线程池划分 158 -- 请求缓存 159 -- 请求合并 166 属性详解 172 -- Command属性 174 -- collapser属性 184 -- threadPool属性 185 Hystrix仪表盘 187 Turbine集群监控 192 -- 构建监控聚合服务 192 -- 与消息代理结合 196 第6章 声明式服务调用:Spring Cloud Feign 199 快速入门 200 参数绑定 202 继承特性 205 Ribbon配置 209 全局配置 209 指定服务配置 209 重试机制 210 Hystrix配置 211 全局配置 211 禁用Hystrix 211 指定命令配置 212 服务降级配置 212 其他配置 214 第7章 API网关服务:Spring Cloud Zuul 217 快速入门 219 -- 构建网关 220 -- 请求路由 221 -- 请求过滤 223 路由详解 226 -- 传统路由配置 226 -- 服务路由配置 228 -- 服务路由的默认规则 229 -- 自定义路由映射规则 229 -- 路径匹配 230 -- 路由前缀 233 -- 本地跳转 234 -- Cookie与头信息 235 -- Hystrix和Ribbon支持 236 过滤器详解 238 -- 过滤器 238 -- 请求生命周期 239 -- 核心过滤器 240 -- 异常处理 244 -- 禁用过滤器 256 动态加载 257 -- 动态路由 257 -- 动态过滤器 261 第8章 分布式配置中心:Spring Cloud Config 267 快速入门 267 -- 构建配置中心 268 -- 配置规则详解 269 -- 客户端配置映射 272 服务端详解 274 -- 基础架构 274 -- Git配置仓库 276 -- SVN配置仓库 279 -- 本地仓库 279 -- 本地文件系统 279 -- 健康监测 280 -- 属性覆盖 281 -- 安全保护 281 -- 加密解密 282 -- 高可用配置 286 客户端详解 286 -- URI指定配置中心 287 -- 服务化配置中心 287 -- 失败快速响应与重试 290 -- 获取远程配置 292 -- 动态刷新配置 293 第9章 消息总线:Spring Cloud Bus 295 消息代理 295 RabbitMQ实现消息总线 296 -- 基本概念 297 -- 安装与使用 298 -- 快速入门 302 -- 整合Spring Cloud Bus 306 -- 原理分析 307 -- 指定刷新范围 308 -- 架构优化 309 -- RabbitMQ配置 310 Kafka实现消息总线 312 -- Kafka简介 312 -- 快速入门 313 --整合Spring Cloud Bus 315 -- Kafka配置 318 深入理解 318 -- 源码分析 320 -- 其他消息代理的支持 342 第10章 消息驱动的微服务:Spring Cloud Stream 344 快速入门 344 核心概念 349 -- 绑定器 350 -- 发布-订阅模式 351 -- 消费组 353 -- 消息分区 354 使用详解 355 -- 开启绑定功能 355 -- 绑定消息通道 356 -- 消息生产与消费 360 -- 响应式编程 366 -- 消费组与消息分区 368 -- 消息类型 370 绑定器详解 373 -- 绑定器SPI 373 -- 自动化配置 374 -- 多绑定器配置 374 -- RabbitMQ与Kafka绑定器 376 配置详解 376 -- 基础配置 377 -- 绑定通道配置 377 -- 绑定器配置 379 第11章 分布式服务跟踪:Spring Cloud Sleuth 386 快速入门 386 -- 准备工作 386 -- 实现跟踪 389 跟踪原理 390 抽样收集 392 与Logstash整合 394 与Zipkin整合 397 -- HTTP收集 398 -- 消息中间件收集 402 -- 收集原理 404 -- 数据存储 414 -- API接口 417 附录A Starter POMs 419 后记 421

2018-04-28

MongoDB权威指南 第三版(高清带目录书签)

MongoDB如何帮你管理通过Web应用收集的海量数据呢?通过本书的权威解读,你会了解面向文档数据库的诸多优点,会发现MongoDB如此稳定、性能优越甚至能够无限水平扩展背后的原因。 本书的两位作者均来自开发并支持开源数据库MongoDB的公司10gen。数据库开发人员可将此书作为参考指南,系统管理员可以从本书中找到高级配置技巧,其他用户可以了解一些基本概念和用例。你会发现,将数据组织成自包含的JSON风格的文档比组织成关系型数据库中的记录要容易得多。

2018-04-28

Spring Cloud微服务实战(高清版)

本书从时下流行的微服务架构概念出发,详细介绍了Spring Cloud针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,本书主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。本书适合所有Java开发人员,尤其适合正在做微服务架构技术选型或正在实施微服务架构的团队查阅和参考。 目录 第1章 基础知识 1 什么是微服务架构 1 与单体系统的区别 1 如何实施微服务 2 为什么选择Spring Cloud 6 Spring Cloud简介 7 版本说明 8 第2章 微服务构建:Spring Boot 11 框架简介 12 快速入门 13 项目构建与解析 13 实现RESTful API 17 配置详解 20 配置文件 20 自定义参数 22 参数引用 22 使用随机数 23 命令行参数 23 多环境配置 24 加载顺序 25 监控与管理 26 初识actuator 27 原生端点 28 小结 38 第3章 服务治理:Spring Cloud Eureka 39 服务治理 39 Netflix Eureka 40 搭建服务注册中心 41 注册服务提供者 43 高可用注册中心 46 服务发现与消费 48 Eureka详解 51 基础架构 52 服务治理机制 52 源码分析 56 配置详解 65 服务注册类配置 65 服务实例类配置 67 跨平台支持 71 第4章 客户端负载均衡:Spring Cloud Ribbon 73 客户端负载均衡 73 RestTemplate详解 75 GET请求 75 POST请求 77 PUT请求 79 DELETE请求 79 源码分析 80 负载均衡器 91 负载均衡策略 109 配置详解 123 自动化配置 124 Camden版本对RibbonClient配置的优化 125 参数配置 127 与Eureka结合 127 重试机制 128 第5章 服务容错保护:Spring Cloud Hystrix 130 快速入门 131 原理分析 135 工作流程 135 断路器原理 144 依赖隔离 148 使用详解 151 创建请求命令 151 定义服务降级 154 异常处理 157 命令名称、分组以及线程池划分 158 请求缓存 159 请求合并 166 属性详解 172 Command属性 174 collapser属性 184 threadPool属性 185 Hystrix仪表盘 187 Turbine集群监控 192 构建监控聚合服务 192 与消息代理结合 196 第6章 声明式服务调用:Spring Cloud Feign 199 快速入门 200 参数绑定 202 继承特性 205 Ribbon配置 209 全局配置 209 指定服务配置 209 重试机制 210 Hystrix配置 211 全局配置 211 禁用Hystrix 211 指定命令配置 212 服务降级配置 212 其他配置 214 请求压缩 214 日志配置 215 第7章 API网关服务:Spring Cloud Zuul 217 快速入门 219 构建网关 220 请求路由 221 请求过滤 223 路由详解 226 传统路由配置 226 服务路由配置 228 服务路由的默认规则 229 自定义路由映射规则 229 路径匹配 230 路由前缀 233 本地跳转 234 Cookie与头信息 235 Hystrix和Ribbon支持 236 过滤器详解 238 过滤器 238 请求生命周期 239 核心过滤器 240 异常处理 244 禁用过滤器 256 动态加载 257 动态路由 257 动态过滤器 261 第8章 分布式配置中心:Spring Cloud Config 267 快速入门 267 构建配置中心 268 配置规则详解 269 客户端配置映射 272 服务端详解 274 基础架构 274 Git配置仓库 276 SVN配置仓库 279 本地仓库 279 本地文件系统 279 健康监测 280 属性覆盖 281 安全保护 281 加密解密 282 高可用配置 286 客户端详解 286 URI指定配置中心 287 服务化配置中心 287 失败快速响应与重试 290 获取远程配置 292 动态刷新配置 293 第9章 消息总线:Spring Cloud Bus 295 消息代理 295 RabbitMQ实现消息总线 296 基本概念 297 安装与使用 298 快速入门 302 整合Spring Cloud Bus 306 原理分析 307 指定刷新范围 308 架构优化 309 RabbitMQ配置 310 Kafka实现消息总线 312 Kafka简介 312 快速入门 313 整合Spring Cloud Bus 315 Kafka配置 318 深入理解 318 源码分析 320 其他消息代理的支持 342 第10章 消息驱动的微服务:Spring Cloud Stream 344 快速入门 344 核心概念 349 绑定器 350 发布-订阅模式 351 消费组 353 消息分区 354 使用详解 355 开启绑定功能 355 绑定消息通道 356 消息生产与消费 360 响应式编程 366 消费组与消息分区 368 消息类型 370 绑定器详解 373 绑定器SPI 373 自动化配置 374 多绑定器配置 374 RabbitMQ与Kafka绑定器 376 配置详解 376 基础配置 377 绑定通道配置 377 绑定器配置 379 第11章 分布式服务跟踪:Spring Cloud Sleuth 386 快速入门 386 准备工作 386 实现跟踪 389 跟踪原理 390 抽样收集 392 与Logstash整合 394 与Zipkin整合 397 HTTP收集 398 消息中间件收集 402 收集原理 404 数据存储 414 API接口 417 附录A Starter POMs 419 后记 421

2018-04-27

Java核心技术 卷1 基础知识 原书第10版

作者简介 凯 S. 霍斯特曼(Cay S. Horstmann),圣何塞州立大学计算机科学系教授、Java的倡导者,经常在开发人员会议上发表演讲。他是《Core Java for the Impatient》(2015)《Java SE 8 for the Really Impatient》(2014)和《Scala for the lmpatient》(2012)的作者,这些书均由Addison-Wesley出版。他为专业程序员和计算机科学专业学生编写过数十本图书。 精彩导读 目录 译者序 前言 致谢 第1章 Java程序设计概述 1 1.1 Java程序设计平台 1 1.2 Java“白皮书”的关键术语 2 1.2.1 简单性 2 1.2.2 面向对象 2 1.2.3 分布式 3 1.2.4 健壮性 3 1.2.5 安全性 3 1.2.6 体系结构中立 4 1.2.7 可移植性 4 1.2.8 解释型 5 1.2.9 高性能 5 1.2.10 多线程 5 1.2.11 动态性 5 1.3 Java applet与Internet 6 1.4 Java发展简史 7 1.5 关于Java的常见误解 9 第2章 Java程序设计环境 12 2.1 安装Java开发工具包 12 2.1.1 下载JDK 12 2.1.2 设置JDK 13 2.1.3 安装库源文件和文档 15 2.2 使用命令行工具 16 2.3 使用集成开发环境 18 2.4 运行图形化应用程序 21 2.5 构建并运行applet 23 第3章 Java的基本程序设计结构 28 3.1 一个简单的Java应用程序 28 3.2 注释 31 3.3 数据类型 32 3.3.1 整型 32 3.3.2 浮点类型 33 3.3.3 char类型 34 3.3.4 Unicode和char类型 35 3.3.5 boolean类型 35 3.4 变量 36 3.4.1 变量初始化 37 3.4.2 常量 37 3.5 运算符 38 3.5.1 数学函数与常量 39 3.5.2 数值类型之间的转换 40 3.5.3 强制类型转换 41 3.5.4 结合赋值和运算符 42 3.5.5 自增与自减运算符 42 3.5.6 关系和boolean运算符 42 3.5.7 位运算符 43 3.5.8 括号与运算符级别 44 3.5.9 枚举类型 45 3.6 字符串 45 3.6.1 子串 45 3.6.2 拼接 46 3.6.3 不可变字符串 46 3.6.4 检测字符串是否相等 47 3.6.5 空串与Null串 48 3.6.6 码点与代码单元 49 3.6.7 String API 50 3.6.8 阅读联机API文档 52 3.6.9 构建字符串 54 3.7 输入输出 55 3.7.1 读取输入 55 3.7.2 格式化输出 58 3.7.3 文件输入与输出 61 3.8 控制流程 63 3.8.1 块作用域 63 3.8.2 条件语句 63 3.8.3 循环 66 3.8.4 确定循环 69 3.8.5 多重选择:switch语句 72 3.8.6 中断控制流程语句 74 3.9 大数值 76 3.10 数组 78 3.10.1 for each循环 79 3.10.2 数组初始化以及匿名数组 80 3.10.3 数组拷贝 81 3.10.4 命令行参数 81 3.10.5 数组排序 82 3.10.6 多维数组 85 3.10.7 不规则数组 88 第4章 对象与类 91 4.1 面向对象程序设计概述 91 4.1.1 类 92 4.1.2 对象 93 4.1.3 识别类 93 4.1.4 类之间的关系 94 4.2 使用预定义类 95 4.2.1 对象与对象变量 95 4.2.2 Java类库中的LocalDate类 98 4.2.3 更改器方法与访问器方法 100 4.3 用户自定义类 103 4.3.1 Employee类 103 4.3.2 多个源文件的使用 105 4.3.3 剖析Employee类 106 4.3.4 从构造器开始 106 4.3.5 隐式参数与显式参数 108 4.3.6 封装的优点 109 4.3.7 基于类的访问权限 111 4.3.8 私有方法 111 4.3.9 f?inal实例域 112 4.4 静态域与静态方法 112 4.4.1 静态域 112 4.4.2 静态常量 113 4.4.3 静态方法 114 4.4.4 工厂方法 115 4.4.5 main方法 115 4.5 方法参数 118 4.6 对象构造 123 4.6.1 重载 123 4.6.2 默认域初始化 123 4.6.3 无参数的构造器 124 4.6.4 显式域初始化 125 4.6.5 参数名 125 4.6.6 调用另一个构造器 126 4.6.7 初始化块 127 4.6.8 对象析构与f?inalize方法 130 4.7 包 131 4.7.1 类的导入 131 4.7.2 静态导入 133 4.7.3 将类放入包中 133 4.7.4 包作用域 136 4.8 类路径 137 4.8.1 设置类路径 139 4.9 文档注释 140 4.9.1 注释的插入 140 4.9.2 类注释 140 4.9.3 方法注释 141 4.9.4 域注释 142 4.9.5 通用注释 142 4.9.6 包与概述注释 143 4.9.7 注释的抽取 143 4.10 类设计技巧 144 第5章 继承 147 5.1 类、超类和子类 147 5.1.1 定义子类 147 5.1.2 覆盖方法 149 5.1.3 子类构造器 150 5.1.4 继承层次 153 5.1.5 多态 154 5.1.6 理解方法调用 155 5.1.7 阻止继承:f?inal类和方法 157 5.1.8 强制类型转换 158 5.1.9 抽象类 160 5.1.10 受保护访问 165 5.2 Object:所有类的超类 166 5.2.1 equals方法 166 5.2.2 相等测试与继承 167 5.2.3 hashCode方法 170 5.2.4 toString方法 172 5.3 泛型数组列表 178 5.3.1 访问数组列表元素 180 5.3.2 类型化与原始数组列表的兼容性 183 5.4 对象包装器与自动装箱 184 5.5 参数数量可变的方法 187 5.6 枚举类 188 5.7 反射 190 5.7.1 Class类 190 5.7.2 捕获异常 192 5.7.3 利用反射分析类的能力 194 5.7.4 在运行时使用反射分析对象 198 5.7.5 使用反射编写泛型数组代码 202 5.7.6 调用任意方法 205 5.8 继承的设计技巧 208 第6章 接口、lambda表达式与内部类 211 6.1 接口 211 6.1.1 接口概念 211 6.1.2 接口的特性 217 6.1.3 接口与抽象类 218 6.1.4 静态方法 218 6.1.5 默认方法 219 6.1.6 解决默认方法冲突 220 6.2 接口示例 222 6.2.1 接口与回调 222 6.2.2 Comparator接口 224 6.2.3 对象克隆 225 6.3 lambda表达式 231 6.3.1 为什么引入lambda表达式 231 6.3.2 lambda表达式的语法 232 6.3.3 函数式接口 234 6.3.4 方法引用 235 6.3.5 构造器引用 237 6.3.6 变量作用域 237 6.3.7 处理lambda表达式 239 6.3.8 再谈Comparator 242 6.4 内部类 242 6.4.1 使用内部类访问对象状态 244 6.4.2 内部类的特殊语法规则 247 6.4.3 内部类是否有用、必要和安全 248 6.4.4 局部内部类 250 6.4.5 由外部方法访问变量 250 6.4.6 匿名内部类 252 6.4.7 静态内部类 255 6.5 代理 258 6.5.1 何时使用代理 259 6.5.2 创建代理对象 259 6.5.3 代理类的特性 262 第7章 异常、断言和日志 264 7.1 处理错误 264 7.1.1 异常分类 265 7.1.2 声明受查异常 267 7.1.3 如何抛出异常 269 7.1.4 创建异常类 270 7.2 捕获异常 271 7.2.1 捕获异常 271 7.2.2 捕获多个异常 273 7.2.3 再次抛出异常与异常链 274 7.2.4 f?inally子句 275 7.2.5 带资源的try语句 278 7.2.6 分析堆栈轨迹元素 280 7.3 使用异常机制的技巧 282 7.4 使用断言 285 7.4.1 断言的概念 285 7.4.2 启用和禁用断言 286 7.4.3 使用断言完成参数检查 287 7.4.4 为文档假设使用断言 288 7.5 记录日志 289 7.5.1 基本日志 289 7.5.2 高级日志 289 7.5.3 修改日志管理器配置 291 7.5.4 本地化 292 7.5.5 处理器 293 7.5.6 过滤器 296 7.5.7 格式化器 296 7.5.8 日志记录说明 296 7.6 调试技巧 304 第8章 泛型程序设计 309 8.1 为什么要使用泛型程序设计 309 8.1.1 类型参数的好处 309 8.1.2 谁想成为泛型程序员 310 8.2 定义简单泛型类 311 8.3 泛型方法 313 8.4 类型变量的限定 314 8.5 泛型代码和虚拟机 316 8.5.1 类型擦除 316 8.5.2 翻译泛型表达式 317 8.5.3 翻译泛型方法 318 8.5.4 调用遗留代码 319 8.6 约束与局限性 320 8.6.1 不能用基本类型实例化类型参数 320 8.6.2 运行时类型查询只适用于原始类型 321 8.6.3 不能创建参数化类型的数组 321 8.6.4 Varargs警告 322 8.6.5 不能实例化类型变量 323 8.6.6 不能构造泛型数组 323 8.6.7 泛型类的静态上下文中类型变量无效 325 8.6.8 不能抛出或捕获泛型类的实例 325 8.6.9 可以消除对受查异常的检查 326 8.6.10 注意擦除后的冲突 327 8.7 泛型类型的继承规则 328 8.8 通配符类型 330 8.8.1 通配符概念 330 8.8.2 通配符的超类型限定 331 8.8.3 无限定通配符 334 8.8.4 通配符捕获 334 8.9 反射和泛型 337 8.9.1 泛型Class类 337 8.9.2 使用Class参数进行类型匹配 338 8.9.3 虚拟机中的泛型类型信息 338 第9章 集合 344 9.1 Java集合框架 344 9.1.1 将集合的接口与实现分离 344 9.1.2 Collection接口 346 9.1.3 迭代器 347 9.1.4 泛型实用方法 349 9.1.5 集合框架中的接口 352 9.2 具体的集合 353 9.2.1 链表 355 9.2.2 数组列表 362 9.2.3 散列集 363 9.2.4 树集 366 9.2.5 队列与双端队列 369 9.2.6 优先级队列 371 9.3 映射 372 9.3.1 基本映射操作 372 9.3.2 更新映射项 375 9.3.3 映射视图 376 9.3.4 弱散列映射 377 9.3.5 链接散列集与映射 378 9.3.6 枚举集与映射 379 9.3.7 标识散列映射 380 9.4 视图与包装器 381 9.4.1 轻量级集合包装器 382 9.4.2 子范围 382 9.4.3 不可修改的视图 383 9.4.4 同步视图 384 9.4.5 受查视图 384 9.4.6 关于可选操作的说明 385 9.5 算法 388 9.5.1 排序与混排 389 9.5.2 二分查找 391 9.5.3 简单算法 392 9.5.4 批操作 394 9.5.5 集合与数组的转换 394 9.5.6 编写自己的算法 395 9.6 遗留的集合 396 9.6.1 Hashtable类 397 9.6.2 枚举 397 9.6.3 属性映射 398 9.6.4 栈 399 9.6.5 位集 399 第10章 图形程序设计 403 10.1 Swing概述 403 10.2 创建框架 407 10.3 框架定位 409 10.3.1 框架属性 411 10.3.2 确定合适的框架大小 411 10.4 在组件中显示信息 415 10.5 处理2D图形 419 10.6 使用颜色 426 10.7 文本使用特殊字体 429 10.8 显示图像 435 第11章 事件处理 439 11.1 事件处理基础 439 11.1.1 实例:处理按钮点击事件 441 11.1.2 简洁地指定监听器 445 11.1.3 实例:改变观感 447 11.1.4 适配器类 450 11.2 动作 453 11.3 鼠标事件 459 11.4 AWT事件继承层次 465 11.4.1 语义事件和底层事件 466 第12章 Swing用户界面组件 469 12.1 Swing和模型–视图–控制器设计模式 469 12.2 布局管理概述 474 12.3 文本输入 481 12.4 选择组件 488 12.5 菜单 504 12.6 复杂的布局管理 518 12.7 对话框 541 12.8 GUI程序排错 573 第13章 部署Java应用程序 580 13.1 JAR文件 580 13.2 应用*项的存储 586 13.3 服务加载器 596 13.4 applet 598 13.5 Java Web Start 614 第14章 并发 624 14.1 什么是线程 624 14.2 中断线程 632 14.3 线程状态 635 14.4 线程属性 638 14.5 同步 640 14.6 阻塞队列 668 14.7 线程安全的集合 673 14.8 Callable与Future 681 14.9 执行器 685 14.10 同步器 696 14.11 线程与Swing 698 附录A Java关键字 710

2018-04-27

Java多线程编程核心技术_完整版

资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如服务器、数据库、应用。多线程可以有效提升计算和处理效率,大大提升吞吐量和可伸缩性,深得广大程序员和公司的青睐。很多人学习完JavaSE/JavaEE之后想往更深入的技术进行探索,比如对大数据、分布式、高并发类的专题进行攻克时,立即遇到针对java.lang包中线程类的学习,但线程类的学习并不像JDBC一样简单,学习曲线陡峭,多弯路与“坑”。要学习这些热点技术,Java多线程技术避无可避。而本书将引领读者拿下该“技术高地”。

2018-04-27

561801+Redis实战

本书地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法。除此之外,书中还讲述了Redis的方法以及扩展方法,是一本对于学习和使用 Redis 来说不可多得的参考书籍。 本书一共由三个部分组成。第一部分对Redis进行了介 绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作这5种数据结构的命令,并讲解了如何使用Redis去构建文章展示网站、cookie、购物车、网页缓存、数据库行缓存等一系列程序。第二部分对Redis命令进行了更详细的介绍,并展示了如何使用Redis去构建更为复杂的辅助工具和应用程序,并在最后展示了如何使用Redis去构建一个简单的社交网站。第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。 综上所述, 本书将是一本对于学习和使用 Redis 来说不可多得的参考书籍, 无论是 Redis 新手还是有一定经验的 Redis 使用者, 应该都能从本书中获益。

2018-04-27

springcloud注册中心demo

springcloud注册中心demo,可以作为学习资料,也可以用于项目实践中

2018-04-27

swagger整合Spring Boot生成Restful api

Spring Boot是目前最流行的微服务框架,Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用。 而Swagger是目前最流行的接口文档解决方案,本文主要通过代码实战的方式讲解Spring Boot 和Swagger集成生成Restful接口文档。教程详见我的博客:http://blog.csdn.net/zjx2016/article/details/74407832

2017-07-05

swagger整合Spring Boot生成Restful接口文档

Spring Boot是目前最流行的微服务框架,Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用。 而Swagger是目前最流行的接口文档解决方案,本文主要通过代码实战的方式讲解Spring Boot 和Swagger集成生成Restful接口文档。教程参见 http://blog.csdn.net/zjx2016/article/details/74407832

2017-07-05

swagger整合SpringMvc生成Restful api

swagger提供的接口文档相比传统的文档方式更加直观也更加高效,但是在网上找了很多关于Swagger与SpringMvc整合的资料,发现都比较繁琐,不是很满意,于是有了这篇博客,希望对大家有所帮助。教程:http://blog.csdn.net/zjx2016/article/details/73923995

2017-07-05

spring技术内幕

内容简介:, 本书是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring开发者社区一致强烈推荐。, 国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码中一窥Java语言的精髓。此外,本书还展示了阅读源代码的卓越方法,不仅授你以鱼,而且还授你以渔!, 如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从本书中受益。, 本书特色:, 作者从业10余载,悟透Spring等开源软件的本质,权威性毋庸置疑。, Java开发者社区、专业Spring开发者社区和架构师社区一致鼎力推荐!, 深入解析Spring架构原理与设计思想,探究Spring成功的奥秘。, 揭开Spring源代码的神秘面纱,展示系统阅读开源软件源代码的方法和秘诀。, 如果你也在思考下面的问题,本书也许就是你想要的:, 掌握Spring的架构原理与设计思想真的能让开发者如虎添翼吗?, IoC容器如何掌控以POJO为基础的Bean对象?它的轻量级开发设计思想是如何实现的?, Spring产品级的IoC容器是如何作为一个完整的系统实现并运行的?它如何启动?如何完成Bean的解析和载入?又如何实现Bean的生命周期管理?, Spring如何简捷地在JVM上实现AOP功能?, Spring AOP如何实现Aspect编织功能?, Spring如何实现各种数据库操作组件的集成?, Spring如何在Web环境中集成IoC容器并为Web应用开发提供利器?, 我们耳熟能详的MVC模式在Spring中是如何实现的?, Spring MVC如何灵活地集成各种丰富的视图展现方案?, Spring实现远端调用的方案有很多种,你知道它们之间的优劣差异吗?, Spring ACEGI安全框架在用户验证和授权机制的实现上有何过人之处?, 如何在Spring的基础上进行扩展开发?, 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?..., 本书赞誉:, 作为一个有近10年历史的成功框架,Spnng在Java开发中具有举足轻重的作用。本书从源代码分析入手,对Spring的架构原理和设计思想进行了全面剖析,不仅能让我们更深入、更彻底地认识Spring,领略Spring的架构之美和设计之美,而且更重要的是,它将全面提升我们的Spring开发技能。., ——Spring开发者社区, 这是值得所有Spnng开发者反复研读的一本书。Spring是一个优秀的轻量级企业应用开发框架,是Java开发中最流行的工具之一,也是Java程序员必须熟练掌握的一门技术之一。本书从Spring实现原理的角度揭开了Spring的神秘面纱,使得我们在利用Spring进行开发时,不仅能知其然,还能知其所以然,从本质上提升我们对Spring的理解和开发水平。, ——Spring中文用户组, 这是所有Java程序员应该认真阅读的一本书。Spring框架主要是用Java语言来实现的,本书对大量经典的、优雅的Spring实现代码进行了赏析,不禁让我们感慨Rod Johnson(Spring之父)对Java语言的运用之精妙。如果能跟随本书穿越Spring源代码的丛林,也许我们对Java语言的理解和掌握将会有质的飞跃。.., ——中文Java技术网, 这是所有软件架构师必备的一本书。成为一名出色的软件架构师,也许是每一位开发者的梦想。在成长为架构师的过程中,在实践中积累并总结经验固然很重要,但是从现有的成功架构中取经也是必不可少的。本书对Spring的各个功能模块的架构原理和设计思想进行了深入剖析,值得所有架构师用心体会和研究,必将受益匪浅。..., ——架构师中国

2016-12-13

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

TA关注的人

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