自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (8)
  • 收藏
  • 关注

原创 Gitlab的使用(内含Git命令大全)

gitlab使用流程标签(空格分隔): gitlab1、前言使用svn的同学抓(dan)狂(sui)的问题?没有网时候想commit怎么办?svn服务器宕机一天,技术团队抓狂,抱怨运维不给力非核心成员想贡献自己的力量却无论为力每每想看一下svn上的配置文件或者代码,不能在线看,必须下载。这尼玛能忍?顶你个肺的,不能直接下载,必须要要安装个小乌龟(svn客户端)。昨天那入职的新同事今天尽然离职了,仙...

2018-06-20 09:58:45 42050 8

原创 MySql批量插入查询数据

注意:这些方法只是提供了一些常见的实现方式,具体的实现方法还需要根据具体的数据表结构和查询需求来确定。在MySQL中,可以使用INSERT INTO语句插入查询出来的数据。方法三:使用INSERT INTO ... VALUES语句插入多个查询结果。方法四:使用INSERT INTO ... SELECT语句插入多个查询结果。方法二:使用INSERT INTO ... SELECT语句插入数据。方法一:使用SELECT子查询插入数据。

2024-09-11 12:06:01 416

原创 Java中的Enum详解与使用

MONDAY {@Overridereturn "星期一我得工作";},TUESDAY {@Overridereturn "星期二我得工作";},@Overridereturn "星期三我得工作";},THURSDAY {@Overridereturn "星期四我得工作";},FRIDAY {@Overridereturn "星期五我得工作";},SATURDAY {@Overridereturn "我要休息";

2024-09-05 17:20:14 777

原创 Docker 的基本概念和优势

Docker是一个开源的容器化平台,可以帮助开发人员将应用程序及其所有依赖项打包成一个独立的、可移植的容器。无论是在本地服务器、云端服务器还是容器服务中,容器都可以保持一致的行为,加快应用程序的部署和迁移过程。容器化:Docker使用容器技术,将应用程序和其依赖项隔离在一个独立的容器中。资源隔离:Docker使用容器隔离技术,确保每个容器之间相互隔离,互不影响。总的来说,Docker 提供了一种简单、可靠、高效的方式来管理应用程序和其依赖项,提高了开发人员的工作效率,并促进了软件交付过程的自动化和标准化。

2024-09-05 16:42:12 382

原创 Git 的基本概念和使用方式

合并(Merge):合并是将一个分支的更改合并到另一个分支中的过程。拉取和推送更改:使用git pull命令从远程仓库拉取最新更改,使用git push命令将本地更改推送到远程仓库。拉取(Pull):拉取是将远程仓库的最新更改拉取到本地仓库的过程。创建和切换分支:使用git branch命令创建一个新的分支,并使用git checkout命令切换到该分支。推送(Push):推送是将本地仓库的更改推送到远程仓库的过程。合并分支:使用git merge命令将一个分支的更改合并到另一个分支中。

2024-09-05 16:41:09 588

原创 Java 常用HTTP请求工具类HttpUtils

Java HttpUtils工具类

2022-09-07 17:37:36 4967 1

原创 虚拟机启动docker镜像提示no space left on device

使用docker下载镜像时,发现dev/mapper/centos-root空间不足

2022-08-02 16:45:10 692

原创 码农即将30岁,焦虑扑面而来

裁员、结婚、买房、赡养父母.....即将30岁,焦虑扑面而来

2022-08-02 13:58:21 226

原创 Linux下安装MySQL5.7.26

Linux下安装MySQL5.7.26

2022-05-24 11:54:52 1005

原创 中国最新省市区sql数据

DROP TABLE IF EXISTS `sys_region`;CREATE TABLE `sys_region`(`id` BIGINT(11) unsigned NOT NULL AUTO_INCREMENT,`code` bigint(12) DEFAULT NULL COMMENT '行政区划代码',`name` varchar(32) DEFAULT NULL COMMENT '名称',`parent_id` BIGINT(11) DEFAULT NULL COMMENT '上...

2022-03-29 11:48:42 4202 3

原创 DFA算法的简单说明与案例实现以及优化思路

1.背景项目中需要对敏感词做一个过滤,首先有几个方案可以选择:a.直接将敏感词组织成String后,利用indexOf方法来查询。b.传统的敏感词入库后SQL查询。c.利用Lucene建立分词索引来查询。d.利用DFA算法来进行。首先,项目收集到的敏感词有几千条,使用a方案肯定不行。其次,为了方便以后的扩展性尽量减少对数据库的依赖,所以放弃b方案。然后Lucene本身作为本地索引,敏感词增加后需要触发更新索引,并且这里本着轻量原则不想引入更多的库,所以放弃c方案。于是我们选定d方案为

2021-06-08 10:13:04 4750 1

原创 MAC系统IDEA快捷键大全

Mac 键盘符号和修饰键说明⌘——>Command ⇧——>Shift ⌥——>Option ⌃——>Control ↩︎——>Return/Enter ⌫——>Delete ⌦——>向前删除键(Fn + Delete) ↑——>上箭头 ↓——>下箭头 ←——>左箭头 →——>右箭头 ⇞——>Page Up(Fn + ↑) ⇟——>Page Down(...

2021-03-05 13:06:58 1178

原创 Mina粘包,断包问题处理(客户端,服务端)

1.什么是断包,粘包?在讲断包,粘包之前,先说下消息保护边界和无消息保护边界。1.保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息.也就是说存在保护消息边界,接收端一次只能接收发送端发出的一个数据包.2.而面向流则是无消息保护边界的,如果发送端连续发送数据, 接收端有可能在一次接收动作中,会接收两个或者更多的数据包。而tcp是面向流的,需要在...

2020-04-16 20:36:58 934

原创 SSM框架简介及相关面试题解析

SSM框架介绍(1)持久层(Mybatis):Dao层(mapper)DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此。DAO层的设计首先是设计DAO的接口。然后在Spring的配置文件中定义此接口的实现类。然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰。DAO层的数据源配置,以及有关数据库连接...

2020-02-20 11:36:41 2742

原创 Java创建线程只有两种方式

Java并发方面有很多书籍以及博客,针对于线程创建方式有着不同描述,例如实现Runnable接口、集成Thread类、使用线程池工具类以及结合Callable和Future创建线程等。创建线程的两种方式Oracle官方文档,即java.lang.Thread类注释的表述是有如下两种创建线程的方式。https://docs.oracle.com/javase/8/docs/api/index.h...

2020-02-20 11:28:17 274

原创 Mysql主从复制配置实例

一、环境机器A:192.168.31.152机器B:192.168.31.140系统:Ubuntu 16.04数据库:MySQL 5.7.22二、Master配置1、机器A-Master配置 1.1、修改配置文件sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]#服务器的ID,必须唯一,一般设置自己的IPs...

2020-02-19 10:36:27 715

原创 Mysql主从复制(一主一丛,多主一从)

概述:MySQL 的主从复制是通过他的归档日志(binlog) 来实现的。基本的过程就是从库在一个线程中和主库建立一个长连接,告诉主库从主库同步的 binlog 的位置,然后主库将这个位置之后的 binlog 日志内容发送给从库,从库获取到主库发送过来的 binlog 内容后先写入到本地的中转日志(relaylog)中,然后从库另一个进程在从中转日志中读取内容并解析成为 sql 语句在从库中执行...

2020-02-19 10:32:09 739

原创 MySQL配置慢查询日志

mysql> show variables like 'slow_query_log';+----------------+-------+| Variable_name | Value |+----------------+-------+| slow_query_log | OFF |+----------------+-------+1 row in set (0....

2019-08-08 16:38:49 118

原创 Java编码规范十大军规

军规一:【避免在程序中使用魔鬼数字,必须用有意义的常量来标识。】军规二:【明确方法的功能,一个方法仅完成一个功能。】军规三:【方法参数不能超过5个】军规四:【方法调用尽量不要返回null,取而代之以抛出异常,或是返回特例对象(SPECIAL CASE object,SPECIAL CASE PATTERN);对于以集合或数组类型作为返回值的方法,取而代之以空集合或0长度数组。】军规...

2019-07-09 13:50:13 907

原创 用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed, probable Oracle Net admin error

用Navicat连接Oracle数据库时出现如下错误上网一查原来是oci.dll版本不对。因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准版,一种是简洁版,即Oracle Install Client。而我们用Navicat时通常会在自己的安装路径下包含多个版本的OCI,如果使用Navicat连接Oracle服务器出现ORA-28...

2019-07-05 10:08:58 825

原创 Oracle11g 64位安装教程以及安装过程中可能遇到的问题

1、安装准备下载官网的oracle安装程序,有两个压缩包。选中这两个压缩包,点击解压到当前文件夹,两个压缩包同时解压成一个名叫database的文件夹。这里特别注意,两个压缩包要同时选中,解压成一个文件,不然可能会安装失败。解压好后出现一个database文件夹,大小为2.13GB。点进去,找到setup.exe,右击,以管理员身份运行,开始安装。这里需要检查,等...

2019-07-05 10:04:11 928

原创 js下载base64格式的图片

//下载图片 function download() { let imgData = 'data:image/png;base64,iVBORw0KGgoAAAANSUh........'; this.downloadFile('测试.png', imgData); } //下载 function do...

2019-06-12 15:23:51 3377 1

原创 设置Mysql5.6允许外网访问详细流程

一、设置MySQL服务允许外网访问修改mysql的配置文件,有的是my.ini(windows),有的是my.cnf(linux),在配置文件中增加[mysqld]port=3306bind-address=0.0.0.0然后重新启动mysql服务,执行service mysql restart。二、设置mysql用户支持外网访问需要使用root权限登录mysql,...

2019-06-05 15:54:35 3643

原创 mysql 查询当天、本周,本月,上一个月的数据

今天select * from 表名 where to_days(时间字段名) = to_days(now());昨天SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1近7天SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) ...

2019-04-15 11:25:22 87

原创 MySQL 5.6 for Windows 解压缩版配置安装

MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行。但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的。很多人下了zip格式的解压发现没有setup.exe,面对一堆文件一头雾水,不知如何安装。下面笔者将介绍如何解决此情况下安装过程中的各种问题工具/原料 win7操作系统 MySQLzip格式安装包 方法/步骤 MySQL安装文件分为两种,一种...

2019-04-02 13:55:07 172

原创 Linux下安装MySQL5.6

环境:1、操作系统:CentOS release 6.8 (Final)2、安装版本: mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz3、下载地址:http://dev.mysql.com/downloads/mysql/4、下载说明:上边的下载地址是最新版的,如果想下载老版本可以点击页面中的超链接“Looking for previous GA ve...

2019-04-02 10:24:47 183

原创 数据库基本操作

数据库的基本操作show databases; 查看数据库create database +数据库名 charset=utf8;创建数据库use +数据库名称 ; 进入数据库create table +表名 (id int primary key auto_increment,类+char(30),类+int);创建表show tables; 查看表desc +表名 ; 查看表结构...

2019-03-22 15:23:23 149

原创 Java时间格式化对应表

java格式化时间到毫秒:SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss:SSS");String formatStr =formatter.format(new Date();附录:java格式化字母表Symbol Meaning Presentation Exa...

2018-07-17 17:23:52 841

原创 JVM架构和GC垃圾回收机制

JVM架构和GC垃圾回收机制详解JVM架构图分析下图:参考网络+书籍,如有侵权请见谅 (想了解Hadoop内存溢出请看: Hadoop内存溢出(OOM)分类、参数调优化)JVM被分为三个主要的子系统(1)类加载器子系统(2)运行时数据区(3)执行引擎1. 类加载器子系统Java的动态类加载功能是由类加载器子系统处理。当它在运行时(不是编译时)首次引用一个类时,它加载、链接并初始化该类文件。1.1 ...

2018-06-20 10:49:31 168

原创 Dubbo高级篇_10_Dubbo消费端直连服务提供者(开发调试)

直连提供者(+) (#)在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A接口配置点对点,不影响B接口从注册中心获取列表。(1) 如果是线上需求需要点对点,可在&lt;dubbo:reference&gt;中配置url指向提供者,将绕过注册中心,多个地址用分号隔开,配置如下:(1.0.6及以上版...

2018-06-14 14:44:02 274

原创 Linux服务器性能查看分析调优

一 linux服务器性能查看1.1 cpu性能查看1、查看物理cpu个数:cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l2、查看每个物理cpu中的core个数:cat /proc/cpuinfo |grep "cpu cores"|wc -l3、逻辑cpu的个数:cat /proc/cpuinfo |grep "processor"|wc...

2018-06-11 17:43:09 214

原创 Shell脚本查看linux系统性能瓶颈

linux服务器敲命令反应慢,网站访问慢,到底什么情况?根据本人的经验,主要原因可能是系统资源到达瓶颈,已经无法处理更多请求。在有监控系统情况下,可以直接通过WEB页面可视化看出是CPU瓶颈?硬盘瓶颈?还是网络瓶颈?如果公司服务器较少或者云服务器,就有可能没有一套监控系统,这时就要登陆到服务器,一条一条的敲命令,查找分析性能瓶颈。命令这么多,咋记得住啊!就算记得住,输入也费劲,于是就有了这个脚本,...

2018-06-11 17:22:40 288

原创 查看linux中的TCP连接数

一、查看哪些IP连接本机netstat -an二、查看TCP连接数1)统计80端口连接数netstat -nat|grep -i "80"|wc -l2)统计httpd协议连接数ps -ef|grep httpd|wc -l3)、统计已连接上的,状态为“establishednetstat -na|grep ESTABLISHED|wc -l4)、查出哪个IP地址连接最多,将其封了.netstat...

2018-05-22 11:44:45 8066

原创 Linux下如何查看哪些进程占用的CPU内存资源最多

linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|headlinux下获取占用内存资源最多的10个进程,可以使用如下命令组合:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head    命令组合解析(针对CPU的,MEN也同样道...

2018-05-22 11:41:47 460

原创 企业生产环境用户权限集中管理方案案例

建立中要添加如下的项目经验:在了解公司业务流程后,提出权限整改解决方案,改进公司超级用户Root权限泛滥的问题。我首先写好方案后,给老大看,取得老大的支持后,召集大家开会讨论。讨论确定可行后,由我负责推进实施实施后结果,公司服务器权限管理更加清晰了。制定账号权限申请流程以及权限申请表格1问题现状当前我们公司服务器上百台,各个服务器上需要管理的人很多(开发+运维+架构+DBA+产品+市场),在大家同...

2018-05-22 11:37:48 1357

原创 日志组件slf4j介绍及配置详解

1 基本介绍每一个Java程序员都知道日志对于任何一个Java应用程序尤其是服务端程序是至关重要的,而很多程序员也已经熟悉各种不同的日志库,如java.util.logging、Apache log4j、logback。但如果你还不知道SLF4J(Simple logging facade for Java)的话,那么是时候在你的项目中学习使用SLF4J了。SLF4J不同于其他日志类库,与其它日志...

2018-05-22 10:14:11 1877

原创 centos命令行基础及vim基本操作

一、 Linux命令行基础  我们常用的操作系统基本上是图形界面的,展示在我们面前的不是一个黑黢黢的dos窗口而是丰富多彩的可视化界面,但这并不意味着命令行已经out了,这里不讨论它存在的必要性或者说有多方便什么的……反正我是没看出来有多好用。不过总还是要会一点基础的,不然也不好意思说咱是学计算机的不是?  首先明确几个概念:命令行、终端、shell、bash。   1.

2018-01-22 09:56:35 713

原创 CentOS下安装JDK1.8并配置环境变量

下载官方的软件包,参考地址:http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz?AuthParam=1511877655_249331a15c5f013ed07d656d98e82d72           其中后面的Aut

2018-01-22 09:51:16 849

原创 CentOS安装JDK并配置环境变量

由于各Linux开发厂商的不同,因此不同开发厂商的Linux版本操作细节也不一样,今天就来说一下CentOS下JDK的安装:方法一:手动解压JDK的压缩包,然后设置环境变量1.在/usr/目录下创建java目录[root@localhost ~]# mkdir/usr/java[root@localhost ~]# cd /usr/java2.下载jdk,然后解

2018-01-22 09:46:19 196

原创 Linux命令行修改IP、网关、DNS的方法

方式一:ifconfig eth0 192.168.1.18 netmask 255.255.255.0说明:该种方式可以使改变即时生效,重启后会恢复为原来的IP方式二:vi /etc/sysconfig/network-scripts/ifcfg-eth0说明:该方式要重启后生效,且是永久的如果要立即更改且永久生效,就只能以上两种方式同时使用了。以上是通过li

2018-01-22 09:44:16 366

Gitlab的使用(内含Git命令大全)

没有网时候想commit怎么办?svn服务器宕机一天,技术团队抓狂,抱怨运维不给力 非核心成员想贡献自己的力量却无论为力 每每想看一下svn上的配置文件或者代码,不能在线看,必须下载。这尼玛能忍?顶你个肺的,不能直接下载,必须要要安装个小乌龟(svn客户端)。 昨天那入职的新同事今天尽然离职了,仙人板板的,昨天才给他开的svn权限,这下惨了,代码都被他带走了。他是不是(小米)派来(华为)的卧底? 第一天上班,连上svn,一眼望去dcsp,dcp,garfield,bs4api。谁能告诉我这都是什么鬼,有没有个wiki,让我快速上手? (老员工:)svn做codereview不方便,安装个reviewboard撒,对了,别忘了开发工具中还要安插件才能用。(新同事:)什么鬼,又要我学新东西?

2020-04-26

简单的UDP客户端+服务端的实现

简单的UDP客户端+服务端的实现,maven项目,封装了byteutil和IP解析工具类,可以实现udp自发自收

2020-03-13

instantclient_11_2.rar

用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed, probable Oracle Net admin error,解决问题所需要的文件

2019-07-05

尚硅谷Java8练习Java源码

内容还有尚硅谷Java8练习Java源码,一系列课程教学源码

2018-01-12

IntelliJ IDEA 使用教程

目录 前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 第 1 章 绍 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 本系列教程介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 IntelliJ IDEA 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 IntelliJ IDEA 主要功能介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 更多官网信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 第 2 章 于 关于 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 学习前提 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 适用人群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 教程演示的 IntelliJ IDEA 版本. . . . . . . . . . . . . . . . . . . . . . . . . . . 20 教程演示的系统环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 IntelliJ IDEA 版本迭代习惯 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 第 3 章 A Windows 系统下安装 IntelliJ IDEA . . . . . . . . . . . . . . . . . . 23 系统要求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 首次安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 已有旧版本安装新版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 卸载 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 第 4 章 A Ubuntu 系统下安装 IntelliJ IDEA . . . . . . . . . . . . . . . . . . . 35 系统要求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 重要说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Ubuntu 下安装过程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 卸载 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 第 5 章 A Mac 系统下安装 IntelliJ IDEA . . . . . . . . . . . . . . . . . . . . 42 系统要求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 重要说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Mac 下安装过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Mac 修改运行 JDK 版本. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 第 6 章 结 安装总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 硬件建议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 第 7 章 行 首次运行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 向导功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 第 8 章 绍 IntelliJ IDEA 相关核心文件和目录介绍 . . . . . . . . . . . . . . . . 58 安装目录介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 设置目录介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 配置文件常见修改内容说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 设置目录进行多台设置同步化处理 . . . . . . . . . . . . . . . . . . . . . . . . . . 63 第 9 章 绍 IntelliJ IDEA 界面介绍 . . . . . . . . . . . . . . . . . . . . . . . 64 首次打开 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 新建 HTML 项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 界面介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 第 10 章 改 IntelliJ IDEA 主题、字体、编辑区主题、文件编码修改 . . . . . . . . . 71 主题修改 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 字体修改 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 编辑区主题修改 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 文件编码修改 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 由于编码问题引起的编译错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 编程字体推荐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 第 11 章 绍 常见文件类型的图标介绍 . . . . . . . . . . . . . . . . . . . . . . . 82 Java 类相关图标介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 各类文件类型图标介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 第 12 章 法 IntelliJ IDEA 缓存和索引介绍和清理方法 . . . . . . . . . . . . . . . 89 缓存和索引介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 清除缓存和索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 其他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 第 13 章 绍 IntelliJ IDEA 编译方式介绍 . . . . . . . . . . . . . . . . . . . . . 94 编译方式介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 编译触发按钮 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 运行之前的编译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 编译器的设置和选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 第 14 章 绍 IntelliJ IDEA 项目相关的几个重要概念介绍 . . . . . . . . . . . . . 102 必备材料介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Project 和 Module 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 SDK(Software Development Kit) 介绍 . . . . . . . . . . . . . . . . . . . . . . . 107 language level 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Module 下的 SDK 和 language level. . . . . . . . . . . . . . . . . . . . . . . . . 111 第 15 章 绍 Hello World 项目创建与项目配置文件介绍 . . . . . . . . . . . . . . 113 Hello World 项目创建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 项目配置文件介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 特别介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 第 16 章 用 版本控制的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . 125 IntelliJ IDEA 下的版本控制介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . 126 SVN 的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Git 的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Github 的配置和使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 版本控制主要操作按钮 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 版本控制相关的常用设置说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 SVN 的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 第 17 章 用 实时代码模板的使用 . . . . . . . . . . . . . . . . . . . . . . . . 143 实时代码模板的介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 自带变量参数介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 实时代码模板的设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 变量参数和函数的介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 环绕功能介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 第 18 章 用 文件代码模板的使用 . . . . . . . . . . . . . . . . . . . . . . . . 152 文件代码模板的介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 文件代码模板的设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 文件代码模板预设的变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 第 19 章 用 Emmet 的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Emmet 的介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Emmet 的设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 第 20 章 Postfix Completion 的使用 . . . . . . . . . . . . . . . . . . . . . 166 Postfix Completion 的介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Postfix Completion 的设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 第 21 章 用 插件的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 插件的设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 插件的安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 插件推荐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 第 22 章 建 Eclipse 的 Java Web 项目环境搭建 . . . . . . . . . . . . . . . . . 175 Eclipse 项目结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Eclipse 项目配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Tomcat 配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Tomcat 启动. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Tomcat 停止. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 输出 war 压缩包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 第 23 章 绍 Maven 项目介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . 197 学习前提 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Maven 常用设置介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Maven 骨架创建 Java Web 项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 启动 Java Web 项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Maven 组件来管理项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Maven 组件界面介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Maven 的 Tomcat 插件运行项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Maven 快速排查依赖包冲突 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 第 24 章 解 Maven 的单模块 / 多模块之 Spring MVC + Spring + Mybatis 项目讲解 . 209 初衷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 视频下载 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 开发环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 演示内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 第 25 章 Maven 的单模块 / 多模块之 Spring MVC + Spring + Spring Data JPA 项 目(基于 IntelliJ IDEA) . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 初衷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 开发环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 第 26 章 绍 Debug 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Debug 设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Debug 常用快捷键 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Debug 特殊技能使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 第 27 章 解 重构讲解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 重构的常用功能介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 第 28 章 绍 数据库管理工具介绍 . . . . . . . . . . . . . . . . . . . . . . . . 229 配置 Database 组件的数据库连接 . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Database 设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 第 29 章 解 IntelliJ IDEA 常用设置讲解 . . . . . . . . . . . . . . . . . . . . 232 说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 常用设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 第 30 章 解 IntelliJ IDEA 常用设置讲解 . . . . . . . . . . . . . . . . . . . . 232 说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 常用设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 第 31 章 解 IntelliJ IDEA 常用设置讲解 . . . . . . . . . . . . . . . . . . . . 232 说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 常用设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 第 32 章 键 快捷键 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 前提 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Ctrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Alt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Shift. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Ctrl + Alt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Ctrl + Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Alt + Shift. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Ctrl + Shift + Alt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 其他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 官网快捷键资料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 第三方快捷键资料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 快捷键修改 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 其他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 第 33 章 键 IntelliJ IDEA For Mac 快捷键 . . . . . . . . . . . . . . . . . . . 288 第 34 章 用 IntelliJ IDEA 的 Java 热部署插件 JRebel 安装及使用 . . . . . . . . 296 JRebel 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 JRebel 安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 第 35 章 t IntelliJ IDEA 远程调试 Tomcat . . . . . . . . . . . . . . . . . . . 309 准备工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 本地 Remote Server 配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 服务器 Tomcat 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 开始调试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 第 36 章 最特殊的快捷键 Alt + Enter 介绍 . . . . . . . . . . . . . . . . . . 316 说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 智能辅助 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 第 37 章 束 本系列教程结束 . . . . . . . . . . . . . . . . . . . . . . . . . . 326 赠语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

2018-01-12

Java 8实战(Java 8 in Action)

第一部分 基础知识 第 1 章 为什么要关心 Java 8 ....................... 2 1.1 Java 怎么还在变 ....................................... 4 1.1.1 Java 在编程语言生态系统中的 位置 ............................................... 4 1.1.2 流处理 ........................................... 6 1.1.3 用行为参数化把代码传递给 方法 ............................................... 7 1.1.4 并行与共享的可变数据 ................ 7 1.1.5 Java 需要演变 ............................... 8 1.2 Java 中的函数 ........................................... 8 1.2.1 方法和 Lambda 作为一等公民 ...... 9 1.2.2 传递代码:一个例子 ................... 11 1.2.3 从传递方法到 Lambda ................. 12 1.3 流 ............................................................. 13 1.4 默认方法 .................................................. 17 1.5 来自函数式编程的其他好思想 ............... 18 1.6 小结 ......................................................... 19 第 2 章 通过行为参数化传递代码 ............ 20 2.1 应对不断变化的需求 ............................... 21 2.1.1 初试牛刀:筛选绿苹果 ............... 21 2.1.2 再展身手:把颜色作为参数 ........ 21 2.1.3 第三次尝试:对你能想到的每 个属性做筛选 .............................. 22 2.2 行为参数化 .............................................. 23 2.3 对付啰嗦 .................................................. 27 2.3.1 匿名类 .......................................... 28 2.3.2 第五次尝试:使用匿名类 ........... 28 2.3.3 第六次尝试:使用 Lambda 表达式 .......................................... 30 2.3.4 第七次尝试:将 List 类型 抽象化 .......................................... 31 2.4 真实的例子 .............................................. 31 2.4.1 用 Comparator 来排序 .............. 31 2.4.2 用 Runnable 执行代码块 ........... 32 2.4.3 GUI 事件处理 .............................. 32 2.5 小结 ......................................................... 33 第 3 章 Lambda 表达式 .......................... 34 3.1 Lambda 管中窥豹 .................................... 35 3.2 在哪里以及如何使用 Lambda ................. 37 3.2.1 函数式接口 .................................. 37 3.2.2 函数描述符 .................................. 39 3.3 把 Lambda 付诸实践:环绕执行模式 ..... 41 3.3.1 第 1 步:记得行为参数化 ........... 41 3.3.2 第 2 步:使用函数式接口来 传递行为 ...................................... 42 3.3.3 第 3 步:执行一个行为 ............... 42 3.3.4 第 4 步:传递 Lambda ................. 42 3.4 使用函数式接口 ...................................... 43 3.4.1 Predicate ................................. 44 3.4.2 Consumer .................................... 44 3.4.3 Function .................................... 45 3.5 类型检查、类型推断以及限制 ............... 49 3.5.1 类型检查 ...................................... 49 3.5.2 同样的 Lambda,不同的 函数式接口 .................................. 50 3.5.3 类型推断 ...................................... 51 2 目 录 3.5.4 使用局部变量 .............................. 52 3.6 方法引用 ................................................. 53 3.6.1 管中窥豹 ...................................... 53 3.6.2 构造函数引用 .............................. 55 3.7 Lambda 和方法引用实战 ......................... 57 3.7.1 第 1 步:传递代码 ....................... 58 3.7.2 第 2 步:使用匿名类 ................... 58 3.7.3 第 3 步:使用 Lambda 表达式 .... 58 3.7.4 第 4 步:使用方法引用 ............... 59 3.8 复合 Lambda 表达式的有用方法 ............ 59 3.8.1 比较器复合 .................................. 60 3.8.2 谓词复合 ...................................... 60 3.8.3 函数复合 ...................................... 61 3.9 数学中的类似思想 .................................. 62 3.9.1 积分 ............................................. 62 3.9.2 与 Java 8 的 Lambda 联系起来 .... 63 3.10 小结 ....................................................... 64 第二部分 函数式数据处理 第 4 章 引入流 ........................................ 68 4.1 流是什么 ................................................. 68 4.2 流简介 ..................................................... 72 4.3 流与集合 ................................................. 74 4.3.1 只能遍历一次 .............................. 75 4.3.2 外部迭代与内部迭代 ................... 76 4.4 流操作 ..................................................... 78 4.4.1 中间操作 ...................................... 78 4.4.2 终端操作 ...................................... 79 4.4.3 使用流 .......................................... 80 4.5 小结 ......................................................... 81 第 5 章 使用流 ........................................ 82 5.1 筛选和切片 .............................................. 83 5.1.1 用谓词筛选 .................................. 83 5.1.2 筛选各异的元素 .......................... 83 5.1.3 截短流 .......................................... 84 5.1.4 跳过元素 ...................................... 85 5.2 映射 ......................................................... 86 5.2.1 对流中每一个元素应用函数 ....... 86 5.2.2 流的扁平化 .................................. 87 5.3 查找和匹配 ............................................. 90 5.3.1 检查谓词是否至少匹配一个 元素 ............................................. 90 5.3.2 检查谓词是否匹配所有元素 ....... 90 5.3.3 查找元素 ...................................... 91 5.3.4 查找第一个元素 .......................... 92 5.4 归约 ......................................................... 92 5.4.1 元素求和 ...................................... 93 5.4.2 最大值和最小值 .......................... 94 5.5 付诸实践 ................................................. 97 5.5.1 领域:交易员和交易 ................... 98 5.5.2 解答 ............................................. 99 5.6 数值流 ................................................... 101 5.6.1 原始类型流特化 ........................ 101 5.6.2 数值范围 .................................... 102 5.6.3 数值流应用:勾股数 ................. 103 5.7 构建流 ................................................... 105 5.7.1 由值创建流 ................................ 106 5.7.2 由数组创建流 ............................ 106 5.7.3 由文件生成流 ............................ 106 5.7.4 由函数生成流:创建无限流 ..... 107 5.8 小结 ....................................................... 110 第 6 章 用流收集数据 ........................... 111 6.1 收集器简介 ........................................... 112 6.1.1 收集器用作高级归约 ................. 112 6.1.2 预定义收集器 ............................ 113 6.2 归约和汇总 ........................................... 114 6.2.1 查找流中的最大值和最小值 ..... 114 6.2.2 汇总 ........................................... 115 6.2.3 连接字符串 ................................ 116 6.2.4 广义的归约汇总 ........................ 117 6.3 分组 ....................................................... 120 6.3.1 多级分组 .................................... 121 6.3.2 按子组收集数据 ........................ 122 6.4 分区 ....................................................... 126 6.4.1 分区的优势 ................................ 126 目 录 3 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 17 6.4.2 将数字按质数和非质数分区 ...... 128 6.5 收集器接口 ............................................ 129 6.5.1 理解 Collector 接口声明的 方法 ............................................ 130 6.5.2 全部融合到一起 ......................... 134 6.6 开发你自己的收集器以获得 更好的性能 ............................................ 135 6.6.1 仅用质数做除数 ......................... 136 6.6.2 比较收集器的性能 ..................... 139 6.7 小结 ....................................................... 140 第 7 章 并行数据处理与性能 ................. 141 7.1 并行流 .................................................... 141 7.1.1 将顺序流转换为并行流 ............. 142 7.1.2 测量流性能 ................................ 144 7.1.3 正确使用并行流 ......................... 147 7.1.4 高效使用并行流 ......................... 148 7.2 分支/合并框架 ....................................... 149 7.2.1 使用 RecursiveTask .............. 149 7.2.2 使用分支/合并框架的 最佳做法 .................................... 153 7.2.3 工作窃取 .................................... 154 7.3 Spliterator ....................................... 155 7.3.1 拆分过程 .................................... 155 7.3.2 实现你自己的 Spliterator ... 157 7.4 小结 ....................................................... 162 第三部分 高效Java 8编程 第 8 章 重构、测试和调试 .................... 164 8.1 为改善可读性和灵活性重构代码 .......... 164 8.1.1 改善代码的可读性 ..................... 165 8.1.2 从匿名类到 Lambda 表达式的 转换 ............................................ 165 8.1.3 从 Lambda 表达式到方法引用 的转换 ........................................ 166 8.1.4 从命令式的数据处理切换到 Stream ........................................ 167 8.1.5 增加代码的灵活性 ..................... 168 8.2 使用 Lambda 重构面向对象的 设计模式 ................................................ 170 8.2.1 策略模式 .................................... 171 8.2.2 模板方法 .................................... 172 8.2.3 观察者模式 ................................ 173 8.2.4 责任链模式 ................................ 175 8.2.5 工厂模式 .................................... 177 8.3 测试 Lambda 表达式 ............................. 178 8.3.1 测试可见 Lambda 函数的 行为 ........................................... 179 8.3.2 测试使用 Lambda 的方法的 行为 ........................................... 179 8.3.3 将复杂的 Lambda 表达式分到 不同的方法 ................................ 180 8.3.4 高阶函数的测试 ........................ 180 8.4 调试 ....................................................... 181 8.4.1 查看栈跟踪 ................................ 181 8.4.2 使用日志调试 ............................ 183 8.5 小结 ....................................................... 184 第 9 章 默认方法 ................................... 185 9.1 不断演进的 API ..................................... 187 9.1.1 初始版本的 API ......................... 188 9.1.2 第二版 API ................................ 188 9.2 概述默认方法 ........................................ 190 9.3 默认方法的使用模式 ............................ 192 9.3.1 可选方法 .................................... 192 9.3.2 行为的多继承 ............................ 192 9.4 解决冲突的规则 .................................... 196 9.4.1 解决问题的三条规则 ................. 196 9.4.2 选择提供了最具体实现的默认 方法的接口 ................................ 197 9.4.3 冲突及如何显式地消除歧义 ..... 198 9.4.4 菱形继承问题 ............................ 200 9.5 小结 ....................................................... 201 第 10 章 用 Optional 取代 null .......... 202 10.1 如何为缺失的值建模 ........................... 203 10.1.1 采用防御式检查减少 Null- PointerException ............. 203 4 目 录 10.1.2 null 带来的种种问题 ........... 204 10.1.3 其他语言中 null 的 替代品 .................................... 205 10.2 Optional 类入门 ............................... 206 10.3 应用 Optional 的几种模式 ............... 207 10.3.1 创建 Optional 对象 ............. 208 10.3.2 使用 map 从 Optional 对象中提取和转换值 ............. 208 10.3.3 使用 flatMap 链接 Optional 对象 ..................... 209 10.3.4 默认行为及解引用 Optional 对象 ..................... 213 10.3.5 两个 Optional 对象的 组合 ........................................ 213 10.3.6 使用 filter 剔除特定 的值 ........................................ 214 10.4 使用 Optional 的实战示例 ............... 216 10.4.1 用 Optional 封装可能为 null 的值 ............................. 216 10.4.2 异常与 Optional 的对比 ..... 217 10.4.3 把所有内容整合起来 ............. 218 10.5 小结 ..................................................... 219 第 11 章 CompletableFuture :组合式 异步编程 ................................. 220 11.1 Future 接口 ....................................... 222 11.1.1 Future 接口的局限性 .......... 223 11.1.2 使用 CompletableFuture 构建异步应用 ......................... 223 11.2 实现异步 API ...................................... 224 11.2.1 将同步方法转换为异步 方法 ........................................ 225 11.2.2 错误处理 ................................ 227 11.3 让你的代码免受阻塞之苦 ................... 228 11.3.1 使用并行流对请求进行并行 操作 ........................................ 229 11.3.2 使用 CompletableFuture 发起异步请求 ........................ 230 11.3.3 寻找更好的方案 ..................... 232 11.3.4 使用定制的执行器 ................. 233 11.4 对多个异步任务进行流水线操作 ....... 234 11.4.1 实现折扣服务 ........................ 235 11.4.2 使用 Discount 服务 ............ 236 11.4.3 构造同步和异步操作 ............. 237 11.4.4 将两个 Completable- Future 对象整合起来,无 论它们是否存在依赖 ............. 239 11.4.5 对 Future 和 Completable- Future 的回顾 ...................... 241 11.5 响应 CompletableFuture 的 completion 事件 .............................. 242 11.5.1 对最佳价格查询器应用的 优化 ....................................... 243 11.5.2 付诸实践 ................................ 244 11.6 小结 ..................................................... 245 第 12 章 新的日期和时间 API ............... 246 12.1 LocalDate 、 LocalTime 、 Instant 、 Duration 以及 Period .................... 247 12.1.1 使用 LocalDate 和 LocalTime ........................... 247 12.1.2 合并日期和时间 ..................... 248 12.1.3 机器的日期和时间格式 ......... 249 12.1.4 定义 Duration 或 Period .................................. 249 12.2 操纵、解析和格式化日期 ................... 251 12.2.1 使用 TemporalAdjuster .... 253 12.2.2 打印输出及解析日期时间 对象 ....................................... 255 12.3 处理不同的时区和历法 ...................... 256 12.3.1 利用和 UTC/格林尼治时间 的固定偏差计算时区 ............. 257 12.3.2 使用别的日历系统 ................. 258 12.4 小结 ..................................................... 259 第四部分 超越Java 8 第 13 章 函数式的思考 ......................... 262 13.1 实现和维护系统 .................................. 262 13.1.1 共享的可变数据 ..................... 263 目 录 5 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 17 13.1.2 声明式编程 ............................. 264 13.1.3 为什么要采用函数式编程 ...... 265 13.2 什么是函数式编程 ............................... 265 13.2.1 函数式 Java 编程 .................... 266 13.2.2 引用透明性 ............................. 268 13.2.3 面向对象的编程和函数式 编程的对比 ............................. 268 13.2.4 函数式编程实战 ..................... 269 13.3 递归和迭代 .......................................... 271 13.4 小结 ..................................................... 274 第 14 章 函数式编程的技巧 .................. 275 14.1 无处不在的函数 .................................. 275 14.1.1 高阶函数 ................................ 275 14.1.2 科里化 .................................... 277 14.2 持久化数据结构 .................................. 278 14.2.1 破坏式更新和函数式更新的 比较 ........................................ 279 14.2.2 另一个使用 Tree 的例子 ...... 281 14.2.3 采用函数式的方法 ................. 282 14.3 Stream 的延迟计算 .............................. 283 14.3.1 自定义的 Stream ..................... 283 14.3.2 创建你自己的延迟列表 .......... 286 14.4 模式匹配 .............................................. 290 14.4.1 访问者设计模式 ..................... 291 14.4.2 用模式匹配力挽狂澜 ............. 292 14.5 杂项 ..................................................... 295 14.5.1 缓存或记忆表 ......................... 295 14.5.2 “返回同样的对象”意味着 什么 ....................................... 296 14.5.3 结合器 .................................... 296 14.6 小结 ..................................................... 297 第 15 章 面向对象和函数式编程的混合: Java 8 和 Scala 的比较 ........... 299 15.1 Scala 简介 ............................................ 300 15.1.1 你好,啤酒 ............................. 300 15.1.2 基础数据结构: List 、 Set 、 Map 、 Tuple 、 Stream 以及 Option .......................... 302 15.2 函数 ..................................................... 306 15.2.1 Scala 中的一等函数 ............... 307 15.2.2 匿名函数和闭包 ..................... 307 15.2.3 科里化 .................................... 309 15.3 类和 trait .............................................. 310 15.3.1 更加简洁的 Scala 类 .............. 310 15.3.2 Scala 的 trait 与 Java 8 的 接口对比 ................................ 311 15.4 小结 ..................................................... 312 第 16 章 结论以及 Java 的未来 ............. 313 16.1 回顾 Java 8 的语言特性 ....................... 313 16.1.1 行为参数化(Lambda 以及 方法引用) ............................ 314 16.1.2 流 ............................................ 314 16.1.3 CompletableFuture .......... 315 16.1.4 Optional .............................. 315 16.1.5 默认方法 ................................ 316 16.2 Java 的未来 .......................................... 316 16.2.1 集合 ........................................ 316 16.2.2 类型系统的改进 ..................... 317 16.2.3 模式匹配 ................................ 318 16.2.4 更加丰富的泛型形式 ............. 319 16.2.5 对不变性的更深层支持 ......... 321 16.2.6 值类型 .................................... 322 16.3 写在最后的话 ...................................... 325 附录 A 其他语言特性的更新 ................. 326 附录 B 类库的更新 ............................... 330 附录 C 如何以并发方式在同一个流上 执行多种操作 ............................ 338 附录 D Lambda 表达式和 JVM 字 节码 .......................................... 346

2018-01-12

动态生成二维码

利用zxing开源工具生成二维码,也可以解析生成的二维码——QRCode,内含注释,容易理解,直接可以操作,只要配置二维码路径即可

2017-09-05

空空如也

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

TA关注的人

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