My interview was scheduled on Feb 29th at VSSC . They asked us to report by 8:00 in the morning. I reached by 7.30 AM. At around 10.30 AM, document verification took place following which they provided a sequence number for the interview. It was a long wait of a whole day. At last, they called me for interview at around 7:00 PM. The interview session itself was pretty short, roughly 10 minutes or so.

Panel was composed of around 7 to 8 interviewers. They asked what I was doing in Samsung (I have two years  of work experience). I talked about the projects I was working on. However, they didn’t ask me any questions on those projects, as those were related to Tizen and network simulation.

Panel: What all are the subjects you are interested in?

Me: Anything apart from Software Engineering (As it was not in GATE syllabus, so I didn’t prepare 😛 )  (Everybody was laughing). I was told that they were there to ask questions from that subject only.

The following are the questions asked in interview. I’m not providing answers, since most of those cover the basics.

Panel:

  1. Considering that Software Engineering didn’t even exist in 1970, why is it so popular now-a-days?
  2. What is difference between error and bug?
  3. What is cache, direct mapped cache and set associative cache?
  4. What does object file contain?
  5. Is collision possible inside router, hub and repeater?
  6. Explain exponential back off algorithm.
  7. What is RTT in Ethernet?
  8. Which direction will the cross product of two vectors be in?
  9. In set theory, they asked basic definition of union, intersection etc.
  10. How will you run if one program refers variables in other file [like static, global] in Linux?

On final year project:

My final year project was optical character recognition of Telugu characters.

  1. What is difference between node and neuron?
  2. How weights are updated in neural networks?
  3. Is it necessary to have summation function?

Written test and interview are so easy that if you prepare well for GATE, you can nail it down without much pain. In written examination, more than 95% questions were just copy-pasted verbatim from previous years’ GATE question papers. During the written test, I reported a few errors to the invigilator and was told that I’d get marks for those questions if I just attempt it. What more annoying was, the invigilators corrected answer options to almost four to six questions while the examination was in progress. Also, there were a bunch of questions with incorrect answer keys, even for questions directly copied from previous years’ GATE question papers.

For the curious ones, I stood 6th in the written examination by scoring 149 while the topper got 153. In the interview, though I am not sure what they could judge in a brief interaction of ten minutes, I scored 75.38% while my overall place being 16th in final the merit list. In the whole process, I felt bad about not receiving any prior information on dates of crucial milestones, e.g. result of written examination, interview, issuance of appointment letter etc. Kind of I seem to loss my energy in the waiting period itself. Worse is, even if you call them, most of the time they provide false information or gives out some “canned” reply. Not only for me, but the story is the same for many candidates as you can read here. It didn’t appear to me that they were recruiting for as responsible and esteemed a designation as “Scientist” is. ISRO is not a private organisation. It can be left without paying any bond amount, unlike many private organizations. It’s the prestige of our country. I hope it will improve soon.

Please read this post before reading this to know about the interview process and it was written before the interview results were announced, so can find no bias in it. In this post, I will be answering some questions based on the previous statistics that I have collected.

  1. Your Interview will be scheduled at morning 8.00 AM but they can call you any time before 9.00 PM. I was  called for the interview at around 7.10 PM and there were three more candidates left after me in Thiruvananthapuram. A male candidate was interviewed at around 9.00 PM in Delhi (another interview center). Don’t loose your energy/get tired by simply sitting. Often, they will provide refreshment, also you can interact with the other colleagues if you are that kind of a person. So, book your return ticket for the next day to be on the safer side. This is not applicable to the lady candidates as they are interviewed first.
  2. Will I be not selected if I am interviewed very late, as interviewers might already have selected the required candidates? Will they be less interested to interview me? Absolutely not. I was interviewed fourth from the last, still I got selected while having a good rank at the same time. Moreover, the next person sitting after me also ranked good and got selected. The interviewers are experienced enough to know our feeling when candidates are interviewed so late. Be cool/positive and don’t worry on this.
  3. What are the subjects to be prepared? Will they ask from our final year project? Every questions will be from your favorite subjects if you are lucky and if not, they will ask some questions beyond your comfort zone. There will be no HR questions. They will question your project if you passed out recently, say 2-3 years back. Its good to prepare the project, at least the technique or technology you have used in that.
  4. I got All-India Rank (AIR) < 23 in written test and the number of positions advertised are 23. Will I be selected for sure?. No. This year (2016) the top 5 rankers in the written test were not selected in the interview. Do prepare for the interview. See the attachment at the end for the proof of the same. There is an equal chance to get selected even for the last shortlisted candidate, so don’t skip the interview.
  5. I have no experience/passed out last year with no job. Is my probability of getting selected looks bleak?. No. Though I didn’t mention my experience/job, I was selected. I had no questions regarding the year I have a career gap in. You might be asked questions when you are unemployed more than a year. Stay prepared for that. I didn’t mention my experience/job because I don’t have any notable skill/experience acquired from my company because of various reasons.
  6. I am a girl candidate and selected for the interview. Will I be selected for the post as ISRO have mentioned that “Government strives to have a workforce which reflects gender balance and women candidates are encouraged to apply”?. Obviously women candidates slightly have an edge over their counterpart in the process. However, to be noted that it’s a rare event that you will be selected if you don’t perform well in the interview. Prepare for the worst and hope for the best. For the male candidates, don’t ever think of this because this policies are not in our hand to be changed. Do your best and hope for the rest.
  7. Is scientist ‘SC’ not a permanent post in ISRO, because in their job advertisement they mention that: “The posts are temporary, but likely to continue“? As quoted by Dipanjan (worked in ISRO), it’s a permanent post with probation for initial few months. That’s why it’s written like that. Saying that, I have never seen/heard someone getting terminated during the probation. The notification is always phrased like that, using legal jargon. It will definitely be permanent barring special cases, e.g. one commits a crime etc.
  8. And regarding the documents, they will verify the documents (mark sheets, certificates…) before attending the interview. Be sure to bring all the original documents and attested copies that they mention in the call letter. They are strict/cautious in this process, for instance they even summed up the marks of my 10th, 12th standard mark sheets while the total marks was already written in the mark sheet by the issuing board :). Double check while filling up the online application form as they cross verify against it prior to the interview.

Below, I have attached all the documents/results for this year(all branches):

ISRO-ANNUAL RECRUITMENT OF SCIENTISTS,ENGINEERS `SC’(2015-16)

The interview was scheduled to be conducted at 8.00 AM (28th Feb 2016), I reached VSSC ATF centre at around 7.30 AM. After the document verification, they allotted numbers for each candidate base on the following priority: (i) Girls (ii) Those who booked their tickets on the same day (actually on the interview letter they mentioned that in worst case, it needs two days for the interview). As I booked the ticket for the next day evening, they called me around 7.10 PM.

There were seven peoples sitting in a semi-circle. They didn’t ask me about myself or what I do. Firstly, they questioned me about my project work. As soon as I started explaining, they interrupted me (seemed that they were either not interested or because of time constraint since there were three more peoples waiting to be interviewed). Next,  I was asked what my favorite subject are. I mentioned (i) Operating Systems (ii) Data structures (iii) Computer Networks in order. The interviewer who was sitting in the middle asked others to start off with Data Structure.

Here is a list of questions I was asked and those which I remember now:

Interviewer – I:

  • What is binary heap? Types? Properties? [Answered]
  • Application of the Heap [Answered]
  • Abstract data type and its use [Answered]
  • Stacks, Grow-able stack and queue and their use [Answered]
  • Dynamic memory allocation [Answered]

Interviewer – II:

  • Questions regarding routing algorithm [Answered]
  • A question on FILE’s in C: The temporary buffer of file [Answered as “RAM”, I don’t know it is right or not]
  • WAN protocol [Not answered]

Interviewer – III:

  • Memory leak in Java [I didn’t know about this in Java, offered an explanation w.r.t. C instead]
  • C pre-processor [Answered]
  • Phases of compiler [Answered]
  • JAR file in Java. [I admitted that I am not familiar with Java. What all I could remember is using JAR file in my Nokia S40 series. They didn’t seem to be very  impressed]

Important points:

  • For the interview round, they didn’t expect an one word brief reply. There were some discussions happened for every answer like Implementation ,application of it etc..They will help if you stuck but they wanted the answer from your mouth.
  • The questions were mostly based on the feedback. Meaning that, the next question will be based on your answer for current question. So think twice before you answer.
  • As you see from my interview questions that they can ask you from any computer science subject[not only on your favorite  subjects].Even I had in depth discussion on Compiler design which I don’t have in my B.Tech course ware.
  • For some of the interviewee’s the questions were from Mathematics notably from Geometry, Discrete Mathematics etc.
  • One candidate, who works in a PSU, was not allowed to attend interview because of not having NoC letter from his company.
  • The candidates who attended the interview were quite knowledgeable and experienced. Most of them passed out before 2011 or 2012. Probably, only two of them including me were 2015 pass-outs[w.r.t boys]. The companies they were working include Adobe, Samsung research, Adobe, GATE CSE tutors , Asst. Professors, IIsc and IIT M.Tech. students and from PSU’s.
  • Some of the candidate’s came there were attended interview before hand in ISRO[previous year’s].

To conclude, you should be  top of your game and need a bit of luck in terms of questions they start with.

Scenario: Interview for the promotion to “Scientist/ Engineer D”
=====================================================
Panel chairman: Shoots out the initiating question
Interviewee       : Oh shit! Couldn’t answer that one

Let me introduce the interviewee. It’s me; Soumen Kumar Das, a CS graduate. I joined ISRO in 2012. Luckily the fiasco in the opening question didn’t dictate the decision of Departmental Promotion Committee (DPC)! I got promoted with flying colors and currently continuing over there as a “Scientist/Engineer D”. That gives me a feel that I have some sort of authority to present my holistic experience of spending more than three years at ISRO; solely based on my personal views (and biases, may be :))

Working life…. Living work in ISRO” – the two phrases, though look similar, there is a thin line in between. Working life in ISRO very much depends on the division and the bosses you are working in and under. In a certain division, if the quantity of work is suitable for ten people, then the division tries to maintain a count of  more or less six to seven personnel. So, there is a lot of work to do. Unlike other government sectors jobs, of course, here you will be having more responsibilities and more ways to work at the same time. Nature of bosses does vary, too. A flexible one gives the nature of work as asked by you from the responsibility set. Some are very rigid or helpless to provide so. Some of them are very much unaware of the correct deadline to set and only thinks that providing less time builds up pressure to make the employees work more and more. Some are very cool and if knows that the particular colleague under him is sincere, then does not intervene. Not only bosses, but the peers are enthusiastic and passionate about research and development will never slow you down and keep updated. If all of the above mentioned points are suitable for you, then it can be easily understood that working life will be enjoyable allowing you to thrive your knowledge.

Living work in ISRO depends on the type of work you want vs. the type you get. The aerodynamicist, mechanical, electrical, chemical engineers mostly get interesting and challenging works. But for computer science guys the probability of getting interesting work is a rare event at Vikram Sarabhai Space Center (VSSC). Fortunately, I have got an interesting domain allocated where I’m working in high performance computing in the SAGA Supercomputer  division in ISRO. I’m playing with hardware, software and their interaction at a finer level. I’m living work here. But, inside any division there are lot of scopes where one can gain new vision, if worthy enough, then from organization one will receive all the required help. Living work has another view mostly people like me. I think many among you will also agree that one can live work life in a very productive manner if his/her home town is within a range of 300 kms. such that, at least, he/she can come back home around weekend. This is possible for very few lucky people for whom their stay at ISRO is very enjoyable.

An engineer and an ISRO engineer is different as far as social and personal lives are concerned. This job requires ones 24×7 involvement at times. You are expected to be there irrespective of time or situation in case of any emergency. Otherwise, the job life is somewhat “cool“. Certainly, ISRO is a brand name which is recognized all over the world. It will specifically be of utmost use if someone works in a valuable project. That way, the brand value of ISRO can be “traded” in research projects. As a Scientist/Engineer, one receives respect and gratitude from others that may enlighten some people. But, the main thing is life will be joyful and happening. Don’t expect any huge compensation or any extra reward as at the end of the day it’s a Government of India job. Salary is comparable to an ordinary central government employee with a pay band 3. Therefore, come and join if you like the prospect above. For recruitment, please check out ISRO website.

Let us get the objective of our mission clear before we spring into action. I plan to reiterate a little bit of rudimentary information on the operations of compiler and linker and their mutual interaction. Following that, we will ask ourselves a couple of questions to practice thinking out-of-the-box and present the obvious answers. Since, we are ‘Truly Tech’, we will perform two quick experiments to justify our hypothesis; surprisingly fail to prove it; take a closer look, i.e. ‘inspect’ what is going on under the hood; redo the experiments with a subtle change and arrive at the expected result. The whole exercise is to show that the test environment of the trivial-most experiment can be quite tricky to set-up.

The compiler (e.g. gcc) compiles a source code (e.g. C file) to an object file (e.g. ELF REL (Relocatable)). Any function/method that is ‘not’ internal or not supplied by the source code is left ‘unresolved’ by the compiler. It’s the linker’s (e.g. ld) responsibility to turn that object file into a fully-functional binary executable (e.g. ELF EXEC (Executable)) resolving all the references to external method calls by linking to either static (e.g. .a archive) or dynamic libraries (.so). Those libraries are either system provided (GNU libc or glibc) or third-party ones (uClibc, libELF). As a practical example, when ld links an object file having a reference to  printf()  method, most likely it will dynamically link to glibc (default linking mode for ld is dynamic) unless a static linking (-static) is requested. When the operating system begins executing a program, the application loader transparently loads the dynamic libraries the application requires and maps those into application’s address space. All the methods a particular library offers/exports are thus made available to the program at run-time. How does the application loader know where to load a library from? It looks in a set of standard locations following a predetermined search order.

This is the platform I will be using throughout.

Question# 1: Let’s say, we have access to the source code of a C program that makes use of pow() method from libm. Is it possible to supply an alternate implementation of the same using a shared library so that our version of pow()overrides the system-provided one? In other words, if we write our own pow(), pack it in a shared library and furnish it to the compiler/linker from the command line during compilation/linking, how are these tools going to behave? Too loosely speaking, our task is to perform a code-injection while we have access to the source code.

As we can see that there are a couple of implementations of the same method (linker treats method names as ‘symbols’) to choose from; of course, the linker will either bring it to the notice of the user or take a decision itself. Can there be any third possibility? No, apparently. Either play ‘dumb and ask’ or be ‘smart and silent’ by falling-back to some default behavior. Shortly it will turn out that our favorite linker ld quietly swallows the fact. Let’s get our hands dirty with experiment# 1.

Here’s the driver program that makes pow() call.

Our implementation of a lazy pow(). It’s declaration mimics the ‘real’ one. But, no matter whatever the arguments are, it always return a b-o-r-i-n-g 10.000000.

Let’s compile (1) the main program, the shared library (2, 3), dynamically link (4) those together and execute (5) the program. To be on the safer side, we will use -O0 to disable all gcc optimizations and -Wall to display all compiler warnings, if any.

What did just take place? ld is silent about duplicate implementations of pow()  method, one appearing in libm, the system library and the other one being present in libpow, the shared library we created. Moreover, ld is ignoring our version of the method while the system-provided one is taking precedence over. Had it been the other way round, the result would be 10.000000 instead of 1024.000000 (= 2^10).

Question# 2: Let’s say, we don’t have access to the source code of a C program that makes use of pow() method from libm linked dynamically. The only artifact in our hand is the compiled executable. Is it possible to supply an alternate implementation of the same using a shared library so that our version of pow()overrides the system-provided one? In other words, if we write our own pow(), pack it in a shared library and ‘somehow’ preload the library before even the execution begins, how is Linux application loader going to behave? Loosely speaking, our task is to perform a code-injection while we don’t have access to the source code.

Linux provides us with a nifty hack, the LD_PRELOAD environment variable, to preload a dynamic library (.so) before even the application loader attempts to resolve the dynamic references . It serves as a handy ‘backdoor’ to intercept dynamically linked method calls. Let’s hijack the pow call.

What did take place now? We observe that LD_PRELOAD does not work with the  pow() call. How come? Our fresh knowledge about LD_PRELOAD says exactly the opposite. Is there anything special about  libm? If the trick works for srand() as shown example, what’s so special about pow()? We are confused now! To probe into the issue, the first step we take is to dissect the object file.

Holy shit! Where is the pow symbol? Wasn’t it supposed to be there? Of course, it was. The type marker “U” beside printf suggests that the symbol is undefined. Quite reasonably, it seems that the compiler has resolved the reference to the pow() method statically from the math library. But…wait. Resolving reference isn’t really the responsibility of the compiler, but the linker. At least, we can expect the pow symbol to be retained as an unresolved one in the object code, if not in the final executable. gcc never fails to surprise us.

To be sure, let’s peek into the relocation section of the object file to find any entry corresponding to pow call. As expected, such a call is missing.

As the last resort, we will disassemble the executable itself to peek into it. The most common tool for that is objdump. In fact,  objdump -M intel -d pow will generate the disassembly of all the executable sections in the binary in Intel assembly format. However, it will include what we need and a l…o…t more. We are interested in the disassembly of main function only. Here’s a nifty shortcut for you.

Can you see something suspicious at  0x0000000000400535 <+8>? It may not be immediately apparent unless you are familiar with IEEE 754 floating point representation, the template to represent a single or double precision floating point number inside computer’s memory. Even if you don’t know what it is, an online converter should tell you that  0x4090000000000000 in IEEE 754 format is equivalent to the floating point number  1024.000000. The instruction  movabs rax,0x4090000000000000 moves the constant to the register rax.

We have been lied so far. A quick googling will bring out numerous post suggesting the use of gcc -O0 to stop all compiler optimizations. GNAT user guide confuses us even more.

‘-O0’

          No optimization (the default); generates unoptimized code but has the fastest compilation time.

          Note that many other compilers do fairly extensive optimization even if  ‘no optimization’ is specified. With gcc, it is very unusual to use -O0 for production if execution time is of any concern, since -O0 really does mean no optimization at all. This difference between gcc and other compilers should be kept in mind when doing performance comparisons.

Why on earth does it comment on gcc’s behavior? gcc, in its present form and shape, falls exactly in the category of “many other compilers” which does extensive optimizations even in the absence of any optimization flags or at gcc -O0. The clue to the discrepancy above hides in these couple of benign statements from gcc doc’s.

Most optimizations are only enabled if an -O level is set on the command line. Otherwise they are disabled, even if individual optimization flags are specified.

Depending on the target and how GCC was configured, a slightly different set of optimizations may be enabled at each -O level than those listed here. You can invoke GCC with ‘-Q –help=optimizers’ to find out the exact set of optimizations that are enabled at each level. See Overall Options, for examples.

Look carefully. The salient point is, “Most optimizations are only enabled…”, most but not all. To rephrase, there are optimizations those are enabled even at gcc -O0. To see what all are the optimization enabled at gcc -O0, we run the following:

Voila! A plethora of optimizers are enabled by default. Let’s try disabling all of them.

For the sake of brevity, though I am not explicitly showing here, take my word that the upshot of repeating of the entire procedure outlined above with the optimizers turned off remains the same. gcc inevitably performs constant folding,  no matter what your optimization level/options are. There seems no way to alter this behavior.

Constant folding requires compiler to know operands apriori. What if we change one of the constant arguments to pow a variable to be supplied by the user?

Recompile the driver program as well as the library.

Unlike the earlier run, now the linker really searches for libpow.so during linking. We are happy to see that the output is as expected. Though both -lpow and -lm switches are passed to the linker, the linker is prioritizing the user supplied library over the system one. Is it so? Are we sure? Let’s swap the order of the libraries and see what happens.

Math library takes over here. To conclude, the behavior of ld is to scan the libraries supplied on the command line from left to right with decreasing priorities.

To check whether our LD_PRELOAD solution works:

Lastly, we may not be able to prevent gcc from folding constants, but it provides -fno-builtin- switch as a means to disable built-in function(s) during compilation. We can exploit this feature to make the original versions of our program work without introducing an user variable.

In either of the case above, both nm and readelf outputs corroborates our expection, too.