Taking a paper C++ test next week, and could use some pointers.

Started by
19 comments, last by hamokshaelzaki 9 years ago

HI everyone,

I applied at Ubisoft Sofia, and managed to impress them enough with my initial online coding test, that they're flying me down there for a 2 hour c++ and math paper test and an interview.

I have never taken any sort of test like this before, however, and I'm not exactly sure what the test is going to contain and how to prepare. I have found various c++ tests online, but none of them are game specific, so I'm not sure if they are representative of what I'm going to encounter.

Does anyone have any experience taking these sort of tests either at ubisoft or other game companies? If so what topics did it cover?

Also if anyone know of any more game specific c++ tests that you can take online, I would really appreciate a link.

Advertisement
First off: relax :-)


Second: don't try to cram for job tests. Unlike in school where cramming is a reasonable strategy, the purpose of a job test is to see what you know. If you know enough to do the job, you have nothing at all to worry about it. If you don't, you will walk away from the test with a much better idea of what you need to learn.


Third: tests at one company are going to be different than tests at any other. What gets covered thoroughly in one place may be unimportant for work at some other shop. This means two things. First, don't try to study for one company's test by taking some other test. Second, don't be tempted to try to study for a company's test by asking for people to leak the test to you. This is considered poor form.


Last but not least: it is very rare for an employer to penalize you for applying twice. So if you don't pass the test this time, almost every studio in the world will be happy to tell you to hone your skills for a while and apply again.


Good luck :-)

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

I agree that it's not a great idea to try to cram or study for job interview tests. I think it will just stress you out more, which will do far more damage to your performance in the test/interview than you could hope to recoup from the studying itself.

Programming languages like C++ are massive and the scope of potential things you could be asked on a test is so huge that you're unlikely to be able to study in such a short period of time enough of the language to raise your overall bar of knowledge significantly enough to matter. You could try to focus your studying on what you think might be asked, or what you think you need to work on personally, but you could just as well never see any questions on those topics and have wasted your time. Plus, this is assuming that their "C++ test," focuses exclusively on syntactic or lexical details of the languages alone, and not the broader domain of problem solving with C++ (which is actually far more likely).

The major risk with studying for something like this is a false demonstration of knowledge. Most of these tests are designed to query what you know and what/how you can reasona about problems with that knowledge. Cramming can tend to introduce a superficial level of knowledge, so you may be able to pass questions on the test but in the follow-up interview you may not be able to speak sufficiently well about your answers to prove that you really have this knowledge internalized. This can very easily lead to the interviewers wondering how you could bomb the interview so spectacularly while still passing the test, which could lead them to conclude that you may have crammed a bunch of superficial knowledge into your brain (or you cheated, or whatever; the point is most of the conclusions they could draw would be bad for you).

Saying you don't know something is not a weakness. It can, in fact, be a difficult-to-find strength in a candidate. Obviously you will have to know some minimum amount of stuff, but it's not wrong to not know something. A common interview tactic is to ask follow-up questions until you reach the end of the candidates knowledge about a topic, to see how deep their knowledge goes, for example.

Take Apoch's advance: relax.

I'm not really worried about problem solving with C++, which I think I'm relatively good at. I am however somewhat worried about the more details of the language as well as the specific behaviour of the compiler, as I usually figure those things out when it becomes relevant to the problem I'm trying to solve, or when it results in a bug.

For instance vtables is not something I've ever come across while using C++, so I have next to no knowledge about them.

If I were to ask you what the virtual keyword on function declarations does in C++, I would be expecting you to tell me something about dynamic dispatch (calling the function based on the runtime type of the instance).

Then I'd ask you how that was implemented. If you told me "vtables" I'd ask you what a vtable was, though not directly: I'd probably ask something like "okay, well, how? What's in this "vtable" thing? How can the compiler get from the pointer that the function is being invoked on to the appropriate vtable?"

You don't have to tell me what cl.exe or gcc does. I don't care; if I wanted to know that I'd go look at the source. You just have to tell me something that makes sense. Being able to regurgitate the precise wording of a textbook definition of the thing is often a red flag and will prompt more questioning to make sure you really know it, or can reason through it. In fact, you don't have to tell me anything about vtables at all (the C++ standard doesn't say anything about vtables and does not mandate that a vtable approach to dynamic dispatch be used; it's just a really optimal way to get the appropriate behavior and thus exceedingly common). If you describe an alternative technique for implementing dynamic dispatch that doesn't rely on a vtable, that works too. Then we can have an interesting conversation about the possible pros and cons of that approach.

Do you feel like you could explain how dynamic dispatch (usually) works?

I would be able to tell you how to use the virtual keyword and why polymorphism is useful, however I wouldn't be able to tell you much about how dynamic dispatch works under the hood.

This partly why im worried, as I feel like I have some gaps in my knowledge when it comes to these types of questions. My CS degree was more focused on the low level stuff, and my Games technology master was more focused on very high level stuff, if that makes sense.

I would be able to tell you what the applications of the virtual keyword and why polymorphism is useful, however I wouldn't be able to tell you much about how dynamic dispatch works under the hood.

Okay, but let's say you're at work writing the compiler for our fancy new scripting language in our game and you have to implement something like dynamic dispatch. What approach would you take?

I would be able to tell you what the applications of the virtual keyword and why polymorphism is useful, however I wouldn't be able to tell you much about how dynamic dispatch works under the hood.

Okay, but let's say you're at work writing the compiler for our fancy new scripting language in our game and you have to implement something like dynamic dispatch. What approach would you take?

Well, to be honest, I would look up what other people have done to solve this problem and try to adapt that to the current situation. I'm not sure that would be an acceptable answer at an interview though.

Taking a paper C++ test next week, and could use some pointers.


0x4A7EEAF8
0x19BEFA80
0x18C7AEE0

smile.png

Sean Middleditch – Game Systems Engineer – Join my team!

Well, to be honest, I would look up what other people have done to solve this problem and try to adapt that to the current situation. I'm not sure that would be an acceptable answer at an interview though

It's not unacceptable. But your internet's down today (or alternatively, nobody has solved this problem before). Now what?

0x4A7EEAF8
0x19BEFA80
0x18C7AEE0

Geez, update your hardware, dude.

This topic is closed to new replies.

Advertisement