Tue Feb 13 16:08:55 PST 2007

Return of the Server

As you may have noticed if you tried to visit over the weekend, my server was down. On Friday evening, its power supply blew in a clap of electricity and the smell of burned electronics. I didn't have a suitable replacement power supply, so I had to wait until today to get the replacement. It's now operating well, and this power supply is certainly durable enough to last as long as I need it to.

Tue Feb 6 23:39:00 PST 2007

Apple Interview, Round 3

As I posted before, my third interview with Apple was a phone interview with an engineer from the Java team. Specifically, this engineer works on the framework, OS X to Java bridging, look-and-feel, and similar "neato" stuff. As such, I was expecting the interview to be Java-heavy, and also to focus on my JNI experience with the Summer of Code. It turned out that my Summer of Code project was so interesting to the interviewer that he had someone else from the Java team, a tech lead, call me to discuss the project - either that, or they didn't believe I really did what I said, and they wanted to grill me to make sure I wasn't lying.

I managed this interview better than my last one. My mind wandered less, and I had practiced answers to questions I knew I was going to be asked. I haven't put together a transcript for this interview, and I don't know if I will. I'll list some of the questions asked, and maybe I'll write a transcript from my notes later.

  • Tell me about the experience you have in writing in Java, specifically your OpenGL game engine.
  • Tell me about your experience using JNI.
  • Now some more basic questions: could you tell me what the difference between a set and a list is?
  • What would a linked list be good at that an array wouldn't be good at?
  • What is the level of complexity for lookup and insertion for: a hash table, binary tree, and linked list.
  • How would you get two threads to deadlock?
  • Is there an advantage to running a multithreaded application on a single-processor computer?
  • Tell me about different kinds of locking structures.
  • What does the Java synchronized keyword do?
  • What is the difference between an abstract class, a concrete class, an instance, and an interface?
  • Are you familiar with virtual methods in C++? Is there an analogous structure in Java?
  • What is the difference between a checked and unchecked exception?
  • What is your Objective-C experience?
  • What's the mechanism to return values you no longer care about in Obj-C?
  • How much experience do you have with Swing?
  • What are some design patterns used in Swing?
  • What are some design patterns in general? How and when do finalizers get run in Java?
  • Referencing the SoC project again - did your JNI interact with the garbage collector? Did that factor into your design at all?
  • Tell me more about the design you used in your JOGL game.
  • Why didn't you use Java3D?

At this point he asked if he could have one of his colleagues call me - he mentioned the colleague's first name offhand. While I waited for the call, I did some Googling and quickly found the guy he was talking about, a tech lead in the Java team. This person called me and asked me questions about my Davinci project for twenty minutes. He especially focused on how I dealt with interactions between the threads, and I opened up (an older version of) the code and took him through a portion of the callback sequence.

Now, I wait. I have a feeling this is it - I think I would match best in the Java team. If I measure up, I hope they let me know quickly so I can stop being anxious. If I don't, maybe they'll kick me over to yet another department, or maybe they'll realize that this is my best chance, and let me go. I hope for the first result, because I'm feeling excited to work on the Java team - the other two interviews didn't give me that feeling.

Tue Feb 6 13:36:44 PST 2007

Third Apple Interview Complete

I've finished my third interview with Apple, which turned out to be a double header. I'm still processing the conversations in my mind, but I'll update here once I've got it all figured out. Looking at my server logs, I have a feeling someone's eager to see my thoughts...

Mon Feb 5 22:49:35 PST 2007

Apple Interview 3 Approaches

My next phone interview with Apple is tomorrow morning. I was originally going to be interviewed by a manager from the Java team, but today I found out he can't make it. Instead, I'll be interviewed by an engineer in the department. I think I've been able to find out enough about this new interviewer to make a strategy, but I'll have to see how everything sounds when he calls tomorrow.

Tue Jan 30 20:58:48 PST 2007

Onward with Apple

I had been thinking that my last interview with Apple didn't go so great. It wasn't especially bad - I tried not to give any "bad" answers - but the interviewer kept talking about my passions, and I didn't give myself the impression that I was answering very passionately.

Despite that, early this morning I received another standard interview scheduling e-mail from a different college recruiter than the one I had been dealing with. The e-mail stated that "several members of Apple's Development team" would like to interview me, as opposed to the last e-mail which specified a single department. I was happy that they were still interested in me, but it seemed like they weren't impressed enough to accept me very quickly; rather, they wanted to bounce me around to different departments to find one that wanted me.

Later today I saw I had a voicemail. It was from the recruiter that had e-mailed me, and he called to get in contact with me to arrange this interview. He sounded more interested in talking to me than any other contacts have been, and he referenced an "opportunity in the Java team, in the development technologies division of software engineering." I don't know if this means they've found a place they'd like me to be, or if they're still tossing me between departments to see if anyone will take me.

I'll get in contact with this guy and see what he has to say. Hopefully they'll make a decision soon, and I can be done with interviews.

Mon Jan 22 17:47:13 PST 2007

Apple Interview, Round 2

Today I had my second interview with Apple for an internship position. This interview was over the phone, with Jeff Michaud from the Mac OS X Server department. The interview wasn't as technical as I thought it would be - it wasn't like the IBM technical interview. It was more like my first IBM interview, and my first on-campus Apple interview. I reconstructed the interview from memory and notes. Here's the (grammar-corrected) transcript; if you want an accurate transcript, remove some punction, add "umm", "basically", or "kind of" every three or four words, and make some sentences run-on:

Can you tell me a little bit about your passions, and how that might relate to Apple?
I like hacking, that's the most fun for me - I like developing new things. Right now my focuses are on networking and languages - two separate focuses. I enjoy anything related to new computer stuff, anything cutting edge, or technical and, uh, geeky, you could say. I enjoy running my Linux fileserver. It provides services to a small group of friends on the internet. Basically, I like the practical side of computer science.
So you mentioned a little while ago that you like hacking. So first of all, what do you mean by hacking?
The, uh, "proper" definition of hacking - writing code to do things, not the network cracking type of thing.
Okay, not cracking, hacking. Yeah, everyone has their own idea what hacking is, I wanted to figure out what yours is. Can you talk a bit about some cool hacks you've done?
One of the hacks that I liked was: at my last job, a big project I had was to write a wrapper for an application that already existed, to encapsulate everything in an archive. We had, basically, a big set of files in directories for client data, and I had to have that all archived into a single archive and be able to extract individual files on demand, without modifying the existing application. I wrote a wrapper that did some hacking calls to the main application, and it pre-extracted the archives and made sure they got handled correctly at the right time.
So this application was a Linux app?
This was a perl script, actually, running on a web server.
So you app was a perl script. What was the existing app?
Uh, the existing app was also a perl script.
So you mentioned your application made calls into the existing application?
Yeah, it was through HTTP. The wrapper used the main application through HTTP POST requests. The user would access the wrapper, which would find their data, dearchive it into a sandbox, the main app would take the data from the sandbox and process it, then when it was done the wrapper would put it back into the archive.
Are you drawn more toward desktop development or web development?
I don't so much enjoy web development. The stuff I was doing at my last job was okay because it was backend stuff, but I prefer desktop development.
What interests you about desktop development?
Well, I'm not completely crazy about Perl, or designing layouts in HTML. I like object-oriented programming, so things like Java, Objective-C, and C++ excite me a little more.
It sounds like you've done some Objective-C and Cocoa. Can you talk about that?
The first thing I did with Objective-C and Cocoa was to develop a chat client for the SILC protocol.
[Here I explained once again the idea behind SILC Aqua. I had to explain how SILC worked - that it was similar to IRC.]
Had you done any Cocoa before that?
Nothing more than tutorials.
And since then?
The next project I worked on was a game. Two years ago, I had a class where, in a group, I created a 3D game engine in Java. After that, I decided to port it to Cocoa, as a project to help me learn Cocoa. I worked on porting that for two months, until the Summer of Code came along and I stopped working on the engine to devote time to the Summer of Code.
Did the game rely on any Java graphics libraries?
Yeah, we used OpenGL through JOGL, a library of native bindings for OpenGL for Java. I was able to directly covert a lot of that code to the C calls for OpenGL.
I'm guessing you haven't done any more Cocoa since then?
No, I haven't.
Before that, did you use Java or C++, or another language?
For two years before that I used Java, because that's what my school was teaching. Before that I used C++.
In terms of features of the languages, for example Java versus Objective-C, what were some things about Objective-C that you had to adapt to?
The biggest part was the memory management. I had to figure out the conventions for retaining and releasing objects, as opposed to how I *didn't* do it in Java, since it was garbage collected. Also, learning the different framework, the class hierarchy. But the ideas were really similar.
What about Objective-C and C++?
C++ is kind of like Objective-C in that it's based on C, but C++ isn't a proper superset of C like Objective-C is. And C++ isn't an object-oriented language, it's a language with object-oriented features, and it's... different. There are differences, like, no class variables, so that makes it harder to make, say, a singleton, and the multiple inheritance thing too.
What about it?
C++ has multiple inheritance, Objective-C... maybe I'm confusing myself, I think Objective-C only has single inheritance, right?
Uh, you tell me.
I'm pretty sure Objective-C only has single inheritance, unless I confused myself. In that game project, I was converting from Java, so the classes were already laid out to not use multiple inheritance. I've never used multiple inheritance in Objective-C, in any case.
Yeah... it's always fun switching between languages, huh?
Yeah...
You have a section on your resume about system administration, let's talk about that. It says here you managed Redhat server, and other linux servers. Have you worked with Mac OS X Server at all?
I used it for a short time several years ago when 10.2 was new. That was before I started getting into Linux. I used it for about 4 months on my Powermac 9500.
Have you done any development of any of the services you listed here, or any other traditional network services? Have you worked in any of those open source codebases before?
No, I haven't. The closest I got was writing an HTTP caching proxy for a class last quarter, but I haven't worked on any open source code bases for any of the major servers or clients.
It sounds like you had some experience with at least one chat protocol, with your chat project. Any other protocols you're more familiar with than others?
Well, HTTP is fairly simple. I did write another chat client for a friend's very simple chat server a long time ago in Java. I've mostly done just a lot of HTTP work in Perl, Java, and C - and a little bit of SMTP.
Talk about SMTP for a minute, what have you done with that?
In working with my Linux server I've used telnet to play around with sending mail messages a lot, and in my networking class last year, I had to write an SMTP client to connect to a mail server, and send some preset mail.
Was that in Java?
That was in C.
Where would you rate yourself in terms of your skill in different languages: Java, C++, Objective-C, maybe Perl.
Hmm... I'm pretty good at Java, so I'd say 8 or 9 out of 10. C and C++, probably 7 out of 10. Objective-C, maybe somewhere between a 6 and 7, just because I don't have a whole lot of experience with Cocoa; and Perl, depending on what I have to do with it, maybe 7?
So you have one more year of school after this year. What do you see right now, looking forward, what you want to do with your career, your education, your passion? Where do you think you can make a difference, contribute, what sort of technologies, areas of the industry?
[I don't even want to recall my answer to this part. Let's say that I stumbled through it.]
And is there anything specific about Apple that draws you in, or gets you excited?
I've been using Macs my whole life; I mean, I had never used Windows until 4 years ago, I've basically loved Macs my whole life. The thing I like most about Apple is that everything is so elegant, all the interfaces are great, and that's sort of my weak point, so to work somewhere that there's motivation, and the experience to create great user-friendly interfaces, I like that a lot.
So, you say it's your weak point, so it's obvious you haven't done a lot of UI design, but it's an area where you want to get more experience.
Yeah.
We have a couple minutes left, do you have any questions about Apple, or anything you want to ask me?
I know how "secretive" Apple is about what they're working on, but if I were to work there this upcoming summer, what type of things could I be working on, possibly?
[Here he described what his group, the OS X Server group, works on. Nothing you couldn't find if you found a job description for a position in that group.]
Okay, that sounds good. I think that's all I need to ask.
Okay, cool. So, we're talking to a number of people, what'll probably happen is your University Relations contact will be back in touch with you, and we'll take it from there.
Okay, great.

Then the interview was over. Looking back on my answers, I don't know if I did as well as I had hoped to. I guess we'll see in the near future.

Thu Jan 18 19:08:23 PST 2007

Apple Interview Scheduled

It's been over a month since I was told that I'd be proceeding to the next level of interviews with Apple. Today, after my IBM interview, I e-mailed my university contact at Apple to inquire about an interview. Very quickly, I received two e-mails back from different people, thanking me or following up, and suggesting a time. I confirmed my phone interview for Monday, January 22, 2007 from 2 PM to 2:30 PM. I'll make sure to update the blog once that interview's complete.

Thu Jan 18 19:04:42 PST 2007

IBM Technical Interview

Today was the day. I had my long technical phone interview with IBM. It was so long that I'm still mostly braindead, and it's too long to write any sort of transcript from memory like I did for the first Apple interview, but I'll try to summarize it here.

The interview questions were based on how I had scored my skills on the application. Most were asked over the phone; some involved code or had complex answers, and those were sent over AIM. The first questions were about my background and experience with software engineering and open source software, the general pros and cons of OSS, and my experience with development tools like CVS and Bugzilla.

Next she started asking questions based on the skills I claimed on the application. I was first asked questions dealing with database syntax. I didn't do too well on those - I might have scored myself too high on the application. I got most of the first question right (which would have been simple if I had much experience with SQL), but didn't know enough to answer the other questions.

Then we moved on to questions I was better at answering: questions about Java and C. I rated myself very highly on Java, and she asked a lot of questions to make me prove it. Some questions were about the nature of the language, some were about syntax, and some were about OO. In the middle, I got tongue-tied and forgot the keyword extends, until I was prompted and reminded it started with an 'e'. There were tricky questions involving variable initialization, the kind of thing that's almost to the level of trivia, and shouldn't come up for a coder that knows what he's doing. The interviewer said that there wasn't really room for questions about design patterns in the interview, because it all goes down onto a form, but she squeezed some in at the end of the Java portion.

The C questions were more specific about syntax and certain tricks and caveats. There were questions about variable scope void pointers, and fibonacci. I was asked about almost every section on the application, including experience with Eclipse, Linux, system programming, JVM programming, and whatever else I decided I was barely proficient in.

The final portion was a case study: I was given a hypothetical project, in this case involving medical records, and I was to brainstorm out loud all the aspects of the project, from what I would need to start with, to what technical requirements there would be, to who I would need on my team, to solving team problems, to completion of the (massive) project. I rambled on, "brainstorming" my way through the problem, with occasional prompts from the interviewer.

The verdict? I should really look into learning more about databases, and I did "okay" on the case study. I impressed her with my Java and C knowledge, and my OSS experience. In the end, I passed. I'm now a finalist, and I should be hearing eventually from one or more project mentors for more interviews with them.

Tue Jan 16 17:16:12 PST 2007

IBM Technical Interview Scheduled

My technical interview with IBM is scheduled for this Thursday at 12:30. I've set up my audio system to give me freedom of movement but also good, hands-free sound quality, so I can pay more attention to answering the question than hearing it. My only problem is that my typing can be heard loud and clear over the phone, so I hope that won't annoy the interviewer. I'll summarize my experience once the interview's over on Thursday.

I don't know what happened to my Apple interview. After I let them know what my availability was (in a nice letter, by the way), I heard nothing. I haven't yet done a technical interview with them. I'll start pestering them to tell me something.

I'll also get going on applying to Google's internship program, and I'll see what other nice companies are in the middle of their internship recruiting programs. Local internship recruiting tends to start later - I'll definitely be at the spring career fair on campus.

Tue Dec 12 18:01:38 PST 2006

Next Round of Apple Interviews

Yesterday, mere hours after I had finished the IBM phone screen, I got an e-mail from the Apple UCSB relations contact, to congratulate me on passing the first round of on-campus interviews. I now need to schedule a phone interview with Apple in the next two weeks. You can be sure I'll be studying for this one hard as well as the IBM interview.

In the first on-campus interview, I was told that this phone interview (of which there might be more later) will be a technical interview. I'll have to be ready to show off my skills. I'll update with another post once I've had another interview.