21-0003 2020年3月25日的面试,开发岗位遇到的题目
面試中遇到的問題
- 1.簡歷投遞情況
- 2.知識掌握情況
- 2.1 C++
- 2.2 Unity 3d
- 3.筆試面試情況
- 3.1 北京庚圖
- 3.2 華為
- 3.3 三七互娛
- 4.個人現狀
1.簡歷投遞情況
前言:考研呢,自然是失敗了,開始了一邊找工作,一邊寫畢設的日子,于我而言項目經歷并不是特別的充足,而且考研時候學習的知識還剩下一丟丟,簡歷相對而言是比較空蕩蕩的,寫代碼的速度也比較慢,可能我就不適合做程序員?不,我就是程序員。
先說簡歷投遞:
青果靈動【接了個電話就沒消息了】
樂道互動【實習過兩個月,但是再投簡歷的時候完全沒有消息】
攜程【能力測試題寫完就沒啦】
快看世界【牛客網上投遞之后沒了消息】
華為【目前寫了筆試題】
北京庚圖【筆試+面試,效果不太好,估計是涼了】
美團【目前只是投遞了簡歷】
三七互娛【寫了筆試題】
博樂科技【寫了筆試題】
京東方【莫得消息】
埃森哲【同上】
尚游游戲【沒有消息】
帆軟【沒有消息】
科大訊飛【么有消息】
搜狗【么有消息】
跟人覺得投遞還算比較積極,但是效果并不是很好,學習的動力并不是很足,但是我有學習的欲望,不想學的時候就開始寫博客,寫累了就去學習,話說我已經兩個星期沒有碰畢設了,似乎別人的都快完成啦,真的!我比較菜?不,我不承認。
2.知識掌握情況
2.1 C++
掌握不牢固的:
- 遇到tree、map就開始發慌,二叉樹的那一大堆東西掌握的不是很好,圖的掌握情況更不好,相關的知識點總是記混。
- 字符串處理的相關函數掌握不牢固,有個分割函數,總覺得用過,但就是想不起來。
- 數據類型的轉化也不是特比好,比如string轉化為int就比較惡心,當時沒想出來可以使用什么函數,只能自己寫函數處理。
- 數據的存儲、編譯過程、內存的管理掌握的并不是很好,比如虛函數列表,父類指針直線子類對象等,感覺很亂。
- 關于循環中的++i,i++等究竟應該怎么加,退出條件要不要等號,這樣的問題通常需要想很久。
- 最后一個,與代碼相關的:遞歸的使用,非常之不熟練,即使能夠看懂別人的代碼,但是自己依舊不能復現。
- 與線程有關的,與Linix有關的,與Qt有關,與MySQL有關的,看到就比較慌,不知所措。
比較熟練的:
- 數組、動態數組、堆棧、向量、隊列這樣的數據結構,使用起來都比較好,但是初始化的時候需要編譯器的提示,自己總是忘記初始化的規則。
- 排序算法也還好,快排現在應該是可以實現的,其他比較高級的LSD、MSD、shell sort等知道原理,自己實現可能要花費一些時間。
- 面向對象的思想以及類的使用,比較熟練,現在寫稍稍長一點的代碼都傾向于使用面向對象,而不是面向過程。
- 文件處理這一塊雖然談不上精通,但也用的得心應手。
2.2 Unity 3d
不太熟練的地方:有很多
- Unity用了兩年,基本的操作都會,但是需要回憶,考研的時候沒有Unity好久都不實用了,Unity的基礎知識現在不是特別牢固。
- Unity中函數的執行過程,以及執行順序?
- Unity中的渲染流水線都有哪些過程?會進行什么操作?
- Unity中的協程與線程的異同有哪些?
- 還有好多Unity的相關問題,似乎都不是特別的了解?
3.筆試面試情況
現在做過的筆試題目,只有北京庚圖,華為,三七互娛,效果不是特別好,三七互娛考的是Unity知識點,還有一顆樹,好難受,不知道寫的代碼可不可以運行。
3.1 北京庚圖
兩道題目,一道代碼找錯題目,一道編程題(C語言)。
編程題:從輸入的字符串中析取出文件路徑,文件名,文件后綴。
當時太緊張了,以為這路徑有蹊蹺,不知道Is是屬于路徑的,還是屬于文件的,竟然傻到用空格作為劃分字符。
實際上,這里應該從后往前讀取,第一個點分割的是文件名與后綴,第一個反斜杠分割的是路徑名與文件名。
3.2 華為
三道編程題,奈何自己寫代碼速度實在是慢,在沒有百度的情況下!
第一道:輸入 IP地址 IP地址 子網掩碼 判斷兩個IP是不是來自同一個網絡
是的話就輸出 1 并且輸出網絡地址,如下:
我的代碼:
#include <iostream> #include <string> using namespace std; //字符串轉化為數字 int strint_to_int(string str) {int num = 0;for (int i = 0; i < str.size(); i++) {int temp = pow(10, str.size() - i - 1) * ((int)str[i] - 48);num += temp;}return num; } //字符串的分割,根據'.' string* get_split(string str) {string* str_sp = new string[4];int index[3], count = 0;for (int i = 0; i < str.size(); i++) {if (str[i] == '.') {index[count++] = i;}}for (int i = 0; i < index[0]; i++)str_sp[0] += str[i];for (int i = index[0] + 1; i < index[1]; i++)str_sp[1] += str[i];for (int i = index[1] + 1; i < index[2]; i++)str_sp[2] += str[i];for (int i = index[2] + 1; i < str.size(); i++)str_sp[3] += str[i];return str_sp;} //獲取IP地址中的字符串 int* get_num(string str) {int* arr = new int[4];string* str_split = get_split(str);for (int i = 0; i < 4; i++) {arr[i] = strint_to_int(str_split[i]);}return arr; } //打印數組arr void print_arr(int* arr, int num) {for (int i = 0; i < num; i++) {cout << arr[i] << ' ';} } int main() {string str1, str2, str3;cin >> str1;//讀入IP地址1cin >> str2;//讀入IP地址2cin >> str3;//讀入子網掩碼int* arr1 = get_num(str1);int* arr2 = get_num(str2);int* arr3 = get_num(str3);int* result = new int[4];int same = 0;//判斷是否一致if ((arr1[0] & arr3[0]) == (arr2[0] & arr3[0]))if ((arr1[1] & arr3[1]) == (arr2[1] & arr3[1]))if ((arr1[2] & arr3[2]) == (arr2[2] & arr3[2]))if ((arr1[3] & arr3[3]) == (arr2[3] & arr3[3]))same = 1;for (int i = 0; i < 4; i++) {result[i] = (arr1[i] & arr3[i]);}//輸出結果cout << same << ' ' << result[0] << '.' << result[1] << '.' << result[2] << '.' << result[3]; }備注:我的代碼實在是太原生了,字符串分割的沒想起來,string轉化為int也沒有想起來,只能自己寫函數進行轉化。最后竟然通過了測試,我也真的是覺得神奇。
題目中原來想要使用的函數s:
字符串分割函數:
//C++中沒有提供類似于python,java中那樣的對于字符串進行分割的函數,幸好當時沒寫出來 //只能自己寫一個函數,用來進行字符串的分割 vector<string> str_split(string str, char ch) {//不知道會匹配到幾個//返回string* 會不會不太合理//這里返回的是vectir類型的變量,比較方便vector<string> v_str;string temp;for (int i = 0; i < str.size(); i++) {if (str[i] != ch) {temp.push_back(str[i]);}else {v_str.push_back(temp);temp = "";}}if (temp.size() > 0)//如果最后temp中是有元素的,也要壓如棧中v_str.push_back(temp);return v_str; }字符轉轉化為整形:
#include <stdio.h> int i = atoi("2234");//頭文件以及這個函數是可以完成轉換的 //可以理解為auto to int第二道:輸入一個只含有0或1的二維矩陣,計算該矩陣的最大子矩陣的面積,其中對于最大子矩陣的定義是方形的,原二維矩陣也是方形的,如下:
矩陣A: 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 0 0 0 1 1 0 0 0最大子矩陣: 1 1 1 1 1 1 1 1 1面積:2我的代碼,只通過了80%的測試用例,不知道是為什么????
#include <iostream> #include <string> using namespace std;//檢測矩陣中是不是全為1 //給定一個數組,從元素(x,y)處,向右向下開始判斷是否為方形 bool mat_one_test(int** m, int x, int y, int d) {for (int i = x; i < x + d; i++) {for (int j = y; j < y + d; j++) {//直線寫的是j<x+d是一處錯誤if (m[i][j] != 1)return false;}}return true; }int main() {int d;cin >> d;//d = 3;char* str = new char[d];int** m = new int* [d];//int mat[3][3] = { {1,0,0},{1,1,1},{1,0,1} };//處理輸入,一一賦值到數組里面for (int i = 0; i < d; i++) {cin >> str;m[i] = new int[d];for (int j = 0; j < d; j++) {m[i][j] = (int)str[j] - 48;}}int sub_m = 0;//子邊的長度int left, right;//左右下標//先找連續邊//獲取邊長然后對方形進行檢測,判斷是否是方形的//是否應該用矩陣直接進行對比//判斷這個矩陣中的元素是否全為1for (int i = d; i > 0; i--) {for (int j = 0; j <= d - i; j++) {for (int k = 0; k <= d - i; k++) {if (mat_one_test(m, j, k, i)) {if (i > sub_m) {sub_m = i;}}}}}cout << sub_m * sub_m << endl; }輸入和輸出,如下:
4 1110 1110 1111 1111 9 //備注:輸入的時候先輸入邊長,然后不帶空格輸入數組信息,最后一行是得到的結果 //so?為什么不能全部通過測試?備注:So?為什么會有20%的測試用例,是無法通過測試的
第三道:SJF作業調度問題?最后一道題目剩余的時間很短,還沒來得及理解題意,大概是多cpu情況下的SJF調度?
恨自己當時為什么沒有復制下來,只想著提交試卷了!!!!!
3.3 三七互娛
問題1:
Q:產生死鎖的四個條件?
A:
問題2:Unity中協程與線程的區別?
Q:進程、線程、協程之間的關系?
A:
Q:線程與協程的區別?
A:
Q:Unity中的協程?
A:
Link:unity 協程原理與線程的區別
問題3:TCP與UDP的異同
Q:TCP?
A:
Q:TCP連接建立:使用三次握手建立連接
A:
Q:TCP終止一個連接——四次握手
A:
Q:UDP?
A:
Q:TCP與UDP的異同?
A:
【原文地址】:什么是TCP、UDP以及兩者的區別
備注:原文中錯別字有點多,不影響閱讀。
問題4:
Q:Unity中函數的執行順序?
A:11-0002 Unity中函數的執行過程
Unity函數的執行過程,都寫在了上面的博文中,主要是對Unity官網中的一篇文章進行了翻譯,看中文的話,勉強還是能看得懂的。
問題5:
Q:Unity渲染管線的順序?
A:應用程序階段(CPU控制)、幾何階段(GPU控制)、光柵化階段(GPU控制)
鏈接:Unity3D Shader 渲染流程
問題6:
Q:OSI七層模型?TCP/IP四層模型?
A:OSI 七層模型和TCP/IP模型及對應協議(詳解)
上面文章中給出的解釋十分的清晰,推薦!
4.個人現狀
現在時間:2020年3月30日20:24:45
這篇文章大概是上周寫的,已經通過了背景庚圖的面試,拿到了offer,但是這家如同無心插柳,明天是華為的面試,技術面試有兩輪,順便還約定了綜面,雖然不是特別能搞清楚面試流程,盡力就好!
.
特別緊張,聽說有基本軟件基礎、個人項目、手撕代碼,emm,手撕代碼這一項,我認為是程序員必要的,但目前自己的能力不是很足,尚且還做不到,開篇就需要百度,比較惡心。
總結
以上是生活随笔為你收集整理的21-0003 2020年3月25日的面试,开发岗位遇到的题目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot Endpoint
- 下一篇: 为什么越来越多30多岁的程序员开始迷茫呢