小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

驅(qū)動面試、筆試常見問題

 印度阿三17 2018-09-27

以下內(nèi)容源于網(wǎng)絡資料的整理學習。

參考博客

https://blog.csdn.net/Mingrenjiuwei/article/details/52878012(推薦)

https://blog.csdn.net/shxcodewarrior/article/details/20122321

https://blog.csdn.net/tainjau/article/details/79430905

https://blog.csdn.net/Cowena/article/details/48706297

?

1、linux中內(nèi)核空間、用戶空間的區(qū)別?

Linux系統(tǒng)采取兩級保護機制,對應兩種不同的操作權(quán)限,內(nèi)核空間權(quán)限高于用戶空間權(quán)限。

內(nèi)核空間和用戶空間都有屬于自己的虛擬空間。在32位系統(tǒng)中,cpu最高有32位尋址范圍,即對應4G空間,內(nèi)核空間被劃分在高1G虛擬空間,用戶空間在低3G。

普通應用程序運行在用戶空間,執(zhí)行一些貼近用戶的低權(quán)限操作;系統(tǒng)內(nèi)核程序、操作硬件的驅(qū)動程序等一些要求高級權(quán)限的程序運行在內(nèi)核空間。

用戶空間程序不能直接訪問內(nèi)核空間的數(shù)據(jù),內(nèi)核空間程序也一樣不能直接訪問屬于用戶進程空間的數(shù)據(jù),用戶空間和內(nèi)核空間之間的通信必須通過一些特定的方法。

2、用戶空間與內(nèi)核通信方式

常用的也就這幾種:

(1)系統(tǒng)調(diào)用。用戶空間進程通過系統(tǒng)調(diào)用進入內(nèi)核空間,訪問指定的內(nèi)核空間數(shù)據(jù)。

(2)驅(qū)動程序。用戶空間進程可以使用封裝后的系統(tǒng)調(diào)用接口訪問驅(qū)動設備節(jié)點,以和運行在內(nèi)核空間的驅(qū)動程序通信。

(3)proc文件系統(tǒng)。proc文件系統(tǒng)的主要功能是在內(nèi)核空間提供一套機制為用戶空間方便的查詢,查看,設置內(nèi)核信息,多用于查詢類操作。

(4)共享內(nèi)存mmap。在代碼中調(diào)用接口,實現(xiàn)內(nèi)核空間與用戶空間的地址映射,在實時性要求很高的項目中為首選,省去拷貝數(shù)據(jù)的時間等資源,但缺點是不好控制。

(5)copy_to_user()、copy_from_user(),是在驅(qū)動程序中調(diào)用接口,實現(xiàn)用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝操作,應用于實時性要求不高的項目中。

3、linux中內(nèi)存劃分及如何使用?虛擬地址及物理地址的概念及彼此之間的轉(zhuǎn)化?高端內(nèi)存概念?

(1)內(nèi)存劃分

以32位機器為例,cpu最大尋址范圍為4G,Linux系統(tǒng)將4G虛擬地址空間劃分為高1G,低3G。

低3G虛擬空間屬于用戶空間,都是經(jīng)過映射的線性地址,供用戶進程空間使用。

高1G并非都是像用戶空間一樣都是映射過的線性空間,Linux系統(tǒng)將高1G劃分為三部分:DMA區(qū),常規(guī)區(qū),高端內(nèi)存,其中0-896都是映射過的線性空間,剩下的896-1024即高端內(nèi)存,這段高端內(nèi)存都是未經(jīng)過映射的虛擬地址,Linux系統(tǒng)利用這些有限的虛擬地址,臨時動態(tài)的映射到大于896M的物理空間地址,實現(xiàn)了利用有限的虛擬地址訪問到物理內(nèi)存的所有地址。

(2)內(nèi)存申請函數(shù)的對比

malloc用于用戶空間進程申請內(nèi)存空間,kmallc和vmalloc在內(nèi)核空間使用。

kmalloc申請到的內(nèi)存空間,是線性連續(xù)的,可以用于dma。

vmalloc申請的內(nèi)存是邏輯連續(xù)的,但是物理地址不連續(xù),常用與申請大的內(nèi)存,請注意vmalloc可能會睡眠,在中斷、阻塞的環(huán)境下不能使用。

(3)內(nèi)存映射方式

虛擬地址到物理地址的轉(zhuǎn)化,用戶空間和內(nèi)和空間采用不同的映射機制。用戶空間的地址映射經(jīng)過mmu(內(nèi)存管理單元)管理。而內(nèi)核空間的虛擬地址到物理地址的映射是一一對應的,例如虛擬空間地址0xc0000004,對應的物理地址空間地址為:0xc0000004 - 0xc0000000 = 0x04,以此類推。(待求證)。

.4、inux中中斷的實現(xiàn)機制,tasklet與workqueue的區(qū)別及底層實現(xiàn)區(qū)別?為什么要區(qū)分上半部和下半部?

https://blog.csdn.net/oqqHuTu12345678/article/details/78860065

Linux中斷分為硬件中斷和內(nèi)部中斷(異常),調(diào)用過程:外部中斷產(chǎn)生->發(fā)送中斷信號到中斷控制器->通知處理器產(chǎn)生中斷的中斷號,讓其進一步處理。

為了能夠在中斷處理過程中被新的中斷打斷,將中斷處理程序一分為二,上半部登記新的中斷,快速處理簡單的任務,剩余復雜耗時的處理留給下半部處理。下半部處理過程中可以被中斷,上半部處理時不可被中斷。

tasklet和workqueue,兩者都是中斷下半部的一種實現(xiàn)方法。區(qū)別在于tasklet屬于中斷上下文,支持smp、不可睡眠和阻塞;workqueue基于線程的封裝,屬于進程上下文,因此支持睡眠、阻塞。

5、Linux的同步機制

常見的同步接口,包括進程同步,信號量,自旋鎖,互斥鎖,條件變量,讀寫鎖。

個人理解:多進程并發(fā)一般考慮使用信號量機制,在線程并發(fā)時多采用互斥鎖,條件變量。

個人覺得條件變量在某些角度就是線程版的信號量實現(xiàn),因為兩者都是在考慮持有鎖時間較長情況下使用。

互斥鎖,自旋鎖一般都是用在持有鎖時間不會很長的情況下,在自旋鎖有使用意義的前提下,如果持鎖時間會非常短則自旋鎖效率高于互斥鎖(否則應該使用互斥鎖,因為互斥鎖會持續(xù)占有cpu資源,不宜過長,而互斥鎖會導致?lián)尣坏芥i的線程睡眠,進入等待隊列)。

互斥鎖和自旋鎖都可以用在進程上下文,而在中斷上下文只能使用自旋鎖,因為互斥鎖會睡眠。

7、/dev/下面的設備文件是怎么創(chuàng)建出來的?

有三種方式:devfs機制、udev機制、手動創(chuàng)建設備節(jié)點。

談談個人見解:

devfs機制,從來沒用過,應該是2.6以前的內(nèi)核使用的;

udev機制,其實就是現(xiàn)在常用的device_create()、class_create()這一套接口,所謂udev是上層用戶空間程序,是基于驅(qū)動中創(chuàng)建使用了這兩個接口而起作用的,但是udev在日常開發(fā)中幾乎接觸不到,我們只需在驅(qū)動中調(diào)用創(chuàng)建節(jié)點的這兩個API就ok了,剩下的工作就交給udev去做。

mknod ,新手最常用的一種創(chuàng)建設備節(jié)點方法,但并非入門后就再沒有用途。在某些情境下,或許有人不想使用udev機制,于是把節(jié)點創(chuàng)建工作寫在腳本里,這樣也是無可厚非的。

8、原子操作該怎么理解?

原子操作,就是開始執(zhí)行到執(zhí)行結(jié)束期間不會被打斷的操作單元。

9、insmod一個驅(qū)動模塊,會執(zhí)行模塊中的哪個函數(shù)?rmmod呢?這兩個函數(shù)在設計上要注意哪些?遇到過卸載驅(qū)動出現(xiàn)異常沒?是什么問題引起的?

分別會執(zhí)行module_init()、module_exit()指定的init函數(shù)和exit函數(shù)。

要注意的就是盡量使在init函數(shù)中出現(xiàn)的資源申請及使用有對應的釋放操作在exit中,init申請,eixt釋放。

卸載出現(xiàn)的異常?那很稀松平常了,大多數(shù)都是資源使用完沒釋放,但是模塊卻卸載了。

10、在驅(qū)動調(diào)試過程中遇到過oops沒?你是怎么處理的?

遇到過,這種類似的段錯誤其實最好處理,因為它有call trace,根據(jù)堆棧信息去代碼里面查看就行了。

如果代碼中看不到明顯低級錯誤,就需要printk聯(lián)機調(diào)試,然而這種很少。

11、ioctl和unlock_ioctl有什么區(qū)別?

ioctl是老的內(nèi)核版本中的驅(qū)動API,unlock_ioctl是當下常用的驅(qū)動API。

區(qū)別在于ioctl調(diào)用前后,使用了大內(nèi)核鎖,而unlock_ioctl顧名思義就是沒加大內(nèi)核鎖的新接口,改變的只是驅(qū)動調(diào)的方法,用戶應用程序調(diào)用的接口不變。

大內(nèi)核鎖是Linux hacker在應付多處理器初期提出的一種鎖,目的在于當一個處理核心在運行內(nèi)核時,加上大內(nèi)核鎖,不讓其他cpu核心同時運行內(nèi)核程序,顯然這樣是有用的,然而這樣大大降低了多處理器的存在意義,于是跟隨時代更迭,大內(nèi)核鎖被一步一步的剔除,ioctl接口的升級就是典范!我覺得這樣的問題太沒有意義了,對開發(fā)有多大用處?

12、驅(qū)動中操作物理絕對地址為什么要先ioremap?

ioremp是內(nèi)核中用來將外設寄存器物理地址映射到主存上去的接口,即將io地址空間映射到虛擬地址空間上去,便于操作。為什么非要映射呢,因為保護模式下的cpu只認虛擬地址,不認物理地址,給它物理地址它并不幫你做事,所以你要操作外設上的寄存器必須先映射到虛擬內(nèi)存空間,拿著虛擬地址去跟cpu對接,從而操作寄存器。

11、設備驅(qū)動模型三個重要成員是?platform總線的匹配規(guī)則是?在具體應用上要不要先注冊驅(qū)動再注冊設備?有先后順序沒?

(1)總線,設備,驅(qū)動。

(2)匹配規(guī)則:當有一個新的設備掛起時,總線被喚醒,match函數(shù)被調(diào)用,用device名字去跟本總線下的所有驅(qū)動名字去比較,相反就是用驅(qū)動的名字去device鏈表中和所有device的名字比較。如果匹配上,才會調(diào)用驅(qū)動中的probe函數(shù),否則不調(diào)用。

(3)至于先后順序,鑒于個人理解,不會有影響,不管誰先誰后,bus都會完成匹配工作。

(4)談談對Linux設備驅(qū)動模型的認識:設備驅(qū)動模型的出現(xiàn)主要有三個好處

設備與驅(qū)動分離,驅(qū)動可移植性增強;

設備驅(qū)動抽象結(jié)構(gòu)以總線結(jié)構(gòu)表示,看起來更加清晰明,誰是屬于哪一條bus的;

最后,設備與驅(qū)動分離,很好的奠定了熱插拔機制。

12、linux中RCU原理?

rcu是2.6出現(xiàn)的一種讀寫鎖,可以說是老的讀寫鎖的升級版,主要用在鏈表這種數(shù)據(jù)結(jié)構(gòu)上,經(jīng)典使用場景是多讀者少寫者的情況,rcu允許多個讀者一個寫者共同操作數(shù)據(jù)而不必加鎖,這是經(jīng)典用法,若出現(xiàn)多個寫者時,寫者與寫者之間就得自己手動同步。當要刪除一個節(jié)點時,刪除后并不會馬上釋放節(jié)點,而是會等待在刪除動作之前已經(jīng)開始讀該節(jié)點的讀者都完成讀操作之后才會釋放此節(jié)點,這段時間被稱為寬限期。

13、談談Linux軟中斷?

Linux系統(tǒng)中的軟中斷,是專為一些不是特別要緊的耗時任務而產(chǎn)生的一種機制,多數(shù)用在中斷處理過程中,典型應用就是用于中斷下半部,tasklet機制就是基于軟中斷的典型下半部應用。

軟中斷就是結(jié)合任務調(diào)度、延遲處理等讓守護進程去處理一些不是特別緊急又耗時的任務。

14、linux系統(tǒng)實現(xiàn)原子操作有哪些方法?

答:提到原子操作,我首先想到的是針對整型的原子操作,atomic_t類型,這里面有一整套針對整型的原子操作API可以調(diào)用。既然整型能原子操作,那其他也應該可以吧,結(jié)合原子操作的定義,要想對其他類型結(jié)構(gòu)實現(xiàn)原子操作,那就加鎖咯,將需要原子操作的部分放在臨界區(qū)。

15、linux中系統(tǒng)調(diào)用過程?

系統(tǒng)調(diào)用,比如open()函數(shù),它并不是真正的系統(tǒng)調(diào)用實現(xiàn)函數(shù),其實它只是一個c庫函數(shù)。

內(nèi)部實現(xiàn)做了兩件事,先把系統(tǒng)調(diào)用號傳遞給內(nèi)核,最后拉起一次軟中斷,自此cpu進入內(nèi)核態(tài)運行。

內(nèi)核在軟中斷向量表中找出對應的中斷類型,根據(jù)中斷類型找到對應的軟中斷執(zhí)行函數(shù),然后執(zhí)行函數(shù)根據(jù)系統(tǒng)調(diào)用號,在系統(tǒng)調(diào)用號表里面找到對應的系統(tǒng)調(diào)用函數(shù)。

16、談談linux內(nèi)核的啟動過程(源代碼級)?

首先,內(nèi)核鏡像自解壓,解壓完之后從head.s開始運行,即引導內(nèi)核,在內(nèi)核引導期間將會設置內(nèi)核參數(shù)。

隨后,跳轉(zhuǎn)到第一個c函數(shù)start_kernel(),進入內(nèi)核啟動階段,在內(nèi)核啟動過程中進行一些必要的硬件初始化工作。

在內(nèi)核啟動最后,掛載文件系統(tǒng),然后創(chuàng)建第一個用戶空間進程,init進程,進一步完成驅(qū)動掛載,用戶服務初始化工作。

16.談談Linux調(diào)度原理?

答:Linux將進程按權(quán)限分為兩大類,常規(guī)進程和實時進程,常規(guī)進程對應一種調(diào)度算法,實時進程有兩種對應著兩種不同的調(diào)度算法。進程按照狀態(tài)又可以分為幾種,常見的狀態(tài)有,運行態(tài),可中斷睡眠態(tài),不可中斷睡眠態(tài),停止態(tài)。處于運行態(tài)的進程根據(jù)調(diào)度算法接受調(diào)度在cpu上運行。

17.談談對Linux網(wǎng)絡子系統(tǒng)的認識?

答:網(wǎng)絡子系統(tǒng)可以概括描述為:應用程序-》系統(tǒng)調(diào)用接口(主要是指socket接口)-》協(xié)議無關接口(有socket實現(xiàn),提供一套通用接口支持不同的協(xié)議)-》網(wǎng)絡協(xié)議(包括tcp、udp在內(nèi)的網(wǎng)絡協(xié)議)-》設備無關接口(有net_device接口組織的一組通用接口將網(wǎng)絡協(xié)議與各種網(wǎng)絡設備聯(lián)系起來)-》設備驅(qū)動(即各種網(wǎng)絡設備的驅(qū)動程序,負責管理具體的網(wǎng)絡設備)-》網(wǎng)絡設備(具體的網(wǎng)絡硬件設備)。

18.內(nèi)核中申請內(nèi)存有哪幾個函數(shù)?有什么區(qū)別?

答:只談談常見的三個接口,kmalloc(),vmalloc()和__get_free_pages()。kmalloc()操作的空間位于直接映射區(qū)(即4G空間中的896M區(qū)域),申請到空間物理地址多為連續(xù)地址,常用于操作頻繁的數(shù)據(jù)結(jié)構(gòu),連續(xù)地址利于提高訪問效率。而對于一些操作不頻繁的數(shù)據(jù)結(jié)構(gòu)可以用vmalloc()申請內(nèi)存,vmalloc()操作的空間優(yōu)先選擇高端內(nèi)存,這里申請出的內(nèi)存物理地址往往不是連續(xù)的,所以訪問效率不會很高。__get_free_pages()操作的區(qū)域跟kmalloc()相同,位于直接映射區(qū),不同的是它申請的是物理頁的整倍數(shù)大小的內(nèi)存。

19.談談內(nèi)核函數(shù)mmap的實現(xiàn)機制?

答:

--------------------- 本文來自 zs_2016 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/bitch_____/article/details/70158067?utm_source=copy

?

內(nèi)核、驅(qū)動相關

1、中斷和中斷的上半部分和下半部分的問題

???????中斷會打斷內(nèi)核中進程的正常調(diào)度和運行,當中斷到來時,要完成的工作往往并不會是短小的,它可能要進行較大量的耗時處理。所以中斷處理程序中所有不要求立即完成的,在開中斷的環(huán)境下,由中斷后半段完成.

????? 中斷前半段主要完成盡可能少的比較緊急的功能,例如簡單地讀取寄存器中的中斷狀態(tài)并清除中斷標志后就進行“登記中斷”的工作。這樣,頂半部執(zhí)行的速度就會很快,可以服務更多的中斷請求。

????? ?復雜的內(nèi)容則交由中斷下半部來執(zhí)行,而且中斷下半部可以被新的中斷打斷,這也是底半部和頂半部的最大不同。

????? ?當然, 如果中斷比較簡單,就不用區(qū)分上下半部了。

? ? ? ?Linux 系統(tǒng)實現(xiàn)底半部的機制主要有:

? ? ? ?三種:tasklet,工作隊列和軟中斷。??

1.1、tasklet與workqueue的區(qū)別及底層實現(xiàn)區(qū)別

? ?? ? 1)softirq和tasklet都屬于軟中斷,tasklet是softirq的特殊實現(xiàn);workqueue是普通的工作隊列。 ?

?? ? ? 2)如果推后執(zhí)行的任務需要睡眠,那么就選擇工作隊列workqueue(工作隊列是基于線程的封裝)。

????????? ? 如果推后執(zhí)行的任務不需要睡眠,那么就選擇tasklet。

參考

?

http://blog.csdn.net/cupidove/article/details/49927259

1.2、linux中斷的響應執(zhí)行流程?

???????處理器收到來自中斷控制器的中斷處理請求,保存中斷上下文,跳轉(zhuǎn)到中斷對應的處理處,(快速完成中斷中斷上半部,中斷上半部返回后執(zhí)行中斷下半部。如果做了上下半部處理的話),中斷處理函數(shù)返回時恢復現(xiàn)場。

?

1.3、軟中斷的工作工程模擬了實際的中斷處理過程

???????1)當某一軟中斷時間發(fā)生后,首先需要設置對應的中斷標記位,觸發(fā)中斷事務(raise_softirq()設置軟中斷狀態(tài)bitmap,觸發(fā)軟中斷事務)
???????2)然后喚醒守護線程去檢測中斷狀態(tài)寄存器(在Linux中 軟中斷daemon線程函數(shù)為do_softirq())
???????3)如果通過查詢發(fā)現(xiàn)某一軟中斷事務發(fā)生之后,那么通過軟中斷向量表調(diào)用軟中斷服務程序action()。

???????一個軟中斷不會去搶占另一個軟中斷,只有硬件中斷才可以搶占軟中斷,所以軟中斷能夠保證對時間的嚴格要求。

???????這就是軟中斷的過程,與硬件中斷唯一不同 的地方是從中斷標記到中斷服務程序的映射過程。在CPU的硬件中斷發(fā)生之后,CPU需要將硬件中斷請求通過向量表映射成具體的服務程序,這個過程是硬件自 動完成的,但是軟中斷不是,其需要守護線程去實現(xiàn)這一過程,這也就是軟件模擬的中斷,故稱之為軟中斷。

2、驅(qū)動中操作物理絕對地址為什么要先ioremap?

? ? ? ?因為內(nèi)核沒有辦法直接訪問物理內(nèi)存地址,必須先通過ioremap獲得對應的虛擬地址。

3、自旋鎖和信號量在互斥使用時需要注意哪些?在中斷服務程序里面的互斥是使用自旋鎖還是信號量?

???????使用自旋鎖的進程不能睡眠,使用信號量的進程可以睡眠。中斷服務例程中的互斥使用的是自旋鎖,原因是在中斷處理例程中,硬中斷是關閉的,這樣會丟失可能到來的中斷。

4、內(nèi)核函數(shù)mmap的實現(xiàn)原理,機制?

???????mmap函數(shù)實現(xiàn)把一個文件映射到一個內(nèi)存區(qū)域,從而我們可以像讀寫內(nèi)存一樣讀寫文件,他比單純調(diào)用read/write也要快上許多。在某些時候我們可以把內(nèi)存的內(nèi)容拷貝到一個文件中實現(xiàn)內(nèi)存?zhèn)浞荩斎?,也可以把文件的?nèi)容映射到內(nèi)存來恢復某些服務。另外,mmap實現(xiàn)共享內(nèi)存也是其主要應用之一,mmap系統(tǒng)調(diào)用使得進程之間通過映射同一個普通文件實現(xiàn)共享內(nèi)存。

5、linux中內(nèi)核空間及用戶空間的區(qū)別?

???????區(qū)別有很多,簡言概之就是:Linux系統(tǒng)采取兩級保護機制,對應兩種不同的操作權(quán)限,內(nèi)核空間權(quán)限高于用戶空間權(quán)限,內(nèi)核空間和用戶空間都有屬于自己的虛擬空間。

???????在32位系統(tǒng)中,cpu最高有32位尋址范圍,即對應4G空間,內(nèi)核空間被劃分在高1G虛擬空間,用戶空間在低3G。

???????普通應用程序運行在用戶空間,執(zhí)行一些貼近用戶的低權(quán)限操作,系統(tǒng)內(nèi)核程序,操作硬件的驅(qū)動程序等一些要求高級權(quán)限的程序運行在內(nèi)核空間。

???????用戶空間程序不能直接訪問內(nèi)核空間的數(shù)據(jù),內(nèi)核空間程序也一樣不能直接訪問屬于用戶進程空間的數(shù)據(jù),用戶空間和內(nèi)核空間之間的通信必須通過一些特定的方法。

5.1、用戶空間與內(nèi)核通信方式有哪些?

????? 1)首先想到的是系統(tǒng)調(diào)用,用戶空間進程通過系統(tǒng)調(diào)用進入內(nèi)核空間,訪問指定的內(nèi)核空間數(shù)據(jù);
??????2).其次是驅(qū)動程序,用戶空間進程可以使用封裝后的系統(tǒng)調(diào)用接口訪問驅(qū)動設備節(jié)點,以和運行在內(nèi)和空間的驅(qū)動程序通信;
??????3).共享內(nèi)存mmap,在代碼中調(diào)用接口,實現(xiàn)內(nèi)核空間與用戶空間的地址映射,在實時性要求很高的項目中為首選,省去拷貝數(shù)據(jù)的時間等資源,但缺點是不好控制;

??????4).最后,copy_to_user()、copy_from_user(),是在驅(qū)動程序中調(diào)用接口,實現(xiàn)用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝操作,應用于實時性要求不高的項目中。

6、設備驅(qū)動模型三個重要成員是?platfoem總線的匹配規(guī)則是?

????總線,設備,驅(qū)動。匹配規(guī)則就是當有一個新的設備掛起時,總線被喚醒,match函數(shù)被調(diào)用,用device名字去跟本總線下的所有驅(qū)動名字去比較。相反就是用驅(qū)動的名字去device鏈表中和所有device的名字比較。如果匹配上,才會調(diào)用驅(qū)動中的probe函數(shù),否則不調(diào)用。

?

--------------------- 本文來自 爬坑的小蝸牛 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/tainjau/article/details/79430905?utm_source=copy

?

1.什么是GPIO?
?

general purpose input/output??

GPIO是相對于芯片本身而言的,如某個管腳是芯片的GPIO腳,則該腳可作為輸入或輸出高或低電平使用,當然某個腳具有復用的功能,即可做GPIO也可做其他用途。?

也就是說你可以把這些引腳拿來用作任何一般用途的輸入輸出,例如用一根引腳連到led的一極來控制它的亮滅,也可以用一根(一些)引腳連到一個傳感器上以獲得該傳感器的狀態(tài),這給cpu提供了一個方便的控制周邊設備的途經(jīng)。如果沒有足夠多的gpio管腳,在控制一些外圍設備時就會力有不逮,這時可采取的方案是使用CPLD來幫助管理。

?

2.觸摸屏的硬件原理?

http://www./Article/Maintain/Technology/175945932.htm

http://www./u2/78837/showart_1186312.html

觸摸屏的主要三大種類是:電阻技術觸摸屏、 表面聲波技術觸摸屏、 電容技術觸摸屏。
?

電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏, 這是一種多層的復合薄膜,它以一層玻璃或硬塑料平板作為基層,表面圖有一層透明氧化金屬 (ITO氧化銦,透明的導電電阻) 導電層,上面在蓋有一層外表面硬化處理、光滑防擦的塑料層 、它的內(nèi)表面也涂有一層ITO涂層 、在他們之間有許多細小的(小于1/1000英寸)的透明隔離點把兩層導電層隔開絕緣 。當手指觸摸屏幕時,兩層導電層在觸摸點位置就有了接觸,控制器偵測到這一接觸并計算出(X,Y )的位置,再根據(jù)模擬鼠標的方式運作。這就是電阻技術觸摸屏的最基本的原理。

表面聲波技術是利用聲波在物體的表面進行傳輸,當有物體觸摸到表面時,阻礙聲波的傳輸,換能器偵測到這個變化,反映給計算機,進而進行鼠標的模擬。

電容技術觸摸屏利用人體的電流感應進行工作 。用戶觸摸屏幕時 ,由于人體電場,用戶和觸摸屏表面形成以一個耦合電容, 對于高頻電流來說,電容是直接導體,于是手指從接觸點吸走一個很小的電流

?

3.在Linux C中,ls這個命令是怎么被執(zhí)行的?

使用fork創(chuàng)建一個進程或exec函數(shù)族覆蓋原進程。

?

4.在一個只有128M內(nèi)存并且沒有交換分區(qū)的機器上,說說下面兩個程序的運行結(jié)果
1,
#define MEMSIZE 1024*1024
int count = 0;
void *p = NULL;
while(1) {
? p = (void *)malloc(MEMSIZE);
? if (!p) break;
? printf("Current allocation %d MB\n", count);
}

2,
while(1) {
? p = (void *)malloc(MEMSIZE);
? if (!p) break;
? memset(p, 1, MEMSIZE);
? printf("Current allocation %d MB\n", count);
}

?

第一道程序分配內(nèi)存但沒有填充,編譯器可能會把內(nèi)存分配優(yōu)化掉,程序死循環(huán);第二道,程序分配內(nèi)存并進行填充,系統(tǒng)會一直分配內(nèi)存,直到內(nèi)存不足,退出循環(huán)。

?

5.請定義一個宏,比較兩個數(shù)a、b的大小,不能使用大于、小于、if語句

搞的比較復雜。主要思想就是a-b的值的最高位是否為0;但是又得考慮整數(shù)溢出的問題,所以很復雜。不知道哪位大俠有更好的辦法,指點指點。
?

  1. #include <stdio.h>
  2. ?
  3. #define ZHENG(i) ((i >> 31) == 0)
  4. #define FU(i) ((i >> 31) != 0)
  5. #define COMPARE(a,b) ((ZHENG(a) && FU(b)) || (((ZHENG(a) && ZHENG(b)) || (FU(a) && FU(b))) && ((((a) - (b)) >> 31) == 0)))
  6. ?
  7. void main()
  8. {
  9. ?? ?int a = 0x80000001;
  10. ?? ?int b = 0x6FFFFFFF;
  11. ?
  12. ?? ?if(COMPARE(a,b))
  13. ?? ?{
  14. ?? ? ? ?printf("a >= b\n");
  15. ?? ?}
  16. ?? ?else
  17. ?? ?{
  18. ?? ? ? ?printf("a < b\n");
  19. ?? ?}
  20. }

--------------------- 本文來自 代碼戰(zhàn)士 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/shxcodewarrior/article/details/20122321?utm_source=copy

?

1、寫一段 C 代碼讓程序跳轉(zhuǎn)到地址是 0x8000 0000 的位置執(zhí)行

答:(*(void(*)(void))0x100000)();或者((void(*)(void))0x100000)();

?

2、簡述static 關鍵字的作用。

答:1)在函數(shù)體內(nèi),static 變量的作用范圍為該函數(shù)體,不同于auto 變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時仍維持上次的值。

2)在模塊內(nèi)的static 全部變量可以被模塊內(nèi)所有函數(shù)訪問,但不能被模塊外其他函數(shù)訪問。

3)在模塊內(nèi)的static 函數(shù)只可被這一模塊內(nèi)的其他函數(shù)調(diào)用,這個函數(shù)的使用范圍被限制在聲明它的模塊內(nèi)。

?

3、簡要敘述進程和線程這兩個概念。

答:進程是指一個程序在一個數(shù)據(jù)集合上的一次運行過程。

線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和執(zhí)行的基本單位。

進程是程序的一次執(zhí)行。線程可以理解為進程中執(zhí)行的一段程序片段。

?

4、請簡述自旋鎖和信號量兩個概念并對他們作出比較。

答:1)自旋鎖
自旋鎖是專為防止多處理器并發(fā)而引入的一種鎖,它在內(nèi)核中大量應用于中斷處理等部分(對于單處理器來說,防止中斷處理中的并發(fā)可簡單采用關閉中斷的方式,不需要自旋鎖)。
自旋鎖最多只能被一個內(nèi)核任務持有,如果一個內(nèi)核任務試圖請求一個已被爭用(已經(jīng)被持有)的自旋鎖,那么這個任務就會一直進行忙循環(huán)——旋轉(zhuǎn)——等待鎖重新可用。要是鎖未被爭用,請求它的內(nèi)核任務便能立刻得到它并且繼續(xù)進行。自旋鎖可以在任何時刻防止多于一個的內(nèi)核任務同時進入臨界區(qū),因此這種鎖可有效地避免多處理器上并發(fā)運行的內(nèi)核任務競爭共享資源。
事實上,自旋鎖的初衷就是:在短期間內(nèi)進行輕量級的鎖定。一個被爭用的自旋鎖使得請求它的線程在等待鎖重新可用的期間進行自旋(特別浪費處理器時間),所以自旋鎖不應該被持有時間過長。如果需要長時間鎖定的話, 最好使用信號量。
自旋鎖的基本形式如下:
spin_lock(&mr_lock);
//臨界區(qū)
spin_unlock(&mr_lock);
因為自旋鎖在同一時刻只能被最多一個內(nèi)核任務持有,所以一個時刻只有一個線程允許存在于臨界區(qū)中。這點很好地滿足了對稱多處理機器需要的鎖定服務。在單處理器上,自旋鎖僅僅當作一個設置內(nèi)核搶占的開關。如果內(nèi)核搶占也不存在,那么自旋鎖會在編譯時被完全剔除出內(nèi)核。
簡單的說,自旋鎖在內(nèi)核中主要用來防止多處理器中并發(fā)訪問臨界區(qū),防止內(nèi)核搶占造成的競爭。另外自旋鎖不允許任務睡眠(持有自旋鎖的任務睡眠會造成自死鎖——因為睡眠有可能造成持有鎖的內(nèi)核任務被重新調(diào)度,而再次申請自己已持有的鎖),它能夠在中斷上下文中使用。
死鎖:假設有一個或多個內(nèi)核任務和一個或多個資源,每個內(nèi)核都在等待其中的一個資源,但所有的資源都已經(jīng)被占用了。這便會發(fā)生所有內(nèi)核任務都在相互等待,但它們永遠不會釋放已經(jīng)占有的資源,于是任何內(nèi)核任務都無法獲得所需要的資源,無法繼續(xù)運行,這便意味著死鎖發(fā)生了。自死瑣是說自己占有了某個資源,然后自己又申請自己已占有的資源,顯然不可能再獲得該資源,因此就自縛手腳了。

2)信號量
Linux中的信號量是一種睡眠鎖。如果有一個任務試圖獲得一個已被持有的信號量時,信號量會將其推入等待隊列,然后讓其睡眠。這時處理器獲得自由去執(zhí)行其它代碼。當持有信號量的進程將信號量釋放后,在等待隊列中的一個任務將被喚醒,從而便可以獲得這個信號量。
信號量的睡眠特性,使得信號量適用于鎖會被長時間持有的情況;只能在進程上下文中使用,因為中斷上下文中是不能被調(diào)度的;另外當代碼持有信號量時,不可以再持有自旋鎖。
信號量基本使用形式為:
static DECLARE_MUTEX(mr_sem);//聲明互斥信號量
if(down_interruptible(&mr_sem))
//可被中斷的睡眠,當信號來到,睡眠的任務被喚醒
//臨界區(qū)
up(&mr_sem);

3)信號量和自旋鎖區(qū)別
雖然聽起來兩者之間的使用條件復雜,其實在實際使用中信號量和自旋鎖并不易混淆。注意以下原則:
如果代碼需要睡眠——這往往是發(fā)生在和用戶空間同步時——使用信號量是唯一的選擇。由于不受睡眠的限制,使用信號量通常來說更加簡單一些。如果需要在自旋鎖和信號量中作選擇,應該取決于鎖被持有的時間長短。理想情況是所有的鎖都應該盡可能短的被持有,但是如果鎖的持有時間較長的話,使用信號量是更好的選擇。另外,信號量不同于自旋鎖,它不會關閉內(nèi)核搶占,所以持有信號量的代碼可以被搶占。這意味者信號量不會對影響調(diào)度反應時間帶來負面影響。

--------------------- 本文來自 Cawen_Cao 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/Cowena/article/details/48706297?utm_source=copy

?

面試簡述

從9月份開始即吹響了找工作的號角,眾說紛紜,有老師說9月份的沒有必要,因為面向?qū)W歷招聘(很抱歉啊,博主第一學歷太渣了,研究生學歷還可以把);有學生也因為數(shù)次的碰壁而退居幕后,準備這十月份的再次重來。但是殘酷的現(xiàn)實證明,沒有經(jīng)過9月分的洗禮,很難有10月份的騰飛,我也很慶幸自己能夠于9月付諸行動。
我第一家去的是浙江大華,之后也投了中船但是石沉大海。在蘇州園區(qū)中漫無目的地閑蕩,只要看到有軟件崗位的便遞一份簡歷,聊一聊,而后轉(zhuǎn)身離開。埃斯頓給我白眼,科士達和杭州富特科技嫌我專業(yè)不對口便隨意打發(fā)了我;科大訊飛的筆試題都做了出來卻杳無音訊,北京經(jīng)緯恒潤的面試頗水(雖然博主很水),隨后投了蘇州瑞晟微電子(節(jié)后給消息)。輾轉(zhuǎn)于江寧和明故宮以及南大東南等高校,沒有給我喘息的機會,接踵而至的便是各種筆試和面試。
匯頂科技筆試深難,有幸進了二面和東大的一撥人同臺PK,然被干掉了,不過有幸能和高管聊天知道了自己的不足。有的時候真心覺著,你的堅持即使失敗也會給你帶點驚喜。中科創(chuàng)達筆試還行,進了HR面后,HR給我的印象尤為深刻,我敢說所有我接下來面試的HR都沒有它牛,問題精簡針對,不拖泥帶水,還好博主比較強大經(jīng)受住考驗(因為偷偷瞟了一眼,發(fā)現(xiàn)給我的打分都是A,最高的等級)
經(jīng)過節(jié)前的考驗和試練,你會發(fā)現(xiàn),無論你再怎么努力結(jié)果很可能還是被淘汰,因為面試只能給你帶來應對的經(jīng)驗而非專業(yè)技能的提升。所以節(jié)間我選擇提升下自己的專業(yè)水平。
節(jié)前的努力在節(jié)后便逐漸彰顯出來,各種面試通知以及即將到來的筆試給了自己莫大的動力。人生都是選擇的產(chǎn)物,你的選擇決定了你將來成為什么樣的人,面試也是如此。
節(jié)前的盲目選擇到節(jié)后的針對性選擇也是一個提升過程,因為精力有限,可以選擇自己感興趣或者把握比較大的。
節(jié)后主要是中新賽克、格力、中興、瑞晟、全志科技、芯動科技、深信服這幾家。我綜合前面的匯頂科技講一講面試內(nèi)容。其實各大公司面試環(huán)節(jié)都類似,具體可以加入493023412(TG微課堂①-求職不迷茫 )群,里面的老師講解的都挺好的,會總結(jié)面試前中后的注意事項以及如何套路面試官。主要環(huán)節(jié):自我介紹、專業(yè)面試(1-2面)、HR面,一般到了HR面基本上能定性你被錄取了(很大可能)。具體的面試問題稍后我會貼出。
面試過程中你會發(fā)現(xiàn),你從無話可說到滔滔不絕、從手足不定到氣定神閑,若如此恭喜你成為面霸。這一個過程也是時間積淀的結(jié)果,因為萬事萬物終究會開花結(jié)果,只是方式不同。廢話不多說了,上干貨。

筆試面試題

  1. 二分查找
  2. 校驗
  3. 關于字符串:
  4. 關于數(shù)據(jù)結(jié)構(gòu)
  5. 關于其他簡答題:
  6. 關于編程
    (一) 1.5n次比較,求出數(shù)組的最大值和最小值(數(shù)組亂序)
    (二) 環(huán)形緩沖區(qū),用數(shù)據(jù)結(jié)構(gòu)實現(xiàn)?
    (三) 鏈表的刪除,頭部插入,尾部插入實現(xiàn)?
    (四) 求出一個字符串的最長重復串,如“ababc”,返回“ab”
    (五) 求出一個周期字符串的最長周期,如“abcabc”,返回3
    (六) 使用C/C 實現(xiàn)一個單向鏈表,鏈表需要支持如下接口:
    (七) 網(wǎng)絡字節(jié)序轉(zhuǎn)換,大端小端。
    (八) 打開一個設備,讀取文件,打印輸出。
    (九) 給一個整數(shù),轉(zhuǎn)換為十六進制字符輸出
    (十) 給在 32 位處理器上,將任一整數(shù)轉(zhuǎn)換為二進制形式。
  7. C語言宏中”#”和”##”的用法
  8. 關于IPv6:
  9. Arm有多少32位寄存器?
  10. HAL層:硬件抽象層
  11. Arm2440和6410有什么區(qū)別?
  12. 開發(fā)板時鐘(2410和6410對比)什么是PLL(鎖相環(huán)):
  13. Arm開發(fā)板的資源,主頻多大?內(nèi)存多大?
  14. CPU,MPU,MCU,SOC,SOPC聯(lián)系與差別
  15. 線程池怎么設計
    (一) 什么是線程池?
    (二) 為什么要用線程池?
    (三) 線程的工作流程
    (四) 線程池設計
  16. free函數(shù)怎么知道釋放內(nèi)存大小
  17. 構(gòu)造函數(shù)和析構(gòu)函數(shù)拋出異常
  18. tcp/udp上層網(wǎng)絡協(xié)議舉例并說明原理
    (一) HTTP:
    (二) TFTP:
  19. 關于內(nèi)存泄漏
  20. 一個服務器對10000客戶端,服務器上的線程模型
  21. 代碼效率優(yōu)化怎么搞
  22. GPIO三種狀態(tài):輸入輸出和高阻態(tài)
  23. 上拉和下拉:
  24. GPIO外部有三種情況:1)直接接地2)直接接電源3)懸掛。請問在GPIO內(nèi)部可以實現(xiàn)上拉和下拉的情況下如何判斷這三種情況?
  25. 串口協(xié)議講一講?
  26. RS232和RS485通訊接口有什么區(qū)別?
  27. IIC時序圖畫一下,IIC有哪些狀態(tài),給一個字節(jié),將它發(fā)送出去。IIC有什么注意事項?有沒有用I/O模擬IIC,如果有需要注意什么?
  28. 講解一下IIC總線
  29. Bootloader的流程
  30. 為什么2440的內(nèi)存起始地址是3后面7個0呢?
  31. 為什么6410的內(nèi)存起始地址是5后面7個0呢?
  32. 三個字節(jié)char型,上電為隨機數(shù),求三者之和為零的概率
  33. VS中Debug和Release的區(qū)別
  34. Zigbee的傳輸速率多大?(智能家居)為什么用它,和其他傳輸有什么區(qū)別?WIFI安全嗎,為什么?
  35. 用戶和內(nèi)核如何通訊?(追問:驅(qū)動程序中如何從用戶到內(nèi)核)
  36. 計算機訪問哪個最快?
  37. 線程和進程的區(qū)別?
  38. 設計模式有哪些?
  39. 軟件的設計流程?
  40. 指針和引用的區(qū)別?
  41. 內(nèi)存管理有什么看法?(MMU)
  42. 鎖有哪些?有什么注意事項
  43. 信號量和自旋鎖區(qū)別
  44. 中斷能不能睡眠,為什么?下半部能不能睡眠?
  45. 上下文有哪些?怎么理解?
  46. 死鎖產(chǎn)生的原因及四個必要條件
  47. 驅(qū)動中首先執(zhí)行什么?
  48. 觸摸屏和lCD驅(qū)動中做了什么,流程是什么?
  49. 輸入子系統(tǒng)上報系統(tǒng)有什么函數(shù)?怎么知道有沒有上報成功?
  50. 總線設備驅(qū)動模型之間是什么關系?設備和驅(qū)動之間的如何匹配,匹配規(guī)則是否可變?
  51. 什么是交叉編譯?為什么需要交叉編譯?為什么還要主機編譯
  52. 簡述linux系統(tǒng)啟動過程
  53. Linux設備中字符設備和塊設備有什么主要區(qū)別?分別舉例。
  54. 主設備號和次設備號的用途
  55. Linux下rs232和rs485編程有什么區(qū)別?
  56. Uart和IIC和SPI的區(qū)別(提示:關于異步和同步,電子器件上的)?
  57. 用串口發(fā)送十個字節(jié)就丟失一個兩個你會怎樣檢查;發(fā)送的時候?qū)Ψ皆O備不響應你該怎么辦
  58. IIC,scl頻率多大
  59. 觸摸屏中斷做了什么,LCD中斷做了什么?
  60. zigbee用的哪家方案?zigbee端點類型有哪些,這些概念的區(qū)別?端點能夠中轉(zhuǎn)嗎?一個端點上有哪些設備?你做的項目或者實踐有多少節(jié)點?zigbee上有操作系統(tǒng)嗎?
  61. 客戶端是否單獨連接服務器(客戶端和客戶端直接是否點對點連接)?客戶端之間有沒有交互?有沒有考慮服務器進程如果崩潰了,客戶端資源沒有得到釋放怎么做?那么如果服務器正常,客戶端中途斷開連接怎么辦?如果發(fā)送文件,是直接點對點嗎,也就是客戶端之間直接通訊?線程池中線程之間是分離的嗎?
  62. 沒有使用MySQL之類的嗎?sqlite是線程安全的嗎
  63. 視頻監(jiān)控系統(tǒng)這個項目能不能做圖像的簡單處理,比如截???網(wǎng)頁中如果要打印換行符,怎么打???這個項目中做的驅(qū)動中,你這個視頻子系統(tǒng)用的是不是內(nèi)核的?
  64. QT,用的熟嗎?做的驅(qū)動有沒有編入內(nèi)核?既然沒有編入內(nèi)核,那是需要手動去啟動和裝載嗎?需不需要創(chuàng)建設備節(jié)點?用戶是如何訪問這些驅(qū)動的?做的驅(qū)動都是字符設備嗎?
  65. 你這個項目中zigbee用的是哪家的方案?控制設備有哪些?有多少節(jié)點?也就是說只是一對用于通訊是嗎?。
  66. 線程和進程,為什么選擇線程?線程為什么占用更少的資源?線程共享進程的哪些資源?線程池如何實現(xiàn)的?是不是什么都用線程比較好?
  67. 畫一下Arm的體系架構(gòu)
  68. 以下圖片是哪種語言
  69. typedef struct _MAD_SYS_CONFIG{ MAD_U32 smiBase,…}MAD_SYS_CONFIG_t;
    typedef struct {MAD_U32 smiBase,…} MAD_SYS_CONFIG; 這兩種寫法是一個意思嗎?
  70. 關注過哪些開源的東西?
  71. 內(nèi)核定時器如何實現(xiàn)(通過鏈表)?如何找到具體的鏈表?
  72. 內(nèi)核鏈表為什么具有通用性?
  73. 網(wǎng)盤妙傳功能如何實現(xiàn)?
  74. 用戶態(tài)和內(nèi)核態(tài)通信方式?
  75. 分配內(nèi)存哪些函數(shù)?kmalloc有兩個參數(shù),各個作用是什么?
  76. 有哪些鎖,各自的效率問題?自選鎖怎樣實現(xiàn)的?
  77. 孤兒進程與僵尸進程[總結(jié)]和守護進程如何實現(xiàn)?
  78. 第三個項目是如何處理并發(fā)的,除了線程池還有更好的哪些方法?
  79. 主線程如何知道子線程的退出?
  80. 講解下內(nèi)核網(wǎng)絡體系?
  81. 軟中斷是如何實現(xiàn)的?
  82. 對內(nèi)存管理有什么看法和了解?
  83. 哈希表原理?針對字符串,如何確定key值(hash表存儲字符串時,key怎么確定)?map怎樣實現(xiàn)的?map和哈西表不一樣吧?Hash和B樹的區(qū)別?
  84. 接觸過哪些STL容器?哪個效率最高?
  85. 寫驅(qū)動的時候有沒有遇到問題,怎么檢查?有沒有遇到coredump?
  86. 應用程序如果運行時出現(xiàn)錯誤該怎么排查;如果越界該怎么排查?
  87. open和fopen有什么區(qū)別?read/write和fread/fwrite區(qū)別?
  88. 線程池如何使用創(chuàng)建的?讓你自己寫一個線程池怎么實現(xiàn)?
  89. 主線程如何檢測一個子線程也就是客戶端的退出?如果現(xiàn)在讓你實現(xiàn)可以瀏覽文件夾里文件再傳輸,你會怎么做?

我相信如果能搞懂以上問題,面試什么的便沒有問題。

HR面試題

正常的HR面試:
平時喜歡干什么
高考情況,成績,考研情況,成績

特此列出部分我認為具有挑戰(zhàn)性的問題:

中科創(chuàng)達HR面
1. 自我介紹下。被打斷【她說不好意思注意回說謝謝,同時還要記得自己說到哪里】然后再次打斷她沒有讓你繼續(xù)自我介紹。到此自我介紹便結(jié)束。
2. 你家在哪,這些項目都是你做的嗎?有沒有讓自己感到很挫敗的事情?同學周圍的人對你是怎么評價的?你的缺點是什么?【老掉牙的問題】
3. 分配任務,你和另外一個人合作,主要都是你做的,但是上級不知道,把功勞主要分給了另個人,你會怎么想。我首先講了自己學習到的很多,并不會太在意!然后她追問:如果一直出現(xiàn)這個問題,你會怎么樣?!鞠溶浐笥病?br/> 4. 分配一個任務,由你和另外一個人完成,你只能借助他完成,因為其能力比你強,如果他和你格格不入,你會怎么辦?如果一直這樣你會怎么辦?【先自身后他人,結(jié)合團體公司利益闡述,最后可上升到公司層面
5. 我們公司有兩種,一個是個人負責項目,成就感更好,一個是和同事一起做項目,你傾向于哪種?我說:可以和能力高于我的一起合作,并沒有特定要求個人自己做。追問:如果有人能力不行怎么辦?我說:沒有關系,可以帶。追問:不是托你后腿嗎。我說:教同事,能提高自己,給予會帶來回報,而且自己會的并不算真正會,把別人教會了才算。【注意這里的陷阱,一定要選擇團隊項目

中興HR面
1. 你是如何完成一個分配給你的任務的?
2. 在你做的這些項目中有沒有很難忘的困難或者經(jīng)歷,那你有沒有想過,如果現(xiàn)在回想這個困難如何更好地去解決?【考察你的即時總結(jié)和部分記憶力的能力 真實性考察】
3. 這些項目都比較閑散,和真正工作的時候不一樣,不能這塊沒有做好放一段時間,那你怎么辦?【實戰(zhàn)和訓練的區(qū)別,可自由發(fā)揮】

博客寫完,浙江大華和中興的offer還沒有消息,雖然手里有了9個offer,但是只有那幾個是比較中意的。最后祝大家能夠有博主的好運,愿都能找到自己的歸處。Best wishes to you!!

PS:博主又來更新了,有幸再次斬獲中興和大華的offer,但是選擇公司很難,具體可以參考??臀恼?br/>http://mp.weixin.qq.com/s?__biz=MjM5NDYxMzk1Nw==&mid=2652260196&idx=3&sn=d44b136bfff82bc157db4c43b7477a17&chksm=bd67f8ce8a1071d8164fbb5a9ae5bc6e51d08286428fc86803c88ba7cf179e1716da1b017169&scene=4#wechat_redirect
中的闡述,我覺著中肯有用。

--------------------- 本文來自 BeyondTheBoundary 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/Mingrenjiuwei/article/details/52878012?utm_source=copy

?

來源:http://www./content-4-26921.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多