Yeah, thank you very much. Thanks for the introduction and hey everyone, this is Tom today. I'm here to deliver a workshop focusing on how to aid, so engineering interviews. I know some background from you and I think we'll get a mixed audience here. Roughly two thirds of the students are like undergrads and maybe like the rest of the one thirds are either Masters or Phds. The assumption I'm going to make is like this workshop is going to help you for your first job. This is heavily tuned, towards entry level, but I will mixing some of the advanced materials so that you know what to expect like three or five years in the future. The material is designed to be interacted. Feel free to type in your questions, comments, concerns in the chat box, and I will try my best to address them. Before I give you an overview of workshop agenda, let's begin the workshop by solving this typical like coding problems that might come up in your technical interview. Let's read the problem statement. The problem is an array of integers numbers and an integer target, return the indices of the two numbers such that they add up to the target. I'll give you a quick example for that. For example, in array is 3,2,4,3 our target value is six. Can you do me a favor by typing in the chat box like what should be the return value? In this case, I wait for 30 seconds before I proceed. All right, I'm going to proceed. Many of my students and many of the real candidates, they say in this particular case the return value should be simply 1,2 because the value on those two particular indices is 2,4 two plus four equal to six. The return value should be easy, 1.2 but might not be the case from the interviewer's perspective. As you can see, there might be multiple solutions in this case. 3 plus 3 also equals to six. Maybe the interviewers expectation is to ask you to return all the possible solution that will add up to the target. This is a very common case where the candidate can feel like, hey, I was really doing a great job in answering the interview question, but somehow they reject me for no reason. Typically, like your interviewer, your recruiters will be reluctant to release any feedback to the candidate. This might be one of the reasons that we neglected in our interview. Make sure you read through the question and understand what your interviewers expectation and you try to match with their expectations. All right, let's do another case study before we jump into the real conduct. This is like a case study regarding, there is one specific student of mine who is not getting too many interview opportunities. This is their resume, let's read through it. It's internship experience to some companies during a certain amount of time. Basically, this person says he or she programmed in python to create tables in the database for customers and maintain daily meetings with the engineer to determine daily tasks. Documented all section of code for usage in future projects. Created and presented project details and status to executives. Constructed easy to read workflow diagrams. Does any of you observe any obvious missing pieces in this particular resume which might lead to the fact that this person is not getting too many interview opportunities? I wait for 30 seconds for that. Exactly, very nice. There are not many numbers in the information is not quantified. Very nice. Yeah, exactly. This is a much improved version with many more numbers on it and more quantitative efforts and more descriptive. Using more descriptive language and detailed projects to illustrate what this person particularly did in the past, right? Rather just says this person just use Pyson to do something. This is a much improved version. So this says created orchestrated a Pyson based data pipeline to consume the customer, the customers purchase history and persist data in a MySQL database that serves a downstream machine learning team, right? This is a much richer way to state the same thing and it delivers multiple layers of information. First of all, like this person can program in Python and this is, this looks like a new data pipeline, this person created from scratch. And he probably does some optimization to make sure the data pipeline is robust, latency sensitive, et cetera. And what does this person do exactly? He consumes the customer purchase history and then save the data to a database with a specific technology of MySQL Also, it shows there are certain level of collaboration between his or her team versus a downstream machine learning team. A lot of follow up questions can flow based on the simple sentences Interviewer might be interested in what is your specific pipeline look like and how you consume the data. And why do you choose mySQL database to persist data rather than some other databases? How do you work with other teams? How do you resolve conflicts? This is a much detailed and much preferred way to present what you did and what kind of technologies you have used. It is even better if you can put some numbers by emphasizing the impact of the project and your own achievement. This is exactly what this person does. In the second bullet point, it says, this particular project result in a 30% improvement in model quality and 50% reduction cost. This is a much more quantitative way to illustrate the point. In general, a technical process consists of multiple steps. It usually begin with some sort of application, can be online application, or it can be internal referral, or it can be, it can be from your interview experience. It can be your internship experience. And then some of the companies offers online assessment which will typically consists of some homework or some time assignment. Let's assume you are able to pass online assessment. Then you come to an initial screening process where you'll be contact with some recruiters and they will check for example, graduation date check, your potential match with a potential vacant position. If everything works out and you'll be moved to a technical phone interview typically lasts for 40 to 45 minutes. This is a chance for you to meet your future manager and to see if you guys have a really good vibe. It's also an opportunity for this person to test on your technical capabilities as well. Assuming you pass the technical phone interview process, you'll be moved to on site interview. These days, most companies still host on site interview on their online chatting applications, for example, Zoom or Google Chat. There are multiple types of on sites interviews. For example, it can be a coding interview, can be object oriented design interview if you are a senior, meaning you already have some existing industry working experience. It can also be a system design interview. These days, the behavior interview is becoming more and more important to make sure you are culturally fit with the company. Assuming everything went well, your recruiter will hopefully give you some feedback and eventually offered. All right, but before you like we were dive into any technical discussion. You should know who I am and why should I listen to this guy. I graduated from Peking University in China, and before I went to University of Maryland, obtaining my Master and Phd in Computer engineering. And then I got my first job in Civic Valley doing chip design stuff. And then I moved to Google. Right now I'm working in a broad region of distributed system data, pipelining, caching, and model deployment. In the meantime, I started to work with exponent as a career coach. So far I have 200 plus students with 400 plus interview mock interview experience. And I personally collect more than ten offers throughout my career. All right. Let's talk about the resume first because this is the first interface between you and your potential employer. I have this specific question from one of my previous students. He says, this person is interested in language models such as GPT, but the student has very limited industry experience. How can he enhance his resume? This is a direction I encourage him to pursue. This project does not have to be a industry level project. It can be an academic project or it can be one or two months side project you are doing on your own. You can form a team to do that or you can do a solo work. Right? This particular project about designing contextual chat bot using GPT two for natural language interaction. Then like this person plus let team project focus on creating a contextual chat pot using GPT two language model to simulate human like conversations. What does this person do specifically? All the five body points can be categorized into how do they prepare the data, how do they train the GBT models, and how do they find, how does he experiment with different hyper hyperparameters to optimize the model performance. Eventually, he added another point that says, implement a context management mechanism to maintain the conversation history so that the chat board can generate responses based on prior messages. The important message I want to deliver is the academic project or your site project might not have the same technical depth as what is happening in the industry. This is quite understandable from the recruiter's perspective. But the relevance is a key point here. If you are applying for a job that heavily focused on designing a language model, if you have a relevant project, there will be a huge plus for you if you list on your resume. Although you might say, hey, by just like looking at the context here, like the technology is a little bit shadow. But if you rethink about it, it actually involves all the important steps for you to train a model from your data preprocessing. How do you collect and curate your data to data preprocessing, How do you train the data, How to tune model and then how do you improve model performance, et cetera. This is a for loop and this shows to your recruiter and to shows to hiring manager. You have certain level of relevant experience in this field and this gives them a very high confidence that they can use experience or they can train you much faster pace if you are employed for that particular position. Although like this particular version of resume might work very well for position that involves large language model training, but it might not work as well for other positions. What I'm trying to say is for different positions, depending on what you want to pursue, you probably want to list different kinds of projects. This means if you're applying for ten different companies, for ten different positions, it is the best if you can spend some time to tune your resume to put relevant project, your resume so that it fits that particular position in general, in my opinion. What makes a good resume you first, we have to identify the required skills. This includes the technical skills, also the soft skills. For example, how do you work with others, how do you handle conflicts, how do you handle priorities and et cetera. You don't have to explicitly say I am very good at communicating with my team. The better way to say that will be like I work with a team of five on a specific project. I arrange who should do what portion of the work. This is a more concrete example to show, hey, you have sufficient leadership, you have sufficient communication skills so that you can excel at that particular job. Second one, demonstrate how your experience matches with the job requirement, right? Again, use concrete examples and try to be as technical as possible. Some of my students, they worry like the recruiter is not as technical at them, so they might not understand what they are trying to say. But trust me, most of the recruiters are very technical and they read your resume pretty well. You should try to learn to list your own contribution and impact instead of listing what your team achieves. And you should choose the right action verbs and probably different verbs to list your action item and your achievement. And there are a bunch of resume resources on exponent that you can use. This includes resumes for general software engineers, engineering managers, product management, data scientists, et cetera. I believe all those materials are free as long as you register for a free exponent account. Let's talk about the technical portion of the interview which involves coding, system design, object oriented design and behavior. I think we have limited time and most of the students here are pursuing their first job. I will have a focus on coding and behavior sessions. Let me know if you are interested in system design and object oriented design. So that we can at least go through the slides and demonstrate what to expect, maybe three years or five years later. But first of all let me try to give you an overview of the differences between these type of technical interviews. data structures and algorithms this is if you are applying for, let's say, backend job. And this is also useful if you're applying for product management jobs. However, the bar will be different. The key word for our data structure algorithm will be what's the complexity of your solution both in time and space? Are they optimal enough so that you can solve the problem in an efficient way? An easy example for those questions will be how do you solve? how about system? A system design is more for candidates with like a mid or a senior positions. Like the target is to design a system that serves large scale, large scale data, large scale of clients. The key word for that is like, how do you scale up your system so that it can serve ten x traffic, ten x of daily active users An example of that will be like design a new speed system for applications such as Instagram or Twitter. Right last, what is the object oriented design? This also apply for some companies. For some companies, entry level job, for example, Amazon and Bloomberg, it is typically use case driven and the key word here is whether your solution satisfy all the use cases. A common object oriented design question is designing a parking lot. I just want to pause here a little bit to see if we have any questions. All right. Simon, what kind of project is the most available without much industry experience? I think in my own humble opinion, I think the keyword is relevance. Depending on different what kind of careers, what kind of positions you want to apply for, try to do, I assume maybe you are in a very early stage of your career. Try to do something like a generic fit yourself into the big picture. For example, if you want to try to develop some backend system. For example, for me, I work with like a caching system a lot. Maybe you want to do, to design a system, design some prototype that involves a caching layer. You do not have to design cached design like a redis, but you have to use in order to improve, the performance of your project. Another example. In our previous example, if you are interested, for example, machine learning model training. So, try to come up with a project that involves some sort of model training. You want to have some exposure on that. Rather, this is a guided project, online coding courses, self guided project, or academic project. It's simply a group of friends who wants to do something fancy. The formality, in my own opinion, is not the critical one. It's about what kind of project you do, whether that project can help you to navigate your career. I think that's a more important question to ask, all right Yeah, what makes a good coding question? The coding question should try to test the ability of the candidates, the ability to understand the problem, their basic coding skills, basic knowledge about algorithm and data structure, and how they approach the problem, how they think about the problem logically, and how do they think about optimization opportunities and how do they apply optimization skills on that. It also should demonstrate the candidates ability to analyze corner cases and analyze the algorithm complexity and if needed. Candidate is willing to get their hands dirty and debug the code and eventually find out the root case. One thing I want to emphasize in this workshop is about the coding style. If somebody implement a dirty, dirty fast code, it might be easier for them to implement that code in the first tile. But the cost per change later on increase dramatically. If we have the habit to maintain a claim code in the first place, maybe like the first cost you more time. But as time goes by, the cost to maintain codes all most stays flattened. I use this example to illustrate my point. Let's quickly go through this question. This question is about giving a strain combination, digits 2-9 inclusive. Return all the possible letter combinations that the number could represent. Return answering any order, right. For example, the input digit is two. As we can see in this figure, 2 maps to 3 different English characters, ABC, and three maps to another 3 different characters, EF. There are a combination of nine possible answers, starting from A and D and with C and F. This is a potential implementation of this particular question because we have limited time. I'm not going to ask you to read the code here, but let's focus on the code. I put them as Bode. Let's look at this particular logic. It has a y loop and it has two nested four loop. The return value is called array. How does it assign? It has like a copy from another variable called newarray So we have spent more time in discussing the logic of the logic and correctness of the code. But one thing I can assure you is, even if this is a code that I wrote today, there's no chance for me to understand what is going on, even for myself after two weeks. Why would this happen? Because this code does not have a good coding style. First of all, it has a wide loop and it has two nasty for loop it has some like a variable assignment which is changing inside the for loop and logic seem to be very complicated. You might want to show this version of code to interviewer, but chances are you might make a mistake. It will take you hours to debug your code, and this is just not feasible during a 45 minutes interview session. What I would suggest is do not try to reinvent the. wheel if there's already some very good technology you can use. Look at this improved version of code, right? Let's focus on boded area, right? So if you are like a senior, you are in assume senior year. If you have taken your data Structure and Algorithm classes, if you are pursuing your master or Phd degree. this should seems fairly familiar to you. Can anybody of you recognize what kind of like a coding patterns I am applying here so that I can solve this particular question. What kind of algorithm do I use in this specific, in this specific function? I would wait for 30 seconds for that. Very nice - backtracking. There you go. Yeah. This is a typical like a backtracking template The backtracking is for those of you who do not know the backtracking, backtracking is a special format of a recursive function. It has a very obvious pattern. The pattern is you want to Explore a direction, then you want to call a recursive function. Then you want to revert the exploration by returning to a previous state. How do we achieve that? We have this variable current, which I believe it is a string. We are pending something to the end of the current string, and then we backtrack. We call a backtracking function, then we pop the last letter for the current variable rate so that we can retreat to the original state. This is a typical usage of backtracking and look at how simple code is. It only has one for loop. It is much easier for you to communicate with your interview. It is much easier for you to debug your code and it's much less error. Backtracking is just like one example I use that I say like all of you should use a well known algorithm and well known data structure to solve any coding challenges in your interview, Rather than try to invent. To try to be smart and reinvent. Reinvent something that already has an existing solution. This is just FYI. If you are interested in your coding style in great detail, you try to Google search, Google style coding style guides. This particular size is specifically for Python, but if you're coding some other languages, then you can add, for example, Google Java coding Style guides so that you can find appropriate style guides for naming evaluations, et cetera. How do you do it? for loop, et cetera. So let me talk about like one common pitfall for coding interview. But first of all, let me give you a quick quiz. This is interview ask to implement inorder tree traversal. The tree structure is show in the left diagram. Any idea about what if we print out the value of the tree upon traversing that particular tree node? What will be the print out sequence? If we're doing in order tree traversal? Wait for 30 seconds for that in order to traversal means we are going to traverse the after tree first and then go to the root of the tree and then traverse the right subtree. Yeah, very nice. 42142513. Any objections? All right. Yeah, that's the correct answer. Like you can use a recursive function call to implement tree in order reversal which which will be trivial. Or you can implement iterative in order tree traversal using a step as well. All right, what about the time and space complexity for that? Wait for 15 seconds For that, what is the time and space complexity if we are using a recursive function call to implement in order tree traversal Well, I'll just proceed to the solution because I think it's easy because we are eventually traversing o(n) of the tree. Assume we have o(n) of the tree, the time complexity will all of about the space complexity. The space complexity is also o(n) because the worst case scenario, the height of the tree is o(n), in the worst case scenario, the space complexity will be and represent the depths of recursive function call. Okay? So maybe like there's every once in a while there's one student of mine, they said, hey, you know what, I can do better than that. Okay, I know there is a specific Traversal option called Morris Traversal which can achieve constant space in order Traversal. Great constant space. That sounds like a huge improvement, right? But, you know, like, you know, like if you want to use a Morris Traversal, then you have to alter. Input structure of the tree. You have to change the parent child relationship. You have to change the pointer so that you can only use one space for me in an interview. This will be over sheet. Why? Because this is not so common. But some student argue how do I know which is common and which is not? The right way for you to do this Is you should stop at like, use your best judgment. You should try to optimize your solution to the extent that you feel like if you want to further optimize the solution, you will take a significant amount of time. You should engage conversation with an interview and ask them, hey, how do you feel about my solution? I feel like this is the best I can think of as of now. If you want me to push in that direction, I can think about more about the optimization. Try not to over optimize the solution. Try to avoid the situation. You are optimizing your solution so much that you do end up not finishing your code at all. It is strictly better for a candidate who can deliver a brutal force approach. A brutal force but optimized version of the code. But just write out all the code, finish all the testing, make sure it is bug free. Then the other candidate who has a lot of fancy idea about optimization but cannot finish all the implementation and testing, it is strictly better for you to land on our working solution. Sorry about that. This is, let me go back to the S. Another common pitfall, I have seen this problem before, right? Do I have to tell my interview, I've solved this problem before. You better change to a new problem. This is a grey area. Take my suggestion with a grain of salt. My personal take is you don't have to tell your interviewer unless another interviewer of the same company has just asked you the same question. The reason is later on those folks will meet up and discuss your performance later. If they later figure out, they basically ask you the same question. Chances are you'll be given an extra round, which will be a waste of your time. But in general, I'd say usually you don't want to trust your memory because it's common that interviewer is developing a variation of the problem based on a known problem. Maybe they just change a corner case. Maybe they change the constrain the problem. Maybe they change the input on all performs. Or it's possible that the problem looks similar. But they are indeed very different problems. Do not trust your memory, like treat every problem as if you have seen this problem from the first time. Some other generically coding interview tips, you want to have at least three examples. The examples will help you to align with your interview to understand the problem better, to make sure you guys on the same page. And also you want to make sure you have the complex analysis in both pine complexity and just space complexity. Use the complexity analysis to drive optimization, you want to maintain a healthy workflow. This usually start coming up with examples, asking clarification questions, proposing a potential solution, analyzing the complexity code and persuade your interview, this is a good approach to implement and then implement a code, testing code and try to, this is a healthy workflow. Some of my students, they try to jump in between, but sometimes they want to say, hey, I forget what test cases while I am implementing the code, I have to change my code to incorporate that particular corner cases. Jumping back and forth is a less efficient way to use the time, listen, and also be ready to take hints. Many of the interview questions are intentional to be hard, test your ability to communicate with your interviewer. Take some hints from them and then try to implement the version under their advice Keep calm. In worst case scenario, you have multiple runs. You have multiple interview opportunities even if you blow up one. It's not the end of the word, right? So you can in that case, like you can ask for a different problem if you have absolutely no idea about that particular subject at all. Lastly, keep in mind that interviewers will have different personal style. Some interviewers tend to be chatty, tend to be more helpful than others. Some of your interviewers might be like a more like calm and do not give, do not give much feedback. That's also common. It doesn't mean they do not like you. I will spend very few time going through my system design and object already design unless somebody like affect me, they're interested in that. But regardless, I'm going to just walk through the slides so that what the expectation will be. A typical problems you try to solve for system, a classic system deign question will be designing an application such as instagram as support. Several user cases such as like user can upload images from our mobile client to create a post. User can follow other users, newsfeed, images from other accounts they are following. This should be familiar for you if you actually have used Instagram or any other social media application before. This is a high level design of Instagram, like starting from mobile, client requests go to a low balancer, which routes to a different application server depending on whether it is a read or write request. And then eventually the data is persisted in some meta data. Db, the report which reports who owns the particular photo, when was the creation time of this particular photo? And we have another object storage that actually stored content of the photo. Also, remember there the core idea of a system design session is about like how do you scale up your system to support ten X traffic, ten X users? In this particular case, like we can use different technologies such as ready cache, such as like a message cube to speed up the right or the right read or the right. Not going to go very deep into this discussion, but here's the takeaway app and have a good system design interview courses this should be available for you for free once you have a free account. I am one of the authors who wrote several chapters for this material. I can tell you this is best courses you can find on the market, so it might be useful for you in future years. All right, quickly jump to object oriented design. And as I said, I will spend maybe two or 3 minutes on this one and leave the most of the time into question and answers. So what is the object oriented design? A common cases is to design an elevator system for building- used in object oriented design principles. What are the clarification question we can ask is, what are the, what is this like elevator system? Which are they for? Is this elevator for passengers or it is an elevator for the goods? We should care about the capacity of the elevator and we should check if the current weight is smaller or equal to- it is less than the capacity of the elevator. Otherwise we should stop operating elevator. And then we should ask questions about like are we talking about like we have multiple elevators in the same building or we only have one of that. Another corner case. We should consider, for example, you know, when we are inside the elevator and when the elevator is traversing upwards, can I press the going down button in the opposite direction or this is a forbidden move? Right? There's a lot of corner cases you want to clarify, and based on the result of those clarification questions, you can design a system that satisfies all of those use cases. Lastly, we'll talk about the expectation for behavior interview. A common behavior interview question is tell me about a time you disagree with the team. The team- Academic setting will be, for example, if you are doing a team project, academic projects with a teammates. But in industry setting, it means like typically team work on certain product, et cetera. Have you ever wondered, what are the interviewers looking for in this particular question? At least a few. The answer for this question heavily depends on different company's value. For example, the company might seek for a candidate who has a backbone, a sufficient amount of integrity to disagree with the team, disagree with your manager so that you are actually thinking for the best interest for the company instead of thinking for the best interest for any particular individual or a single team. When you are trying to resolve the issue, are you be able to use analytical thinking process and to give constructive feedback? Are you comfortable in working with members? Are you comfortable in prototyping some stuff and then show the early results to the team to say, hey, this is the evidence for us to do ABC, facing those disagreement. Do you have the mindset to embrace? There are culture differences and the differences in mindset. For example, different team might have different project priorities. There are different difficulty level for different team to handle a specific as a, are you trying to find the right person to solve the right question. last, like how about like a self reflection- If there's a friction disagreement happen in the future, what can I do next? If there anything I can do differently so I can achieve a better result. The high level takeaway is, before you interview for a specific company, try to read the company's value system. See what kind of personality, what kind of aspects the value the most. And you can try to frame your story to emphasize that particular aspects. Also, when you are trying to answer those behavior questions, try to use a star model. Which is shortfall, situation, task, action, and result. If you are not familiar with a star model, Google search for it. I argue that for every single behavior interview question, you should stick to this particular communication model. All right? So interview is a two way straight. Not only your interview is trying to see if you are a good match for the company, also you also want to consider this is a good company for me to work with. Am I comfortable working with working in that specific culture? Do I will have sufficient amount of support where I to be a better engineer in two years to in three years, is this a position a good fit for me, right? Right. So if they like me a lot during interviews, I have more bargaining when it comes to salary negotiation, right? Try to keep some diary, keep some reports after each of the interview so that you have a written copy and then you can use it for later. Right, I understand. Like when it comes to your interview season, you'll be overwhelmed with maybe like multiple interviews, hard work, et cetera. So it's very easy for you to lose track of all those kind of things. Try to keep a good record of those general practice steps. Be mindful about the time. You only have 40 to 45 minutes. Focus on practicing medium level common problems rather than spend a ton of time. I try to dig less common problems. Try to use mock interviews, this is very important tip. According to my observation, when I work with like 200 plus students, even if you feel like technically you're 100% ready, you are going to blow up your first interview. Maybe you can only perform 30% 40% during your first interview and you want to make sure it only happens in your mock interview, not your real. The real one. You can use your classmates, you can use your friends. If you are seeking for more professional interview experience and advices, feel free to approach me or other coaches on exponent. If it is out, try to break your interview into multiple days so you have a higher level of energy. Last, I'm just going to walk you through those common resources you can find on exponents so that you're at least aware of what kind of resources you can use. There are 65 plus interview interview related courses on exponent specifically geared towards product manager, engineer, manager, software engineers, data science, UX designers, et cetera. And the problems are categorized into different companies and different type of interviews as well. For example, like this one, you can use the exponent platform to sharpening up your SQL queries Also like this is a forum that you can use and it is ever evolving system where you can see other peers posting comments and posting new incoming questions to this forum You can find a lot of resources and find solutions for that. This is mock interview to view platform in exponent so that you can actually find peers, maybe in the other end of the word, who share a very similar background of yours. So that you team can pair up and provide mock interview for each other. This platform is completely free. All right, so I will copy and paste this particular link here so that you can submit your feedback to me.