云自無(wú)心水自閑

          天平山上白云泉,云自無(wú)心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          先給一個(gè)例子:
          $http. get('/remote/item' ). then(function(response) {
          console.log('成功。');
          }, function(errResponse) {
          console. error('出錯(cuò).' );
          });

          一。介紹Promise
          在這個(gè)例子中,$http.get()函數(shù)返回了一個(gè)Promise對(duì)象, 有了這個(gè)對(duì)象,我們才能很方便地直接在后面添加then函數(shù)的定義。
          Promise對(duì)象在AngularJS中是一個(gè)非常重要的存在。它提供了強(qiáng)大的功能和便利性。

          1。異步性
          從定義的語(yǔ)法上看,操作似乎是同步的,但是Promise的工作其實(shí)是異步的,只有在服務(wù)端返回?cái)?shù)據(jù)后,后續(xù)的函數(shù)才會(huì)被調(diào)用。這是一個(gè)事件驅(qū)動(dòng),非阻塞式的框架。

          2。它避免了其它框架的嵌套回調(diào)函數(shù)的缺點(diǎn)。
          -所有異步任務(wù)都會(huì)返回一個(gè)Promise對(duì)象
          -每個(gè)Promise對(duì)象都有一個(gè)then函數(shù),then函數(shù)有兩個(gè)參數(shù),分別是成功處理函數(shù)和失敗處理函數(shù)
          -失敗處理函數(shù)和成功處理函數(shù)都只會(huì)在異步處理完成后被調(diào)用一次
          -then函數(shù)也會(huì)返回Promise對(duì)象,這樣,我們可以把多個(gè)函數(shù)串連起來(lái)成為一個(gè)函數(shù)鏈
          -成功處理函數(shù)和失敗處理函數(shù)的返回值可以被傳遞到函數(shù)鏈下一個(gè)的函數(shù)中
          -如果在成功(或者失敗)處理函數(shù)中,又開(kāi)始了一個(gè)異步調(diào)用,那么函數(shù)鏈中的函數(shù)將會(huì)在這個(gè)異步調(diào)用結(jié)束后才開(kāi)始

          二。異步鏈?zhǔn)秸{(diào)用的后續(xù)處理
          假如我們定義了如下的函數(shù)鏈:
          $http.get('/item').then(s1, e1).then(s2, e2).then(s3, e3);
          我們?nèi)绾巫灾鞯母鶕?jù)函數(shù)鏈中每個(gè)函數(shù)的運(yùn)行結(jié)果,決定觸發(fā)后續(xù)函數(shù)的成功處理函數(shù)或者失敗處理函數(shù)呢?
          比如說(shuō),在s1處理過(guò)程中,發(fā)生問(wèn)題,于是我們觸發(fā)了e2, 但是在e2處理完后,我們又想觸發(fā)s3.
          AnguarJS提供了$q來(lái)滿足這樣的需求。
          如果我們想觸發(fā)函數(shù)鏈中下一個(gè)函數(shù)的成功處理,我們只需要最后給出一個(gè)返回值,有了返回值,AngularJS會(huì)認(rèn)為函數(shù)執(zhí)行正確,自動(dòng)調(diào)用下一個(gè)函數(shù)中的成功處理
          如果想觸發(fā)失敗處理,那么可以簡(jiǎn)單地返回$q.reject(data),這樣就會(huì)觸發(fā)下一個(gè)函數(shù)的失敗處理

          posted @ 2015-02-27 18:39 云自無(wú)心水自閑 閱讀(2628) | 評(píng)論 (1)編輯 收藏



          在前文(http://www.aygfsteel.com/usherlight/archive/2015/02/01/422633.html)中我們?cè)?jīng)介紹過(guò),定義controller時(shí),需要2個(gè)參數(shù),第一個(gè)參數(shù)是controller的名稱,第二個(gè)參數(shù)是一個(gè)數(shù)組,數(shù)組的最后一個(gè)元素將是controller的函數(shù),前面的參數(shù)是controller的依賴項(xiàng)。我們現(xiàn)在就來(lái)仔細(xì)分析一下其中的具體過(guò)程。

          先給一個(gè)例子:
          angular. module('notesApp' , [])
           . controller('MainCtrl' , ['$log' , function($log) {
           var self = this;
           self. logStuff = function() {
           $log. log('The button was pressed' );
           };
           }])

          在這個(gè)例子中可以看到,我們?cè)诘谝粋€(gè)參數(shù)中用字符串(服務(wù)名稱)添加了一個(gè)依賴項(xiàng)。當(dāng)我們通過(guò)字符串聲明了這一個(gè)服務(wù)之后,我們就可以把它當(dāng)作一個(gè)變量注入到函數(shù)中。AngularJS會(huì)自動(dòng)查找字符串名稱對(duì)應(yīng)的服務(wù)名,按照順序?qū)⑵渥⑷氲胶瘮?shù)中。
          myModule.controller("MainCtrl",  ["$log", "$window", function($l, $w) {}]);
          在這個(gè)例子中,$log, $windows是AngularJS自帶的兩個(gè)服務(wù),在數(shù)組中通過(guò)名稱聲明后,會(huì)被注入到函數(shù)的兩個(gè)參數(shù)中。
          比較常用的AngularJS自帶的服務(wù)有:$window, $location, $http等

          從上面的例子中可以看出,AngularJS的設(shè)計(jì)思想就是不要在函數(shù)中自己去實(shí)例化或者通過(guò)其它途徑來(lái)獲取服務(wù)的實(shí)例,而是聲明需要的對(duì)象,由AngularJS來(lái)注入具體的實(shí)例。

          創(chuàng)建自己的服務(wù)
          什么時(shí)候應(yīng)該創(chuàng)建服務(wù),而不是controller呢?
          1。 需要重用的時(shí)候
          2。需要保留應(yīng)用級(jí)的狀態(tài)。這是非常重要的一點(diǎn),controller是會(huì)不斷地被創(chuàng)建和銷毀的,如果需要保存應(yīng)用級(jí)的狀態(tài),就需要使用service
          3。和頁(yè)面顯示無(wú)關(guān)
          4。需要和第三方服務(wù)整合
          5。緩存

          服務(wù)是會(huì)被延遲加載的,也就是說(shuō)只有在第一次被引用的時(shí)候,才會(huì)被創(chuàng)建。
          服務(wù)將會(huì)被定義一次,也只會(huì)被實(shí)例化一次。

          posted @ 2015-02-09 19:28 云自無(wú)心水自閑 閱讀(7287) | 評(píng)論 (0)編輯 收藏

               摘要: 默認(rèn)情況下,每隔一秒種,SpringLoaded就會(huì)掃描類路徑,自動(dòng)加載改變過(guò)的類, 而不需要重新啟動(dòng)應(yīng)用  閱讀全文

          posted @ 2015-02-07 09:16 云自無(wú)心水自閑 閱讀(11119) | 評(píng)論 (4)編輯 收藏

          07. ng-repeart
          a. 在循環(huán)map的時(shí)候,會(huì)自動(dòng)根據(jù)鍵值進(jìn)行排序。
          b. 一些自帶的變量,$first(是否是第一個(gè)), $last(是否是最后一個(gè)), $middle(是否是中間的), $index(下標(biāo),根據(jù)鍵值排序后的下標(biāo)), $even, $odd
          08. 自己定義新變量時(shí)不要使用$$開(kāi)頭。
          09. 可以使用track-by表達(dá)式來(lái)優(yōu)化對(duì)DOM的操作,對(duì)DOM對(duì)象使用從數(shù)據(jù)庫(kù)取得的ID來(lái)進(jìn)行標(biāo)記,這樣的話,當(dāng)我們重復(fù)多次從數(shù)據(jù)庫(kù)中取出相同的數(shù)據(jù)的時(shí)候,DOM對(duì)象就能夠被重用。
          10. 數(shù)據(jù)雙向綁定的好處
          a. 如果我們想改變頁(yè)面Form中的數(shù)值,我們不需要在Javascript中,根據(jù)ID或者名稱來(lái)查找相應(yīng)的Form控件,只需要改變Controller變量的值,不需要JQuery的Selector,也不需要findElementByID
          b. 如果我們想在javascript中獲取Form控件的值,在控件的變量中就能直接獲得。
          11. 使用ng-submit比在button上使用ng-click要好一些。HTML的表單的提交有多種方式,比如在輸入域中按回車鍵就會(huì)觸發(fā)ng-submit,而不會(huì)觸發(fā)button的ng-click事件。
          12. 在ng-model中,可以直接引用一個(gè)對(duì)象,比如:<input type="text" ng-model="ctrl.user.name">,而不需要事先在model中以self.user={}定義。在AngularJS中,使用了ng-model的話,AngularJS在初始化數(shù)據(jù)綁定的時(shí)候,自動(dòng)創(chuàng)建其中的對(duì)象和鍵值。在剛才的例子中,一旦用戶開(kāi)始在輸入域中鍵入第一個(gè)字母,用戶user就會(huì)被自動(dòng)創(chuàng)建。
          13. 推薦使用將相關(guān)數(shù)據(jù)集中到一個(gè)對(duì)象的方式來(lái)進(jìn)行數(shù)據(jù)綁定,比如,用戶名和密碼,推薦使用:
          <input type="text" ng-model="ctrl.user.name">
          <input type="text" ng-model="ctrl.user.password">
          而不是:
          <input type="text" ng-model="ctrl.name">
          <input type="text" ng-model="ctrl.password">

          posted @ 2015-02-03 19:36 云自無(wú)心水自閑 閱讀(2643) | 評(píng)論 (1)編輯 收藏

          1. AngularJS的module函數(shù)有兩種用法,
          a. 定義一個(gè)module, 需要傳入2個(gè)參數(shù),module('moduleName', []), 第一個(gè)參數(shù)是新的module名稱,第二個(gè)參數(shù)是新module所依賴的module數(shù)組。
          b. 載入一個(gè)module, 只需要1個(gè)參數(shù),module('moduleName'), 唯一的一個(gè)參數(shù)指定要載入的module名稱。
          2. 使用controller函數(shù)來(lái)定義一個(gè)控制器(controller), 用ng-controller將控制器綁定到具體的HTML組件上。定義控制器的controller函數(shù)也需要2個(gè)參數(shù),第一個(gè)是控制器名稱,第二個(gè)參數(shù)同樣也是一個(gè)數(shù)組,數(shù)組的最后一個(gè)元素就是controller本身的函數(shù),前面的元素用字符串的形式指定其需要的依賴項(xiàng)。如果沒(méi)有依賴項(xiàng),那就只需要定義函數(shù)。比如:
          angular.module('app1', [])
          .controller('mainControl', [function() {
          console.log('controller created.');
          }]);
          3. 在controller函數(shù)中用var定義的局部變量,在HTML中是不可見(jiàn)的。
          4. 推薦在controller函數(shù)中盡量避免直接引用this, 比較好的做法是使用代理。原因是一個(gè)函數(shù)中的this關(guān)鍵詞在被外部調(diào)用的時(shí)候,是會(huì)被覆蓋掉的。這樣的話,在函數(shù)內(nèi)部和外部的this會(huì)是完全不同兩個(gè)對(duì)象。
          代理用法示例:
          angular.module('app1', [])
          .controller('mainControl', [function() {
          var self = this;
          self.message = 'Hello world';
          self.changeMessage = function() {
          self.message = 'Goodbye.';
          };
          }]);
          5. ng-bind與雙大括號(hào)的區(qū)別, ng-bind和{{}}可以說(shuō)基本上是可以互相替換的,但是也有區(qū)別。區(qū)別在于:AngularJS在啟動(dòng)的時(shí)候就會(huì)執(zhí)行ng-bind, 而{{}}的替換時(shí)間會(huì)稍晚一些。有可能發(fā)現(xiàn)頁(yè)面在加載的時(shí)候,雙括號(hào)被一閃而過(guò)地替換掉(只在頁(yè)面初次加載的時(shí)候發(fā)生)。但是ng-bind就沒(méi)有這個(gè)問(wèn)題。
          6. ng-cloak可以用于解決雙括號(hào)閃現(xiàn)的問(wèn)題。

          posted @ 2015-02-01 19:19 云自無(wú)心水自閑 閱讀(5033) | 評(píng)論 (1)編輯 收藏

          1. HTML頁(yè)面的加載,這會(huì)觸發(fā)加載頁(yè)面包含的所有JS (包括 AngularJS)
          2. AngularJS啟動(dòng),搜尋所有的指令(directive)
          3. 找到ng-app,搜尋其指定的模塊(Module),并將其附加到ng-app所在的組件上。
          4. AnguarJS遍歷所有的子組件,查找指令和bind命令
          5. 每次發(fā)現(xiàn)ng-controller或者ng-repeart的時(shí)候,它會(huì)創(chuàng)建一個(gè)作用域(scope),這個(gè)作用域就是組件的上下文。作用域指明了每個(gè)DOM組件對(duì)函數(shù)、變量的訪問(wèn)權(quán)。
          6. AngularJS然后會(huì)添加對(duì)變量的監(jiān)聽(tīng)器,并監(jiān)控每個(gè)變量的當(dāng)前值。一旦值發(fā)生變化,AngularJS會(huì)更新其在頁(yè)面上的顯示。
          7. AngularJS優(yōu)化了檢查變量的算法,它只會(huì)在某些特殊的事件觸發(fā)時(shí),才會(huì)去檢查數(shù)據(jù)的更新,而不是簡(jiǎn)單地在后臺(tái)不停地輪詢。

          posted @ 2015-01-31 20:36 云自無(wú)心水自閑 閱讀(4783) | 評(píng)論 (2)編輯 收藏

          Java虛擬機(jī)規(guī)范規(guī)定JVM的內(nèi)存分為了好幾塊,比如堆,棧,程序計(jì)數(shù)器,方法區(qū)等,而Hotspot jvm的實(shí)現(xiàn)中,將堆內(nèi)存分為了三部分,新生代,老年代,持久帶,其中持久帶實(shí)現(xiàn)了規(guī)范中規(guī)定的方法區(qū),而內(nèi)存模型中不同的部分都會(huì)出現(xiàn)相應(yīng)的OOM錯(cuò)誤,接下來(lái)我們就分開(kāi)來(lái)討論一下。 

          棧溢出(StackOverflowError) 

          棧溢出拋出java.lang.StackOverflowError錯(cuò)誤,出現(xiàn)此種情況是因?yàn)榉椒ㄟ\(yùn)行的時(shí)候棧的深度超過(guò)了虛擬機(jī)容許的最大深度所致。 

          出現(xiàn)這種情況,一般情況下是程序錯(cuò)誤所致的,比如寫(xiě)了一個(gè)死遞歸,就有可能造成此種情況。 下面我們通過(guò)一段代碼來(lái)模擬一下此種情況的內(nèi)存溢出。 
          Java代碼 
          1. import java.util.*;  
          2. import java.lang.*;  
          3. public class OOMTest{  
          4.    
          5.   public void stackOverFlowMethod(){  
          6.       stackOverFlowMethod();  
          7.   }  
          8.    
          9.   public static void main(String... args){  
          10.       OOMTest oom = new OOMTest();  
          11.       oom.stackOverFlowMethod();  
          12.   }  
          13.    
          14. }  

          運(yùn)行上面的代碼,會(huì)拋出如下的異常: 
          引用

          Exception in thread "main" java.lang.StackOverflowError 
                  at OOMTest.stackOverFlowMethod(OOMTest.java:6) 

          堆溢出(OutOfMemoryError:java heap space) 

          堆內(nèi)存溢出的時(shí)候,虛擬機(jī)會(huì)拋出java.lang.OutOfMemoryError:java heap space,出現(xiàn)此種情況的時(shí)候,我們需要根據(jù)內(nèi)存溢出的時(shí)候產(chǎn)生的dump文件來(lái)具體分析(需要增加-XX:+HeapDumpOnOutOfMemoryErrorjvm啟動(dòng)參數(shù))。出現(xiàn)此種問(wèn)題的時(shí)候有可能是內(nèi)存泄露,也有可能是內(nèi)存溢出了。 
          如果內(nèi)存泄露,我們要找出泄露的對(duì)象是怎么被GC ROOT引用起來(lái),然后通過(guò)引用鏈來(lái)具體分析泄露的原因。 
          如果出現(xiàn)了內(nèi)存溢出問(wèn)題,這往往是程序本生需要的內(nèi)存大于了我們給虛擬機(jī)配置的內(nèi)存,這種情況下,我們可以采用調(diào)大-Xmx來(lái)解決這種問(wèn)題。 

          下面我們通過(guò)如下的代碼來(lái)演示一下此種情況的溢出: 
          Java代碼 
          1. import java.util.*;  
          2. import java.lang.*;  
          3. public class OOMTest{  
          4.    
          5.         public static void main(String... args){  
          6.                 List<byte[]> buffer = new ArrayList<byte[]>();  
          7.                 buffer.add(new byte[10*1024*1024]);  
          8.         }  
          9.    
          10. }  

          我們通過(guò)如下的命令運(yùn)行上面的代碼: 

          Java代碼 
          1. java -verbose:gc -Xmn10M -Xms20M -Xmx20M -XX:+PrintGC OOMTest  


          程序輸入如下的信息: 
          引用

          [GC 1180K->366K(19456K), 0.0037311 secs] 
          [Full GC 366K->330K(19456K), 0.0098740 secs] 
          [Full GC 330K->292K(19456K), 0.0090244 secs] 
          Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
                  at OOMTest.main(OOMTest.java:7) 

          從運(yùn)行結(jié)果可以看出,JVM進(jìn)行了一次Minor gc和兩次的Major gc,從Major gc的輸出可以看出,gc以后old區(qū)使用率為134K,而字節(jié)數(shù)組為10M,加起來(lái)大于了old generation的空間,所以拋出了異常,如果調(diào)整-Xms21M,-Xmx21M,那么就不會(huì)觸發(fā)gc操作也不會(huì)出現(xiàn)異常了。 

          通過(guò)上面的實(shí)驗(yàn)其實(shí)也從側(cè)面驗(yàn)證了一個(gè)結(jié)論:當(dāng)對(duì)象大于新生代剩余內(nèi)存的時(shí)候,將直接放入老年代,當(dāng)老年代剩余內(nèi)存還是無(wú)法放下的時(shí)候,出發(fā)垃圾收集,收集后還是不能放下就會(huì)拋出內(nèi)存溢出異常了 

          持久帶溢出(OutOfMemoryError: PermGen space) 

          我們知道Hotspot jvm通過(guò)持久帶實(shí)現(xiàn)了Java虛擬機(jī)規(guī)范中的方法區(qū),而運(yùn)行時(shí)的常量池就是保存在方法區(qū)中的,因此持久帶溢出有可能是運(yùn)行時(shí)常量池溢出,也有可能是方法區(qū)中保存的class對(duì)象沒(méi)有被及時(shí)回收掉或者class信息占用的內(nèi)存超過(guò)了我們配置。當(dāng)持久帶溢出的時(shí)候拋出java.lang.OutOfMemoryError: PermGen space。 
          我在工作可能在如下幾種場(chǎng)景下出現(xiàn)此問(wèn)題。 

          1.使用一些應(yīng)用服務(wù)器的熱部署的時(shí)候,我們就會(huì)遇到熱部署幾次以后發(fā)現(xiàn)內(nèi)存溢出了,這種情況就是因?yàn)槊看螣岵渴鸬暮螅瓉?lái)的class沒(méi)有被卸載掉。 
          2.如果應(yīng)用程序本身比較大,涉及的類庫(kù)比較多,但是我們分配給持久帶的內(nèi)存(通過(guò)-XX:PermSize和-XX:MaxPermSize來(lái)設(shè)置)比較小的時(shí)候也可能出現(xiàn)此種問(wèn)題。 
          3.一些第三方框架,比如spring,hibernate都通過(guò)字節(jié)碼生成技術(shù)(比如CGLib)來(lái)實(shí)現(xiàn)一些增強(qiáng)的功能,這種情況可能需要更大的方法區(qū)來(lái)存儲(chǔ)動(dòng)態(tài)生成的Class文件。 
          我們知道Java中字符串常量是放在常量池中的,String.intern()這個(gè)方法運(yùn)行的時(shí)候,會(huì)檢查常量池中是否存和本字符串相等的對(duì)象,如果存在直接返回對(duì)常量池中對(duì)象的引用,不存在的話,先把此字符串加入常量池,然后再返回字符串的引用。那么我們就可以通過(guò)String.intern方法來(lái)模擬一下運(yùn)行時(shí)常量區(qū)的溢出.下面我們通過(guò)如下的代碼來(lái)模擬此種情況: 
          Java代碼 
          1. import java.util.*;  
          2. import java.lang.*;  
          3. public class OOMTest{  
          4.    
          5.         public static void main(String... args){  
          6.                 List<String> list = new ArrayList<String>();  
          7.                 while(true){  
          8.                         list.add(UUID.randomUUID().toString().intern());  
          9.                 }  
          10.         }  
          11.    
          12. }  

          我們通過(guò)如下的命令運(yùn)行上面代碼: 
          java -verbose:gc -Xmn5M -Xms10M -Xmx10M -XX:MaxPermSize=1M -XX:+PrintGC OOMTest 
          運(yùn)行后的輸入如下圖所示: 
          引用

          Exception in thread "main" java.lang.OutOfMemoryError: PermGen space 
                  at java.lang.String.intern(Native Method) 
                  at OOMTest.main(OOMTest.java:8) 

          通過(guò)上面的代碼,我們成功模擬了運(yùn)行時(shí)常量池溢出的情況,從輸出中的PermGen space可以看出確實(shí)是持久帶發(fā)生了溢出,這也驗(yàn)證了,我們前面說(shuō)的Hotspot jvm通過(guò)持久帶來(lái)實(shí)現(xiàn)方法區(qū)的說(shuō)法。 

          OutOfMemoryError:unable to create native thread 

          最后我們?cè)趤?lái)看看java.lang.OutOfMemoryError:unable to create natvie thread這種錯(cuò)誤。 出現(xiàn)這種情況的時(shí)候,一般是下面兩種情況導(dǎo)致的: 

          1.程序創(chuàng)建的線程數(shù)超過(guò)了操作系統(tǒng)的限制。對(duì)于Linux系統(tǒng),我們可以通過(guò)ulimit -u來(lái)查看此限制。 
          給虛擬機(jī)分配的內(nèi)存過(guò)大,導(dǎo)致創(chuàng)建線程的時(shí)候需要的native內(nèi)存太少。我們都知道操作系統(tǒng)對(duì)每個(gè)進(jìn)程的內(nèi)存是有限制的,我們啟動(dòng)Jvm,相當(dāng)于啟動(dòng)了一個(gè)進(jìn)程,假如我們一個(gè)進(jìn)程占用了4G的內(nèi)存,那么通過(guò)下面的公式計(jì)算出來(lái)的剩余內(nèi)存就是建立線程棧的時(shí)候可以用的內(nèi)存。 線程棧總可用內(nèi)存=4G-(-Xmx的值)- (-XX:MaxPermSize的值)- 程序計(jì)數(shù)器占用的內(nèi)存 通過(guò)上面的公式我們可以看出,-Xmx 和 MaxPermSize的值越大,那么留給線程棧可用的空間就越小,在-Xss參數(shù)配置的棧容量不變的情況下,可以創(chuàng)建的線程數(shù)也就越小。因此如果是因?yàn)檫@種情況導(dǎo)致的unable to create native thread,那么要么我們?cè)龃筮M(jìn)程所占用的總內(nèi)存,或者減少-Xmx或者-Xss來(lái)達(dá)到創(chuàng)建更多線程的目的。

          posted @ 2015-01-20 07:12 云自無(wú)心水自閑 閱讀(873) | 評(píng)論 (0)編輯 收藏

          現(xiàn)在的顯示屏都在飚像素,商家的宣傳一個(gè)比一個(gè)噱頭大,什么 Retina、4K、8K 這種名詞一個(gè)接一個(gè)的出來(lái), 這些到底都是啥意思?
           
          首先,Retina 和 4K 以及 8K 并不是同一層面的定義。屏幕一般是以像素點(diǎn)做單位的,4K 和 8K 就是直接限定了像素點(diǎn)的多少,而 Retina 則是沒(méi)有硬性的規(guī)范。

          Retina 屏幕的概念最早由蘋(píng)果公司執(zhí)行長(zhǎng)史蒂夫·喬布斯(Steve Jobs)于 WWDC2010 發(fā)布 iPhone 4 時(shí)提出的。

            定義是:要求在正常觀看距離下,足以使人肉眼無(wú)法分辨其中的單獨(dú)像素。因此它并沒(méi)有限定像素值多少。

          4K 就是水平方向每一行的像素值達(dá)到或是接近 1024 的 4 倍,8K 就是達(dá)到或接近 8 倍。

            以此為標(biāo)準(zhǔn),4K 一般圖像就是指 4096*2160 的分辨率。當(dāng)然,這也不是硬性要求,像市場(chǎng)上很多 4K 屏幕其實(shí)是 3840*2160 或是 3656*2664,這些都是 4K 圖像分辨率的范疇。

            8K 就是分辨率在 7680*4320 左右。

          順便說(shuō)一下,720p 則是指豎直方向的像素點(diǎn)達(dá)到 720 個(gè),1080p 則是 1080 個(gè),“P”是逐行掃描的意思

          問(wèn):那到底 Retina 和 4K 或是 Retina 和 8K 哪個(gè)更清楚呢?

            答:不一定,二者不能平行比較。

            因?yàn)?4K 和 8K 是限定了像素點(diǎn)的多少,而 Retina 是要求正常距離看不到像素點(diǎn)。

            舉個(gè)例子:如果放到正常的 42 寸屏幕上,4K 和 8K 在正常距離觀看下都看不到像素點(diǎn),那么兩者都可以被稱作“Retina 屏幕”。

                可是如果給你一臺(tái) 500 寸的巨大屏幕,那么即便是 8K 也會(huì)到處是馬賽克,這時(shí) Retina 觀感依然是高清無(wú)像素點(diǎn),必然比 8K 和 4K 清楚的多。

          posted @ 2015-01-15 07:17 云自無(wú)心水自閑 閱讀(652) | 評(píng)論 (0)編輯 收藏


          Last_SQL_Error: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'test'. Query: 'DELETE FROM table1 WHERE id = 361'
          1 row in set (0.00 sec)

          solution:
          restart slave;

          stop slave;
          start slave;

          posted @ 2015-01-13 08:01 云自無(wú)心水自閑 閱讀(596) | 評(píng)論 (0)編輯 收藏

          1. server.xml
          在<engine>中添加
          <Realm className="org.apache.catalina.realm.MemoryRealm" />
          2. tomcat-user.xml
          <role rolename="manager"/>   
          <role rolename="manager-gui"/>

          <user username="admin" password="tomcat" roles="manager"/>

          posted @ 2015-01-09 09:32 云自無(wú)心水自閑 閱讀(668) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共29頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 8 9 下一頁(yè) Last 
          主站蜘蛛池模板: 藁城市| 宁蒗| 新民市| 吕梁市| 无棣县| 卓资县| 塔河县| 英超| 来凤县| 镇原县| 唐海县| 平邑县| 石首市| 巨野县| 栖霞市| 鸡西市| 绥棱县| 普洱| 宜兰县| 沙雅县| 江北区| 延津县| 平湖市| 静海县| 平乐县| 洪湖市| 根河市| 内黄县| 庆城县| 赣榆县| 蓬安县| 贡山| 惠安县| 吉首市| 延长县| 吴江市| 利辛县| 成武县| 肥城市| 南安市| 潜山县|