Principal Developer, UNIX Systems and Applications
Job description
Our software development team builds distributed applications that can be run anywhere, anytime and on any device. We build custom or semi-custom applications to meet specific needs of our clients; we do not build off-the-shelf software products.
The general responsibilities of Principal Developer, UNIX Systems and Applications are:
- Analyze, design, code, debug and document UNIX-based software solutions we offer.
- Our solutions range from system level programs such as NDMP protocol implementation on NetBSD to large-scale business applications using J2EE-compliant application servers on Solaris.
- Interact with clients to gather requirements, jointly develop code, transfer technology and train.
- Provide technical leadership (not project management) by assigning work, resolving technical problems, and mentoring other developers in all areas of UNIX-based software development.
Special Skills
Must be highly skilled in creating distributed applications on UNIX systems, with excellent written and verbal skills. We expect the candidate to answer most, if not all, of the following questions:
UNIX
- Which section of the man pages documents the UNIX system calls?
- What do you infer from the return values of UNIX system calls?
- Can you explain the arrangement of a user process i.e., text, heap, stack, etc.?
- If multiple processes are appending records to a file, is there any difference between having each process "open" the file with the "O_APPEND" flag, versus having each process issue an "lseek" to the end of the file before each "write"?
- Can you write a program that copies standard input to standard output using the "select" system call?
- What is the difference between getuid() and geteuid()?
- What happens if a signal is generated while a process is already in a signal handler?
- Why doesn't "fork" return the process ID of the parent to the child and return zero to the parent?
- What is the "portmapper"?
- What is a "facility" in syslog?
- Have you ever written a daemon?
- What are the differences between pipes, FIFOs, semaphores, message queues, shared memory, and sockets; and where would you use them?
Networking
- What is the maximum number of hosts on a TCP/IP internet?
- What is the difference between UDP and TCP?
- What is the difference between tftp and ftp?
- Why is telnet on a network not secure?
- What command do you use to see the routing table?
- What is "bind"? Does every UNIX computer need it and why?
- Why do you need the files /etc/services and /etc/inetd.conf?
- Have you used "tcpdump" or "snoop"?
General Coding and Debugging
- How would you force a core dump programmatically? And why would you do such a thing?
- How do you attach a debugger to a running process?
- What is a symbol table?
- What is the purpose of a profiler? Have you ever used one?
- Have you used any code coverage tool?
- What command allows you to trace the system calls of a running process?
- What command allows you to see what files are opened by a process?
- What is a "stack trace" when using a debugger?
- Have you ever simultaneously debugged a client application and its server application running on two different machines?
- Have you used imake? How does it differ from make?
J2EE Technologies
- When do you use a StringBuffer instead of a String?
- What are the side effects of using return in a try block?
- What is the difference between a Vector and an Array?
- What is the difference between "= =" and "equals"?
- What is the difference between synchronized static and synchronized instance methods?
- When do you use an interface versus an abstract class versus a concrete class?
- When will you use Java RMI versus EJB?
- Have you used JMS?
We offer an ambitious salary, stock options, a flexible schedule, and comprehensive healthcare benefits. If you're interested, please send a note, stating the position and location (Mountain View, Bangalore, or Chennai) you are applying for, with your resume to careers@global.com
Return to Careers at Global Automation