Statistically, 20% of my java coding questions involve threading, my halo and other candidates’ weakness. 0% in c++ except SCB.
Remember the 最强大脑 competition? I’m a specialist in mental arithmetics, so the more mental arithmetic games, the better my overall score.
My strengths – quick but more than superficial learning of (in random order):
- finmath, financial jargon,
- Comp Science practical topics:
- OO fundamentals
- algo, data structures,
- basic tuning of DB + others
- language fundamentals (more respected in the java, c++, c#, SQL than python communities)
- versatile in many important languages
- relative familiarity with scripting, unix, SQL, but not IDE, version control etc
- relatively quick whiteboard (not compiler) coding
This strength turned out to be extremely valuable on Wall St consulting market.
My key weakness identified in recent jobs (not counting the IV defeats):
- learning local system
- large existing codebase – AutoReo, GS
- superfast GTD
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: biggest reason — I feel a disproportionate number of my c++ interviews come from high end teams such as HFT shops. They go slightly lower-level than my java interviews. Overall, java is a slightly less specialist, less elitist, more commodity skill. Imagine if I get lower-level java interviews from the likes of Millennium, HSBC … I feel most (like 80%) of the java jobs in finance are “regular”; for Singapore c++, the percentage is below 50%. See the post on the c++ job offers I received.
- my c++ interviews have slightly more IDE coding tests than my java interviews
- If I avoid the high-end jobs, then my batting average will probably increase significantly.
- –A #2: [QQ] 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. If I could avoid these topics, then my c++ low-level tech IV performance is closer to Java performance. A lot of the tough C++ IV questions are about
- linux, kernel tuning, system calls, OS performance monitoring, …
- [C] *alloc family of functions, memory leak detectors
- shared lib, linker, compiler,
- [C] other command line developer tools … mostly designed for the “system programmer”.
- [C] sockets, IPC
- –A: [QQ] significantly simpler in terms of QQ — java as a language, when we ignore the add-on packages.
- –A #4: cod`IV java^c++: threading is one reason my java coding IV is stronger than c++
- –A: [QQ] 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.
- eg: in java container of T is always implicitly container of well-managed pointer to T
- –A: [QQ] halos — halos in my “java show”: threading, collections, GC tuning … which make up for my java weaknesses elsewhere. 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;
- design patterns
- shared memory
- 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 [[effC++]] topics
Self-rating is subjective, against one’s personal yardsticks. My own yard stick doesn’t cover those numerous add-on packages (swing, spring, hibernate, JDBC, xml, web services, jms, gemfire, junit, jmock, cglib, design patterns …) but does include essential core jdk packages such as —
- – anything to do with java concurrency,
- – anything to do with java data structures,
- –  Garbage collection
- memory profiling (jvm tools)
- GC log analysis
- –  java.lang.instrument, mostly for memory
- – networking/socket, file/stream I/O
- [!2017] generics, esp. type erasure
- – RMI,
- – reflection, dynamic proxy, AOP
- – serialization,
- – class loaders
- – JNI, esp. related to memory
- – JMX, jconsole,
- – difference between different JDK vendors,
- – real time java
- – reading bytecode
(The highlighted areas are some of my obvious weaknesses.) Now I feel my self-rating should be 8/10, but i still feel no one in my circle knows really more about the areas outlined above. I guess that’s because we don’t need to. Many of these low-level implementation details are needed only for extreme latency, where c++ has a traditional advantage.
Another purpose of this list — answer to this
Q: what kind of java (theoretical) knowledge would give you the halos in a Wall St interview?
timeframe: age 36-38
reference group: not locals, but overseas J developers, mostly from India…
Context: prod support on a trading system; When CV is on job sites, when assessed in an interview…
–perceived weakness? 3pr?
understanding complex legacy code