一、DNS協定
作用将域名解析為IP 類似于我們隻需要知道中央一台,中央二台,而不需要知道它的頻率,友善記憶。
java dns 域名解析協定實作
1 域名解析,将域名可轉換為ip位址
InetAddress也可以通過使用getAddress()來獲得IP位址,但是它的傳回值是一個4個位元組的數組。
是以盡管getAddress()在獲得IP方面是有用的,但卻不适于用來輸出。
package dns;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Enumeration;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;
public class NsLookup {
public static void main(String[] args){
InetAddress address=null;
try {
address = InetAddress.getByName(args[0]);
} catch (UnknownHostException e) {
e.printStackTrace();
}
System.out.println(args[0]+": "+address.getHostAddress()); //args[0]是執行程式時寫的參數,
InetAddress localhost=null;
try {
localhost = InetAddress.getLocalHost(); //本地位址
} catch (UnknownHostException e) {
e.printStackTrace();
}
System.out.println("localhost:ip address "+localhost.getHostAddress());
System.out.println("localhost:主機名: "+localhost.getHostName());
/* * 在開始使用RS232端口通訊之前,我們想知道系統有哪些端口是可用的,以下代碼列出系統中所有可用的RS232端口
*/
CommPortIdentifier portId;
Enumeration en = CommPortIdentifier.getPortIdentifiers();
while (en.hasMoreElements()) {
portId = (CommPortIdentifier) en.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
System.out.println(portId.getName());
}
}
}
}
執行時指令行參數如果輸入:www.sina.com
執行結果如下:
www.sina.com: 121.194.0.209
localhost:ip address 59.64.158.214
localhost:主機名: bupt
COM1
COM2
還有一個域名可能對應不止一個ip位址,一下程式時列舉出sina域名下的所有ip
package dns;
import java.net.InetAddress;
import java.net.UnknownHostException;
//有時一個域名會包含不止一個IP位址,比如微軟的Web伺服器,這是為了保持負載平衡。
//InetAddress提供了一種可以得到一個域名的所有IP位址的方法
public class NsLookup2 {
static public void main(String[] args) {
try {
String name = args[0];
InetAddress[] addresses = InetAddress.getAllByName(name);
for (int i = 0; i < addresses.length; i++) {
System.out.println(name + "[" + i + "]: "+ addresses[i].getHostAddress());
}
} catch (UnknownHostException uhe) {
System.err.println("Unable to find: " + args[0]);
} } }
執行結果: www.sina.com[0]: 121.194.0.208
www.sina.com[1]: 121.194.0.209
www.sina.com[2]: 121.194.0.210
www.sina.com[3]: 121.194.0.203
www.sina.com[4]: 121.194.0.205
www.sina.com[5]: 121.194.0.206
二、TCP/IP協定
IP 是用來查找位址,對應網際互連層,
IP 負責計算機之間的通信。
IP 負責在網際網路上發送和接收資料包。
TCP用來規範傳輸規則的對應傳輸層。tcp/ip隻是一套規則,并不能具體工作,就像程式中的接口,socket是這套協定的具體實作。
TCP 用于從應用程式到網絡的資料傳輸控制。
TCP 負責在資料傳送之前将它們分割為 IP 包,然後在它們到達的時候将它們重組。
三、HTTP協定
http是應用層的協定,tcp/ip接受到資料之後通過htp協定來解析。
HTTP 負責 web 伺服器與 web 浏覽器之間的通信。
HTTP 用于從 web 用戶端(浏覽器)向 web 伺服器發送請求,并從 web 伺服器向 web 用戶端傳回内容(網頁)。
http協定中的封包結構很重要。
1:request message 首行,頭部和主體 首行包括請求類型(get,head,post,put,delete),urL 和http版本
2:response 首行包括狀态行,狀态碼(1XX, 2xx成功狀态嗎,3xx重定向狀态嗎,4xx:用戶端狀态嗎,為請求到資源,5xx伺服器端錯誤碼,500内部錯誤),簡短原因,http版本
四、servlet
是j2ee标準的一部分,是java web 開發的标準,
servlet 是對接收到的資料進行處理并生成結果。
五、SMTP - 簡易郵件傳輸協定(Simple Mail Transfer Protocol)
SMTP 用于電子郵件的傳輸。
六、IMAP - 網際網路消息通路協定(Internet Message Access Protocol)
IMAP 用于存儲和取回電子郵件。
七、FTP - 檔案傳輸協定(File Transfer Protocol)
FTP 負責計算機之間的檔案傳輸。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
開發中常使用緩存中間件:redis、memcahed、ehcache;
* 緩存:其實就是記憶體中的一塊空間.可以使用緩存将資料源中的資料拿到,存入到記憶體中.後期獲得資料的話 從緩存中進行獲得.
* 常見歡送有以下幾種
1.EHCache :是Hibernate常使用的二級緩存的插件.
參考https://elim.iteye.com/blog/2123030
a、引入依賴
<!-- Spring Boot 緩存支援啟動器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- Ehcache 坐标 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
b、開啟基于注解的緩存 @EnableCaching

c、建立Ehcache的配置檔案
檔案名:ehcache.xml
位置:src/main/resources/ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="java.io.tmpdir" />
<!--defaultCache:echcache 的預設緩存政策 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap" />
</defaultCache>
<!-- 自定義緩存政策 -->
<cache name="users"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap" />
</cache>
</ehcache>
d、建立application.properties檔案(mysql與springDateJpa相關配置)
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo01?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.cache.ehcache.config=ehcache.xml
MySql在高版本需要指明是否進行SSL連接配接,這裡因為自己的資料庫安裝的是mysql8.0是以需要加上這個東西,如果用的是mysql5點幾版本的朋友可以自行忽略…
SSL協定,目前版本為3.1(SSL3.1就是TLS1.0)。它已被廣泛地用于Web浏覽器與伺服器之間的身份認證和加密資料傳輸.它位于TCP/IP協定與各種應用層協定之間,為資料通訊提供安全支援
package com.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.App;
import com.entity.Users;
import com.service.UsersService;
/**
* UsersService測試
*
* @author Administrator
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
public class UsersServiceTest {
@Autowired
private UsersService usersService;
@Test
public void addUser() {
Users users=new Users();
users.setId(1);
users.setAddress("蘇站路");
users.setAge(18);
users.setName("張三");
usersService.saveUsers(users);
System.out.println("執行完畢");
}
@Test
public void testFindUserById() {
//第一次查詢
System.out.println(this.usersService.findUserById(1));
//第二次查詢
System.out.println(this.usersService.findUserById(1));
}
}
測試結果
第二次測試‘’
這裡我們将之前在 UserServiceImpl裡面的 @Cacheable(value = “users”)取消注釋
再次啟動項目測試
第三次測試
修改UsersServiceImpl裡面findUserByPage的方法指定為pageable.pageSize,預設的是pageable
修改測試類
新增方法testFindUserByPage
@Test
public void testFindUserByPage() {
Pageable pageable = new PageRequest(0, 2);
// 第一次查詢
System.out.println(this.usersService.findUserByPage(pageable).getTotalElements());
// 第二次查詢
System.out.println(this.usersService.findUserByPage(pageable).getTotalElements());
測試結果
第四次測試(清除緩存:@CacheEvict)
首先在UsersServiceTest中添加測試方法testFindAll,代碼如下
@Test
public void testFindAll() {
//第一次查詢
System.out.println(this.usersService.findUserAll().size());
//添加使用者
Users users = new Users();
users.setId(4);
users.setAddress("蘇站路");
users.setAge(18);
users.setName("張三4");
usersService.saveUsers(users);
//第二次查詢
System.out.println(this.usersService.findUserAll().size());
}
測試結果一:
由于緩存機制的存在,是以資料庫的元素改變了,但是我們用的卻還是之前緩存的内容,很顯然這不合适。如何解決呢,我們修改UsersServiceImpl,在saveUsers上面填上注解@CacheEvict(value=“users”,allEntries=true)
@Override
//@CacheEvict(value="users",allEntries=true) 清除緩存中以users緩存政策緩存的對象
@CacheEvict(value="users",allEntries=true)
public void saveUsers(Users users) {
this.usersRepository.save(users);
}
再次測試,結果如下:
2.Memcache :
3.Redis :
轉載于:https://www.cnblogs.com/h-c-g/p/11083834.html