目录

■1.前言

■2.操作

1.建立连接

2.取得数据

2.1.设定Head情报

2.2.发送请求(使用GET方式发送请求,不然会返回 405 )

■相关知识

0.对于URL和URI的理解

1.对于 GET 和POST请求的理解

2.为什么有时(405),要使用GET请求

3.HTTP的各种返回码

4.Header中指定 accept的效果 //于SFDC没有什么关联,纯粹业余爱好使用一下HttpClient

4.1.请求终端其他信息(服务器名字)//于SFDC没有什么关联,纯粹业余爱好使用一下HttpClient

5.chunked,分块传输的意思!

6.HTTP的返回状态

7.对于URL中,特殊字符的处理

8.按照,OSI,从上到下分为7层

8.1.关于各种协议中的 「TCP」

8.2.关于各种协议中的 「UDP」

8.3.端口号

8.4.扩展(NetBIOS)

8.5.扩展(我们使用的网络命令「nbtstat」)

9.客户端与服务器端的认证方式

10.服务器端的各种端口号

11.反向代理服务器  (负载平衡)

12.session拷贝

12.1.为什么要进行session拷贝

12.1.如何实现session拷贝

13.HttpClient使用时,TimeOut时间

14.启动Web服务时,将一些情报设定到JVM中

15.扩展话题(noSQL)

16.设计模式:单例模式

17.Spring 2.5之后,使用标注,管理类的声明周期(在Spring容器,IOC中的生命周期)

18.栈内存,堆内存

19.代码检查工具(比CheckStyle更好)

20.AES

21.在服务器端设定参数

22.让公网可以访问自己家电脑的服务

23.IP地址的分类

23.1.扩展

23.2.子网掩码的作用

23.3.网关

24.公钥,私钥,HTTPS,数字签名(数字证书)// 于SFDC无关,纯粹个人爱好,对应HTTPS证书了解一下  ★★★

25.HttpClient请求超时,重复提交

26.使用HttpClient时,设置代理之后,发生的异常

27.HTTPS 与 SSL/TLS 与 CA

28.查看JDK支持的SSL/TLS 版本

29.查看查看CA证书的发布机构

29.0.对于https的网站, 要在【服务器端】安装CA证书。

29.1.点击浏览器,网址旁边的小锁头,会出现下面的对话框,点击查看证书

29.3.得到CA证书的发布机构(可信任的第三方,下面链接中,有关于可信任的第三方的描述)

30.查看JDK信任的CA机构

30.1.前言(相关知识)

30.2.操作方法

30.3.证书指纹

30.4.区别「网站提供的、数字签名」

30.5.查看证书指纹

30.6.和JDK进行匹配

31.JDK添加证书的信任机构

32.HTTPS、TLS、SSL、HTTP区别和关系

■其它通信安全的相关知识

1.什么是:公钥,私钥,证书 ,以及 HTTPS,

2.使用JDK创建证书   (并在 自己的 Web工程中 使用证书)

3.网络通信相关知识(整理在SFDC相关的资料中)

4.证明书安装(no trusted certificate found 时,需要用安装证明书的方式,来通过认证)

5.客户端证书     (和【 https 网站 的 CA证书】, 分别是 两个 证书。)

6.在浏览器中查看  客户端证书・信任的证书

7.ssh,scp,sftp等命令无密码使用(通过公钥,私钥实现)


---------------------

---------------------

■1.前言

--

■2.操作

ーーーーーーーーーーーーーーーーー

1.建立连接

获取以下情报

access_token (accessToken)

instance_url (instanceUrl)(https://yourInstance.salesforce.com)

参照SFDC相关文档

<Salesforce Developers>

2.取得数据

把以下情报设置到报头中,再次发生请求SFDC提供的API,得到相关的数据

参照SFDC相关文档如下(SFDC提供的API)

<Salesforce Developers>

curl https://yourInstance.salesforce.com/services/data/v20.0/query/?q=SELECT+name+from+Account -H "Authorization: Bearer token"
上面的加号代表空格

我们不使用CURL ,而是使用HttpClient

<Salesforce Developers>

HttpClient httpclient = new HttpClient();GetMethod gm = new GetMethod(serviceUrl);//set the token in the headergm.setRequestHeader("Authorization", "Bearer "+accessToken);

URL直接像下面这样写就行(其中要注意版本情报)

https://yourInstance.salesforce.com/services/data/v20.0/query/?q=SELECT+name+from+Account

那么,

2.1.设定Head情报

String url = instanceUrl + /services/data/v20.0/query/?q=SELECT+name+from+Account

HttpGet httpGet = new HttpGet(url);

httpGet .setHeader("Content-Type", "application/json");

httpGet .setHeader("Authorization", "Bearea" + accessToken);

2.2.发送请求(使用GET方式发送请求,不然会返回 405 )

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpResponse response = httpclient.execute(httpGet );

ーーーーーーーーーーーーーーーーー

■相关知识

0.对于URL和URI的理解

URI = Universal Resource Identifier 统一资源标志符
URL = Universal Resource Locator 统一资源定位符

URL只是URI的一种,它指明了定位的信息,必须是绝对的)

---------------

http://localhost:8080/mysource/test.html

-------------

上面整个内容是一个URL

其中红色部分是URI

1.对于 GET 和POST请求的理解

以前的理解(GET把参数包含在URL中,POST通过request body传递参数)

注意:GET方式,传送,参数中只能是ASCII编码,不能有汉字

如果想传送汉字等相关的内容,需要经过URL编码

现在加深的理解

■简单介绍
Get是最常用的方法,通常用于请求服务器发送某个资源
POST方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。

■数据传送(GET)
・GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中)
・以?分割URL和传输数据,参数之间以&相连
・如果是空格,转换为+
・英文字母或数字,则原样发送
・如果是中文或其他字符,则直接把字符串用URLEncode编码,
得出如:RegExp('%5c%77%2b%20%2a%5c%28%5c%29%20%2a%7b%5c%77%2b%20%2a%5b%27%7c%22%5d%2e%2b%5b%27%7c%22%5d%3b%3f%20%2a%7d');

-------------

使用URL解码后,值如下

RegExp('\w+ *\(\) *{\w+ *['|"].+['|"];? *}');
Java 中对应的 URLDecoder.decode(responseText, "UTF-8");可以解决以上编码问题。

■安全性
POST的安全性要比GET的安全性高
(原因:通过GET提交数据,用户名和密码将明文出现在URL上(登录页面有可能被浏览器缓存))
这样,查看浏览器的历史纪录,就可以拿到密码了。

■Base64

・使用64个基本字符,来表示内容
・base64编码,每3个8位明文数据为一组,取这3个字数据的ASCII码,然后以6位为一组组成4个新的数据。对于不足3字节的处理:
・不足三字节后面填充0;
・对于编码前的数据产生的6位,如果为0,则索引到的字符为‘A’,因不足3字节而填充的0,用’=’来替代;
(所有我们经常在一些资源的截尾,有时会看到,最后为=或者==,迅雷下载的一些资源时,经常可以看到base64编码的内容)
(备考:base64中的64个基本字符中是没有「=」这个字符的)

base64常用于网络数据传输过程的编解码环节,比如迅雷
base64不是URLEncode

-----------------------------------------------------------------------

2.为什么有时(405),要使用GET请求

发送post请求,当发送的URI是一个具体的资源时,网站会把整个URI当作域名解析。

相当于我们并没有传递参数给服务器端。

直接访问服务器的具体资源时,要使用get请求。

-----------------------------------------------------------------------

3.HTTP的各种返回码

3XX 代理相关问题

・301 永久重定向

・302 临时重定向

4XX 我们请求的URL造成的问题

・400 你的URL有问题,服务器端识别不了(Bad Request)语法有误,或者参数有问题

解决方法,好好去检查自己传送给服务器端,定义的URL的内容

・401 身份认证出现问题(因为request中没有包含Authorization header)(Unauthorized)

・403 没有权限访问 (Forbidden)

服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助。

・405 请求行中指定的请求方法不能被用于请求相应的资源。( Method Not Allowed)

解决方法,把POST请求改为GET请求

500  服务器端 发生错误

503  服务器停机或正在维护( Service Unavailable)

更加详细的内容,在No.6中

4.Header中指定 accept的效果 //于SFDC没有什么关联,纯粹业余爱好使用一下HttpClient

httpGet.addHeader("Accept-Encoding", "gzip, deflate");

httpGet.addHeader("Accept-Charset", "utf-8");

浏览器发送的accept字段只是建议值,发送端希望接受的数据类型

服务器是否使用这个值由服务端程序决定。

如果服务端按Restful规范开发接口的话,可以考虑根据accept的不同值返回不同格式的内容。

[ Accept 收受; 接受(建议、邀请等); (认为合适或足够好而) 接受; 同意; 认可;]

---------------------------

Accept属于请求头, Content-Type属于实体头。
Http报头分为通用报头,请求报头,响应报头和实体报头。
请求方的http报头结构:通用报头|请求报头|实体报头
响应方的http报头结构:通用报头|响应报头|实体报头

---------------------------

所以,我们再response的Header中,看不到Header中,Accept对应的信息

4.1.请求终端其他信息(服务器名字)//于SFDC没有什么关联,纯粹业余爱好使用一下HttpClient

扩展,反向代理服务器,OpenResty和Tengine基于 Nginx 的两个衍生版本。

下面的No.11中有简单的关于反向代理服务器的介绍

当服务器的名字是,Tengine时,

使用Httpclient爬取网页信息时,返回的信息乱码,不能正常解析。

但是,当服务器的名字是,OpenResty时,就不是乱码,可以正常解析。

以上两个反向代理服务器中,都是用了分段传输。

5.chunked,分块传输的意思!

Transfer-Encoding:是一个 HTTP 头部字段,字面意思是「传输编码」。
 (HTTP 协议中还有另外一个头部与编码有关:Content-Encoding(内容编码)。)
Content-Encoding :通常用于对实体内容进行压缩编码,目的是优化传输,例如用 gzip 压缩文本文件,能大幅减小体积。

----------------------------------------

     gizp

OpenResty时,使用了gzip,而且是乱码(乱码内容是URL编码,但是(URLDecoder)不能正常解码)

(有人说这是被反爬了,args1是密钥,下面的也不是编码的,就是js混淆的问题)

https://bbs.csdn.net/topics/395274030

----------------------------------------

为什么要分段传输

HTTP协议是基于TCP的,所以有三次握手和四次挥手。

当我们传送的数据量很大时,可以考虑使用分段传输。

------------------------------------

・HTTP分块传输编码允许服务器为动态生成的内容维持HTTP持久连接。通常,持久链接需要服务器在开始发送消息体前发送Content-Length消息头字段,但是对于动态生成的内容来说,在内容创建完之前是不可知的。[动态内容,content-length无法预知]
・分块传输编码允许服务器在最后发送消息头字段。对于那些头字段值在内容被生成之前无法知道的情形非常重要,例如消息的内容要使用散列进行签名,散列的结果通过HTTP消息头字段进行传输。没有分块传输编码时,服务器必须缓冲内容直到完成后计算头字段的值并在发送内容前发送这些头字段的值。[散列签名,需缓冲完成才能计算]
・HTTP服务器有时使用压缩 (gzip或deflate)以缩短传输花费的时间。分块传输编码可以用来分隔压缩对象的多个部分。在这种情况下,块不是分别压缩的,而是整个负载进行压缩,压缩的输出使用本文描述的方案进行分块传输。在压缩的情形中,分块编码有利于一边进行压缩一边发送数据,而不是先完成压缩过程以得知压缩后数据的大小。[gzip压缩,压缩与传输同时进行]
・一般情况HTTP的Header包含Content-Length域来指明报文体的长度。有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时用需要实时生成消息长度,服务器一般使用chunked编码。
・在进行Chunked编码传输时,在回复消息的Headers有transfer-coding域值为chunked,表示将用chunked编码传输内容。

------------------------------------

6.HTTP的返回状态

1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
-----------------------------------
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
-----------------------------------
301:永久性重定向
302:临时重定向
            302 内网不能访问外网,浏览器可以使用代理访问访问,使用HttpClient指定代理后,出现302返回值
                    重定向的URL还是最一开始访问的URL。
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
-----------------------------------
400:请求报文语法有误,服务器无法识别
            400表面你的URL组成有问题,解决方法,重新检查你的URL定义
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
405:请求行中指定的请求方法不能被用于请求相应的资源。
            405 错误经常和 POST 方法同时出现,解决方法,尝试使用GET方法
406:根据用户发送的Accept拖,请求资源不可访问
407:类似401,用户必须首先在代理服务器上得到授权
408:客户端没有在用户指定的饿时间内完成请求
409:对当前资源状态,请求不能完成
410:服务器上不再有此资源且无进一步的参考地址
411:服务器拒绝用户定义的Content-Length属性请求
412:一个或多个请求头字段在当前请求中错误
413:请求的资源大于服务器允许的大小
414:请求的资源URL长于服务器允许的长度
415:请求资源不支持请求项目格式
416:请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417:服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
-----------------------------------
500:服务器内部错误
501:服务器不支持请求的函数
502:服务器暂时不可用,有时是为了防止发生系统过载
503:服务器正忙(web服务器不能处理HTTP请求,可能是临时超载或者是服务器进行维护)
504:关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505:服务器不支持或拒绝支请求头中指定的HTTP版本
-----------------------------------

7.对于URL中,特殊字符的处理

   当组件中的普通数据包含下面的「特殊字符」时

No. 特殊字符 因为,URL中已经有了其他的用途
所以我们在使用时,
要使用对应的转义字符(URL编码)
出现汉字时,同样使用URL编码,
URL中不会传递汉字
16进制的URL(URI)编码
 
1 + 已被用于表示空格 %2B
2 空格 虽然没有作用,但是确实特殊
(可以用+号或者编码)
%20
3 / 分隔目录和子目录 %2F
4 ? 分隔实际的URL和参数 %3F
5 % 指定特殊字符 %25
6 # 表示书签(锚点使用) %23 
7 & 参数间的分隔符 %26
8 = 指定参数的值 %3D
9 ( 不是特殊编码,不需要转义 %28
10 不是特殊编码,不需要转义 %29

--

8.按照,OSI,从上到下分为7层

7 应用层  TELNET,HTTP,FTP,NFS,SMTP
 6 表示层
 5 会话层
 4 传输层  TCP,UDP,TLS,SSL3,SPX  //SecurityProtocolType 网络(传输层)安全协议 (Transport Layer Security)
 3 网络层   ICMP   // Ping发送的是一个ICMP
 2 数据链路层
 1 物理层

但是,实际上,我们使用的是TCP/IP协议

osi是一种体系,tcp/ip是协议,虽然说tcp/ip的5层结构就是基于osi发展出来的。

osi模型是理论层次上的东西,是比较理想化的;

而tcp/ip是实践中摸索出来的一套结构。

TCP/IP(4层):
应用层
传输层
网络层
网络接口层

TCP/IP(5层):
应用层 TELNET,HTTP,FTP,NFS,SMTP,POP3
传输层 TCP,UDP,TLS,SSL3,SPX
网络层
数据链路层
物理层

Mstsc、Telnet、SSH之间的区别_sun0322的博客-CSDN博客

8.1.关于各种协议中的 「TCP」

应用层的,FTP、SSH、Telnet、HTTP、HTTPS、SMTP、POP3等,都是使用TCP协议的。

TCP是面向连接的协议,

一次TCP的会话过程中,建立连接需要三次握手,断开连接需要四次挥手

TCP:Transmission Control Protocol传输控制协议,
TCP是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,

8.2.关于各种协议中的 「UDP」

UDP:User Datagram Protocol用户数据报协议,
UDP是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP 协议基本上是IP协议与上层协议的接口。
UDP协议适用端口分别运行在同一台设备上的多个应用程序。

8.3.端口号

端口号的有效范围是从0到65535。
一般来说,大于49151的端口号都代表动态端口。
UDP端口号指定有两种方式:由管理机构指定端口和动态绑定的方式。

8.4.扩展(NetBIOS)

Netbios(Network Basic Input Output System):网络基本输入输出系统,
NetBIOS协议是由IBM公司开发,主要用于20-200台计算机的局域网。
Netbios是一种应用程序接口(API),系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,
实现信息通讯作用是为了给局域网提供网络以及其他特殊功能,几乎所有的局域网都是在NetBIOS协议的基础上工作的。
在Windows操作系统中,默认情况下在安装 TCP/IP 协议后会自动安装NetBIOS。

8.5.扩展(我们使用的网络命令「nbtstat」)

对应的缩写:NETBIOS over TCP/IP statistics

(statistics:统计数字,统计资料,统计学)

9.客户端与服务器端的认证方式

・session :一直不变,客户端服务器端都有保存

确认上一次的请求是不是你发送的

(每一个session都有一个sessionId,生成的sessionId以Cookie的形式发送给客户端,

浏览器下次再访问服务器端时,会带着cookie中的sessionId一起发送过去。)

・token:根据算法,只是在某一个时间段内是不变的,服务器端不需要保存,每次通过计算得出的结果来验证

(token不需要cookie,它是一个值,可以直接再客户端以文本的形式保存起来,

在服务器端,也无需占用任何空间保存,因为Token是通过加密算法计算处理的一个值)

// token是服务器端利用加密算法,计算处理的一个值

// 再加密算法中,有可能会使用到客户端的机器信息,当前的时间等

---------------------

// 本次SFDC连接中发现,很短的时间内(也就5分钟不到)

//  两次执程序,进行连接处理,取得Token,取得的Token的值竟然是相同的。

// 推测,SFDC侧,生成Token的算法,是和时间段有关系。

---------------------

本次的SFDC类子中,就是保存了第一次建立连接后,得到的Token的值,

当再次发起请求时,把token值也发送过去,

服务器端会再次使用加密算法,再次进行计算,

看看从客户端得到的Token值,和再次计算出来的Token值,是否匹配。)

使用 「curl -I URL  (这里的「I」要大写)获取Header信息,查看cookie中设定的sessionID

通过以上这种方式取得的值,每次都是不同的

而,我们的浏览器,可以记住登陆状态,是我们浏览器端保存了,sessionID,每次sessionID都是相同的

访问自己的网站(Tomacat)

■访问经Apache 转发的网站 (服务配置在Tomcat中,经Apache转发)

Server 显示 Apache

10.服务器端的各种端口号

Https服务器的端口号是:443

HTTPS、HTTPS、SSH、MSTSC等常用网络服务的端口号_sun0322的博客-CSDN博客_ssh默认端口号

查看端口开放情况

telnet ip Port

成功连接后,显示空白

Telnet的命令使用方法及常见问题_馒头老爸的博客-CSDN博客_telnet

telnet 命令使用方法详解,telnet命令怎么用? - 云龙笔记 - 博客园

按下"ctrl+]",出现能够输入的界面。输入st可以看到是连接状态。

ctrl+],之后在按q ---退出telnet界面

curl -x ip Port

------------

扩展,区分大小写,X大写时,表示指定请求方式,不写默认为GET请求

curl -X POST URL

11.反向代理服务器  (负载平衡

负载平衡,用到这个东西

你的系统运行的程序,可以部署到多个服务器上,以缓解访问量大时的压力

   (OpenResty和Tengine基于 Nginx 的两个衍生版本。)

反向代理服务器_sun0322的博客-CSDN博客

12.session拷贝

 12.1.为什么要进行session拷贝

如果,第一次访问的服务A生成一个sessionid并且存入cookie中,
但是,第二次访问的是服务B,客户端会在cookie中读取sessionid加入到请求头中,
这时,如果在服务B通过sessionid没有找到对应的数据,就有问题了

// 当找不到数据时,服务器B,会创建一个新的并且将sessionid返回给客户端

// 这不是我们所期待的效果
所以,要进行session拷贝(也叫session的复制与共享)

-------------------------------------------

12.1.如何实现session拷贝

关键词(spring-session,redis)

通过Spring-Session创建的会话信息可以保存第三方的服务中,如:redis,mysql等。

Web服务器之间通过连接第三方服务来共享数据,实现Session共享!

----

13.HttpClient使用时,TimeOut时间

与外系统连接时,需要考虑的问题_sun0322的博客-CSDN博客

14.启动Web服务时,将一些情报设定到JVM中

Java中的System.getProperty()设置参数的方法_sun0322的博客-CSDN博客_system.getproperty()属性从哪添加的

15.扩展话题(noSQL)

・Elatic Search

・Redis、Memcached (存储数据,为了解决类似双十一,大量访问DB造成的问题,而提出的一种解决方案)

16.设计模式:单例模式

私有化构造方法(懒汉模式)

(缺点,初期化慢,
 而且初期化延迟时,如果没有synchronized关键字,有可能会造成线程不安全)

public class Single {private Single (){}private static Single single = null;public static synchronized Single getSingle(){if(single == null){return new Single ();}return single }
}

关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,
同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。

---

饥汉模式 (线程安全)

public class Singleton {private static Singleton instance = new Singleton();private Singleton (){}public static Singleton getInstance() {return instance;}
}

17.Spring 2.5之后,使用标注,管理类的声明周期(在Spring容器,IOC中的生命周期)

・singleton:容器中创建时只存在一个实例,所有引用此bean都是单一实例

・prototype:spring容器在进行输出prototype的bean对象时,会每次都重新生成一个新的对象给请求方

・request:web程序中应用

・session:web程序中应用

・global session:基于porlet的web应用程

18.栈内存,堆内存

栈内存:基本数据类型,对象地址的引用,局部变量,方法运行时方法的代码
堆内存:new 所创建出来的对象
        ・常量池 : public static final (JDK 1.7之后,String 常量池被移动到了堆内存中)
方法区:class文件的内容,即我们写的代码 
            (java程序运行时,通过类加载器,载入类对应的字节码信息,经过解析后,将其放入方法区。

类中的各种信息,包括方法都在这里存储。)

方法仅仅是一种逻辑片段而已(方法是看不见摸不着的,它仅仅是一种逻辑操作)
方法在不执行的时候不占用内存空间,只有在执行的时候才会占用内存空间

我们可以说,每个类实例出来的对象,拥有不同的属性(成员变量)

但是不能说,对象,拥有某个方法。

比如说,People这个对象,有age属性,eat()方法。

每个人都年龄是不同的,但是每个人,都可以进行吃这个动作。

年龄属于对象,而eat是人的一个属性,是类的一个逻辑片段。

当,每个人的,eat方法执行时,会分别栈区,开辟出一段内存空间,

用于执行这段代码,
----

19.代码检查工具(比CheckStyle更好)

SonarLint、SonarQube

  可以发现没有做非空判断的逻辑,

        不规范的代码「List<String> list = new ArrayList<String>();」// 黄色部分是不需的

危险的代码 「String PASSWORD="XXXX";」// 提示注意,这里面没有硬编码

        等待各种check提醒

20AES

高级加密标准(Advanced Encryption Standard),
是一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard 数据加密标准)。
DES使用56位密钥,比较容易被破解。
而AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据,相对来说安全很多。

// 我们有的时候对于代码中使用的密码,不但不能采用硬编码,还要对密码进行加密。这是可以考虑AES。

与外系统连接时,需要考虑的问题_sun0322的博客-CSDN博客

Java实现AES加密 - 霞光里 - 博客园

---

21.在服务器端设定参数

类似于下面的这种用法:

java -DatuhPasswd=mypwd01 HelloWord

在HelloWord中的下面代码执行时,便会输出「mypwd01」

System.getProperty(“authPasswd”)

Java中的System.getProperty()设置参数的方法_sun0322的博客-CSDN博客_system.getproperty()属性从哪添加的

22.让公网可以访问自己家电脑的服务

关键词:

・内网穿透

・NAT:Network Address Translation 网络地址转换

・NAPT:网络端口地址转换

     将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。 

・端口转发和端口映射

 ・natapp: 基于ngrok的反向代理软件(内网穿透工具)

・隧道:使用工具,建立隧道

实现:

通过工具,建立隧道,把本地192.168.1.101:8080 的端口映射成了公网的 XXX.XXX.XX.XX:XXXXX

23.IP地址的分类

在现在的网络中,IP地址分为公网IP地址和私有IP地址。
公网IP是在Internet使用的IP地址,而私有IP地址则是在局域网中使用的IP地址。
私有IP地址是一段保留的IP地址。只使用在局域网中,无法在Internet上使用。

私有IP的使用,不需要申请,可以直接使用

不同的网络,可以使用相同的私有IP地址。

----------

・A类地址保留给政府机构,一个A类地址由1字节的网络地址和3字节的主机地址组成,网络地址最高位必须是0,地址范围是1.0.0.1-127.255.255.254,但是127网段被作为环回地址使用,所以可用的A类网络只有126 个,每个网络能容纳 16777216 个主机。A类地址的私有地址为: 10.0.0.0~10.255.255.255,默认子网掩码为 255.0.0.0
・B类地址分配给中等规模的公司,一个B类IP地址由2字节的网络地址和2字节的主机地址组成,网络地址的最高位必须是10,地址范围是128.0.0.1-191.255.255.254,可用的B类网络有16384 个,每个网络能容纳 65534 个主机。B类地址的私有地址为: 172.16.0.0~172.31.255.255 ,默认子网掩码为 255.255.0.0
・ C类地址分配给任何需要的人,一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址、7的最高位必须是110.地址范围是192.0.0.1-223.255.255.254. C类网络可达 2097152 个,每个网络能容纳254个主机。C类地址的私有地址为:192.168.0.0~192.168.255.255,默认子网掩码为 255.255.255.0
・D类地址用于组播,第一个字节以1110开始,它是一个专门保留的地址,指向特定的网络,目前这一类地址被用在多点广播中。多点广播地址用来一次寻找一组计算机,它标识共享同一协议的一组计算机,地址范围是 224.0.0.1~239.255.255.254 
・E类地址用于实验,E类地址不分网络地址和主机地址,它的第1字节的前五位固定为11110,地址范围是240.0.0.1~255.255.255.254

---

ーーーーーーーーーーーーーーーー
私有地址有公网地址的转换
当私有网络内的主机要与位于公网上的主机进行通讯时必须经过地址转换,将其私有地址转换为合法公网地址才能对外访问。
NAT-Network Address Translation 网络地址转换
设局域网内部网络的地址是10.0.0.0网段,而对外的正式IP地址是202.196.3.23 。内部的主机10.1.1.48以www方式访问网外的服务器202.18.245.251。主机10.1.1.48发出一个数据报文,选择一个源端口6084,目的端口为80。
在通过代理服务器后,该报文的源地址和端口可能改为202.196.3.23:32814,
目的地址与端口不做改变。在代理服务器中维护着一张地址端口对应表。当外部网络的WWW服务器返回结果时,
代理服务器会将结果数据报文中的目的IP地址及端口转化为10.1.1.48:6084。这样,内部主机10.1.1.48就可以访问外部的服务器了。
ーーーーーーーーーーーーーーーー

23.1.扩展

2019年11 月 25 日,全球五大区域互联网注册管理机构之一的欧洲网络协调中心(RIPE NCC)宣布 IPv4 地址已全部用完,该机构负责欧洲、中东和部分中亚的 IP 地址分配和注册

-----

23.2.子网掩码的作用

子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 
・通过子网掩码,就可以判断两个IP在不在一个局域网内部。
・子网掩码可以看出有多少位是网络号,有多少位是主机号。

-----

23.3.网关

关(Gateway)又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连,
是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。
网关的结构也和路由器类似,不同的是互连层,网关既可以用于广域网互连,也可以用于局域网互连
网关实质上是一个网络通向其他网络的IP地址。
主机之间通信时,
会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。
而要实现这两个网络之间的通信,则必须通过网关。

-----

24.公钥,私钥,HTTPS,数字签名(数字证书)// 于SFDC无关,纯粹个人爱好,对应HTTPS证书了解一下  ★★★

公钥:用于加密(写信时,信件的内容),以达到保密的效果
私钥:用于解密(收到的信件的内容)
数字签名:(目的,确认回信者身份,是私钥的持有者)
・回信时,先,用Hash函数,生成想要传输的文件内容的摘要(digest)
・然后,使用私钥,对摘要(digest)进行加密,生成数字签名
・最后,把数字签名,和回信内容,一起回信。

如果证明:
得到回信后,使用公钥解密 数字签名,得到信息摘要(digest)
信息摘要内容,和自己生成的摘要相同(digest)

公钥与私钥,HTTPS详解_玩名堂_的博客-CSDN博客

-------------------------------- 以上相关知识总结 开始 --------------------------------

・对称加密与非对称加密
对称加密方法的加密与解密采用相同的密钥,因此任何人只要获得其中的密钥,就可以对密文进行解密。
而非对称加密方法有两个不同密钥,任意一个都可以成为加密密钥,
另外一个就是解密密钥,用一个密钥加密的密文必须用另一个密钥才可以解密。

・ 公钥与私钥
在非对称加密方法的两个密钥中,保管其中一个密钥,禁止泄漏他人,
除了密钥拥有者以外,任何人都不知道,此即私钥。另一个密钥则公之于众,
任何人都可以获得,此即公钥。
可知,用私钥加密的密文必须用公钥解密,
同理,公钥加密的内容,只有私钥才可以解密。

・ 数字签名
数字签名是基于非对称加密方法来实现的。
拥有私钥的一方使用私钥对某一份内容加密后发送给其他人(个体或群休),
因为任何人都可以拥有与该私钥对应的公钥,拥有公钥者使用公钥对接收到的密文进行解密,
如果能正确解密,则说明此份内容必然是拥有私钥的一方发出。
另一方面,如果拥有公钥的实体希望把一份内容发送给拥有私钥的一方而不希望其它任何人看到,
则可以利用该公钥加密此份内容。
因为只有私钥拥有者才可以将密文解密,所以能保证任何其他人无法查看其内容。

・  数字证书
数字证书是以数字签名的方式通过第三方权威认证机构有效地进行网上身份认证,
以帮助各个实体识别对方身份及表明自身身份的证书,具有防抵赖功能及真实、安全、保密和防篡改的特性。
在此,我们最主要的是需要知道数字证书是一个文件,
该文件保存了某个实体(个人、机构或设备等)的信息及该实体所拥有私钥对应的公钥。

・对称加密
算法公开(AES)
一个秘钥,秘钥不公开
加解密速度快

・非对称加密
算法公开(RSA)
两个秘钥,公钥公开,私钥不公开
公钥加密的数据,私钥可以解密。私钥加密的数据,公钥可以解密
加解密速度慢
(非对称加密算法除了可以直接将隐私数据加密外,还可以实现对非隐私数据的防篡改校验功能,也就是数字签名。)

・Hash/散列/摘要算法
以任意长度的数据为输入,输出固定长度的数字“指纹”。
MAC,消息认证码,是带秘钥的Hash算法,
即在对数据计算散列值时将秘钥和数据同时作为输入,并采用二次散列迭代的方式。

-------------------------------- 以上相关知识总结 结束 --------------------------------

25.HttpClient请求超时,重复提交

方法1:

DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000);
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 1000);
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));//重复提交,不设置,默认3次

方法2:

RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(1000).setConnectTimeout(1000).build();
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);

----------------------------

26.使用HttpClient时,设置代理之后,发生的异常

        DefaultHttpClient httpclient = new DefaultHttpClient();// 连接时间超时httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,50000);// 和读取数据超时httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,50000);// 设置代理HttpHost proxy = new HttpHost("myProxy.sxz.com",8080);httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);HttpGet httpGet = new HttpGet(LOGINURL);HttpResponse response = null;try {//httpGet.addHeader("Accept-Encoding", "gzip, deflate"); httpGet.addHeader("Accept-Charset", "utf-8");response = httpclient.execute(httpGet); } catch (final ClientProtocolException cpException) {} catch (final IOException ioException) {System.out.println(ioException.getMessage());ioException.printStackTrace();}

异常信息:「peer not authenticated」
异常类:Class SSLPeerUnverifiedException

java.lang.Object 
└java.lang.Throwable 
  └java.lang.Exception 
    └java.io.IOException 
      └javax.net.ssl.SSLException 
        └javax.net.ssl.SSLPeerUnverifiedException

----------------------------

(代码如果按照上面的方式写会出下面的异常,
     java.io.IOException
       └ java.net.UnknownHostException
   实际代码中使用的是有效的代理,但是出了SSLPeerUnverifiedException异常)

----------------------------

27.HTTPS 与 SSL/TLS 与 CA

・Https 超文本传输安全协议(Hypertext Transfer Protocol Secure),
1994年由网景公司提出,Https经由Http进行通信,但利用SSL/TLS来加密数据,
即在Http协议与TCP协议之间添加SSL/TLS层。

・SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全
・TLS(Transport Layer Security)是为网络通信提供安全及数据完整性的一种安全协议。
  ・TLS与SSL在传输层与应用层之间对网络连接进行加密。
  ・SSL/TLS是HTTPS安全性的核心模块,TLS的前身是SSL,
      ・TLS1.0 即 SSL3.1
      ・TLS1.1 即 SSL3.2
      ・TLS1.2 即 SSL3.3

・CA(产生和确定数字证书的第三方可信机构)
(Https证书格式遵循的是X.509标准。X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。)

■通信的流程如下图所示

-----------------------

----------------------------

28.查看JDK支持的SSL/TLS 版本

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;public class TestSSL {public static void main(String[] args) throws Exception {  SSLContext context = SSLContext.getInstance("TLS");  context.init(null, null, null);  SSLSocketFactory factory = (SSLSocketFactory) context.getSocketFactory();  SSLSocket socket = (SSLSocket) factory.createSocket();  String[] protocols = socket.getSupportedProtocols();  System.out.println("Supported Protocols: " + protocols.length);  for (int i = 0; i < protocols.length; i++) {  System.out.println(" " + protocols[i]);  }  protocols = socket.getEnabledProtocols();  System.out.println("Enabled Protocols: " + protocols.length);  for (int i = 0; i < protocols.length; i++) {  System.out.println(" " + protocols[i]);  }  }
}

Supported Protocols: 5
 SSLv2Hello
 SSLv3
 TLSv1
 TLSv1.1
 TLSv1.2
Enabled Protocols: 3
 TLSv1
 TLSv1.1
 TLSv1.2

--

29.查看查看CA证书的发布机构

CA(Certificate Authority)是证书的签发机构,它是负责管理和签发证书的第三方机构,是受到广泛信任的机构。

29.0.对于https的网站, 要在【服务器端】安装CA证书。

只有这样,在客户端像下面这样操作,才会取得服务端安装的证书的相关信息。

相关资料:  [服务器]SSL安装证书教程 - 炎峰森林影 - 博客园

29.1.点击浏览器,网址旁边的小锁头,会出现下面的对话框,点击查看证书

29.2.点击查看证书

 

29.3.得到CA证书的发布机构(可信任的第三方,下面链接中,有关于可信任的第三方的描述)

公钥与私钥,HTTPS详解_玩名堂_的博客-CSDN博客

------------------------------

30.查看JDK信任的CA机构

----------------------------

30.1.前言(相关知识)

Java虚拟机有自己的security manager。
jdk的security manager默认有一堆的根证书信任。
存放路径为:
/lib/security/cacerts
如果你的https站点证书是花钱申请的,
被这些根证书所信任,那使用java来访问此https站点会非常方便。
但是,如果你的https证书是自己签名的,
就需要将证书导入至JDK的信任证书中,否则访问时会报SSL错误。
导入时,使用keytool进行证书导入。

keystore的默认密码
“changeit”

------------------------

30.2.操作方法

进入到Jre的目录下,执行对应的命令

C:\Program Files\Java\jre1.8.0_191\lib\security>keytool -list  -keystore cacerts -storepass changeit

30.3.证书指纹

这个是用来保证证书的完整性的,也就是说确保证书没有被修改过。

是证书的摘要(散列函数)的X509证书的二进制格式。它可以计算出不同的算法,

如SHA1为Microsoft Internet Explorer,Netscape Navigator为MD5。

SSL证书原理讲解 - 2240930501 - 博客园

30.4.区别「网站提供的、数字签名」

可以理解为,证书指纹是,证书发行方提供的,证书的数字签名。

30.5.查看证书指纹

0b3319ac6d9ec15f08ab93172afef9e09069c79a

以上信息摘要(指纹)长度为40位,JRE中的指纹也是40位(16进制)

正好对应,120位二进制

30.6.和JDK进行匹配

对于SFDC的证书的,发布机构都是使用SHA2方式生成的 信息摘要(指纹),

但是java里面都是SHA1方式,对应的信息摘要(指纹)

以下文章介绍了,SHA1与SHA2的区别

(SHA-1和SHA-2算法有什么区别?_沃通WoTrus的博客-CSDN博客_sha1 sha2)

所以,使用信息摘要(指纹)情报 搜索时,并没有找到相应的信息摘要(指纹)情报。

keytool -list -keystore cacerts -storepass changeit | find "0b:33"

keytool -list -v -keystore cacerts -storepass changeit | find "0b:33"

↓Linux

keytool -list -keystore

cacerts -storepass changeit

keytool -list -v -keystore cacerts -storepass changeit | grep -e "XXX" -e "XXX"

// keystore的存储文件 "cacerts"

// keystore的默认密码“changeit”

keytool -list [OPTION]...列出密钥库中的条目选项:-rfc                            以 RFC 样式输出-alias <alias>                  要处理的条目的别名-keystore <keystore>            密钥库名称-storepass <arg>                密钥库口令-storetype <storetype>          密钥库类型-providername <providername>    提供方名称-providerclass <providerclass>  提供方类名-providerarg <arg>              提供方参数-providerpath <pathlist>        提供方类路径-v                              详细输出-protected                      通过受保护的机制的口令
别名: starfieldservicesrootg2ca [jdk]
创建日期: 2016-8-25
条目类型: trustedCertEntry所有者: CN=Starfield Services Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US
发布者: CN=Starfield Services Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US
序列号: 0
有效期为 Tue Sep 01 08:00:00 CST 2009 至 Fri Jan 01 07:59:59 CST 2038
证书指纹:MD5:  17:35:74:AF:7B:61:1C:EB:F4:F9:3C:E2:EE:40:F9:A2SHA1: 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3FSHA256: 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3扩展:#1: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[CA:truePathLen:2147483647
]#2: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [Key_CertSignCrl_Sign
]#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 9C 5F 00 DF AA 01 D7 30   2B 38 88 A2 B8 6D 4A 9C  ._.....0+8...mJ.
0010: F2 11 91 83                                        ....
]
]

------------------------------

31.JDK添加证书的信任机构

31.1.获取访问网址的证书.cer文件.
31.2.添加jdk信任证书
keytool -import -v -trustcacerts -alias 文件名 -file 文件名.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cace

加入JDK证书信任,C:\Program Files\Java\jre1.8.0_191\lib\security>目录下运行命令:keytool -import -alias cacert -keystore cacerts -file 盘:目录/证书文件.crtkeystore的默认密码“changeit”

jdk信任证书 - tooy - 博客园

验证HTTPS站点是否在JDK信任列表_Andy__Han的博客-CSDN博客

--------

32.HTTPS、TLS、SSL、HTTP区别和关系

详解 HTTPS、TLS、SSL、HTTP区别和关系_chan70707的博客-CSDN博客_https tls

HTTPS,也称作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
(HTTPS协议需要到证书颁发机构(Certificate Authority,简称CA))
(HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。)

---

■其它通信安全的相关知识

1.什么是:公钥,私钥,证书 ,以及 HTTPS,

公钥与私钥,HTTPS详解_玩名堂_的博客-CSDN博客

2.使用JDK创建证书   (并在 自己的 Web工程中 使用证书)

使用JDK中的 keytool【创建证书】・【查看】・【使用】_sun0322的博客-CSDN博客_keytool查看证书

3.网络通信相关知识(整理在SFDC相关的资料中)

外部系统连接SFDC,获取SFDC侧的数据_sun0322的博客-CSDN博客_sfdc系统

4.证明书安装(no trusted certificate found 时,需要用安装证明书的方式,来通过认证)

HttpClient 使用时,出现「no trusted certificate found」的原因 (JDK没有安装相应的证明书)_sun0322的博客-CSDN博客

Keytool –import –keystore im.jks –file certificate.cer
// certificate.cer 是要访问https网站的证明书// 安装后,证明书信息,已被添加到List中
keytool -list  -keystore cacerts -storepass changeit

5.客户端证书     (和【 https 网站 的 CA证书】, 分别是 两个 证书。)

【客户端证书  (SSL証明書(個人証明書))】是 用于证明客户端用户身份的数字证书
网站如何设置,让访问者,必须在客户端浏览器安装证书后,才能访问网站。

这个一般在服务器端设置:
比如下面链接中介绍的

如何要求客户端出示“客户端证书”后,才能访问网站 - 张天利 - 博客园

---

6.在浏览器中查看  客户端证书・信任的证书

(Edge) ⇒【設定】 ⇒【プライバシー、検索、サービス 】⇒ 【セキュリティ】 ⇒ 証明書の管理

(Edge) ⇒设置 ⇒  隐私,搜索服务 ⇒ 安全性 ⇒ 管理证书

---

7.ssh,scp,sftp等命令无密码使用(通过公钥,私钥实现)

ssh-keygen(linux 命令) 创建 private key(私钥) , public key (公钥),实现ssh,scp,sftp命令无密码连接_sun0322的博客-CSDN博客

---

外部系统连接SFDC,获取SFDC侧的数据相关推荐

  1. linux系统是如何获取网卡的通信数据的

    步骤 网卡硬件接收数据:当网络数据包到达网卡时,硬件设备会对数据包进行处理,然后将其存储在内部缓冲区中. 网卡的驱动程序处理数据包:网卡对应的驱动程序将数据包从硬件缓冲区中取出,并将其传递给内核的网络 ...

  2. 跨平台获取外部系统的数据解析成json并传输到前台展示成列表

    最近在做项目的过程中,做过这样一个功能,通过soap协议跨平台获取外部系统文件柜的信息,并将所需要的字段解析出来传输至前台页面上展示成列表的形式.说实话,做了这么多的soap协议项目,做过编写PC服务 ...

  3. python3连接mysql获取ansible动态inventory脚本

    Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚 ...

  4. 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。...

    开讲前,先说下网上,大部分的关于这方面的博文或者其他什么的,就我自己的感觉,第一说得不详细,第二语言不能很好的被初学者了解. 我这篇博文的标题之所以用了三句,是为了方便其他人好查找: 这里介绍的方法有 ...

  5. 计算机不能辨别汉字wifi,Win10系统连接不上被隐藏的中文Wifi的解决方法

    Window10正式版系统 添加了不少新功能,给用户带来了不错的体验.不过,win10系统也有一些不足的地方,比如用户反馈自己的电脑总是无法连接隐身的中文Wifi,这该怎么办呢?接下来,小编就为大家分 ...

  6. linux网线连接树莓派,3、树莓派使用网线连接路由器获取网络的讲解

    3.树莓派使用网线连接路由器获取网络 文章目录 3.树莓派使用网线连接路由器获取网络 2.4通电 2.5 使用VNC启动操作系统 如果有管理员密码,可以通过路由器的管理员密码查看树莓派ip 使用路由器 ...

  7. windows linux—unix 跨平台通信集成控制系统----系统硬件信息获取

    控制集成系统需要了解系统的各项硬件信息,之前我们设计的时候,习惯使用c函数来搞,后来可能发现程序的移植性收到了一些影响,比如unix内核的一些c函数在linux下面是没有的: 比如 苹果达尔文内核的如 ...

  8. android 获取蓝牙设备id_安卓蓝牙系统中如何获取蓝牙音乐的音频跟踪会话ID

    原标题:安卓蓝牙系统中如何获取蓝牙音乐的音频跟踪会话ID 蓝牙音乐AudioTrack Session ID的获取 当今这个音视频无处不在的时代,音频跟踪会话ID(AudioTrack Session ...

  9. tableau无法建立连接_外部服务连接疑难解答 - Tableau

    本主题描述 Tableau 连接到外部分析扩展程序服务时可能会收到的错误. 注意:Tableau 技术支持人员无法协助编写.调整外部脚本或排除其问题. 与任何分析扩展程序通信时可能会发生的错误 错误消 ...

最新文章

  1. 【原】创建Hive表,分号分隔符“;”引起的异常
  2. openstack——使用命令行删除租户所有信息
  3. OpenCV加载Caffe框架模型
  4. 基于Struts2的文件上传
  5. gitter 卸载_最佳Gitter渠道:游戏开发人员
  6. JavaScript获取图片的原始尺寸
  7. PowerDesigner(七)-数据库的生成和修改
  8. php httputils,Android 自定义网络加载工具类 HttpURLConnectionUtils
  9. Gauss-Jordan法求逆矩阵
  10. matlab拟合函数求系数,matlab 求拟合函数的系数
  11. java snakeyaml_java – 使用SnakeYAML的嵌套构造
  12. 计算机常用的内存是rom,手机内存和电脑内存是一样的吗?智能硬件常用的ROM和RAM详解...
  13. 二层交换机,三层交换机及四层交换机的区别
  14. Spring Festival
  15. 前端知识学习——html
  16. 活动运营中如何准确把握用户心理
  17. 【ubuntu】开机进入initramfs,无法开机
  18. 使用tesseract训练自己的字库提高识别率
  19. 《Semi-Supervised Semantic Segmentation with Cross-Consistency Training》 2020CVPR 论文阅读
  20. Unity录音并且保存文件(去掉录音无效片段)

热门文章

  1. Pycharm--flake8的配置使用
  2. Oracle 高级复制 (同步复制) 配置步骤详细说明
  3. c语言程序sin近似值,C语言编程求正弦 sin(x) 的近似值
  4. 解决Clock skew detected
  5. 爬取创造与魔法游戏的 食谱大全
  6. linux卸载webmin及其配置,Webmin控制面板安装与配置教程
  7. python 主线程 等待 子线程 知乎_[Python] 知乎多线程爬虫
  8. python:消息推送 - 飞书机器人推送
  9. 扩展欧几里得算法( 数学问题 + 扩展欧几里得算法 + 裴蜀定理 )
  10. win7命名计算机无法下一步,MacBookAir装win7无法下一步解决办法 (2)