jls演算法
❶ jdk 7.0比jdk6.0有什麼改進
JDK7.0和JDK6.0有什麼區別?jdk7是模塊化程序,模塊間的依賴性變小了.jdk的好多功能間有相互依賴性,導致一個配置不對,好多不能用.舉例來說:假設你正使用LoggingAPI(java.util.logging)),Logging需要NIO和JMX,JMX需要JavaBeans,JNDI,RMI和CORBA,JNDI需要java.applet.Applet而且JavaBeans依賴AWT.JDK7新特性:JSR203:JDK中會的IOAPI(「NIO.2」)訪問文件系統與之前的JDK中通過java.io.File訪問文件的方式不同,JDK7將通過java.nio.file包中的類完成。JDK7會使用java.nio.file.Path類來操作任何文件系統中的文件。(這里說的任何文件系統指的是可以使用任何文件存儲方式的文件系統)示例:Java7之前Filefile=newFile(「some_file」);使用Java7Pathpath=Paths.get(「some_file」);在File類中加入了新的方法toPath(),可以方便的轉換File到PathPathpath=newFile(「some_file」).toPath();Socket通道綁定和配置在JDK7中面向通道的網路編程也得以更新!JDK7中可以直接綁定通道的socket和直接操作socket屬性。JDK7提供了平台socket屬性和指定實現的socket屬性。JDK7加入了一個新的位元組通道類,是面向網路通道編程模塊中的又一個新的超介面。利用它可以方便的綁定通道socket,並且方便設置和獲取socket的屬性。MulticastChannel介面方便創建IP協議多播。多播實現直接綁定到本地的多播設備。靈活的非同步I/O可以通過真正的非同步I/O,在不同的線程中運行數以萬計的流操作!JKD7提供了對文件和socket的非同步操作。一些JDK7中的新通道:AsynchronousFileChannel:非同步文件通道可以完成對文件的非同步讀寫操作。AsynchronouseSocketChannel:Socket中的一個簡單非同步通道,方法是非同步的並且支持超時。:非同步的:基於數據包的非同步socketJSR292:Java平台中的動態編程語言DaVinciMachine項目(JSR292)的主旨是擴展JVM支持除Java以外的其它編程語言,尤其是對動態編程語言的支持。所支持的語言必須和Java一樣不收到歧視並共同存在。JSR334:Java語言的一些改進OpenJDK項目的創造(JSR334)的主旨是對Java語言進行一些小的改進來提高每天的Java開發人員的工作。這些改進包括:Switch語句允許使用String類型支持二進制常量和數字常量中可以使用下劃線使用一個catch語言來處理多種異常類型對通用類型實例的創建提供類型推理Try-with-resources語句來自動關閉資源JSR119:Java編譯器APIJSR199是在JDK6中加入的,主要用來提供調用Java編譯器的API。除了提供javac的命令行工具,JSR199提供Java編譯器到程序交互的能力。Java編譯器API要達到三個目標:對編譯器和其它工具的調用對結構化的編譯信息進行訪問對文件輸入輸出定製化處理的能力JSR206:JavaXML處理的API(JAXP)JSR206即JavaAPIforXMLProcessing(JAXP),是Java處理XML文檔的一個與實現無關,靈活的API。JAXP1.3的主要特性包括:DOM3內建通過XMLSchema進行文檔校驗的處理器對XMLSchema中的數據類型的實現,在javax.xml.datatype包中。XSLTC,最快的轉換器,也是XSLT處理中的默認引擎。提供對XInclude的實現。這將會方便我們使用文本和其它已有的XML來創建新的文檔,這樣可以對文檔片段進行重用。JDK7中會包含JAXP1.3,這個是JAXP的最新實現。綁定技術(JAXB)JSR222即JavaArchitectureforXMLBinding(JAXB)。JAXB的目的是便於Java程序進行Java類到XML文檔的映射。JAXB2的主要特性:支持全部的W3CXMLSchema特性。(JAXB1.0說明了對於W3CXMLSchema中某些特性的不支持)支持綁定Java到XML文檔,通過添加javax.xml.bind.annotation包來控制綁定。大量減少了對於schema衍生出來的類。通過JAXP1.3的校驗API來提供額外的校驗能力。JDK7中將包括JAXB2.2JSR224:基於XML的Web服務API(JAX-WS)JSR224即JavaAPIforXML-basedWebServices(JAX-WS),是一個基於Annotation標注的編程模型,主要針對WebService應用和客戶端開發。JAX-WS2的主要特性包括:對JAXB2.1API的支持(JSR222)對WebServicesAddressing1.0的支持EndpointReference(EPR)的API:創建(BindingProvider.getEndpointReference(),Endpoint.getEndpointReference(),MessageContext.getEndpointReference())事務處理(使用JAXB2.1綁定W3CEPR到W3CEndpointReference類,使用JAXBMarshall/類)提供友好的API來啟用和停止某些特性,例如MTOM特性和Addressing特性JDK7將包含JAX-WS2.2可插拔的Annotation處理APIJSR269即PluggableAnnotation-ProcessingAPI從JDK5開始,Annotation標注就成了強大的機制用來標注我們的類、屬性和方法。通常Annotation標注是在創建階段或者運行階段進行處理的,並獲取語義結果。JSR269主要用來定義一套API,允許通過可插拔的API來進行標注處理器的創建。規范包括一部分的API用來對Java編程語言進行構建,還有就對標注處理器聲明和控制運行的部分。有了程序中的Annotation標注,就需要有標注處理器框架來反射程序的結構。Annotation處理器會指定他們處理的標注並且的處理器可以合作運行。標注處理器和程序結構的API可以在構建階段訪問。小的改進java.util.Objects提供了一套9個靜態方法。其中兩個方法用來檢測當前對象是null還是非null。兩個方法用來提供生成toString()字元串同時支持null對象。兩個用來處理hash的方法。兩個方法用來處理equals。最後一個compare方法用來進行比較。SwingJLayer組件JXLayer是一個組件裝飾器,提供了用來裝飾多個組合組件的方式,並且可以捕獲所有滑鼠、鍵盤和FocusEvent的事件,並針對所有的XLayer子組件。這個組件只會對publicswing的api起作用,對全局設置沒有作用,例如對EventQueue或者RepaintManager。(除了這些,Swing還將在JDK7中提供JXDatePicker和CSS方式樣式)並發和集合APIJSR166,並發和集合API提供了靈活的非同步處理,並發HashMap,傳輸隊列和輕量級的fork/join框架以及本地線程方式的偽隨機數生成器。類載入器體系結構類載入器已經升級到了可以在無等級類載入器拓撲中避免死鎖。JDK7中包含了一個對於多線程自定義類載入器的增強實現,名字為具有並行能力的類載入器。使用平行能力的類載入器載入class,會同步到類載入器和類名。Locale類的改進JavaLocale避免由於小的變化導致數據丟失。除此,Locale應該提供的特性,例如IETFBCP47和UTR35(CLDR/LDML)。分離用戶Locale和用戶介面LocaleJDK7分離了UI語言的locale和格式化locale,這個已經在Vista之後的windows系統中實現了。嚴格的類文件檢測通過JavaSE6的規范,version51(SE7)的類文件和之後的版本必須通過類型檢測來檢驗。對於老的推理驗證VM不可以宕掉Elliptic-CurveCryptography(ECC)橢圓曲線加密從JDK7開始,Java提供對標準的ECC演算法的靈活實現(基於橢圓曲線的公鑰加密演算法)Swing中的Nimbus外觀Nimbus是JDS(JavaDesktopSystem)中的新外觀。這個也是Solaris11的GTK主題Java2D中的XRenderPipelineJDK7中加入了基於X11XRender擴展的Java2D圖形管道。這將提供的對於當前先進的GPUs訪問的功能。TLS1.2TLS(TransportLayerSecurity)是一個用在Internet上的數據傳輸安全協議,用來避免監聽、引誘和消息偽造。TLS的主要目的是提供兩個應用間通信的隱私和數據完整。TLS是RFC5246標准,在JDK7中提供1.2JDBC4.0/4.1JDBC4.1特性只在JDK7或者更高版本中存在。JDBC4.1隻是對JDBC4.0進行較小的改動。關於一些JDBC4.0/4.1的特性:數據源—Derby包括了對於javax.sql.DataSource的新的實現JDBC驅動自動載入—應用不必在通過Class.forName()方法來載入資料庫驅動了。取而代之的是DriverManager會根據應用請求連接的情況,自動查找到合適的JDBC驅動。包裝—這是JDBC4.0中的新的概念,主要是通過這種機制可以讓應用獲取的廠商提供的標准JDBC對象實現,例如Connections,Statements和ResultSets。Statement事件—連接池可以監聽Statement的關閉和錯誤時間。addStatementEventListener和removeStatementEventListener被加入到了javax.sql.PooledConnectionJDK7提供了JDBC4.1全部的支持透明窗體和異形窗體為了6u10版本的圖形處理,JDK提供了透明效果的支持(簡單透明和像素透明)並且提供了對於異形窗體的支持(可以將窗體設置成任意形狀),輕重混合並且增強了AWT安全警告。透明效果和異形窗體是通過com.sun.awt.AWTUtilities類實現的。Unicode6.0Unicode6.0提供了諸如2.088字元集、對已經存在字元集的屬性改進、格式化改進以及新的屬性和數據文件。JDK7已經更新到對Unicode6.0的支持。要來關閉URLClassLoader的方法對JMX代理和MBeans的改進通過URLClassLoader,應用可以通過URL搜索路徑來載入類和資源。JKD7提供了close()新方法來幫助URLClassLoader清理資源。這個改進來至於JRockit,可以方便連接平台。MBean伺服器可以通過防火牆提供一套MBeans,這些暴露了VM中的一些內部操作的信息新的垃圾回收器JDK7提供了新的垃圾回收器,針對目前的CMS垃圾回收器,這將會讓垃圾回收器有更少的停頓時間和更高的語言效果。改進的JSRJSR901:JavaLanguageSpecification(JLS)Java語言計劃JSR901包括了從第一版Java規范到現在為止的所有的變化、說明和補充。Java語言通過JLS規范。對於JLS的改變通過JSR901進行管理JDK7將會包括最新的JSR901JSR924:JVM平台規范JSR924目的是維護Java虛擬機規范的變化,其中第二版是為了J2SE1.5的。JavaSEAPIJavaSEAPIs保持著對例行維護和小范圍改進的加入計劃的記錄延期到JDK8或者之後的規范JSR294:Java語言和虛擬機對模塊編程技術的支持—當前JSR主要的目的是提供在編譯期和運行期的模塊編程支持JSR308:對於Java類型的Annotation注釋—這將是對於當前注釋符號系統的擴展,將允許我們在類型中出現注釋符號。JSR296:Swing應用框架—主旨是消除Swing編程中的模板代碼並且提供Swing程序更加簡單的結構。模塊化—提供一個明確的、簡單的、低級別的模塊系統,主要目的是將JDK模塊化。JSRTBD:Lambda項目—Lambda表達式(通俗的也稱為「閉包「)和對Java編程語言的保護方法JSRTBD:對於集合支持的語言—常量表達式對於lists、sets和maps的迭代以及通過索引符號對lists和maps的訪問。SwingJDatePicker組件—添加SwingLabsJXDatePicker組件到平台。
❷ ASP.NET程序員常見面試題有什麼
很多用這個.
1. 問:怎樣用 Win95 的記事本 (Notepad) 來編輯 Java源程序?
答:記得存檔時擴展名要加上".java",文件類型改成:「所有的文件(*.*)」。
2. 問:到底 Java 是如何傳遞參數的?是by value或by reference?
答:All parameters (values of primitive types, and values that are references to objects) are passed by value [JLS sect 8.4.1]。根據以上 Java規格文件的說法, 所有參數應該都是傳值的(by value)。但實際上, 實際經驗卻告訴我們所有 Java 的對象都是傳址的(by reference)。因此我們可以這樣解釋: 基本類型(如int, float, char等)是by value,而所謂「對象」(Object)則是by value of reference to object。
3. 問:String這個類型的class為何定義成final?
答: 主要是為了「效率」 和 「安全性」 的緣故。若 String允許被繼承, 由於它的高度被使用率, 可能會降低程序的性能,所以String被定義成final。
4. 問:finalizers和C++ 的 destructors有何差異?
答:Java內部具有「內存使用回收」 的機制, 雖然它也提供了類似 (C++ 的) destructors的 finalize(),每個對象都可以使用這個方法 method,但必須冒著破壞原先回收機制的危險。所以建議盡量避免使用finalize(),不妨考慮多使用 null 及 dispose() 來釋出資源會好一些。
5. 問:繼承了一個class叫做 Frotz,編譯器卻給我「No constuctor Frotz() in the class」這樣的錯誤提示,為什麼呢?
答:記住每當您定義了一個 class的constructor,除非您一開始就去call 這個constructor,否則 Java 會自動引入superclass原先不含參數的 constructor, 如果superclass的 constructor都是有參數的,那麼問題中的錯誤提示便出現了。 解決的方法很簡單, 找一找 API文件,加上正確的參數就得了。
6. 問:怎樣讓char類型的東西轉換成int類型?
答:
char c = 'A';
int i = c;
//反過來只要作強制類型轉換就行了
c = (char) I;
7. 問:我的applet原先好好的, 一放到web server就會有問題,為什麼?
答:一般來說,從以下方向試試:
確定class文件的格式沒錯——已經編譯過,也沒有損壞的情形;
確定所有用到的class文件放到web server上,少一個都不行;
確定所有的文件名和class名稱一致,特別檢查大小寫有無差錯;
如果程序中用到package,web server上的目錄就要當心了。譬如您在class中宣告了一個叫COM.foo.util的package,那麼web server的applet codebase目錄底下就非得有 COM/foo/util這個子目錄不可。(注意目錄名稱也有大小寫之分);
web server上的文件檔案應該事先設定好。(尤其是search,read和execute許可權)
8. 問:怎樣在 Applet中用某個圖形塗滿整個背景?
答:在背景建立 Panel 或 Canvas, 然後用圖形填滿它。
9. 問:怎樣在 Applet 中建立自己的菜單(MenuBar/Menu)?
答:首先在Applet的init() 方法中建立Frame instance, 然後將Menus, Menubar都加上去即可。 (setMenuBar() 是 Frame下的方法)或者,找到Applet上層的Frame後依法炮製。
Container parent = getParent();
while (! (parent instanceof Frame) )
parent = parent.getParent();
Frame theFrame = (Frame) parent;
注意:第二個方法在Mac或某些browsers上並不可行。
如果您使用的是JDK 1.1,也可以考慮使用popup menu,這樣就不必理會Frame的問題了。
10. 怎樣比較兩個類型為String的字元串?
答:在兩個對象之間使用 "==",會將「兩個對象是否有同一reference」的結果傳回。也就是說, 這等同於「兩個對象是否擁有同一地址 (address)」,或者「兩個對象物件是否為同一對象」。如果您的意思是判斷兩個字元串的內容是否相同,那麼應該使用以下的方法才對:
if (s1.equals(s2) )
or if (s1.equalsIgnoreCase(s2) )
or if (s1.startsWith(s2) )
or if (s1.endsWith(s2) )
or if (s1.regionMatches(s1_offset, s2, s2_offset, length) )
or if (s1.compareTo(s2) <0)
11. 怎樣將浮點數(float)相加 ? Float 好像沒有辦法?
答:我猜想您的程式大概寫成這樣:
Float One;
Float Two;
Float Hard = One + Two;
請注意 float 和 Float 是不同的,前者是 Java 基本類型之一, 而後者卻是class。您應該將源代碼改為:
float One;
float Two;
float Hard = One + Two;
或
Float One = new Float(1.0);
Float Two = new Float(2.0);
Float Hard = new Float(One.floatValue() + Two.floatValue());
❸ 89S51單片機詳細介紹
89S51 單片機
MCS-51 單片機是美國INTE 公司於1980 年推出的產品,典型產品有 80 31(內部沒有程序存儲器,實際使用方面已經被市場淘汰)、8051(晶元採用HMOS,功耗是630mW,是89C51 的5 倍,實際使用方面已經被市場淘汰)和8751 等通用產品,一直到現在, MCS-5 1 內核系列兼容的單片機仍是應用
的主流產品(比如目前流行的89S51、已經停產的89C51 等),各高校及專業學校的培訓教材仍與MCS-51 單片機作為代表進行理論基礎學習。
有些文獻甚至也將8051 泛指MCS-51 系列單片機,8051 是早期的最典型的代表作,由於MCS-51 單片機影響極深遠,許多公司都推出了兼容系列單片機,就是說MCS-51 內核實際上已經成為一個8 位單片機的標准。
其他的公司的51 單片機產品都是和MCS-51 內核兼容的產品而以。同樣的一段程序,在各個單片機廠家的硬體上運行的結果都是一樣的,如ATMEL 的89C51(已經停產)、89S51, PHILIPS(菲利浦),和WINBOND(華邦)等,我們常說的已經停產的89C51 指的是ATMEL公司的 AT 89C51 單片機,同時是在原基礎上增強了許多特性,如時鍾,更優秀的是由Flash(程序存儲器的內容至少可以改寫 1000 次)存儲器取帶了原來的 ROM(一次性寫入),AT89C51 的性能相對於8051 已經算是非常優越的了。
不過在市場化方面,89C51 受到了PIC 單片機陣營的挑戰,89C51 最致命的缺陷在於不支持ISP(在線更新程序)功能,必須加上ISP 功能等新功能才能更好延續MCS-51 的傳奇。89S51就是在這樣的背景下取代89C51 的,現在,89S51 目前已經成為了實際應用市場上新的寵兒,作為市場佔有率第一的Atmel 目前公司已經停產AT89C51,將用AT89S51 代替。89S51 在
工藝上進行了改進,89S51 採用 0.35 新工藝,成本降低,而且將功能提升,增 加了競爭力。89SXX 可以像下兼容89CXX 等51 系列晶元。市場上見到的89C51 實際都是Atmel 前期生產的巨量庫存而以。如果市場需要,Atmel當然也可以再恢復生產AT89C51。
AT89S51/LS51單片機是低功耗的、具有4KB在線課編程Flash存儲器的單片機。它與通用80C51系列單片機的指令系統和引腳兼容。片內的Flash可允許在線重新編程,也可使用非易失性存儲器編程。他將通用CPU和在線可編程Flash集成在一個晶元上,形成了功能強大、使用靈活和具有較高性能性價比的微控制器。
AT89S51/LS51具有如下特性:
--片內程序存儲器含有4KB的Flash存儲器,允許在線編程,檫寫周期可達1000次;
--片內數據存儲器內含128位元組的RAM;
--I/O口具有32根可編程I/O線;
--具有兩個16位I/O線;
--中斷系統具有6個中斷源、5個終端矢量、2個中斷優先順序的中斷結構;
--串列口是一個全雙工的串列通信口;
--具有兩個數據指針DPTR0和DPTR1;
--低功耗節電模式有節電模式和掉電模式;
--包含3級程序鎖定位;
--AT89S51的電源電壓為4.0-5.5V,AT89LS51的電源電壓為2.7-4.0V;
-振盪器頻率0-33MHz(AT89S51),0-16MHz(AT89LS51);
--具有片內看門狗定時器;
--靈活的在線片內編程模式(位元組和頁編程模式);
--具有斷電標志模式POF;
89S51 相對於89C51 增加的新功能包括:
-- 新增加很多功能,性能有了較大提升,價格基本不變,甚至比89C51 更低!
-- ISP 在線編程功能,這個功能的優勢在於改寫單片機存儲器內的程序不需要把晶元從工作
環境中剝離。是一個強大易用的功能。
-- 最高工作頻率為33MHz,大家都知道89C51 的極限工作頻率是24M,就是說S51 具有更
高工作頻率,從而具有了更快的計算速度。
-- 具有雙工UART 串列通道。
-- 內部集成看門狗計時器,不再需要像89C51 那樣外接看門狗計時器單元電路。
-- 雙數據指示器。
-- 電源關閉標識。
-- 全新的加密演算法,這使得對於89S51 的解密變為不可能,程序的保密性大大加強,這樣
就可以有效的保護知識產權不被侵犯。
-- 兼容性方面:向下完全兼容51 全部字系列產品。比如8051、89C51 等等早期MCS-51 兼
容產品。也就是說所有教科書、網路教程上的程序(不論教科書上採用的單片機是8051 還
是89C51 還是MCS-51 等等),在89S51 上一樣可以照常運行,這就是所謂的向下兼容。
引腳排列及功能
AT89S51/LS具有PDIP,TQFP和PLCC三種封裝形式。PDIP封裝的引腳排列如圖所示。
引腳功能如下:
--P0口——8位、開漏極、雙向I/O口。
P0口可作為通用I/O口,但必須外接上拉電阻;作為輸出口,每個引腳課吸收8個TTL的灌電流。作為輸入時,首先應將引腳置1。
P0口也可用作外部程序存儲器和數據存儲器是的低八位地址/數據匯流排的復用線。在該模式下,P0口含有內部上拉電阻。
在Flash編程時,Po口接受代碼數據;在編程校驗時,P0口輸出代碼位元組數據(需要外接上拉電阻)。
--P1口——8位、雙向I/O口、內部含有行拉電阻。
P1可作為普通I/O口。輸出緩沖器可驅動4個TTL負載;用作輸入時,先交引腳置1,有片內上拉電阻將其抬到高電平。P1口的引腳可由外部負載拉倒低電平,通過上拉電阻提供拉電流。
在Flash並行
編程和校驗時,P1口可輸入低位元組地址。
在串列編程和校驗時,P1.0/MOSI,P1.6/OSI和P1.7/SCK分別是串列數據輸入、輸出和移位脈沖引腳。
I/O具有內部拉電阻的8位雙向I/O。
P2口用作輸出口時,可驅動四個TTL負載;用作輸入口時,先將引腳置1,由內部上拉電阻將其提高到高電平。若負載為低電平,則通過內部上拉電阻向外輸出電流。
CPU訪問外部16位地址的存儲器時,P2口提供高8位的地址。當CPU用8位地址定址外部存儲器時,P2口為P2特殊功能寄存器內容。
在FLASH並行編程和校檢時,P2口可輸入高位元組地址和某些控制信號。
--P3口——局有內部上拉電阻8位雙向口。
P3口左忽出口時,輸出緩沖器可吸收4個TTL的灌電流;用作輸入口時,手先將引腳置1,有內部上拉電阻抬為高電平。若外部負載是低電平,則通過內部上拉電阻向外輸出電流。
在與FLASH並行編程和校檢時,P3口可輸入某些控制信號。
P3口除了通用I/O功能外,還有替代功能,如下表所示:
引腳
符號
說明
P3.0
RXD
串列口輸入
P3.1
TXD
串列口輸出
P3.2
INT0
外部中斷0
P3.3
INT1
外部中斷0
P3.4
T0
T0定時器的外部計數輸入
P3.5
T1
T1定時器的外部計數輸入
P3.6
WR
外部數據存儲器的寫選通
P3.7
RD
外部數據存儲器的讀選通
--ALE/PROG——地址鎖存允許/編程脈沖信號端。
在CPU訪問外部程序存儲器或者外部數據存儲器時,ALE提供一個地址鎖存信號,將低8位地址鎖存在騙外地址鎖存中。
在與FLASH並行編程時,該引腳也是編程負脈沖的輸入端。
在正常操作狀態下,該引腳埠輸出額定頻率的脈沖,其頻率為額定頻率的1/6,可做外部定時或者其它引發信號。應注意,CPU每次訪問外部數據存儲器時,都要丟失一個ALE脈沖。
如果需要,則通過將SFR(8EH)的第0位置1,可禁止ALE操作,但在使用MOVC或者MOVX指令時候,ALE仍有效。也就是說,ALE的禁止位不影響對外部存儲器的訪問。
--PSEN——外部程序存儲器讀選通信號,低電平有效。
當AT89S51/LS51執行來自外部程序存儲器指令代碼時候,PSEN每個機器周期兩次有效。在訪問外部數據存儲器時候,則無效
--EA/Vpp——外部程序存儲器允許。
當EA接地時,CPU只執行外程序存儲器的程序;當EA接Vcc時,CPU首先執行片內程序存儲器中的程序(0000H ——0FFFH),然後自動轉向執行片外程序存儲器中的程序(1000H——FFFFH).
如果程序鎖定位LB1別編程(P),那麼EA值將在復位時有片內鎖存。
在與FLASH並行編程時,該引腳可介入12V的編程電壓Vpp.
--XTAL1和XTAL2——XTAL1是片內振盪器反相放大器和時鍾發生器的輸入端,XTAL2是片內振盪器反相放大器的輸出端。
--RST——復位輸入段,高電平有效。
在振盪器穩定有效運行狀態下,RST端維持兩個機器周期的高電平,便可復位器件,當看門狗定時器溢出輸出端時,該引腳將輸出長達98個震盪周期的高電平。
--Vcc—電源電壓輸入端。
--GND—電源地。
特殊功能存儲器
AT89S51/LS51的特殊功能存儲器
序號
地址
符號
復位值
說明
1
80H
P0
FFH
P0口鎖存器
2
81H
SP
07H
堆棧指針
3
82H
DP0L
00H
數據指針DPTR0低位元組
4
83H
DPoH
00H
數據指針DPTR0高位元組
5
84H
DP1L
00H
數據指針DPTR1低位元組
6
85H
DP1H
00H
數據指針DPTR1高位元組
7
87H
PCON
0XXX0000B
定時器控制計時器
9
89H
TMOD
00H
定時器模式寄存器
10
8AH
TL0
00H
定時器0低位元組
11
8BH
TL1
00H
定時器1低位元組
12
8CH
TH0
00H
定時器0高位元組
13
8DH
TH1
00H
定時器1高位元組
14
8EH
AUXR
XXX00XX0B
輔助寄存器
15
90H
P1
FFH
P1口鎖存器
16
98H
SCON
00H
串列口控制寄存器
17
99H
SBUF
XXXXXXXXB
串列口數據緩沖器
18
0AOH
P2
FFH
P2口鎖存器
19
OA2H
AUXR1
XXXX XXX0B
輔助寄存器1
20
0A6H
WDTRST
XXXX XXXXB
WDT復位寄存器
21
0A8H
IE
0XX00000B
中斷允許寄存器
22
0BOH
P3
FFH
P3口鎖存器
23
0B8H
IP
XX00000B
中斷優先寄存器
24
0D0H
PSW
00H
程序狀態字
25
0E0H
ACC
OOH
累加器
26
0FOH
B
00H
B寄存器
電源斷電標志POF
POF是PCON.4位。電源上電時,POF置1,POF位可用軟體置位與清零。復位不影響POF位值。
終端和中斷寄存器
AT89S51/LS51含有6個中斷源,5個中斷矢量(中斷服務程序入口地址),如圖:
圖中定時器0和定時器1的中斷標志TF0和TF1是在每個機器周期的S5P2時刻設置(當溢出時)的,然後在下個機器周期由片內線路查詢。
沒個中斷源都可單獨地通過設定或清除特殊功能存儲器IE中某一位來允許/禁止,IE內含一個中斷總控制位EA,可允許/禁止所有中斷。
IE各位功能如下:
IE 地址=A8H 復位值=0XX0 0000B
可以定址位
MSB LSB
位地址
AFH
AEH
ADH
ACH
ABH
AAH
A9H
A8H
位符號
EA
—
—
ES
ET1
EX1
ET0
EX0
每位置1表示允許中斷,每位清0表示禁止中斷。
其中:
EA 中斷總控制位。EA=0,禁止所有中斷;EA=1,每個中斷是否允許還取決於其它各中斷的控制位。
ES 串列口串列中斷允許位。
ET1 定時器1中斷允許位。
EX1 外部中斷1中斷允許位。
ET0 定時器0中斷允許位。
EX0 外部中斷0中斷允許位。
❹ java se8的新特性有哪些
java se8新特性如下:
Java Programming Language
1、lambda expressions,一個新的語言特性,它可以將功能作為方法的參數or代碼作為數據,它使你表達單一方法介面的實例更加簡潔。
2、對已經有方法名的方法提供一個更加可讀的lambda expressions為方法的引用。
3、默認方法使新的功能添加到庫的介面,確保與舊版本的介面編寫的代碼的二進制兼容
4、重復註解提供不止一次應用同樣的註解類型
5、類型註解提供應用註解的能力,任何一個類型的使用,不僅在聲明上使用。用於一個可插拔式的系統,此功能提高你代碼的類型檢查。
6、提高類型的推斷
7、方法參數的反射
Collections
1、新的java.util.stream包,提供了stream api支持流元素上的功能性操作。stream api集成到collections api中,使用批量操作,如串列or並行 map-rece 轉換。
2、使用key collisions改進HashMap的性能
compact profiles
包含java SE平台預定義的子集和使不需要整個平台被部署和運行在小型設備中的應用
security
1、客戶端默認啟用TLS1.2
2、新的AccessController.doPrivileged,用代碼斷言它的privileges的子集,沒有防止全棧遍歷時檢查其他許可權
3、更強的基於密碼的加密演算法
4、SSL/TLS SNI擴展在JSSE伺服器中支持
5、支持AEAD演算法:SunJCE提供增強的支持AES / GCM / nopadding密碼的實現以及GCM演算法參數,SunJSSE提供基於密碼套件的AEAD模式增強
6、keystore增強,包含新的keystore類型java.security.DomainLoadStoreParameter,和新的命令行選項-importpassword
7、SHA-224 Message Digests
8、NSA Suite B加密支持
9、更好的支持High Entropy 隨機數生成
10、新的java.security.cert.PKIXRevocationChecker類為配置撤銷X.509證書
11、win下64-bit PKCS11
12、新的rcache 類型在Kerberos 5 Replay Caching
13、支持Kerberos 5協議轉換和約束代理
14、默認禁用Kerberos 5弱的加密
15、未綁定SASL為GSS-API/Kerberos 5機制
16、多主機名下SASL服務
17、在Mac OS X上JNI橋接到native JGSS
18、在sunjsse提供更強的實力,EDH鍵的支持
19、在JSSE支持伺服器端密碼套件個性設置
JavaFX
1、新Modena theme實現
2、新SwingNode類容許開發者嵌套Swing內容到javaFX應用中
3、新UI Controls 包含DatePicker 和TreeTableView
4、javafx.print包為JavaFX提供公共printing API
5、三維圖形特性,目前包含3D shapes、camera、lights、subscene、material、picking和antialiasing
6、WebView類提供的新功能和改進,支持更多關於HTML5的特性,Web Scokets,Web Workers和Web Fonts
7、增強文本的支持
8、支持Hi-DPI 顯示
9、css樣式類變成公共API
10、新的ScheledService類允許自動重啟服務
11、ARM平台可用JavaFX
tools
1、jjs命令調用Nashorn引擎
2、java命令允許JavaFX應用
3、java man page已經更新
4、jdeps命令行工具提供分析類文件
5、Java Management Extensions (JMX) 提供遠程診斷命令
6、jarsiger工具可選,從TSA請求簽名時間抽
7、javac tool
7.1、-parameters選項存儲正式的參數名和反射API檢索正式參數的名稱
7.2、JLS 15.21相等操作的類型規則通過javac命令正確的執行
7.3、javac工具現在支持檢查javadoc注釋的內容,該特性通過-Xdoclint選項
7.4、javac工具現在提供生成native header的能力。移除javah工具,通過javac的-h選項使用
8、javadoc tool
8.1、javadoc工具支持新DocTree API
8.2、javadoc工具支持新的javadoc 訪問API,允許在java 應用直接調用javadoc 工具,沒有執行新的進程
8.3、javadoc工具現在支持檢查javadoc注釋的內容,該特性通過-Xdoclint選項
Internationalization
1、unicode增強,支持unicode6.2.0
2、採用unicode CLDR數據和java.locale.providers 系統屬性
3、新的Calendar和Locale APIs
4、安裝一個自定義的資源包作為一個擴展的能力
Deployment
1、對sandbox applet和 java web start app,URLPermission現在是用來允許連接到伺服器從它們啟動完成後。SocketPermission不再授權
2、在所有安全級別,在主要jar文件的jar文件的manifest中必須給定許可權屬性
Date-Time Package
一個新的軟體包,提供更加全面的日期-時間模型
Scripting
Nashorn js 引擎
Pack200
1、Pack200支持常量池條目和由JSR 292引入了新的位元組碼
2、JDK8支持由JSR-292, JSR-308 and JSR-335指定類文件的變化
IO and NIO
1、基於Solaris在Solaris事件埠機制實現新的SelectorProvider。使用系統屬性java.nio.channels.spi.Selector設置的值sun.nio.ch.EventPortSelectorProvder運行
2、減少<JDK_HOME>/jre/lib/charsets.jar文件中數量
3、提高java.lang.String(byte[], *)構造器和java.lang.String.getBytes()方法的性能
java.lang and java.util.Pack ages
1、並發的數組排序
2、標準的編碼和解碼Base64
3、無符號運算的支持
JDBC
1、移除JDBC-ODBC橋
2、JDBC4.2引入新的功能
Java DB
1、JDK8 包含 Java DB 10.10
Networking
1、添加java.net.URLPermission類
2、在java.net.HttpURLConnection中,如果安裝安全管理,請求要求打開一個連接請求的許可權
Concurrency
1、在java.util.concurrent包中新增類和介面
2、java.util.concurrent.ConcurrentHashMap類添加方法支持聚合操作,基於新的流設施和lambda expressions
3、java.util.concurrent.atomic包中添加類支持可擴展可更新的變數
4、 java.util.concurrent.ForkJoinPool類中添加方法支持通用池
5、 java.util.concurrent.locks.StampedLock類已經添加使用3種模式控制讀/寫訪問的基於能力的鎖
Java XML – JAXP
HotSpot
1、硬體特性增加了AES,UseAES和UseAESIntrinsics標簽在打開基於硬體AES可用(Inter 硬體),硬體必須是2010或更新Westmere硬體,如:打開硬體AES,使用下面標記
-XX:+UseAES -XX:+UseAESIntrinsics
關閉硬體AES:
-XX:-UseAES -XX:-UseAESIntrinsics
2、移除PermGen
3、通過為方法調用引入位元組碼指令支持默認方法
❺ JDK1.8版本對於CMS演算法有哪些改進
JDK7.0和JDK6.0有什麼區別?
jdk7是模塊化程序,模塊間的依賴性變小了.jdk的好多功能間有相互依賴性,導致一個配置不對,好多不能用.舉例來說:假設你正使用Logging API(java.util.logging)),Logging需要NIO和JMX,JMX需要JavaBeans, JNDI, RMI和CORBA,JNDI需要java.applet.Applet而且JavaBeans依賴AWT.
JDK7 新特性:
JSR203:JDK中會更多的IO API(「NIO.2」)訪問文件系統與之前的JDK中通過java.io.File訪問文件的方式不同,JDK7將通過java.nio.file包中的類完成。JDK7會使用java.nio.file.Path類來操作任何文件系統中的文件。(這里說的任何文件系統指的是可以使用任何文件存儲方式的文件系統)
示例:
Java7之前
File file = new File(「some_file」);
使用Java7
Path path = Paths.get(「some_file」);
在File類中加入了新的方法toPath(),可以方便的轉換File到Path
Path path = new File(「some_file」).toPath();
Socket通道綁定和配置在JDK7中面向通道的網路編程也得以更新!JDK7中可以直接綁定通道的socket和直接操作socket屬性。JDK7提供了平台socket屬性和指定實現的socket屬性。
JDK7加入了一個新的位元組通道類,SeekableByteChannel
NetworkChannel是面向網路通道編程模塊中的又一個新的超介面。利用它可以方便的綁定通道socket,並且方便設置和獲取socket的屬性。
MulticastChannel介面方便創建IP協議多播。多播實現直接綁定到本地的多播設備。
靈活的非同步I/O可以通過真正的非同步I/O,在不同的線程中運行數以萬計的流操作!JKD7提供了對文件和socket的非同步操作。一些JDK7中的新通道:
AsynchronousFileChannel:非同步文件通道可以完成對文件的非同步讀寫操作。
AsynchronouseSocketChannel:Socket中的一個簡單非同步通道,方法是非同步的並且支持超時。
:非同步的ServerSocket
AsynchronousDatagramChannel:基於數據包的非同步socket
JSR292:Java平台中的動態編程語言Da Vinci Machine項目(JSR292)的主旨是擴展JVM支持除Java以外的其它編程語言,尤其是對動態編程語言的支持。所支持的語言必須和Java一樣不收到歧視並共同存在。JSR334:Java語言的一些改進OpenJDK項目的創造(JSR334)的主旨是對Java語言進行一些小的改進來提高每天的Java開發人員的工作。這些改進包括:
Switch語句允許使用String類型
支持二進制常量和數字常量中可以使用下劃線
使用一個catch語言來處理多種異常類型
對通用類型實例的創建提供類型推理
Try-with-resources語句來自動關閉資源
JSR119:Java編譯器APIJSR199是在JDK6中加入的,主要用來提供調用Java編譯器的API。除了提供javac的命令行工具,JSR199提供Java編譯器到程序交互的能力。Java編譯器API要達到三個目標:
對編譯器和其它工具的調用
對結構化的編譯信息進行訪問
對文件輸入輸出定製化處理的能力
JSR206:Java XML處理的API (JAXP)JSR206即Java API for XML Processing(JAXP),是Java處理XML文檔的一個與實現無關,靈活的API。
JAXP1.3的主要特性包括:
DOM3
內建通過XML Schema進行文檔校驗的處理器
對XML Schema中的數據類型的實現,在javax.xml.datatype包中。
XSLTC,最快的轉換器,也是XSLT處理中的默認引擎。
提供對XInclude的實現。這將會方便我們使用文本和其它已有的XML來創建新的文檔,這樣可以對文檔片段進行重用。
JDK7中會包含JAXP1.3,這個是JAXP的最新實現。
綁定技術(JAXB)JSR222即Java Architecture for XML Binding(JAXB)。JAXB的目的是便於Java程序進行Java類到XML文檔的映射。
JAXB2的主要特性:
支持全部的W3C XML Schema特性。(JAXB1.0說明了對於W3C XML Schema中某些特性的不支持)
支持綁定Java到XML文檔,通過添加javax.xml.bind.annotation包來控制綁定。
大量減少了對於schema衍生出來的類。
通過JAXP1.3的校驗API來提供額外的校驗能力。
JDK7中將包括JAXB2.2
JSR224:基於XML的Web服務API(JAX-WS)JSR224即Java API for XML-based Web Services(JAX-WS),是一個基於Annotation標注的編程模型,主要針對Web Service應用和客戶端開發。
JAX-WS2的主要特性包括:
對JAXB2.1 API的支持(JSR222)
對Web Services Addressing 1.0的支持
EndpointReference(EPR)的API:創建(BindingProvider.getEndpointReference(),Endpoint.getEndpointReference(),MessageContext.getEndpointReference())
事務處理(使用JAXB2.1綁定W3C EPR到W3CEndpointReference類,使用JAXB Marshall/Unmarshall W3CendpointReference類)
提供友好的API來啟用和停止某些特性,例如MTOM特性和Addressing特性
JDK7將包含JAX-WS2.2
可插拔的Annotation處理APIJSR269即Pluggable Annotation-Processing API
從JDK5開始,Annotation標注就成了強大的機制用來標注我們的類、屬性和方法。通常Annotation標注是在創建階段或者運行階段進行處理的,並獲取語義結果。JSR269主要用來定義一套API,允許通過可插拔的API來進行標注處理器的創建。
規范包括一部分的API用來對Java編程語言進行構建,還有就對標注處理器聲明和控制運行的部分。
有了程序中的Annotation標注,就需要有標注處理器框架來反射程序的結構。
Annotation處理器會指定他們處理的標注並且更多的處理器可以合作運行。
標注處理器和程序結構的API可以在構建階段訪問。
小的改進java.util.Objects提供了一套9個靜態方法。其中兩個方法用來檢測當前對象是null還是非null。兩個方法用來提供生成toString()字元串同時支持null對象。兩個用來處理hash的方法。兩個方法用來處理equals。最後一個compare方法用來進行比較。Swing JLayer組件JXLayer是一個組件裝飾器,提供了用來裝飾多個組合組件的方式,並且可以捕獲所有滑鼠、鍵盤和FocusEvent的事件,並針對所有的XLayer子組件。這個組件只會對public swing的api起作用,對全局設置沒有作用,例如對EventQueue或者RepaintManager。(除了這些,Swing還將在JDK7中提供JXDatePicker和CSS方式樣式)並發和集合APIJSR166,並發和集合API提供了靈活的非同步處理,並發HashMap,傳輸隊列和輕量級的fork/join框架以及本地線程方式的偽隨機數生成器。類載入器體系結構類載入器已經升級到了可以在無等級類載入器拓撲中避免死鎖。JDK7中包含了一個對於多線程自定義類載入器的增強實現,名字為具有並行能力的類載入器。使用平行能力的類載入器載入class,會同步到類載入器和類名。Locale類的改進Java Locale避免由於小的變化導致數據丟失。除此,Locale應該提供更多的特性,例如IETF BCP 47和UTR 35(CLDR/LDML)。分離用戶Locale和用戶介面LocaleJDK7分離了UI語言的locale和格式化locale,這個已經在Vista之後的windows系統中實現了。嚴格的類文件檢測通過JavaSE6的規范,version51(SE7)的類文件和之後的版本必須通過類型檢測來檢驗。對於老的推理驗證VM不可以宕掉Elliptic-Curve
Cryptography (ECC)橢圓曲線加密
從JDK7開始,Java提供對標準的ECC演算法的靈活實現(基於橢圓曲線的公鑰加密演算法)Swing中的Nimbus外觀Nimbus是JDS(Java Desktop System)中的新外觀。這個也是Solaris11的GTK主題Java2D中的XRender PipelineJDK7中加入了基於X11 XRender擴展的Java2D圖形管道。這將提供更多的對於當前先進的GPUs訪問的功能。TLS1.2TLS (Transport Layer Security)是一個用在Internet上的數據傳輸安全協議,用來避免監聽、引誘和消息偽造。TLS的主要目的是提供兩個應用間通信的隱私和數據完整。TLS是RFC5246標准,在JDK7中提供1.2JDBC4.0/4.1JDBC4.1特性只在JDK7或者更高版本中存在。JDBC4.1隻是對JDBC4.0進行較小的改動。關於一些JDBC4.0/4.1的特性:
數據源—Derby包括了對於javax.sql.DataSource的新的實現
JDBC驅動自動載入—應用不必在通過Class.forName()方法來載入資料庫驅動了。取而代之的是DriverManager會根據應用請求連接的情況,自動查找到合適的JDBC驅動。
包裝—這是JDBC4.0中的新的概念,主要是通過這種機制可以讓應用獲取的廠商提供的標准JDBC對象實現,例如Connections,Statements和ResultSets。
Statement事件—連接池可以監聽Statement的關閉和錯誤時間。addStatementEventListener和removeStatementEventListener被加入到了javax.sql.PooledConnection
JDK7提供了JDBC4.1全部的支持
透明窗體和異形窗體為了6u10版本的圖形處理,JDK提供了透明效果的支持(簡單透明和像素透明)並且提供了對於異形窗體的支持(可以將窗體設置成任意形狀),輕重混合並且增強了AWT安全警告。透明效果和異形窗體是通過com.sun.awt.AWTUtilities類實現的。Unicode6.0Unicode6.0提供了諸如2.088字元集、對已經存在字元集的屬性改進、格式化改進以及新的屬性和數據文件。
JDK7已經更新到對Unicode6.0的支持。
要來關閉URLClassLoader的方法
對JMX代理和MBeans的改進
通過URLClassLoader,應用可以通過URL搜索路徑來載入類和資源。JKD7提供了close()新方法來幫助URLClassLoader清理資源。
這個改進來至於JRockit,可以方便連接平台。MBean伺服器可以通過防火牆提供一套MBeans,這些暴露了VM中的一些內部操作的信息
新的垃圾回收器JDK7提供了新的垃圾回收器,針對目前的CMS垃圾回收器,這將會讓垃圾回收器有更少的停頓時間和更高的語言效果。改進的JSRJSR901:Java Language Specification(JLS)Java語言計劃
JSR901包括了從第一版Java規范到現在為止的所有的變化、說明和補充。Java語言通過JLS規范。
對於JLS的改變通過JSR901進行管理
JDK7將會包括最新的JSR901
JSR924:JVM平台規范
JSR924目的是維護Java虛擬機規范的變化,其中第二版是為了J2SE1.5的。
Java SE API
JavaSE APIs保持著對例行維護和小范圍改進的加入計劃的記錄
延期到JDK8或者之後的規范
JSR294:Java語言和虛擬機對模塊編程技術的支持—當前JSR主要的目的是提供在編譯期和運行期的模塊編程支持
JSR308:對於Java類型的Annotation注釋—這將是對於當前注釋符號系統的擴展,將允許我們在類型中出現注釋符號。
JSR296:Swing應用框架—主旨是消除Swing編程中的模板代碼並且提供Swing程序更加簡單的結構。
模塊化—提供一個明確的、簡單的、低級別的模塊系統,主要目的是將JDK模塊化。
JSR TBD:Lambda項目—Lambda表達式(通俗的也稱為「閉包「)和對Java編程語言的保護方法
JSR TBD:對於集合支持的語言—常量表達式對於lists、sets和maps的迭代以及通過索引符號對lists和maps的訪問。
Swing JDatePicker組件—添加SwingLabs JXDatePicker組件到平台。
❻ 請高手破解加密代碼
那上面的,說明白一點!!
❼ 字元串排序(冒泡法),無法運行成功,哪裡錯了怎麼改(請用指針法,不要用數組)
演算法沒有問題,但是只用char *s="bssfjlsdjlj";定義字元串的話,此指針指向的字元串內存地址會默認為const類型,這樣就沒有辦法進行數值修改了,象下面這樣多加一個char型數組,然後讓s指針指向它,就不會是const類型的了。這樣就可以修改數值進行冒泡演算法了。
輸出結果是"bdfjjjllsss" ,應該沒有問題。
#include"stdio.h"
#include"string.h"
voidmain()
{
char*s;
charTempString[]="bssfjlsdjlj";
inti,j,n;
chartemp;
s=TempString;
n=strlen(s);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(*(s+j)>*(s+j+1))
{
temp=*(s+j);
*(s+j)=*(s+j+1);
*(s+j+1)=temp;
}
}
}
printf("%s",s);
}
❽ 什麼叫"母函數"
生成函數(也有叫做「母函數」的,但是我覺得母函數不太好聽)是說,構造這么一個多項式函數g(x),使得x的n次方系數為f(n)。
生成函數最絕妙的是,某些生成函數可以化簡為一個很簡單的函數。也就是說,不一定每個生成函數都是用一長串多項式來表示的。比如,這個函數f(n)=1 (n當然是屬於自然數的),它的生成函數就應該是g(x)=1+x+x^2+x^3+x^4+...(每一項都是一,即使n=0時也有x^0系數為1,所以有常數項)。再仔細一看,這就是一個有無窮多項的等比數列求和嘛。如果-1<x<1,那麼g(x)就等於1/(1-x)了。在研究生成函數時,我們都假設級數收斂,因為生成函數的x沒有實際意義,我們可以任意取值。於是,我們就說,f(n)=1的生成函數是g(x)=1/(1-x)。
我們舉一個例子說明,一些具有實際意義的組合問題也可以用像這樣簡單的一個函數全部表示出來。
考慮這個問題:從二班選n個MM出來有多少種選法。學過簡單的排列與組合的同學都知道,答案就是C(4,n)。也就是說。從n=0開始,問題的答案分別是1,4,6,4,1,0,0,0,...(從4個MM中選出4個以上的人來方案數當然為0嘍)。那麼它的生成函數g(x)就應該是g(x)=1+4x+6x^2+4x^3+x^4。這不就是……二項式展開嗎?於是,g(x)=(1+x)^4。
你或許應該知道,(1+x)^k=C(k,0)x^0+C(k,1)x^1+...+C(k,k)x^k;但你或許不知道,即使k為負數和小數的時候,也有類似的結論:(1+x)^k=C(k,0)x^0+C(k,1)x^1+...+C(k,k)x^k+C(k,k+1)x^(k+1)+C(k,k+2)x^(k+2)+...(一直加到無窮;式子看著很別扭,自己寫到草稿紙上吧,畢竟這里輸入數學式子很麻煩)。其中,廣義的組合數C(k,i)就等於k(k-1)(k-2)(k-i+1)/i!,比如C(4,6)=4*3*2*1*0*(-1)/6!=0,再比如C(-1.4,2)=(-1.4)*(-2.4)/2!=1.68。後面這個就叫做牛頓二項式定理。當k為整數時,所有i>k時的C(k,i)中分子都要「越過」0這一項,因此後面C(k,k+1),C(k,k+2)之類的都為0了,與我們的經典二項式定理結論相同;不同的是,牛頓二項式定理中的指數k可以是任意實數。
我們再舉一個例子說明一些更復雜的生成函數。n=x1+x2+x3+...+xk有多少個非負整數解?這道題是學排列與組合的經典例題了。把每組解的每個數都加1,就變成n+k=x1+x2+x3+...+xk的正整數解的個數了。教材上或許會出現這么一個難聽的名字叫「隔板法」:把n+k個東西排成一排,在n+k-1個空格中插入k-1個「隔板」。答案我們總是知道的,就是C(n+k-1,k-1)。它就等於C(n+k-1,n)。它關於n的生成函數是g(x)=1/(1-x)^k。這個生成函數是怎麼來的呢?其實,它就是(1-x)的-k次方。把(1-x)^(-k)按照剛才的牛頓二項式展開,我們就得到了x^n的系數恰好是C(n+k-1,n),因為C(-k,n)*(-x)^n=[(-1)^n*C(n+k-1,n)]*[(-1)^n*x^n]=C(n+k-1,n)x^n。這里看暈了不要緊,後文有另一種方法可以推導出一模一樣的公式。事實上,我們有一個純組合數學的更簡單的解釋方法。因為我們剛才的幾何級數1+x+x^2+x^3+x^4+...=1/(1-x),那麼(1+x+x^2+x^3+x^4+...)^k就等於1/(1-x)^k。仔細想想k個(1+x+x^2+x^3+x^4+...)相乘是什麼意思。(1+x+x^2+x^3+x^4+...)^k的展開式中,n次項的系數就是我們的答案,因為它的這個系數是由原式完全展開後k個指數加起來恰好等於n的項合並起來得到的。
現在我們引用《組合數學》上暴經典的一個例題。很多書上都會有這類題。
我們要從蘋果、香蕉、橘子和梨中拿一些水果出來,要求蘋果只能拿偶數個,香蕉的個數要是5的倍數,橘子最多拿4個,梨要麼不拿,要麼只能拿一個。問按這樣的要求拿n個水果的方案數。
結合剛才的k個(1+x+x^2+x^3+x^4+...)相乘,我們也可以算出這個問題的生成函數。
引用內容
g(x)=(1+x^2+x^4+...)(1+x^5+x^10+..)(1+x+x^2+x^3+x^4)(1+x)
=[1/(1-x^2)]*[1/(1-x^5)]*[(1-x^5)/(1-x)]*(1+x) (前兩個分別是公比為2和5的幾何級數,
第三個嘛,(1+x+x^2+x^3+x^4)*(1-x)不就是1-x^5了嗎)
=1/(1-x)^2 (約分,把一大半都約掉了)
=(1-x)^(-2)=C(1,0)+C(2,1)x+C(3,2)x^2+C(4,3)x^3... (參見剛才對1/(1-x)^k的展開)
=1+2x+3x^2+4x^3+5x^4+....
於是,拿n個水果有n+1種方法。我們利用生成函數,完全使用代數手段得到了答案!
如果你對1/(1-x)^k的展開還不熟悉,我們這里再介紹一個更加簡單和精妙的手段來解釋1/(1-x)^2=1+2x+3x^2+4x^3+5x^4+....。
1/(1-x)=1+x+x^2+x^3+x^4+...是前面說過的。我們對這個式子等號兩邊同時求導數。於是,1/(1-x)^2=1+2x+3x^2+4x^3+5x^4+....。一步就得到了我們所需要的東西!不斷地再求導數,我們同樣可以得到剛才用復雜的牛頓二項式定理得到的那個結論(自己試試吧)。生成函數還有很多其它的處理手段,比如等式兩邊同時乘以、除以常數(相當於等式右邊每一項乘以、除以常數),等式兩邊同時乘以、除以一個x(相當於等式右邊的系數「移一位」),以及求微分積分等。神奇的生成函數啊。
我們用兩種方法得到了這樣一個公式:1/(1-x)^n=1+C(n,1)x^1+C(n+1,2)x^2+C(n+2,3)x^3+...+C(n+k-1,k)x^k+...。這個公式非常有用,是把一個生成函數還原為數列的武器。而且還是核武器。
接下來我們要演示如何使用生成函數求出Fibonacci數列的通項公式。
Fibonacci數列是這樣一個遞推數列:f(n)=f(n-1)+f(n-2)。現在我們需要求出它的生成函數g(x)。g(x)應該是一個這樣的函數:
g(x)=x+x^2+2x^3+3x^4+5x^5+8x^6+13x^7+...
等式兩邊同時乘以x,我們得到:
x*g(x)=x^2+x^3+2x^4+3x^5+5x^6+8x^7+...
就像我們前面說過的一樣,這相當於等式右邊的所有系數向右移動了一位。
現在我們把前面的式子和後面的式子相加,我們得到:
g(x)+x*g(x)=x+2x^2+3x^3+5x^4+8x^5+...
把這最後一個式子和第一個式子好好對比一下。如果第一個式子的系數往左邊移動一位,然後把多餘的「1」去掉,就變成了最後一個式子了。由於遞推函數的性質,我們神奇地得到了:g(x)+x*g(x)=g(x)/x-1。也就是說,g(x)*x^2+g(x)*x-g(x)=-x。把左邊的g(x)提出來,我們有:g(x)(x^2+x-1)=-x。於是,我們得到了g(x)=x/(1-x-x^2)。
現在的任務是要把x/(1-x-x^2)還原成通項公式。這不是我們剛才的1/(1-x)^n的形式,我們要把它變成這種形式。我們發現,1-x-x^2=[1-(1-√5)x/2]*[1-(1+√5)x/2] ((1-√5)/2和(1+√5)/2是怎麼算出來的?顯然它們應該是x^2-x-1=0的兩個根)。那麼x/(1-x-x^2)一定能表示成?/[1-(1-√5)x/2]+?/[1-(1+√5)x/2]的形式(再次抱歉,輸入數學公式很麻煩,將就看吧)。這是一定可以的,因為適當的?的取值可以讓兩個分式通分以後分子加起來恰好為一個x。?取值應該是多少呢?假設前面一個?是c1,後面那個是c2,那麼通分以後分子為c1*[1-(1+√5)x/2]+c2*[1-(1-√5)x/2],它恰好等於x。我們得到這樣兩個式子:常數項c1+c2=0,以及一次項-c1*(1+√5)/2-c2*(1-√5)/2=1。這兩個式子足夠我們解出c1和c2的准確值。你就不用解了,我用的Mathematica 5.0。解出來c1=-1/√5,c2=1/√5。你不信的話你去解吧。現在,我們把x/(1-x-x^2)變成了-(1/√5)/[1-(1-√5)x/2] + (1/√5)/[1-(1+√5)x/2]。我們已經知道了1/[1-(1-√5)x/2]的背後是以(1-√5)/2為公比的等比數列,1/[1-(1+√5)x/2]所表示的數列公比為(1+√5)/2。那麼,各乘以一個常數,再相加,我們就得到了Fibonacci數列的通項公式:f(n)=-(1/√5)*[(1-√5)/2]^n + (1/√5)*[(1+√5)/2]^n。或許你會問,這么復雜的式子啊,還有根號,Fibonacci數列不都是整數嗎?神奇的是,這個充滿根號的式子對於任何一個自然數n得到的都是整數。熟悉用特徵方程解線性遞推方程的同學應該知道,以上過程實質上和找特徵根求解沒有區別。事實上,用上面所說的方法,我們可以求出任何一個線性齊次遞推方程的通項公式。什麼叫做線性齊次遞推呢?就是這樣的遞推方程:f(n)等於多少個f(n-1)加上多少個f(n-2)加上多少個f(n-3)等等。Fibonacci數列的遞推關系就是線性齊次遞推關系。
我們最後看一個例子。我們介紹硬幣兌換問題:我有1分、2分和5分面值的硬幣。請問湊出n分錢有多少種方法。想一下剛才的水果,我們不難得到這個問題的生成函數:g(x)=(1+x+x^2+x^3+...)(1+x^2+x^4+...)(1+x^5+x^10+..)=1/[(1-x)(1-x^2)(1-x^5)]。現在,我們需要把它變成通項公式。我們的步驟同剛才的步驟完全相同。我們把(1-x)(1-x^2)(1-x^5)展開,得到1-x-x^2+x^3-x^5+x^6+x^7-x^8。我們求出-1+x+x^2-x^3+x^5-x^6-x^7+x^8=0的解,得到了以下8個解:-1,1,1,1,-(-1)^(1/5),(-1)^(2/5),-(-1)^(3/5),(-1)^(4/5)。這個不是我解出來的,我還是用的Mathematica 5.0。不是我不想解,而是我根本不會解這個8次方程。這也是為什麼信息學會涉及這些東西的原因:次數稍微一高,只好交給計算機解決了。於是,(1-x)(1-x^2)(1-x^5)=(1+x)(1-x)^3(1+(-1)^(1/5) x)()()() (省略不寫了)。注意那個(1-x)^3。由於等根的出現,我們不得不把(1-x)^3所包含的(1-x)和(1-x)^2因子寫進一會兒的分母里,不然會導致解不出合適的c來。你可以看到很多虛數。不過沒關系,這些虛數同樣參與運算,就像剛才的根式一樣不會影響到最後結果的有理性。然後,我們像剛才一樣求出常數滿足1/(1-x)(1-x^2)(1-x^5)=c1/()+c2/(1-x)+c3/(1-x)^2+c4/(1-x)^3...+c8/()。這個解太復雜了,我用Mathematica解了幾分鍾,列印出了起碼幾十KB的式子。雖然復雜,但我確實是得到了通項公式。你有興趣的話可以嘗試用Mathematica解決一下1/[(1-x)(1-x^3)] (只有1分和3分的硬幣)。解c的值時可以用SolveAlways[]函數。你可以親眼見到,一個四五行的充滿虛數的式子最後總是得到正確的整數答案。
生成函數還有很多東西,推導Catalan數列啊,指數生成函數啊,之類的。我有空再說吧,已經5000多個字了。
huyichen一直在問那道題。很顯然,那道題目和上面的兌換硬幣有些聯系。事實上,很多與它類似的題目都和生成函數有關。但那個題卻沒有什麼可以利用生成函數的地方(或許我沒想到吧)。或許每個max的值有什麼方法用生成函數解出來,但整個題目是不大可能用生成函數解決的。
近來有個帖子問一道「DP天牛」題目的。那個題目也是這樣,很多與它類似的題目都和DP有關,但那道題卻不大可能動規。我總覺得它可以歸約到裝箱問題(考慮體積關系,最少要幾個箱子才能把物品放完),而後者貌似屬於NPC。或許我錯了吧,現在沒事就在研究理論的東西,很久沒有想過OI題了,這方面的能力已經開始退化了。
❾ 如何java讀取海量中文文本
使用Boyer-Moore演算法
或者使用KMP演算法
建議使用後者
KMP演算法(java)
public class KMP {
/**
* @param args
*/
//計算模式串的next值
public static void getNext(String strModel, int dNext[]){
int i = 0,j = 1;
dNext[1] = 0;
while(j < strModel.length()){
while(i > 0 && strModel.charAt(i) != strModel.charAt(j))//遞推
i = dNext[i];
i++;
j++;
if(j == strModel.length())
break;
if(strModel.charAt(j) == strModel.charAt(i))//得出next值
dNext[j] = dNext[i] + 1;
else
dNext[j] = i;
}
}
//利用next值查詢子串
public static int getSubString(String strMain, String strModel, int dStart){
int dPos = -1;
int i = dStart;
int j = 1;
int dNext[] = new int[200];
getNext(strModel, dNext);
while(i<strMain.length()){
if(strMain.charAt(i) == strModel.charAt(j)){//當前字元匹配
if(j == (strModel.length()-1)){//查找成功
dPos = i - j + 1;
break;
}
i++;
j++;
}
else{//當前字元不匹配
if(dNext[j] == 0){
i++;
j = 1;
}
else{
j = dNext[j];
}
}
}
return dPos;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String strModel = " jlsdjflskjdm";
int[] dNext = new int[20];
getNext(strModel, dNext);
for(int i = 1; i<strModel.length(); i++)
System.out.print(dNext[i] + " ");
String strMain = " ";
System.out.println();
System.out.println(getSubString(strMain, strModel, 1));
}
}
❿ 怎麼計算人力成本
人工成本=企業從業人員工資總額+社會保險費用+福利費用+教育費用+勞動保護費用+住房費用+其他人工成本
人力成本是指企業在一定的時期內,在生產、經營和提供勞務活動中,因使用勞動者而支付的所有直接費用與間接費用的總和。
人力成本構成:
直接成本:員工的直接所得,包括工資、獎金、加班費、紅利、職務津貼、遣散補償等。換句話說,直接成本就是企業以貨幣的形式直接發放給員工的報酬。
間接成本:企業付出但員工未必能夠直接所得,包括社會保險、商業保險、住房公積;還包括為增加企業人員數量或能力而支出的招聘費用、培訓費用等。
(10)jls演算法擴展閱讀
首先,人力成本不等於工資和獎金。比如:企業給員工支付1000元的工資,那麼人力成本絕不會是這直接的1000元,還有其它的間接費用。
其次,人力成本不等於工資總額。按照勞動部1997年261號文件規定,人力成本包括工資總額、社會保險費用、福利費用、教育經費、住房費用以及其它人工成本。
再次,人力成本不等於使用成本。從人力資源的分類來看,人力成本可分為獲得成本、使用成本、開發成本、離職成本,可見「使用成本」只是人力成本的一部分而已。