2014百姓網暑期技術實習筆試

2021-06-22 01:27:46 字數 3241 閱讀 8799

前天聽同學說下午百姓網會來學校,有現場筆試,可以直接去。

效率確實好高,到了後準時開始,廢話不多。筆試半個小時,四個開放題。大致如下:

給出一種方法,用於精確計算乙個不規則形狀的面積。

有一種母牛,壽命5年,第二年底會生出一頭同品種母牛,第四年又生出一頭,第五年死去。現有一頭這樣的母牛,問n年後有多少母牛?

在你的理解中,for語句有多少種用法/用途?

用一種程式語言計算從m乘到n後結果中有多少個0?(m<=n)

第二題好像曾經做過。。。但是下午沒有寫出來,寫了思路:建樹,節點是牛,子節點是父節點生的小牛,權值是間隔的年份,每個節點有個深度值,第乙個點深度值為0。因為每頭牛只能生兩胎,所以畫下來就是個二叉樹了。求n年後牛的數目時,建個log(n/2)層的樹,遍歷,深度值在(n-5,n] 的就是活著的牛了。

我比較弱,沒發現規律。其實每頭牛只能生兩胎,兩胎後下一年就去世了。所以偶數年還活著的要麼是還沒生過,要麼生過一胎,在年底都可以再生一胎;奇數年從5開始,每年都會少一頭。

int f(int n)

回來後查了下百姓網的筆試題,只看到乙個關於判斷查詢子集的討論。

比如這裡:

原文:原題見 百姓網公開筆試題:查詢條件的子集判斷

我的答卷在

演示位址為

這道題分三部分:把查詢語句轉成陣列結構,然後把層級混亂的條件最終分解成 以 or 關聯的 and 合集(也就是 qmigh 所解釋的),以及按規則來讀取並判斷兩個陣列。在我的**裡,class treestore 負責前兩步,class setcheck 負責後一步。

由於我完全說不出任何術語,只能把陣列的轉換過程列一下了。

原始語句

a = 1 and (b = 1 or (c = 1 and (e > 1 or f = 1)))

第一步,迴圈用正則,從最裡面的括號開始,分解出每一級。這樣每一級裡面都沒括號了

array

[1] => e > 1 or f = 1

[2] => c = 1 and _1

[3] => b = 1 or _2

[4] => a = 1 and _3

按照 and or 的優先順序進一步分解

array

[and] => array

[0] => a = 1

[1] => array

[or] => array

[0] => b = 1

[1] => array

[and] => array

[0] => c = 1

[1] => array

[or] => array

[0] => e > 1

[1] => f = 1

將上述陣列最終分解成 or 下的一堆 and

array

[or] => array

[0] => array

[and] => array

[0] => a = 1

[1] => b = 1

[1] => array

[and] => array

[0] => a = 1

[1] => c = 1

[2] => e > 1

[2] => array

[and] => array

[0] => a = 1

[1] => c = 1

[2] => f = 1

其實就是按 qmigh 說的,做一下轉換,把最開始的表示式轉換為

(a = 1 and b = 1) or (a = 1 and c = 1 and e > 1) or (a = 1 and c = 1 and f = 1)

如果只有乙個表示式,可以理解為只有乙個元素的 and

如果(a > 3) and (b < 4)

可以用陣列表示為

array(

[0] => a > 3

[1] => b < 4

那麼a > 3

可以用陣列表示為

array(

[0] => a > 3

or 也同理

用來判斷時的陣列樣子,也就是 class treestore 的最終輸出

array

[0] => array

[a] => array

[=] => array

[1] => 1

[b] => array

[=] => array

[1] => 1

[1] => array

[a] => array

[=] => array

[1] => 1

[c] => array

[=] => array

[1] => 1

[e] => array

[>] => 1

[2] => array

[a] => array

[=] => array

[1] => 1

[c] => array

[=] => array

[1] => 1

[f] => array

[=] => array

[1] => 1

至於判斷,應該不算難,按照上面的陣列挨個字段判斷就可以了。以及判斷父集合是否有子集合沒有的字段,如果有,那肯定不是子集關係了。

寫完之後一直沒把握到底做的對不對,要是有類似 acid 2 或者 man or boy test 那樣的東西就好了。如果能有人告訴我有什麼複雜條件是我的**判斷不了的,實在感激不盡(當然,用 10mb 長的條件語句搞溢位不算……)

看了看 其他人的答案,「從離散數學到編譯原理」,這標題總結得不錯,核心也就是這兩個問題吧。我用正則來把編譯」那部分繞過去了,但從執行效率上講是很蠢的。

看來大家都知道畫蛇添足的故事,所以都只做了滿足要求(「為了簡單起見,只需要實現最簡單的and, or邏輯操作,大於,等於,小於三種比較操作就好」)的最小實現。

如果能有php同好的題解能相互學習學習那是最好了,其他語言的看不懂 -_-

原來還自詡為程式設計師,被這道題臊的不行,我現在的定義是,沒法獨自實現乙個 c compiler 的人充其量也不過是 coding fans。

————————————————原文終。(表示沒有學過php- -)

後記:我太弱了,筆試沒過。。。不過上面這個題目蠻好玩的樣子。看到乙個用python實現的:

再記:後來看到有人po了一樣的題目,要是早點看到就好了!(不過水平弱就是弱- -)

以及乙個相似的:

為什麼百姓網開源?

2012年9月6日,百姓網的第一批專案開源發布。其中包括前端的模版語言jedi hax的作品 和後端的資料訪問層baixing graph api 小排作品 這次發布是小範圍的,僅僅是第乙個嘗試,以後每隔一段時間我們會把做出來的東西拿出來和大家分享。為什麼要開源?在中國的網際網路環境中這麼做是不是太...

Qcon 百姓網開發總結

拿到的ppt看了之後,發現給出的很簡潔,但每個步驟用處卻非常有用,我們乙個個來分析 1.集中開發環境,這些方法看似簡單,但是都是很實用的方法,在我開發中看的出來,svn無分支就能解決我現有部門的部署環境問題,當然讓所有人坐在一起明顯能提交溝通的有效性 解決的問題 不用擔心環境不同引起的問題,開發過程...

百姓網今晚在復旦的講座

從客齊集到百姓網的這幾年,我們的活動從來沒有離開過校園,比如這個列表 客齊集最近的大學公益講座。百姓網的員工都離開學校不久,如果能用講座的方式給現在還在學校的學弟學妹們一些幫助,是我們最願意做的事情。這一系列的活動的主題是 百姓網 燈塔沙龍.這個沙龍主要目的是為熱愛網際網路行業 正要走向工作崗位的優...