03.02 面對一工科男來應聘算法工程師,卻不知道int是幾個字節,一個字節有幾位,這是一種怎樣的體驗?

伝儱


通常來講int俗稱字,一般為4個字節,也有1個字節,或2個字節。這取決於平臺CPU的指令寬度。跨平臺的代碼,會有使用#define或typedef重新命名,比如unsigned int命名為INT32U。



對於算法工程師,我認為應該瞭解此題。理由很簡單,一是算法必須涉及數據,那麼數值範圍就必須明確;二是算法必須考慮空間,比如存儲大小和運行大小,字節對齊,讀寫訪問的邊界問題。



如果算法工程師對此不甚瞭解,那很可能會出大事,比如算法中一個int變量取值大於2個字節所表示的範圍,那麼該算法在32位系統中沒有事,但放到16位系統中就可能出錯,今時今日依然有很多系統最大隻支持16位呢,尤其是在單片機系統中,8位更常見。順便說一句,我還用過只支持16位的,不支持8位或32位。即沒有Byte Mask功能。

說到這裡,可能大家還遇到過,32位的系統支持64位字,int64,long long類型,怎麼回事?通常使用一個結構體兩個32位字的成員變量來實現,字節訪問上就用兩個int 32的週期去讀寫一個數據。



總之,跨平臺算法,要具體情況具體分析。謝謝大家。


嵌入式宏思微想


討厭裝逼的面試官,算法的,我們公司的25k的ai python算法工程師,代碼垃圾的一逼,從沒用過oop,代碼極端面向過程,多個文件裡面的代碼重複程度嚇死人。一天寫不出10行代碼,要想破頭才能下筆寫一個新文件。算法只是裝逼的玩意,華而不實。25k的ai算法工程師代碼被12k的python工程師代碼暴擊。很明顯的是,flask redis celery django這些流弊的框架,你刷100年leetcode都寫不出來這樣的框架,由於不懂oop,調用這些框架像天書一樣。python ai算法工程師連flask寫個接口都不會,太垃圾了,小公司的ai人員只會裝逼,沒有產出。


瀟灑的樹葉0509


一般而言一個字節八位,無符號正整數範圍0-255.兩個字節0-65535。一般int是兩個字節,也有longint,不同開發語言可能略有差異,不過基本相同。

具體編程過程中,許多程序員不見得需要知道int是多少位,因為現在的硬件配置好,無需計較一個變量的佔用空間。如果是上世紀的程序員就需要考慮,如果計數範圍小,還要考慮一個字節byte。以前為了節約空間和加快速度,涉及到數學運算時需要用位操作,如左移和右移。因此在C語言中經常要嵌入彙編來達到最佳效果,當然現在這樣做是脫褲子放屁了,比如目前比較流行的各種腳本語言,哪裡還需要知道多少字節,我見過許多年輕人大學裡沒有學過基礎知識,學習編程都是一開始就學html5或python,而以前大學學的是數據結構和計算機原理、編譯系統等基礎課程,但是以前的老程序員不見得就乾的過年輕人,雖然基礎好但時代進步了導致老程序員知識老化,現在新的開發工具層出不窮,你用C編一個月的程序,別人三天就能搞定,這就是效率,現在流行的是效率,快捷。因此對於當前中國這個時代很多人恍如隔世,現在程序員根本不需要上大學,有中專文憑就夠了,做個網站,搞個UI輕鬆簡單再加上懂點ug畫個三維動畫什麼的,不得不服啊。


飛翼點通


算法工程師目前的分工比較細,有不少算法工程師並不做算法實現,所以在編程語言的使用方面也可能存在不熟悉的情況。但是現在不少程序員對基礎知識的掌握也沒有以前那麼紮實,這是一個比較明顯的現象。

我經常作為面試官參加一些企業的程序員面試工作,在面試的過程中我一般會問一些比較基礎的問題,以便於瞭解程序員的基礎知識結構。像int是幾個字節的問題我也問過,大部分程序員是能夠回答上來的。類似的問題還有計算機端口號的範圍、網絡尋址方式、TCP協議與UDP協議的區別、接口的作用、XOR運算的規則等等問題,一般這些問題都是問初級程序員比較多,對於中高級程序員則一般問一些具體的解決方案。

對於一些簡單的基礎問題的回答能反映出程序員的基礎知識結構,按照歷史經驗來看,對於一些非計算機專業的程序員來說可能在回答這些問題的時候會顯得吃力,因為目前的很多程序設計語言都比較簡單,在很多實驗中也練習不到這些基礎知識,但是這些基礎知識對程序員來說還是比較重要的。

很多情況下,即使沒有回答上來一些基礎性的問題也不要氣餒,畢竟現在的開發環境與早些年有很大的不同,程序設計更多的關注於模塊化、擴展性等問題。但是基礎知識的掌握對於程序員來說還有很有必要的,尤其是一些常識性問題。

我使用Java、C和Python的時間比較長,也在頭條上陸續寫了一些關於程序設計、大數據方面的文章,對這些內容感興趣的朋友可以關注我,相信一定會有所收穫。

謝謝!


IT人劉俊明


奇怪,怎麼會有算法工程師。算法是軟件工程師基本功啊,不懂算法搞什麼軟件,抱孩子去吧!


思想的天空翱翔


感覺你對算法有誤解!

算法和編程是兩回事,算法作的好,不一定要有編程方面的知識!

研究算的人一般是學數學出身,一般多用MATLAB,不懂編程不算什麼奇怪的事……


軍117397201


int類型的長度會隨運行平臺不同而不同,比如32位機的int是32位,64位機長度是64位,要指定長度必須用int32或int64(go語言),所以不知道不是很正常的嗎?


紫楓閒人


坦率講中國程序員很容易陷入兩個極端,一種是愛鑽牛角尖,比如爭論int多長,哪種排序算法賊牛,這種基本是小孩。另一種確實需要提高,只會寫添改刪查確實無法勝任更有挑戰的工作。這兩種程序員中國都不缺,最缺的是願意在軟件設計上多思考的程序員,架構該如何設計,服務該如何設計,模塊該如何設計,類,函數該如何設計,代碼該如何提高可讀性,如何保證系統中的抽象層設計的更合理,在實現,擴展和維護時更順暢,不衝突,有良好的一致性。看看國外的開源框架,人家的設計是有美感的,是藝術,我們應該把更多時間用來提升自己的審美,深入思考設計上的更多技巧和模式。


wumin810711


算法工程師是程序員的一類 ,是負責將別人設計好的算法變成代碼實現、封裝好之後供其他人調用的那個角色;不是拿張紙拿支筆靠數學知識解決抽象問題的角色,那是算法研究員。不知道int佔幾個字節怎麼做空間優化?怎麼知道自己的代碼能處理多大規模的數據?在什麼情況下數據會溢出?不知道這些你怎麼提高算法的健壯性?

對算法工程師而言,知道int佔幾個字節就像中學生知道二元一次方程求根公式一樣是基本能力。

別扯什麼int跟硬件平臺相關,算法工程師實現的代碼是要在具體平臺上跑的,自然要知道在這個平臺上佔幾個字節;如果是跨平臺的開發,int長度是固定的,更應該知道。

順便再說一下真正的算法牛人是集算法研究者和算法工程師角色於一身,比如D.E.Knuth,Linus Torvalds,Anders Hejlsberg,看看人家寫的代碼,效率優化到極致,想改他一行代碼都改不了。現在有些人自以為會調幾個TF的超參數就是算法工程師了,真是笑死人。


藍色的星49


面試要找對方優點,而不是缺點。寸有所長,尺有所短。沒有人是完美的,也不是什麼都懂。招人不是要找一個什麼都懂的完美人,而是要找一個為我所用的可以對組織發揮價值的人。要看看他自認為最擅長的領域,到底如何。

比如這個來應聘算法的,那麼就考他的算法。請他講一個他認為最有意思的算法,他最熟悉的算法,他遇到過的最難的算法,然後看看他對算法理解深度和廣度,算法的時間和空間複雜度,如何優化,以及他閱讀過哪些文章或者有趣的相關話題,看他的思維模式、解決問題的技巧、表達溝通能力。

他說Java厲害,那就考Java,就不要問C++的問題。他說Python強,就讓他用Python寫兩個程序,就不要問bit的問題。他說不會,你就不用問,他說精通,你就試探他的深度。他說忘記怎麼寫代碼了,你就讓他來畫圖描述算法。

一些初級面試官,就喜歡問面試官自己熟悉而別人不懂的題目,雖然顯示面試官技術很厲害的樣子,對公司來說價值不大。其實,反過來讓應聘者問幾個面試官問題,面試官表現也許也差不多。

一些短視的面試官喜歡考“經驗”,就是問“這個你懂不懂”。如果找來都是面試官已經懂的人過來,那麼找這樣的人過來只是幹活兒,這個團隊地知識領域和視野還是那麼一畝三分地而已。如果招來現在團隊裡還沒有人瞭解和精通的領域的候選人,那才是部門的開疆闢土之士。對於準備建立一個有效團隊的領導者來說,更注重“人品”和“潛力”。你對某個方面技術很深,那麼我要來推測在新的領域,是否也可以快速成長成為新的專家。我見過不少聰明的有潛力的人,一兩年後發展比原來有經驗的人強,而且可擴展性更強。