日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 经典语录_JavaSpring过时的经典语录

發(fā)布時(shí)間:2024/9/27 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 经典语录_JavaSpring过时的经典语录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字符串拼接:請(qǐng)用StringBuffer代替String直接相加提高性能

過去的理論

有沒有人告訴過你開發(fā)中不要

String newString = "牛郎"+"織女";

而是要根據(jù)是否線程安全采用

String newString = new StringBuffer("牛郎").append("織女").toString();

或者

String?newString =?new?StringBuilder("牛郎").append("織女").toString();

因?yàn)槭褂眠^程中會(huì)創(chuàng)建多個(gè)字符串對(duì)象,而String內(nèi)部是一個(gè)固定長(zhǎng)度的字符串?dāng)?shù)組,所以采用這種方法會(huì)浪費(fèi)內(nèi)存。

更新的理論

在jdk8之前,+拼接底層使用的是concat做字符串拼接就是說:

String newString = "牛郎"+"織女";

等價(jià)于

String newString = "牛郎".concat("織女");

String#concat底層將要拼接的字符串以數(shù)組的形式復(fù)制到一個(gè)新數(shù)組中,空間開銷確實(shí)大。但是jdk8對(duì)+的拼接底層做了優(yōu)化:

編譯期會(huì)把所有的可以final的字符串合成一個(gè)字符串。原理就和一般人會(huì)用

final long dayInMillisecond = 24*3600*1000;

來代替直接將后面的值計(jì)算出來,因?yàn)檫@樣更直觀,執(zhí)行期效率是一樣的。

而對(duì)于需要?jiǎng)討B(tài)拼接的,會(huì)內(nèi)部轉(zhuǎn)成StringBuilder處理。所以對(duì)于動(dòng)態(tài)字符串一般來說效果是一樣的,對(duì)于靜態(tài)效率反而高些。

但是凡事都有特例,也有jdk處理不夠智能的地方。但是根據(jù)java的走勢(shì)來說,符合:簡(jiǎn)單即正義。長(zhǎng)遠(yuǎn)來說,越簡(jiǎn)單的寫法越是jdk優(yōu)化的重點(diǎn),效率還會(huì)有提升的空間。

其他的用法

除了一般的字符串拼接,有時(shí)候還需要將列表等一些集合用符號(hào)(比如,)連接起來,java8以上提供了StringJoiner來完成這件事。比如list拼接:

Lists.newArrayList("迢迢牽牛星",

"皎皎河漢女")

.stream().collect(Collectors.joining(","));

底層用的就是StringJoiner。

如果使用google的guava的話,這種情況還有更簡(jiǎn)單的寫法:

Joiner.on(",").join(Lists.newArrayList("迢迢牽牛星","皎皎河漢女"));

它底層用的是StringBuilder和StringJoiner底層是一樣的。

面試簡(jiǎn)述SpringMVC的工作原理

過去的理論

記得2015年前面試必備的一道題,面試者需要像小時(shí)候背《詠鵝》一樣倒背如流:SpringMVC的工作原理。經(jīng)典回答是這樣:

SpringMVC 框架是以請(qǐng)求為驅(qū)動(dòng),圍繞 Servlet 設(shè)計(jì),將請(qǐng)求發(fā)給控制器,然后通過模型對(duì)象,分派器來展示請(qǐng)求結(jié)果視圖。

更新的理論

早在Spring3里就封裝好了RESTful風(fēng)格開發(fā)方式,開發(fā)者只需要將請(qǐng)求的Controller替換成RestController或者方法上加上@ResponseBody即可。

目前在前后端分離的場(chǎng)景下,經(jīng)典的SpringMVC中請(qǐng)求流程基本不全用上。

Spring提供了兩種方法將資源的Java表述形式轉(zhuǎn)換為發(fā)送給客戶端的表述形式:內(nèi)容協(xié)商和消息轉(zhuǎn)換器。

內(nèi)容協(xié)商就是經(jīng)典的方法,當(dāng)控制器的處理方法完成時(shí),返回一個(gè)邏輯視圖。內(nèi)容協(xié)商是一個(gè)特殊的視圖解釋器。

消息轉(zhuǎn)換提供了一種更為直接的方式,DispatcherServlet不再需要那么麻煩地將模型數(shù)據(jù)傳送到視圖中。只是控制器產(chǎn)生數(shù)據(jù)給消息轉(zhuǎn)換器后就直接返回給客戶端了。

使用HttpClient還是OkHttp來做http請(qǐng)求

過去的理論

有沒有人告訴過你使用OkHttp來代替HttpClient更簡(jiǎn)潔高效。OkHttp使用build模式創(chuàng)建對(duì)象,而且在發(fā)送異步請(qǐng)求的時(shí)候不需要引入其他的依賴。

更新的理論

在基于Spring的JAVA服務(wù)端開發(fā)中一般會(huì)使用各種框架幫我們?nèi)ネ瓿筛鞣N單調(diào)重復(fù)的工作,比如不管是HttpClient還是OkHttp都需要將返回的reponse自己用編解碼工作轉(zhuǎn)成對(duì)象再處理。但是如果使用feign則可以省去。

com.netflix.feign

feign-core

8.18.0

com.netflix.feign

feign-jackson

8.18.0

com.netflix.feign

feign-okhttp

8.18.0

我們需要?jiǎng)?chuàng)建一個(gè)bean來指定url和處理超時(shí)重試、

日志打印等高可用方面的問題。

@Bean

public TestHttpService testHttpService() {

TestHttpService service = Feign.builder()

.encoder(new JacksonEncoder())

.decoder(new JacksonDecoder())

.options(new Request.Options(1000, 3500))

.retryer(new Retryer.Default(5000, 5000, 3))

.logger(logger)

.logLevel(Logger.Level.FULL)

.target(TestHttpService.class, testUrl);

return service;

}

Spring的簡(jiǎn)化開發(fā)主要是使用了聲明式代替命令式,

在http請(qǐng)求這里當(dāng)然也可以這么用:

public interface?TestHttpService {

@RequestLine("GET /xxxx?appkey={appkey}&ips={ip}&username={username}&operator={operator}")

Response getTest(@Param(value = "appkey") String appkey,

@Param(value = "ip") String ip,

@Param(value = "username") String username,

@Param(value = "operator") String operator);

}

運(yùn)行一下,發(fā)現(xiàn)執(zhí)行過程這么清晰:

[TestHttpService] ---> GET http://xxx/x?appkey=x&ips=x&username=x&operator=x HTTP/1.1

[TestHttpService] ---> END HTTP (0-byte body)

[TestHttpService]

[TestHttpService] connection: keep-alive

[TestHttpService] content-length: 28

[TestHttpService] content-type: application/json;charset=utf-8

[TestHttpService] date: Sun, 29 Mar 2020 02:19:43 GMT

[TestHttpService] m-traceid: -264385071732215405

[TestHttpService] server: openresty

[TestHttpService] version: oceanus

[TestHttpService]

[TestHttpService] {"data":[],"isSuccess":true}

[TestHttpService]

其他的用法

早在Spring3里就已經(jīng)使用了模板方法來簡(jiǎn)化http請(qǐng)求的開發(fā),使用RestTemplate不僅可以使用java8的lambda表達(dá)式,還可使用消息轉(zhuǎn)換器直接將返回值轉(zhuǎn)成對(duì)象的形式,更友好的實(shí)現(xiàn)了面向?qū)ο缶幊獭.?dāng)然feign更簡(jiǎn)潔,并且提供了高可用的支持。

總結(jié)

以上是生活随笔為你收集整理的java 经典语录_JavaSpring过时的经典语录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。