美文网首页软件测试软件测试软件测试工程师进阶过程
一道有趣的大厂测试面试题,你能解答吗?

一道有趣的大厂测试面试题,你能解答吗?

作者: 霍格沃兹测试学院 | 来源:发表于2019-03-13 12:05 被阅读18次

    本文是测试开发工程师 Venn 同学面试某互联网名企遇到的一道面试题目,首发于 Testerhome 社区,引发了有趣的讨论和解答,供各位测试同学参考。链接:https://testerhome.com/topics/18337

    image

    一道有趣的测试面试题目

    题目:

    在 A 文件夹下有多个子文件夹(a1、b1、c1),每个子文件夹下有好几张 jpg 图片,要求写一段代码(用 Python or Shell),把这些图片全部拷贝并存在 B 文件夹下。

    一小撮测试工程师的讨论

    聪明的 Cookie 同学:考点就是如何遍历一个文件夹下的文件,需要考虑的是文件路径深度,需要用到递归。

    诚实的 黑山老妖同学:我觉得对我来说,难点是操作文件的方法,之前没怎么用过,递归遍历啥的倒是小问题。

    经验老道的 剪烛同学:如果拿这个题目面试测试工程师,这个肯定还需要你提问的(考你需求分析),不仅仅是说写个脚本,等你写完了(考你编程熟悉),还会让你针对你写的代码进行测试(考你用例设计),都是套路。

    爆炸的 hellohell 同学:我再想,如果我碰到这个问题,是否能当场给出正确答案?估计不成,因为 API 全忘掉了。确实记性不好。如果给我个本儿,给上网机会,多费点时间,能搞出来;甚至用了递归,生成器,精简了代码(篡成一行),做了判断。

    • jpg 是个目录咋办?

    • 不同目录下文件同名咋办?

    • 以及其他

    但前提是你不参考任何东西就写代码。但实际工作中好像这种人不多;so, 我只能原地爆炸了。

    不过打心里还是觉得用 Shell 解决这个问题比较好些。

    参考答案

    Python 解答(by 煎饼果子)

    # -*- coding: utf-8 -*-
    import os,shutil
    
    def movefile(srcfile,dstfile):
        fpath,fname=os.path.split(srcfile)
        if os.path.isfile(os.path.join(dstfile,fname)):
            print("%s exist!"%str(os.path.join(dstfile,fname)))
        elif not os.path.isfile(srcfile):
            print("%s not exist!")%(srcfile)
        else:
            fpath,fname=os.path.split(dstfile)
            if not os.path.exists(fpath):
                os.makedirs(fpath)
            shutil.move(srcfile,dstfile)
    
    def getfile(path):
        paths = []
        for root, dirs, files in os.walk(path):
            for file in files:
                paths.append(os.path.join(root,file))
        return paths
    
    def main():
        path = "/path/A"
        pathto = "/path/B"
        paths = getfile(path)
        for pathfrom in paths:
            print(pathfrom)
            movefile(pathfrom,pathto)
    
    if __name__ == '__main__':
        main()
    

    Java 解答(by Lucas)

    public void copyImages(File from, File to) throws IOException {
        if(from == null || to == null) {
            throw new RuntimeException("From or To is empty.");
        }
    
        if(from.isFile()) {
            throw new RuntimeException("From is not directory.");
        }
    
        if(to.isFile()) {
            throw new RuntimeException("To is not directory.");
        }
    
        File[] images = from.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                boolean result = false;
                if(pathname.isFile()) {
                    String path = pathname.getAbsolutePath().toLowerCase();
                    if(path.lastIndexOf(".jpg") > -1
                        || path.lastIndexOf(".png") > -1
                        || path.lastIndexOf(".jpeg") > -1
                        || path.lastIndexOf(".bmp") > -1) {
    
                        result = true;
                    }
                } else {
                    result = false;
                }
                return result;
            }
        });
    
        for(File image : images) {
            copyImagesHelper(image, to);
        }
    
        File[] dirs = from.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory();
            }
        });
    
        for(File dir : dirs) {
            copyImages(from, to);
        }
    }
    
    private void copyImagesHelper(File image, File dir) throws IOException {
        String cmd =
            String.format("cp %s %s", image.getAbsolutePath(), dir.getAbsolutePath());
        Runtime runtime = Runtime.getRuntime();
        runtime.exec(cmd);
    }
    

    Shell 解答(by 杰)

    find  ./A/ -maxdepth 2  -name '*.jpg' -exec cp {} ./B \;
    

    P.S. 以上答案仅供参考。(End)

    - 推荐学习 -

    推荐霍格沃兹测试学院的「测试开发从入门到高级实战」课程,已经帮助了多位优秀学员系统提升技能水平,成功拿到**名企****高薪 Offer **。

    100 家互联网一线大厂如阿里、百度、腾讯、华为、今日头条、美团、小米、OPPO 等测试经理都在霍格沃兹测试学院长期招募优秀测试开发人才,学院也会即时同步名企 Offer 信息,并定期组织内推活动。

    霍格沃兹测试学院的「测试开发从入门到高级实战」系列课程体系是根据阿里、腾讯、百度等一线互联网公司的测试开发技术栈设计,并由 TesterHome 社区多位技术大咖、一线资深测试架构师以及测试经理执教,涵盖当下最热门的移动自动化测试技术、Web 自动化测试技术、接口测试、性能测试、安全测试、移动专项测试、持续集成与 DevOps、代码审计与分析、质量监控体系建设等内容。

    「测试开发从入门到高级实战」课程也是腾讯课堂官网「软件测试开发」课程搜索排名 NO.1 的经典课程,由 20+ 一线互联网名企资深测试经理、测试架构师 3 年打磨更新,已经培养了 300 多位测试开发工程师,课程好评率 100%

    目前第九期****班火热招生限时优惠中,想系统提升技术实力的测试同学可关注「小助手」微信,回复「第九期」进入咨询群,了解更多优惠信息。访问课程链接:
    https://ke.qq.com/course/254956

    相关文章

      网友评论

        本文标题:一道有趣的大厂测试面试题,你能解答吗?

        本文链接:https://www.haomeiwen.com/subject/vfyzpqtx.html