碼農翻身之大話程式設計篇:2我是一個Java Class
然後他又說:“下一條指令” “iload_1” 於是一號抽屜的一個數40也被扔到了桶裡,從桶上面就看不到30了。
“下一條指令” “iadd” 於是他就把兩個數從桶裡取出來,做了個飛快的動作,這兩個數變成了一個數70,然後他又把70放到了桶裡。
“下一條指令” “istore_0” 於是他又把70從桶裡撈出來,放到了櫃子上編號為0的地方,之前的30就被扔掉了。我看的目瞪口呆,這貨在幹嘛? 我問他:“不是吧兩個數加起來嗎?為啥搞的這麼麻煩?”他不理我,知識繼續說“下一條指令”。我只有配合他進行下去。 java.lang.String難的悠閒,端著一杯咖啡一邊看我手忙腳亂地取指令,一邊說:“新人都這樣,彆著急,等你熟練了,閉著眼睛就搞定了,就像我一樣,你可能不知道,我們這個虛擬機器叫做基於堆疊的虛擬機器,看到那個桶沒有,其實就是個先進後出的棧啊,我們虛擬機器的所有指令其實都是對棧進行操作。” 可是我還是好氣:“這棧有什麼好啊?”旁邊的格子間java.util.Stack立刻說:“這事兒你得問我啊,怎麼說呢,主要是為了簡單,你看我們只用一個簡單的棧,就能完成所有的工作,你做的就是往棧裡扔東西(入棧),然後從最上面拿東西(出棧)就行了。不像Intel的CPU,搞了巨多的桶,每個桶只能容納一個數,他們還美名其曰七寸器,做加法的時候,先把一個數放到第一個桶,再把另一個數放到第二個桶,加起來以後的結果害的你找個桶,有些桶還不通用,這麼多桶找起來麻煩死了。” “可是我們的棧操作起來就麻煩了啊,你看一個簡單的假髮都得操作半天”,我不依不饒地說。“可是我們的指令可以優化啊,不過我不太懂” 這個遊戲我整整玩了一天,沒有現成找我的時候,我就閒著,String說的對,熟練以後簡直太簡單了。 String就不一樣了,幾乎每時每刻都有執行緒給他打電話要指令,沒辦法,String確實是虛擬機器的骨幹和經營,使用頻繁,業務純屬,忙而不亂。有時候我會看到執行緒佈置一個工作臺,而是一摞子工作臺,也是一個壓一個,執行緒們都很老實,永遠在最上面那個工作,從來都不會先幹下面的活。
我問java.util.Stack:“這些工作臺也是棧吧”“猜得不錯,學名叫做Java棧,每個執行緒都有一個,其中的每個工作臺你都看過了,學名叫做棧幀,知道不?每個臺子都代表一個方法呼叫,這一羅工作臺就是方法呼叫方法導致的啊” 確實是,因為我發現一旦呼叫新方法,就會立刻形成一個新的工作臺,壓在老的上面。方法呼叫完成後,棧頂的工作臺就銷燬了,執行緒會在底下的工作臺繼續機械的幹活。 第四回 快樂假期 第二天,-x3704又問我要指令,我有點生氣:“你就不會記住嗎?”他說:“我可不能記住,萬一你被重新裝在了,指令變了怎麼辦?” 我告訴他指令是“iload_0”,他剛把資料扔到桶裡,古怪的事情發生了,神獸敏捷的0x3704突然好像凝固了一樣,不動了。 只聽到String歡呼:“遇到斷點了,碼農開始除錯了,我們放假了!” “除錯?什麼是除錯?” “就是碼農會單步,手工執行這些指令,他們慢死了,可能一秒才能執行一步,由於我們的時間比他們快得多,他們的一秒,簡直就是我們的只幾天,走出去玩去” “出去玩?能上哪玩?” “我們去找我們new出來的物件玩去”我想到了之前聯絡過我的物件[email protected],想著去看看也不錯。 這個叫做堆的大樓更加擁擠,全是人,String的物件當然最多,String類左右逢源,不停地打招呼,從我創建出來的Account物件幾乎找不到。 一隊全副武裝的士兵在不停地巡邏,時不時地吧物件拉出來,塞到車裡去。 “這是在幹嘛啊”我問String類。“這些熱那叫清理著,專門清理沒有用的物件,你看,車裡那個不是[email protected]” “啊?昨天我還和他聯絡,她怎麼會沒用了呢?” “很可能他只是個方法的區域性變數,方法結束之後,就沒人飲用了,拜拜佔用空間,你看這樓太擁擠了,如果不清理,很快就會住滿,系統崩潰,out of memory了” “那這個樓就不能蓋得更高點嗎?”我有點可憐這些被回收的物件們。 “樓有多高,是由碼農們決定的,他們在啟動虛擬機器的時候就會制定引數。” “那士兵怎麼知道誰有沒有用?” “引用計數唄,如果物件被使用,計數就會增加,不用的時候就會減少,如果時0,那就可能被清理了。” “那我們會被清理掉嗎?” “我應該不會,但是你時有可能的。”我當然明白,String時核心員工,而我只不過是一個外邊載入過來的一個類而已,不過我也確實有點想我的家了。 果然,又過了十天,0x3704才動彈了一下,問我要第二條指令。我告訴了他“iload_1”接下來又是十天的長假。 第五回 真相大白 漫長的除錯假期終於結束了,我回到了自己的工作間,發生了更加奇怪的事情,整個世界毫無徵兆的消失了。 我暈暈乎乎,發現自己還是躺在自家床上,我是做了一場夢麼?可是過去的記憶如此真切,到底是怎麼回事? 管他呢,我已經知道了自己所在的房子的門牌號:C:\workspace\myTaobao\bin\com\mytaobao\domain探索一下吧,唉,大部分人都非常無趣,不理我。 正在我準備回去接著睡覺的時候,我先發現了C:\workspace\myTaobao\src\ 下也有一個一模一樣的目錄com\mytaobao\domain,關鍵是裡邊竟然有個Account.java !出生的模糊記憶告訴我, javac 就是從這裡把我生成的。 我正要給他打招呼,一個“hi”還沒說出口,我就被新的Account.class覆蓋掉了。 臨死前,我終於明白,這個碼農在開發程式,除錯程式,不斷地重啟伺服器。而我這個類隱藏著一個bug,經過除錯之後被發現,然後fix了。
相關推薦
碼農翻身之大話程式設計篇:2我是一個Java Class
第一回 陌生警察 我出生在C盤下面一個很深層次的目錄下,也不知道是誰把我放在這裡的。我一直在睡覺,外邊的日出日落,風雨雷電和我一點關係都沒有。
薦書丨好玩有趣的程式設計知識就在《碼農翻身》
點選上方“程式人生”,選擇“置頂公眾號” 第一時間關注程式猿(媛)身邊的故事 用故事給技術加點料! 好玩又有趣的程式設計知識! 全網閱讀量近1000萬次的技術故事! 優秀的技術人員應該具有廣闊的技術視野,同時擁有貫通的技術深度;不僅知道技術是什麼,而且還懂得為
碼農翻身——搞懂了這幾點,你就學會了Web程式設計
做了那麼多年Web程式設計,仔細想想, 其實本質上就那點事兒, 你抓住了幾個重點問題, 學起來一點都不難。 B/S 是從 90年代的客戶端/伺服器端發展而來, 共同點都是由一個(或一組)伺服器來服務多個客戶端。 差別在於:首先,C/S結構的客戶端可能是由不同語言編寫
碼農翻身——Redis:MySQL算老幾?
前言:上一篇《MySQL:快取算什麼東西?》裡挖了一個坑,也有很多人說沒看過癮,今天接著寫,把坑填上,不過得把視角換一下,讓Redis上臺發言。 我知道MySQL看我不順眼,不就是他的好基友Tomcat不怎麼搭理他了嗎? 這能怪我? 誰讓他那麼慢? 張大胖把我Redis安
網路簡介:網絡卡跟路由器是如何讓你上網的——《碼農翻身》閱讀筆記
聯網是這樣的,首先,你的電腦上必須要有網絡卡,否則上不了網。這章是動態撥號上網 每個網絡卡都有一個固定的MAC(Media Access Control)地址。也稱為實體地址。MAC地址由產商決定,就像身份證號碼,一般不可更改。如:11:27:F5:8A:79:54 可
後端碼農談前端(CSS篇)第五課:CSS樣式
一、背景: CSS 允許應用純色作為背景,也允許使用背景影象建立相當複雜的效果。 1、背景色 可以使用 background-color 屬性為元素設定背景色。這個屬性接受任何合法的顏色值。 例如: p {background-color: gray;} 2、背景影象 要把影象放入背景,需要使用 bac
後端碼農談前端(CSS篇)第六課:盒子模型
元素框的最內部分是實際的內容,直接包圍內容的是內邊距。內邊距呈現了元素的背景。內邊距的邊緣是邊框。邊框以外是外邊距,外邊距預設是透明的,因此不會遮擋其後的任何元素。 提示:背景應用於由內容和內邊距、邊框組成的區域。 一、CSS 內邊距屬性 屬性 描述 padding 簡寫屬性。作用是在一個宣告中
後端碼農談前端(CSS篇)第七課:定位與浮動
一、定位: 1、定位的理解 (1)相對定位 相對定位是一個非常容易掌握的概念。如果對一個元素進行相對定位,它將出現在它所在的位置上。然後,可以通過設定垂直或水平位置,讓這個元素“相對於”它的起點進行移動。 如果將 top 設定為 20px,那麼框將在原位置頂部下面 20 畫素的地方。如果 left 設定為 3
《碼農翻身》之Java帝國
這位大俠,這是我的公眾號:程式設計師江湖。 分享程式設計師面試與技術的那些事。 乾貨滿滿,關注就送。 《碼農翻身》讀書筆記之Java帝國 Java帝國(Java語言發展,JVM和class,持久化和IO,JDBC與DP,JTA與分散式事務,JSP與se
碼農翻身講網路5:Web安全攻防戰與HTTPS
瀏覽器:一個家族的奮鬥 原創: 劉欣 碼農翻身 2017-12-12 我是你們每天都要使用的瀏覽器,自從90年代誕生以來,我們這個大家族變得非常的繁榮,在過去的幾十年中,我們一直兢兢業業地幫助你們人類去探索外部的網際網路世界。隨著網際網路和移動網際網路的發展,我們家族終
iOS開發之網路程式設計篇三:同步,非同步請求差異及用法
在網路請求方式上,有同步和非同步之分,相關內容涉及到執行緒部分知識,這一節咱們需要知道如何去傳送一個同步或者非同步的請求,以及它們二者的區別。 一、同步請求 在網路程式設計第二篇,咱們寫的get,post請求使用的都是同步請求,那結合同步非同步、get/post組
《碼農翻身》之浪潮之巔的Web
《碼農翻身》讀書筆記之浪潮之巔的Web 這是我的後端讀書筆記系列文章的第三篇,選取的是最近剛剛圈粉的知名博主劉欣創作的《碼農翻身》。 本文內容主要根據知名博主劉欣一作《碼農翻身》的內容總結而來,本書的內容風趣幽默,講解計算機理論原理也是十分透徹,由於書中常常
碼農翻身講作業系統2:程序,執行緒與作業系統那些事
我聽說我的祖先們生活在專用計算機裡, 一生只幫助人類做一件事情,比說微積分運算 了、人口統計了 、生成密碼、甚至通過織布機印花 ! 如果你想在這些專用“計算機”上乾點別的事兒,例如安裝個遊戲玩玩, 那是絕對不可能的, 除非你把它拆掉, 然後建一個全新的機器。 而我這些祖
幹貨 | 碼農翻身提高工作效率的必備工具
ron lob 識別 書單 我們 per 高效 pytho 領域 要問闖蕩江湖的碼農最怕什麽 那麽,我鬥膽猜測一下 一定是敲代碼的 …… 速度 速度 還是速度! 速度是效率的關鍵 決定幾點回家 幾點見到心愛的妞 幾點吃雞 …… 今天,本黑就來給大家推薦一下 程序員提高效
【讀書筆記】碼農翻身 - 簡介
it行業 內容 讀書筆記 是我 筆記 然而 人生 軟件行業 積累 作為一個從業12年的老碼農來說,經歷了軟件行業十年來的滄海桑田,套用IT行業的一個術語 - “變化是永恒的”。然,追求真理,追求解決問題的金鑰匙是我們這個行業乃至人生的重要目標之一。軟件行業沒有銀彈可以解決一
【讀書筆記】碼農翻身 - 老司機的精進
成了 自己 java 進階 創新 soc 代碼 接管 node “凡事必先騎上虎背”作為來自孔子故裏的老司機,也難免沾染上儒家的中庸之道,缺少了開拓創新的精神。“凡事預則立,不預則廢”是對的,但也不必苛求盡善盡美。“不在其位,不謀其政”在我看來並不讓人奮進,畢竟 - 不想
晚上9點的北京地鐵站,碼農角落敲程式碼!網友:一看就知線上bug!
作為一名程式設計師,想必大多數人都有著解決線上問題的經歷吧,既然是線上問題,肯定是刻不容緩,每時每刻都在影響著使用者的體驗與公司的營收情況,為了讓損失能夠最小化,偉大的程式設計師們就必須做出一點犧牲去解決這件事情了,當然,大部分程式設計師都是比較敬業的,對於隨時隨地解決線上問題的意識都是有的,經常能
《碼農翻身》用故事給技術加點料
這本書以故事的形式講解一些技術詞彙,總的還是比較適合理解和閱讀的,不懂的人理解更簡單,原本就理解的人就學會一種講述的方法。能通俗易懂、形像生動的把專業東西讓小白明白,是一件很不錯的事。 因為本人沒搞Java,也就把第2章大部份跳過了,,似乎作者應該是學Java的吧。 聯絡到最近希望給家裡
碼農翻身——到底是Java好還是Python好?
語言的優劣之爭是個永恆的話題,有時候一次偶然地“擦槍走火”甚至可能會引發一場鐵桿粉絲之間的“戰爭”。 也經常有人問我:“老劉,到底是Java好還是Python好? 我應該學習哪個語言?” 我也挺為難的,只好說道: Python挺適合入門的,看起來很簡單
小碼農的職場人生一:由張小平離職引發的一些吐槽
文 ▏村長好忙(訂閱號ID:xiejun_asp) 9月27日刷爆朋友圈的一篇文章 《離職能直接影響中國登月的人才,只配呆在國企底層》,雖然存在誇大其詞且很多細節不實,但是還是讓張小平離職登上了微博熱搜榜。引發了我一丟丟的小感觸,忍不住來說說我這幾年所經歷的職場。 01 — 個人成長 不