今天上午去面試了一下算法工程師,整理一下面試的問題。整體來說,面試難度不大,後來才知道這個部門是做數據處理以及特徵工程的,已經被問到特徵工程好幾次了,只是簡單看過PCA, SVD等降維技術看來有必要把特徵工程給學習一下。
1.一張表字段 id name grade ,其中每個學生可能存儲多個成績,要求返回每個學生的最大成績。
使用group by以及max函數即可,如果要取每個學生的前兩個成績應該怎麼做。
2. 使用python讀入一個文件,求出每列的均值
from numpy import *
fr = open('data.txt')
str = [line.strip().split(',') for line in fr.readlines()]
d = mat([list(map(float, line)) for line in str])
m = mean(d, axis=0)
3.利用python聲明一個類,類名Student 字段 id,name 構造方法以及返回Id和name的方法
class Student:
id = 0
sname = ''
def __init__(self, id, sname):
self.id = id
self.sname = sname
def getStudentIdAndName(self):
return self.id, self.sname
def test():
s = Student(1, 'sam')
return s.getStudentIdAndName()
python類裏面還是有很多細節,寫了好久才實現完整。
4.linux中根據進程名殺死進程
ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
kill命令:
信號編號9 SIGKILL 直接殺死進程
kill -15 SIGTERM 當進程收到此信號,結果如下:
程序立刻停止;當程序釋放相應資源後再停止;程序可能仍然繼續運行 多數進程會釋放資源然後停止,如果等待IO,則會阻塞。
5.求a的平方根,a>1 使其誤差err小於1xe-5.
牛頓迭代法求解平方根:
要求
令: 即求f(x)的零點。
由泰勒展開式:
得到f(x)的近似表達式:
求f(x)=0,即求:
將f(x)代入:
得到遞推表達式如上:
程序如下:
def squart(a, err):
x = a
while x*x-a>err:
x = (x + a/x)/2
return x
也可以從切線角度理解牛頓迭代:
零點是x*,選定初始點x0,利用切線不斷逼近函數零點,迭代距離可以由切線定義得到。