Amazon
  • Introduction
  • Phone Interview I
    • 53.Reverse Words in a String
    • 31.Partition Array
  • Phone Interview II
    • 167.Add Two Numbers
    • 88.Lowest Common Ancestor
  • Onsite I
    • 655.Big Integer Addition
    • 221.Add Two Numbers II
  • Onsite II
    • 158.Two Strings Are Anagrams
    • 171.Anagrams
    • 386.Longest Substring with At Most K Distinct Characters
  • Onsite III
    • 479.Second Max of Array
    • 589.Connecting Graph
  • Onsite IV
    • 532.Reverse Pairs
  • 2022
    • OA
      • work simulation
      • Greyness
      • NearestRetailer
      • Sum of Scores of Subarray
      • StrengthOfPassword
      • ProductOf1
      • Move 0/1 InArray
      • Max deviation among all substrings
      • AWS power consumption
      • searchWordResultWord
      • maxOperationOfString
      • MinHealthGame
      • EarliestMonth
      • Package ship
      • RatingConsectiveDecresing
      • LinkedListSum
      • MovingBoxes
      • ValidString
      • MaxValueAfterRemovingFromString
      • Subtree with Maximum Average
    • VO
      • 2022.3
    • BQ
      • doc
      • 2022.4
      • Freq Question
      • 11大类BQ和Follow-ups
      • Page 1
      • BQ 100
      • 35 behavioral questions asked in 95% of Amazon interviews with examples
      • Page 2
      • 反向BQ
    • LP
      • LP-1
      • LP-2
    • SD
      • Design Amazon Prime Video Recommendation System
      • Amazon Order system
    • OOD
      • Linux Find Command
      • Amazon Locker
    • AWS Identity call
    • Interviews
Powered by GitBook
On this page

Was this helpful?

  1. 2022
  2. OOD

Linux Find Command

PreviousOODNextAmazon Locker

Last updated 3 years ago

Was this helpful?

Version 1:

class File {
    String name;
    int size;
    int type;
    boolean isDirectory;
    File[] children;
}

abstract class Filter {
    abstract boolean apply(File file);
}

class MinSizeFilter extends Filter {

    int minSize;

    public MinSizeFilter(int minSize) {
        this.minSize = minSize;
    }

    @Override
    boolean apply(File file) {
        return file.size > minSize;
    }
}

class TypeFilter extends Filter {

    int type;

    public TypeFilter(int type) {
        this.type = type;
    }

    @Override
    boolean apply(File file) {
        return file.type == type;
    }
}

class FindCommand {

    public List<File> findWithFilters(File directory, List<Filter> filters) {
        if (!directory.isDirectory) {
            return new NotADirectoryException();
        }
        List<File> output = new ArrayList<>();
        findWithFilters(directory, filters, output);
        return output;
    }

    private void findWithFilters(File directory, List<Filter> filters, List<File> output) {
        if (directory.children == null) {
            return;
        }
        for (File file : directory.children) {
            if (file.isDirectory) {
                findWithFilters(file, filters, output);
            } else {
                boolean selectFile = true;
                for (Filter filter : filters) {
                    if (!filter.apply(file)) {
                        selectFile = false;
                    }
                }
                if (selectFile) {
                    output.add(file);
                }
            }
        }
    }
}

Version 2:

 public interface Filter {
       public boolean match(File f);
   }

public class ExtensionFilter implements Filter {
       final private String ext;
   
       public ExtensionFilter(String ext) {
           this.ext = ext;
       }
   
       public boolean match(File f) {
           return f.getName().endsWith("." + ext);
       }
   }

public class SizeFilter implements Filter {
       enum SizeOperator {
           LT,
           LTE,
           EQ,
           GT,
           GTE
       };
   
       private final int size;
       private final SizeOperator op;
   
       public SizeFilter(int size, SizeOperator op) {
           this.size = size;
           this.op = op;
       }
   
       public boolean match(File f) {
          int actualSize = f.length();
           switch (op) {
               case LT:
                   return actualSize < size;
               case LTE:
                   return actualSize <= size;
               case EQ:
                   return actualSize == size;
               case GT:
                   return actualSize > size;
               case GTE:
                   return actualSize >= size;
           }
   
           return false;
       }
   }

public void find(File f, Filter filter, List<Files> files) {
           if (f.isDirectory()) {
               for (File file : baseDir.listFiles()) {
                  find(file, filter, files);
               }
           } else {
                  if (filter.match(f)) {
                       files.add(f);
                   }
             }
       }
https://leetcode.com/discuss/interview-question/369272/Amazon-or-Onsite-or-Linux-Find-Command