Operations Programmer
Ever wonder how a company can run 2,000 linux servers in concert to produce a set of custom services? At ITA, we're running hundreds of different applications to seamlessly offer 24x7 services to customers. Doing so involves traditional software development, but also requires a set of engineers who can marshall processes and data in a distributed Linux environment. We're looking for programmers who can understand a domain, are experts in leveraging a UNIX/Linux environment, and who have experience programming in a distributed setting. While doing so, you will play an integral role in designing and deploying products in a 24x7 environment.
Responsibilities: * Design, implement, and maintain software to automate, analyze, and control many of the complex operational functions at ITA's data centers
* Work with different internal teams to understand product domains
* Train downstream operations staff, including the production of documentation, diagrams, and other visualization tools.
* Help to debug complex problems as they arise
* Help to maintain and grow a production environment in a way that makes the system increasingly maintainable
Qualifications: * Extensive programming experience in a UNIX/Linux environment, python and/or perl preferred
* Bachelor's degree in CS, or equivalent work experience
* Experience designing end-to-end solutions, including code, hardware, and networks
* Expert-level knowledge of the standard UNIX/Linux command-line toolkit: awk, sed, bash, tcpdump, lsof, etc.
* Strong knowledge of UNIX/Linux architecture
Special Knowledge/Skills Required: * Ability to constantly learn new domains, both technically and non-technically
* Ability to prioritize efforts without constant management involvement
* Must have excellent problem solving skills, and a willingness to exercise them on a daily basis
How to Apply
If you are interested in this position, please solve one of the puzzles below and send your solution with your resume to us via this link.
Puzzles:
Please select and solve one of the puzzles below to give us an idea of your problem-solving ability and coding style. Unless otherwise specified, you may use any freely-available language you like. Puzzles submitted in C++, Lisp, Python, Java or Perl will be reviewed most promptly, because those are the languages we use every day; if you choose another language, it may take us longer. No pseudo-code, please! In your submission email, along with your source code, please include your program's final answer; a brief (1-2 paragraph) description of your approach and any trade-offs you made (say, for generality, speed, or ease of implementation); and instructions on how to test your program. In order to ensure that your puzzle solution does not get caught in our mail filters, you should zip the source code file(s) and name the archive "Programming_Puzzle_Submission-NameofthePuzzleyouSolved" e.g. "Programming_Puzzle_Submission-RollYourOwnChatServer.zip".
| Roll Your Own Chat Server |
Implement a simple standalone TCP-based chat server, using the following protocol:
The server responds to all commands with either: OK<CRLF>
or, when an error occurred, with: ERROR <reason><CRLF>
<CRLF> indicates the bytes '\r\n'.
Upon connecting to the server, the client sends: LOGIN <username><CRLF>
Clients can create new chatrooms or join existing chatrooms (chatrooms begin with the character '#') by doing: JOIN #<chatroom><CRLF>
Clients can leave chatrooms by sending: PART #<chatroom><CRLF>
Clients can be in multiple chatrooms at once.
Clients can send a message to a chatroom: MSG #<chatroom> <message-text><CRLF>
Clients can send a message to another user: MSG <username> <message-text><CRLF>
When a message is sent to a chatroom the user is in, the server sends to the appropriate client: GOTROOMMSG <sender> #<chatroom> <message-text><CRLF>
or if the message is sent directly from one user to another: GOTUSERMSG <sender> <message-text><CRLF>
Finally, the client can log off by sending: LOGOUT<CRLF>
Here's a transcript of a sample session where a user named "alice" joins a chatroom called #news after connecting. C indicates the line was sent by the client, S indicates it was sent by the server (end of line indicates CRLF was sent): C: LOGIN alice
S: OK
C: JOIN #news
S: OK
C: MSG #news hi everyone
S: GOTROOMMSG bob #news nothing much happened after that
S: OK
S: GOTROOMMSG alice #news hi everyone
S: GOTUSERMSG carol hi alice, where've you been?
C: MSG carol on vacation
S: OK
C: LOGOUT
<server closes connection>
When implementing the server, aim for scalability and robustness. (Many submissions fail due to lack of robustness!) Your submission should include a description of the steps you took towards those two goals. Keep in mind that the client may be buggy, or even malicious. For example, if a client connects to the server and sends an infinite stream of the byte 'X' with no line break, the server should deal with this case gracefully. Please do not use an existing networking framework (e.g., Twisted or asyncore for Python, ACE for C++, etc.) to implement the server. The server should support running on Linux. |
Don't see the perfect job for you? Sign up for our RSS feed.
|