最新互聯網大廠面試真題、Java程序員面試策略(面試前的準備、面試中的技巧)請移步GitHubgit
咱們在平常工做中,總會這樣感慨:事情,是幹不完的。既然幹不完,那咱們就要分清輕重緩急,哪一個重要,哪一個不重要,給它們劃分一個優先級,這樣不至於讓本身手忙腳亂。程序員
能給手頭的事情排上正確的優先級,是一項很重要的工做能力。github
固然,咱們在生活和學習中,事情也可能很多。可是和工做中的優先級相比,生活和學習裏的事情是咱們本身的事情,只要安排得讓咱們本身滿意就能夠了。在工做中,事情的優先級的標準,是要讓公司受益,讓老闆滿意,讓同事承認。面試
首先呢,咱們先談談優先級爲何重要。數組
我工做中有一段時間,就常常被工做的優先級所困擾,經理也時不時地批評我:「這個事情這麼重要,你怎麼到如今還沒開始弄?」我內心也有點憋屈:「我又沒閒着,我作的事情還不都是經理安排的麼?」安全
這裏有一個很重要的字眼——重要。多線程
優先級有不少的考量,並非簡單的先來後到的線性時間順序,咱們須要根據事情的要緊程度安排優先級。運維
還有一個須要考慮的因素就是程序員的工做性質。對於軟件工程師來講,一個事情能夠用一天的時間作完,也能夠用一個星期的時間精心打磨。如何在時間有限的狀況下安排本身的時間,讓時間用在最值得作的事情上,就是排優先級須要考慮的內容。ide
給不一樣的工做安排優先級,不只會讓咱們的工做效率更好,也可讓咱們和同事之間達成良好的合做關係,爲何這麼說呢?且往下看。學習
首先,咱們能夠從兩個維度去給工做劃分類型,一個維度是工做自己的性質,另外一個維度從合做角度出發,而後根據這些工做的重要與否安排優先級。
基於工做自己的性質,我把工做劃分爲公司發展計劃、安全相關的事情和生產上的事情。
每一個公司都有本身的發展計劃,並給這些計劃劃定不一樣的權重,以指導協調公司內有限的資源。
拿我所在的公司來講,每一年公司高層都會制定當年的發展目標,而後以此爲依據,制定不一樣的發展項目,再根據項目,一層層地將項目分解爲各個部門的子項目等等。每一個部門,以頂級項目的優先級爲參考,安排本身的資源,以達到公司的發展目標。
咱們程序員做爲公司人員組織的基層員工(我習慣稱爲葉子結點),天然不須要操這麼大的心。可是咱們須要瞭解公司的發展方向和重點項目。通常來講,公司的發展目標和與之相關的各個項目的優先級都會對內公開,公司也鼓勵全部員工都熟悉這些內容。當和這個項目相關的工做安排到本身手裏的時候,必定要給予這種工做足夠的優先級。
同時,這種重要的事情,最好多花點時間在上面,力爭作到最好。由於這種重要的事情是拖不起的,若是由於沒作好拖累整個項目的進度,可能會影響本身甚至整個組的表現(performance)。
咱們再來看看安全相關的事情。
「安全無小事」這個口號在全部工程類的工做中都適用。軟件開發裏的安全問題雖然不會直接影響生命安全,可是它會帶來很大的經濟損失和商譽損失,現實中各類數據泄漏的例子不勝枚舉。
我隨便舉個 Java 的例子。在 JDK 的早期版本中,有一個執行任意代碼漏洞。Java 能夠啓動新的進程,執行任何命令,方式是使用 Runtime 的 exec 方法,傳遞一個命令的 String數組。這個漏洞在於,它先檢查了 String 數組裏的命令是否容許被執行,而後再遍歷數組,依次執行每條命令。而在多線程環境下,徹底可能在檢查完畢後,數組裏的內容又被別的線程惡意更改了,改成不該該經過檢查的命令。這樣的話,一條本不該該經過檢查的命令,就這樣被執行了。
做爲承擔着軟件開發和運維工做的現代程序員,咱們首先要遵照安所有門的安全規範和檢查,這就好像進入工地要戴安全帽,是沒得商量的。
安所有門有時候還會發布緊急安全升級等要求。好比升級有安全隱患的 jar 包 / 組件等,這時候,咱們必定要把這個看成優先級最高的任務,不要有任何的猶豫或輕視。
站在咱們程序員的角度想一下,一旦出了安全問題,若是是由於本身執行不到位,這個責任確定是要本身承擔的,即便後期再怎麼彌補,也無濟於事。
試想一下,若是你沒有配合安所有門的任務,致使一個有漏洞的 jar 包被利用,形成了數據泄漏。即便接到任務的時候你沒有閒着,甚至爲了完成業務開發挑燈夜戰,但你以爲業務的人會爲你說話,替你擋箭背鍋嗎?
若是你不肯定,那麼就換位思考一下吧。若是你是業務方,給開發提好了需求,進度也排好了,結果突然開發組跟你說,由於作你的項目,致使咱們沒時間作安全升級,形成了公司損失,你要背鍋。你是否是以爲這鍋來得匪夷所思?
安所有門的要求就是最高的要求,是一切需求的「擋箭牌」。當一個安所有門給的任務到了你手上,告訴經理你要放下手中的工做,馬上開始執行安全任務吧。這既是爲了公司,也是爲了本身。
除了安全問題須要注意外,咱們還要注意生產上的問題。
若是生產出了問題,那麼做爲 DevOps 的程序員,要第一時間放下手頭的事情,衝上去搞。理清問題以後,立刻開始行動。生產上的問題都是迫不及待。迫不及待的時候,你會等着別人給你送水,仍是本身想盡一切辦法找水呢?固然是本身找水了。若是須要別人配合,
立刻聯繫相關的人或者其經理。
講完工做自己的性質,咱們再來看看那些須要跟別人合做的事情,畢竟有人的地方就有溝通,若是優先級沒有排好,那就很容易致使溝通不到位,出了紕漏,就很麻煩了。
在平常工做中,咱們有不少任務都是經理下達的。經理每每掌握着更多的信息,也更能判斷一件事情的優先級。如今通常都是敏捷開發,經理會給每一個 story 排優先級。在給任務排優先級的事情上,程序員能夠提建議,也能夠和經理討論,可是必定要以經理的決定爲準。
還有一些經理臨時安排的事情,這種事情有時候更急一些,可能也不用耗費很長時間。因此這種事情也要先作。
若是一個事情須要別的部門配合,那麼優先作。好比申請資源,和本身的上游討論需求等等。這樣一方面可讓別人儘早開始工做,另外一方面也能夠儘早交換信息,避免往後翻車。
舉個簡單的例子,若是有一個需求依賴上游服務。那麼在本身這邊需求明確的狀況下,你要儘早和上游的組通氣,看本身的需求能不能作,排期是怎樣的。若是本身以爲沒問題,先開展本身的工做,結果上游那邊沒法作或者沒法排期,那工做就完全翻車了。
若是事情沒有太明顯的輕重緩急,那麼換位思考,與人爲善,優先作那些阻塞了別人工做的事情。有些事情是來自組內的,有些來自組間合做。良好的合做關係就是這樣一點點打磨出來的。
給工做排好優先級以後,咱們還要注意工做內部各項事情的優先級。工做須要拆成不一樣的步驟來實施,這些步驟也有優先級,其實基本道理和咱們上面講的都同樣。
我舉一個開發新功能的例子。開發新功能可能要申請機器,要找上游談依賴,要開發代碼,要找下游談需求,要和上下游聯調接口等等。
你看,這裏有「申請機器」「找上游談依賴」「找下游談需求」,那麼這個時候,申請機器和找上游就是應該儘早開始的。同時,接口和聯調也應該儘早開始,接口具體實現的代碼不須要寫得那麼完善,甚至 mock 一些過程也是能夠的。這樣一方面能夠和上下游儘早落實集成的細節,另外一方面也能夠儘早將階段性的成果展現給需求方,隨時 review,避免最後來個大「驚喜」。
咱們作事情的時候,若是能把其中的每一步都想清楚,理清依賴關係,安排得層次分明,這就已經事半功倍了。
咱們的工做繁雜而瑣碎,今天我也僅僅是給出了一些通用的建議。在不一樣的工做內容,工做崗位上,可能有不一樣的維度。可是須要牢記的是,當你以爲本身工做手忙腳亂的時候,不妨停下來,先理理本身手頭工做的優先級。怎麼整理優先級呢?這裏我給出一個簡單的方法。首先把全部的事情列出來,而後對每件事情問本身兩個問題:不作這個會怎麼樣?作了這個能怎麼樣?剩下的事情,就是順着這個思路走下去了。
其實,給工做排優先級,不只僅是一個提高工做效率的方法,也是提高自我和磨合團隊的重要方式。
程序員的工做不僅是低着頭寫代碼,也不僅是別人讓幹什麼就幹什麼。給事情排優先級,是一種可以幫助把事情作對,作成,作好的重要能力。它不只須要你對事情自己有準確的認識和判斷,還須要你有清醒的思惟,可以將事情分解,按照最優的順序執行。給工做安排優先級的過程,也是鍛鍊本身能力的過程。
進一步說,這種能力更是一名經理的必備能力。經理的很大一部分任務就是理清事情,排列優先級,讓本身的手下去作事情。程序員能控制的就是如何安排和使用本身的時間,而經理要對手下全部人的時間負責。因此經理眼前的事情更多,關係更復雜,須要作的判斷也更重要,對這個能力的要求也更高出好幾個層次。因此若是你有轉作管理的計劃,不妨在這件事情上多花點心思吧!