You are on page 1of 6

Sensor Front-End and Driving Functions

Pre-Interview Questionnaire
Please note: We are looking for a wide variety of engineers. There is no question that will eliminate you from an interview, so please
answer the following questions honestly. Furthermore, many questions are focused on simply understanding your personal preferences.

Section 1: Generic Qualifications and Career Orientation

(This section should take roughly 5 minutes)

1. How would you describe your career preferences?


a. I would prefer to do a majority of work in my specific field of study (Comp. Vision,
Machine Learning, Controls, etc…). If so… which discipline?
b. I simply enjoy problem solving, and would prefer a position that allows me the chance
to tackle a wide variety of problems.
c. I would prefer a position that includes both problem solving, as well as communicating
with internal and external engineers and project managers.

All three options are good, but I would go for a mix of option A and C, I’d like to deal with problem solving
in Machine Learning & Control and have communication with other teams in situ or even inside the
country or overseas.

2. Which statement best describes you:


a. I prefer to work on technical problems, typically on my own.
b. I prefer to work on technical problems, within a small team.
c. I prefer a more social work environment, and like to work with others regularly.
d. Not only do I prefer a social work environment, but I often find myself being a leader
within a team.

According to my experience, I would choose option B. Big teams can be decomposed easily to small teams
and dealing with a small team is more practice in order to share common or more specific objectives
rather than a lot of heterogeneous objectives, also communication is better achieved.

3. How many years of embedded coding experience do you have (Ex: Code that runs on a
microcontroller)?

Since 2005, I’ve dealed with embedded coding. I would rate myself as competent. Trough 2005 and 2008
I’ve programmed on CPLDs & FPGAs from Altera and Xilinx, respectively. Trough 2009 and 2014 I’ve
programmed on ATMega family microcontrollers and more recently, since 2013-2014 I’ve have dealed
with Arduino family devices.

4. Please tell us your experience in each of the following languages:


a. Embedded C
b. C++
c. Python/Matlab
d. Other (C#, R, Java, …)

A. As I mentioned in the previous question, I’ve dealed with embedding coding, and embedded C was the
right option to completed all those projects.

B. Since I was a student I’ve dealed with C family: C, C++, C#. And as a professional I’ve involved with all
these tree languages in many projects. Particularly, I used C++ as the main language in many courses of
Structured Programming.

C. I’ve have used Python since 2008, I chose it as the main language in a Data Structure course. I’ve have
developed several projects involving Python, mainly as scripts running in a client-server project to support
an web application, to monitor and clean a data base, to read data from sensors. Other project developed
in Python and OpenCV was a face recognition application, from a set of images of an specific person and
trough a training we obtain a file with all data related to the specific person, this file is used in live feed
from a camera in order to recognize the person.

I’ve have used MATLAB as main tool in several courses of Numerical Analysis in order to solve linear
equation systems, differential equations, polynomial interpolation, numerical integration and MonteCarlo
Method.

D. I’ve used R in Statistics courses, maybe in 2 courses. We have solved basic exercises as mean, mode,
median, graphics, normal distribution, linear regression.

I’ve used Java since 2004, mainly for web apps and regular java applications.

5. List the IDE’s that you have the most experience with, along with the length of time

Netbeans, since 2005

Eclipse, since 2009

Matlab and tools, since 2008

Visual Studio family suite, since 2003

PyCharm, since 2012

6. Please rate your knowledge on the following (0: None to 5: Expert):


a. General Statistical Concepts:
i. Conditional probability: 4
ii. Bayes’ theorem: 4
iii. Moments of random variables: 3
iv. Normal distribution: 4
v. Covariance of random variables: 3
vi. Independence of random variables: 2
vii. Maximum Likelihood Method: 1
b. Tracking Algorithms:
i. KF 3
ii. EKF 3
iii. UKF 3

c. Machine Learning, Regression, and Classification


i. Linear and Logistic Regression: 4
ii. Neural Networks: 4
iii. Convolutional NN: 3
iv. Tree-based models: 2
v. Kernal Methods (SVM): 1
vi. Naive Bayes: 1
vii. PCA: 1
viii. Markov Models: 3

d. Computer Vision Techniques


i. Feature Detection (Edge/Texture): 4
ii. Image Processing (Point operators, filters, transforms): 4
iii. Segmentation: 3

e. Data Science
i. Analysis or large data sets 4
ii. Automation 3
iii. Data Visualization Techniques 4

Section 2: Basic Coding Question (This section should take roughly 10 minutes):

7. Answer the following:


a. Please write a generic power function in C: int POW(unsigned int a, unsigned int b)

Ex: POW(4, 3) = 4 * 4 * 4 = 64

There are two solutions: using repetitive structures and using recursion. I’ve attached to this document 2
source files (pow1.c & pow2.c) solving this problem for each of these approaches. These solutions
consider 0, and positive values for exponent b.

8. Name at least two uses of the “static” variable identifier in C

1. To preserve a value between function calls.

2. To share a value between methods or functions.

3. To save memory, initializing only once a variable.

9. Write the generic MIN macro in C:

I have not worked particularly with macros in C, although I know the implementation, I prefer to create
own functions in the regular way.

In an attached source file (minmacro.c) I provided a code using a generic MIN macro.

10. What is the difference between a compiled language and an interpreted language?

The main difference is in the way which execution step is performed. For a compiled language in order to
achieve an execution of a program, the source file has to be converted in machine language with the help
of a compiler. In interpreted languages each line is converted, once at a time in executable pieces of a full
program. This makes interpreted languages slower compared with compiled languages.

11. In linear algebra, what does it mean for a matrix to be singular? Can you give an example?
In Math a reciprocal is a number B obtained from a number A, satisfying the operation A*B=1. Example
de reciprocal of 3 is 1/3. So 3 * 1/3 = 1. In Linear Algebra the same idea can be achieved using matrices, if
from a square matrix A we can obtain its reciprocal from, let’s say A’, and performing an product between
A and A’ we obtain an matrix featuring 1’s on the main diagonal, this matrix is called Identity Matrix.
Reciprocal in matrices are called Inverse of a Matrix or Nonsingular Matrix.

A singular matrix, therefore is matrix that has not an inverse of a matrix, this can be easily verified by
computed its determinant, if a determinant of a matrix is 0, is a singular matrix.

An example of a singular matrix:

A= [6 3; 4 2] we can verify that determinant is 0, by computing (6*2-(4*3))

In Numerical Analysis courses, we use the notion of singular matrices in order to solve linear equation
system, trough decomposition methods (factorizing matrices), in order to avoid division by 0. Not all linear
equation systems are suitable to be solved by a specific method.

Section 3: Coding Question

(This problem should take less than 30 minutes)

I’ve attached a source file (trapping.c) providing a solution to this problem.

As mentioned yesterday we need to traverse the entire array and find the highest bars on left and right
sides. Take the smaller of two bar heights. The difference between smaller bar height and height of current
item evaluated is the amount of water that can be trapped in this array item.
In trapping.c I implemented 2 functions: trapping and computing. In trapping function we traverse the
array from beginning to end and also checks 2 cases: when the left side is high or the right side is. As the
same comparation is needed to calculate the amount of water when right or left is chose, I implemented
computing function in order to simplify coding and using passing arguments by reference in order to
modify either left of right new bar height.