今天上午去面试了一下算法工程师,整理一下面试的问题。整体来说,面试难度不大,后来才知道这个部门是做数据处理以及特征工程的,已经被问到特征工程好几次了,只是简单看过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,利用切线不断逼近函数零点,迭代距离可以由切线定义得到。