Please complete the following programming challenge. It is used to better assess a candidate's software development skills. You have as much time as you'd like (though we ask that you not spend more than a few hours) and may use any programming language or framework you'd like. Feel free to contact the original sender if you have any questions.
- First, fork this project on github. You will need to create an account if you don't already have one.
- Next, complete the project as described below within your fork.
- Finally, push all of your changes to your fork on github and submit a pull request.
Imagine that McAfee has just acquired a new security company. Unfortunately, the company has never stored their data in a database and instead uses plain text files. We need to create a way for the new subsidiary to import their malware data into a database. Your task is to create a web interface that accepts file uploads, normalizes the data, and then stores it in a relational database - design is up to you.
Here's what your web-based application must do:
- Your app must accept (via a form) a CSV file with the following columns: MD5, ClassificationName, ClassificationType, Size, FileType. You can assume the columns will always be in that order, that there will always be data in each column, that there will always be a header line, and that the CSVs could potentially have duplicate MD5s as updates. An example input file named example_input.csv is included in this repo.
- Your app must parse the given file, normalize the data, and store the information in a relational database.
- After each upload, your application should display the total amount of each different ClassificationType in the database. So for example: trojan -> 3, pup -> 2, unknown -> 1, etc.
Your application does not need to:
- be written with any particular language or framework
- be aesthetically pleasing (bonus points if it does)
Your application should be easy to set up and should run on Linux. It also should not require any for-pay software. If you are unfamiliar with what an MD5 is (you can assume they are unique), it may be helpful to read: https://en.wikipedia.org/wiki/MD5
Evaluation of your submission will be based on the following criteria:
- Did your application fulfill the basic requirements?
- Did you document the method for setting up and running your application?
- Did you follow the instructions for submission?