天天看點

小明醬的暑期求職紀

小明醬2018年6月20日更新

好消息好消息,最後拿到了京東的offer,開心,多謝baifeng&他的朋友。

天津的高樓不多,但是是剛剛好的感覺。 ——端午回家的新感覺

最後一次更新,此篇完結。

小明醬2018年6月12日更新

真的每次都是拖到面試前一天才進行上一次面試的整理,百度挂了挂了,很難受,上星期二知道的消息,然後就郁郁寡歡一下午,晚上就決定去北京浪蕩4天,現在收拾好心情,重新開始尋找暑期實習的征程,離7月還有不到20天,加上臨近期末,真的忙的滴溜溜的轉,另外今天收到了杭州的一家公司的offer,公司不大,考慮到杭州路途遙遠,還在猶豫當中,20号之前在做決定吧,看看這周面試怎麼樣再說。明天是京東金融,已經沒了之前的銳氣,感覺已經平常心了,今晚在準備準備吧,嘻嘻~

小明醬2018年5月的最後一天更新

哎,又到了不得已才整理心路曆程的時候了,明天百度二面,心裡發慌,怵的不行,也不知從何看起,基本算法題懶得看,機器學習算法又看不進去,思來想去還是先把之前面試的問題回顧一下,萬一面試官在問我呢,嘿嘿

貓眼(機器學習、資料挖掘算法工程師)(10分涼)

算法題(占坑日後補)

哎呀我的媽,一上來就要遠端監控我手寫算法題,題目如下,寫的非常不好,主題思路有,但是沒有考慮周全,最後面試官想和我一起寫,被我拒絕了,我覺得給我半天也不一定能想出來。

給出一個五位阿拉伯數字,請寫出它的中文讀法,如:

12345 —> 一萬兩千三百四十五

2019年3月13日更新:終于還是把這個坑填上了!!!!偶也!!!

package algorithm;
import java.util.*;
public class Solution {
	static char[] numArr = {'零','一','二','三','四','五','六','七','八','九'};
	static String[] unitArr = {"","十","百","千","萬"};
	public static String numToChinese(int num) {
        char[] newNum = String.valueOf(num).toCharArray();
        int len = newNum.length;
        StringBuilder res = new StringBuilder();
        for(int i=0;i<len;i++) {
        	int temp = Integer.parseInt(String.valueOf(newNum[i]));
        	boolean zeroFlag = temp==0 ? true : false;
        	if(zeroFlag) {
        		while(i<len-1 && newNum[i+1]=='0')
        			i++;
        		if(i!=len-1) {
        			res.append(numArr[0]);
        		}
        	}else {
	        	res.append(numArr[temp]);
	        	res.append(unitArr[len-i-1]);
        	}
        }
        return res.toString();
    }
	
	public static void main(String[] args) {
		System.out.print(numToChinese(12345));
		System.out.print("\n");
		System.out.print(numToChinese(10000));
		System.out.print("\n");
		System.out.print(numToChinese(10001));
		System.out.print("\n");
		System.out.print(numToChinese(10100));
		System.out.print("\n");
		System.out.print(numToChinese(10101));
	}
}
           

聊聊項目

之前我舍友還說我的寒假實習沒有什麼卵用,但是以目前的形勢來看,有總比沒有強,面試的時候至少不會那麼尴尬了,還可以風生水起的聊點東西,目前來看的弱勢就是項目沒落地,沒法實際展示。。。。

  • 爬蟲使用的架構,遇到的問題,如何解決的,爬取速度怎麼樣呢,能滿足你的業務需求嗎?
  • 分類子產品就會結合SVM問一下詳細的點:
  • 使用的是你自己爬取下來的語料嗎
  • 使用的是詞袋模型嗎?

這一塊的回答就略顯尴尬,算法沒厘清楚,實際我用的是TF-IDF算法,現在補充詞袋模型的基礎知識

詞集與詞袋模型

這個算法的主要作用也就是對文本做單詞切分,有點從一篇文章裡提取關鍵詞這種意思,旨在用向量來描述文本的主要内容,其中包含了詞集與詞袋兩種。

詞集模型:單詞構成的集合,集合中每個元素隻有一個,即詞集中的每個單詞都隻有一個。

詞袋模型:如果一個單詞在文檔中出現不止一次,就統計其出現的次數,詞袋在詞集的基礎上加入了頻率這個次元,使統計擁有更好的效果,通常我們在應用中都選用詞袋模型。

  • SVM的本身是二分類問題,而你做的是多分類,你是如何進行遷移的呢?

    又問到讓我尴尬的問題了,從來隻會伸手即用的小明醬從來沒考慮過,特此總結,以免後患

轉自: http://www.cnblogs.com/CheeseZH/

目前,構造SVM多類分類器的方法主要有兩類

(1)直接法,直接在目标函數上進行修改,将多個分類面的參數求解合并到一個最優化問題中,通過求解該最優化問題“一次性”實作多類分類。這種方法看似簡單,但其計算複雜度比較高,實作起來比較困難,隻适合用于小型問題中;

(2)間接法,主要是通過組合多個二分類器來實作多分類器的構造,常見的方法有one-against-one和one-against-all兩種。

标準答案:一對一法(one-versus-one,簡稱OVO SVMs或者pairwise)

其做法是在任意兩類樣本之間設計一個SVM,是以k個類别的樣本就需要設計k(k-1)/2個SVM。當對一個未知樣本進行分類時,最後得票最多的類别即為該未知樣本的類别。

Libsvm中的多類分類就是根據這個方法實作的。

其它的三種方法,貼出來即可。

  • SVM是什麼?為什麼叫支援向量機?支援向量如何展現?

SVM支援向量機(英文全稱:support vector machine)是一個分類算法, 通過找到一個分類平面, 将資料分隔在平面兩側, 進而達到分類的目的。

支援向量本質是向量,而這些向量卻起着很重要的作用,如果做分類,他們就是離分界線最近的向量。也就是說分界面是靠這些向量确定的,他們支撐着分類面。(通俗回答)

SVM尋找最小margin的兩個平行超平面以區分樣本類别。三維空間中,這兩個超平面最少可由特征空間中的三個特征向量唯一确定。這三個特征向量支撐了這兩個超平面,作為支援向量,故SVM稱作支援向量機.(高端回答)

間距(margin),就是你找到的那條線h,和貼它最近的那個點的距離,這種點我們也稱它為支援向量,(比如圖中貼近線的圈圈和方塊),所有貼近邊際線的都是支援向量。

機器學習崗位面試問題彙總 之 SVM

這個小同學總結的很到位,但是沒有答案,可以用來整理思路

SVM面試題

我也不打算看别的了,SVM就看以上兩個就好了

  • SVM能否解決非線性可分問題?
能解決啊,利用核函數,參考了解SVM(二)——線性不可分的情況
  • 如何判斷你的項目是線性可分還是不可分呢?

非線性可分的情況普遍存在,我覺得我的文本分類應該是線性不可分的吧。。。

  1. 特征如果選得好,大多數的資料都是線性可分的。判斷是否線性可分最直覺的方法就是用統計工具畫圖。如果線性不可分的話除非你清楚得知道映射到哪個次元就可以線性可分,不然的話最好選取高斯核函數,把目标空間映射到無窮維,再慢慢調參數
  2. 檢查凸包(convex hull)是否相交。

最後的最後

我感覺徹底涼了,然後就給面試官瞎聊,聊了聊給我的建議什麼的

  • 實作能力
  • 原理的了解

主要就是叮囑我不要看很多書,挑一本精讀,也不要把注意力過分關注于數學推導,重了解,貓眼面試就這麼愉快的涼掉了。。。

奇點機智(算法實習生)(10分涼)

HR提前打電話問了下實習時間,然後說短期的對基礎要求比較高,筆試成績要求4分才可以,長期的3.5即可(估計是5分制吧)

三道算法題,感覺還挺難的,擺脫别人幫忙寫了,然後就涼掉了,就這麼涼掉了,

以後不好好寫算法題,我就是豬!!!

百度(度蜜)(挂在最終面了)

後面的自由問問題環節了解到這是度蜜部門,智能音響産品和天貓精靈類似。問的比較全面,面試官非常nice,nice到我都不好意思了,全程笑嘻嘻~昨晚微信咨詢,确定了二面的時間,還是技術面。。。

給出一個檔案,裡面是英文單詞,如何統計每個單詞的詞頻

主體思路:

1、把英文文章的每個單詞放到清單裡,并統計清單長度;

2、周遊清單,對每個單詞出現的次數進行統計,并将結果存儲在字典中;

3、利用步驟1中獲得的清單長度,求出每個單詞出現的頻率,并将結果存儲在頻率字典中;

4、以字典鍵值對的“值”為标準,對字典進行排序,輸出結果(也可利用切片輸出頻率最大或最小的特定幾個,因為經過排序sorted()函數處理後,單詞及其頻率資訊已經存儲在元組中,所有元組再組成清單。)

我還提了一下可以直接調用jieba分詞的統計詞頻功能,用過就是不一樣,呵呵

資料結構了解嗎?能給我介紹一下連結清單嗎?

這塊難不倒我,考研的付出是有回報的,介紹了一大串,很滿意~

介紹一下快排吧

  • 基本思想:

1.先從數列中取出一個數作為基準數,記為x。

2.分區過程,将不小于x的數全放到它的右邊,不大于x的數全放到它的左邊。(這樣key的位置左邊的沒有大于key的,右邊的沒有小于key的,隻需對左右區間排序即可)

3.再對左右區間重複第二步,直到各區間隻有一個數

  • 快排最大的特點:

以每一次劃分的pivot為中心,左邊的都小于pivot,右邊都大于它

  • 快排它是穩定的算法嗎?為什麼?

快些選一堆都是不穩定的哦

舉個栗子證明一下,原來王道中有講過,是以印象很深刻

比如2,1,1(2)三個數做快速排序,結束後數列為1(2),1,2

相對位置發生了變化

  • 你還了解那些排序算法

這就非常簡單了

算法題:給定N,列印1-N之間的素數

我選用的篩法,寫的還可以,後面面試官自己也搞不清這個代碼寫的有沒有問題,就問我時間、空間複雜度還有沒有改進的地方,可以在那裡進行優化。

可改進的地方:

  1. 遞增間隔大一些
  2. 每次删除元素會造成大量移動

    注意:0和1不是素數!!

import java.util.Scanner;
public class ScannerPrimeNumber {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		boolean[] bs = new boolean[n];
		for (int i = 2; i < bs.length; i++) {
			for (int j = i + 1; j < bs.length; j++) {
				if (j % i == 0) {
					bs[j] = true;
				}
			}
		}
		for (int i = 2; i < bs.length; i++) {
			if (bs[i] == false) {
				System.out.println(i);
			}
		}
	}
}
           

作業系統問題:什麼是棧溢出

這個沒回答出來。。。。答案見下面

棧溢出就是緩沖區溢出的一種。 由于緩沖區溢出而使得有用的存儲單元被改寫,往往會引發不可預料的後果。程式在運作過程中,為了臨時存取資料的需要,一般都要配置設定一些記憶體空間,通常稱這些空間為緩沖區。如果向緩沖區中寫入超過其本身長度的資料,以緻于緩沖區無法容納,就會造成緩沖區以外的存儲單元被改寫,這種現象就稱為緩沖區溢出。緩沖區長度一般與使用者自己定義的緩沖變量的類型有關。

棧溢出幾種情況:

一、局部數組過大。當函數内部的數組過大時,有可能導緻堆棧溢出。

二、遞歸調用層次太多。遞歸函數在運作時會執行壓棧操作,當壓棧次數太多時,也會導緻堆棧溢出。(比如:在Python中,函數調用是通過棧(stack)這種資料結構實作的,每當進入一個函數調用,棧就會加一層棧幀,每當函數傳回,棧就會減一層棧幀。由于棧的大小不是無限的,是以,遞歸調用的次數過多,會導緻棧溢出。)

三、指針或數組越界。這種情況最常見,例如進行字元串拷貝,或處理使用者輸入等等。

項目相關沒有很為難我,暫不記錄

履歷相關

了解基礎的自然語言技術,比如正則,分詞,詞向量,語言模型

手賤寫了這麼一句,然後面試官問了我幾個問題就完全暴露了我的真面目:

  • 你這裡的正則指的是什麼?

正則比對咯

  • 詞向量又是什麼?
在自然語言處理任務中,詞在計算機中表示通常有兩種表示方式:one-hot representation和distribution representation。
  • 離散表示(one-hot representation)

    傳統的基于規則或基于統計的自然語義處理方法将單詞看作一個原子符号

    被稱作one-hot representation。one-hot representation把每個詞表示為一個長向量。這個向量的次元是詞表大小,向量中隻有一個次元的值為1,其餘次元為0,這個次元就代表了目前的詞。

    例如:

    蘋果 [0,0,0,1,0,0,0,0,0,……]

    one-hot representation相當于給每個詞配置設定一個id,這就導緻這種表示方式不能展示詞與詞之間的關系。另外,one-hot representation将會導緻特征空間非常大,但也帶來一個好處,就是在高維空間中,很多應用任務線性可分。

  • 分布式表示(distribution representation)

    word embedding指的是将詞轉化成一種分布式表示,又稱詞向量。分布

    式表示将詞表示成一個定長的連續的稠密向量。

  • 語言模型是什麼?

語言模型就是用來計算一個句子的機率的模型,即P(W1,W2,…Wk)。

利用語言模型,可以确定哪個詞序列的可能性更大,或者給定若幹個詞,可以預測下一個最可能出現的詞語。

再舉一個機器翻譯的例子,給定一個漢語句子為李明正在家裡看電視,可以翻譯為Li Ming is watching TV at home、Li Ming at home is watching TV、等等,同樣根據語言模型,我們知道前者的機率大于後者,是以翻譯成前者比較合理。

常見的方法有n-gram模型方法、決策樹方法、最大熵模型方法、最大熵馬爾科夫模型方法、條件随機域方法、神經網絡方法,等等。

SVM和LR的差別

參考SVM和LR的差別

  • 為什麼将LR和SVM放在一起來進行比較(相同點)

第一,LR和SVM都是分類算法

第二,如果不考慮核函數,LR和SVM都是線性分類算法,也就是說他們的分類決策面都是線性的

第三,LR和SVM都是監督學習算法

第四,LR和SVM都是判别模型

第五,LR和SVM在學術界和工業界都廣為人知并且應用廣泛

  • 不同點

第一,本質上是其loss function不同:邏輯回歸方法基于機率理論,假設樣本為1的機率可以用sigmoid函數來表示,然後通過極大似然估計的方法估計出參數的值;支援向量機​基于幾何間隔最大化原理,認為存在最大幾何間隔的分類面為最優分類面

第二,支援向量機隻考慮局部的邊界線附近的點,而邏輯回歸考慮全局(遠離的點對邊界線的确定也起作用)

第三,在解決非線性問題時,支援向量機采用核函數的機制,而LR通常不采用核函數的方法

第四,​線性SVM依賴資料表達的距離測度,是以需要對資料先做normalization,LR不受其影響

第五,SVM的損失函數就自帶正則!!!(損失函數中的1/2||w||^2項),這就是為什麼SVM是結構風險最小化算法的原因!!!而LR必須另外在損失函數上添加正則項!!!

開放性問題,有關推薦系統

失敗在推薦系統上了,有點難過~

京東金融(UGC)(還熱着哈哈,offer)

技術一面

本來約的視訊面試,結果可能面試官覺得比較麻煩就弄成了電話面試,時間不長,總體來說面試官要求比較嚴格,問的機器學習算法也不僅限于你項目中用過的,注重算法的了解,不能隻是調用庫跑一下模型,調個參數這種程度。面的不怎麼好,實話說也是這幾次面試中面的最不好的一次。

介紹一下自己技術棧

這一開始就整個技術棧裝逼就給了我個蒙蔽。。

IT術語,某項工作或某個職位需要掌握的一系列技能組合的統稱。technology stack 技術棧一般來說是指将N種技術互相組合在一起(N>1),作為一個有機的整體來實作某種目的。也可以指掌握這些技術以及配合使用的經驗。

又學了個新的詞彙。。。

python相關

  • 你履歷上面寫着熟悉python,你使用的是什麼版本的呢?熟悉哪些python架構呢

    這個問題我覺得他把架構和常用子產品弄混了。。。。

    常用架構和子產品

  • python如何定義一個函數

    隻說出了def定義函數,把lambda匿名函數給忘記了。。。。

    定義函數的五種形式

  • python如何操縱檔案流呢?給你個excel表格如何進行讀取呢?

    感覺很重視語言基礎???問了好多,這個其實也不是很難。。。貼個答案

    python讀取檔案

    讀取excel表格使用pandas庫啊,哈哈

  • python記憶體管理

    這個完全是沒有在意過的事情啊。

    這次學習下 python記憶體機制

算法相關

問題記不清了,大概問的都不怎麼會,很尴尬,隻記得幾個關鍵詞

貝葉斯、SVM、最優化、cost function、梯度下降法

  • LR和線性回歸的本質差別

    回答:離散和連續的差别

快排的時間空間複雜度

果然是很喜歡問快排哦,掌握下面這個圖就不怕了

小明醬的暑期求職紀

序列的離散程度

離散序列實質就是原序列每個元素用它的名次代替(相同的元素名次相同),離散化就是要得到序列的名次數組。

序列的離散化

空間域到頻域的轉化方法

這個問題感覺像是以前學的信号系統,最近完全沒有接觸過,也不知道他為什麼要問我。。。

總是呢,一面後面就很尴尬,他提問題我答不上來,他歎氣,我沮喪,越面越不爽,哎。。

上司二面

專程去了趟北京總部,在樓下買了一份價值10元昂貴的烤冷面後,悠閑的吃完又補了個口紅,照了照鏡子,然後就跑到17樓等待面試官到來。

具體問了哪些問題就不說了,一般到二面也不會問很多技術問題,或者是CTO來了籠統的問問,但是一般不會像一面那麼細緻,緊張了一兩分鐘以後就語氣就很平穩了,就開始兜售自己,要明白面試官想要什麼,回答盡量全面,面試官對我比較感興趣的一點就是可能我比較自來熟,很快就進入狀态了,其實和日常差别還挺大的,我還是比較怕生的,請叫我社恐小明醬,嘿嘿。隻面了20分鐘,然後最後問了部門是做什麼的,對我的整體感覺,面試官就走了,讓我坐在此地不要動,他去。。。當然不是買橘子啦,他是去叫人事去了。

HR三面

确定實習時間,薪酬,崗位當時沒确定,後來下午才通知的,算法崗沒去成,給的用戶端研發實習崗位,也還行吧,比較滿意了,大公司也很人性化,免費班車,加班餐,免費健身房等等,很舒服。

尋找暑期的獎金一個月生活就這麼結束了,坦白講,這是我半年來成長最快的一段時間,也經常睡不着覺,也經常沉浸幻想,實習隻是臨時起意,之前工作的上司勸我别荒廢了暑假,盡量找份實習,也就有了後來的經曆,也多謝他給我改履歷,嘿嘿。。不嫌棄讓我在宿舍進行視訊面試的可愛的舍友們,幫我内推的阿銘,鼓勵我的爸媽還有姐姐,我發脾氣還給我順毛的朔朔。

人生不負我。

完。

繼續閱讀