首頁

Spring 5 新特性:函數(shù)式Web框架

藍(lán)藍(lán)設(shè)計(jì)的小編

舉例

我們先從示例應(yīng)用程序的一些摘錄開始。下面是暴露Person對象的響應(yīng)信息庫。很類似于傳統(tǒng)的,非響應(yīng)信息庫,只不過它返回Flux<Person>而傳統(tǒng)的返回List<Person>,以及返回Mono<Person>的地方返回Person。Mono<Void>用作完成標(biāo)識:指出何時(shí)保存被完成。關(guān)于Reactor類型的更多信息,請參閱

public interface PersonRepository { Mono<Person> getPerson(int id); Flux<Person> allPeople(); Mono<Void> savePerson(Mono<Person> person);
}

下面是我們?nèi)绾伪┞稁в行碌暮瘮?shù)式web框架的資源庫:

RouterFunction<?> route = route(GET("/person/{id}"),
    request -> {
        Mono<Person> person = Mono.justOrEmpty(request.pathVariable("id"))
            .map(Integer::valueOf)
            .then(repository::getPerson); return Response.ok().body(fromPublisher(person, Person.class));
    })
    .and(route(GET("/person"),
        request -> {
            Flux<Person> people = repository.allPeople(); return Response.ok().body(fromPublisher(people, Person.class));
    }))
    .and(route(POST("/person"),
    request -> {
        Mono<Person> person = request.body(toMono(Person.class)); return Response.ok().build(repository.savePerson(person));
}));

下面我們要介紹如何運(yùn)行,比如在Reactor Netty中:

詳解 javascript 的類

藍(lán)藍(lán)設(shè)計(jì)的小編

前言

生活有度,人生添壽。

Javascript從當(dāng)初的一個“彈窗語言”,一步步發(fā)展成為現(xiàn)在前后端通吃的龐然大物。javascript的受歡迎程度也是與日俱增,今年編程語言又是花落javascript,這實(shí)在是一個充滿了活力的語言。如今,隨隨便一個網(wǎng)頁javascript代碼量都不下數(shù)千行,要是node后端那更不止幾千行了。(WTF)代碼量的增加給編程帶來的首要的問題就是如何去編寫和維護(hù)如此龐大的代碼呢?答案就是模塊化思想,其實(shí)就是面向?qū)ο螅∣OP)編程,如今比較流行的三大前端框架(angular,react,vue)基本都實(shí)現(xiàn)了組件化編程,但組件化和我們所說的模塊化又有所不同,應(yīng)該可以這么理解,組件化是模塊化的升級版,模塊化是組件化的基礎(chǔ)。那么,問題來了,javascript怎么面向?qū)ο缶幊棠??我想這很多老鳥也不定說的清楚吧,前端雜而活躍的各種社區(qū),很多前端er一度依賴各種插件,根本不需要去了解這些深層的東西卻照樣能完成任務(wù)。但我想作為一個有追求的前端er還是很有必要去學(xué)習(xí)這些看似用不著的東西的,別的不說,就單單因?yàn)槲覀兪乔岸薳r,只會用jquery一個稍微厲害的后端都能代替你。好吧,廢話不多說,到底如何面向?qū)ο骳oding呢…..

很不幸,es5中并沒有給出明確的定義‘類’的概念,所以傳統(tǒng)的面向?qū)ο缶幊趟坪跏切胁煌ǖ?,那么又該腫么辦呢?值得慶幸的是,前輩們通過不斷探索總結(jié),成功的用javascript模擬出了“類”。那么,javascript的類又該怎么定義呢?

在面向?qū)ο缶幊讨?,類(class)是對象(object)的模板,定義了同一組對象(又稱”實(shí)例”)共有的屬性和方法。

深入了解font-weight

藍(lán)藍(lán)設(shè)計(jì)的小編

1.jpg

問題提出

font-weight的屬性值有100、200、300、400、500、600、700、800、900和normal、bold、lighter、bolder,它們的區(qū)別是?
另外,在實(shí)際開發(fā)中,我們應(yīng)該使用數(shù)值表達(dá)還是文字表達(dá)呢?

認(rèn)識font-weight

根據(jù)W3C Fonts節(jié)章的規(guī)范標(biāo)準(zhǔn),可知:

一起理解Virtual DOM

藍(lán)藍(lán)設(shè)計(jì)的小編

前言

React 好像已經(jīng)火了很久很久,以致于我們對于 Virtual DOM 這個詞都已經(jīng)很熟悉了,網(wǎng)上也有非常多的介紹 React、Virtual DOM 的文章。但是直到前不久我專門花時(shí)間去學(xué)習(xí) Virtual DOM,才讓我對 Virtual DOM 有了一定的理解,以致于要懷疑起很久之前看過的那些文章來。倒不是這些文章講得不對,而是現(xiàn)在在我看來角度不太好,說得越多,越說不清。

讓我能夠有所開竅(自認(rèn)為)的,是這篇文章:


Change And Its Detection In JavaScript Frameworks
Monday Mar 2, 2015 by Tero Parviainen


作者看問題的角度很棒,從數(shù)據(jù)變更與UI同步的角度來介紹各個典型框架,特別是對于 React 的 Virtual DOM,從這個角度理解起來更容易些。

了解并使用CSS中的rem單位

藍(lán)藍(lán)設(shè)計(jì)的小編

什么是 rem

可能在你使用收音機(jī)或者用其他音樂播放器之前,就已經(jīng)聽過“R.E.M.”這個詞了。在這個樂隊(duì)眼中,這個詞是“淺睡眠時(shí)眼球的快速轉(zhuǎn)動”的縮寫,而在 css 中,rem 代表著“以根元素為參照物的 em 單位“。他不會讓你拋棄你的宗教信仰也不會讓你相信那個遠(yuǎn)在月球的人,但是它可以幫助你實(shí)現(xiàn)一個和諧、平穩(wěn)的設(shè)計(jì)。

根據(jù) W3C 規(guī)范中對 1rem 的定義:

1rem 與等于根元素 font-size 的計(jì)算值。當(dāng)明確規(guī)定根元素的 font-size 時(shí),rem 單位以該屬性的初始值作參照。

Web服務(wù)器、應(yīng)用程序服務(wù)器、HTTP服務(wù)器區(qū)別

藍(lán)藍(lán)設(shè)計(jì)的小編

WEB服務(wù)器、應(yīng)用程序服務(wù)器、HTTP服務(wù)器有何區(qū)別?IIS、Apache、Tomcat、Weblogic、WebSphere 都各屬于哪種服務(wù)器?這些問題困惑了很久,今天終于梳理清楚了:

Web服務(wù)器的基本功能就是提供Web信息瀏覽服務(wù)。它只需支持HTTP協(xié)議、HTML文檔格式及URL。與客戶端的網(wǎng)絡(luò)瀏覽器配合。因?yàn)閃eb服務(wù)器主要支持的協(xié)議就是HTTP,所以通常情況下HTTP服務(wù)器和WEB服務(wù)器是相等的(有沒有支持除HTTP之外的協(xié)議的web服務(wù)器,作者沒有考證過),說的是一回事。

應(yīng)用程序服務(wù)器(簡稱應(yīng)用服務(wù)器),我們先看一下微軟對它的定義:”我們把應(yīng)用程序服務(wù)器定義為“作為服務(wù)器執(zhí)行共享業(yè)務(wù)應(yīng)用程序的底層的系統(tǒng)軟件”。 就像文件服務(wù)器為很多用戶提供文件一樣,應(yīng)用程序服務(wù)器讓多個用戶可以同時(shí)使用應(yīng)用程序(通常是客戶創(chuàng)建的應(yīng)用程序)”

通俗的講,Web服務(wù)器傳送(serves)頁面使瀏覽器可以瀏覽,然而應(yīng)用程序服務(wù)器提供的是客戶端應(yīng)用程序可以調(diào)用(call)的方法(methods)。確切一點(diǎn),你可以說:Web服務(wù)器專門處理HTTP請求(request),但是應(yīng)用程序服務(wù)器是通過很多協(xié)議來為應(yīng)用程序提供(serves)商業(yè)邏輯 (business logic)。

JavaScript 中對象的深拷貝

藍(lán)藍(lán)設(shè)計(jì)的小編

在JavaScript中,對對象進(jìn)行拷貝的場景比較常見。但是簡單的復(fù)制語句只能對對象進(jìn)行淺拷貝,即復(fù)制的是一份引用,而不是它所引用的對象。而更多的時(shí)候,我們希望對對象進(jìn)行深拷貝,避免原始對象被無意修改。

對象的深拷貝與淺拷貝的區(qū)別如下:

  • 淺拷貝:僅僅復(fù)制對象的引用,而不是對象本身;
  • 深拷貝:把復(fù)制的對象所引用的全部對象都復(fù)制一遍。

一. 淺拷貝的實(shí)現(xiàn)

淺拷貝的實(shí)現(xiàn)方法比較簡單,只要使用是簡單的復(fù)制語句即可。

1.1 方法一:簡單的復(fù)制語句

/* ================ 淺拷貝 ================ */ function simpleClone(initalObj) { var obj = {}; for ( var i in initalObj) {
        obj[i] = initalObj[i];
    } return obj;
}

JavaScript世界萬物誕生記

藍(lán)藍(lán)設(shè)計(jì)的小編

一. 無中生有

起初,什么都沒有。

1.png

 

造物主說:沒有東西本身也是一種東西啊,于是就有了null:

現(xiàn)在我們要造點(diǎn)兒東西出來。但是沒有原料怎么辦?

有一個聲音說:不是有null嘛?

另一個聲音說:可是null代表無啊。

造物主說:那就無中生有吧!

于是:

2.png

更快學(xué)習(xí)JS的6個簡單思維技巧

藍(lán)藍(lán)設(shè)計(jì)的小編

當(dāng)人們嘗試學(xué)習(xí) JavaScript , 或者其他編程技術(shù)的時(shí)候,常常會遇到同樣的挑戰(zhàn):

  • 有些概念容易混淆,特別是當(dāng)你學(xué)習(xí)過其他語言的時(shí)候。
  • 很難找到學(xué)習(xí)的時(shí)間(有時(shí)候是動力)。
  • 一旦當(dāng)你理解了一些東西的時(shí)候,卻很容易再一次忘記。
  • 可以使用的工具甚多且經(jīng)常變化,所以不知道從哪里開始入手。

幸運(yùn)的是,這些挑戰(zhàn)最終都可以被戰(zhàn)勝。在這篇文章里,我將介紹 6 個思維技巧來幫你更快的學(xué)習(xí) JavaScript ,讓你成為一個更快樂更多產(chǎn)的程序員。

對于很多學(xué)習(xí) JavaScript 的人來說,他們問的第一個問題是選用哪個框架(現(xiàn)有框架非常多)。但是如果你還不熟悉原生的 JavaScript ,那這就是個不該問的問題。你會花費(fèi)你全部的時(shí)間去查詢不同的框架并且不會取得任何進(jìn)展。

詳解JS 變量、作用域及內(nèi)存

藍(lán)藍(lán)設(shè)計(jì)的小編

基本類型值有:undefined,NUll,Boolean,Number和String,這些類型分別在內(nèi)存中占有固定的大小空間,他們的值保存在??臻g,我們通過按值來訪問的。

 

1)值類型:數(shù)值、布爾值、null、undefined。
2)引用類型:對象、數(shù)組、函數(shù)。
 
如果賦值的是引用類型的值,則必須在堆內(nèi)存中為這個值分配空間。由于這種值的大小不固定(對象有很多屬性和方法),因此不能把他們保存到棧內(nèi)存中。但內(nèi)存地址大小是固定的,因此可以將內(nèi)存地址保存在棧內(nèi)存中。
 
<script type="text/javascript”>
var box = new Object();  //創(chuàng)建一個引用類型
var box = "trigkit4";   //基本類型值是字符串
box.age = 21;    //基本類型值添加屬性很怪異,因?yàn)橹挥袑ο蟛趴梢蕴砑訉傩浴?/span>
alert(box.age);  //不是引用類型,無法輸出;
</script>
 

日歷

鏈接

個人資料

存檔