Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
UMass Lowell Computer Science 91.460 Java and Distributed Computing Prof. Karen Daniels Fall, 2000 Lecture 23: Review Mon. 12/11 Course Grading Homework Exam 1 Exam 2 Exam 3 40% 15% (closed book) 20% (open book, notes ) 25% (open book, notes) Results are scaled if necessary. Final Exam: Logistics Thursday, 12/21 Olsen 410 8:00-10:00 a.m. Open book, open notes Closed computers, neighbors Cumulative Worth 25% of grade We’re trying to change this to OS 311. It looks like OS 311 is available. Text/Chapter Coverage Basic Java (Deitel): Chapters: Advanced Java (Deitel): Chapters: 1-10, 14, 17 11-13, 15, 20, 22-24 Jini (Core Jini): Chapters: 1, 2, 3, 5 & (attribute matching) Appendix A All questions refer to Java 2 unless otherwise specified. Format and Emphasis This exam will have a mixture of questions of the following types: 1) Multiple Choice 2) Short Answer 3) Debugging 4) Fill-in-the-blanks 5) Write a variation on code 6) Code from scratch Review: Part I Basic Java Sampling of Topics Applets Applications Data Types Operators Expressions Interfaces Control Structures Recursion Packages Object-Oriented Classes (and inner) Methods Polymorphism Files & Streams Chaining Object serialization Polymorphism is for Methods A A::foo() B::foo() B::foo() B a.x=1 b.x=2 ((A)b).x=1 B x=2 foo() A x=1 foo() Thanks Jenn for this example Typical Multiple Choice Question Which statement is true about a non-static inner class? A) It must implement an interface. B) It is accessible from any other class. An object of a non-static inner class is able to C) It canaccess only beprivate instantiated in of thethe enclosing class. variables outer class in it is defined. D) It must be final, ifwhich it is declared in a method scope. E) It can access private instance variables in the enclosing object. From Java 2 Certification Typical Multiple Choice Question Which of the following are true? A) If a package statement is included in a source code file, it must appear as the first non-blank* line. Package must appear as the first line B) If statements an import statement is included in “non-blank” a source code of a source if they at non-blank* all. If a public class or file, it code mustfile appear asappear the first line. interface is declared in a source file, then the source code file C) If a main( ) method is included in a source code file, must takeappear the name of the class orline. interface. it must as the firstpublic non-blank* D) If a public interface is declared in a source code file, it must have the same name as the source code file. * a comment line is considered here as a blank line From Java 2 Certification Typical Short Answer Question What is the output of the following program? public class Question{ public static void main(String args[]) { double d[] = new double[2]; int i[] = new int[3]; 0.0nullify The default value of a double is 0.0. Object o[] = new Object[1]; The default value of an int is 0. Their sum is 0.0. (This arithmetic System.out.print(d[0] + the i[2]); expression is evaluated and then resulting value is cast to a string so it is a valid argument to the print() method. In contrast, if we changed the System.out.println(o[0] + "ify"); expression to the following, it would cease to be an arithmetic expression } and would become a string expression: System.out.print(“ “ + d[0] + i[2]). This would produce a different result.) } The default value of an Object is null. Adding “ify” gives “nullify” Typical Short Answer Question What is the output of the following program? public class Question{ public static void main(String args[]) { String s1 = “ab”; String s2 = “abcd”; String s3 = “cd”; String s4 = s1 + s3; s1 = s4; System.out.print(“s1 ”+((s1 == s2)? “==” : “!=”)+“ s2”); } } s1 != s2 From Javato2different Certification Because s1 and s2 refer objects, s1 != s2 is true. Typical Short Answer Question What is the value of 9+8%7+6 16 Order of precedence requires that the expression be evaluated as: (9 + (8 % 7) + 6) From Java 2 Certification Typical Debugging Question public int sum(int i[], Integer start, Integer end){ // Note: can correct code while still using the Integer wrapper class. if(start ==Youend) returnthei[start.intValue()]; // We removed it here only for clarity. If you don’t remove it, you need to else// change start == end accordingly. { public int sum(int i[], int start, int end) { Integer mid = new Integer((start.intValue() + end.intValue())/2); if(start == end) return i[start]; elsemid1 return=sum(i, (start+end)/2) + sum(i, ((start+end)/2) + 1, end);+1); Integer new start, Integer((start.intValue() + end.intValue())/2 } return sum(i, start, mid) + sum(i, mid1, end); } } This code is supposed to recursively sum the values of the elements of integer array i. For each recursive call, the starting and ending indices of the part of the array to be summed should be in start and end, respectively. What is wrong with the code? Typical Fill-in-the-Blanks (page 1) public BufferedReader openInputFile(String public void closeInputFile(BufferedReader fileName) input, String fileName) { { BufferedReader input = null; try { try { input.close(); InputStreamReader inStream = new } InputStreamReader(new FileInputStream(fileName)); catch (IOException e) { input = new BufferedReader(inStream); System.out.println("Cannot close "+ fileName); } } catch (IOException e) { } System.out.println("Cannot open "+ fileName); } return input; } This code opens and closes a file whose name is given by the String fileName. Typical Fill-in-the-Blanks (page 2) public void readFile(String fileName) { BufferedReader inStream = openInputFile(fileName); boolean lineNotEmpty = true; String newString = null; public String readFileLine(BufferedReader inStream) { String newString = null; try{ newString = inStream.readLine(); while (lineNotEmpty){ } newString = readFileLine(inStream); catch (IOException e) { if (newString == null || newString.length()==0) System.out.println("Cannot read lineNotEmpty = false; file line in readFileLine"); else } System.out.println("Just read:"+ newString); return newString; } } closeInputFile(inStream, fileName); } Fill in the blanks so that readFile( ) reads and prints out all the lines in the file. Review: Part II Advanced Java Sampling of Topics GUI components (awt, Swing) JPanel JLabel JButton JList JFrame JScrollPane Container Threads time synchronization creation, scheduling mutual exclusion states & transitions synchronized methods & blocks Layout policy Exception handling Event handling RMI: remote interface proxy Event listeners One interface, multiple 2D graphics implementations Advanced data structures ArrayList, iterator Review Questions Typical multiple choice questions exception handling mutual exclusion RMI event handling Typical short answer questions event handling threads graphics Typical write-a-variation questions ArrayList Typical fill-in-the-blanks question Typical code-from-scratch question Typical Multiple Choice Question Which of the following must be true of the object thrown by a throw statement? A) It must be assignable to the Throwable type. B) It must be assignable to the Error type. C) It must be assignable to the Exception type. D) It must be assignable to the String type. The object thrown by a throw statement must be assignable to the Throwable type. This includes the Error and Exception types. From Java 2 Certification Typical Multiple Choice Question Which of the following are true? A) Only threads have locks. B) Classes have locks. C) Primitive types have locks. D) Only Runnable objects have locks. Classes have locks, but primitive types do not. From Java 2 Certification Typical Multiple Choice Question Which of the following are used by Java RMI? A) stubs B) skeletons C) ORBs D) IIOP RMI makes use of stubs and skeletons. ORBs and IIOP are used within CORBA. [Note: Java 2 does not require skeletons] Based on Java 2 Certification Typical Multiple Choice Question What is the preferred way to handle an object’s events in Java 2? A) Override the object’s handleEvent() method. B) Add one or more event listeners to handle the events. C) Have the object override its processEvent() methods. D) Have the object override its dispatchEvent() methods. The event-delegation model uses event listeners to handle events. From Java 2 Certification Typical Short Answer Question Supposed you want to have an object eh handle the TextEvent of a TextArea object t. How should you add eh as the event handler for it? t.addTextListener(eh); You must invoke the TextArea object’s addTextListener( ) method and pass it a reference to the event handler. From Java 2 Certification Typical Short Answer Question What is the output of the following program? public class Question{ public static void main(String args[]) { MyThread t = new MyThread(); t.displayOutput(“t has been created.”); t.start(); } } class MyThread extends Thread{ public void displayOutput(String s) { t has been created. System.out.println(s); } t is running. public void run() { displayOutput(“t is running.”); } From Java 2 Certification } Typical Short Answer Question: What is the output of the following program? Typical Short Answer Typical Short Answer Question: What is the output of the following program? Typical Short Answer Typical Coding Variation Question: Modify this code so it removes Color objects from the list but not Strings continued on next slide... Typical Coding Variation Question: Modify this code so it removes Color objects from the list but not Strings ArrayList: java.awt.Color[r=255,g=0,b=255] red white blue java.awt.Color[r=0,g=255,b=255] ArrayList after calling removeStrings: java.awt.Color[r=255,g=0,b=255] java.awt.Color[r=0,g=255,b=255] Typical Coding Variation Answer continued on next slide... Typical Fill-in-the-Blanks Question RMI: making a service into a service+client for transformation from 2-tier to 3-tier. Remote Interface NextNumber.java Client using Service NextNumberClient.java NextNumberImpl.java Service implementing Remote Interface Typical Fill-in-the-Blanks Question (continued) Remote Interface NextNumber.java // A remote interface for getting the next number import java.rmi.Remote; import java.rmi.RemoteException; public interface NextNumber extends Remote { public int getNextNumber(int n) throws RemoteException; } Typical Fill-in-the-Blanks Question NextNumberImpl.java Service implementing Remote Interface (continued) Typical Fill-in-the-Blanks Question (continued) NextNumberImpl.java Service implementing Remote Interface Typical Fill-in-the-Blanks Question Client using Service NextNumberClient.java (continued) Typical Fill-in-the-Blanks Question Client using Service NextNumberClient.java (continued) Typical Fill-in-the-Blanks Question (continued) Fill-in-the-blanks so that the next number service obtains the next number from a secret service instead of just adding one to the number. You may assume that the interface of the secret service is: // A remote secret interface for getting the next number import java.rmi.Remote; import java.rmi.RemoteException; public interface Secret extends Remote { public int getSecretNextNumber(int n) throws RemoteException; } Typical Fill-in-the-Blanks Question (continued) Typical Fill-in-the-Blanks Question (continued) Typical Fill-in-the-Blanks Question (continued) Typical Code-from-Scratch Question Write code to simulate n bank patrons using safe deposit boxes. Assume bank patron i already is assigned safe deposit box i. Only 1 box in the bank is accessible at a time. To access a box, patron needs his/her key and the bank's key for their box. Assume patron already has his/her key, so we don't model that. However, they need to get lock on bank key and box. Typical Code-from-Scratch Question (continued) Typical Code-from-Scratch Question (continued) Typical Code-from-Scratch Question (continued) Typical Code-from-Scratch Question (continued) Typical Code-from-Scratch Question (continued) Review: Part III Jini Sampling of Topics Basic client, service HTTP servers Lookup service Matching services Interfaces/proxy Leasing Delegation/ 3rd party delegation RMI activation Remote events & event model Federating communities Security Well-behaved service Review Questions Typical multiple choice questions Typical short answer questions Typical fill-in-the-blanks question Typical Multiple Choice Question Which statement is true about a well-behaved Jini service? (assume that each request for a serviceID returns a unique serviceID) A) Each time it renews its lease with a Lookup Service it must use the same serviceID. B) Each time it executes in the same JVM it uses the same serviceID. C) Each time it executes in a different JVM it may use a different serviceID. D) All of the above E) None of the above F) A and B G) B and C H) A and C Typical Multiple Choice Question Which statement is true about RMI Activation? A) ItA must be used to implement a Jini service whenever is not true because there are other options for the service has aa back-end, back-end.such as RMI without implementing activation. an object is activated a new JVM is B) Whenever created which the object will in execute. B is notintrue because 2 objects the same activation groupclass may must sharedirectly the same JVM. the class C) An activatable extend UnicastRemoteObject. C is not true because an activatable class directly extends Activatable, which, in turn, extends and D) The rmiregistry handles object activation UnicastRemoteObject. deactivation. is not E) ADand C true. The rmiregistry supports RMI. The RMI F) All ofactivation the abovedaemon supports activation. G) None of the above Typical Multiple Choice Question Which of the following is a difference between a Jini proxy and an RMI stub? A is notcode true because bothto a the Jini client, proxy’sbut code A) A Jini proxy’s is delivered an andcode RMI is stub’s code are delivered to the RMI stub’s not delivered to the client. client. B) A security manager is required in order to remotely use a Jini proxy, but is not required in order to remotely use B is false because a security manager is an RMI stub. required in both cases to remotely download C) An RMIcode. stub uses RMI for client-to-service communication, whereas a Jini proxy may use other means ofDclient-to-service communication . be is false. Marshalled objects need not D) A Jini proxy can use reconstituted marshalled objects, but an RMI automatically upon arrival and stub can may onlybe useused serialized in bothobjects. cases. E) All of the above F) None of the above Typical Short Answer Question(s) Suppose you’re given this Jini configuration: Subnet A contains: LUS1, S1, S2, C1 Subnet B contains: LUS2, LUS3, S3, C2, C3 URLs of LUSs: LUS1: jini://host.testA.org LUS2: jini://host1.testB.org LUS3: jini://host2.testB.org Guaranteed message delivery no network failures UDP multicast messages reach entire subnet Infinite leases Typical Short Answer Question (cont.) S1, S2, each use multicast discovery to find lookup services and join their communities. Each has a DiscoveryListener. S3 uses unicast discovery to jini://host1.testB.org and jini://host.testA.org without a DiscoveryListener. C1, C2, each use multicast discovery to find lookup services and look for services. Each has a DiscoveryListener. C3 uses unicast discovery to jini://host2.testB.org and jini://host.testA.org without a DiscoveryListener. C3 registers for remote service discovery events from the lookup services that it discovers. Typical Short Answer Question (cont.) All matching is done based only on interfaces. S1, S3 each implement the BankWithdrawal interface. S2 implements the BankDeposit interface. C1, C3’s service matching templates each match based on the BankWithdrawal interface. C2’s service matching template matches based on the BankDeposit interface. Typical Short Answer Question (cont.) S1 registers with LUS1. Given the following sequence of steps, which services S2 registers with LUS1. does each client discover? (Note: Assume that each LUS2. step in the sequence executes completely S3 registers with LUS1, before the start of the next. If any conditions are associated with the C1 discovers If S1 registers with LUS1 before discovery, LUS1. state them.) C1 discovers LUS1, then C1 discovers S1. If S3 LUS1, LUS2 and LUS3 start up, along with their rmids and registers with LUS1 before C1 discovers LUS1, then http servers. C1 discovers S3. S1, S2, S3 start up, along with their http servers C2 discovers no services. C1, C2, C3 start. C3 discovers LUS1, LUS3. C3 discovers S1, S3. Typical Fill-in-the-Blanks Suppose you’re given S1, S2, S3, S4 where: S1 implements the BankWithdrawal interface S2 implements the BankDeposit interface has serviceID = 2 has Currency attribute = US Dollars and Canadian Dollars has Concurrency attribute = single-user S3 implements the BankWithdrawal interface has serviceID = 1 has Currency attribute = US Dollars and Japanese Yen has Concurrency attribute = single-user has serviceID = 3 has Currency attribute = US Dollars and Canadian Dollars has Concurrency attribute = multi-user S4 implements the BankDeposit interface has serviceID = 4 has Currency attribute = US Dollars and European Euro has Concurrency attribute = multi-user Typical Fill-in-the-Blanks (cont.) If a client wants to lookup a multi-user BankWithdrawal service for US dollars, fill in the blanks for all the different ServiceTemplates that will match the service: serviceID ServiceTypes Attributes 3 null null BankWithdrawal 3 3 BankWithdrawal null 3 BankWithdrawal null Currency= US Dollars Concurrency= multi-user null Currency= US Dollars Concurrency= multi-user Currency= US Dollars Concurrency= multi-user Matching Review Client Side: Matching Template Client Template T matches a service X’s ServiceItem if: serviceIDs match: T’s serviceID = null T’s serviceID = X’s serviceID or and serviceTypes match: T’s serviceType = null or X is instance or subtype of each type in T’s serviceType and attributes match: T’s attributes = null or X’s attributes contain >=1 match for each attribute in T