• 校招


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

    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,明天接着说。。。

  • 相关阅读:
    闭包
    this
    函数声明,表达式,构造函数
    算法学习_栈
    LeetCode刷题_140
    2020/3/20 刷题
    2020/3/19 刷题
    2020/3/13_C++实验课
    刷题(主要是DFS) 2020年3月12日
    DFS的一些题2020/3/11
  • 原文地址:https://www.cnblogs.com/lirunzhou/p/5858542.html
Copyright © 2020-2023  润新知