校招

今天面了两家公司总结一下吧

1:RH测试工具的开发,下午去的公司。进门第一眼,让人印象深刻的Logo直接映入眼帘。整个办公环境没的说,干净整洁。来来往往有许多人,我心想这么老牌的公司业务是有多忙,后来才知道原来正在布置中秋Party的现场。废话不多说了,进入正题。

首先被一个带着医用口罩的女员工领入了一个非常小的Office,手上拿了一份10来页的笔试题,很基本也很全面。包括了一个测试开发工程师所需要掌握的所有必备技能,让我们来看一看这都包括哪些内容。顺序不太记得了,我尽量按照原先顺序吧。

第一:linux常用操作:这一部分非常基础,一般接触过linux的同学一般都能回答上来,类似什么常用的linux命令之类的,里边比较重要一些的就是/root,/proc,/etc/,sys,/boot,/user这些文件夹内的内容。这些网上也都有很多介绍。

第二:shell命令:一般考察常用的shell 命令代表什么意思,不过有一个命令连续出现了在3个小题中,就是touch,都知道是创建一个文件,但是它出题的角度很有意思 touch a{1,2,3,4,5,6,7,8,9} ,这我就懵了,从来没这么用过。。。百度之后才知道,原来就是创建a1,a2...a9多个文件。这一部分就是送分题。

第三:数据结构:里边包含三个选择题,基础的我都觉得尴尬,1.单链表的插入,2.前序遍历的顺序,3不记得了反正很简单

第四:操作系统:里边比较有意思的就是linux的启动需要哪些文件以及内核的存放位置,这些都学过可惜出校门后就基本没用过了。这里给出网址http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html,我觉得这一本分还是比较重要的,所以总结一下就是 

  第一步、加载内核 读入/boot下的内核文件。

  第二步、启动初始化进程 开始运行第一个程序 /sbin/init,它的作用是初始化系统环境。由于init是第一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。

  第三步、确定运行级别 Linux预置七种运行级别(0-6)。一般来说,0是关机,1是单用户模式(也就是维护模式),6是重启。运行级别2-5,各个发行版不太一样,对于Debian来说,都是同样的多用户模式(也就是正常模式)。(这里我说6是图形化界面。。。汗颜)init进程首先读取文件 /etc/inittab,里边包含了运行级别的配置文件。不同的运行级别会启动不同的加载程序

  第四步、加载开机启动程序

  第五步、用户登录

  第六步、进入 login shell 这里首先读入 /etc/profile,这是对所有用户都有效的配置,一般系统的通用设置放在 /etc/profile,用户个人的、需要被所有子进程继承的设置放在.profile,不需要被继承的设置放在.bashrc。这里给出之间关系 http://blog.csdn.net/yanjiangbo/article/details/6427580

第五:Python的使用:包括类型转换、re库、装饰器、生成器等字符串方面的。并没有问我最近常用的multiprocess、multithreading之类的较高级模块,虽然我很想回答。

至此笔试内容介绍完毕。测试时间是一个小时,时间到了我还有一页没写完。。。

过了5分钟就开始面试,主要包含的问题都是比较零碎的,印象比较深刻的就是提问当gitpush的时候push失败(不是有conflict),而是发现是由于master版本已经跟目前本机master版本不一致时应该如何操作。后来百度一下才知道,本地仓库向远程仓库push前,要保证和远程仓库版本的同步。所以最好先pull一下,以确保除自身修改内容外的文件同步。还有就是有关手写实现python中dict的用法,当时不知道想考察什么,现在网上搜了一下才知道,主要想考察这些:

#默认迭代key
for k in d:
    print k

#iterkeys()返回key迭代器
for key in d.iterkeys():
    print key

#itervalues()返回value迭代器
for value in d.itervalues():
    print value

#iteritems()返回键值对迭代器
for key,value in d.iteritems():
    print key+"="+str(value)

#判断对象是否可迭代:通过collections模块的Iterable类型判断
from collections import Iterable
print isinstance(d,Iterable)

#带下标迭代:Python内置的enumerate函数可以把一个list变成索引-元素对
l=range(5)
for i,value in enumerate(l):

print i,value

#列表生产式
[exp for val in collection if condition]

#字典生成式
{key-exp:val-exp for value in collection if condition}

#集合生成式
{exp for value in collection if condition}

#嵌套列表生成式
L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']] print [name for list in L1 for name in list if name.count('a')>0] #运行结果: ['Cathy', 'Zhang', 'Wang', 'Jack']

还有关于generator的用法:

#1.创建一个generator,只要把一个列表生成式的[]改成(),就创建了一个generator:
g=(x for x in range(1,10))
print g.next()
print g.next()

#2.定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
def fib(n):
    a=1
    b=1
    i=0;

    yield a
    yield b

    while(i<n):
        a,b=b,a+b
        i+=1
        yield b

for x in fib(10):
    print x

以上部分来自 http://www.cnblogs.com/janes/

第二家是MT,明天接着说。。。

原文地址:https://www.cnblogs.com/lirunzhou/p/5858542.html