原创 編程基礎概念:算法及性能分析

===》點我返回目錄《=== 算法是計算機上的一系列操作,每個算法都需要佔用計算機的計算資源,我們要衡量算法的時間複雜度和空間佔用情況。 時間複雜度,我們一般用大O表示,我們會看三個指標:最壞情況下的時間複雜度;平均時間複雜度;最好情況下

原创 編程基礎概念:遞推與遞歸

===》點我返回目錄《=== 在進行計算的時候,經常會用到遞推的概念。遞推是一種用若干步可重複的簡運算來描述複雜問題的方法。通常是通過計算前面的一些項來得出序列中的當前項的值。 程序調用自身稱爲Recursive遞歸。它通常把一個大型複雜

原创 更多數學趣題:求對數

===》點我返回目錄《=== 在數學中,對數是對求冪的逆運算,如果a的x次方等於N,那麼數x叫做以a爲底N的對數(logarithm),記作x=logaN。 這是我們現代人的理解方式,而從歷史上,其實不是這樣的。1614年John Nap

原创 編程基礎概念:數據結構

===》點我返回目錄《=== 前面我們已經用程序來處理數據了,隱含地把它們的組合也涉及了,也就是說,我們要處理的並不是一個數字,也不是單個字符,而是一組數字和字符。這是一種數據之間的組合結構。 我們可以按照數據之間的關係進行分類,如果一組

原创 編程基礎概念:操作系統

===》點我返回目錄《=== 上面我們探索到了一臺理論上的計算機是什麼樣子的。爲了讓大家能使用計算機,這麼一臺裸機肯定是不行的,不能讓大家自己去管理CPU,管理內存,管理輸入輸出設備,管理程序裝載。這些底層的工作是統一的,不需要每一個使用

原创 編程基礎概念:面向對象編程

===》點我返回目錄《=== 現在的世界,大家都用面向對象編程。這是結構化編程的基礎上進一步發展出來的。以前編程的範式是數據結構+算法,後來軟件規模越來越大,於是在一個程序裏面出現了成百上千個函數過程和數據結構,程序很不容易維護。於是人們

原创 編程基礎概念:進程與線程

===》點我返回目錄《=== 對於操作系統而言,進程是整個系統的根本,操作系統是以進程爲單位執行任務。隨着技術發展,在執行一些細小任務,且本身無需分配單獨資源時,進程的實現機制依然會繁瑣的將資源分割,這樣造成浪費,而且還消耗時間,所以就有

原创 手寫一個Mini版Spring框架

前言: 我們的目標是自己動手寫一個類似於Spring的框架,包含IoC,MVC,JDBCTemplat,AOP等基礎特性。 這個框架是演示性質的,爲了學習而建,但是並不簡陋,所以是一個可以運行使用的框架。 這個框架還有一個目的,爲了引導人

原创 計算機內部探祕:統一到加法

===》點我返回目錄《=== 我們繼續深究下去,打破砂鍋問到底。 上述介紹的補碼系統粗看起來這是比較奇怪的表示,實際上不然,瞭解了幾種運算後,就會明白補碼錶示是多麼簡便。 我們來看兩個數的加減運算。a+b或者a-b。如果用我們平時數學上的

原创 計算機內部探祕:程序執行

===》點我返回目錄《=== 上面我們知道了存儲和加法實現,但是這個還不是程序,那麼一個程序是怎麼在計算機內部執行的呢? 有了前面的講解,你能猜到,還不是一堆電路在飛速幹活,這個過程好機械。這麼想就對了,計算機就是一個又笨又快的機器。通過

原创 初等數學題解:求階乘的平方根

===》點我返回目錄《=== 這個題目有點趣味,組合了前面兩個題目。 雖然內心有點疑惑,但是同古人同樣不辭辛勞的你把上面兩個題目的程序拼在一起: n=int(input("enter a number:")) result = 1

原创 計算機內部探祕:進制轉換及數據存儲

===》點我返回目錄《=== 我們生活中一直使用十進制系統,而計算機裏面一直用二進制系統。這個系統由科學巨人Leibniz萊布尼茨重新發明並提倡。他還寫過一篇文章,介紹二進制以及用它來解釋古代中國伏羲圖,以至於後來很多人認爲他從《周易》中

原创 初等數學題解:基本算術運算

===》點我返回目錄《=== 計算機從名字來看就是用來做數學計算的,起初也確實是這樣子。所以我們就先從Python做數學計算開始入手,解一下中學的數學題目。 先做點基礎知識的準備工作,看看對於數字,Python都有哪些基本運算。 寫一段程

原创 初等數學題解:求平方根

===》點我返回目錄《=== 數學裏面有很多操作是互逆的,正向操作簡單,但是逆向操作很複雜。平方的逆操作是開平方根,這個開方操作計算起來並不容易。費了我們先人很多功夫。 在中學的課本中,會講到豎式計算法。它的基本思路是這樣的: 比如115

原创 初等數學題解:化乘除爲加減

===》點我返回目錄《=== 我們知道四則混合運算加減乘除是算數的基礎,這裏面乘和除又可以通過加減來實現,所以加減是更爲基本的運算。這些我們小學就知道了,人類是這麼走過來的,計算機也是這麼走過來的。 我們先來實現兩個數的乘法,a*b,按照