99精品久久久久久久免费看蜜月/欧美激情做真爱牲交视频/日本不卡不码高清免费观看/三浦惠理子jux240久久 - 他在车里撞了我八次主角是谁

購物車0種商品
IC郵購網-IC電子元件采購商城
今天到華為面試被bs了,他給我出了一個題沒答上來!大家給
(2011/10/29 9:02:00)
我本來投的是硬件,可是硬件已經招滿,就給俺分到軟件組去面試了,郁悶!
面試官給俺出了一個題,說是怎樣將n個字節從一個地址拷貝到另一個地址,要用一個完整的函數表達出來,有兩點,必須n個字節,必須是一個完整的函數。
我隨便寫了一個,看他那眼色,肯定不對。
然后他又問我寫出的函數中,全局變量放在數據存儲區什么地方,局部變量放在什么地方,俺一個汗阿,平時用C語言從來沒管這些,請各位大蝦在這里給我解答一下好嗎?

網友評論:對傳入參數進行檢查,理論上是很應該的……但是如果大家有興趣打開linux或者glibc看看源碼的實現,就會發現幾乎沒有注釋而且代碼“亂七八糟”……

程序的健壯性是靠系統工程來實現的……


網友評論:華為人的整體素質還可以, 太差了是進不去。

不過也就如此而已。

網友評論:摟主,面試軟件,林銳的教程研究研究才好啊。

現在企業,用林博的這個考的少了,一段時間是很多企業招人標準題目。

不過,就是不考試,還是值得學習的,另外一個叫“0x10個問題”的小教材也不錯.

網友評論:/***************************************
******函數名稱:dcopy()
******功能描述:100字節的數據塊COPY;
******輸入:
******輸出:
******全局變量:
******調用函數:
******異常處理:
****************************************/

……


網友評論:因為你的程序如果沒有完整的說明;沒有標準的良好的書寫格式,程序寫的再精妙過幾天也就無從考證了;在后續的排錯過程中將陷入困境;
再說你的程序是你寫的,用的人要看懂它。
如果你是系統分析員,那么你將面臨更殘酷的考驗;文檔的比例有可能3到5倍于程序代碼;

網友評論:至少要區分出堆和棧來,雖然這是編譯器給做好了的,但是也必須了解。因為這是軟件最底層的東西。華為面試這個題經常出,天天出。

雖然對于單片機的編譯器,會變成根本不是那么回事情,但是你還是要回答,沒有辦法,象PIC的CCSC編譯器,根本就不是這么樣分配的,因為PIC不支持堆棧訪問。

網友評論:這是從譚浩強的《C語言程序設計》中看到的:
內存中供用戶使用的存儲空間分三部分:

1.程序區2.靜態存儲區3.動態存儲區

全局變量全部存放在靜態存儲區,在程序開始執行時給全局變量分配存儲區,程序行完畢就釋放。在程序執行過程中它們占據固定的存儲單元,而不動態地進行分配和釋放。靜態局部變量也放在靜態存儲區。

動態存儲區存放以下數據:
1)函數形式參數;
2)自動變量(未加static聲明的局部變量);
3)函數調用實的現場保護和返回地址;





網友評論:NANDFLASH如何把N個字節從一個地址拷貝到另一個地址里去,沒有任何底層函數支持,完全匯編。下面這個NANDFLASH測試板我做的,用了1K匯編

網友評論:void*memcpy(void*t,void*s,,unsingedintlen)
{
char*t1,*s1;
t1=(char*)t;
s1=(char*)s;

while(len--)*t1++=*s1++;
returnt1;
}

所謂的‘len<0’是不存在的。

全局變量存放在公共數據區,各函數都能存取。而局部變量是否在堆棧上就難說啦。但有兩點可以肯定:(1)局部變量的內容只有在本函數運行時才有效;(2)
編譯器會設定本函數才能存取局部變量。還需補充的是,有些單片機的編譯器會
讓互不相關的函數共享一塊RAM區,存放局部變量。

網友評論:沒有統一答案,而且主要影響效率,有時還影響可重入。變量定義在哪兒,這才是程序是否可讀可維護的關鍵。其實原則再簡單不過:作用域越“局部”越好,能用局部變量或參數的,不要用全局變量

既然說“完整”的函數,注釋、ASSERT還是必要的吧?

對于這個具體的函數,如果要功能完整,應該考慮兩個內存塊部分重疊的情況,這是簡單拷貝會出錯,因為人家說的是任意n個

網友評論:五、編寫strcpy函數(10分)
已知strcpy函數的原型是
char*strcpy(char*strDest,constchar*strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不調用C++/C的字符串庫函數,請編寫函數strcpy
char*strcpy(char*strDest,constchar*strSrc);
{
assert((strDest!=NULL)&&(strSrc!=NULL));//2分
char*address=strDest;//2分
while((*strDest++=*strSrc++)!=‘’)//2分
NULL;
returnaddress;//2分
}
(2)strcpy能把strSrc的內容復制到strDest,為什么還要char*類型的返回值?
答:為了實現鏈式表達式。//2分
例如intlength=strlen(strcpy(strDest,“helloworld”));

網友評論:如果這個內存復制在關鍵業務路徑里面,一個一個字節復制的確要被BS。
我們一般復制內存塊都有對齊和非對齊的講究;
如果對齊復制,那么不要用字節,用字(四字節)。
如果非對齊,則掐頭去尾后再對齊。

HW的軟件用他們自己弄的DopraVOS操作系統,里面的內存復制函數就是一個一個字節復制的,關鍵路徑里面用起來就很損失性能了。不過現在他們改了沒有就不知道鳥:)
當然,一般地,關鍵業務路徑不允許內存復制,呵呵

網友評論:有個兄弟是HW過來的,他說HW都用PPC/MIPS/x86。
這些東西都是32位處理器。

唉,現在的MIPS已經都是64位的了,不過沒準他們還沒有用上……

網友評論:越是關鍵的地方,越是要精打細算,仔細優化

網友評論:善于收集別人的成果,去偽存精,為我所用就不錯。

林博的答案有幾下幾個優點:
1、運用了斷言assert,假定"原串"與"目地串"均為不空的指針,是空指針則不存在復制的過程;
2、函數有指針型返回值,便于與標誰的ANSI的C環境String庫函數兼容及前面網友提到的鏈式復用;
3、運用了轉義字符“”,作為復制結束的判據,比較規范;
4、運用了Const關鍵字,對函數入口的指針進行了顯式約束,防止對指針變量指向的內容作非預期的改變。

存在的不足:
1、函數的功能說明做得不好,尤其是入口參數與返回值的約定;
2、命名用簡名,沒有全名直觀,比如宜用Copy替代cpy,用Source代替src

網友評論:好想這么多人都沒看過《C陷阱與缺陷》。說不定考官就是考考你看沒看過一些最基本的參考書呢。

網友評論:實際中的單片機里面的C,沒有幾個標準的。
CCSC的存儲器分配是比較個性的,所有的都是全局變量,然后根據函數的重入性再復用。lst文件可以看的出來。

AVR單片機的指令和數據不是一個總線,所以再codevisionAVR中把const給挪用成了flash。
constchar*a;是一個指向flashchar類型的指針,此指針存于ram,而不是C++中的意思,這個變量的值不允許修改。
char*consta;是一個存儲于flash的char類型指針。

但是去考試,還是要說,局部變量在堆里,函數參數在棧里......儼然都是X86架構下的C語言編譯器的常規做法。

林銳也說自從經商以后就很少做技術了,但是現在來看,考的東西還都是他的書上的為多。偶和林博士是校友,同姓,當然沒有他那個水平和那么高的學位。

但是華為的幾年了考試就出這個strcpy,確實應該讓人bs一下。




網友評論:好像只有22樓的同志說到點子上

網友評論:在PC機里,全局變量放靜態存儲區,局部變量放動態存儲區
在TMS320CXXX中,全局變量放在你聲明的段中,局部變量放在堆棧中
...

網友評論:林的東西對初學者不錯.
沒有大講什么設計理論,就是平常編程時候,不注意的或者是沒有關注到的點點滴滴.很好.
即使不是為了應付考試,也是完全值得一讀的.

網友評論:記得在哪本書上看過,寫出來沒有bug的還真不容易。
至少樓上3#,16#幾位的都考慮的不全面。


網友評論:intmemncpy(char*pcDes,constchar*pcSrc,unsignedlongulLen)
{
if((NULL==pcDes)||(NULL==pcSrc))
{
return0;
}
while(ulLen--)
{
*pcDes++=*pcSrc++;
}
return1;
}

網友評論:學習學習,

網友評論:如果dst+length區域和src+length區域有重合,這個時候
while(len--)
{
*_d++=*s++;
}
這段程序就會出問題,如果src<dst即src地址在前,而src+length>dst,這個時候就會發現拷貝src的前面的數據其實是覆蓋了src的后面部分的數據,這樣就出問題了,所以在拷貝之前要判斷src和dst的大小

網友評論:學習

網友評論:1)n的大小范圍?
2)用的處理器或系統剩余ram?
3)“源”和“目的”指針在可讀寫區還是只讀區?

你把這三問考他一下都不用寫程序就可以過關了....

網友評論:暈倒
這個問題應該是這樣的
1:考察你是否會C語言
這個檢查你是否會使用指針啊什么的。會這個只是基本合格
2:考察你有沒有做參數檢查這點答對了你就說明你很優秀
源指針目的指針長度之間的關系很復雜。
譬如源在0x00處目標地址在0x04處,要拷貝10個字節。
那么上面所有人寫的代碼都錯了
因此函數最起碼是:
intMemCpy(BYTE*pSrc.BYTE*pDes,unsingedintLen){
//參數合法性檢查
//如果目的地址大于源地址從后象前拷
//如果源大于目的地址,從前向后拷貝
}
這道題華為和中興都是要考的




}


網友評論:總是出一些火星題.

這個公司真的不好嗎?

非常垃圾嗎?

靠,我還面試了四輪呢.

如果不好咱就不去了.



網友評論:uchar*_mencpy(uchar*s,uchar*d,uintn)
{
uinti;
for(i=0;i<n;i++)
{
*s=*d;
s++;
d++;
}
returns;
}

全局變量放在RAM的全局區,局部變量放在RAM的棧區.

網友評論:全局變量在堆里面,局部變量在棧里面。C語言堆和棧不是一個概念

網友評論:我是新手來報個到!

網友評論:表情:

網友評論:那些出題的,出的題以為人家看得懂答不出來,其實大多數情況是連他想問什么都看不懂的。。嚴重反bs。。。

網友評論:不懂就是不懂的啦,沒啥了不起的啦...............

預防一下先。。。。

網友評論:應該講你沒有在那里工作是你的幸運!一個公司的發展不是這樣考個人就能有多大的能力,他們因該洞察一個人的潛力!打破常規的用人制度是目前潛力公司的發展戰略!你如是金會被發現!

網友評論:看來現在找到出題人出來說兩句才是最關鍵的!

網友評論:比較實用的答案就是樓上各位的綜合!容錯與避錯并舉。

網友評論:可惜我不懂軟件!

網友評論:華為確實很難進去的啊,呵呵

網友評論:我面試過華為N次,n次都沒去,第一次是大學畢業那會,問我802.11,一竅不通
后來基本上保持一年一次的幾率面試、筆試,后幾年都順利通過,只是工資談不攏沒過去,奇怪的是每年都有不同的部門,不同城市的華為約我去。
唉。。。
中間的故事很多。
我要說的是他們面試就一套題目,都是林銳說過的,沒啥新意。雖然有部分改變,但只要你真正理解了,拿個90分還是沒問題的。
不過現在我是再也不想去華為了。面試也懶得去。

網友評論:如果是len等于0的時候會怎么樣呢?

網友評論:全局變量未賦初值的存在.BSS段,
賦初值的在堆區。

局部變量在棧區。

網友評論:思路:
先用LDM指令將一片連續地址的內容加載到寄存器列表中;
再用STM指令將各寄存器的內容存儲到另外一片連續地址中。

網友評論:局部變量存在于(堆棧)中,
全局變量存在于(靜態區)中,
動態申請數據存在于(堆)中。

至于樓主的程序,看一眼就知道它會崩潰。

瀏覽:(1492)| 評論( 0 )
博文評論

  • 昵 稱:
  • 內 容:10~250個字符
  • 驗證碼: 驗證碼看不清楚?請點擊刷新驗證碼
  •                      
  • 博文分類

    熱點博文

    最新博文

    最新評論

    IC電子元件查詢
    IC郵購網電子元件品質保障