对于网站原创内容版权维护的声明:https://www.xiaogeedu.com/h-nd-337.html 

版权维护的法律依据(部分):https://www.xiaogeedu.com/h-nd-336.html


声明:我在网站上陈列的内容,是基于我的认知 - 它不可避免得会带有一定的我的主观色彩(虽然我已经尽我所能摒弃主观色彩,而尽量去分享客观的东西)。考虑到我的认知并不是完全没有参考价值,所以我依然决定把我的认知分享出来供读者参考,这会对迷茫的、没有思路的读者起到一定的帮助作用。要强调的一点是,我并非认为只有我的认知是对的 其他认知都是错的,毕竟条条大路通罗马,而且每个人都有适合自己的路子,每个人选择的道路和做事方法和形成的认知都值得尊重~我也建议每位读者多去了解了解其他人的认知以及好建议,毕竟兼听则明~总之,我输出的内容的确是我的认知,但是这只是我的建议与个人想法,仅供参考~

我们先看一下SDE面试的考题都包括哪些,以及这些考题是否可以讲课、做模拟面试、以及押题:

然后我们再看下这6块面试题的资料:
1.算法
是数据结构与算法的考察。其知识点涉及:
Database;Depth-First Search;Binary Search;Binary Tree;Breadth-First Search;Stack;Graph;Heap (Priority Queue);Backtracking;Linked List;Union Find;Sliding Window;Recursion;Ordered Set;Divide and Conquer;Geometry;Interactive;Data Stream;Randomized;
Shortest Path;Monotonic Queue;Binary Search Tree;Memoization;Topological Sort;Array;Bit Manipulation;String Matching;Reservoir Sampling;Minimum Spanning Tree;Game Theory;Two Pointers;Hash Table;Line Sweep;Segment Tree;Greedy;Counting Sort;Number Theory;Sorting;Prefix Sum;Hash Function;Combinatorics;Suffix Array;Biconnected Component;Dynamic Programming;Enumeration;
Doubly-Linked List;Bucket Sort;Brainteaser;Tree;Quickselect;Math;Binary Indexed Tree;Merge Sort;Strongly Connected Component;Counting;Monotonic Stack;String;Probability and Statistics;Rejection Sampling;Rolling Hash;Simulation;Eulerian Circuit;Bitmask;Design;Concurrency;Radix Sort;Shell;Queue;Matrix;Trie;Iterator
至于刷题的注意事项和基本原则,如下:
(1)刷算法题的一些原则
• 不可以不刷hard题
• 刷题要确保自己cover所有的数据结构,没有知识死角。早期可以先看一些题目分类,比如 https://leetcode-cn.com/circle/article/48kq9d/ ‍ 后期就看leetcode的tag来确保自己没有知识死角。
• 没有面试的时候,按照不同分类刷题。有面试的时候,优先看近期面经,然后看leetcode整理的这个公司的高频题,然后再看往年面经(比如一亩三分地里会大概率有面经)。
• 刷题数目要至少至少至少至少到300道以上,要不然手感上不去。在刷题早期的时候,看一道题然后就去立即看答案,学习答案的思路,然后把答案关闭,然后自己试着根据刚才学会的思路写一些。做个200-300道题目以后,再开始独立凭借自己的能力做题(而不是上来直接看答案)。也就是说,我认为刷题的早期更多是一个学习过程(学习答案如何做题),到中后期你积累了足够的经验后,再自己独立做题,当然了,在这种时候,依然会遇到不会的题目,那此时也尽量先自己多思考思考,然后再看答案,毕竟刷了200-300题后,你对刷题已经有感觉了,也应该尽量自己先独立做做看,依然不会的话,再看答案。
• 题目做对后要practice自己的英文--push自己用英文把题目原理和思路讲明白
• 对于不熟悉的、容易遗忘的数据结构、和自己经常容易忘记解法的题目,整理到错题本/cheatsheet,每隔几天看一下,面试前也要看一下
• 积极思考和查阅可能的followup问题,比如如何优化时间复杂度,数据量级如果巨大无比怎么办
  ○比如原题是10*10的数组,那主动 考虑1000亿*1000亿的数组怎么做
  ○比如目前complexity是n*log n,主动思考能变为n么
  ○比如原题是求父亲节点,那就主动思考,如果改为求父亲节点的父亲节点,or,兄弟节点,code应该怎么改,总之就是顺着题目要求deliver的
  结果的那个方向然后顺藤摸瓜的自己思考如何加大题目难度
  ○比如原题某条件是什么什么满足1/3就可以,那就主动思考,修改为1/4或者1/2,code需要怎么改,条件修改后原方法依然是极佳方法吗?
  ○……总之就是做题的时候,别是那种做完这个题目就完事了,你多push自己站在面试官的角度出题,然后自己锻炼自己(进一步修改题目、或者思考都能问哪些followup问题)
• ……

(2)写算法题的时候的境界:Let your code speak
1.算法题目直接做对->没bug要de->你很开心,面试官也开心
2.算法题目没有直接做对->要debug->按时debug出来并且submit->你很开心,面试官也开心,因为看到了problem solving的能力
∴programming的好习惯可以方便自己快速locate出bug,然后resolve掉
3.算法题目没有直接做对->要debug->无法按时debug出来,附上comment后submit->你不开心,面试官也不会太失望,因为看到了problem solving的
sense
∴programming的好习惯可以帮助面试官了解你的思路,也方便你自己在最有可能是bug的地方标注comment。
  (1)你知道bug在哪里:comment上你知道bug在这里+这是个什么bug+你为什么没de出来+再给点时间你打算怎么继续debug
  (2)你不知道bug在哪里:你在多处comment上你觉得bug可能在这些地方+你为什么觉得bug可能在这些地方+你为什么没de出来+再给点时间你打
  算怎么继续debug,找到哪里是bug并fix
****针对算法题目的好的编程习惯: 可调式性高,可读性高:comment+helper method帮助捋顺编程思路与逻辑(要不然你回看真容易看懵了,找不着哪是哪)

(3)用嘴说算法题时,要懂得如何communication
回答面试题的流程是: 1. 理解题意,复述问题 2. Clarify(题意,input/output) + make assumption 3. 分析问题,找到合适的数据结构和算法 4. 描述解题思路和步骤, 分析时空复杂度 5. coding,think aloud 6. manual running test case 7. 改进

在说每一步的时候,都有3点communication原则: 1.有始有终,不断推进对话:面试期间,你的作答结束都end with a marker/hint,你就可以推进对话
  (1)自我介绍 end with 比如yeah this is pretty much all about myself这种的句子
  (2)写完code+test case后,就主动speak out说你已经做完了+do you want me to explain the logic of the algorithm/do you want me to 
  analyze the complexity?/do you want me to go through the code with you?
  (3)讲code的时候,明确说 please follow me and look at Line 2,然后再confirm一下“are you at the line starting with 什么什么code”
2.主动展示,表现自己   (1)主动说出你写的test case是什么和你觉得complexity(time & space)是多少   (2)主动提及自己虽然有bug存在但是自己为了debug,在自己代码的架构和逻辑已经做了什么努力和尝试
3.微笑自信,真诚对话   (1)面试官不说话->微笑着引发conversation   (2)面试官凶->认为在压力测试,所以微笑着继续对话   (3)面试官问了自己不会的问题->微笑着说自己不会,但是很想询问这个问题的答案是什么因为自己很感兴趣,然后说,有知识盲区并不可怕,因为你学习能力很强,比如之前学xxx很难的知识点,能很快学会而且可以学以致用做project。   (4)面试官问了自己不确定的、有些遗忘的知识->微笑着说自己记不清了但是只记得blablabla,针对忘了的blabla你知道可以怎么搜到,再举一个
  例子,说自己之前有个东西也记不住了但是稍作查阅就如何如何的解决了什么困难,使得production可以继续



其他资料:






免费的学习资料:

刷题博主(肖哥声明:这里的刷题博主,我是一个都不认识,我与他们不存在任何利益关系,大家愿意用谁的免费资料就用谁的~别过来问我“最推荐谁”或者“谁最好”或者“谁最靠谱”,因为我只能说“不知道”hhhh): 花花酱 https://space.bilibili.com/9880352 https://www.youtube.com/user/xxfflower/featured basketwang https://space.bilibili.com/108657656 https://www.youtube.com/channel/UCE35PnPX7EZi8nHSegjMn6Q/featured BackToBack SWE https://www.youtube.com/channel/UCmJz2DV1a3yfgrR7GqRtUUA Grandyang https://www.cnblogs.com/grandyang/p/9262159.html windliang https://leetcode.wang/ happygirlzt https://www.youtube.com/channel/UCamg61pfZpRnTp5-L4XEM1Q Irfan Baqui https://www.youtube.com/c/BackToBackSWE Tushar Roy - Coding Made Simple https://www.youtube.com/user/tusharroy2525 Irfan Baqui https://www.youtube.com/c/IrfanBaqui Gaurav Sen https://www.youtube.com/c/GauravSensei huifeng guan https://www.youtube.com/user/wisdompeak lee215 https://www.youtube.com/channel/UCUBt1TDQTl1atYsscVoUzoQ 崔姐 https://www.youtube.com/channel/UCDVYMs-SYiJxhIU2T0e7gzw 12345 https://space.bilibili.com/97228279?from=search&seid=684245745967901335 tushar roy https://www.youtube.com/channel/UCZLJf_R2sWyUtXSKiKlyvAw wang https://leetcode.wang/


付费的学习资料(刷题班):

Educative.io:Grokking Dynamic Programming Patterns for Coding Interviews https://www.educative.io/courses/grokking-dynamic-programming-patterns-for-coding-interviews Educative:Data Structures for Coding Interviews in Java https://www.educative.io/courses/coderust-hacking-the-coding-interview Educative:Grokking the Coding Interview: Patterns for Coding Questions https://www.educative.io/courses/grokking-the-coding-interview

算法面试专题课(Java版) https://coding.imooc.com/class/478.html 288 RMB algomooc 算法慕课网训练营 https://www.algomooc.com/ 1699 RMB 马士兵教育(左神):算法和数据结构进阶课 https://www.mashibing.com/course/389 3980 RMB 马士兵教育(左神):算法数据结构体系学习班 https://www.mashibing.com/course/339 1980 RMB 马士兵教育(左神):大厂算法和数据结构刷题班 https://www.mashibing.com/course/465 3980 RMB 马士兵教育(左神):算法和数据结构新手班 https://www.mashibing.com/course/337 598 RMB 马士兵教育(左神):数据结构和算法 https://www.mashibing.com/course/1 598 RMB 马士兵教育(左神):算法与数据结构基础班 https://www.mashibing.com/course/398 1980 RMB acwing:算法基础课 https://www.acwing.com/activity/content/11/ 200 RMB acwing:算法提高课 https://www.acwing.com/activity/content/16/ 600 RMB acwing:算法进阶课 https://www.acwing.com/activity/content/32/ 1000 RMB acwing:leetcode究极班 https://www.acwing.com/activity/content/31/ 399 RMB acwing:算法笔试面试辅导课 https://www.acwing.com/activity/content/23/ 299 RMB 极客时间:算法训练营 https://u.geekbang.org/subject/algorithm3rd 3999 RMB

2.OOD
是采用抽象、继承、模块化、暴露有限的接口等手段,来实现现实生活的场景在程序中的抽象映射。比如常见面试题是:如何设计电梯、如何设计停车场、如何设计自动售货机等。至于做题的基本流程,如下: 1. 沟通/理解需求 2. 细化需求 3. Object abstraction 4. Object relationship 5. Object behavior


3.系统设计
是通过定义系统的体系结构、模块、接口和数据以满足特定系统要求的设计过程。知识点涉及Cache、Queue、Asynchronized、Load Balancer、Reverse Proxy、Parallelization、Replication、CAP Theorem(Consistency、Availability、Partitioning)、SOAP、RESTful APIs、MVC、Log、Databases、Distributed Systems、CDN等。常见面试题有:如何设计Key-Value存储引擎、如何设计Facebook Messenger、如何设计URL Shortener服务、如何设计Uber等。至于做题的基本原则,如下:
 
  1.沟通/理解需求,确定requirement, specification, constrains等
2.计算需要的machine数目,以及确定用什么做存储(Storage)、如何做通信(communication)、CAP原则 (CAP Theorem)如何实践等 3.展示high-level的system design以及细节的component design等 4.让系统的Scalability变高,拥有fault tolerance,kill掉bottleneck,以及避免single point of failure等


系统设计的84个资料:https://www.xiaogeedu.com/h-nd-339.html



系统设计课:
youtube和github上所有的系统设计资料(中文搜系统设计,和英文搜 system design)

4.简历拷问
是针对简历上呈现出的经历的技术细节进行深入了解的面试,英文是resume deep dive。简历上写的东西一定要确保自己都是会的,否则,如果简历里写的东西回答不上来,那这就算自家后院起火,会非常破坏自己在面试官心中的印象与形象。由于每个人的方向不同、简历经历也不同,所以这里只提供复习简历的问题框架,用这个思维框架去确保自己简历的每一个经历自己都不会被问倒。

针对project要准备一些问答
  1. Tell me about this project
  § Describe this project in general from a high-level perspective in about 3 sentences. (I design/design/ develop/ implement/ 
  complete/ build/ complete/ establish/...)
  § Describe the basic modules/aspects/structures of the project with 1-2 sentence for each.
  § Describe the functions/features of the project (this project could help to do /provide sth/enable sth to do sth, etc.) with 1-2 
  sentence for each.
  2. What did you achieve and what tools/frameworks/api did you use?   § How to implement the basic modules/aspects/structures of the project, from start to end.4-5 sentences (at least)
  § How to implement the functions/features, in details. 4-5 sentences (at least)
  3. What is the biggest challenge you had during this project?      § The problems/ challenges/ bottlenecks you may face when implementing the basic modules/aspects/structures of project, and
     how you conquer/resolve/address them. (2-3 options, 5 sentences of each option at least)
     § The technical key steps/milestones of project. 2-3 sentences of each at least.
  4. What have you learned in this project?
     § What skills/understandings/feeling do the student acquire after completing this project, especially after addressing problems/ 
     challenges/ bottlenecks. 3-4 sentences at least.
     § What kind of bigger problems/ challenges/ bottlenecks will the students be able to address? 4-5 sentences at least.
  5. What can be improved upon your current implementation, and how?      § The future tasks to be accomplished for this project. 3-4 sentences at least.
     § The parts/modules of the project that could be improved/enhanced/upgraded. 3-4sentences at least.
针对单点技术要准备:   1. 如果你做的事是,用A实现的X,那你需要思考      § A的原理是什么,应用场景是什么?优缺点是什么?      § X是什么?宏观来说想做一个X出来,需要怎么做呢?都包括哪几块呢?A的相似技术B能不能做X,A和B有什么区别?B还能做什么?      § A除了能做X,还能做什么?(比如Y)那怎么做呢?
  2. 如果你做的事是,用A、B实现的X,那你需要思考
     § 按照上面的去进行A、B、X的延展准备
     § A和B到底是怎么配合/连起来/互相补充的?
5.行为面试
是描述其过去某个工作或者生活经历的具体情况来了解求职者的性格、三观、思维方式、做事方法的面试。我们需要像准备托福口语题那样,用STAR原则,提前构思好常见的行为面试题的答案。当然,特定公司可能有一些特定的原则需要看(比如Amazon的Leadership Principles)。比如常见面试题是:
  1. Teamwork      § Talk about a time when you had to work closely with someone whose personality was very different from yours.
     § Give me an example of a time you faced a conflict while working on a team. How did you handle that?
  2. Client-facing Skills
     § Describe a time when you had to interact with a difficult client. What was the situation, and how did you handle it?
     § When you’re working with a large number of customers, it’s tricky to deliver excellent service to them all. How do you go about
     prioritizing your customers’ needs?
   3. Ability to Adapt
     § Tell me about a time you were under a lot of pressure. What was going on, and how did you get through it?      § Tell me about a time you failed or made a mistake. How did you deal with the situation?       4. Time Management Skills
     § Describe a long-term project that you managed. How did you keep everything moving along in a timely manner?
     § Sometimes it’s just not possible to get everything on your to-do list done. Tell me about a time your responsibilities got a little 
     overwhelming. What did you do?    5. Communication Skills       § Give me an example of a time when you had to explain something fairly complex to a frustrated client. How did you handle this 
delicate situation?
     § Describe a time when you were the resident technical expert. What did you do to make sure everyone was able to understand you?
    6. Motivation and Values
      § Describe a time when you saw some problem and took the initiative to correct it rather than waiting for someone else to do it.       § Tell me about a time when you worked under close supervision or extremely loose supervision. How did you handle that?


Behavioral Questions的29个资料:https://www.xiaogeedu.com/h-nd-342.html
6.CS基础知识
编程语言知识点、计算机网络、数据库、操作系统、软件工程、思维智力题。比如常见面试题是: 一、Operating Systems    1. What happens when we turn on the computer?    2. How do you know which direction a memory stack grows in?    3. How will you find or incriminate a thread that is causing heap corruption within a process among different threads.    4. In Linux, What exact error is thrown when access violations happen?
   5. What is the average disk access time?
   6. How would I implement the 'ls' command in Unix?
   7. What is DMA(Direct memory access)?
   8. 线程和进程的区别    9. 什么是补码 反码?
二、Computer Networks    1. Sliding Window Protocol    2. Internet Control Message Protocol (ICMP)    3. What’s difference between http:// and https://    4. Why does DNS use UDP and not TCP?    5. Name at least 10 different networking protocols    6. Difference between TCP and UDP    7. What happens when we type www.google.com in the browser?
三、Database    1. 数据库有几种join,都是干什么的    2. table和view的区别    3. SQL Two tables each have one column with a field called 'ID'write SQL to extract online the ID's in table one that are not in table two
   4. Consider the table below: table A ( id integer primary key, name varchar(20), age integer ) Write a query to return the list of unique 
   names from table A
四、Software Development    1. When should version control be used    2. What data structure would you use for a browser's BACK & FORWARD ability    3. What is the software development cycle? 五、programming basics    1. Java里int最大值?
   2. What's wrong with the following code : <template type T > T accumulate( vector<T> in) { T total = in[0]; for (int i =0; i < in.length() ; i++) 
   { total = total + in[i]; } return T }    3. Given the following struct how much memory is required to store it in a 32-bit and 64-bit system? struct A { char t; char *t; }    4. What happens when a constructor fails. And then what happens when a distructor fails.    5. How does a garbage collection system work? How will you prevent an object from being garbage collected?
   15. Write a wrapper fun for 32-byte aligned mem allocation    16. interface 和abstract class区别    17. array和arraylist区别    18. c++ template和java generic有什么区别?    19. java是parameter是pass by什么的
六、智力题、思维题    1. How many balls can fit in a car    2. You have a rectangular shape pie with some rectangular piece taken out. How would you cut it on two equivalent pieces by making a 
   single knife cut?    3. What's the angle between the hands of a clock if the time is 3:15.
   4. How many balls can a sedan car fit ? How many ice-creams are sold in the US?    5. How many gas stations are there in California?
   6. There are 4 people going through a bridge. One takes 5-min, one takes 1-min, one takes 2-min, and one takes 10-min. And only two 
   people can go through once. Question: what is the shortest time that 4 people cross the bridge?    7. Given two buckets of 4 and 7 liters.. how can you get 1,2,3,4,5,6,7 liters.    8. 2的多少次幂大于10w? 七、应用题
   1. How many JVM instances does a tomcat server have?How would it handle multiple applications with different versions of same api (for 
   instance log4j)?    2. What sort would you use if you had a large data set on disk and a small amount of ram to work with?    3. Design an email sender that can send 100,000,000 emails.You have 5 machines how could you do it efficiently.    4. To diagnose why bandwidth was bad (hypothetically of course) between sites.
5. How would you find the most searched for phrase in Google, assuming that you could use 10000 computers in parallel? 6. How you can know from which website your user is coming?

更多SDE常考知识点,请从这里下载:https://www.xiaogeedu.com/cn/view.jsp?fileID=ABUIABBPGAAgzvmzlgYo-qj2zAM


我们先看一下DS面试的考题都包括哪些,以及这些考题是否可以讲课、做模拟面试、以及押题:
然后我们再看下这9块面试题的资料:
1.Data Engineering
2.统计/概率/AB Testing
3.Machine Learning/Deep Learning
4.可视化
Seaborn、Matplotlib、Tableau、JavaScript
5.Product
6.Business Case
7.SQL, Python
8.行为面试
是描述其过去某个工作或者生活经历的具体情况来了解求职者的性格、三观、思维方式、做事方法的面试。我们需要像准备托福口语题那样,用STAR原则,提前构思好常见的行为面试题的答案。当然,特定公司可能有一些特定的原则需要看(比如Amazon的Leadership Principles)。比如常见面试题是:    1. Teamwork      § Talk about a time when you had to work closely with someone whose personality was very different from yours.      § Give me an example of a time you faced a conflict while working on a team. How did you handle that?
   2. Client-facing Skills      § Describe a time when you had to interact with a difficult client. What was the situation, and how did you handle it?      § When you’re working with a large number of customers, it’s tricky to deliver excellent service to them all. How do you go about 
     prioritizing your customers’ needs?
    3. Ability to Adapt
     § Tell me about a time you were under a lot of pressure. What was going on, and how did you get through it?      § Tell me about a time you failed or made a mistake. How did you deal with the situation?       4. Time Management Skills
     § Describe a long-term project that you managed. How did you keep everything moving along in a timely manner?
       § Sometimes it’s just not possible to get everything on your to-do list done. Tell me about a time your responsibilities got a little 
     overwhelming. What did you do?    5. Communication Skills       § Give me an example of a time when you had to explain something fairly complex to a frustrated client. How did you handle this 
delicate situation?
     § Describe a time when you were the resident technical expert. What did you do to make sure everyone was able to understand you?
    6. Motivation and Values
      § Describe a time when you saw some problem and took the initiative to correct it rather than waiting for someone else to do it.       § Tell me about a time when you worked under close supervision or extremely loose supervision. How did you handle that?
9.简历拷问
是针对简历上呈现出的经历的技术细节进行深入了解的面试,英文是resume deep dive。简历上写的东西一定要确保自己都是会的,否则,如果简历里写的东西回答不上来,那这就算自家后院起火,会非常破坏自己在面试官心中的印象与形象。由于每个人的方向不同、简历经历也不同,所以这里只提供复习简历的问题框架,用这个思维框架去确保自己简历的每一个经历自己都不会被问倒。

针对project要准备一些问答
  1. Tell me about this project
  § Describe this project in general from a high-level perspective in about 3 sentences. (I design/design/ develop/ implement/ 
  complete/ build/ complete/ establish/...)
  § Describe the basic modules/aspects/structures of the project with 1-2 sentence for each.
  § Describe the functions/features of the project (this project could help to do /provide sth/enable sth to do sth, etc.) with 1-2 
  sentence for each.
  2. What did you achieve and what tools/frameworks/api did you use?   § How to implement the basic modules/aspects/structures of the project, from start to end.4-5 sentences (at least)
  § How to implement the functions/features, in details. 4-5 sentences (at least)
  3. What is the biggest challenge you had during this project?      § The problems/ challenges/ bottlenecks you may face when implementing the basic modules/aspects/structures of project, and
     how you conquer/resolve/address them. (2-3 options, 5 sentences of each option at least)
     § The technical key steps/milestones of project. 2-3 sentences of each at least.
  4. What have you learned in this project?
     § What skills/understandings/feeling do the student acquire after completing this project, especially after addressing problems/ 
     challenges/ bottlenecks. 3-4 sentences at least.
     § What kind of bigger problems/ challenges/ bottlenecks will the students be able to address? 4-5 sentences at least.
  5. What can be improved upon your current implementation, and how?      § The future tasks to be accomplished for this project. 3-4 sentences at least.
     § The parts/modules of the project that could be improved/enhanced/upgraded. 3-4sentences at least.
针对单点技术要准备:   1. 如果你做的事是,用A实现的X,那你需要思考      § A的原理是什么,应用场景是什么?优缺点是什么?      § X是什么?宏观来说想做一个X出来,需要怎么做呢?都包括哪几块呢?A的相似技术B能不能做X,A和B有什么区别?B还能做什么?      § A除了能做X,还能做什么?(比如Y)那怎么做呢?
  2. 如果你做的事是,用A、B实现的X,那你需要思考
     § 按照上面的去进行A、B、X的延展准备
     § A和B到底是怎么配合/连起来/互相补充的?