Software Engineer Interview Questions

Ace your homework & exams now with Quizwiz!

How do you implement your error handling?

Talk about writing tests, wrapping the code to catch exceptions, trying try/catch statements, and looking through the WOMM development process. Make sure that you have a well-thought-out answer to this question.

Talk about a project you completed successfully

This gives the software engineer a chance to discuss a project without getting too technical. It should give you an understanding of how they worked with teams, time management skills, interacted with managers, and what contributions they made to the project.

Why Should We Hire You?

This is also an important question, as it will give the applicant the opportunity to explain more about themselves, what their skills are, what they bring to the table, and how they will help your company reach its goals. That last part is important, as it will give you an opportunity to see whether teamwork is important to them or not. You don't want them to just go on about their education and skills, but you also want them to show you how they can help you and be an important asset to your team.

How Do You Assure Software Quality?

When working on a project, it is important to conduct a quality control process to ensure that the end results come out great. Ask the developer what their quality control process looks like and whether they use any specific tools to test their results. Any engineer can end up having bugs in the software they are working on, but it is important that they have a process to test for bugs and a method for fixing them.

What's important when checking a team member's code?

While this question does not have a right or wrong answer it will give you insight into their thought processes on coding. What are the really important things when writing code? Do they focus on functionality or simplicity? Is security something there concerned with?

Follow up from data structure: what are the advantages and disadvantages of using a linked list over a dynamic array structure? [good time to talk about Big-O performance]

Advantages: O(1) append vs ArrayList's O(n) in the worst case. May use less space in common implementations of ArrayList -- most ArrayLists use arrays with sizes that are multiples of 2. Disadvantages: O(n) retrieval. About the same: O(n) remove for both linked-list and arraylist in the worst-case

How does an array differ from a stack?

An array doesn't have a fixed structure for how to add or retrieve data, but a stack has a strict LIFO approach (last in and first out). Questions like this will test your understanding of the nuances of data structures and the ability to memorize it.

Talk about some mistakes you learned from

Every software engineer who is passionate about engineering and has worked on personal and business projects will have made some mistakes. Perhaps they worked on a project that ended up failing. That is not a bad thing, however, as it allows them to learn important lessons from those failures. During the interview process, try to find out what mistakes the software engineer made and what lessons they learned from those mistakes. This allows you to get an insight into their work ethic, their willingness to admit mistakes and learn, and how they work on improving their skills while working on projects.

What Are You Working On right now?

Find out what the software engineer is working on at the moment. Even if they are not currently working for a specific company, a good software engineer who is passionate about development will usually be working on a side project of their own. If they are indeed working on a private project, ask them why they chose that project, what their goals are, what they enjoy about that project, and what they are learning from the process of working on that project.

Tell me about a tough software development problem and how you solved it.

Give a brief description. Make the assumption the other person doesn't know any specialized vocabulary or industry-specific challenges. You can also ask the interviewer about their familiarity with the topic you're about to describe and mold your answer based on the other person's level of context (a more or less technical answer).

What programming languages do you use? Which three do you prefer or are most familiar with?

Interviewers expect engineers to be familiar with multiple languages. They might look for an engineer who has experience with C++ and with Java, to demonstrate the applicant has programming chops to rapidly pick up a new language. Python is a highly sought after language. If you are applying for a full-stack role, then you should be familiar with JavaScript frameworks like React and Node. Having some scripting experience with Perl or Python is also a big plus.

Do you contribute to open source projects? Have you flagged issues?

On this question, you'll want to flag your passion for the open-source ecosystem, as a proxy for your passion for software engineering and your ability to being proactive about contributing.

Describe the process you have for a programming task, from requirements to delivery.

Requirements Analysis: Extracting the requirements of a desired software product is the first task in creating it. While customers probably believe they know what the software is to do, it may require skill and experience in software engineering to recognize incomplete, ambiguous or contradictory requirements. Specification: Specification is the task of precisely describing the software to be written, in a mathematically rigorous way. In practice, most successful specifications are written to understand and fine-tune applications that were already well-developed, although safety-critical software systems are often carefully specified prior to application development. Specifications are most important for external interfaces that must remain stable. Software architecture: The architecture of a software system refers to an abstract representation of that system. Architecture is concerned with making sure the software system will meet the requirements of the product, as well as ensuring that future requirements can be addressed. Implementation: Reducing a design to code may be the most obvious part of the software engineering job, but it is not necessarily the largest portion. Testing: Testing of parts of software, especially where code by two different engineers must work together, falls to the software engineer. Documentation: An important task is documenting the internal design of software for the purpose of future maintenance and enhancement. Training and Support: A large percentage of software projects fail because the developers fail to realize that it doesn't matter how much time and planning a development team puts into creating software if nobody in an organization ends up using it. People are occasionally resistant to change and avoid venturing into an unfamiliar area, so as a part of the deployment phase, its very important to have training classes for the most enthusiastic software users (build excitement and confidence), shifting the training towards the neutral users intermixed with the avid supporters, and finally incorporate the rest of the organization into adopting the new software. Users will have lots of questions and software problems which leads to the next phase of software. Maintenance: Maintaining and enhancing software to cope with newly discovered problems or new requirements can take far more time than the initial development of the software. Not only may it be necessary to add code that does not fit the original design but just determining how software works at some point after it is completed may require significant effort by a software engineer. About 60% of all software engineering work is maintenance, but this statistic can be misleading. A small part of that is fixing bugs. Most maintenance is extending systems to do new things, which in many ways can be considered new work.

Describe the main properties of a binary search tree.

A binary search tree consists of a root node with a left and a right subtree. The left subtree only contains elements smaller than the root, and the right only contains elements higher.

Say you want to retrieve from a data set a person's name based on an alphanumeric ID number. What kind of data structure would you use?

A dictionary, depending on what kind of properties you want, you may use a hash-map or just a regular map.

How do you keep your skills sharp and up to date?

A software engineer needs to stay on top of changes that occur in the industry and keep their skills fresh for new and emerging technologies

Follow up from BST insert: how can you avoid this problem?

A variety of ways. One way is to use a self-balancing tree such as a a red-black tree.

Use Big O notation to describe QuickSort.

A quick sort usually works best on average cases, but there are worst-case scenarios. On average, it is O(N log N), but O(N2) in the worst case. You'll want to use quick sort in situations where average-case performance matters a lot rather than dwelling on the worst. You'll need to have a deep and nuanced understanding of algorithms and their performance/implementation in order to answer.

What is a stack? What are the two basic operations of a stack?

A stack is a linear data structure with three basic operations: push (insertion of an element to the stack from the top), pop (removal of the latest element added to the stack). Some implementations of stack also allow peek, a function enabling you to see an element in a stack without modifying it. Stacks use a last-in, first-out structure - so the last element added to the stack is the first element that can be removed. Queues are a similar data structure, which work with a first-in, first-out structure. Stacks are usually implemented with an array or a linked list. You might be asked to implement a stack in an interview and to implement different operations.

What has your experience been like as part of an Agile software development process, if any?

Agile software development refers to software development methodologies centered around the idea of iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. The ultimate value in Agile development is that it enables teams to deliver value faster, with greater quality and predictability, and greater aptitude to respond to change.

What is Object Oriented Design? What are its benefits and drawbacks?

Assuming the development position involves working with objects, you'll need to show that you have a good grasp over the high level concepts of object-oriented design (OOD). Start with describing OOD as a programming paradigm or methodology. Then describe how the system will model the real-world as a series of interacting objects. Don't get too long-winded with your answer here. Example answer: Object-oriented design (OOD) provides a methodology to create big systems by defining small parts. Then connects those parts through encapsulation and inheritance. Some of the benefits of OOD include a faster development cycle and more reusable code (when done properly). One drawback to OOD is that to get that code to be reusable, you must spend more cycles up front to come up with a reasonable architecture that will grow into areas that may not even be defined yet.

What is black box testing? What is white box testing?

Black Box Testing is a software testing method in which the internal structure/ design/ implementation of the item being tested is not known to the tester. White Box Testing is a software testing method in which the internal structure/ design/ implementation of the item being tested is known to the tester.

Teach me about something for the next 10 minutes.

Choose a simple topic or concept that is easy to explain and will be easy for the interviewer to understand. Making the answer fun will help to engage the interviewer. Keep the answer lighthearted. Remember, the content is not as important as the delivery and showing your communication and teaching skills.

What web technologies are you excited about, and why do you think they'll win/survive in the next decade?

Choose a web technology and describe it, along with reasons (for example, technical and community support) for why it might win out against other web technologies. This question tries to gauge your passion for web development and following emerging technologies, as well as your strategic vision for the future of web development.

What is the difference between functional requirements and non-functional requirements

Functional requirements are the features that a developed software product is expected to perform. For example, adding a payment option at an eCommerce website will be a functional requirement. Non-functional requirements measure the usability of the application such as User Interface look and feel, Security, Performance, Interoperability, Reliability, etc.

Compare a hash table and a map type structure and their big-O performance on various common functionality (search, insert, etc.).

Hash Table's performance relative to a non-hashed Map is dependent on the hashing function. Assuming a good hashing function, insert in a hash is O(1) in best, and O(n) in the worst. To insert in the map, it's O(n) (find where to insert in the hidden ordered-list and push elements over/add node).

What is the Agile software philosophy?

Here, the interviewer is testing your knowledge of software engineering. If you're familiar with the Agile methodology, and how well you can describe it to someone. It is good to compare the Agile philosophy to that of another methodology, most typically the Waterfall model. Example answer: The Agile software philosophy is based on the principle of continuous development. Instead of only going from one phase to the next like requirements to design, when the prior phase is completely done, Agile development requires one to keep the code base in a well structured manner. Then you are always able to run it and deliver small pieces of functionality that are then refined before the next delivery. There is a big feedback loop where end users must be fully involved in the process.

Why do you want to work at [company name]? Have you used our products?

How can you help the company succeed? Read up on what's happening with the company and its industry. What stage of growth is the business in? Has it recently changed its product or service offerings? What competitive pressures is it facing? Consider this landscape and think, "What knowledge and experience do I have that would be especially useful to this employer in this time of growth and/or change?"

Why would you choose a microservice approach vs a monolithic app?

If you built your app as a microservice, it'd be a combination of different services that operate independently and robustly without being dependent on one another. You might want to do this if you wanted an app with multiple points of failures or faster performance or efficiency per each app. You should be prepared to defend your decision here and to have a point of view informed by scaling issues.

What are some ways to make websites faster? Name as many different techniques as you can.

Implement your own content delivery network (CDN). Use adaptive images. Cache, cache, cache. Evaluate your plugins. Combine images into CSS sprites. Enable HTTP keep-alive response headers. Compress your content. Configure expires headers. Minify JavaScript and CSS. Review your hosting package.

What is a join and an outer join?

In SQL, a join is used to compare and combine — literally join — and return specific rows of data from two or more tables in a database. An inner join finds and returns matching data from tables, while an outer join finds and returns matching data and some dissimilar data from tables

Explain the concept of cloud computing to my older (not-very-technical) mother.

In the simplest terms, cloud computing means storing and accessing data and programs over the Internet instead of your computer's hard drive. Instead of storing data on your own machine, you store it on the machines of cloud service providers like Google and Amazon.

When writing your own database server what should you consider?

Most of the time software engineers use data stores especially those working on backend applications. Do they understand the underlying factors of the application? How would they write an application like MongoDB or MySQL? This type of open-ended question tests the bounds of a software engineer interviewee's knowledge and could lead to a discussion of database principles such as file storage, sharding, threading, query optimizers, the big four NoSQL types, indexing, and others.

What is the worst case retrieval time for a hash table and how can this happen?

O(n), and when every element inserted in the hash table hashes to the same value.

Why is polymorphism useful?

Polymorphism: say you have a base class which contains a method that is either abstract or concrete. Another class extends this base class and might override this method or not. Polymorphism occurs when you define a reference variable with a base type, but point it to an instance of the derived type - when you call that particular method on that object that was defined in the base class (but may have been overriden in the derived class), the runtime compiler determines which version of the method to call. Hence polymorphishm meaning "many forms

What is responsive design? What is the difference between fixed and fluid layouts?

Responsive website design. Websites that are built with responsive design use media queries to target breakpoints that scale images, wrap text, and adjust the layout so that the website can 'shrink to fit' any size of screen, such as the difference between desktops and mobiles. Fluid website design. Websites that are built with fluid design use percentages as relative indicators for widths. Fixed design. Websites that are built using fixed design rely on fixed pixel widths. While a design with fixed dimensions can sometimes be the quickest way to get up and running, it'll provide a less user-friendly experience across multiple devices.

What is the software development life cycle? What are the differences between them?

SDLC or the Software Development Life Cycle is a process that produces software with the highest quality and lowest cost in the shortest time. SDLC includes a detailed plan for how to develop, alter, maintain, and replace a software system. SDLC involves several distinct stages, including planning, design, building, testing, and deployment. Popular SDLC models include the waterfall model, spiral model, and Agile model.

How Do You Come Up With Estimates?

Software engineers often come up with estimates that are entirely off the mark. Although they may want to think that they can deliver an end result within a specific time frame, new issues and bugs often come up that causes them to be late on their estimate. Ask the candidate how they come up with estimates to find out how accurate they are and whether they have realistic expectations about what it will take to complete a project.

What is your process to test and find bugs in an application?

Software testing is a universally expected part of software development You need to create sets of tests and assessments to be conducted at various development stages. In fact, testing should be carried out at all stages of development, including after your main launch. Things change, platforms are updated, and errors in mobile apps that were not visible before an OS update can wreak havoc. Usually, this means viewing the application as a whole and as their component pieces, then setting priorities in any areas that you think are more at risk than others. Tests are then conducted to confirm the functionality, and the detected defects are subsequently recorded. These defects can then be prioritized depending on their impact and severity.

Do you have any personal projects? Tell me about them.

Sometimes it's hard to settle on an idea for a project. If you have that problem, start by making a replica of a different application with a different tech stack or something. This will get your brain pumping and eventually you'll come up with something you'd rather do. The key isn't coming up with a great idea. The key is to get started on something. After you've worked on your replica for a while, you might notice some shortcomings in the app that you can fix. Or you might realize that you don't want to make this replica anymore and you start on something else. The purpose of replicating an existing app isn't to really make the replica. The purpose is to get you started on something so that you'll find what you really want to do.

What are your favorite technical sites and blogs?

TechCrunch.com, Wired.com

Briefly describe object oriented programming and it's main principles (MAKE SURE TO SAY: encapsulation, inheritance, and polymorphism, (and abstraction if you want)).

The four principles of object-oriented programming are encapsulation, abstraction, inheritance, and polymorphism. These words may sound scary for a junior developer. And the complex, excessively long explanations in Wikipedia sometimes double the confusion. That's why I want to give a simple, short, and clear explanation for each of these concepts. It may sound like something you explain to a child, but I would actually love to hear these answers when I conduct an interview. Encapsulation Say we have a program. It has a few logically different objects which communicate with each other — according to the rules defined in the program. Encapsulation is achieved when each object keeps its state private, inside a class. Other objects don't have direct access to this state. Instead, they can only call a list of public functions — called methods. So, the object manages its own state via methods — and no other class can touch it unless explicitly allowed. If you want to communicate with the object, you should use the methods provided. But (by default), you can't change the state. Let's say we're building a tiny Sims game. There are people and there is a cat. They communicate with each other. We want to apply encapsulation, so we encapsulate all "cat" logic into a Cat class. It may look like this: You can feed the cat. But you can't directly change how hungry the cat is. Here the "state" of the cat is the private variables mood, hungry and energy. It also has a private method meow(). It can call it whenever it wants, the other classes can't tell the cat when to meow. What they can do is defined in the public methods sleep(), play() and feed(). Each of them modifies the internal state somehow and may invoke meow(). Thus, the binding between the private state and public methods is made. This is encapsulation. Abstraction Abstraction can be thought of as a natural extension of encapsulation. In object-oriented design, programs are often extremely large. And separate objects communicate with each other a lot. So maintaining a large codebase like this for years — with changes along the way — is difficult. Abstraction is a concept aiming to ease this problem. Applying abstraction means that each object should only expose a high-level mechanism for using it. This mechanism should hide internal implementation details. It should only reveal operations relevant for the other objects. Think — a coffee machine. It does a lot of stuff and makes quirky noises under the hood. But all you have to do is put in coffee and press a button. Preferably, this mechanism should be easy to use and should rarely change over time. Think of it as a small set of public methods which any other class can call without "knowing" how they work. Another real-life example of abstraction?Think about how you use your phone: Cell phones are complex. But using them is simple. You interact with your phone by using only a few buttons. What's going on under the hood? You don't have to know — implementation details are hidden. You only need to know a short set of actions. Implementation changes — for example, a software update — rarely affect the abstraction you use. Inheritance OK, we saw how encapsulation and abstraction can help us develop and maintain a big codebase. But do you know what is another common problem in OOP design? Objects are often very similar. They share common logic. But they're not entirely the same. Ugh... So how do we reuse the common logic and extract the unique logic into a separate class? One way to achieve this is inheritance. It means that you create a (child) class by deriving from another (parent) class. This way, we form a hierarchy. The child class reuses all fields and methods of the parent class (common part) and can implement its own (unique part). For example: A private teacher is a type of teacher. And any teacher is a type of Person. If our program needs to manage public and private teachers, but also other types of people like students, we can implement this class hierarchy. This way, each class adds only what is necessary for it while reusing common logic with the parent classes. Polymorphism We're down to the most complex word! Polymorphism means "many shapes" in Greek. So we already know the power of inheritance and happily use it. But there comes this problem. Say we have a parent class and a few child classes which inherit from it. Sometimes we want to use a collection — for example a list — which contains a mix of all these classes. Or we have a method implemented for the parent class — but we'd like to use it for the children, too. This can be solved by using polymorphism. Simply put, polymorphism gives a way to use a class exactly like its parent so there's no confusion with mixing types. But each child class keeps its own methods as they are. This typically happens by defining a (parent) interface to be reused. It outlines a bunch of common methods. Then, each child class implements its own version of these methods. Any time a collection (such as a list) or a method expects an instance of the parent (where common methods are outlined), the language takes care of evaluating the right implementation of the common method — regardless of which child is passed. Take a look at a sketch of geometric figures implementation. They reuse a common interface for calculating surface area and perimeter:

What kind of data structure would you use to hold an arbitrary amount of objects in which retrieval is not an issue?

The phrasing of this one is awkward. It's a List, though, more specifically an ArrayList, because retrieval is O(1)

When do you consider a product to be finished?

The process of software development is a never-ending cycle. The first release of a software application is rarely "finished." There are almost always additional features and bug fixes waiting to be designed, developed, and deployed. Reports from error monitoring software about usability and bugs feedback into the process of software development and become new feature requests and improvements to existing features.

Do You Enjoy Working With a Team or Alone?

There is no right or wrong answer to this question, as it all depends on what you are looking for in a software engineer. You may want an engineer who will work hard and who can be independent. On the flip side, you may want someone who is a team player and is not stubborn about doing things their way.

What Are You Looking for in This Job?

This is also an important question, as you want to know why they are looking for a new job and why they applied to your particular company. Did they do research about your company? Try to find out what they know about your company's mission, what your values are, and what your company culture is like. If they did not do research about your company and are simply looking for a new job because they need the money, they might not end up being a good fit for your team. You want to make sure that their values align with your own and that they will be dedicated to your mission. You want to hire a software engineer who is passionate about your values and goals and wants to help you reach them.

Why Did You Decide to Become a Software Engineer?

This is an important question because their answer will help you understand how passionate they are about their work and how dedicated they will be to their job. Their answer should indicate whether they have a keen interest in engineering software.

What recent books have you read on software engineering?

This question is aimed at getting an idea of your professional development. Interviewers want to see that you are staying up to speed in your industry and taking initiative on keeping your skills sharp. Use any training or on-the-job learning you accomplished in your last position to help you answer this question. It's particularly impressive if you have a skill that is self-taught. For instance, if you taught yourself HTML or Photoshop in order to better do your job and add more skills to your repertoire.

How Did You Solve a Problem You Faced?

This question will allow the candidate to explain how they approach problems and their methodology for solving them. It will show whether they have the skills to hold up to pressure and use their problem-solving skills to arrive at a solution. This does not have to be a software engineering problem, though it may be. It can also be a problem with teamwork. For example, they can explain how they had a disagreement with a colleague on how to properly approach a specific problem and how they came to an agreement with that colleague. This will show that they have the teamwork skills to work with someone else, even when there is a conflict.

What project management tools have you used?

This will give you an idea of the project management tools such as Jira, Asana, or others that they are comfortable using as well as the type of work environment and they're used to.

What Questions Do You Have for Us?

When interviewing a potential software engineer, it is important not just to ask them questions but to allow them to ask their own questions. If an engineer doesn't really care about your company and is just interested in making money, they probably won't have a lot of questions. In addition, a good software engineer who cares about their work is in high demand, and cares about working with a great team will probably have a few questions for you as well. They might want to ask about the company culture, the work-life balance, your company values, the goals you are trying to reach, what you are looking for in a software developer and more to figure out whether you would make a good fit for them and how they will fit in with your overall company goals.

What Are Your Career Goals?

You may be looking for a developer who has higher aspirations, or you may be looking for someone who prefers to do what they are doing now and not have any sort of management position.

What would happen if you inserted a sorted list into a binary search tree?

You'd end up with, essentially, a linked list. Inserting in ascending order, you have the binary tree with each node having a null left tree pointer.

What are your favorite resources to keep on top of software engineering?

You'll want to have a list of resources ready, but more importantly, you'll want to be pretty sharp about genuinely following resources in the space. This displays your ability to learn new things and your passion for doing so, an important trait in a field that is ever-evolving.

Have you ever disagreed with your boss or manager? What did you do?

Your goal is to share a story where you disagreed with your manager and you were right about the disagreement. The reason you want to be right is that your story should ideally show how competent you are at your work, which will give the hiring manager confidence in hiring you. This answer can also display other great skills such as negotiating, selling an idea, and inspiring others.


Related study sets

Chapter 29: Management of Patients With Complications from Heart Disease

View Set

URINARY SYSTEM -CHAPTER 19 ANATOMY & PHYSIOLOGY

View Set

Section 2: Nationalism and Sectionalism Assessment

View Set

Drivers Ed Quiz 7 (respect and responsibility)

View Set

Chapter 06: How Cells Harvest Chemical Energy Dynamic Study Module

View Set

Chapter 10: Insurance Regulation

View Set

Computer Science 110 Final Review

View Set