|
It is a legit question, I'd finished my degree in 2016, it was a degree more focused in the job market, so I haven't had strong classes about CS fundamentals. I'm working as a backend engineer for about 6 years, currently I'm ok with my salary and have no plans about applying to FAANG companies. - I have some understanding about basic DS like Trees, Stacks, Queues and what are the benefits and drawbacks of using each one, but never worked with Graphs, and have no idea what is a Trie or a AVL tree, neither how to implement those DS. - I understand what's the idea of Greedy Algorithms, Divide and Conquer Algorithms... But I don't know which sorting algorithms are the best, how to implement then (just bubble sort :/). I'm also quite bad at Leetcode style challenges. Usually I expend my time studying about system design and not DS/Algo, my question is if I should invest some time learning those things, if it's really helpful in turning me a better developer or if it's really useful for those who are targeting interview in FAANG companies. |
Of course, if you don't want to work at companies that do leetcode style interviews, there is no point in going much further than knowing data structures well and knowing basic algorithms (probably learn a sort better than bubble sort though... merge sort is pretty easy). You should know about trees, but I really doubt if you are applying for a company with sane hiring practices they will ever ask you to implement auto balancing trees.
In my experience interviewing with non-leetcode style interviews, I did get a lot more language trivia. For example, for a position primarily using Java, they ask about polymorphism, final vs finally, stuff like that. On onsites the focus is a lot more on STAR, past experience, and designing things. I personally actually like the former style of interview :)