面試中被問到 你在工作中碰到的最困難的問題是什麼?

2021-08-16 04:38:32 字數 1574 閱讀 6327

首先,面試官問道這個問題的目的肯定是想從側面了解你對技術的理解,或者說我解決問題的思路。那麼說,我們回答這個問題也要從這點著手。我是這樣總結的。

在我的程式設計生涯中,我總結出了幾點:

1. 良好的程式設計習慣是對有效率程式設計最大的幫助。

2. 除錯能力的高低是最能反映乙個程式設計師水平的素質。

那我就分享一些我對除錯的理解。我記得有一次專案中需要將乙個ubuntu下的qt**移植到vs裡面,整體的過程都進行的比較順利,但是在最後進行效能測試的時候,發現效率相差有近百倍。怎麼辦呢?除錯第一點,就是定位問題。在下手之前,我有下列疑問:

1. 效率低,常見的是多執行緒阻塞導致。我這裡有多執行緒讀寫,所以是有這個可能。

2. 但是,這個架構在ubuntu下沒有出現問題,不存在兩者效能懸殊這麼大!

基於這些疑問,我將除錯重點放在多執行緒讀取部分,最後也的確定位到問題是在多執行緒裡面用opencv的imread讀取消耗的時間巨大。難道問題是windows下的opencv庫出現了問題?那麼是什麼問題呢,**在ubuntu下經過了測試,換個平台,差距如此大。這個中間,我動過各種歪腦筋,什麼看opencv的原始碼,對多執行緒流程除錯等等,花費了幾天時間,最後是乙個偶然的機會再論壇裡面看到有人討論到vs下debug模式和release模式效能差異的問題,我才驚醒,這就是關鍵,最後用release模式呼叫相對於的release庫,果然解決了問題。

這是乙個很簡單的vs使用的問題,但是當時我的日常使用多是qt,初次接觸vs,並沒有考慮到這個問題,導致浪費了相當長的時間。但是,事後我進行了反思總結,我認為出現本次事件的關鍵並非是我對vs不熟,而是我分析問題的流程不夠科學。debug就像是警察判案,先要分析作案現場,然後通過各種現象得到乙個嫌疑人名單,之後乙個乙個去排除,最終定位作案人員。這當然是最理想的判案路徑,但是,如果所有的嫌疑人都被排除了,怎麼辦?如果,都被排除了,那麼說,有兩點:

1. 你的作案現場分析的不夠細緻,遺漏了一些資訊。

2. 你根據現場資訊得出的嫌疑人名單遺漏了某些人。

接下來應該做的是重新分析問題,確定問題分析很完善了後,下一步很關鍵,放大你的作案現場。從刑偵的角度看,**可能存在多個案發現場,也有可能我們目前看到的不是第一現場。回到程式設計這裡來,首先懷疑多執行緒然後找到讀寫慢的現象,接下來懷疑是否是opencv原始碼有問題,這個可能性實在是小概率事件,且大致的看了原始碼後也未有發現異常,接下來應該擴大案發現場:

如果**沒問題,程式設計環境的差異呢?那麼可以重點關注vs和qt的差異,從這裡出發,不難就可以找到在vs下debug模式和release模式效能差異的狀況。

以上,雖然是乙個很簡單的問題,但是基本能夠反映我對除錯的理解,也可以算是我從事程式設計到現在總結的一些內功心法了。除錯的過程,本質上也就是乙個猜想->定位->放大猜想->定位 這樣乙個迴圈迭代的過程。簡易的示意圖如下:

說句題外話,有人會覺得懷疑opencv的**有誤是否有必要,我想說,當然有必要,opencv也是人寫的,當然有出錯的可能,而且我也的確碰到過。我在使用某乙個版本的opencv時發現其設定攝像頭解析度的函式不生效,但是僅限於那個版本,冥思苦想後,最終發現是因為這個版本的設定解析度的函式沒有實現。

HTML在工作中的使用

本文是在學習html的時候,心血來潮嘗試的做法。純屬瞎玩,不可當真。工作中編輯郵件 在管理系統上進行任務編輯 描述時,都可能會使用到html的簡單知識。有一些簡單的標籤可以幫助我們更好的完成工作,比如字型加粗 換行等。比如我在辦公系統上編輯乙個task的時候使用了html,使得這個task的描述展示...

Kafka在工作中的體現

建立topic bin kafka topics.sh create zookeeper localhost 2181 replication factor 1 partitions 2 topic test 檢視topic bin kafka topics.sh list zookeeper lo...

MYSQL在工作中的應用

1 多表操作,必須開啟事務 2 陣列儲存db可以使用json序列化。主要是考慮json是比較通用的資料格式,如果使用分隔符拼接必須單獨約定乙個分隔符。choicestr fmt.sprintf v,choice strings.trimright choicestr,choicebyte,err j...