Programming-Languages-Q&A
The following is a list of questions (and answers) that should help as a refresher about topics related to programming languages in general; and to compilation, code execution, programming language internals, run-time program management, in particular.
- What is the difference between machine language and assembly language?
- What is generally considered the first high-level programming language?
- In what way are high-level languages an improvement on assembly language?
- Under what circumstances does it still make sense to program in assembler?
- What makes a programming language successful?
- Why are there so many programming languages?
- What distinguishes declarative languages from imperative languages?
- Name three languages in each of the following categories: von Neumann, functional, object-orianted; Name two logic languages, and two concurrent languages.
- Explain the distinction between interpretation and compilation (advantages and disadvantages)
- Is Java compiled or interpreted (or both)? How do you know?
- What is the difference between a compiler and a preprocessor?
- What is P-code?
- What is bootstrapping?
- What is a just-in-time compiler?
- Name two languages in which a program can write pieces of itself "on the fly"
- Describe three unconventional compilers - compilers whose job is not to prepare a high-level program for execution on a microprocessor
- List six kinds of tools that commonly support the work of a compiler within a larger programming environment
- Explain how an IDE is different than a collection of command-line tools
- List the principal phases of compilation; describe the work performed by each
- Describe the form in which a program is passed from the scanner to the parser; from parser to semantic analyzer; from semantic analyzer to the intermediate code generator
- What distinguishes the front-end of a compiler from the back-end?
- What is the difference between a phase and a pass of compilation? Under what circumstances does it make sense for a compiler to have multiple passes?
- What is the purpose of a compiler's symbol table?
- What is the difference between static and dynamic semantics?
- On modern machines do assembly language programmers still tend to write better code than a good compiler can? Why or why not?
- What is binding time?
- What are the advantages/disadvantages of early binding vs. late binding?
- What determines whether an object is allocated statically, on the stack, or dynamically on the heap?
- What is a stack pointer?
- What is a frame pointer?
- What is a calling sequence?
- What are internal and external fragmentation?
- What is garbage collection?
- What is a dangling reference?
- What is the difference between lifetime and visibility of a name-to-object binding?
- What is meant by "scope" of a name-to-object binding?
- What is the difference between a declaration and a definition (and why is it important)?
- What are forward references?
- What is the purpose of a scope resolution operator?
- What is the "closest nested scope rule"?
- What is a referencing environment?
- What is the difference between static and dynamic scoping?
Online sorting of incoming streams of data
The other day I came across an interesting problem. The idea goes something like this:
There are a number of input streams that produce data, in order (each stream produces data with a timestamp; and the data in each stream are always reported in order). The task is to design an efficient algorithm to aggregate the values from all streams, and record, or display, them in the correct order.
One possible real-life scenario where this might be required would be a system of sensors recording data points and submitting them to a centralized server for processing. Each sensor would be recording the data points regularly but when transmitting the information, the timestamps of the events from the different sources will not be ordered in any way.
What to ask when you're interviewing for a software developer job?
When a friend of mine recently changed her job she was really excited. She had two weeks of time off between the jobs and was really looking forward to moving on from the crappy old company and into the shiny new work environment with increased compensation and a more interesting job description. Then reality hit and after a few days at the new gig she was really disappointed. It turned out that the increased compensation barely accounted for a lesser benefits plan, and the cooler job description said nothing about the policies of the new work environment. She could have avoided most of the trouble by asking some of the following questions upfront, during her interview.
Breadth-First Search on Graphs
Searching On Graphs
Many times, when given a graph, one might have to find whether a specific vertex is reachable from another. Or, to explore all vertices that are reachable from a start vertex (possible with an additional constraint such as limiting the maximum distance to a certain value). These are all search problems on a graph, and techniques for searching graphs lie at the heart of the field of graph algorithms. Many algorithms on graphs start out by searching their input graph to obtain structural information about the graph.
Searching a graph means systematically following the edges of the graph so as to visit the vertices of the graph.
What is Breadth-First Search?
Breadth-First Search (BFS) is one of the most basic algorithms for searching a graph and constitutes the building-block of many important graph algorithms. As stated above, Breadth-First Search is a method for finding all vertices reachable from a given start vertex, s.
Renaming an SVN(Subversion) Repository
What is SVN?
If you don't know what SVN is and you're reading this page, you probably got here by mistake. That's OK! However, you will probably not benefit much from this tutorial
If you decided to stick around, SVN is document versioning software commonly used by software developers as a repository for source code. Like CVS, GIT and Miscrosoft Source Safe SVN allows multiple users to work on the same file and it keeps track of changes to the files.
If you want to learn more about Subversion visit: subversion.tigris.org

