暑假實習面試總結——Go語言|Golang | 入駐第十七天

前景

學Go語言也有大半年了,就想着大二暑期找個實習 面試了一個學校附近的小公司,記錄一下個人第一次面試過程前端

一面HR

  1. 自我介紹。

我是xxx,來自xxxxxx的一名大二學子,擔任班級xxxx,協助班長和輔導員xxxxxxx,同時擔任學院xxxx部門,完成xxxx任務。 以上就是個人自我介紹。vue

  1. 簡單聊聊簡歷上的項目,哪一個項目你的印象是最深入的或是學習到比較多的。

最深入的是一個gin+vue的商場項目,go是去年9月學的,這個項目我從12月底寫了2月頭,寫了兩個月,從後端到前端,學習到了不少關於gin框架、gorm、vue等的一些知識。也累計到了不少經驗,好比說支付功能,以前是沒有寫過了,經過此次的商城項目也學習到了。java

  1. 平時如何學習Go語言。

平時的話就是在B站上面看教學視頻,而後本身看書,和同窗一塊兒參加一些軟件程序設計的比賽鞏固之類的。python

  1. 開發過程當中遇到最大的問題是什麼。

團隊的交流吧,若是團隊缺乏交流的話,會致使不少問題。例如這個頁面我是這樣想的,而後和產品那邊想的不同,缺少必要的交流致使你們都覺得是本身的想的那樣。最後結果就不符合要求。mysql

  1. 你能講講你所在的部門嗎。

咱們部門分紅四個部分offer小組、PS小組、視頻組、科技小組。offer小組主要是幫助學院完成平常文檔任務、年終PPT的製做,PS小組主要是作一些宣傳海報,視頻組是作一些宣傳視頻,科技小組主要是幫學院完成一些網頁、小程序的製做,以及咱們部門網站服務器的開發維護工做。linux

  1. 你對咱們公司有什麼想問的嗎。

我所瞭解的是大家公司是作安全的,請問一下是作哪方面的安全?ios

一面HR的問題大概就是這些,問了一些近況以及學校的表現,學業壓力等狀況。 最後HR說三個工做日之類,會有通知結果。面試


二面技術面

  1. 自我介紹

同上redis

  1. 你是大家部門視頻組的,有作過什麼宣傳視頻嗎

對,我是視頻組的組長,幫助學院作過一個開學新生視頻,還有數學建模的對外宣傳視頻。算法

  1. 我從瀏覽器輸入了一個數據,得到數據,這一部分主要有哪些動做

這裏就是創建了TCP鏈接,將我輸入的數據經過HTTP請求發給後端服務器,在這裏就是要進行一個TCP鏈接的創建。 假設主機A是TCP客戶程序,B是TCP服務器程序。最初兩端的TCP進程都是處於CLOSED關閉狀態,客戶端A打開連接,服務器端被打開連接。一開始B的TCP服務器進程先建立傳輸控制塊TCB,準備接受客戶進程的連接請求,而後服務器進程就處於LISTEN收聽狀態,等待A的鏈接請求。 而後A的進程首先建立傳輸控制模塊TCB。向B發出鏈接請求報文段,這是首部當中的同步位SYN=1,同時選擇一個初始序號seq=x。TCP規定,SYN報文段(即SYN=1的報文段)不能寫數據,但要消耗掉一個序號。這時候A就進入了同步已發送的狀態。 B收到鏈接請求報文段後,若是贊成創建鏈接,則向A發送確認,在確認報文段中把SYN位和AVK位置都置爲1,確認號爲ack+1,同時也爲本身選擇一個初始序號y。一樣的這個報文段也是不能寫數據的,但同時要消耗掉一個序號。這時B進入了同步收到狀態。 A收到B的確認以後,還要向B給出確認。確認報文段的ACK置1,確認號ack=y+1,而本身的seq=x+1。ACK報文段是能夠攜帶數據的,但若是不攜帶數據則不消耗序號,在這種狀況下,下一個數據報文段的序號仍爲seq=x+1。 這時候TCP已經創建了。A進行入了已經創建鏈接的階段狀態。B收到確認後也進入了鏈接狀態。

這部分面試的時候答的比較籠統,一些細節沒說上來,就整理了一下。

  1. IP地址如何找到目標地址

首先IP地址其實時虛擬的地址,爲了管理的方便。IP地址會經過ARP協議映射到鏈路層中的物理地址。以MAC幀的形式在鏈路層傳送。IP地址在網絡層的傳輸的話,就是經過子網掩碼的與運算查看目的地址是否在局域網中,若是不在則經過路由器進行傳輸,在由路由器對網絡進行與運算,直到找到目的地址。

  1. 進程和線程區別

進程是由多個線程組成的。 這二者根本區別是:線程是處理器分配調度的基本單位,進程是其餘資源(除了處理器以外)分配的基本單位。另外進程的地址空間是私有的,處理器在進程之間切換時現場的保護/恢復的開銷比較大,而同一進程的線程在處理器以內的切換時線程的保護/恢復的開銷比較小。

  1. 談談你對SSL證書的理解(這個根本答不上來)

我只是到了HTTPS的S就是SSL,可是我對這方面的不太瞭解。 下面是整理後的答案 服務器認證階段: 1)客戶端向服務器發送一個開始信息「Hello」以便開始一個新的會話鏈接; 2)服務器根據客戶的信息肯定是否須要生成新的主密鑰,如須要則服務器在響應客戶的「Hello」信息時將包含生成主密鑰所需的信息; 3)客戶根據收到的服務器響應信息,產生一個主密鑰,並用服務器的公開密鑰加密後傳給服務器; 4)服務器回覆該主密鑰,並返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器。

用戶認證階段: 1)在此以前,服務器已經經過了客戶認證,這一階段主要完成對客戶的認證。 2)經認證的服務器發送一個提問給客戶,客戶則返回(數字)簽名後的提問和其公開密鑰,從而向服務器提供認證。 SSL協議提供的安全通道有如下三個特性: 機密性:SSL協議使用密鑰加密通訊數據。 可靠性:服務器和客戶都會被認證,客戶的認證是可選的。 完整性:SSL協議會對傳送的數據進行完整性檢查。

  1. 若是我兩個進程要對一個數據進行讀寫,如何避免競爭,防止數據的讀出的不正確

那就是在進程中加鎖,看需求,若是寫比讀多就加互斥鎖鎖,若是讀比寫多就加讀寫互斥鎖,最後再defer這個鎖。

  1. go裏面的同步和異步中,go進程是如何完成等待的和執行的。

go進程的等待是阻塞的,也就是說當我go一個進程以後,用sync.WaitGroup進行進程的管理,進程增長就是Add(),進程在執行就用Wait()對其進行阻塞等待。而後再用Done()完成。這樣能對進程之間進行安全的管理。

  1. uint能相減嗎

這個當時答了能夠,後來面試官提示了一下,就猶豫了,就說不知道了。

我不知道了,在計算機組成原理上面學的,計算機底層只有加法器。嗯嗯嗯,應該能夠吧... 下面正解 uint的範圍是在2^31 - 1,即:0~4294967295,因此若是是發生越界的話,只能是這個數4294967295。因此是看狀況是否能相減,若是相見的數字是在範圍內的就能夠了,若是超出範圍是不行的。

附上例子

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
    int a = 20;
    unsigned int n = 3;
    unsigned int b = 6;
    cout<<a-b<<endl; //14
    cout<<b-n<<endl; //3
    cout<<n-b<<endl; //4294967293
    cout<<4+n-b<<endl;//1
    return 0;
}
複製代碼
  1. 剛剛你提到了計算機組成原理,講講你計算機組成原理的學到了什麼

這門課大一學的,已經一年了,學到了一些計算機底層的東西,好比底層是隻有加法器,其餘運算都是經過加法器改來的,還有一些數值的範圍,補碼移碼運算,還有一個cache的概念,和一些MOV,LAD,ADD等一些指令等等。

  1. 講講go的數組和切片的區別

go切片的底層其實就是數組,數組是不可邊的,切片是可變的。

  1. 若是我要刪除數組切片中特定的值具體如何作

個人話就用append進行刪除,把這一個值的下標的前一個和後一個繼續append拼接,就把中間的與這個刪掉了。

  1. 如何對map鍵值對中的數據按照key進行排序

若是我不清楚go的map有沒有特定函數進行排序的話,我會用兩個切片對這個map的key進行存儲,而後進行排序,在讓map中的value按照切片中map進行輸出。

  1. 講講go的反射

go的反射,我只在書上看到過,可是項目中,我並無用過反射。我只是知道反射是能反射出輸入數據的數據類型。 下面是整理 反射就是能檢查程序在運行時的狀態 reflect.ValueOf(h),獲得實際的值,而且能夠改變其字段值;

reflect.TypeOf(h),獲得類型的元數據,經過t咱們能獲取類型定義裏面的全部元素; 若是需修改value,該struct類型的字段必須是大寫,小寫至關於private,是不能經過反射修改的,會報異常. 15. 你能講一下你是如何定義接口返回類型的

個人話是專門寫一個序列化的一個函數,每一個返回都進行一次序列化操做,就是一個接口定義專門的序列化函數,進行數據的返回。

  1. 若是我有200個接口,你是如何解決這個問題,保證高效開發呢

錯誤碼統一放置。一個項目,三分靠開發,七分靠維護。不過若是是200個的話,我以爲應該是有不少接口是能夠重複利用序列化的函數的,這個我以爲可能就要看數據庫的架構是怎麼樣的了,200個接口,若是是數據的架構問題,那我是改不了了,但若是不是數據庫的架構問題,那我以爲應該是有不少重複的,可能錯誤碼就佔到通常,因此就錯誤碼統一放置。

  1. 你對Linux系統瞭解不深的話,就不問你Linux了,爲何會選擇go呢

go有着python的簡潔,也能經過指針操做內存,因此有相似C++的性能(擔任確定是比不上C++的),也不想java那麼難部署,背後有Google公司。並且如今雲計算,分佈式大火,這些也是go的主場,因此我選擇了go。

  1. 你有什麼想問個人嗎

大家公司有那些業務用到go嗎?

面試官的回答

咱們公司是用java的架構,如今是有一個很大的主節點,可是要有一些小的節點操做,若是用java的話就比較難部署,因此這部分小節點的業務咱們就打算用易於部署的go進行,go的部署很容易。

大概是這些問題,有些我記不太清楚了。最後面試官說等三個工做日。

2021年5月31日更新


終面

  1. 自我介紹

和上面同樣

  1. 我不是技術出身的,我是想說你來實習工做是和在學校不同的,這裏工做節奏很快,工做壓力也可能很大,你是第一次實習,你能給我一個理由說說你爲何能勝任這個崗位嗎?

由於我是班級團支書,也擔任學院學生會部門的副部,平時學業之外還有其餘的學生工做,我以爲以前能平衡好學習和學生工做,這個也能夠的。

  1. 那你是怎麼平衡你的學習和學生工做呢?

這個學期還好,上個學期就有點失衡,因此上學期的績點就有點低,那我是水課的話就用來作做業或是作學生工做,專業課認真聽講,當天做業就當天完成,絕對不能拖。必須提升效率,大概就是這樣。

  1. 那你作學生工做,你有什麼改變嗎?

我最大的變化我以爲是,服從上級吧,之前我是有什麼本身的想法就提,可是老是被反駁回來,後來我以爲就算了,上級這樣安排,也有上級的道理,我以爲在公司也是同樣的道理,上級安排了什麼任務,什麼事情,也是有必定的道理的。

  1. 那你以爲如今的你,回去了還會提意見嗎?

我以爲我應該還會的,我還年輕,正值熱血青年,可能態度就不想當初那麼堅硬了,我提出個人想法,上級或是他人接不接收就看他們本身了。

  1. 那我問一個問題,若是你的leader給你一個任務,你是想要leader把任務列出來,step by step,一步步讓你這樣作,仍是想你本身去作?

首先,若是是一開始進入公司,我和leader的想法還沒融合的話,我以爲我應該會想讓leader 把任務列出來,step by step,由於我不知道leader是不是我所想的那樣的,等後面和leader磨合了以後,我可能就已經知道leader想要什麼效果,就不須要leader把任務列出來了。個人想法就是這樣。

具體還有一些可有可無的就沒打出來。也不是技術層面的,基本都是合做層面。

總結

  1. 我是班級的團支書,我覺得會有一個問題是關於團支書的,沒想到全是技術的問題,並無涉及到這一職務,反而問了比較偏於技術的學院部門的事情。
  2. linux系統要認真學一些深刻的東西了,只知道一些基礎的操做。也是面試官建議的。
  3. 關於算法部分,並無問二叉樹、排序、動態規劃等的一些算法(還好沒有當場寫代碼),打算繼續刷力扣題了。
  4. 計算機網絡,計算機組成原理,計算機操做系統卻是涉及到了部分,可是因爲細節部分不太瞭解,因此就比較籠統。
  5. 數據庫方面也只是問了鎖的問題,沒有進一步mysql、redis等進行詢問。
相關文章
相關標籤/搜索