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()
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.
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)
- A “traditional” static method (i.e. defined in a class) is inherited, but SIM is not inherited
- 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 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.
– 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
* Some of the code in CAOS (account opening)
This is one reason they want older guys with deep experience and strategic insight.
agile – …
coupling – less coupling between client and server, so server side changes are easier. I think SOAP requires client rebuild.
b2b – still dominated by SOAP
resource-oriented services – …
object – each URL logically represents an object, which you can Get (query), POST (create), PUT (update its content) or DELETE
Q: is REST simpler than traditional SOA or SOAP web services?
Q: the concept of “resource” — does it sometimes mean a database record?
The problem is clearly defined
[[EPI300]] 6.13 has a much shorter and more readable solution!
For a whitebox coder self-test, it’s tough to come up with real possible corner cases. It takes insight about the many systems that make up the real world. I would argue this type is the #1 most valuable regression tests.
If you see a big list of short tests, then some of them are trivial and simply take up space and waste developer time. So I’m a big fan of the elaborate testing frameworks.
Some blackbox tester once challenged a friend of mine to design test cases for a elevator. Presumably inputs from buttons on each level + in-lift buttons.
Hi Prof Lee,
Thanks for the lunch (including the advice part). I came up with some ideas about this brain teaser —
Q: which is bigger e^pi vs pi^e
One solution I can think of is, suppose e has a value close to 2 and pi is much larger.
Suppose e = 2 and pi = 10. Clearly e^pi wins.
Another way is, define 2 functions
f1(x) = 2.718281828^x and find the growth rate when x is slightly above e. This growth rate is e^x,
f2(x) = x^2.718281828 and find the growth rate when x is slightly above e. This grow rate is e/x * x^e, which is smaller, since x is slightly bigger than e.
Therefore, f1 grows faster than f2, over the range of (e , 3.15). Therefore e^pi wins.