原创 虛擬機字節碼執行引擎隨記(二)方法重寫與動態分派的關係

先看下面這一段代碼: public class DynamicDispatching { abstract class Animal{ abstract void run(); } class

原创 虛擬機字節碼執行引擎隨記(三)動態類型語言支持

什麼是動態類型語言?   類型檢查的主體過程是在運行期的語言就是動態類型語言。如JavaScript。   相對的,類型檢查的主體過程在編譯期的語言是靜態類型語言。如Java。 從定義中可以看出決定一個語言是不是動態語言有關鍵兩點:  

原创 虛擬機字節碼執行引擎隨記(一)方法重載與靜態分派的關係

首先,我們先看下下面這段簡單的代碼: static abstract class Human { } static class Man extends Human { } static cla

原创 給定一個數組,找出這個數組最大連續子數組的和

將這個連續子數組分爲兩部分,一個是前綴,一個是後一個元素,要使這個連續子數組最大,那麼它的前綴肯定不能爲負,不然這個前綴對即將加上的值就無意義,用一個max記錄最大值,每次當前綴加上後一個元素的時候判斷和是否大於max,大於則更新max,

原创 JAVA虛擬機(一)內存管理

一.內存分配。java虛擬機在運行的時候,將會包含以下運行時數據區域: 1.線程私有的部分: 程序計數器:可以看成是當前線程所執行字節碼的行號指示器。字節碼解釋器就是通過改變這個計數器的值來確定下一條字節碼指令。 虛擬機棧:虛擬機棧爲虛

原创 JAVA併發編程(一)

線程安全性: 當多個線程訪問某個類的時候,不管運行時環境採用何種調度方式或者這些線程將如何交替執行,並且在主調代碼中不需要任何額外的同步或者協同,這個類都能表現出正確的行爲,那麼就稱這個類是線程安全的。 無狀態對象(即這個類不包含任何域也

原创 Redis知識小記

一、單線程的redis爲什麼這麼快? 1、Redis的所有操作都在內存中; 2、Redis是單線程的,避免了線程上下文切換引起的額外性能開銷。同時,單線程避免了多線程的數據同步問題,沒有加鎖釋放鎖操作; 3、數據結構簡單,對數據結構的操作

原创 &&和&,||和|總結,位運算符總結

邏輯與: &&只要第一個爲false,就不執行第二個條件語句 &即使第一個爲false,仍然執行第二個條件語句 邏輯或 ||只要第一個爲true,就不執行第二個條件語句 |即使第一個爲true,仍然執行第二個條件語句 按位與: &:將

原创 調整數組順序使奇數位於偶數前面

輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 思路:遍歷數組,將數組中的所有奇數按順序存在鏈表一中,將所有偶

原创 二進制原碼,反碼,補碼總結

原碼:在二進制數據最高位的左面加上一個0或者1來代表符號,1代表負數,0代表正數 正數的原碼=反碼=補碼,負數如下: 反碼:在原碼的基礎上,除了符號位,其他位均取反,如 [11010101010](原碼)=[10101010101](

原创 一隻青蛙一次只能跳一階或兩階臺階,總共要跳n階,求總共有多少總跳法

思路:對於第n階,只能從n-1或者n-2階跳上來,故只能是這兩種,對於第n-1階,又只能從n-2或者n-3階跳上來,故用一個遞歸,直到第二階或第一階,實現代碼如下: public class Solution { public i

原创 旋轉數組的最小數字(非遞減數組)

思路:1、數組爲空;2、數組第一個爲最小元素;3、第一個比前面一個元素小的元素 代碼如下public class Solution { pu

原创 變態版跳臺階

青蛙一次可以跳N個臺階 思路:青蛙可以從n-1階、n-2階、n-3階......2階、1階、0零階跳上來,代碼如下:public class Solution { public int JumpFloorII(int targe

原创 返回鏈表中倒數第k個結點

思路:從第一個節點開始遍歷,將當前節點以及當前節點前面K-1個節點存儲在一個容量爲k的數組中,每往後遍歷一個節點,便將數組中所有節點前移一位,並將當前節點存儲在數組的最後一個位置,當遍歷到的節點爲Null時,數組中的第一個節點就是鏈表的倒

原创 斐波那契數列

第一項爲0,第二項爲1,以後的每項爲前兩項之和,代碼如下: public class Solution { public int Fibonacci(int n) { int first = 0;