⑴ 如何替換android應用圖標
(1)打開apk編輯器
⑵ 用apktool手機版,反編譯成功了,再編譯卻找不到生成的文件,求解
可能你的修改有錯誤吧,所以就會產生不了文件
⑶ autoit v3 編寫的軟體反編譯,難度頗大,希望大大幫忙
雖然我以前是這么回答的,但實話說,不藉助autoit自帶的反編譯工具,也是有辦法反編譯的。
但網路知道平台上估計沒這種高人,或者說,有這種能力的高人一般沒時間泡在網路知道上。
所以,在這里提問是枉然的。建議去AutoIt中文論壇或官方論壇碰碰運氣吧,畢竟更專業一些。
不過話又說回來,就算去那裡也未必有人肯花時間幫你反編譯的(真的很費時間和精力)。一來防止引發版權問題,二來人家主要是來技術交流的,不是純粹為分數而幫人幹活的。所以,這個問題要得到解決,真的不容易。只能祝你好運了 ;-)
⑷ 殺毒軟體的原理是什麼
工作原理是部分殺毒軟體是在內存里劃分一部分空間,將計算機中流過內存的數據與殺毒軟體自身所帶的病毒庫(包含病毒定義)的特徵碼相比較,以判斷是否為病毒;另一部分殺毒軟體在所劃分到的內存空間里,虛擬執行系統或用戶提交的程序,根據其行為或結果作出判斷。 殺毒軟體會生成現有主機操作系統的全新虛擬鏡像,該鏡像具有真實操作系統完全一致的功能。桌面虛擬化技術具有獨立分擋操作系統壓力,通過該技術實現運行過程中垃圾文件為零的目標,同時生成的虛擬環境與主機操作系統完全隔離,保護主機不被病毒感染,減少了系統被破壞的概率。
一個殺毒軟體的構造的復雜程度要遠遠高於木馬或病毒,所以其原理也比較復雜。而且鑒於現在木馬病毒越來越向系統底層發展,殺毒軟體的編譯技術也在不斷向系統底層靠近。例如現在的「主動防禦」技術,就是應用RING0層的編譯技巧。這里我簡單為大家介紹一下基本構成。 一個殺毒軟體一般由掃描器、病毒庫與虛擬機組成,並由主程序將他們結為一體,如圖1。 掃描器是殺毒軟體的核心,用於發現病毒,一個殺毒軟體的殺毒效果好壞就直接取決於它的掃描器編譯技術與演算法是否先進,而且殺毒軟體不同的功能往往對應著不同的掃描器,也就是說,大多數殺毒軟體都是由多個掃描器組成的。而病毒庫存儲的特徵碼形式則取決於掃描器採用哪種掃描技術。它裡面存儲著很多病毒所具有的獨一無二的特徵字元,我們稱之為「特徵碼」。特徵碼總的分來只有兩個,文件特徵碼與內存特徵碼。文件特徵碼存在於一些未執行的文件里,例如EXE文件、RMVB文件、jpg文件甚至是txt文件中都有可能存在文件特徵碼,也都有可能被查殺。而內存特徵碼僅僅存在於內存中已運行的應用程序。而虛擬機則是最近引進的概念,它可以使病毒在一個由殺毒軟體構建的虛擬環境中執行,與現實的CPU、硬碟等完全隔離,從而可以更加深入的檢測文件的安全性。 簡單的說,殺毒軟體的原理就是匹配特徵碼。當掃描得到一個文件時,殺毒軟體會檢測這個文件里是否包含病毒庫里所包含的特徵碼,如果有,則報毒病查殺,如果沒有,縱然這個文件確實是一個病毒,它也會把它當作正常文件來看待。 我覺得騰訊電腦管家就是最好的殺毒軟體了二、基於文件掃描的殺毒技術 基於文件的殺毒技術可以分為「第一代掃描技術」、「第二代掃描技術」與「演算法掃描」這三種方法,對於免殺愛好者來說,要對每一種方法爛熟於心,才能成為高手!但做為一個初學者來說了解一下即可。這里我們就簡單介紹一下其中兩種種方法,詳細的技術原理如果各位得這有興趣的話可以自己研究。
⑸ 如何wf文件不被反編譯軟體破解
The answer to the question in the title of this article is: "no way". At least no way to me. By proper tools, I can decompile any SWF.
其實,對於如何保護swf不被破解,答案是並不存在的。至少我無法做到!我可以用一些相應的工具破解任何SWF文件
So, do not incorporate important information in the SWF. Do not include your personal account or password in the SWF.
所以,不要在swf文件中放置任何重要的信息,不要把你的個人賬戶或密碼放在swf中。
I will briefly discuss the history of "protection" technique and how they failed. Then I would discuss how at best we can do. In Chinese old says: "A way able to protect from gentleman but not from professional theft".
我將會簡單地論述「保護(不被破解)」技術以及它們是如何失效的。然後我會介紹如何將「盡最大努力」來保護swf文件。中國有一句老話:「防得住君子,防不過小人」??
OPEN-FILE-FORMAT
開放文件格式
Before any discussion, we must know that, SWF is open format. Open-format means SWF files are not exclusively proced by Flash. Other companies can create SWF that can be played on SWF player. Open-format means what informations get stored in what position are known for public. The meaning of each byte is known for public. So, if I have time to check the SWF byte by byte, I know everything.
在開始探討這個問題之前,我們要知道,swf文件是開放格式的。這意味著swf文件並不是Flash軟體所特定生成的,其他的公司(軟體)同樣可以創建swf文件並且能夠在任何swf播放器上播放(aw附:比如SwishMax,Swift3d等等)開放格式意味著(swf文件的)什麼地方存放什麼內容是公布於眾的。(swf文件的)每一個位元組(8個bit,比如01001110)也是公布於眾的。所以,如果我有時間來逐個位元組地分析一個swf文件,我將會知道一切。
Of course, I won't have the time to check an SWF of 2 mb in size byte by byte. So, there are softwares to help me achieve the jobs. If that software meets trouble, OK, I will take over the job temporarily and check the bytes where troubles occurr. Fix it, and then continue. Nothing can hide. The limitation is my time and my patience.
If the reward of decompiling an SWF is millions of dollars, I surely would like to take years to read it byte by byte.
然而,我當然沒有時間去逐位元組地分析一個2mb的swf文件。所以,這樣就出現了一系列(破解)軟體來幫助我完成這樣一個工作。如果這個軟體遇到麻煩了(可理解為被設計者人為設置),那麼我就要人為地介入這個人物並查出問題所在,找出是哪個(些)位元組除了問題。然後恢復它們,並且讓工作繼續。沒有內容可以被掩蓋,唯一的限制是犧牲了我的時間以及耐心。
OK, here is the history of the war between decompiler and protection.
好,下面介紹一下「破解」與「反破解(保護)」的「戰爭」!
PROTECT FROM IMPORT
==(aw注釋:這是官方的一種防「導入「)==
Since the birth of Flash, Macromedia gives authors a function: "password-protected from import". If you protect that SWF from import with a password, then that SWF can not be imported. Some vector graphics in the SWF can be imported to FLA file if we don't protect it. This protection serves nothing but false security.
自從 Flash誕生以來,Macromedia(公司)就給了設計者這樣一個功能:「密碼防止導入」。如果你對一個swf設置了這樣一個參數,那麼這個swf就無法被(flash)導入。要知道,如果不進行此項設置,swf文件中的矢量元件(一般為重要的腳色設定或者創意)就能被導入進入fla文件。然而這項措施只是一種表面的安全工作而已。
Think about that, your SWF is going to be played by the player of users. You can not protect from that player. So, how does it protect the SWF? Well, the protection is in the Flash software you buy. Flash refuses to import if there is a password string in the SWF. Non-sense, right? I can use hex editor to open that SWF and then delete that password string and then the protection is removed.
這么來想,你的swf文件將在用戶的播放器中播放。你總不可能來保護(,或者說限制)播放器吧?
那麼原理上,它是如何來保護swf的呢?其實不過是在flash中導入之前檢查密碼字元串。我可以用十六進制編輯器來打開這些swf文件,並且把密碼字元串刪除,這樣,所謂的保護就被破壞(破解)了。
How easy it is! So, forget about that protect function.
如此簡單,所以,忘了那項沒有意義的保護措施吧!(Flash提供的所謂的導入密碼)
CONVERTION TO PROJECTOR FILE AND COMPRESSION
==轉換為可執行文件並且壓縮==
If I convert it to a projector file in the format of EXE, can the EXE file be decompiled? Yes. The SWF is still there. There are softwares that can easily extract the SWF out. Compression may make the SWF not readable by hex-editor. Is this a protection? The compression algorithm is similar to zip. It is easily decompressed.
如果把swf文件(邦定播放器)轉換為可執行的exe文件,這樣的exe文件會被破解么?答案是肯定的,swf文件仍然在那裡。有一些軟體可以輕而易舉的把swf文件提取出來。壓縮也許能讓swf文件無法被十六進制編輯器打開,這樣能起到保護作用么?壓縮演算法基本與zip演算法類似(可以有相應的解壓縮演算法)。所以,仍然容易破解。
FLASM AND THE P-CODE
==FlASM和P-CODE==
Then in the era of Flash 5, two popular tools appear. The free "Flasm" and the commercial "ASV 2.0". Flasm is "Flash asm". It interpretates the byte code in the SWF into understandable short codes (p-codes).
早在Flash5.0的時代,有兩個非常流行的工具。免費的「Flasm」和商業版的「ASV 2.0」。Flasm其實就是「flash asm」(Flash+匯編),他能夠把swf文件的位元組全部轉換為匯編短碼(p-code)
For example, "a=3" is displayed as "push 'a', 3", "setVariable";
The byte-codes in the SWF is "96 08 00 00 61 00 07 03 00 00 00 1D"
比如,「a=3」被轉換為「push 'a', 3", "setVariable 」
swf對應的位元組碼為「96 08 00 00 61 00 07 03 00 00 00 1D」
This is an in-valuable tool if we want to study the "structure of SWF format".
如果我們要學習「swf文件的結構」,這是一個非常不錯的工具。
Programmers like to develop software by high level language, such as C, C++. But, when something needs efficience severely, they incorporate low level assembly codes in it. So, sometimes, authors adopt Flasm to write low level p-codes to add efficiency.
(大多數)程序員們都喜歡使用高級語言,比如,C,C++。但是,當某一些(部分、工序)對效率又非常苛刻的要求時,他們(程序員)喜歡參入一些匯編代碼。所以,設計者採用Flasm來編寫低級的p-codes以提高效率。
So, Flasm has a power to edit the actionscript in the SWF. You can see examples how they use this optimization technique to improve the 3d codes. However, malicious users can "edit" the SWF. Any lock in the SWF can be easily removed. We don't need a "key" to open the lock. We just remove the lock.
所以,Flasm有一種編輯swf中as腳本的能力。你可以發現有時他們(設計師)用這種優化技術來優化3D(引擎相關的)代碼。然而,一些不懷好意的用戶就可以藉此「編輯」swf。swf中的任何掩飾都能輕易地(被Flasm)移去。我們作的工作甚至是直接將這些障礙挪走,而並非(再花時間)破解它們。
Here is a common and well known technique to protect our movie from being stolen and shown on other domain. We script a check for _url. If the _url is not our domain, then we disable the functions and display a message "You are thief". However, it is easy to remove this script by Flasm. To crack this protection, it takes not more than 1 minute.
這里有一種非常常見的技術來防止我們的swf被其他域名(即網站、站點)盜用。我們設置一個_url檢測機制,如果_url檢測機制檢測到swf不在我們的域名播放,那麼我們就禁用所有的功能,並且顯示一條信息「你是一個小偷!」。然而,有了Flasm之後,就非常容易移出這段(檢測_url值)的代碼。不出一分鍾,我們就可以破解這種swf了。
aw附:也許很多新手並不熟悉「_url」,我把幫助文檔中的一段簡潔放在這里,一目瞭然。
MovieClip._url
可用性
Flash Player 4。
用法
my_mc._url
說明
屬性(只讀);獲取從中下載影片剪輯的 SWF 文件的 URL。(即,如果swf文件在"http://www.awflasher.com/test.swf"那麼我就會返回這個字元串)
ACTIONSCRIPT VIEWER AND "void (a)<=b>"c" || 0(!1 && !0)"
腳本勘測器(著名的asv)與"void (a)<=b>"c" || 0(!1 && !0)"
ASV can extract symbols out, so the sound, shape and bitmaps can be stolen.
asv可以(從swf中)提取任何元件,因此,所有的聲音、形狀(矢量圖)和點陣圖會被盜用。
It also extracts the actionscript byte codes. ASV 2 tries to match the p-codes to high level actionscript. When it meets "push 'a', 3", "setVariable"; it display "a=3", a language which is the same as actionscript. However, we can easily crash it by creating codes that do not match a pattern. The codes created by Flasm are easily off the standard pattern, so ASV won't get a match. The famous script that crashes ASV 2 is ";" This is a jung-codes. It does nothing but confuse the ASV 2.
它(asv)還可以提取as腳本。asv2甚至能夠把p-code還原成高級as腳本!
當它遇到 "push 'a', 3", "setVariable" 時,就會顯示"a=3",這完全與我們的as腳本一致!
然而我們也可以用增加(干擾)代碼的方法輕易地迴避asv。用Flasm非常容易增添不規范的代碼,這使得asv無法匹配破解。很著名的擾亂代碼是分號「;」。它除了給asv製造麻煩,什麼實際作用也沒有。
However, when the protection scripts are well known, the author of ASV (Burakk) of course won't let it go. The protection technique did not last long before ASV 3.
然而,當代碼的保護措施逐漸傳開之後,asv的作者Burakk(burak.com)顯然不會「坐以待斃」。這種保護方法也在asv3出現之後失效了。
BOOMING OF DECOMPILERS
轟炸破解者
Then the era of MX comes. Penetration rate of Flash dooms. Many decompilers appear.
MX的時代來到了。???很多破解軟體涌現了出來(aw附:其中我個人最反感的就是國內XX大學XX軟體研究院搬asv的XX破解軟體,而且完全針對設計師的原創聲音和圖形!)
ASV 4 is the present version. It displays not only matched actionscript. It also display p-codes if there is no matches. If it gets trouble to interpretate p-codes, it displays the byte codes in the SWF. It also display the offset in the SWF file. This means that, it never "fails". It wont crash because at least it can display "byte codes", the byte in the SWF.
asv4是目前的(最新)版本。它不但可以顯示匹配的腳本,還可以顯示不匹配的p-codes。如果他遇到無法解釋的p-codes,他就會顯示swf的二進制代碼。他甚至還可以顯示swf文件的偏移。這意味著,它從不「失敗」。再惡劣的情況,它也能為我們顯示swf的二進制位元組。
Even more, Flash MX2004 gives out javascript API to create "FLA" file. That makes it able to create a FLA file that can export to that SWF. Everything is there now.
更甚,Flash MX2004設置了JavascriptAPI來創建(編譯)「fla」文件。這使得我們能自主地把fla文件編譯成為相應的swf。所有的東西都浮出水面!
Let alone the sound, shape and bitmaps. Thief does not like these assets because it is so obvious to be caught. Thief likes to steal "actionscript". Because there are hidden passwords. Because there are scripts that block the normal playing of this movie. Because there are functions they can modify and use with less risk of being caught.
我們除去聲音、形狀和點陣圖不談,「剽竊者」們對這些顯而易見的資源不感興趣。他們更喜歡找出腳本代碼(演算法)。因為這些代碼中可能有某些密碼、或者對影片播放的控制。而且,某些演算法可以被他們(剽竊者)修改來投入應用,這樣他們被「捉住」的可能性就更小了!
If ASV can only decompile the script into byte codes, then it is useless to most thief. So, many try their best to prevent ASV 4 to decompile the script into actionscript or p-code. In fact, for most other decompiler, when the script fails to match patterns, the decompiler crashes.
如果asv只能把腳本破解成為二進制代碼,那麼它對大多數剽竊者而言是沒有意義的。所以,很多人想方設法地來保護自己的代碼,從而使得ASV4把它們(代碼)解釋成為二進制代碼而非腳本或者p-codes。事實上,大多數沒什麼技術含量的破解軟體在遇到這種情況下就會出現「破解崩潰」。
Here are techniques in the history. The protection effect of each technique last only for a short while and expires soon after it is "published" in the internet and revealed to the decompiler group.
這些歷史上所有的保護的技術,在他們「公布」(或者因某種原因用諸於眾,比如發布在互聯網上)之後,都難逃厄運。
⑹ linux中 Redhat Centos ubuntu Fedora 的區別
1.都說redhat是linux的代名詞,也就是說redhat的linux被大多數人認可。
可是:RedHat.Enterprise.Linux.5 與 redhat linux 9.0 還有redhat fedora core 三者之間的具體關聯和區別是什麼? centos又是從哪冒出來的,我們公司用的就是centos,這個好嗎,好在哪裡?
redhat成名的原因:歷史悠久,1993年就開始做linux;公司運營,提供完整的解決方案,更專業,而不像debian是社區形式的;獨創rpm包,使linux安裝軟體變得非常簡單,免去編譯的麻煩。
redhat在發行的9.03版之後,就不再延續以前的開發代號,而是以RedHat.Enterprise.Linux命名(簡稱rhel)即redhat企業版,現在已經開發到5,rhel好像是從3開始,需要客戶購買license,即想獲得系統的後續更新與服務是需要付費的(可以免費更新60天,而且如果不想享受更新,系統也是可以免費使用的。),而其個人桌面免費版交給redhat社區在做,這個社區是可以獲得redhat公司支持的,這個社區發布的版本就是fedora(直譯也是一種男士帽子),一年兩個版本,現在已經發行到10,fedora一直是rhel的一個實驗場,每個版本所採用的軟體,內核與庫版本幾乎都是最新的,因而配置起來有些困難,不過基於redhat的基礎,使用fedora的人仍然占很大的比例。centos是將rhel再次編譯,去掉redhat標志,並有社區發布的linux版本,所以,centos與rhel幾乎是沒有區別的,主要的區別就是不用付費即可使用,從rhel的角度來說,centos是非常適合企業使用的。
2.據我所知,redhat是linux的發行廠商,除此之外還有ubuntu,debian,suse,redflag等,既然linux是免費的,為什麼會有這么多公司專門做linux的發行版本呢,不賺錢為什麼還要做呢?而且我覺得他們肯定能從中獲取利益的,但我不知道這其中的貓膩。明白的朋友給我多講講這個。
如果發行版本是可以盈利的,那linux內核的作者linus能得到什麼好處呢?
linux內核的每次升級都是linus這個最初的作者一直在搞的嗎?每次升級花費的人力物力,對這個作者有何經紀上的回報嗎?
linux盈利方式:linux個人桌面版是可以免費獲得並使用的,但像redhat企業版,redflag紅旗企業版,是需要購買服務的,企業版主要針對的是銀行,政府,或者大型企業這種對於穩定性和安全行要求較高的行業,比起昂貴的unix,linux還是有銷路的。個人桌面版也並不是無利可圖的,至少很多linux社區不會賠錢,因為為社區工作的人都是分布在世界各地的,開發linux也是利用業余時間來做的,不為了獲得報酬,只為了一份執著而工作,社區的linux版本發布後,用戶可以購買linux安裝光碟,雖然光碟很便宜(比起微軟的系統),但由於成本幾乎為0,所以還是有盈餘的。再有,現在市面上有很多預裝ubuntu的筆記本銷售,比如dell,那麼戴爾肯定要付給ubuntu費用的,當然,這個費用要比預裝vista低得多。
現在linux的內核應該是GNU在做,而不是linus。
3.上面說了這么多發行版本的linux,請問哪幾種比較好,好在哪裡?是不是根據linux的用途不同,選擇linux的版本也應有所不同呢?麻煩具體說說各個版本的長處與缺點。
redhat企業版(rhel),適合企業使用,出色的穩定性和兼容性表現在每個版本都使用了比較成熟的庫與內核,並且對一些大型的EDA軟體都預先進行了測試安裝,比如cadence,所以比較適合做伺服器和工作站,但不適合當個人桌面,因為不購買license,就不能享受到豐富的更新,而且由於內核與庫都比較保守,有點跟不上linux的發展速度,以至於很多娛樂軟體安裝起來非常困難。centos與rhel類似。
fedora,前面已經說了,這個版本每次發行都比較冒進,以至於很多驅動程序都不能很好的配置,但最新的fedora10還是很保守和穩定的。yu軟體源基於rpm包管理,安裝軟體很方便。
ubuntu,基於debian,桌面環境以gnome為主,是目前最流行的linux個人桌面,它的優點是配置起來非常簡單,安裝完系統之後,只要硬體不是太新,基本不用進行其他配置,硬體都可以識別並安裝好驅動。而且其apt更新源伺服器中的軟體非常豐富,只要打一條命令,就可以自動從網路下載安裝所需軟體。ubuntu安裝方便,甚至於可以使用wubi將linux安裝在windows分區。ubuntu還有很多衍生版本,包括Kubuntu(桌面採用KDE,較為華麗),xubuntu(採用xfce,要求配置較低),eubuntu(面向兒童和教育),用戶可以根據需求,偏好,和硬體配置進行選擇。
suse,被譽為最漂亮的linux發行版本,當然,其本質和其他版本都是一樣的,只是在窗口美工上開發者下了一定功夫,而且獲得華麗的同時當然也需要付出更高的系統資源佔用。其他的linux版本通過一些改造,完全是可以實現suse的效果的。
redflag,中科院開發的linux版本,主要面向政府用戶,其個人桌面版免費,這個版本的美工上與windows非常接近,是使用者的入門難度降低,但實際上桌面也是基於KDE的,很平常。
puppy,一個非常小巧的linux版本,安裝鏡像90多M,卻包括了圖形桌面,瀏覽器,辦公等常用的軟體,系統運行時都存在與內存中,據說安裝在U盤中的puppy,在系統啟動後,可以將U盤拿掉,系統依然可以運行。
4.我對linux的簡單了解,各個發行版本使用的linux內核都是同一個。只不過可能隨著各版本的發行時間不同,採用的內核版本會不同。不知道理解的對嗎?
linux的內核目前還在飛速的發展,現在常見的是2.X版本,X為奇數,為不穩定版,x為偶數為穩定版,比如rhel採用的2.4和目前最新的,很多個人桌面採用的2.6。不同的linux發行版本採用的內核不盡相同,比如fedora一般都是採用最新的內核。
5.之所以會有這么多問題,是因為我此時的大腦對linux的理解非常混亂,對於操作系統的理解只有正版的windows和盜版的windows的簡單理解。暫時先不談盜版問題,就正版而言,我知道linux部分版本是收費的,大部分可能是免費的,為什麼會出現收費與免費兩種現象? 作為企業級的伺服器應用,免費版本的linux是否可以應付得了,免費的是不是比收費的性能安全上要差好多????具體說說免費和收費的linux,談談二者之間的區別。
前面已經提到一些了,至於免費版,如果採用較為保守的成熟的版本,穩定性應該是可以保證的,安全方面,不是很了解,從我單位使用的rhle來看,與普通linux個人桌面並無大的區別。
6.OpenSource與Free:收費的linux版本,是不是就不算開源的操縱系統了呢?收費的linux肯定不會開源,是不是?因為如果開源了,人家都知道你的源代碼了,開發商就沒辦法收費賣他們的發行版本的linux了。不知道理解的對嗎?請具體說說"開源與免費"
拿redhat來說,他們既有收費的rhel,也有反編譯rhel得到的並且是開源的centos,使用那個完全取決於用戶自願。這樣來看,開源與免費的區別僅在於開源的東西,在遵守gnu協議的基礎上,任何人都可以得到程序的源代碼,並可以自己修改,並可以再發布;而免費的就只能免費使用,而不可修改了。
7.如果可以的話,再介紹一下linux的學習方法,和linux好的入門書籍。在日常工作當中,linux的應用會有很多角色,我主要是想學習LAMP架構下的WEB開發,不知道應該側重學習linux哪些應用?哪些是LAMP程序員必須熟練掌握的LINUX技術,在求職應聘LAMP程序員的職位,一般面試考核linux方面都是哪些技能?
(不懂)
請參考
⑺ 函數產生的社會背景
歷史表明,重要數學概念對數學發展的作用是不可估量的,函數概念對數學發展的影響,可以說是貫穿古今、曠日持久、作用非凡,回顧函數概念的歷史發展,看一看函數概念不斷被精煉、深化、豐富的歷史過程,是一件十分有益的事情,它不僅有助於我們提高對函數概念來龍去脈認識的清晰度,而且更能幫助我們領悟數學概念對數學發展,數學學習的巨大作用.
(一)
��馬克思曾經認為,函數概念來源於代數學中不定方程的研究.由於羅馬時代的丟番圖對不定方程已有相當研究,所以函數概念至少在那時已經萌芽.
��自哥白尼的天文學革命以後,運動就成了文藝復興時期科學家共同感興趣的問題,人們在思索:既然地球不是宇宙中心,它本身又有自轉和公轉,那麼下降的物體為什麼不發生偏斜而還要垂直下落到地球上?行星運行的軌道是橢圓,原理是什麼?還有,研究在地球表面上拋射物體的路線、射程和所能達到的高度,以及炮彈速度對於高度和射程的影響等問題,既是科學家的力圖解決的問題,也是軍事家要求解決的問題,函數概念就是從運動的研究中引申出的一個數學概念,這是函數概念的力學來源.
(二)
��早在函數概念尚未明確提出以前,數學家已經接觸並研究了不少具體的函數,比如對數函數、三角函數、雙曲函數等等.1673年前後笛卡兒在他的解析幾何中,已經注意到了一個變數對於另一個變數的依賴關系,但由於當時尚未意識到需要提煉一般的函數概念,因此直到17世紀後期牛頓、萊布尼茲建立微積分的時候,數學家還沒有明確函數的一般意義.
��1673年,萊布尼茲首次使用函數一詞表示「冪」,後來他用該詞表示曲線上點的橫坐標、縱坐標、切線長等曲線上點的有關幾何量.由此可以看出,函數一詞最初的數學含義是相當廣泛而較為模糊的,幾乎與此同時,牛頓在微積分的討論中,使用另一名詞「流量」來表示變數間的關系,直到1689年,瑞士數學家約翰·貝努里才在萊布尼茲函數概念的基礎上,對函數概念進行了明確定義,貝努里把變數x和常量按任何方式構成的量叫「x的函數」,表示為yx.
��當時,由於連接變數與常數的運算主要是算術運算、三角運算、指數運算和對數運算,所以後來歐拉就索性把用這些運算連接變數x和常數c而成的式子,取名為解析函數,還將它分成了「代數函數」與「超越函數」.
��18世紀中葉,由於研究弦振動問題,達朗貝爾與歐拉先後引出了「任意的函數」的說法.在解釋「任意的函數」概念的時候,達朗貝爾說是指「任意的解析式」,而歐拉則認為是「任意畫出的一條曲線」.現在看來這都是函數的表達方式,是函數概念的外延.
(三)
��函數概念缺乏科學的定義,引起了理論與實踐的尖銳矛盾.例如,偏微分方程在工程技術中有廣泛應用,但由於沒有函數的科學定義,就極大地限制了偏微分方程理論的建立.1833年至1834年,高斯開始把注意力轉向物理學.他在和W·威伯爾合作發明電報的過程中,做了許多關於磁的實驗工作,提出了「力與距離的平方成反比例」這個重要的理論,使得函數作為數學的一個獨立分支而出現了,實際的需要促使人們對函數的定義進一步研究.
��後來,人們又給出了這樣的定義:如果一個量依賴著另一個量,當後一量變化時前一量也隨著變化,那麼第一個量稱為第二個量的函數.「這個定義雖然還沒有道出函數的本質,但卻把變化、運動注入到函數定義中去,是可喜的進步.」
��在函數概念發展史上,法國數學家富里埃的工作影響最大,富里埃深刻地揭示了函數的本質,主張函數不必局限於解析表達式.1822年,他在名著《熱的解析理論》中說,「通常,函數表示相接的一組值或縱坐標,它們中的每一個都是任意的……,我們不假定這些縱坐標服從一個共同的規律;他們以任何方式一個挨一個.」在該書中,他用一個三角級數和的形式表達了一個由不連續的「線」所給出的函數.更確切地說就是,任意一個以2π為周期函數,在〔-π,π〕區間內,可以由
�表示出,其中
��富里埃的研究,從根本上動搖了舊的關於函數概念的傳統思想,在當時的數學界引起了很大的震動.原來,在解析式和曲線之間並不存在不可逾越的鴻溝,級數把解析式和曲線溝通了,那種視函數為解析式的觀點終於成為揭示函數關系的巨大障礙.
��通過一場爭論,產生了羅巴切夫斯基和狄里克萊的函數定義.
��1834年,俄國數學家羅巴切夫斯基提出函數的定義:「x的函數是這樣的一個數,它對於每個x都有確定的值,並且隨著x一起變化.函數值可以由解析式給出,也可以由一個條件給出,這個條件提供了一種尋求全部對應值的方法.函數的這種依賴關系可以存在,但仍然是未知的.」這個定義建立了變數與函數之間的對應關系,是對函數概念的一個重大發展,因為「對應」是函數概念的一種本質屬性與核心部分.
��1837年,德國數學家狄里克萊(Dirichlet)認為怎樣去建立x與y之間的關系無關緊要,所以他的定義是:「如果對於x的每一值,y總有完全確定的值與之對應,則y是x的函數.」
��根據這個定義,即使像如下表述的,它仍然被說成是函數(狄里克萊函數):
f(x)= 1���(x為有理數),
0���(x為無理數).
��在這個函數中,如果x由0逐漸增大地取值,則f(x)忽0忽1.在無論怎樣小的區間里,f(x)無限止地忽0忽1.因此,它難用一個或幾個式子來加以表示,甚至究竟能否找出表達式也是一個問題.但是不管其能否用表達式表示,在狄里克萊的定義下,這個f(x)仍是一個函數.
��狄里克萊的函數定義,出色地避免了以往函數定義中所有的關於依賴關系的描述,以完全清晰的方式為所有數學家無條件地接受.至此,我們已可以說,函數概念、函數的本質定義已經形成,這就是人們常說的經典函數定義.
(四)
��生產實踐和科學實驗的進一步發展,又引起函數概念新的尖銳矛盾,本世紀20年代,人類開始研究微觀物理現象.1930年量子力學問世了,在量子力學中需要用到一種新的函數——δ-函數,
即�ρ(x)= 0,x≠0,
∞,x=0.
且
��δ-函數的出現,引起了人們的激烈爭論.按照函數原來的定義,只允許數與數之間建立對應關系,而沒有把「∞」作為數.另外,對於自變數只有一個點不為零的函數,其積分值卻不等於零,這也是不可想像的.然而,δ-函數確實是實際模型的抽象.例如,當汽車、火車通過橋梁時,自然對橋梁產生壓力.從理論上講,車輛的輪子和橋面的接觸點只有一個,設車輛對軌道、橋面的壓力為一單位,這時在接觸點x=0處的壓強是
��P(0)=壓力/接觸面=1/0=∞.
��其餘點x≠0處,因無壓力,故無壓強,即�P(x)=0.另外,我們知道壓強函數的積分等於壓力,即
�函數概念就在這樣的歷史條件下能動地向前發展,產生了新的現代函數定義:若對集合M的任意元素x,總有集合N確定的元素y與之對應,則稱在集合M上定義一個函數,記為y=f(x).元素x稱為自變元,元素y稱為因變元.
��函數的現代定義與經典定義從形式上看雖然只相差幾個字,但卻是概念上的重大發展,是數學發展道路上的重大轉折,近代的泛函分析可以作為這種轉折的標志,它研究的是一般集合上的函數關系.
��函數概念的定義經過二百多年來的錘煉、變革,形成了函數的現代定義,應該說已經相當完善了.不過數學的發展是無止境的,函數現代定義的形式並不意味著函數概念發展的歷史終結,近二十年來,數學家們又把函數歸結為一種更廣泛的概念—「關系」.
��設集合X、Y,我們定義X與Y的積集X×Y為
��X×Y={(x,y)|x∈X,y∈Y}.
��積集X×Y中的一子集R稱為X與Y的一個關系,若(x,y)∈R,則稱x與y有關系R,記為xRy.若(x,y)R,則稱x與y無關系.
��現設f是X與Y的關系,即fX×Y,如果(x,y),(x,z)∈f,必有y=z,那麼稱f為X到Y的函數.在此定義中,已在形式上迴避了「對應」的術語,全部使用集合論的語言了.
��從以上函數概念發展的全過程中,我們體會到,聯系實際、聯系大量數學素材,研究、發掘、拓廣數學概念的內涵是何等重要.
⑻ 現在最流行的編程語言是什麼初學者應該學哪一門
今天這篇文章篩選出一些主流編程語言,對語言特性與環境稍作介紹,希望可以幫助到一些編程初學者與有興趣學習編程的朋友,供大家了解與選擇,少走彎路。Java、C++、C#、python、PHP……當然,這些僅是我推薦的。我還將介紹其他主流語言與適於初學者學習的編程語言與一些編程學習指導。
Java,面向對象、安全、跨平台、強大穩健、流行的程序設計語言與環境。由 Sun 公司開發,目前由 Java Community Process 控制。近些年來非常流行且穩定,未來生命周期較長。語言風格較為接近 C++ 與 C# ,而最為人熟知的便是跨平台性。Java 的跨平台性已得到了廣泛的認可,在計算機的各種平台、操作系統,以及手機、移動設備、智能卡、消費家電…均已邁入成熟的生產化。而國內的 Java 人才需求前景目前也是大好。
Java 的官方網站是 http://java.sun.com/。Java 分為 JavaSE(標准版,面向初學者與桌面開發)、JavaEE(企業版,也稱 J2EE,面向企業級開發、網路開發,包括了為人熟知的 JSP,並包含了 JavaSE 的所有內容)、JavaME(微型版,為手機、PDF、機頂盒、消費家電等嵌入設備開發),目前還有正在發展的 JavaFX(一種富Internet 應用程序開發的腳本語言)。Java 的運行環境是 JRE,開發環境是 JDK,均可以在其官方站點下載。開發平台的構建較為簡單,開發者下載並安裝 JDK 即可,目前 JDK 最新版本是 1.6.15。
最重要的——它們都是免費、開源的。而 Java 不需要指定集成開發環境(IDE)——JDK 和記事本足以完成。不過在此我推薦使用 Notepad++ 或 UltraEdit 作為代碼文本編輯器;Eclipse 與 NetBeans 這兩款免費而又強大成熟的 Java 集成開發環境(IDE)。
最近也在進一步學習中開始寫 Java 的編程書籍,在此透露一下,它是一本內容全面、語言生動、較快入門、注重實例、分享經驗、提供編程思維與設計模式的 Java 編程書。這方面我需要一段時間的努力後,才能與您見面。不過最重要的,這本書將是免費的。在保證專業性與內容質量的同時,這本書將提供免費的閱讀與下載。
C++,應用最廣泛、成熟、強大、復雜、流行的程序設計語言。你目前正在使用的 Windows 或 Linux 操作系統的大部分內容均出自 C++ 的程序員之手,C++ 非常強大——近乎無所不能,而 C++ 代碼經過編譯後將成為計算機的二進制代碼的可執行程序,所以在兼容性、性能上均為優秀。當今如果你學習 C++,再配合 WIN32SDK、MFC 或是 .NET CLR,絕對是開發桌面程序的首選語言。從名字可以看出,C++ 改進自 C 語言,特別是面向對象方面的擴展,但學習 C++ 可以直接學習,不需要且不建議先學習 C 語言基礎,可以把 C++ 當作一門全新的編程語言。
如在 Windows 平台下,C++ 首選的集成開發環境(IDE)自然是 Visual C++,它包含在 Microsoft Visual Studio 之中,最新版本是 2008。你可以選擇微軟官方提供的 Visual Studio 2008 專業版——這是最好的選擇!微軟提供90天的試用版,安裝鏡像較為龐大,與正式版沒有區別,同時包含了 MSDN Library(最權威的開發文檔),唯獨只是授權序號的區別。下載安裝後即可使用。當然,你也可以進行簡單的操作將其變為正式版。不過在此不是鼓勵大家使用盜版軟體,如在非商用的情況下,這種手段是可行的,也會加快你的學習進度與質量。此外微軟也提供了 Visual Studio 2008 速成版,又稱為學生版,它是免費的,如僅是學習完全足夠。
除了微軟的 IDE,你還有其他的選擇。在 Windows 下搭建 Eclipse + CDT + MinGW,Linux 和 Unix 下可以使用 Eclipse + GCC++,這些都是開源、免費的。或是更基本的……你主需要一個記事本與 C++ 編譯器,當然我不推薦這樣做。
C#,讀作 「C Sharp」。微軟的 C# 就好似是 C++、Java、Delphi 與 Visual Basic 的結合體,是新興、易學、強大的程序設計語言,它更像 Java——完全面向對象,開發與運行都在 .NET Framework 環境中。使用微軟強大的 Visual Studio 集成開發環境,這是快速開發 Windows 平台桌面應用程序的最好選擇。聽起來有點像 VB?不過 C# 比 VB 可強大多了。不過 C# 編譯後的程序如 Java 一樣是中間語言,運行程序的計算機需要安裝 .NET Framework 運行環境,不算大也不算小。但在微軟的 .NET 推出多年後的今天,它還沒有較好的普及開,可能對你的程序傳播會有一定影響。同時 C# 也可以開發 ASP.NET 的動態網頁程序,這是曾經風火多年的 ASP 的替代產品。
開發 C# 程序,使用微軟的 Visual Studio 是最好的,也是幾乎唯一的選擇。同 Visual C++ 的環境搭建基本雷同,在此不再復述。目前 .NET 環境已經發展到 3.5,C# 已經發展到 C# 4.0,學習 C# 請選擇一本實時性、專業性、全面性的好教程。微軟的 Visual Studio 2010 近期也將發布,屆時將搭載更為強大的 C# 語言與集成開發環境(IDE)。
Python,新興的面向對象腳本語言。說其「新」其實並不是如此,Python 已經具有十多年的歷史,且已有非常多的開發者與使用者,最著名的就屬 NASA(美國國家航空航天局)。其語言特點是語法清晰簡潔,便於學習使用。而 Python 作為腳本語言,跨平台性非常好,幾乎在所有操作系統中可以使用,在 Linux 操作系統中便大多原生支持 Pyhton。實質上這款語言非常優秀,近年來用戶量飛速增長,可以進行桌面程序開發、動態網頁開發、數據運算等。
不需要擔心商業授權、付費這些額外的問題,Python 本身就是免費軟體、自由軟體。在 Python 官方網站 http://python.org/ 你可以下載適用於您操作系統的 Python 開發與運行環境。需要注意的是目前 Python 流行版本有 Python 2.6 與 Python 3.1,2 與 3 的區別較大,雖沒改變本質,Python 3 但並不向下兼容。當然這里我們建議你學習 Python 3,它很快就會被流行。
Ruby,較 Python 來說更新興的面向對象腳本語言,由日本人開發。實質上它與 Python 是同類,具有共同的一些特性、腳本語言、面向對象、免費開源、簡潔強大、跨平台性,所以在此就不多作介紹。Python 與 Ruby 都是目前的新興流行腳本語言,不過它們作為兩款出生與成長不同的孩子,終究不同,選擇哪一個還得取決於你的應用需要。在 Ruby 的官方中文站點獲取更多信息,下載與安裝 Ruby 開發與運行環境。
PHP,幾乎你現在看到的像是門戶網站、博客、論壇…它們除去華麗的外表外,網頁內部的程序與數據處理都離不開動態網頁技術,而 PHP 正是目前最流行、強大、穩健的動態網頁開發腳本語言。它的語言風格類似 C、Perl,可以集成在 HTML 網頁代碼只中,也遵循面向對象,並且易於學習。其實 PHP 還可以開發桌面應用程序,不過因為它的優秀,已主要作為了動態網頁開發語言。如果你要學習開發 Web 應用程序,或是今年流行的 Web2.0 站點,PHP 絕對是你的首個選擇。因為國內有相當多數量的 PHP 開源程序與學習資源,學習 PHP 的道路一路都會平坦。
因為是動態網頁開發,所以開發 PHP 的 Web 程序需要搭建環境——需要同時安裝一個 HTTP 伺服器與 PHP 解析程序,大多情況下你還要一個資料庫伺服器例如 MySQL、PostgreSQL。目前最流行的開發環境組合就是 Linux + Apache HTTP Server + MySQL + PHP,簡稱為 LAMP,Linux 操作系統大多均帶有了這些程序。而如果在 Windows 環境下,你可以選擇自行搭建各種匹配的環境,甚至讓 IIS 作為 PHP 的 Web 伺服器。或是想圖省事,你可以下載安裝一個 XAMMP,PHP 環境搭建一步到位!目前國內外大部分數據服務商(IDC)都提供了完美支持 PHP 的虛擬主機,你不用擔心程序開發後的運行環境問題。開發與學習推薦的 IDE 有 Zend Studio、Eclipse 甚至是 Dreamweaver。
Perl,最具成熟、靈活性的腳本語言。學習較為容易,但卻非常強大。Python 語言的許多特性便是有借鑒自 Perl。Perl 擁有一個大型的第三方代碼庫——CPAN,極大的方便於程序人員的開發和使用。在官方網站下載 Perl 環境,所有的 Linux 系統都幾乎集成了 Perl。腳本語言的開發都推薦在 Notepad++ 等高級文本編輯器中完成。
Pascal,曾經風靡全球的高級程序設計語言,特點是語言簡明、結構嚴謹、較高靈活性,名氣不下於 C++。前幾年流行的 Delphi(一種 Windows 應用程序快速集成開發環境)使用的便是 Pascal 語言,國際信息學奧林匹克、中國信息技術奧林匹克競賽的編程項目主要語言。如今 Pascal 語言在實際應用領域已逐漸被人舍棄,但依然是非常適合初學者的編程語言。你可以下載使用 Free Pascal 這個目前最好的 Pascal 編譯環境,也可以使用 Deiphi。
Basic,或稱為 Basic 系列語言,主要有 QuickBasic、QBasic、VBScript、Visual Basic、Visual Basic .NET,甚至有適於兒童學習的 Small Basic。如今 PC 計算機中流行中的 Basic 語言,正是鼎鼎大名的比爾·蓋茨先生編寫,但最初的 Basic 語言來自上世紀60年代兩位美國計算機科學家。
上世紀末期與本世紀初期,Visual Basic 作為一款簡單易學的 Windows 應用程序開發環境,曾在中國被大量學習使用,現在你在書店還可以看到許多 Visual Basic 考試書籍與題目的身影,不過這些已經是早已淘汰的 VB6 了,我國的計算機等級考試大綱一直都存在嚴重問題(這是我的想法)。當時被流行的 VB6 讓很多人快速的邁入了程序員的步子,但 VB6 因為並不強大,並不能有效開發大型程序。VB 的成功並不在於改進後的 Basic 語言本身,而應是優秀的集成開發環境(IDE)與開發 Windows 程序的便捷特性性。
微軟公司在2002年推出了 Visual Basic .NET,正式推出 .NET 環境並讓 VB 作為首批成員。如今的 Visual Basic 已經非常強大,但已完全的依賴於 .NET Framework 環境,可以開發 ASP.NET 程序。而且所有優秀特定均已被 C# 吸收,它們如今的差別並不大。我更傾向推薦有意學習 VB 的朋友去學習 C#。
匯編語言,又稱組合語言,它是一種低級計算機語言,直接與計算機硬體底層交互。在上世紀 C、Pascal 等高級編程語言出現之前被廣泛使用,如今只用於一些底層應用——如硬體驅動程序的開發。匯編語言的難度非常高,使得早期的軟體開發工作只有一些「天才級」或「怪才級」的人才能勝任。如今匯編語言基本上不用於軟體的開發,但對於程序開發人員來說,學習匯編語言可以讓你深層了解計算機與計算機程序的原理。如今匯編語言還被國內部分大學作為必修教程,而匯編語言也會有利於程序的反編譯等工作。
好,至此目前主流的程序開發語言均已作介紹。下面是 Q&A 時間。
問:說了這么多,到底哪門編程語言適合我?我該學哪一個?
答:程序語言並不適合於人,而適用於所要開發的領域或軟體的需求。你不能光從名稱看出某一門編程語言的含義,也不能跟風——別人學什麼我就學什麼。而在於你的興趣,或是你要涉及的領域、開發的程序。如果你要開發桌面程序,那就可以學習 C++、C#、VB、Java……如果你要開發動態網頁,就可以學習 C#、VB、Java……如果你要開發手機程序,就可以選擇 C++、Java 或 C#。我提供這么多內容,最重要的便是讓你了解每一種編程語言的主要特性,而供你選擇。或者你說……「我實在不知道我要選擇哪個,我只是想學,這些特性或領域我都不了解也不在乎。」。如果你確定是如此,而如果你真的想涉及程序開發,建議你繼續稍作了解。或學習目前流行的「完全面向對象」的編程語言 Java、C# 或 Python,這三個編程語言都很優秀,這是我的推薦。而在深入學習後,你會發現了解這三門語言的其中一個,再想學其它編程語言也可以做到「觸類旁通」,很快可以入手,因為這些語言的本質都是一樣的,更何況選擇一款編程語言就可以開發出大部分這些語言都可以開發的軟體,做這些語言都可以做的事情,只是方式上的不同。
問:我想學習編程,據說要求數學頭腦或英語能力?或已經是計算機高手?
答:如果你已經是一個成年人,這些都不是問題。實際上程序開發和數學雖息息相關,但在大部分應用中對數學水平的要求並不高,初中畢業就可以,甚至小學也沒問題。而對於初學者,這些程序開發語言雖使用英文,但實際學習過程中,需要記憶的英文單詞並不多,稍作記憶和理解即可掌握,對開發者的英文沒有要求。但是!一旦你涉及到高水平的或是企業級的開發項目,會有更多你所未涉及的知識需要在技術文檔中查閱,如 API、SDK 文檔,或是 MSDN,這些文檔中有一部分內容是英文的。就例如騰訊公司招聘程序員,就會要求開發者的英文水平可以基本讀懂這些技術文檔。事實上對英文的要求就正如此,而我建議軟體開發者在平日的學習中對英文水平進行一個修煉,對以後的開發、學習、了解新技術與資訊、編程思想都會有幫助。計算機水平上沒有什麼特定要求,會打字就可以學編程。不過你需要對所開發的環境如 Windows 有了解,不然你連新建保存文檔,或是操作系統是什麼都不明白,你如何順利學習編程?不過這些並不是大問題,基本上可以迅速的學習到。
問:如何學?如何學好?如何編寫程序?
答:計算機程序的開發具有點、線、面的性質,更多的需要靈活性。第一,選擇一本好教材、好老師,掌握你所學習的編程語言的概念、基本原理、基本語法,然後逐漸深入,完成語言知識面的學習。第二,熟練編程語言後,你需要學習一種叫做設計模式的理論,與其說有助於開發,不如說是必須進行選擇與學習,培養良好的編程思維習慣。第三,我們的程序需要做的事情就是解決問題!利用掌握的知識,多練習,多實踐,多解決身邊的問題。開拓你的大腦創造力,你離編程大師只有一步之遙。學習編程語言就如學習一般顯示語言類似,掌握語言的文字、單詞、語法,多進行閱讀與訓練,然後動用你的大腦控制筆去書寫優美的篇章。
問:還有什麼要求?
答:學習程序開發,說難就難,說簡單就簡單。要明確興趣與方向,要樹立並堅定目標。學習過程中需要多努力,多練習,多問,多 Google 一下,多思考,多想如何「解決問題」!如能做到這些,真的足夠了。
⑼ 不小心把.java文件刪除了,只剩下.class文件.能不能恢復
用反編譯工具可以將.class文件反編譯為.java文件
下載地址http://www.greendown.cn/soft/11251.html
不過反編譯並不能得到和原始文件一摸一樣的java文件,會有一些不同