Zero-in on the highest leverage points.
There’s not enough focus compared to my UChicago days…
• [BP, ECT] coding practice in cpp/vi
• algo practice, in py or cpp. Follow online question banks. • [QQ] review my c++ blog, and read my books
• quant? no real target until I start interviewing
• data analytics? Nothing specific to study
https://bintanvictor.wordpress.com/2017/04/02/c-and-java-iv-tend-to-beat-us-in-2-ways-high-end/ shows my self-rating in job interviews for c++ vs java. (For real projects, I think the gap between my c++ and java is slightly smaller.)
I did spend lots of time reading and blogging about c++, not less than java, so
Q: why the persistent gap in my QQ IV performance?
- –A #1: I feel a disproportionate number of my c++ interviews come from high end teams, They go slightly more low-level than my java interviews. Imagine if I get more high end java interviews from the likes of Millennium, HSBC … I feel most (like 80%) of the java jobs in finance are “regular”; for c++, it’s more like 50%.
- –A #3: significantly simpler — java as a language, when we ignore the add-on packages.
- –A #2: a lot of the tough C++ IV questions are about
- [C] sockets,
- [C] *alloc function, memory leak detectors
- [C] IPC
- [C] other command line developer tools … mostly designed for the “system programmer”.
- Some of these interviewers basically treat c++ as a wrapper over C. In contrast, Java insulates you in a pure-java world on the Virtual Machine, so you don’t need to deal with the messy “borders” as c# and c++ developers do.
- –A: STL containers — is much more complicated than java containers in job interviews, even if we ignore iterators, stl algorithms. I spent more time studying STL than java collections but always failed to impress interviewers.
- –A: halos — in my “java show” include threading, collections, GC tuning … which make up for my weaknesses. No such halo in my “c++ show” I guess some people have a halo in templates, memory mgmt, shared_ptr, threading…
- –A: unable to describe c++ projects.
- Suggestion: Start from this blog and my books. Focus on a small subset of core topics in c++, /burn through/ the essential literature and develop a first halo —
- smart pointers (beyond shared_ptr)
- usage in big5
- usage in containers
- data structures in STL and boost, including c-str life-cycle management excluding the str* functions
- traditional big 3(dtor,op=, copier) but not rvr and move-semantic
- pbclone^pbref but not return-value-optimization
- vptr, slicing, dynamic_cast
- (Note this is all about QQ book knowledge, not coding skill!)
- suggestion: secondary focus topics —
- c++11 threading
- heap memory management;
- socket tweaking;
- interface classes, pure virtual;
- suggestion: continue to ignore some of the high complexity low leverage topics such as move semantics; iterators; const-correctedness; singleton; design patterns; operator overload … and many [[effectiveC++]] topics
- std::string (more useful than cStr)
- vector (more useful than array) sorted data structure (i.e. stl map), unordered_map
- Node class used in a linked graph
- dtor, copier, op=
- ref only as function I/O
- iterator – basic usage
- double pointer
- stack, queue
- pointer arithmetic
- local static
stl algo? Only Citadel array-shrink
no pointer to function
no (very, very seldom) threading in coding Q
adv: circular buffer
What specific topics to improve for c++ (not pure algo) coding IV? (X years experience doesn’t guarantee anything)
- · Write code to print alternative item reversely
- · Write ref-counted string
- · Write auto-ptr
What specific topics to improve for c++ QnA IV? (X years experience doesn’t guarantee anything)
So in any of these areas, x years spent using a language could leave you still total beginner!
I used to feel I have so much learning(absorption) capacity, but now I feel in my finite career I can’t really master and remember all the tough c++ topics.
Practical solution — Classify each difficult c++topic into one of
- QQ: high impact on QnA interview, probably the only type of high-leverage tough topic. Largely textbook knowledge. As such I’m basically confident I can learn all the basics on my own (perhaps slower than Venkat), provided I know the topics.
- including “coding questions” designed really for knowledge test, rather than algorithm thinking
- eg: HFT, Venkat…
- high impact on algo coding IV? No such topic. These coding IV are not about knowledge in tough topics!
- ZZ: high impact on GTD zbs — inevitably Low leverage during job hunt
- 00: no high impact on anything
Q: Is there a tough topic in both QQ and ZZ? I don’t know any.
I think 00 will be the biggest category:
-  template wizardry;
-  template specialization
-  MI;
-  operator overloading;
-  pthread
- [QQ] move semantics
- [QQ] boost common lib
- [QQ] optimization tricks. Remember MIAX and SCB IV by Dmitry
- [QQ] singleton implementation — not really tough
- [QQ] pimpl — not really tough
- [QQ] op-new/malloc (interacting with ctor)
- [QQ] memory layout
- [QQ] specific threading constructs
- [QQ] smart ptr details
- [QQ] ptr as a field
- [QQ] implement auto_ptr or ref-counting string
- [QQ] UDP — not really tough
- [QQ] select()
- [QQ] multicast
- [ZZ] IDE set-up
- [ZZ] compiler/linker/makefile details
- [ZZ] debuggers
- [ZZ] crash analysis, like segmentation fault
Looking at my blog posts, I did accumulate quite a lot of valuable knowledge, some of them useful to projects, most of them important to QnA interviews.
I would venture to say that even a 5Y c++ veteran may not know these very well. The 4 categories are defined in https://bintanvictor.wordpress.com/2017/04/02/c-and-java-iv-tend-to-beat-us-in-2-ways-high-end/:
- pseudo code algo? they would score LOWER than me
- QQ (mostly theoretical)? they have NO advantage over me.
- edit-compile-test type of short coding test? they would score higher than me
- BP i.e. knowledge gap revealed in coding tests is my weakest? they would score B.
Focus here is zbs not IV.
I told XR that a few coding interviews have brought my c++ zbs by half a point. I feel it’s still at 5. It’s feasible to bring it up to 6 —