Job Interview Tomorrow - 2hr Assessment

I had an interview where the laptop I was supposed to write my test project on decided it didn't want to work at all. - Visual Studio and SSMS decided that they no longer wished to work.

Ended up writing my code in notepad.

Still got offered the job :D
 
Some sample questions.

Everyone who writes code
•Describe the difference between a Thread and a Process?
•What is a Windows Service and how does its lifecycle differ from a "standard" EXE?
•What is the maximum amount of memory any single process on Windows can address? Is this different than the maximum virtual memory for the system? How would this affect a system design?
•What is the difference between an EXE and a DLL?
•What is strong-typing versus weak-typing? Which is preferred? Why?
•Corillian's product is a "Component Container." Name at least 3 component containers that ship now with the Windows Server Family.
•What is a PID? How is it useful when troubleshooting a system?
•How many processes can listen on a single TCP/IP port?
•What is the GAC? What problem does it solve?

Mid-Level .NET Developer
•Describe the difference between Interface-oriented, Object-oriented and Aspect-oriented programming.
•Describe what an Interface is and how it’s different from a Class.
•What is Reflection?
•What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP?
•Are the type system represented by XmlSchema and the CLS isomorphic?
•Conceptually, what is the difference between early-binding and late-binding?
•Is using Assembly.Load a static reference or dynamic reference?
•When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate?
•What is an Asssembly Qualified Name? Is it a filename? How is it different?
•Is this valid? Assembly.Load("foo.dll");
•How is a strongly-named assembly different from one that isn’t strongly-named?
•Can DateTimes be null?
•What is the JIT? What is NGEN? What are limitations and benefits of each?
•How does the generational garbage collector in the .NET CLR manage object lifetime? What is non-deterministic finalization?
•What is the difference between Finalize() and Dispose()?
•How is the using() pattern useful? What is IDisposable? How does it support deterministic finalization?
•What does this useful command line do? tasklist /m "mscor*"
•What is the difference between in-proc and out-of-proc?
•What technology enables out-of-proc communication in .NET?
•When you’re running a component within ASP.NET, what process is it running within on Windows XP? Windows 2000? Windows 2003?

Senior Developers/Architects
•What’s wrong with a line like this? DateTime.Parse(myString);
•What are PDBs? Where must they be located for debugging to work?
•What is cyclomatic complexity and why is it important?
•Write a standard lock() plus “double check” to create a critical section around a variable access.
•What is FullTrust? Do GAC’ed assemblies have FullTrust?
•What benefit does your code receive if you decorate it with attributes demanding specific Security permissions?
•What does this do? gacutil /l | find /i "Corillian"
•What does this do? sn -t foo.dll
•What ports must be open for DCOM over a firewall? What is the purpose of Port 135?
•Contrast OOP and SOA. What are tenets of each?
•How does the XmlSerializer work? What ACL permissions does a process using it require?
•Why is catch(Exception) almost always a bad idea?
•What is the difference between Debug.Write and Trace.Write? When should each be used?
•What is the difference between a Debug and Release build? Is there a significant speed difference? Why or why not?
•Does JITting occur per-assembly or per-method? How does this affect the working set?
•Contrast the use of an abstract base class against an interface?
•What is the difference between a.Equals(b) and a == b?
•In the context of a comparison, what is object identity versus object equivalence?
•How would one do a deep copy in .NET?
•Explain current thinking around IClonable.
•What is boxing?
•Is string a value type or a reference type?
•What is the significance of the "PropertySpecified" pattern used by the XmlSerializer? What problem does it attempt to solve?
•Why are out parameters a bad idea in .NET? Are they?
•Can attributes be placed on specific parameters to a method? Why is this useful?

C# Component Developers
•Juxtapose the use of override with new. What is shadowing?
•Explain the use of virtual, sealed, override, and abstract.
•Explain the importance and use of each component of this string: Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d
•Explain the differences between public, protected, private and internal.
•What benefit do you get from using a Primary Interop Assembly (PIA)?
•By what mechanism does NUnit know what methods to test?
•What is the difference between: catch(Exception e){throw e;} and catch(Exception e){throw;}
•What is the difference between typeof(foo) and myFoo.GetType()?
•Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?
•What is this? Can this be used within a static method?

ASP.NET (UI) Developers
•Describe how a browser-based Form POST becomes a Server-Side event like Button1_OnClick...

Link


I can see some late night swatting coming up.
 
Last edited:
I can see some late night swatting coming up.

You shouldn't need to - I would imagine that if you are suited for the job you should be able to handle any questions that they throw at you with preparing beforehand.
 
Its worth it hey... the worst feeling in the world is when you go to that interview and you look like a complete chop because you can't give the exact definition of a really common concept.

Have been there. Was once asked to program a Fibonacci sequence in pseudocode. After about 5 minutes of staring at it, I put the paper down and walked out with my tail between my legs. Didn't even know what a Fibonacci was and they wouldn't give any clues.

Edit: It was for a web developer role and it was a job I could do with ease. Felt so crushed that day.
 
I had an interview where the laptop I was supposed to write my test project on decided it didn't want to work at all. - Visual Studio and SSMS decided that they no longer wished to work.

Ended up writing my code in notepad.

Still got offered the job :D

Did you accept? When do you start?
 
Have been there. Was once asked to program a Fibonacci sequence in pseudocode. After about 5 minutes of staring at it, I put the paper down and walked out with my tail between my legs. Didn't even know what a Fibonacci was and they wouldn't give any clues.

That's a bit ****ty of them...

Surely the point of the interview wasn't to see if you knew what a Fibonacci sequence was.
 
You shouldn't need to - I would imagine that if you are suited for the job you should be able to handle any questions that they throw at you with preparing beforehand.

Trouble is, you go in for an intermediate developer position, were you have been coding standard client-server ASP.NET up to the point of the interview, and then they ask you all about MVVM,MVC,MVP patterns which you maybe heard of but never actually built a project from scratch in (because you were just coding a specific part of the larger project where the models were built already by someone 3 years ago) . So trust me, there definitely are questions even senior hardcore devs will not know off the top of their heads because they only used it in a project 2 years ago and/or they never actually did it all themselves but only as part of a team.

It just helps knowing these things "off the top of your head" in the interview, even if all of us in development knows it's rarely possible to know this normally if you don't work in all possible technologies and languages and project configurations all the time....... Alot of devs end up in a "maintenance" mode project with zero design/changes happening, they are just fixing bugs...how much will you actually know if you work like that for a few years? I think there are ALOT of those devs out there walking into interviews thinking they can wing it...
 
Last edited:
That's a bit ****ty of them...

Surely the point of the interview wasn't to see if you knew what a Fibonacci sequence was.

When I walked into the room, 3 people were sitting there. All fairly young, maybe in their early twenties. All 3 were dressed as hipsters and the entire first session of the interview, they were all cracking edgy jokes trying to impress and out cool each another with wise remarks.

I think they already had a candidate they had chosen beforehand, and I was just the unlucky sod who was called in to be used as cannon fodder.
 
Last edited:
One of the "big four" in software innovation once gave me an interview problem in which I had to write syntactically correct ANSI C to do topological sorting on a graph structure...without an IDE. My reaction, on hearing this (I couldn't stop myself somehow; guess I was nervous), was to ask, "why would I ever need to do that"?

Somehow I actually managed to progress past that round of interviews, but opted not to attend the next round, partly because I had already landed a job at a different (much, much smaller) firm which seemed to have more interesting projects, and partly because I don't really want to work for a company that doesn't seem to appreciate the difference between being able to do/remember difficult things with little practical use, and solving worthwhile problems.

IMHO, any semi-decent company should give you a computer with a popular IDE for the language you are using, and then set you a reasonably complex problem with elements which are typical of what you should encounter on a day-to-day basis while working for them. Ideally, the problem will have parts or elements ranging from the relatively straightforward, through moderately difficult, all the way to nearly impossible (in the given time frame). This will test:

1. Whether you can code
2. Your level of competence i.t.o. solving problems
3. How you handle stress: people who handle it badly will fail to address even the easy parts of the problem when they see the too-difficult ones; those who can handle stress, will tackle the bits they know how to solve first, and then at least make a reasonable attempt at solving the more difficult ones.

Maybe they won't give you an actual computer or IDE, but then, if they are fair, they would ask you to explain how you would approach the problems at a high level (pseudocode, diagrams etc.). This is also fine, in my opinion.

Finally (just to echo everyone else), brush up on concepts and definitions in the relevant environments and languages. At least know the basics like data types, standard libraries, how scope works etc.
 
Trouble is, you go in for an intermediate developer position, were you have been coding standard client-server ASP.NET up to the point of the interview, and then they ask you all about MVVM,MVC,MVP patterns which you maybe heard of but never actually built a project from scratch in (because you were just coding a specific part of the larger project where the models were built already by someone 3 years ago) . So trust me, there definitely are questions even senior hardcore devs will not know off the top of their heads because they only used it in a project 2 years ago and/or they never actually did it all themselves but only as part of a team.

It just helps knowing these things "off the top of your head" in the interview, even if all of us in development knows it's rarely possible to know this normally if you don't work in all possible technologies and languages and project configurations all the time....... Alot of devs end up in a "maintenance" mode project with zero design/changes happening, they are just fixing bugs...how much will you actually know if you work like that for a few years? I think there are ALOT of those devs out there walking into interviews thinking they can wing it...

True - but if you demonstrate knowledge on most of the topics I'm sure it will count in your favour.

Looking through that list of questions posted earlier - there are a few that I wouldn't be able to answer - but I'd be able to answer the majority without having prepared for being asked these questions.

I think the other issue with cramming for an interview is that you are just going to make yourself more nervous which will in turn lead you to forgetting all the useless bit of information you have been attempting to remember.

If you have experience within a language the interviewer(s) will be able to pick up on this pretty quickly.
 
When I walked into the room, 3 people were sitting there. All fairly young, maybe in their early twenties. All 3 were dressed as hipsters and the entire first session of the interview, they were all cracking edgy jokes trying to impress and out cool each another with wise remarks.

I think they already had a candidate they had chosen beforehand, and I was just the unlucky sod who was called in to be used as cannon fodder.

Sounds like a sh**** job anyways. Better off not being amongst ego-centric "programmers" that think they know it all.
 
When I walked into the room, 3 people were sitting there. All fairly young, maybe in their early twenties. All 3 were dressed as hipsters and the entire first session of the interview, they were all cracking edgy jokes trying to impress and out cool each another with wise remarks.

I think they already had a candidate they had chosen beforehand, and I was just the unlucky sod who was called in to be used as cannon fodder.

This has happened to me before... some 6 years ago...
Fast-forward to late last year and they were all featured in an article in Mr. Nose's publication, about their dodgy dealings...
 
I tend to ask open questions like: How would you compute the dot product between two vectors of size 2048 as quickly as possible?

Language, hardware, etc. is all left open. This explores a lot of avenues, and lets the candidate tell me what's in their repertoire, rather than me having to ask many superficial questions.
 
I tend to ask open questions like: How would you compute the dot product between two vectors of size 2048 as quickly as possible?

Language, hardware, etc. is all left open. This explores a lot of avenues, and lets the candidate tell me what's in their repertoire, rather than me having to ask many superficial questions.

Thanks cguy.
 
I tend to ask open questions like: How would you compute the dot product between two vectors of size 2048 as quickly as possible?

Language, hardware, etc. is all left open. This explores a lot of avenues, and lets the candidate tell me what's in their repertoire, rather than me having to ask many superficial questions.

I'd laugh and say, "ask Wolfram Alpha". If your internet connection is down, a couple of lines of Python (or MATLAB if you have a copy on hand) will do just fine.

And then I'd get serious and ask what type of environment and budget you have and whether you can tell me anything specific about the content of the vectors or what they represent.

The most generic "right answers", IMHO:

1. If it's a single-purpose, extremely high performance application (high throughput; low power) and the dev budget is large: fully-custom hardware or some existing platform with a really hardcore FPGA.

2. Anything else: buy fancy NVIDIA graphics cards and use CUDA with existing algorithms.

3. You won't buy graphics cards or FPGAs: "Nevermind, I don't want this job anymore". :p
 
I remember my interview with my current company - failed the demo due to "technical difficulties" - somehow still got the job and haven't looked back since! :D

Good luck, Beerisgood!
 
I'd laugh and say, "ask Wolfram Alpha". If your internet connection is down, a couple of lines of Python (or MATLAB if you have a copy on hand) will do just fine.

And then I'd get serious and ask what type of environment and budget you have and whether you can tell me anything specific about the content of the vectors or what they represent.

The most generic "right answers", IMHO:

1. If it's a single-purpose, extremely high performance application (high throughput; low power) and the dev budget is large: fully-custom hardware or some existing platform with a really hardcore FPGA.

2. Anything else: buy fancy NVIDIA graphics cards and use CUDA with existing algorithms.

3. You won't buy graphics cards or FPGAs: "Nevermind, I don't want this job anymore". :p

Bringing up (1) and (2) is generally a very positive sign. :) My follow up to someone bringing them up, is to ask if they are ever the right choice if the two vectors start off in say an x86 CPU core's L1 cache? (clearly, they are the best choice if the vectors are in the local memory of the FPGA or GPU). I follow up this with, what about matrix-matrix multiplication?

For (1) I also ask for the trade-offs between a custom ASIC and FPGA, and how the different constraints would affect the design. I also ask how one would trade performance for area for this particular algorithm.

For (2), I would ask how efficient is it likely to be with 2048 sized vectors, and what the reduction component of the algorithm would look like in CUDA (there are several ways to do this too, some deterministic, some not, and with various precision considerations).

For (3), there are actually a ton of things above and beyond the naive for-loop that one can do to accelerate the naive algorithm on a variety of CPUs (I would generally ask about the contemporary x86s, but knowledge of others is cool too).
 
Last edited:
Top
Sign up to the MyBroadband newsletter
X