This is an old revision of the document!
Table of Contents
Study Questions - Lucy Dip Creation
1. Copy the source of the questions and paste into Notepad++.
2. Remove the tag bit at the bottom.
3. In regular expression mode, replace
^====+.+====$
with nothing.
4. In extended mode, replace
/* --== Answer Question separator ==-- */
with
<html>\n </td>\n </tr>\n <tr>\n <td width="50%">\n</html>\n
5. In extended mode, replace
/* --== Question Answer separator ==-- */
with
\n<html>\n </td>\n <td width="50%">\n</html>
6. Replace the first html element with
<html> <table border="1" width="100%"> <tr> <td width="50%"> </html>
7. Add this to end
<html> </td> </tr> </html>
8. Select all and copy to the clipboard.
9. Goto http://tallguyracing.com/wiki/doku.php?id=playground:playground and edit.
10. Paste from the clipboard and save it.
11. Select it (including the RSS XML Feed etc buttons).
12. Open a new document in OpenOffice and paste the contents into it.
13. Set the Zoom to 73% (so that there are two pages per screen).
14. Delete all the crap at the top.
15. Load styles → Wiki Export 2, Text + Pages + Overwrite.
16. Right click table → Table… → Text Flow tab → Untick Allow row to break…
17. For each page,
17.1. Put the cursor in the last row of the page.
17.2. Click the Insert Row button lots.
17.3. Copy and paste the all the cells on the first page to the second. Note that this will overwrite the cells, so if there are not some blanks leftover, undo and go back to 17.2.
17.4. Delete the blank cells.
18. Modify the paragraph style 'Table Contents'. Change the Font colour to black.
19. Highlight the right columns of odd pages and the left columns of the even pages (inside ones if two pages are displayed at once), change the background colour to black. Also, look for numbered bullet lists in the right column of the even pages and reset the numbering.
20. Select everything and paste into the master StudyQuestions file.
Questions To Be Lucky Dipped
Lesson 1: Navigating the File System
C2L1Q1: How do you enumerate the drives in a system?
Answer: Call the DriveInfo.GetDrives method.
C2L1Q2: How do you enumerate the files in a particular directory?
Answer:
- Create a new DirectoryInfo object, specifying the directory in the constructor.
- Call the GetFiles method on the DirectoryInfo object, which returns a collection of FileInfo objects.
C2L1Q3: How would you determine the size of a particular file in the file system?
Answer:
- Create a new FileInfo object, specifying the path to the file in the constructor.
- Examine the FileInfo's Length property.
C2L1Q4: How do you copy a file?
Answer:
- Create a new FileInfo object, specifying the path to the source file in the constructor.
- Call the FileInfo's CopyTo method, specifying the path to the destination file.
C2L1Q5: What are the high level steps required to monitor a directory for changes?
Answer:
- Create a FileSystemWatcher object.
- Set the Path property.
- Register for the event that you are interested in.
- Set the EnableRaisingEvents property to true.
C2L1Q6: How do you create a DriveInfo object for a specific drive?
Answer: Create a new DriveInfo object, specifying the drive letter in the constructor.
C11L1Q5: What must an assembly have before its trust can be increased?
Answer: A strong name.
C10L2Q1: How can you programmatically signal a break to the debugger?
Answer: Call the Debugger.Break method.
C9L2Q3: Other than overriding methods and responding to events, what else needs to be done to create a custom Installer class?
Answer: Add the RunInstallerAttribute to the custom class and set the runInstaller parameter to true.
C11L2Q6: CAS declarations are only significant in what type of assemblies?
Answer: Partially trusted assemblies.
C7L1Q9: How do you prevent new threads from getting the execution context?
Answer: Call the ExecutionContext.SurpressFlow before the new thread is created and call the ExecutionContext.RestoreFlow afterwards.
C11L3Q9: What are the three security actions that are applicable to assembles and what are their equivalent security actions that are applicable to classes and methods?
Answer:
- RequestRefuse (assembly) is equivalent to Deny (class and methods).
- RequestOptional (assembly) is equivalent to PermitOnly (class and methods).
- RequestMinimum (assembly) is equivalent to Demand (class and methods).
C10L2Q5: What does the DebuggerHidden attribute do?
Follow up question: How is it different from the DebuggerStepThrough attribute?
Answer: It causes the debugger to step through the code for the class, method or property it decorates, and causes the debugger to ignore any breakpoints in the code.
Follow up answer: The DebuggerStepThrough attribute will not cause debugger to ignore any breakpoints in the code.
C10L2Q6: What does the DebuggerStepThrough attribute do?
Follow up question: How is it different from the DebuggerHidden attribute?
Answer: It causes the debugger to step through the code for the class, method or property it decorates, but the debugger will still break at any breakpoints in the code.
Follow up answer: The DebuggerHidden attribute will cause debugger to ignore any breakpoints in the code.
C10L2Q7: How do you prevent the debugger from breaking inside a class, method or property, even if there is a breakpoint?
Answer: Add a DebuggerHidden attribute to the class, method or property.
C10L2Q8: How do you prevent the debugger from breaking inside a class, method or property, but still stop on any breakpoints?
Answer: Add a DebuggerStepThrough attribute to the class, method or property.
C10L2Q9: How do you add a DebuggerHidden or DebuggerStepThrough attribute to a property?
Answer: Decorate either or both of the accessor methods with the attribute.
Lesson 3: Working with Dictionaries
C4L3Q1: When iterating over a Hashtable, what order are entries returned in, by default?
Answer: The order of the hash values.
C4L3Q2: What are the five non-generic, non-specialised dictionary collections, what is each used for and what is the generic equivalent?
Answer:
- Hashtable, used for simple basic dictionaries, Dictionary<>.
- SortedList, used for dictionaries that are sorted by key, SortedList<> and SortedDictionary<>.
- ListDictionary, used for small dictionaries, Dictionary<>.
- HybridDictionary, used for dictionaries of unknown or varying size, Dictionary<>.
- OrderedDictionary, used where direct control of the order is required, Dictionary<>.
C4L3Q3: What type of object does a non-generic dictionary collection contain?
Answer: DictionaryEntry
C4L4Q6: What are the five specialised collections and their generic equivalent?
Answer:
- BitArray, no generic equivalent.
- BitVector32, no generic equivalent.
- StringCollection, equivalent to List<String>.
- StringDictionary, equivalent to Dictionary<String>.
- NameValueCollection, equivalent to Dictionary<>.
C4L5Q3: What are the three non-specialised, non-directory, non-generic collections and their generic equivalent?
Answer:
- ArrayList, equivalent to List<>.
- Queue, equivalent to Queue<>.
- Stack, equivalent to Stack<>.
ITQ4: What are Robert Martin's three laws of Test Driven Development?
Answer:
- You are not allowed to write a line of production code until you have written a failing unit test.
- You are not allowed to write more of the unit test than is sufficient to fail.
- You are not allowed to write more production code than is sufficient to pass the test.
Extension
C4XQ1: What does the compiler do when an iterator is implemented?
Answer: Automatically generates the Current, MoveNext and Dispose methods of the IEnumerable interface.
C4XQ2: How do you implement an iterator?
Answer:
- Implement the IEnumerable interface.
- Create a method called GetEnumerator which returns an IEnumerator.
- Use the
yield return
statement to return each element. - If required, use the
yield break
to end the iteration.
C1XQ1: What is the primary purpose of a delegate?
Answer: To facilitate event handling.
PragC2Q14: What are three techniques to maintain orthogonality?
Answer:
- Keep code decoupled.
- Avoid global data.
- Avoid similar functions.
PragC2Q15: How is orthogonality related to unit testing?
Answer:
- If the unit test does not require much set up, the unit has a good amount of orthogonality.
- If the unit test has to bring in a big chunk of the system to set up the test, the unit has little orthogonality.
C4XQ3: What are two ways that the default iterator functionality can be extended?
Answer:
- Named iterators can be created which allows a class to have multiple iteration techniques.
- Parameterised iterators can be created which allows clients control over some or all of the iteration behaviour.
C1L3Q3: If an event needs to pass custom data, what class should be derived from and what is the naming convention?
Answer: EventArgs should be derived from and the naming convention is {EventName}EventArgs.
C1L3Q4: What is the naming convention for a delegate for an event?
Answer: {EventName}Handler
C1L3Q5: What two things should be done to allow a class to raise an event?
Answer:
- A public event needs to be declared.
- A protected On{EventName} method should be created.
C7XQ1: What is the difference between the way the CLR deals with unhandled exceptions in the .NET Framwork 1.1 verses 2.0?
Answer: In 1.0, a backstop is provided for unhandled exceptions that occur on the following types of thread:
- A thread from the thread pool.
- A thread created with the Thread.Start method.
- A finaliser thread.
In 2.0, these exceptions are left to proceed naturally.
C7XQ2: The .NET Framework 2.0 provides a backstop for what three types of unhandled exceptions?
Answer:
- A ThreadAbortException thrown because of an Abort call.
- An AppDomainUnloadException thrown because the application domain is being unloaded.
- An internal exception thrown by the CLR or host process.
ITQ5: What is Conway's Law?
Answer: “Organisations which design systems are constrained to produce designs which are copies of the communication structures of these organisations.” - Melvin Conway, 1968.