CPSC 327 Intermediate Programming Spring 2025

CPSC 327 Interview Information

Along with exams, the interviews assess what you, individually, have mastered. The programming assignments focus on practical aspects of implementing data structures and algorithms, including efficiency considerations, and the design problem addresses selecting and designing efficient implementations.

This semester there will be a single interview covering the four programming assignments (Graph ADT, Dijkstra's Algorithm, Ski-O, and Time-O) as well as the design problem.

Interview Sign Up

Note that, like exams, the project interview is required. You must attend an interview! Check your email for the signup link, and put the time you sign up for on your calendar so that you remember to attend! Please sign up as soon as possible for the best selection of times.

If you find that you can't make the time that you have signed up for, either reschedule yourself or let me know as soon as possible so that timeslot can be available to others. If you have an unavoidable conflict with all of the available timeslots, see me as soon as possible to discuss options. Otherwise the same policies apply as for exams: last minute scheduling/rescheduling will not be accommodated for something known about in advance and if there is a last-minute emergency that prevents you from attending the interview as scheduled, you must be in touch as soon as possible about arranging a makeup time.

Important requirement: You will need to have your code for the programming assignments available in Eclipse. Please bring a laptop set up so that you can either access your projects in Eclipse directly on the computer or that you can use to connect to the Linux VDI to access your project there. If you don't have a laptop or are unable to bring one to the meeting, please let me know in advance so that alternative arrangements can be made.

About the Interview

For the programming assignments, the interview will be about your understanding of your code, the specific data structures and algorithms concepts in the assignments, and more general implementation concepts as reflected in the assignments and your code.

Specific data structures and algorithms concepts covered by the programming assignments include the adjacency list and adjacency matrix implementations of a graph, Dijkstra's algorithm (including determining the actual shortest path and not just its cost), and backtracking algorithms (including pruning and branch-and-bound). You may be asked to do things like explain these concepts, explain or walk through your code, explain the purpose of a section of code, or explain why a particular pruning strategy that you've implemented for time-o is safe.

More general implementation concepts covered by the programming assignments include specific object-oriented/Java strategies for reusable implementation of ADTs and algorithms, choosing appropriate ADTs and efficient implementations of those ADTs for particular applications, writing efficient code (including both big-Oh and a consideration of constant factors), and determining the efficiency of code. You may be asked to do things like explain the structure and organization of the Graph ADT implementation (both the provided code and your own), explain specific design and implementation choices made, explain the running time of a particular section of code, consider the impact of a different design or implementation choice on efficiency, and identify and/or discuss places where places where the efficiency of your code could be improved.

For the design problem, you will be asked to design an implementation for an ADT supporting certain operations. This might involve selecting appropriate implementations for Java Collections classes and/or building something from scratch utilizing arrays or linked structures. This is about the process of design — mastery can be demonstrated without necessarily achieving a final correct answer. You should be able demonstrate that you have a basic toolbox of building blocks, an awareness of the various considerations and tradeoffs, and the knowledge to pull these things together to build a solution.

You may use your notes and assignments, the textbook, and class materials posted on the schedule page (readings, slides) for the design problem. Make sure that you bring them in a form you can access — a laptop for online material and/or hardcopies for other things. If you are unable to bring a laptop and want to access online material, please let me know in advance so arrangements can be made.

Preparation

For the programming assignments, the interview is about your code and your understanding of the concepts of the assignment. There's not material to study as you might for an exam, but it's a good idea to brush up on your code and to review the assignment handouts to refresh your memory, especially for the earlier assignments. Also make sure that you've made significant progress on all of the assignments — turn time-o in on time and be making progress on the ski-o resubmit if your handin was incomplete. If you haven't handed in an assignment, you may be asked about what you would do so you should still be familiar with the assignment and have thought about it.

For the design problem, you should be familiar with the standard implementations of the ADTs discussed in class, the implementations available in the Java Collections Framework, and the building blocks (arrays, linked structures, etc) for building your own. While you may use the class materials as outlined above, it is strongly recommended that you make a summary sheet for quick reference.