C基礎 北京大公司面試簡單總結

来源:http://www.cnblogs.com/life2refuel/archive/2016/04/08/5369655.html
-Advertisement-
Play Games

作者有話說 這是關於程式員面試的一篇文章, 希望對你有幫助. 幹了快3年了. 可以簡單參考, 對比總結.雖然本人很水. 很喜歡當前做的手游項目.做的很認真.後端每個人技術都很好.但是結果都不如意.在死亡線上掙扎. 目前基本上老大都找小弟們談談走的事. 但是我的老大還有老大的老大希望我繼續留下來. 哎 ...


作者有話說

  這是關於程式員面試的一篇文章, 希望對你有幫助. 幹了快3年了. 可以簡單參考, 對比總結.雖然本人很水.

很喜歡當前做的手游項目.做的很認真.後端每個人技術都很好.但是結果都不如意.在死亡線上掙扎.

目前基本上老大都找小弟們談談走的事. 但是我的老大還有老大的老大希望我繼續留下來. 哎, 但想出去看看.

簡單的自扯一點. 我是2013年退學出來乾IT. 當時做window後端相關開發. 後面從事Linux後端開發. 用過

較多語言,技術很一般.

  幹了那麼久有點明白了, 產品比技術重要......  

那開始說正題吧, 最近1-2周面過的那些名門.幫同事面的就不寫了,也比較多.都很相似.

 

面 一個最好的團購部門

  我的同事跳槽進去了,內推我進去. 主要是做高性能Web相關開發.這方面沒有項目經驗,但面試我的人很熱心.

耐心的同我講解Web框架,流程等. 其中問我一個問題是

/*
 * 1. 怎麼判斷一個字元串是個合法的ip串.
 */

需要手寫.再扯一點, 面的東西太多了就找一個有代表性的面試題吧. 

 主要思路是 以 ip4 為例 *.*.*.* => *.*.*.*\0 以 '.'和\0 分割成4部分處理. 比較基礎主要看代碼

// 是ip返回 true, 否則返回false
bool 
isipv4(const char* ips) {
    //記錄當前計數範圍[1, 3], 總的計數範圍[7, 15], n記錄當前量, 點的個數
    int ncut = 0, scut = 0, n = 0, dcut = 0; 
    char c; // 臨時量記錄*ips結果
    // 簡單判斷字元串
    if(!ips || !*ips) return false;
    
    do {
        c = *ips;
        // 非法字元直接返回false
        if((c<'0' || c>'9') && c!='.') return false;
        if(c>='0' && c<='9') {
            n = 10*n + c - '0';
            // 排除>=256 和 00,09的情況
            if((n>255) || (ncut>0&&n<10))
                return false;
        }
        if(c=='.' || !ips[1]){ // *.*.*.*\0 以'.' 和 \0分割
            n = 0; 
            ncut = -1;
            ++dcut;
        }
    } while((*++ips) && (dcut<4) && (++ncut<=3) && (++scut<=15));
    
    return dcut==4 && !*ips && ncut<=3 && scut<=15;
}

當然面試官說語言不限. 我就用C寫了個. 當時是下午狀態不好.面試的很不好. 數據結構,演算法,緩存,linux基本都過了.

關於資料庫mysql 方面不行, 被問倒了. 主要問事務,慢查詢, 索引優化. explain和mysqldumpslow 等等...

這裡三面中聊的最多的是設計. 對當前公司模塊的設計, 對未知模塊的設計. 例如他問,我們這是個電商, 你怎麼設計電商系統等等..

面的都比較實在, 手寫的演算法題也簡單.

最後結果是, 那邊經理說,有幾個人都差不多再看看.

總結: 狀態不好,不情願千萬別去面. 要去面一定要全力以赴.

技術方面:數據結構要可以, 對自己當前公司的架構要深刻瞭解. 基礎知識要牢固. 資料庫要好.

完整演示demo, 運行結果也在下麵

#include <stdio.h>
#include <stdbool.h>

// 是ip返回 true, 否則返回false
bool isipv4(const char* ips);

/*
 * 1. 怎麼判斷一個字元串是個合法的ip串.
 */
int main(int argc, char* argv[]) {
    const char* ips;
    
    ips = "192.168.1.34";
    printf("%s => %d\n", ips, isipv4(ips));
    ips = "192.168.1.34.45";
    printf("%s => %d\n", ips, isipv4(ips));
    ips = "192.0.01.34";
    printf("%s => %d\n", ips, isipv4(ips));
    ips = "192.168.1.341";
    printf("%s => %d\n", ips, isipv4(ips));
    ips = "0.77.1.a4";
    printf("%s => %d\n", ips, isipv4(ips));

    return 0;
}

// 是ip返回 true, 否則返回false
bool 
isipv4(const char* ips) {
    //記錄當前計數範圍[1, 3], 總的計數範圍[7, 15], n記錄當前量, 點的個數
    int ncut = 0, scut = 0, n = 0, dcut = 0; 
    char c; // 臨時量記錄*ips結果
    // 簡單判斷字元串
    if(!ips || !*ips) return false;
    
    do {
        c = *ips;
        // 非法字元直接返回false
        if((c<'0' || c>'9') && c!='.') return false;
        if(c>='0' && c<='9') {
            n = 10*n + c - '0';
            // 排除>=256 和 00,09的情況
            if((n>255) || (ncut>0&&n<10))
                return false;
        }
        if(c=='.' || !ips[1]){ // *.*.*.*\0 以'.' 和 \0分割
            n = 0; 
            ncut = -1;
            ++dcut;
        }
    } while((*++ips) && (dcut<4) && (++ncut<=3) && (++scut<=15));
    
    return dcut==4 && !*ips && ncut<=3 && scut<=15;
}
View Code

 

 

 面 一個最好的手游工作室

  這個面試基本上刷新了我的面試記錄. 都5面過了. 對我說你可以的恭喜. 這邊還需要總部的一個總監面試一下. 但是等了很久,

聯繫了第一面那位. 那位讓我再等等,估計總監忙.豪門社招真心 讓你等到麻木.(但是面的很值, 都是前輩高手)

中間最關鍵的是二面,他們的技術總監過來了. 問的很隨意,先讓我手寫一個完整的可運行的程式. 求加數和

/*
 * 寫一個完整的程式. 
 * 輸入一個數c,輸出所有 c = a+b的結果
 * 例如 3 = 1 + 2, 不用輸出 3 = 2 + 1 和 3 = 1 + 1 + 1
 */

再扯一點,這家公司一面很難. 中途總結: 電腦網路, 數據結構, 實戰經驗, 操作系統知識不好, 行業經驗不足基本上 過不去.

這方面也很贊同, 基礎知識決定程式員的地基打的牢不牢固. 不細說了, 還是說這個題吧

#include <stdio.h>
#include <assert.h>

// 列印所有結果
void printsum(int s);

/*
 * 寫一個完整的程式. 
 * 輸入一個數c,輸出所有 c = a+b的結果
 * 例如 3 = 1 + 2, 不用輸出 3 = 2 + 1 和 3 = 1 + 1 + 1
 */
int main(int argc, char* argv[]) {
    int s;

    // 輸入階段
    printf("Please input sum(need gt one):");
    if(scanf("%d", &s)!=1 || s<=1){
        fprintf(stderr, "Input s:%d is error!\n", s);
        return -1;
    }

    //輸出階段
    printsum(s);

    return 0;
}

// 列印所有結果
void 
printsum(int s) {
    int i, len;
    // 習慣決定素質, 謙虛就是最好的習慣和最大的裝逼
    assert(s>1);
    
    for(i=1, len = s/2; i<=len; ++i)
        printf("%d = %d + %d\n", s, i, s-i);
}

演示結果如下

還有

他看完後. 基本上就過了. 後面就繼續聊設計了了. 模塊設計, 代碼調試了等 後面項目經理面, 技術專家面等. 都好難很深入. 真心覺得,

經驗不足,能力不夠, 外在不註意那就pass.

總結: 大公司核心部門 講究的是運氣了. 如果不是極其優秀的話. 關鍵優秀也是靠時間的. 薑還是老的辣.

感悟:像我這樣的菜鳥還是需要多向前輩們多學習學習,爭取少趟坑.

能和那些乾的很久的同行交流,是一件很愉快的事. 朋友們多找機會.

這家公司很註意外在談吐, 內在基礎和聰明程度.

臉黑或實力不是撒亞人超表 我看懸...

 

面 一個低調的端游公司

  這家是北京為數不多的端游公司, 很低調.個人面試的很愉快. 如果實在臉黑. 已經準備加入到這家公司維護和開發更出色游戲項目.

它需要先做筆試題. 快速的花了30min做完了. 就找前臺聊了. 聊得最多的是基礎和調試還有就是設計. 最後應該是組長給我

定位說你技術可以,就是設計差....... 其中一個面試題如下

/*
 * 寫一個函數 "將整數字元串轉成整數"
 */

 這家公司 主要問電腦網路 和 pthread線程開發 還有C++基礎聊得很多. 要求最高的就是C++基礎. 上面題做出來容易. 做好不容易看下麵.

/*
 * 將整數字元串轉成整數.通過pnum返回
 * istr        : 源字元串
 * pnum        : 返回的整數
 *             : 返回0表示成功, -1表示參數錯誤, -2表示溢出
 */
int 
convert(const char* istr, int* pnum){
    int num = 0, tmp;
    char c, f = 0; // f == 1表示負數

    // 先檢查參數錯誤
    if(!istr || !*istr || !pnum) return -1;
    // 處理政府號
    if((c=*istr)=='-' || c=='+'){
        f = c == -1;
        ++istr;
    }
    
    // 處理正數部分, !!是為了消除Pelles c的警告
    while(!!(c=*istr++)) {
        // 非法字元直接返回
        if(c<'0' || c>'9') return -1;
        tmp = 10*num + c-'0';
        // 數值越界直接返回結果
        if(num>tmp) return -2;
        num = tmp;
    }
    
    *pnum =  f ? -num : num;
    return 0;
}

很多場景,很多代碼.你沒躺過坑你是不會曉得行業潛規則的.沒有努力和勤奮或者堅持和聰明再或者沒有傻勁

你真的做不好. 真的頂不住 , 更別說抗住了. 個人也只是裝逼, 也在學習成長....

演示測試代碼如下

#include <stdio.h>
#include <stdlib.h>

/*
 * 將整數字元串轉成整數.通過pnum返回
 * istr        : 源字元串
 * pnum        : 返回的整數
 *             : 返回0表示成功, -1表示參數錯誤, -2表示溢出
 */
int convert(const char* istr, int* pnum);

/*
 * 寫一個函數 "將整數字元串轉成整數"
 */
int main(int argc, char* argv[]) {

    const char* str = "+123456";
    int num;
    int flag = convert(str, &num);
    
    //輸出測試結果
    if(flag) 
        fprintf(stderr, "%s is error %d\n", str, flag);
    else
        printf("str:%s => %d\n", str, num);

    return 0;
}

/*
 * 將整數字元串轉成整數.通過pnum返回
 * istr        : 源字元串
 * pnum        : 返回的整數
 *             : 返回0表示成功, -1表示參數錯誤, -2表示溢出
 */
int 
convert(const char* istr, int* pnum){
    int num = 0, tmp;
    char c, f = 0; // f == 1表示負數

    // 先檢查參數錯誤
    if(!istr || !*istr || !pnum) return -1;
    // 處理政府號
    if((c=*istr)=='-' || c=='+'){
        f = c == -1;
        ++istr;
    }
    
    // 處理正數部分, !!是為了消除Pelles c的警告
    while(!!(c=*istr++)) {
        // 非法字元直接返回
        if(c<'0' || c>'9') return -1;
        tmp = 10*num + c-'0';
        // 數值越界直接返回結果
        if(num>tmp) return -2;
        num = tmp;
    }
    
    *pnum =  f ? -num : num;
    return 0;
}
View Code

測試截圖

到這裡 關於三個面試基本都簡單說了. 也許不是乾貨. 但是是最近親身經歷. 最想表達的是.
做程式員, 多重視基礎. 務實沉澱是根本. 不管在那都要認真工作, 踏實處理事情. 

 

後記 

  到最後了.很希望最後是最有意義的. 心靈雞湯能幫到你. 讓你覺得最值.

1. 程式員對工資的看法, 假如你8K, 和你相似的是18k. 在北京一年下來比你多10萬, 10年也就是100萬. 在北京100萬能幹什麼呢?

  我所想表達的是 (以Dota舉例) 程式員不是後期, 需要瘋狂打錢, 他是中單帶節奏的. 一定要找到自己的節奏, 帶起節奏

2.  程式員如何提升技術,  務實謙虛, 好學好問善於交流, 認真有擔當, 關鍵時刻要頂住.

(純屬個人扯淡, 歡迎交流打臉, 錯誤是難免的,指出就會改正)

以上是我最近面試幾次的感悟, 希望能幫助到大家, 互相思索,共同提高.拜~~~ , 歡迎交流推薦.

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在網頁中,我們經常需要引用大量的javascript和css文件,在加上許多javascript庫都包含debug版和經過壓縮的release版(比如jquery),不僅麻煩還很容易引起混亂,所以ASP.NET MVC4引入了Bundles特性,使得我們可以方便的管理javascript和css文件 ...
  • 新公司,剛來幾天,閑著沒事,領導讓我做些無關痛癢的活,優化報表統計!!!之前是用flash做的,現在要改成echart實現。好吧,之前沒用過,抱著學習態度,研究了下。寫點東西打發下時間,能幫到需要幫助朋友更好。好了廢話少說,開搞! 第一步搞個頁面: 第二部:添加相關js引用,參照api,初始化js和 ...
  • 在C#中進行RSA解密,需要用RSACryptoServiceProvider,但是不支持OpenSSL格式的公鑰或者私鑰。 X509 公鑰 非加密 PKCS#8 私鑰 PKCS#1 私鑰 引用以下 Nuget 包 https://www.nuget.org/packages/System.Exte ...
  • 題目: 統計一個字元串中數字和字元串的個數,並分別進行排列,要求 1.數字,字元串可以從鍵盤獲取。 2.儲存在list 3.統計數字個數,字元串個數 4.把數字和字元串按從小到大的順序輸出 5.不能使用數組. List的用法 List包括List介面以及List介面的所有實現類。因為List介面實現 ...
  • 一、Java介紹: Java技術主要分成三個部分:Java語言、Java運行環境和Java類庫。(一般情況下並不區分指哪個部分) 即Java並不只是一門編程語言,也是一個完整的平臺,有一套龐大的開發類庫(包含很多可以重覆利用的代碼)和提供跨平臺的可移植性、自動垃圾回收以及安全性等服務的執行環境。 1 ...
  • 在shell環境中,通配符能夠匹配文本範圍相當有限。正則表達式是一種用於文本匹配的形式小巧、且高度針對性的編程語言。例如: @[a-z0-9]+\.[a-z]+ 就是一個能匹配電子郵件的正則表達式。 正則表達式的基礎組成部分如下所示: 正則表達式 描述 示例 ^ 行起始標記 ^a匹配以a起始的行 $ ...
  • 偽靜態的實現 簡介 主要使用Apache提供的一個rewrite模塊來實現,可以實現URL地址的重寫 使用 開啟配置 更改虛擬主機裡面的配置 在網站根目錄建立一個.htaccess文件 案例1 實現將動態URL地址轉換成一個靜態的HTML地址 http://local.order.com/index... ...
  • 以前為了不在游戲邏輯(對象屬性)變更時修改資料庫,就弄了個varchar欄位來表示json,由伺服器邏輯(讀取到記憶體)去操作它。 但這對運維相當不友好,也不能做一些此Json數據里查詢。 所以後面就用了下ssdb,然而就在前幾天才瞭解到postgresql支持json了(其實早在兩年前就行了吧··· ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...