From 5f4b9755742ec3a05001bd5dad8310650ddcbeab Mon Sep 17 00:00:00 2001
From: guide
Date: Wed, 14 Oct 2020 13:17:23 +0800
Subject: [PATCH 1/5] =?UTF-8?q?[refractor]java=E9=83=A8=E5=88=86=E7=9B=AE?=
=?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84=E5=92=8C=E6=96=87=E4=BB=B6=E5=A4=B9?=
=?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 4 ++--
...\267\245\345\205\267\346\200\273\347\273\223.md" | 12 ------------
...\236\203\345\234\276\345\233\236\346\224\266.md" | 12 ------------
...\206\205\345\255\230\345\214\272\345\237\237.md" | 12 ------------
...\261\273\345\212\240\350\275\275\345\231\250.md" | 10 ----------
...\212\240\350\275\275\350\277\207\347\250\213.md" | 4 ----
...\226\207\344\273\266\347\273\223\346\236\204.md" | 10 ----------
.../Java8foreach\346\214\207\345\215\227.md" | 0
...\225\231\347\250\213\346\216\250\350\215\220.md" | 0
...\211\271\346\200\247\346\200\273\347\273\223.md" | 0
...211\210\346\234\254\345\217\221\345\270\203.png" | Bin
...\226\260\347\211\271\346\200\247\357\274\201.md" | 2 +-
12 files changed, 3 insertions(+), 63 deletions(-)
rename "docs/java/What's New in JDK8/Java8foreach\346\214\207\345\215\227.md" => "docs/java/new-features/Java8foreach\346\214\207\345\215\227.md" (100%)
rename "docs/java/What's New in JDK8/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md" => "docs/java/new-features/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md" (100%)
rename docs/java/What's New in JDK8/Java8Tutorial.md => "docs/java/new-features/Java8\346\226\260\347\211\271\346\200\247\346\200\273\347\273\223.md" (100%)
rename docs/java/jdk-new-features/images/fc66979f-7974-40e8-88ae-6dbff15ac9ef.png => "docs/java/new-features/images/\344\270\200\346\226\207\345\270\246\344\275\240\347\234\213\351\201\215JDK9~14 \347\232\204\351\207\215\350\246\201\346\226\260\347\211\271\346\200\247/java\347\211\210\346\234\254\345\217\221\345\270\203.png" (100%)
rename docs/java/jdk-new-features/new-features-from-jdk8-to-jdk14.md => "docs/java/new-features/\344\270\200\346\226\207\345\270\246\344\275\240\347\234\213\351\201\215JDK9~14 \347\232\204\351\207\215\350\246\201\346\226\260\347\211\271\346\200\247\357\274\201.md" (99%)
diff --git a/README.md b/README.md
index 9330697f9bb..1ed69707512 100644
--- a/README.md
+++ b/README.md
@@ -100,8 +100,8 @@
### 新特性
-1. **Java 8** :[Java 8 新特性总结](docs/java/What's%20New%20in%20JDK8/Java8Tutorial.md)、[Java 8 学习资源推荐](docs/java/What's%20New%20in%20JDK8/Java8教程推荐.md)、[Java8 forEach 指南](docs/java/What's%20New%20in%20JDK8/Java8foreach指南.md)
-2. **Java9~Java14** : [一文带你看遍 JDK9~14 的重要新特性!](./docs/java/jdk-new-features/new-features-from-jdk8-to-jdk14.md)
+1. **Java 8** :[Java 8 新特性总结](docs/java/new-features/Java8新特性总结.md)、[Java 8 学习资源推荐](docs/java/new-features/Java8教程推荐.md)、[Java8 forEach 指南](docs/java/new-features/Java8foreach指南.md)
+2. **Java9~Java14** : [一文带你看遍 JDK9~14 的重要新特性!](./docs/java/new-features/一文带你看遍JDK9~14 的重要新特性!.md)
## 网络
diff --git "a/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md" "b/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md"
index d5cb29de7a9..c8263de02e2 100644
--- "a/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md"
+++ "b/docs/java/jvm/JDK\347\233\221\346\216\247\345\222\214\346\225\205\351\232\234\345\244\204\347\220\206\345\267\245\345\205\267\346\200\273\347\273\223.md"
@@ -1,5 +1,3 @@
-点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
-
- [JDK 监控和故障处理工具总结](#jdk-监控和故障处理工具总结)
@@ -325,13 +323,3 @@ VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的 Java
-
-
-
-## 公众号
-
-如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
-
-**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本公众号后台回复 **"Java面试突击"** 即可免费领取!
-
-**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。
-
-
diff --git "a/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md" "b/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md"
index a6fd6e2fb8f..5f001636c4a 100644
--- "a/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md"
+++ "b/docs/java/jvm/JVM\345\236\203\345\234\276\345\233\236\346\224\266.md"
@@ -1,5 +1,3 @@
-点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
-
- [JVM 垃圾回收](#jvm-垃圾回收)
@@ -473,16 +471,6 @@ G1 收集器的运作大致分为以下几个步骤:
- https://my.oschina.net/hosee/blog/644618
-
-## 公众号
-
-如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
-
-**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
-
-**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
-
-
-
diff --git "a/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md" "b/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md"
index 0cae9f0a7f8..42dc7b7cb8d 100644
--- "a/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md"
+++ "b/docs/java/jvm/Java\345\206\205\345\255\230\345\214\272\345\237\237.md"
@@ -1,5 +1,3 @@
-点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
-
- [Java 内存区域详解](#java-内存区域详解)
@@ -492,13 +490,3 @@ i4=i5+i6 true
-
-
- 深入解析String#intern
-
-## 公众号
-
-如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
-
-**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
-
-**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
-
-
diff --git "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md" "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md"
index 1d0a826f152..37394a92444 100644
--- "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md"
+++ "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\345\231\250.md"
@@ -1,5 +1,3 @@
-点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
-
- [回顾一下类加载过程](#回顾一下类加载过程)
@@ -134,13 +132,5 @@ protected Class> loadClass(String name, boolean resolve)
-
-
-### 公众号
-
-如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
-
-**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
-
-**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
-
diff --git "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md" "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md"
index 9330c58166a..947e1ad141e 100644
--- "a/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md"
+++ "b/docs/java/jvm/\347\261\273\345\212\240\350\275\275\350\277\207\347\250\213.md"
@@ -1,7 +1,3 @@
-点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
-
-> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。
-
- [类的生命周期](#类的生命周期)
diff --git "a/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md" "b/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md"
index d766aa809c4..8620fab94ca 100644
--- "a/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md"
+++ "b/docs/java/jvm/\347\261\273\346\226\207\344\273\266\347\273\223\346\236\204.md"
@@ -212,13 +212,3 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用
-
-
- 《实战 Java 虚拟机》
-
-## 公众号
-
-如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
-
-**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
-
-**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
-
-
diff --git "a/docs/java/What's New in JDK8/Java8foreach\346\214\207\345\215\227.md" "b/docs/java/new-features/Java8foreach\346\214\207\345\215\227.md"
similarity index 100%
rename from "docs/java/What's New in JDK8/Java8foreach\346\214\207\345\215\227.md"
rename to "docs/java/new-features/Java8foreach\346\214\207\345\215\227.md"
diff --git "a/docs/java/What's New in JDK8/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md" "b/docs/java/new-features/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md"
similarity index 100%
rename from "docs/java/What's New in JDK8/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md"
rename to "docs/java/new-features/Java8\346\225\231\347\250\213\346\216\250\350\215\220.md"
diff --git a/docs/java/What's New in JDK8/Java8Tutorial.md "b/docs/java/new-features/Java8\346\226\260\347\211\271\346\200\247\346\200\273\347\273\223.md"
similarity index 100%
rename from docs/java/What's New in JDK8/Java8Tutorial.md
rename to "docs/java/new-features/Java8\346\226\260\347\211\271\346\200\247\346\200\273\347\273\223.md"
diff --git a/docs/java/jdk-new-features/images/fc66979f-7974-40e8-88ae-6dbff15ac9ef.png "b/docs/java/new-features/images/\344\270\200\346\226\207\345\270\246\344\275\240\347\234\213\351\201\215JDK9~14 \347\232\204\351\207\215\350\246\201\346\226\260\347\211\271\346\200\247/java\347\211\210\346\234\254\345\217\221\345\270\203.png"
similarity index 100%
rename from docs/java/jdk-new-features/images/fc66979f-7974-40e8-88ae-6dbff15ac9ef.png
rename to "docs/java/new-features/images/\344\270\200\346\226\207\345\270\246\344\275\240\347\234\213\351\201\215JDK9~14 \347\232\204\351\207\215\350\246\201\346\226\260\347\211\271\346\200\247/java\347\211\210\346\234\254\345\217\221\345\270\203.png"
diff --git a/docs/java/jdk-new-features/new-features-from-jdk8-to-jdk14.md "b/docs/java/new-features/\344\270\200\346\226\207\345\270\246\344\275\240\347\234\213\351\201\215JDK9~14 \347\232\204\351\207\215\350\246\201\346\226\260\347\211\271\346\200\247\357\274\201.md"
similarity index 99%
rename from docs/java/jdk-new-features/new-features-from-jdk8-to-jdk14.md
rename to "docs/java/new-features/\344\270\200\346\226\207\345\270\246\344\275\240\347\234\213\351\201\215JDK9~14 \347\232\204\351\207\215\350\246\201\346\226\260\347\211\271\346\200\247\357\274\201.md"
index 5b193cd5cac..64d70b3abde 100644
--- a/docs/java/jdk-new-features/new-features-from-jdk8-to-jdk14.md
+++ "b/docs/java/new-features/\344\270\200\346\226\207\345\270\246\344\275\240\347\234\213\351\201\215JDK9~14 \347\232\204\351\207\215\350\246\201\346\226\260\347\211\271\346\200\247\357\274\201.md"
@@ -109,7 +109,7 @@ Java 10 在现有的 CDS 功能基础上再次拓展,以允许应用类放置
Java11 于 2018 年 9 月 25 日正式发布,这是很重要的一个版本!Java 11 和 2017 年 9 月份发布的 Java 9 以及 2018 年 3 月份发布的 Java 10 相比,其最大的区别就是:在长期支持(Long-Term-Support)方面,**Oracle 表示会对 Java 11 提供大力支持,这一支持将会持续至 2026 年 9 月。这是据 Java 8 以后支持的首个长期版本。**
-
+
### 字符串加强
From a4d2eccbc42a75201def84dd247e5e11b4a33683 Mon Sep 17 00:00:00 2001
From: guide
Date: Wed, 14 Oct 2020 13:17:49 +0800
Subject: [PATCH 2/5] =?UTF-8?q?Delete=20Java=20IO=E4=B8=8ENIO.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
"docs/java/Java IO\344\270\216NIO.md" | 200 --------------------------
1 file changed, 200 deletions(-)
delete mode 100644 "docs/java/Java IO\344\270\216NIO.md"
diff --git "a/docs/java/Java IO\344\270\216NIO.md" "b/docs/java/Java IO\344\270\216NIO.md"
deleted file mode 100644
index 74bd850e696..00000000000
--- "a/docs/java/Java IO\344\270\216NIO.md"
+++ /dev/null
@@ -1,200 +0,0 @@
-
-
-- [IO流学习总结](#io流学习总结)
- - [一 Java IO,硬骨头也能变软](#一-java-io,硬骨头也能变软)
- - [二 java IO体系的学习总结](#二-java-io体系的学习总结)
- - [三 Java IO面试题](#三-java-io面试题)
-- [NIO与AIO学习总结](#nio与aio学习总结)
- - [一 Java NIO 概览](#一-java-nio-概览)
- - [二 Java NIO 之 Buffer\(缓冲区\)](#二-java-nio-之-buffer缓冲区)
- - [三 Java NIO 之 Channel(通道)](#三-java-nio-之-channel(通道))
- - [四 Java NIO之Selector(选择器)](#四-java-nio之selector(选择器))
- - [五 Java NIO之拥抱Path和Files](#五-java-nio之拥抱path和files)
- - [六 NIO学习总结以及NIO新特性介绍](#六-nio学习总结以及nio新特性介绍)
- - [七 Java NIO AsynchronousFileChannel异步文件通](#七-java-nio-asynchronousfilechannel异步文件通)
- - [八 高并发Java(8):NIO和AIO](#八-高并发java(8):nio和aio)
-- [推荐阅读](#推荐阅读)
- - [在 Java 7 中体会 NIO.2 异步执行的快乐](#在-java-7-中体会-nio2-异步执行的快乐)
- - [Java AIO总结与示例](#java-aio总结与示例)
-
-
-
-
-
-## IO流学习总结
-
-### [一 Java IO,硬骨头也能变软](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483981&idx=1&sn=6e5c682d76972c8d2cf271a85dcf09e2&chksm=fd98542ccaefdd3a70428e9549bc33e8165836855edaa748928d16c1ebde9648579d3acaac10#rd)
-
-**(1) 按操作方式分类结构图:**
-
-
-
-
-**(2)按操作对象分类结构图**
-
-
-
-### [二 java IO体系的学习总结](https://blog.csdn.net/nightcurtis/article/details/51324105)
-1. **IO流的分类:**
- - 按照流的流向分,可以分为输入流和输出流;
- - 按照操作单元划分,可以划分为字节流和字符流;
- - 按照流的角色划分为节点流和处理流。
-2. **流的原理浅析:**
-
- java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java Io流的40多个类都是从如下4个抽象类基类中派生出来的。
-
- - **InputStream/Reader**: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
- - **OutputStream/Writer**: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
-3. **常用的io流的用法**
-
-### [三 Java IO面试题](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483985&idx=1&sn=38531c2cee7b87f125df7aef41637014&chksm=fd985430caefdd26b0506aa84fc26251877eccba24fac73169a4d6bd1eb5e3fbdf3c3b940261#rd)
-
-## NIO与AIO学习总结
-
-
-### [一 Java NIO 概览](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483956&idx=1&sn=57692bc5b7c2c6dfb812489baadc29c9&chksm=fd985455caefdd4331d828d8e89b22f19b304aa87d6da73c5d8c66fcef16e4c0b448b1a6f791#rd)
-
-1. **NIO简介**:
-
- Java NIO 是 java 1.4, 之后新出的一套IO接口NIO中的N可以理解为Non-blocking,不单纯是New。
-
-2. **NIO的特性/NIO与IO区别:**
- - 1)IO是面向流的,NIO是面向缓冲区的;
- - 2)IO流是阻塞的,NIO流是不阻塞的;
- - 3)NIO有选择器,而IO没有。
-3. **读数据和写数据方式:**
- - 从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据。
-
- - 从通道进行数据写入 :创建一个缓冲区,填充数据,并要求通道写入数据。
-
-4. **NIO核心组件简单介绍**
- - **Channels**
- - **Buffers**
- - **Selectors**
-
-
-### [二 Java NIO 之 Buffer(缓冲区)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483961&idx=1&sn=f67bef4c279e78043ff649b6b03fdcbc&chksm=fd985458caefdd4e3317ccbdb2d0a5a70a5024d3255eebf38183919ed9c25ade536017c0a6ba#rd)
-
-1. **Buffer(缓冲区)介绍:**
- - Java NIO Buffers用于和NIO Channel交互。 我们从Channel中读取数据到buffers里,从Buffer把数据写入到Channels;
- - Buffer本质上就是一块内存区;
- - 一个Buffer有三个属性是必须掌握的,分别是:capacity容量、position位置、limit限制。
-2. **Buffer的常见方法**
- - Buffer clear()
- - Buffer flip()
- - Buffer rewind()
- - Buffer position(int newPosition)
-3. **Buffer的使用方式/方法介绍:**
- - 分配缓冲区(Allocating a Buffer):
- ```java
- ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer为例子
- ```
- - 写入数据到缓冲区(Writing Data to a Buffer)
-
- **写数据到Buffer有两种方法:**
-
- 1.从Channel中写数据到Buffer
- ```java
- int bytesRead = inChannel.read(buf); //read into buffer.
- ```
- 2.通过put写数据:
- ```java
- buf.put(127);
- ```
-
-4. **Buffer常用方法测试**
-
- 说实话,NIO编程真的难,通过后面这个测试例子,你可能才能勉强理解前面说的Buffer方法的作用。
-
-
-### [三 Java NIO 之 Channel(通道)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483966&idx=1&sn=d5cf18c69f5f9ec2aff149270422731f&chksm=fd98545fcaefdd49296e2c78000ce5da277435b90ba3c03b92b7cf54c6ccc71d61d13efbce63#rd)
-
-
-1. **Channel(通道)介绍**
- - 通常来说NIO中的所有IO都是从 Channel(通道) 开始的。
- - NIO Channel通道和流的区别:
-2. **FileChannel的使用**
-3. **SocketChannel和ServerSocketChannel的使用**
-4. **️DatagramChannel的使用**
-5. **Scatter / Gather**
- - Scatter: 从一个Channel读取的信息分散到N个缓冲区中(Buufer).
- - Gather: 将N个Buffer里面内容按照顺序发送到一个Channel.
-6. **通道之间的数据传输**
- - 在Java NIO中如果一个channel是FileChannel类型的,那么他可以直接把数据传输到另一个channel。
- - transferFrom() :transferFrom方法把数据从通道源传输到FileChannel
- - transferTo() :transferTo方法把FileChannel数据传输到另一个channel
-
-
-### [四 Java NIO之Selector(选择器)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483970&idx=1&sn=d5e2b133313b1d0f32872d54fbdf0aa7&chksm=fd985423caefdd354b587e57ce6cf5f5a7bec48b9ab7554f39a8d13af47660cae793956e0f46#rd)
-
-
-1. **Selector(选择器)介绍**
- - Selector 一般称 为选择器 ,当然你也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。
- - 使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。
-2. **Selector(选择器)的使用方法介绍**
- - Selector的创建
- ```java
- Selector selector = Selector.open();
- ```
- - 注册Channel到Selector(Channel必须是非阻塞的)
- ```java
- channel.configureBlocking(false);
- SelectionKey key = channel.register(selector, Selectionkey.OP_READ);
- ```
- - SelectionKey介绍
-
- 一个SelectionKey键表示了一个特定的通道对象和一个特定的选择器对象之间的注册关系。
- - 从Selector中选择channel(Selecting Channels via a Selector)
-
- 选择器维护注册过的通道的集合,并且这种注册关系都被封装在SelectionKey当中.
- - 停止选择的方法
-
- wakeup()方法 和close()方法。
-3. **模板代码**
-
- 有了模板代码我们在编写程序时,大多数时间都是在模板代码中添加相应的业务代码。
-4. **客户端与服务端简单交互实例**
-
-
-
-### [五 Java NIO之拥抱Path和Files](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483976&idx=1&sn=2296c05fc1b840a64679e2ad7794c96d&chksm=fd985429caefdd3f48e2ee6fdd7b0f6fc419df90b3de46832b484d6d1ca4e74e7837689c8146&token=537240785&lang=zh_CN#rd)
-
-**一 文件I/O基石:Path:**
-- 创建一个Path
-- File和Path之间的转换,File和URI之间的转换
-- 获取Path的相关信息
-- 移除Path中的冗余项
-
-**二 拥抱Files类:**
-- Files.exists() 检测文件路径是否存在
-- Files.createFile() 创建文件
-- Files.createDirectories()和Files.createDirectory()创建文件夹
-- Files.delete()方法 可以删除一个文件或目录
-- Files.copy()方法可以吧一个文件从一个地址复制到另一个位置
-- 获取文件属性
-- 遍历一个文件夹
-- Files.walkFileTree()遍历整个目录
-
-### [六 NIO学习总结以及NIO新特性介绍](https://blog.csdn.net/a953713428/article/details/64907250)
-
-- **内存映射:**
-
-这个功能主要是为了提高大文件的读写速度而设计的。内存映射文件(memory-mappedfile)能让你创建和修改那些大到无法读入内存的文件。有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问了。将文件的一段区域映射到内存中,比传统的文件处理速度要快很多。内存映射文件它虽然最终也是要从磁盘读取数据,但是它并不需要将数据读取到OS内核缓冲区,而是直接将进程的用户私有地址空间中的一部分区域与文件对象建立起映射关系,就好像直接从内存中读、写文件一样,速度当然快了。
-
-### [七 Java NIO AsynchronousFileChannel异步文件通](http://wiki.jikexueyuan.com/project/java-nio-zh/java-nio-asynchronousfilechannel.html)
-
-Java7中新增了AsynchronousFileChannel作为nio的一部分。AsynchronousFileChannel使得数据可以进行异步读写。
-
-### [八 高并发Java(8):NIO和AIO](http://www.importnew.com/21341.html)
-
-
-
-## 推荐阅读
-
-### [在 Java 7 中体会 NIO.2 异步执行的快乐](https://www.ibm.com/developerworks/cn/java/j-lo-nio2/index.html)
-
-### [Java AIO总结与示例](https://blog.csdn.net/x_i_y_u_e/article/details/52223406)
-AIO是异步IO的缩写,虽然NIO在网络操作中,提供了非阻塞的方法,但是NIO的IO行为还是同步的。对于NIO来说,我们的业务线程是在IO操作准备好时,得到通知,接着就由这个线程自行进行IO操作,IO操作本身是同步的。
-
-
-**欢迎关注我的微信公众号:"Java面试通关手册"(一个有温度的微信公众号,期待与你共同进步~~~坚持原创,分享美文,分享各种Java学习资源):**
From fe5555f5489a3207ee9f18d185507b2b2cc24996 Mon Sep 17 00:00:00 2001
From: guide
Date: Wed, 14 Oct 2020 17:29:12 +0800
Subject: [PATCH 3/5] =?UTF-8?q?[refractor]=E8=AE=A1=E7=AE=97=E6=9C=BA?=
=?UTF-8?q?=E7=BD=91=E8=B7=AF=E9=83=A8=E5=88=86&=E7=AE=97=E6=B3=95?=
=?UTF-8?q?=E9=83=A8=E5=88=86=E9=87=8D=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 44 +-
.../Backtracking-NQueens.md | 145 ----
...54\345\217\270\347\234\237\351\242\230.md" | 254 -------
...3\347\273\223\346\236\204\345\233\276.png" | Bin 0 -> 225325 bytes
.../\344\274\240\350\276\223\345\261\202.png" | Bin 0 -> 60487 bytes
.../\345\272\224\347\224\250\345\261\202.png" | Bin 0 -> 113078 bytes
...6\351\223\276\350\267\257\345\261\202.png" | Bin 0 -> 51739 bytes
.../\347\211\251\347\220\206\345\261\202.png" | Bin 0 -> 51163 bytes
.../\347\275\221\347\273\234\345\261\202.png" | Bin 0 -> 65696 bytes
...1\347\273\234\346\246\202\350\277\260.png" | Bin 0 -> 59548 bytes
...5\344\275\234\345\267\245\347\250\213.png" | Bin 0 -> 86703 bytes
...4\347\254\254\344\270\203\347\211\210.png" | Bin 0 -> 22300 bytes
...45\350\257\206\346\200\273\347\273\223.md" | 666 +++++++-----------
...27\346\234\272\347\275\221\347\273\234.md" | 5 +-
14 files changed, 271 insertions(+), 843 deletions(-)
delete mode 100644 docs/dataStructures-algorithms/Backtracking-NQueens.md
delete mode 100644 "docs/dataStructures-algorithms/\345\205\254\345\217\270\347\234\237\351\242\230.md"
create mode 100644 "docs/network/images/\344\270\203\345\261\202\344\275\223\347\263\273\347\273\223\346\236\204\345\233\276.png"
create mode 100644 "docs/network/images/\344\274\240\350\276\223\345\261\202.png"
create mode 100644 "docs/network/images/\345\272\224\347\224\250\345\261\202.png"
create mode 100644 "docs/network/images/\346\225\260\346\215\256\351\223\276\350\267\257\345\261\202.png"
create mode 100644 "docs/network/images/\347\211\251\347\220\206\345\261\202.png"
create mode 100644 "docs/network/images/\347\275\221\347\273\234\345\261\202.png"
create mode 100644 "docs/network/images/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\346\246\202\350\277\260.png"
create mode 100644 "docs/network/images/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\347\237\245\350\257\206\347\202\271\346\200\273\347\273\223/\344\270\207\347\273\264\347\275\221\347\232\204\345\244\247\350\207\264\345\267\245\344\275\234\345\267\245\347\250\213.png"
create mode 100644 "docs/network/images/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\347\254\254\344\270\203\347\211\210.png"
diff --git a/README.md b/README.md
index 1ed69707512..35f1cddafdc 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,9 @@
-> 关于 JavaGuide 的相关介绍请看:[《从编程小白到做了一个接近 90k 点赞的一个国产 Java 开源项目》](https://www.yuque.com/snailclimb/dr6cvl/mr44yt#vu3ok)
+> 关于 JavaGuide 的相关介绍请看:[关于 JavaGuide 的一些说明](https://www.yuque.com/snailclimb/dr6cvl/mr44yt#vu3ok)
>
> 准备面试的小伙伴可以考虑面试专版:[《Java 面试进阶指南》](https://xiaozhuanlan.com/javainterview?rel=javaguide) ,欢迎加入[我的星球](https://wx.zsxq.com/dweb2/index/group/48418884588288)获取更多实用干货。
>
> 阿里云最近在做活动,服务器不到 10 元/月,小伙伴们搭建一个网站提高简历质量。支持国内开源做的比较好的公司
>
-> 项目的发展离不开你的支持,如果 JavaGuide 帮助到了你找到自己满意的 offer,那就[请作者喝杯咖啡吧](https://www.yuque.com/snailclimb/dr6cvl/mr44yt#vu3ok)☕!我会继续将项目完善下去!加油!
《JavaGuide 面试突击版》PDF 版本+3 本 PDF Java 学习手册,在公众号 **[JavaGuide](#公众号)** 后台回复“**面试突击**”即可获取。
@@ -126,12 +125,11 @@
算法这部分内容非常重要,如果你不知道如何学习算法的话,可以看下我写的:[《硬核的算法学习书籍+资源推荐》](docs/dataStructures-algorithms/算法学习资源推荐.md) 。
-- 常见算法问题总结:
- - [几道常见的字符串算法题总结 ](docs/dataStructures-algorithms/几道常见的子符串算法题.md)
- - [几道常见的链表算法题总结 ](docs/dataStructures-algorithms/几道常见的链表算法题.md)
- - [剑指 offer 部分编程题](docs/dataStructures-algorithms/剑指offer部分编程题.md)
- - [公司真题](docs/dataStructures-algorithms/公司真题.md)
- - [回溯算法经典案例之 N 皇后问题](docs/dataStructures-algorithms/Backtracking-NQueens.md)
+**常见算法问题总结:**
+
+- [几道常见的字符串算法题总结 ](docs/dataStructures-algorithms/几道常见的子符串算法题.md)
+- [几道常见的链表算法题总结 ](docs/dataStructures-algorithms/几道常见的链表算法题.md)
+- [剑指 offer 部分编程题](docs/dataStructures-algorithms/剑指offer部分编程题.md)
## 数据库
@@ -153,8 +151,8 @@
### Redis
-- [关于缓存的一些重要概念(Redis 前置菜)](docs/database/Redis/some-concepts-of-caching.md)
-- [Redis 常见问题总结](docs/database/Redis/redis-all.md)
+1. [关于缓存的一些重要概念(Redis 前置菜)](docs/database/Redis/some-concepts-of-caching.md)
+2. [Redis 常见问题总结](docs/database/Redis/redis-all.md)
## 系统设计
@@ -199,8 +197,8 @@
#### JWT
-- **[JWT 优缺点分析以及常见问题解决方案](docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md)**
-- **[适合初学者入门 Spring Security With JWT 的 Demo](https://github.com/Snailclimb/spring-security-jwt-guide)**
+1. [JWT 优缺点分析以及常见问题解决方案](docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md)
+2. [适合初学者入门 Spring Security With JWT 的 Demo](https://github.com/Snailclimb/spring-security-jwt-guide)
#### SSO(单点登录)
@@ -334,32 +332,24 @@ CAP 也就是 Consistency(一致性)、Availability(可用性)、Partiti
---
-## 待办
+## 其他
+
+### 待办
- [x] Netty 总结
- [ ] 数据结构总结重构(---正在进行中---)
-## 说明
-
-开源项目在于大家的参与,这才使得它的价值得到提升。感谢 🙏 有你!
-
-项目的 Markdown 格式参考:[Github Markdown 格式](https://guides.github.com/features/mastering-markdown/),表情素材来自:[EMOJI CHEAT SHEET](https://www.webpagefx.com/tools/emoji-cheat-sheet/)。
-
-利用 docsify 生成文档部署在 Github pages: [docsify 官网介绍](https://docsify.js.org/#/) ,另见[《Guide 哥手把手教你搭建一个文档类型的网站!免费且高速!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486555&idx=2&sn=8486026ee9f9ba645ff0363df6036184&chksm=cea24390f9d5ca86ff4177c0aca5e719de17dc89e918212513ee661dd56f17ca8269f4a6e303&token=298703358&lang=zh_CN#rd) 。
-
-Logo 下的小图标是使用[Shields.IO](https://shields.io/) 生成的。
-
-## 联系我
+### 联系我

-## 捐赠支持
+### 捐赠支持
项目的发展离不开你的支持,如果 JavaGuide 帮助到了你找到自己满意的 offer,请作者喝杯咖啡吧 ☕ 后续会继续完善更新!加油!
[点击捐赠支持作者](https://www.yuque.com/snailclimb/dr6cvl/mr44yt#vu3ok)
-## Contributor
+### Contributor
下面是笔主收集的一些对本仓库提过有价值的 pr 或者 issue 的朋友,人数较多,如果你也对本仓库提过不错的 pr 或者 issue 的话,你可以加我的微信与我联系。下面的排名不分先后!
@@ -414,7 +404,7 @@ Logo 下的小图标是使用[Shields.IO](https://shields.io/) 生成的。
-## 公众号
+### 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
diff --git a/docs/dataStructures-algorithms/Backtracking-NQueens.md b/docs/dataStructures-algorithms/Backtracking-NQueens.md
deleted file mode 100644
index 1e1367d3f98..00000000000
--- a/docs/dataStructures-algorithms/Backtracking-NQueens.md
+++ /dev/null
@@ -1,145 +0,0 @@
-# N皇后
-[51. N皇后](https://leetcode-cn.com/problems/n-queens/)
-### 题目描述
-> n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
->
-
->
-上图为 8 皇后问题的一种解法。
->
-给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
->
-每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
-
-示例:
-
-```
-输入: 4
-输出: [
- [".Q..", // 解法 1
- "...Q",
- "Q...",
- "..Q."],
-
- ["..Q.", // 解法 2
- "Q...",
- "...Q",
- ".Q.."]
-]
-解释: 4 皇后问题存在两个不同的解法。
-```
-
-### 问题分析
-约束条件为每个棋子所在的行、列、对角线都不能有另一个棋子。
-
-使用一维数组表示一种解法,下标(index)表示行,值(value)表示该行的Q(皇后)在哪一列。
-每行只存储一个元素,然后递归到下一行,这样就不用判断行了,只需要判断列和对角线。
-### Solution1
-当result[row] = column时,即row行的棋子在column列。
-
-对于[0, row-1]的任意一行(i 行),若 row 行的棋子和 i 行的棋子在同一列,则有result[i] == column;
-若 row 行的棋子和 i 行的棋子在同一对角线,等腰直角三角形两直角边相等,即 row - i == Math.abs(result[i] - column)
-
-布尔类型变量 isValid 的作用是剪枝,减少不必要的递归。
-```java
-public List> solveNQueens(int n) {
- // 下标代表行,值代表列。如result[0] = 3 表示第1行的Q在第3列
- int[] result = new int[n];
- List> resultList = new LinkedList<>();
- dfs(resultList, result, 0, n);
- return resultList;
-}
-
-void dfs(List> resultList, int[] result, int row, int n) {
- // 递归终止条件
- if (row == n) {
- List list = new LinkedList<>();
- for (int x = 0; x < n; ++x) {
- StringBuilder sb = new StringBuilder();
- for (int y = 0; y < n; ++y)
- sb.append(result[x] == y ? "Q" : ".");
- list.add(sb.toString());
- }
- resultList.add(list);
- return;
- }
- for (int column = 0; column < n; ++column) {
- boolean isValid = true;
- result[row] = column;
- /*
- * 逐行往下考察每一行。同列,result[i] == column
- * 同对角线,row - i == Math.abs(result[i] - column)
- */
- for (int i = row - 1; i >= 0; --i) {
- if (result[i] == column || row - i == Math.abs(result[i] - column)) {
- isValid = false;
- break;
- }
- }
- if (isValid) dfs(resultList, result, row + 1, n);
- }
-}
-```
-### Solution2
-使用LinkedList表示一种解法,下标(index)表示行,值(value)表示该行的Q(皇后)在哪一列。
-
-解法二和解法一的不同在于,相同列以及相同对角线的校验。
-将对角线抽象成【一次函数】这个简单的数学模型,根据一次函数的截距是常量这一特性进行校验。
-
-这里,我将右上-左下对角线,简称为“\”对角线;左上-右下对角线简称为“/”对角线。
-
-“/”对角线斜率为1,对应方程为y = x + b,其中b为截距。
-对于线上任意一点,均有y - x = b,即row - i = b;
-定义一个布尔类型数组anti_diag,将b作为下标,当anti_diag[b] = true时,表示相应对角线上已经放置棋子。
-但row - i有可能为负数,负数不能作为数组下标,row - i 的最小值为-n(当row = 0,i = n时),可以加上n作为数组下标,即将row -i + n 作为数组下标。
-row - i + n 的最大值为 2n(当row = n,i = 0时),故anti_diag的容量设置为 2n 即可。
-
-
-
-“\”对角线斜率为-1,对应方程为y = -x + b,其中b为截距。
-对于线上任意一点,均有y + x = b,即row + i = b;
-同理,定义数组main_diag,将b作为下标,当main_diag[row + i] = true时,表示相应对角线上已经放置棋子。
-
-有了两个校验对角线的数组,再来定义一个用于校验列的数组cols,这个太简单啦,不解释。
-
-**解法二时间复杂度为O(n!),在校验相同列和相同对角线时,引入三个布尔类型数组进行判断。相比解法一,少了一层循环,用空间换时间。**
-
-```java
-List> resultList = new LinkedList<>();
-
-public List> solveNQueens(int n) {
- boolean[] cols = new boolean[n];
- boolean[] main_diag = new boolean[2 * n];
- boolean[] anti_diag = new boolean[2 * n];
- LinkedList result = new LinkedList<>();
- dfs(result, 0, cols, main_diag, anti_diag, n);
- return resultList;
-}
-
-void dfs(LinkedList result, int row, boolean[] cols, boolean[] main_diag, boolean[] anti_diag, int n) {
- if (row == n) {
- List list = new LinkedList<>();
- for (int x = 0; x < n; ++x) {
- StringBuilder sb = new StringBuilder();
- for (int y = 0; y < n; ++y)
- sb.append(result.get(x) == y ? "Q" : ".");
- list.add(sb.toString());
- }
- resultList.add(list);
- return;
- }
- for (int i = 0; i < n; ++i) {
- if (cols[i] || main_diag[row + i] || anti_diag[row - i + n])
- continue;
- result.add(i);
- cols[i] = true;
- main_diag[row + i] = true;
- anti_diag[row - i + n] = true;
- dfs(result, row + 1, cols, main_diag, anti_diag, n);
- result.removeLast();
- cols[i] = false;
- main_diag[row + i] = false;
- anti_diag[row - i + n] = false;
- }
-}
-```
\ No newline at end of file
diff --git "a/docs/dataStructures-algorithms/\345\205\254\345\217\270\347\234\237\351\242\230.md" "b/docs/dataStructures-algorithms/\345\205\254\345\217\270\347\234\237\351\242\230.md"
deleted file mode 100644
index c78ed8f3e5a..00000000000
--- "a/docs/dataStructures-algorithms/\345\205\254\345\217\270\347\234\237\351\242\230.md"
+++ /dev/null
@@ -1,254 +0,0 @@
-# 网易 2018
-
-下面三道编程题来自网易2018校招编程题,这三道应该来说是非常简单的编程题了,这些题目大家稍微有点编程和数学基础的话应该没什么问题。看答案之前一定要自己先想一下如果是自己做的话会怎么去做,然后再对照这我的答案看看,和你自己想的有什么区别?那一种方法更好?
-
-## 问题
-
-### 一 获得特定数量硬币问题
-
-小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
-
-魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
-
-魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
-
-小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。
-
-**输入描述:** 输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。
-
-**输出描述:** 输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。
-
-**输入例子1:** 10
-
-**输出例子1:** 122
-
-### 二 求“相反数”问题
-
-为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数"。例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略。例如n = 100, 颠倒之后是1.
-
-**输入描述:** 输入包括一个整数n,(1 ≤ n ≤ 10^5)
-
-**输出描述:** 输出一个整数,表示n的相反数
-
-**输入例子1:** 1325
-
-**输出例子1:** 6556
-
-### 三 字符串碎片的平均长度
-
-一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:'aaa','bb','c'。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。
-
-**输入描述:** 输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s只含小写字母('a'-'z')
-
-**输出描述:** 输出一个整数,表示所有碎片的平均长度,四舍五入保留两位小数。
-
-**如样例所示:** s = "aaabbaaac"
-所有碎片的平均长度 = (3 + 2 + 3 + 1) / 4 = 2.25
-
-**输入例子1:** aaabbaaac
-
-**输出例子1:** 2.25
-
-## 答案
-
-### 一 获得特定数量硬币问题
-
-#### 分析:
-
-作为该试卷的第一题,这道题应该只要思路正确就很简单了。
-
-解题关键:明确魔法机器1只能产生奇数,魔法机器2只能产生偶数即可。我们从后往前一步一步推回去即可。
-
-#### 示例代码
-
-注意:由于用户的输入不确定性,一般是为了程序高可用性使需要将捕获用户输入异常然后友好提示用户输入类型错误并重新输入的。所以下面我给了两个版本,这两个版本都是正确的。这里只是给大家演示如何捕获输入类型异常,后面的题目中我给的代码没有异常处理的部分,参照下面两个示例代码,应该很容易添加。(PS:企业面试中没有明确就不用添加异常处理,当然你有的话也更好)
-
-**不带输入异常处理判断的版本:**
-
-```java
-import java.util.Scanner;
-
-public class Main2 {
- // 解题关键:明确魔法机器1只能产生奇数,魔法机器2只能产生偶数即可。我们从后往前一步一步推回去即可。
-
- public static void main(String[] args) {
- System.out.println("请输入要获得的硬币数量:");
- Scanner scanner = new Scanner(System.in);
- int coincount = scanner.nextInt();
- StringBuilder sb = new StringBuilder();
- while (coincount >= 1) {
- // 偶数的情况
- if (coincount % 2 == 0) {
- coincount = (coincount - 2) / 2;
- sb.append("2");
- // 奇数的情况
- } else {
- coincount = (coincount - 1) / 2;
- sb.append("1");
- }
- }
- // 输出反转后的字符串
- System.out.println(sb.reverse());
-
- }
-}
-```
-
-**带输入异常处理判断的版本(当输入的不是整数的时候会提示重新输入):**
-
-```java
-import java.util.InputMismatchException;
-import java.util.Scanner;
-
-
-public class Main {
- // 解题关键:明确魔法机器1只能产生奇数,魔法机器2只能产生偶数即可。我们从后往前一步一步推回去即可。
-
- public static void main(String[] args) {
- System.out.println("请输入要获得的硬币数量:");
- Scanner scanner = new Scanner(System.in);
- boolean flag = true;
- while (flag) {
- try {
- int coincount = scanner.nextInt();
- StringBuilder sb = new StringBuilder();
- while (coincount >= 1) {
- // 偶数的情况
- if (coincount % 2 == 0) {
- coincount = (coincount - 2) / 2;
- sb.append("2");
- // 奇数的情况
- } else {
- coincount = (coincount - 1) / 2;
- sb.append("1");
- }
- }
- // 输出反转后的字符串
- System.out.println(sb.reverse());
- flag=false;//程序结束
- } catch (InputMismatchException e) {
- System.out.println("输入数据类型不匹配,请您重新输入:");
- scanner.nextLine();
- continue;
- }
- }
-
- }
-}
-
-```
-
-### 二 求“相反数”问题
-
-#### 分析:
-
-解决本道题有几种不同的方法,但是最快速的方法就是利用reverse()方法反转字符串然后再将字符串转换成int类型的整数,这个方法是快速解决本题关键。我们先来回顾一下下面两个知识点:
-
-**1)String转int;**
-
-在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换.
-
-```java
- String str = "123";
- int a = Integer.parseInt(str);
-```
-
- 或
-
-```java
- String str = "123";
- int a = Integer.valueOf(str).intValue();
-```
-
-**2)next()和nextLine()的区别**
-
-在Java中输入字符串有两种方法,就是next()和nextLine().两者的区别就是:nextLine()的输入是碰到回车就终止输入,而next()方法是碰到空格,回车,Tab键都会被视为终止符。所以next()不会得到带空格的字符串,而nextLine()可以得到带空格的字符串。
-
-#### 示例代码:
-
-```java
-import java.util.Scanner;
-
-/**
- * 本题关键:①String转int;②next()和nextLine()的区别
- */
-public class Main {
-
- public static void main(String[] args) {
-
- System.out.println("请输入一个整数:");
- Scanner scanner = new Scanner(System.in);
- String s=scanner.next();
- //将字符串转换成数字
- int number1=Integer.parseInt(s);
- //将字符串倒序后转换成数字
- //因为Integer.parseInt()的参数类型必须是字符串所以必须加上toString()
- int number2=Integer.parseInt(new StringBuilder(s).reverse().toString());
- System.out.println(number1+number2);
-
- }
-}
-```
-
-### 三 字符串碎片的平均长度
-
-#### 分析:
-
-这道题的意思也就是要求:(字符串的总长度)/(相同字母团构成的字符串的个数)。
-
-这样就很简单了,就变成了字符串的字符之间的比较。如果需要比较字符串的字符的话,我们可以利用charAt(i)方法:取出特定位置的字符与后一个字符比较,或者利用toCharArray()方法将字符串转换成字符数组采用同样的方法做比较。
-
-#### 示例代码
-
-**利用charAt(i)方法:**
-
-```java
-import java.util.Scanner;
-
-public class Main {
-
- public static void main(String[] args) {
-
- Scanner sc = new Scanner(System.in);
- while (sc.hasNext()) {
- String s = sc.next();
- //个数至少为一个
- float count = 1;
- for (int i = 0; i < s.length() - 1; i++) {
- if (s.charAt(i) != s.charAt(i + 1)) {
- count++;
- }
- }
- System.out.println(s.length() / count);
- }
- }
-
-}
-```
-
-**利用toCharArray()方法:**
-
-```java
-import java.util.Scanner;
-
-public class Main2 {
-
- public static void main(String[] args) {
-
- Scanner sc = new Scanner(System.in);
- while (sc.hasNext()) {
- String s = sc.next();
- //个数至少为一个
- float count = 1;
- char [] stringArr = s.toCharArray();
- for (int i = 0; i < stringArr.length - 1; i++) {
- if (stringArr[i] != stringArr[i + 1]) {
- count++;
- }
- }
- System.out.println(s.length() / count);
- }
- }
-
-}
-```
\ No newline at end of file
diff --git "a/docs/network/images/\344\270\203\345\261\202\344\275\223\347\263\273\347\273\223\346\236\204\345\233\276.png" "b/docs/network/images/\344\270\203\345\261\202\344\275\223\347\263\273\347\273\223\346\236\204\345\233\276.png"
new file mode 100644
index 0000000000000000000000000000000000000000..a2d24300fcb43dcf910faa4e49a4c8432b3c8a50
GIT binary patch
literal 225325
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 |