Skip to content

Commit

Permalink
auto commit
Browse files Browse the repository at this point in the history
  • Loading branch information
CyC2018 committed Nov 17, 2020
1 parent 236b85a commit 7899f56
Show file tree
Hide file tree
Showing 41 changed files with 572 additions and 4,565 deletions.
2 changes: 1 addition & 1 deletion notes/43. 从 1 到 n 整数中 1 出现的次数.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ public int NumberOf1Between1AndN_Solution(int n) {
}
```

\> [Leetcode : 233. Number of Digit One](https://leetcode.com/problems/number-of-digit-one/discuss/64381/4+-lines-O(log-n)-C++JavaPython)
> [Leetcode : 233. Number of Digit One](https://leetcode.com/problems/number-of-digit-one/discuss/64381/4+-lines-O(log-n)-C++JavaPython)
6 changes: 6 additions & 0 deletions notes/Docker.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
# Docker
<!-- GFM-TOC -->
* [Docker](#docker)
* [解决的问题](#一解决的问题)
* [与虚拟机的比较](#二与虚拟机的比较)
* [优势](#三优势)
* [使用场景](#四使用场景)
* [镜像与容器](#五镜像与容器)
* [参考资料](#参考资料)
<!-- GFM-TOC -->


Expand Down
64 changes: 54 additions & 10 deletions notes/HTTP.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,58 @@
<!-- GFM-TOC -->
* [HTTP](#http)
* [基础概念](#-基础概念)
* [请求和响应报文](#请求和响应报文)
* [URL](#url)
* [HTTP 方法](#二http-方法)
* [GET](#get)
* [HEAD](#head)
* [POST](#post)
* [PUT](#put)
* [PATCH](#patch)
* [DELETE](#delete)
* [OPTIONS](#options)
* [CONNECT](#connect)
* [TRACE](#trace)
* [HTTP 状态码](#三http-状态码)
* [1XX 信息](#1xx-信息)
* [2XX 成功](#2xx-成功)
* [3XX 重定向](#3xx-重定向)
* [4XX 客户端错误](#4xx-客户端错误)
* [5XX 服务器错误](#5xx-服务器错误)
* [HTTP 首部](#四http-首部)
* [通用首部字段](#通用首部字段)
* [请求首部字段](#请求首部字段)
* [响应首部字段](#响应首部字段)
* [实体首部字段](#实体首部字段)
* [具体应用](#五具体应用)
* [连接管理](#连接管理)
* [Cookie](#cookie)
* [缓存](#缓存)
* [内容协商](#内容协商)
* [内容编码](#内容编码)
* [范围请求](#范围请求)
* [分块传输编码](#分块传输编码)
* [多部分对象集合](#多部分对象集合)
* [虚拟主机](#虚拟主机)
* [通信数据转发](#通信数据转发)
* [HTTPS](#六https)
* [加密](#加密)
* [认证](#认证)
* [完整性保护](#完整性保护)
* [HTTPS 的缺点](#https-的缺点)
* [HTTP/2.0](#七http20)
* [HTTP/1.x 缺陷](#http1x-缺陷)
* [二进制分帧层](#二进制分帧层)
* [服务端推送](#服务端推送)
* [首部压缩](#首部压缩)
* [HTTP/1.1 新特性](#八http11-新特性)
* [GET POST 比较](#九get--post-比较)
* [作用](#作用)
* [参数](#参数)
* [安全](#安全)
* [幂等性](#幂等性)
* [可缓存](#可缓存)
* [XMLHttpRequest](#xmlhttprequest)
* [参考资料](#参考资料)
<!-- GFM-TOC -->

Expand Down Expand Up @@ -95,29 +139,29 @@ http 使用 URL( **U** niform **R**esource **L**ocator,统一资源定位符

### GET

\> 获取资源
> 获取资源

当前网络请求中绝大部分使用的是 GET 方法

### HEAD

\> 获取报文首部
> 获取报文首部

GET 方法类似但是不返回报文实体主体部分

主要用于确认 URL 的有效性以及资源更新的日期时间等

### POST

\> 传输实体主体
> 传输实体主体

POST 主要用来传输数据 GET 主要用来获取资源

更多 POST GET 的比较请见第九章

### PUT

\> 上传文件
> 上传文件

由于自身不带验证机制任何人都可以上传文件因此存在安全性问题一般不使用该方法

Expand All @@ -132,7 +176,7 @@ Content-length: 16

### PATCH

\> 对资源进行部分修改
> 对资源进行部分修改

PUT 也可以用于修改资源但是只能完全替代原始资源PATCH 允许部分修改

Expand All @@ -148,7 +192,7 @@ Content-Length: 100
### DELETE
\> 删除文件
> 删除文件
与 PUT 功能相反,并且同样不带验证机制。
Expand All @@ -158,15 +202,15 @@ DELETE /file.html HTTP/1.1
### OPTIONS
\> 查询支持的方法
> 查询支持的方法
查询指定的 URL 能够支持的方法。
会返回 `Allow: GET, POST, HEAD, OPTIONS` 这样的内容。
### CONNECT
\> 要求在与代理服务器通信时建立隧道
> 要求在与代理服务器通信时建立隧道
使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
Expand All @@ -178,7 +222,7 @@ CONNECT www.example.com:443 HTTP/1.1

### TRACE

\> 追踪路径
> 追踪路径

服务器会将通信路径返回给客户端

Expand Down Expand Up @@ -863,7 +907,7 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404

为了阐述 POST GET 的另一个区别需要先了解 XMLHttpRequest

\> XMLHttpRequest 是一个 API它为客户端提供了在客户端和服务器之间传输数据的功能它提供了一个通过 URL 来获取数据的简单方式并且不会使整个页面刷新这使得网页只更新一部分页面而不会打扰到用户XMLHttpRequest AJAX 中被大量使用
> XMLHttpRequest 是一个 API它为客户端提供了在客户端和服务器之间传输数据的功能它提供了一个通过 URL 来获取数据的简单方式并且不会使整个页面刷新这使得网页只更新一部分页面而不会打扰到用户XMLHttpRequest AJAX 中被大量使用

- 在使用 XMLHttpRequest POST 方法时浏览器会先发送 Header 再发送 Data但并不是所有浏览器会这么做例如火狐就不会
- GET 方法 Header Data 会一起发送
Expand Down
21 changes: 21 additions & 0 deletions notes/Java IO.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,31 @@
* [概览](#一概览)
* [磁盘操作](#二磁盘操作)
* [字节操作](#三字节操作)
* [实现文件复制](#实现文件复制)
* [装饰者模式](#装饰者模式)
* [字符操作](#四字符操作)
* [编码与解码](#编码与解码)
* [String 的编码方式](#string-的编码方式)
* [Reader Writer](#reader--writer)
* [实现逐行输出文本文件的内容](#实现逐行输出文本文件的内容)
* [对象操作](#五对象操作)
* [序列化](#序列化)
* [Serializable](#serializable)
* [transient](#transient)
* [网络操作](#六网络操作)
* [InetAddress](#inetaddress)
* [URL](#url)
* [Sockets](#sockets)
* [Datagram](#datagram)
* [NIO](#七nio)
* [流与块](#流与块)
* [通道与缓冲区](#通道与缓冲区)
* [缓冲区状态变量](#缓冲区状态变量)
* [文件 NIO 实例](#文件-nio-实例)
* [选择器](#选择器)
* [套接字 NIO 实例](#套接字-nio-实例)
* [内存映射文件](#内存映射文件)
* [对比](#对比)
* [参考资料](#八参考资料)
<!-- GFM-TOC -->

Expand Down
45 changes: 35 additions & 10 deletions notes/Java 基础.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,42 @@
<!-- GFM-TOC -->
* [Java 基础](#java-基础)
* [数据类型](#一数据类型)
* [基本类型](#基本类型)
* [包装类型](#包装类型)
* [缓存池](#缓存池)
* [String](#二string)
* [概览](#概览)
* [不可变的好处](#不可变的好处)
* [String, StringBuffer and StringBuilder ](#string-stringbuffer-and-stringbuilder )
* [String Pool](#string-pool)
* [new String("abc")](#new-stringabc)
* [运算](#三运算)
* [参数传递](#参数传递)
* [float double](#float--double)
* [隐式类型转换](#隐式类型转换)
* [switch](#switch)
* [关键字](#四关键字)
* [final](#final)
* [static](#static)
* [Object 通用方法](#五object-通用方法)
* [概览](#概览)
* [equals()](#equals)
* [hashCode()](#hashcode)
* [toString()](#tostring)
* [clone()](#clone)
* [继承](#六继承)
* [访问权限](#访问权限)
* [抽象类与接口](#抽象类与接口)
* [super](#super)
* [重写与重载](#重写与重载)
* [反射](#七反射)
* [异常](#八异常)
* [泛型](#九泛型)
* [注解](#十注解)
* [十一特性](#十一特性)
* [Java 各版本的新特性](#java-各版本的新特性)
* [Java C++ 的区别](#java--c-的区别)
* [JRE or JDK](#jre-or-jdk)
* [参考资料](#参考资料)
<!-- GFM-TOC -->

Expand Down Expand Up @@ -1328,26 +1354,25 @@ public static void main(String[] args) {

Class java.lang.reflect 一起对反射提供了支持java.lang.reflect 类库主要包含了以下三个类

- **Field** :可以使用 get() set() 方法读取和修改 Field 对象关联的字段
- **Method** :可以使用 invoke() 方法调用与 Method 对象关联的方法
- **Constructor** :可以用 Constructor newInstance() 创建新的对象
- **Field** :可以使用 get() set() 方法读取和修改 Field 对象关联的字段
- **Method** :可以使用 invoke() 方法调用与 Method 对象关联的方法
- **Constructor** :可以用 Constructor newInstance() 创建新的对象

**反射的优点:**

* **可扩展性** :应用程序可以利用全限定名创建可扩展对象的实例来使用来自外部的用户自定义类
* **类浏览器和可视化开发环境** :一个类浏览器需要可以枚举类的成员可视化开发环境 IDE可以从利用反射中可用的类型信息中受益以帮助程序员编写正确的代码
* **调试器和测试工具** : 调试器需要能够检查一个类里的私有成员测试工具可以利用反射来自动地调用类里定义的可被发现的 API 定义以确保一组测试中有较高的代码覆盖率
- **可扩展性** :应用程序可以利用全限定名创建可扩展对象的实例来使用来自外部的用户自定义类
- **类浏览器和可视化开发环境** :一个类浏览器需要可以枚举类的成员可视化开发环境 IDE可以从利用反射中可用的类型信息中受益以帮助程序员编写正确的代码
- **调试器和测试工具** : 调试器需要能够检查一个类里的私有成员测试工具可以利用反射来自动地调用类里定义的可被发现的 API 定义以确保一组测试中有较高的代码覆盖率

**反射的缺点:**

尽管反射非常强大但也不能滥用如果一个功能可以不用反射完成那么最好就不用在我们使用反射技术时下面几条内容应该牢记于心

* **性能开销** :反射涉及了动态类型的解析所以 JVM 无法对这些代码进行优化因此反射操作的效率要比那些非反射操作低得多我们应该避免在经常被执行的代码或对性能要求很高的程序中使用反射
- **性能开销** :反射涉及了动态类型的解析所以 JVM 无法对这些代码进行优化因此反射操作的效率要比那些非反射操作低得多我们应该避免在经常被执行的代码或对性能要求很高的程序中使用反射

* **安全限制** :使用反射技术要求程序必须在一个没有安全限制的环境中运行如果一个程序必须在有安全限制的环境中运行 Applet那么这就是个问题了

* **内部暴露** :由于反射允许代码执行一些在正常情况下不被允许的操作比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用这可能导致代码功能失调并破坏可移植性反射代码破坏了抽象性因此当平台发生改变的时候代码的行为就有可能也随着变化
- **安全限制** :使用反射技术要求程序必须在一个没有安全限制的环境中运行如果一个程序必须在有安全限制的环境中运行 Applet那么这就是个问题了

- **内部暴露** :由于反射允许代码执行一些在正常情况下不被允许的操作比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用这可能导致代码功能失调并破坏可移植性反射代码破坏了抽象性因此当平台发生改变的时候代码的行为就有可能也随着变化

- [Trail: The Reflection API](https://docs.oracle.com/javase/tutorial/reflect/index.html)
- [深入解析 Java 反射1)- 基础](http://www.sczyh30.com/posts/Java/java-reflection-1/)
Expand Down
12 changes: 12 additions & 0 deletions notes/Java 容器.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,20 @@
<!-- GFM-TOC -->
* [Java 容器](#java-容器)
* [概览](#一概览)
* [Collection](#collection)
* [Map](#map)
* [容器中的设计模式](#二容器中的设计模式)
* [迭代器模式](#迭代器模式)
* [适配器模式](#适配器模式)
* [源码分析](#三源码分析)
* [ArrayList](#arraylist)
* [Vector](#vector)
* [CopyOnWriteArrayList](#copyonwritearraylist)
* [LinkedList](#linkedlist)
* [HashMap](#hashmap)
* [ConcurrentHashMap](#concurrenthashmap)
* [LinkedHashMap](#linkedhashmap)
* [WeakHashMap](#weakhashmap)
* [参考资料](#参考资料)
<!-- GFM-TOC -->

Expand Down
Loading

0 comments on commit 7899f56

Please sign in to comment.