Interviews are hard. You should not just aimlessly ask questions. You need to have a plan. You need to concentrate on these five areas: Personality fit, software engineering skills, specific technical requirements of the job, a passion for software development, and a history of getting jobs done.
- Questions for the five phases of interviewing for software developers
- Personality Fit, Warm up and General Background
- Tell us a little bit about yourself.
- Why are you leaving your current job?
- What would you like to do?
- What do you like about your current/former job? What don't you like?
- How would you rate your current/former management?
- What motivates you?
- Would you like to be the team leader or team member?
- Tell me about a conflict at a previous job and how you resolved it.
- Make sure candidate knows the requirements of the job, then ask, "Can you do this job?"
- (Summary personality item: Think to yourself, "If we hire this person, would I want to spend four hours driving in a car with them?")
- Software Engineering Skills
- What are the SOLID principles for Object Oriented Designs?
- S – Single-Responsibility Principle
A class should only do one thing.
- O – Open-Closed Principle
Software should be able to be designed such that it can extended and used by others without having to crack it open and change things.
- L – Liskov Substitution Principle
Objects should be replaceable with their subtypes (e.g., a Sheep should be able to replace a Mammal or Animal).
- I – Interface Segregation Principle
Interfaces should be logically grouped into small cohesive units so objects when implementing an interface don't have a bunch of extraneous empty methods.
- D – Dependency Inversion Principle
Objects and methods should invoke interfaces for dependency objects. The implementation of those interfaces should be given to the object e.g., in the constructor.
- S – Single-Responsibility Principle
- What is Object Oriented Design (OOD)?
Classically, Object-Oriented Design was defined by three characteristics:
- Message Passing
The same message passed to different objects can result in the objects doing object-specific functions. For example a "calculate_area" message sent to a rectangle and triangle use different formulas.
- Inheritance
Objects receive fields and methods from parents.
- Encapsulation
Members and methods are hidden from the outside world and only accessed through public helper methods.
- Message Passing
- Tell me about Scrum
Scrum is a lightly prescribed process management system, which can be used for software development.
- Scrum has three roles:
- ScrumMaster - who removes obstacles from the team and guides process
- The Team - who actually do the work
- The Product Owner - who guides what needs to be built, prioritizes work, and accepts the sprint product
- Four Ceremonies
- Backlog Refinement (Optional), aka Grooming - make sure items are complete and actionable
- Daily Scrum - what are my obstacles
- Sprint Planning Meeting - select items to be implemented this scrum
- Sprint Review Meeting - demo to the owner and others the progress made this sprint
- Sprint Retrospective - What went well? What did not go well? How to improve our process?
- Three Artifacts
- Product Backlog
- Sprint Backlog
- The Product Increment
- Scrum has three roles:
- What are the benefits and drawbacks of Object-Oriented Design (OOD)?
Benefits are many, but one of the downsides is the code is slower and takes more memory than if it were just written procedurally.
- What is the Agile software philosophy?
- What is the Lean software philosophy?
- Have you looked at "Domain Driven Design"?
- What are the benefits of Dependency Injection?
- What is the role of interfaces in design?
- What books have you read on software engineering that you thought were good?
- What are the really important aspects of software development?
- Tell me about your philosophy of database design. Database tools?
- What are important aspects of GUI design?
- What Object Relational Mapping tools have you used?
- Tell me about the Model-View-Controller pattern and why it's important?
- What is Test Driven Development and Design? Why is it important?
- What is the difference between a mock and a stub?
- Describe some of the software patterns you have used?
- Have you heard the term YAGNI? What does it mean?
- How do you design scalable applications?
- What is Continuous Integration (CI)?
- What is Continuous Delivery? (CD)
- What is REST?
- How would you design a solution to the following problem....
- What metrics, like cyclomatic complexity, do you think are important to track in code?
- What are the SOLID principles for Object Oriented Designs?
- Specific Technical Requirements
- General
- What software have you used for bug tracking and version control?
- How have you used branching? Branch by release or feature?
- What do you use for unit testing? GUI testing?
- Describe an interesting class you have designed.
- Have you been doing code reviews? What was the format?
- When and how do you optimize code?
- Describe your favorite build environment.
- Technical Questions for Web Developers
- What is SQL injection?
- Tell me about HTTP. What are the seven HTTP verbs?
- What is the difference between GET and POST in web forms? How do you decide which to use?
- What is the difference between PUT, PATCH and POST? How do you decide which to use?
- How do you make a REST system faster? (better hardware, caching, parallel processing, optimize components like serializers, better network connections, ...)
- How to make a REST system more reliable?
- What happens behind the scenes when you enter a URL in the browser?
- What are micro-services? Advantages and Disadvantages?
- How to make a web application more secure? (limit access, audit trail, deserialization protections, sql ingestion , cross-site scripting, ...)
- What JavaScript libraries have you used?
- What are some of the irritating limitations of CSS?
- Very Basic Questions about SQL for Developers
- What is the difference between an inner and outer join?
- What's the difference between a clustered index and non-cluster index?
- What are some aggregate functions?
- What does it mean to "normalize" a database?
- What is a view and when should you use one?
- Technical Questions for C# Developers
- Tell me about access modifiers in C#.
The type or member can be accessed by other code ...
- public
By any class in any assembly
- private
Only from the same class or struct. "private" is the default.
- protected
in the same class or subclasses in its assembly
- internal
in the same assembly
- protected internal
anywhere in the same assembly, or, from the class or a derived class in another assembly
- private protected (C# 7.2)
by the same class or subclasses that are in the same assembly only
- public
- What is a delegate?
A delegate is a pointer (reference type) to a method with particular arguments and return type.
- Can you name some predefined delegates?
- Action<>
this takes up to 16 generic arguments and returns void e.g, void Action<T1, T2>.
- Func<>
this takes up to 16 generic arguments and returns a value e.g, TResult <T1, T2, out TResult>.
- Predicate<>
this takes exactly one generic argument and always returns a boolean e.g, bool Predicate<T>.
- Action<>
- What's the difference between static and non-static methods?
- What is Serializing?
- What is a Finalizer? How is it different from Dispose()?
Most objects with managed resources should implement the IDisposable interface. Dispose() is typically called by the code that created the class to release any resources. The Finalizer, also called Destructor, is called only by the Garbage Collector at the very end of an object's life.
- What's the difference between struct and a class?
A struct is a value type that typically lives in the stack and not the heap. Setting a struct equal to another struct copies all the contents, unlike with a class that only the pointer is copied. structs are typically used to increase performance. DateTime is a struct, as well as int, double, and other primitives.
- Difference between an abstract object and an interface?
- Tell me about threading.
- What LINQ operators have you used?
- Tell me about access modifiers in C#.
- Common Whiteboard Exercises
- Sort an array of ints. Sort an array of T.
- Reverse a string programmatically. Now do it recursively.
- Reverse a singularly and/or doubly linked list.
- Print the Fibonacci numbers from 1 to n.
- Write a method to give the nth Fibonacci number recursively.
- General
- Passion for Software Development
- What are some influential software books you've read lately?
- What are your favorite technical web sites, podcasts, and blogs?
- Are you doing any interesting personal web projects?
- What do you like about software?
- A History Of Getting Jobs Done
- Tell me about your last project.
- Tell me about your part in the release of some important software.
Even if you are not going to hire the person, you should be kind and encouraging. The universe is a vast unpredictable place. You may meet them at a professional society event. You may be looking for a job one day and be interviewing with this person trying to get a job at their company. Stranger things have happened.
- Personality Fit, Warm up and General Background
- Questions to ask prospective employers
You want to be learning and moving ahead in your career. When looking at opportunities you need to find companies that are doing software right and so can boost your abilities. You need to look at these areas and make sure the future employer is doing a good job: Software Methodology, Testing, Building and Deploying, Project, and Culture.
- Software Methodology
- Which methodology do you use: Waterfall, Scrum, Kanban, XP, other?
- Do you have daily standups? retrospectives? How is the sprint start meeting run? How are tasks distributed? Do you calculate velocity?
- How is estimating done? Story points or hours? Are story points complexity or estimated time? Who estimates? Do you "commit" to stories or "forecast" stories.
- What happens when the SCRUM busts and not all the tasks are finished?
- Do your programmers do peer programming?
- What tools to you use for issue tracking? Jira? TFS?
- Tell me about your version control. GIT Branch by release, feature, personal branching?
- Tell me about your Quality Assurance.
- Testing
- Do you do Test Driven Development?
- What framework do you use for Unit testing?
- What do you use for a mocking framework?
- How do you measure code coverage and do you have standards for percentage?
- What software metrics do you track?
- Building And Deploying
- What is your build process?
- Do you deploy to a cloud?
- What tools do you use for Continuous Integration?
- What tools for Continuous Delivery? How frequent are releases?
- What happened the last time you had to roll back?
- Project
- What is the most pressing need you have in the next 3 months?
- What are the significant challenges the company faces now?
- Tell me about the project you hiring for?
- What version of C#/Java/Python are you on?
- Is the job mostly adding features to existing code, or new greenfield development?
- What technologies do you plan on using?
- Culture / General
- How many hours per week do people usually work? When was the last time you worked on the weekend?
- What is your management style?
- What are important traits of your employees?
- What motivates your employees?
- What do most people do for lunch? (Do they eat the their desk, everyone go out on Fridays?)
- Do you have any celebrations? (Birthdays? End of Project?)
- Why is there an opening?
- What are your distinct advantages in the marketplace?
- Is your company making money?
It's always more fun to work at companies making lots of money.
- How do you encourage education in your people?
- What is one thing you would change about the company?
- What has been the turnover rate in the department?
- Can I meet the people who would be my co-workers?
- Software Methodology
- Hints for taking white board programming tests
These days the interview process typically involves coding a small problem in a whiteboard environment like coderpad.io or through Skype. Here's my hints on taking the tests:
- Make sure you understand the problem first. Give sample input and output to make sure you comprehend the task.
- Talk, talk, talk. As you are thinking through different options on a solution, talk out loud about the things you are considering.
- Think about overflow and underflow conditions. For example, ask the problem presenter if the number of items may be greater than 2 billion, in which case you need to use 'long' instead of 'int'.
- When writing methods, be sure to check the validity of incoming arguments. Is an array null, or an incoming count variable negative?
- When doing recursion, make sure you include the trivial case.
- Mitch's Quick Tips for Being Interviewed
- Start and end the interview by thanking the interviewers for their time.
- Don't talk too much.
Make your point and stop. The interviewers will normally be too polite to stop you, but just stop talking after you answer their question.
- When you don't know the answer, just say you don't know.
Few people will know all the answers. It's best not to pretend you know and try to make up things. Just say you don't know, so they can ask you questions about things you do know.
- Ask for the right answer.
If you feel you didn't answer a question to the interviewer's liking, ask them what the answer is they were looking for. You can learn a lot on today's interview for your next one.
- Write down all the people's name in a panel.
It's helpful in followup conversations.
- Don't be afraid to let your humor show.
It's not much fun to interview possible candidates. Don't be too serious. Liven things up. But not too much.
- Questions to ask possible future coworkers at a prospective employer
- How many training courses did you go to last year?
- How many hours per week do people usually work? How many hours do you work?
- On a level of 1 to 10, how stressful is it working here?
- What is the best thing you like about about working here?
- What is the worst thing about about working here?
- Why did the last person leave?
- Questions to ask references over the phone
Start by describing the role "Pat" is expected to do in the new job.
- What was your professional relationship with Pat?
- How were their communication skills?
- What three words would describe Pat?
- Did you see any growth in them during this time?
- How did they work with other people?
- Did you ever see them resolve a conflict?
- How is their attention to detail?
- How did they react to negative feedback?
- Based on my earlier description, do you think Pat would do well in this job?
- Any other comments?
- Salary and Research Sites
- C# Interview Question Sites
- Recommended book for interviewees:
Cracking the Coding Interview