Oral exams questions
1. Languages, Abstract Machines and Execution models
2. Runtime systems
3. Software components
4. Polymorphism
5. Functional Programming
6. Haskell
7. Functional programming in Java 8
9. Scripting Languages and Python
TO ORGANIZE
  - Given a bean, how can we tell what is its public API?
 
  - Question about complexity of some haskell function. What are the problems between arrays and generics in Java? What happens with generic at runtime/after compilation?
 
  - Is Python more OO or more functional, according to your opinion?
 
  - Explain the concept (with written example) of covariance and contravariance in a language with universal polymorphism and explain in what cases their use is safe
 
  - Explain inversion of control and dependecy injection
 
  - What is lazy evalutaion in haskell and explain the spirit of IO Monads
 
Java
  - What are streams in java?
 
  - Example of lambdas in a context different from streams
 
  - What are functional interfaces?
 
  - How the java compiler manges lambdas?
 
  - Differences between component, packages and classes
 
  - Talk about the lifecycle of a sw component
 
  - How can we interact with java beans?
 
  - How can Netbeans (or another builder tool) provides “live interaction” with a bean?
 
  - What kind of properties a bean can have?
 
  - Memory management
 
  - How are lambda expressions implemented?
 
  - Talk about streams
 
Haskell
  - What is “Functor” in haskell?
 
  - What relationships there are between functor and maybe type class?
 
  - Lazyness in haskell
 
Python
  - What are python decorator?
 
  - How can we write functions with a variable number of arguments
 
  - What is GIL?
 
  - Talk about decorators and higher order functions in general
 
  - Namespaces and scopes
 
  - What does the 
@staticmethod decorator do? 
Other
  - Describe the different kind of parameter passing strategies
 
  - What is memoization?
 
  - Differences between 
reduce in functional programming and collect in the Java Stream API 
  - Give an example of list comprehension and write a function using a functional language that does the same thing, using combinators such as 
filter, foldr, map, ecc…