Java基礎零散技術(筆記)

1.http 301 302

均是重定向,301是永久重定向,302臨時重定向

301,302 都是HTTP狀態的編碼,都代表着某個URL發生了轉移,不同之處在於:

301 redirect: 301 代表永久性轉移(Permanently Moved)。

302 redirect: 302 代表暫時性轉移(Temporarily Moved )。

對用戶來說沒有區別

對於引擎及站長

302轉向可能會有URL規範化及網址劫持的問題。可能被搜索引擎判爲可疑轉向,甚至認爲是作弊。

問題就在於,有的時候搜索引擎,尤其是Google,並不能總是抓取目標網址。爲什麼呢?比如說,有的時候A網址很短,但是它做了一個302重定向到B網址,而B網址是一個很長的亂七八糟的URL網址,甚至還有可能包含一些問號之類的參數。很自然的,A網址更加用戶友好,而B網址既難看,又不用戶友好。這時Google很有可能會仍然顯示網址A。

https://blog.csdn.net/liaozhongping/article/details/48543161

2.tcp 粘包             

TCP粘包是指發送方發送的若干包數據到接收方接收時粘成一包,從接收緩衝區看,後一包數據的頭緊接着前一包數據的尾。

粘包主要是發送端,接收端,跟緩衝區剩餘空間大小之間發生的。

TCP默認會使用Nagle算法。而Nagle算法主要做兩件事:1)只有上一個分組得到確認,纔會發送下一個分組;2)收集多個小分組,在一個確認到來時一起發送。

發送方發生粘包,則我們可以通過關閉Nagle算法來解決,使用TCP_NODELAY選項來關閉Nagle算法。

接收方發生粘包(加入緩衝區大於緩衝區取出),則需要應用層進行處理,發送數據時數據長度一併發送過來(跟之前彈幕二進制內容傳輸一下,數據的頭部記錄數據的長度)。

更多解釋https://www.cnblogs.com/qiaoconglovelife/p/5733247.html

3. 8種跨域支持

圖片ping或者script標籤、jsonP、CORS、window.name+iframe、window.postMessage()、修改document.domain跨子域、WebSocket、代理(服務器端處理)

我們還發現凡是擁有"src"這個屬性的標籤都擁有跨域的能力,比如<script>、<img>、<iframe>

優缺點使用等介紹:https://blog.csdn.net/ligang2585116/article/details/73072868

服務器端配置支持跨域:

cors方式,Spring boot更多采用這種方式,filter攔截配置(全局)

後來 HTML5 支持了 CORS 協議。CORS 是一個 W3C 標準,全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源服務器,發出 XMLHttpRequest 請求,從而克服了 AJAX 只能同源使用的限制。它通過服務器增加一個特殊的 Header[Access-Control-Allow-Origin]來告訴客戶端跨域的限制,如果瀏覽器支持 CORS、並且判斷 Origin 通過的話,就會允許 XMLHttpRequest 發起跨域請求。

mvc框架是spring4.2以上的話,一個@CrossOrigin就可以搞定

將@CrossOrigin加到Controller,整個Controller都支持跨域,加到具體方法上,則僅該方法支持

全局配置,也需要spring4.2以上。

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
            }
        };
    }

.addCorsMappings()中的參數代表支持跨域的url,.allowedOrigins()中的參數代表可以訪問該接口的域名,設置爲”*”可支持所有域。

還有一種是web.xml配置,單獨引入jar包。

參考https://www.cnblogs.com/zrui-xyu/p/8981442.html

自動支持JSONP

SpringMVC 4.0以上@ControllerAdvice 
@ControllerAdvice
public class JsonpSupportAdvice extends AbstractJsonpResponseBodyAdvice {
    public JsonpSupportAdvice() {
        //參數包含callback的時候 使用jsonp的反饋形式
        super("callback");
    }
}
只需要上面幾行代碼,springmvc就會爲我們所有的json類型的請求提供jsonp數據的支持,只需要在請求的時候攜帶callback參數,springmv就會返回jsonp類型數據,如果沒有callback參數,springmv會返回正常的json數據。控制器的原有方法不做任何修改,也無需添加任何配置,輕鬆支持jsonp請求。

更多https://blog.csdn.net/f529352479/article/details/51909095#

nginx配置支持

4、Spring的基礎知識

https://mp.weixin.qq.com/s?__biz=MzIwMTY0NDU3Nw==&mid=2651938436&idx=2&sn=2465bb0d7569a0c81b9b169c6e7590b0&chksm=8d0f31caba78b8dcb68610bb8203d6ec750c4cef8880c3d39c26eba595a234688d9022e0bf6c&scene=21#wechat_redirect

5、Java的強、軟、弱、虛引用

強:平常的new Object,常會發生的OOM,OutOfMemoryError錯誤就是內存不夠

軟:有個算法決定是否GC回收,Java的反射就是利用了軟引用,所以參數需要設定好,防止發生頻繁Full GC。軟引用可以和一個引用隊列(ReferenceQueue)聯合使用

clock - timestamp <= freespace * SoftRefLRUPolicyMSPerMB 

弱:GC回收時,如果僅有弱引用,不管內存是否足夠,都會進行回收。弱引用非常適合存儲元數據,例如:存儲ClassLoader引用,如果ClassLoader可達,則獲取數據,如果不可達則直接被回收。弱引用可以和一個引用隊列(ReferenceQueue)聯合使用

虛:虛引用並不會決定對象的生命週期。如果一個對象僅持有虛引用,那麼它就和沒有任何引用一樣,對象不可達時就會被垃圾回收器回收,但是任何時候都無法通過虛引用獲得對象。虛引用主要用來跟蹤對象被垃圾回收器回收的活動,一般可以通過虛引用達到回收一些非java內的一些資源比如堆外內存的行爲。例如:在DirectByteBuffer中

虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用隊列(ReferenceQueue)聯合使用。當垃圾回收器準備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,把這個虛引用加入到與之關聯的引用隊列中。

http://blogxin.cn/2017/09/16/java-reference/

6.Spring boot自動配置,以及加載啓動

更多詳細見:https://mp.weixin.qq.com/s/0d8x0CiPb9izVbfBzQ172g

更多詳細信息:https://www.cnblogs.com/shamo89/p/8184960.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章