C++ ICE market data – some of the more difficult questions

Q: you said you write code on Windows, but production platform is linux, so how do you test your code? Q: difference between a C struct and a C++ struct?
Q: have you used memory leak detectors?
Q: How do you link c and c++ code? dlopen()?
Q: have you used memory leak detectors?
Q: scope resolution operator?
Q: default constructor?
Q: what other things are synthesized?
%%A: dtor, copier, op= but c++11 add some move operators
A: indeed, c++11 would synthesize 1) move ctor and 2) move-assignment operator under strict conditions. See http://stackoverflow.com/questions/3734247/what-are-all-the-member-functions-created-by-compiler-for-a-class-does-that-hap

Q: given template<typename T> void f(T a, T b), can f(3, 0.8) compile?
Q: how do you use gdb to view a core file?

Q: write a sqrt(int) function without using the math library.  Estimate to 0.01 precision.

Q: UDP vs TCP?
A: virtual circuit. Single remote socket. In contrast UDP can send to multiple receivers efficiently – broadcast or multicast. A: transmission control, with data loss prevention

Q: what’s wrong with multiple inheritance? How do you deal with it?
%%A: diamond problem. I don’t use virtual inheritance. I use MI when base class is an interface without any field.

Q1: how do you create a thread in c++?
A: std::thread is RAII so the constructor starts the thread, and the dtor must run after joining or detaching.

Q1b: Have you used posix_thread?
A: it’s a c library, so no constructor magic. Probably some pthread_something() function. Correct! pthread_create()

KPI operational skills:under-valued #eg IDE…

I know Barclays (or any big bank) pays a VP salary to experienced developers. Would they pay the same for someone very familiar with IDE, CVS, automated build/release/test, script automation, back-up … lots of tools?

No because the latter skill is a commodity “operational” skill compared to the “creational” skill of a product developer. In a way, developers are a revenue center. Developers need analysis, design, deep experience, domain knowledge…

I feel interviewers ask too much about algorithm/data structure, problem solving, financial domain knowledge, and not enough about those operational skills. I guess in 50% of dev team there’s no one specializing in those infrastructure stuff, so every developer must pick up this skill, which can really impact productivity and trouble-shooting.

I think instrumentation skills (see other posts) are closely related to this.

## X years C++experience without using virtual !

  • It’s possible to code C for years without using pointers (except string functions), or malloc
  • It’s possible to code C++ for years without using virtual, new/delete, STL, or even class.
  • It’s possible to code java/c# for years without any threading, or reflection
  • It’s possible to code perl for years without using interesting regex or hard/soft references.
  • It’s possible to code SQL for years without writing outer joins. I guess I wrote lots of mysql queries without any join.
  • It’s possible to code python for years without creating python classes.
  • eg quartz — the python experience didn’t make a strong python developer. The other tech knowledge gained has even lower market value.

zbs+nlg insight accumu due to X years@a job: !by default

Many interviewers assume the length of using something on a full time job indicates accumulation… Other interviewers test the depth of your insight.
You know you have insight, mileage, accumulation if/when ..
  • ..when  you know most of the important and relevant [1] terms in the lingo. Interviewers often go deeper about a new “construct”[2], and question its motivation/history and limitations.
    • ….if you know the __connections__ between the concepts. Without a mental map, there would be way too many unconnected lingo terms leading to info overload
    • ….if you know what new developments are only marginally important to your field, so you can focus on the really important
  •   ..if you can /separate the wheat from the chaff/滥竽充数/. I think often the real veterans would exchange a secret handshake and acknowledge each other very quickly. Eg: Dad (Tan Jiajian) knows his peers in the domain.
    • …. If you can’t quickly separate the wheat from the chaff, then probably you aren’t experienced enough.
  • ..when  you know you have grown much stronger than a junior person new to the field. How soon this happens is poorly correlated to # years
  • ..when your mental “book” has grown thin -> thick -> thin. Eg: math..
  • ..when you know you can master a “local” system quickly, thanks to the accumulation /under your belt/. Eg: Avichal Gupta…
As you can see, many of the indications/evidence of insight are related to evaluative discussions (including interviews). I’m not being narrow-minded and focus exclusively on job interviews. No. In any team,  very quickly person A would size up person B (and vice versa), and often have a rough number in his head about “how much B knows our shared domain”.
[1] it’s subjective but I feel 90% of what consider irrelevant is clearly irrelevant.
[2] this includes new choice, technique, best practice
German said one needs to be in a project for 6Y, but I disagree. I feel a wide range of non-trivial challenges is more important, and I feel we are unlikely to get that by staying in one project.
eg Perl — I used Perl for 3 to 5 years..
eg SQL — I used SQL for many years before GS, but my accumulation was solely in GS!
eg Threading — not much used. Mostly accumulation by reading…
eg option math –
eg C++ — see post on c++IV: knowledge more important than coding experience

java8 static methods ] interface

static methods in interface (SIM for short) is a minor feature of java8, fairly low-level and only interesting to java language students like me.

Two noteworthy points are raised in [[mastering lambdas]] P172 footnote (yes the footnote)

  1. A “traditional” static method (i.e. defined in a class) is inherited, but SIM is not inherited
  2. A “traditional” static method can be invoked using myObj.staticMeth1() but SIM can only be invoked using myInterface.staticMeth()

These two restrictions remove “loose” syntax around traditional static methods.

contract work Usually requires less struggle with existing codebase

contract work Usually requires less of a struggle with existing codebase. Look at

* 95 Green? all interfacing with existing system is via Ravi, so no struggle at all
* volfitter? the c# codebase was not so well established and not such a struggle. The FMD sheet was a struggle but … expectation was really low.
* reo? I was transferred to BAU projects but expectation was low. * nextgen circuit model bulider – some java code was already there before I joined so I had to understand it — a struggle

In general, high rate contract is usually funded by a development project. Not so much prod support, difficulty laser surgery on a overgrown legacy codebase which require lots of local system knowledge.

rookie coders vs old hands, my recent xp]fin IT

Broadly,
– Anyone (even a non-pianist) could teach piano to a kid, but perhaps not correctly;
– Anyone could teach swimming, but Qiu Yi has insight;
– I would guess any medical undergrad could treat patients, guided by a textbook – Management consultants — These guys go by case studies. Not experts in my industry. Why would I listen to them?
– Application design, low or high level, is an art. An inexperienced guy could go by textbooks, but actually, fine judgement needed at every turn.

In Stirt and Macquarie, how fast you get things done is not as important as getting things done right. Managers here are very particular about the details. I think they want things done right and stick to that long term. I can only guess they have seen hasty code that didn’t last, that required massive rework. Example
* the 2 earlier Error Memos coders
* Varun
* Some of the code in CAOS (account opening)

This is one reason they want older guys with deep experience and strategic insight.