Hitcents C#Programming Test
This test is designed to evaluate generalC# and Xamarin development skills. Prior knowledge of C# or Xamarin tools isnot a requirement, we are really evaluating your skills to learn quickly, use searchengines and StackOverflow, and problem solve—all on your own.
Begin by installing Xamarin.Android andXamarin Studio here: http://xamarin.com/android
The installer will take some time, but willinstall Java, the Android SDK, and everything you need to take this test. Itshould work on a Mac or Windows. After using Xamarin Studio with Androidprojects, you may get a prompt saying you must purchase a license, select theoption to start a 30-day trial.
General Rules:
- You may use the internet, books, or any other programming-related material. Open source projects available on Github, CodePlex, etc. are also fine to use to assist you on each question.
- Points will be deducted for solutions that include poor programming practices, excessive RAM or CPU usage, or could be considered slow and non-optimized. Likewise, bonus points may be awarded for excellent software design and quick executing code.
- You may complete any question in any order, although some questions may build onto answers from previous questions.
Question 1 (Sorting data):
- Create a C# console project in Xamarin Studio. This will just run natively on your desktop.
- Prompt the user to enter several “words” separated by spaces
- When the user presses <enter>, sort the words alphabetically
- Print out the sorted words, and prompt the user for a new set of words
- The application will continue to prompt for more words, until the user types the word “exit”
- Make your program user-friendly, your text printed at the console should be nicely formatted and easy to understand
Question 2 (Importing data):
- Create a C# console project in Xamarin Studio. This will just run natively on your desktop.
- You are given a large text file containing address data for many different stores in the United States. Look in “Question 2\Stores.txt”, you may also see the layout of this file described in “Stores.xls”.
- Create the necessary tables to store the information in SQLite. Use proper data types, primary keys, indexes, etc., as your schema design is taken into account. Make sure to trim blank spaces out of each column, and handle the possibility of bad data.
- Create a console application that will load this text file into SQLite, you must load the file and insert each row from C# code. No import tools or classes can be used, you will have to read the file from C# and parse the data by hand (or via an open source project if desired). You may use any method you wish to connect to the database.
- Part of the challenge in this problem is to find an appropriate C# library for working with SQLite and integrate it into your project.
- Speed is a priority, so make sure the time it takes for the entire file to load is printed in the console window on completion. Full time format in HH:MM:SS.mmm is preferred.
Question 3 (Importing more data):
- Create a C# console project in Xamarin Studio. This will just run natively on your desktop.
- Building onto your existing SQL database, you will have to keep track of order information for each store from Question 2.
- You will have to parse the Orders.xml file located in the “Question 3” folder. You may use any method you wish for parsing the xml. You should not have to worry about malformed xml.
- An order contains the following:
◦ A GUID as a primary key or ID
◦ The store's ID number
◦ Total Items in the order
◦ Total Cost of the order in USdollars
◦ Up-to a 32 character name of aperson tied to the order
◦ A Yes/No value that says if theorder was a “rush” order.
◦ Date and time of the order
- Import this xml into a new table in the same database as Question 2, use appropriate data types, as hard disk space needs to be kept at minimum while not affecting rounding, if someone decided to run queries that total the rows in your database they should be able to get accurate answers.
- Also print out the time it takes for your code to run as you did in Question 2.
- BONUS: Set up a proper foreign key relationship from your orders to your stores in your database. If someone ran a query to delete a store, SQLite should automatically delete any orders by that store. Queries will also be made that lookup orders by order id, customer, and date. Make indexes to speed up queries in this manner.
Question 4 (Web Requests):
- Create a C# console project in Xamarin Studio. You can also choose to make a Xamarin.Android app if you prefer.
- You are trying to discover a password for a login on a website, at the url: https://www.hitcents.com/csharptest.cgi?username=*&password=* (replace the asterisks with the username and password)
- Luckily the web site is not very secure, and is limited to a 2 letter password that can only contain letters, numbers, or the underscore “_” and you know that a valid username is “john.smith”. You also know that it is not case sensitive.
- Make a console application that hits the web page, guessing every combination of passwords for “john.smith”. Print out the correct password when discovered. The page will return either “SUCCESS” or “FAIL”.
- Each web request could potentially fail at a networking level, so make sure you handle the error gracefully and retry the password combination in such cases.
- To speed up the time it takes for your program to run, make up to 5 or more requests at a time on separate threads, making sure to stop when the password is found.
- Record the overall time it takes your program to run as in Question 1 and Question 2.
Question 5 (Xamarin.Android):
- Create a Xamarin.Android project in Xamarin Studio.
- Build a simple Android app using implementing any of the following concepts:
◦ Navigating to differentactivities
◦ Action Bar
◦ Android fragments
◦ ListView and adapters
◦ Using the camera or photolibrary
- You can build any application you want, choose something to show off your abilities for making native Android apps with Xamarin.
Question6 (Java binding project):
- Create a Xamarin Java Bindings project in Xamarin Studio.
- Setup a binding for the China Mobile SDK included with this test. Documentation is also included.
- Use “Metadata.xml” and rewrite any relevant parameter names, because they default to p0, p1, p2, etc.
- Setup a sample application to make test purchases through the SDK.