Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 11 Certification - Oracle Code One Hands on Lab

Java 11 Certification - Oracle Code One Hands on Lab

With Scott Selikoff and Ken Fogel

Jeanne Boyarsky

September 18, 2019
Tweet

More Decks by Jeanne Boyarsky

Other Decks in Programming

Transcript

  1. @JeanneBoyarsky @ScottSelikoff @omniprof
    Wednesday, September 18, 2019
    Oracle Code One (HOL18122)
    Hands On Java 11 OCP Certification
    Prep
    Jeanne Boyarsky, Scott Selikoff
    & Ken Fogel

    View Slide

  2. @JeanneBoyarsky @ScottSelikoff @omniprof
    URLs
    1.  https://speakerdeck.com/boyarsky
    2.  https://github.com/boyarsky/2019-
    oraclecodeone-cert-hol
    2

    View Slide

  3. @JeanneBoyarsky @ScottSelikoff @omniprof
    About Us
    3
    • Java Developer
    • CodeRanch Mod
    • Java Champion
    • Java Developer
    • CodeRanch Mod
    • Software
    Consultant
    • Teacher
    • DawsCon
    Organizer
    • Java Champion

    View Slide

  4. @JeanneBoyarsky @ScottSelikoff @omniprof
    Jeanne & Scott’s Java 8 Cert Books
    4

    View Slide

  5. @JeanneBoyarsky @ScottSelikoff @omniprof
    Pre-order Java 11 Cert Books
    5
    Book I (Exam 1Z0-815) available in November

    View Slide

  6. @JeanneBoyarsky @ScottSelikoff @omniprof
    Disclaimers
    1.  A bit of the material is from our books.
    2.  Some of the material in this presentation may
    appear in our upcoming certification books.
    6

    View Slide

  7. @JeanneBoyarsky @ScottSelikoff @omniprof
    Agenda
    7
    I. Certification Overview
    II. Modules
    III. Lab #1
    IV. Small features
    V. Var/Stream Changes
    VI. Lab #2
    ...then Off to CloudFest @ Chase Center!

    View Slide

  8. @JeanneBoyarsky @ScottSelikoff @omniprof
    I. Certification Overview
    8
    What is the OCP Java
    SE 11 Developer
    Certification?

    View Slide

  9. @JeanneBoyarsky @ScottSelikoff @omniprof
    Previous Certification History
    9
    + upgrade

    View Slide

  10. @JeanneBoyarsky @ScottSelikoff @omniprof
    New Certification Path
    10

    View Slide

  11. @JeanneBoyarsky @ScottSelikoff @omniprof
    Java 11 Path
    11
    1Z0-815
    (OCP part 1)
    1Z0-816
    (OCP part 2)
    +
    OCP: Java SE
    11 Developer
    Yes, 2 OCP
    level exams
    No cert granted for
    completing 1Z0-815
    OCP Part 1 (1Z0-815)
    similar to OCA 8 (1Z0-808)
    exam, but much harder!

    View Slide

  12. @JeanneBoyarsky @ScottSelikoff @omniprof
    If you have an older cert
    If already passed Need to take
    OCP 6, 7, 8 1Z0-817 (upgrade
    exam)
    OCA 6, 7, 8 1Z0-816 (part 2)
    OCJP/SCJP 1.5 or
    earlier
    1Z0-815 (part 1) +
    1Z0-816 (part 2)
    12

    View Slide

  13. @JeanneBoyarsky @ScottSelikoff @omniprof
    II. Modules
    13

    View Slide

  14. @JeanneBoyarsky @ScottSelikoff @omniprof
    JDK has been modularized
    14
    java.base
    JDK
    java.logging
    java.sql
    + many more
    java.base
    automatically
    available

    View Slide

  15. @JeanneBoyarsky @ScottSelikoff @omniprof
    Module graph
    •  https://docs.oracle.com/en/java/javase/11/docs/api/
    java.logging/module-summary.html
    15

    View Slide

  16. @JeanneBoyarsky @ScottSelikoff @omniprof
    Simple module
    src
    package1
    MyClass1.class
    package2
    MyClass2.class
    module-info.class
    16
    Requirements
    q module-info file
    q One or more
    packages

    View Slide

  17. @JeanneBoyarsky @ScottSelikoff @omniprof
    module-info.java
    module moduleName {
    requires otherModuleName;
    exports packageName;
    }
    17

    View Slide

  18. @JeanneBoyarsky @ScottSelikoff @omniprof
    Module file “commands”
    •  requires – dependencies
    •  requires transitive – grant to caller
    •  exports – share package
    •  exports to – share package with specific
    module
    •  opens – for reflection
    •  provides/uses – for services
    18

    View Slide

  19. @JeanneBoyarsky @ScottSelikoff @omniprof
    Module implications
    •  Can have “private” package
    •  No circular dependencies
    19

    View Slide

  20. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 1
    Given a module, which command allows other
    modules to access a package it defines?
    A.  exports
    B.  opens
    C.  reflects
    D.  requires
    E.  None of the above
    20

    View Slide

  21. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 2
    How many modules are available by default?
    A.  0
    B.  1
    C.  2
    D.  3
    E.  4
    21

    View Slide

  22. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 3
    Which module command allows reflection?
    A.  exports
    B.  opens
    C.  reflects
    D.  requires
    E.  None of the above
    22

    View Slide

  23. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 4
    Which are true of the module-info?
    A.  It must have a public modifier
    B.  It cannot have a public modifier
    C. It appears at the root of the module
    D. Its name is moduleInfo.java
    23

    View Slide

  24. @JeanneBoyarsky @ScottSelikoff @omniprof
    III. Lab #1
    •  Required Software for Today
    •  Java 11
    •  Editor or IDE of your choice
    •  Note: we don’t recommend using an IDE to
    study for the cert, but we only have two hours
    24

    View Slide

  25. @JeanneBoyarsky @ScottSelikoff @omniprof
    Labs
    •  We will sprinkle in some concepts from earlier
    versions of Java into the labs. (ex: reading from a
    file).
    •  If you are not familiar with these, it is fine to Google
    or ask us for help.
    •  Sample solutions are in the github repo.
    25

    View Slide

  26. @JeanneBoyarsky @ScottSelikoff @omniprof
    III. Lab #1
    26
    https://github.com/boyarsky/2019-oraclecodeone-cert-hol

    View Slide

  27. @JeanneBoyarsky @ScottSelikoff @omniprof
    IV. Small Features
    •  Underscore (_)
    •  private interface methods
    •  effectively final in
    try-with-resources
    27

    View Slide

  28. @JeanneBoyarsky @ScottSelikoff @omniprof
    Underscores
    •  Single _ no longer a valid identifier
    •  Double underscore valid
    •  $, numbers, and letters valid
    •  Why? Positioning for future
    28

    View Slide

  29. @JeanneBoyarsky @ScottSelikoff @omniprof
    Private methods
    •  private and private static methods allowed in
    interfaces
    •  Why? Can be used by static and default
    methods to reduce code duplication
    •  Can’t be used outside of interface declaration
    29

    View Slide

  30. @JeanneBoyarsky @ScottSelikoff @omniprof
    6 Types Allowed in Interfaces
    Type Scope/Modifiers
    Constants public static final
    Abstract Methods public abstract
    Default Methods (8) public default
    Instance Methods (9) private
    Public Static Methods (8) public static
    Private Static Methods (9) private static
    30

    View Slide

  31. @JeanneBoyarsky @ScottSelikoff @omniprof
    Effectively Final Definition
    •  Added in Java 8
    •  If typed final before param/local variable
    and it would still compile
    •  Can be used in lambda expressions
    31

    View Slide

  32. @JeanneBoyarsky @ScottSelikoff @omniprof
    Which are effectively final?
    int numChairs = 4;
    int numLegs = numChairs * 4;
    numChairs++;
    System.out.println(numChairs);
    UnaryOperator rc1 = r -> r * numChairs;
    UnaryOperator rc2 = r -> r * numLegs;
    32

    View Slide

  33. @JeanneBoyarsky @ScottSelikoff @omniprof
    Try-with-Resources - Before
    •  Resource must be declared with try-with-resources
    Path path = Paths.get("file");
    try(BufferedReader reader =
    Files.newBufferedReader(path)){
    // read file
    }
    33

    View Slide

  34. @JeanneBoyarsky @ScottSelikoff @omniprof
    Try-with-Resources - After
    •  Effectively final resources can be declared before
    try-with-resources
    Path path = Paths.get("file");
    BufferedReader r = Files.newBufferedReader(path);
    try(r) {
    // read file
    }
    34

    View Slide

  35. @JeanneBoyarsky @ScottSelikoff @omniprof
    What’s wrong here?
    Connection con =
    DriverManager.getConnection(url);
    PreparedStatement ps =
    con.prepareStatement(sql);
    ps.setInt(1, id);
    ResultSet rs = ps.executeQuery();
    try (con; ps; rs) {
    while (rs.next()) {
    // process result set
    } }
    Resource leak!
    35

    View Slide

  36. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 1
    Which of the following compile?
    A.  String _a = null;
    B.  String _1 = null;
    C.  String $ = null;
    D.  String _ = null;
    E.  String __ = 1;
    36

    View Slide

  37. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 2
    Which can fill in the blank?
    interface TheInterface {
    ____ int method() { return 1; } }
    A.  public
    B.  protected
    C.  no modifier
    37
    D.  private
    E.  None of the above

    View Slide

  38. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 3
    Which can fill in the blank?
    interface TheInterface {
    ____ static void method() {} }
    A.  public
    B.  protected
    C.  no modifier
    38
    D.  private
    E.  None of the above

    View Slide

  39. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 4
    How many identifiers could have independently
    been changed to _ in Java 9?
    A.  0
    B.  1-2
    C.  3-4
    39
    D.  5 or more
    E.  None – code does
    not compile
    public interface Planet {
    int COUNT = 1;
    void add(int num);
    private static int getCount() { return COUNT; }
    }

    View Slide

  40. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 5
    Which is true at the end of the code block?
    A.  Reader is closed
    B.  Reader remains open
    C.  None; the code does not compile
    40

    View Slide

  41. @JeanneBoyarsky @ScottSelikoff @omniprof
    V. Var/Stream Changes
    •  Var (local variable
    type inference)
    •  Streams
    41

    View Slide

  42. @JeanneBoyarsky @ScottSelikoff @omniprof
    String name = "SF";
    var name = "Jeanne";
    List list = List.of(1, 2, 3);
    var list = List.of(1, 2, 3);
    •  Syntactical sugar/less boilerplate
    •  Not immutable (no val)
    42

    View Slide

  43. @JeanneBoyarsky @ScottSelikoff @omniprof
    List headers =
    thead.findElements(By.tagName("th"));
    VolunteerDashboardRow headerRow = new
    VolunteerDashboardRow(headers);
    vs
    var headers =
    thead.findElements(By.tagName("th"));
    var headerRow = new
    VolunteerDashboardRow(headers);
    43

    View Slide

  44. @JeanneBoyarsky @ScottSelikoff @omniprof
    var csvPath = createAndGetFile(CSV_DATA);
    try (var csvWriter =
    Files.newBufferedWriter(csvPath);
    var csvPrinter = new
    CSVPrinter(csvWriter,
    CSVFormat.DEFAULT)); {
    }
    44

    View Slide

  45. @JeanneBoyarsky @ScottSelikoff @omniprof
    Map productMap1
    = new HashMap();
    Map productMap2
    = new HashMap<>();
    var productMap3
    = new HashMap();
    45

    View Slide

  46. @JeanneBoyarsky @ScottSelikoff @omniprof
    Where can we use?
    var name = "SF";
    var other = name + 2;
    var list = List.of(1, 2, 3);
    for (var num : list) {}
    (@NotNull var map, var list) -> true;
    46

    View Slide

  47. @JeanneBoyarsky @ScottSelikoff @omniprof
    All or nothing
    Good
    (var map, var list) -> true
    No good
    (var map, list) -> true
    (var map, List list) -> true
    47

    View Slide

  48. @JeanneBoyarsky @ScottSelikoff @omniprof
    Where can’t we use?
    class Inner { var bad = "abc"; }
    var noGood;
    noGood = 4;
    Also instance variables, etc
    48

    View Slide

  49. @JeanneBoyarsky @ScottSelikoff @omniprof
    Does this work?
    var var = "var";
    49

    View Slide

  50. @JeanneBoyarsky @ScottSelikoff @omniprof
    Pros Cons
    Less typing Loss of information
    Less redundancy Variable names matter
    more
    Can scan variable
    names
    Be careful!
    50
    http://openjdk.java.net/projects/amber/LVTIstyle.html

    View Slide

  51. @JeanneBoyarsky @ScottSelikoff @omniprof
    Strings
    "abc\n123"
    .lines()
    .count();
    "abc".chars()
    .count();
    51

    View Slide

  52. @JeanneBoyarsky @ScottSelikoff @omniprof
    Streams - ofNullable
    stream = dubiousObj == null
    ? Stream.empty()
    : Stream.of(dubiousObj);
    stream = Stream.ofNullable(dubiousObj);
    Optional.ofNullable()
    existed since Java 8
    52

    View Slide

  53. @JeanneBoyarsky @ScottSelikoff @omniprof
    Streams - iterate
    Stream.iterate(10, i-> i-1)
    .limit(10)
    .forEach(System.out::println);
    Stream.iterate(10, i-> i>0, i-> i-1)
    .forEach(System.out::println);
    53

    View Slide

  54. @JeanneBoyarsky @ScottSelikoff @omniprof
    Streams - takeWhile
    Stream.iterate(1, i-> i< 10, i-> i + 1)
    .takeWhile(i -> i < 5)
    .forEach(System.out::println);
    Assumes ordered stream. Takes all elements until one
    doesn’t match. Prints the numbers 1-4
    54

    View Slide

  55. @JeanneBoyarsky @ScottSelikoff @omniprof
    Streams - takeWhile
    Stream.iterate(
    new SimpleEntry(1,1),
    e -> new SimpleEntry(
    e.getValue(), e.getKey()+e.getValue()))
    .map(Entry::getValue)
    .takeWhile(n -> n < 30)
    .forEach(System.out::println);
    How to print all Fibonacci #s less than 30?
    55

    View Slide

  56. @JeanneBoyarsky @ScottSelikoff @omniprof
    Streams - dropWhile
    Stream.iterate(1, i-> i< 10, i-> i + 1)
    .dropWhile(i -> i < 5)
    .forEach(System.out::println);
    Assumes ordered stream. Takes all elements until one
    doesn’t match. Prints the numbers 5-9
    56

    View Slide

  57. @JeanneBoyarsky @ScottSelikoff @omniprof
    Streams - dropWhile
    Stream.iterate(new SimpleEntry(1,1),
    e -> new SimpleEntry(
    e.getValue(), e.getKey()+e.getValue()))
    .map(Entry::getValue)
    .dropWhile(n -> n < 30)
    .forEach(System.out::println);
    Note: This doesn’t work. takeWhile and dropWhile aren’t
    always opposites.
    57

    View Slide

  58. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 1
    What is the output?
    var a = 1; var b = a;
    int c = b; System.out.println(c);
    A.  a does not compile
    B.  b does not compile
    C.  c does not compile
    58
    D.  1
    E.  None of the above

    View Slide

  59. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 2
    What is the output?
    var a = 1; var b = a;
    String c = b; System.out.println(c);
    A.  a does not compile
    B.  b does not compile
    C.  c does not compile
    59
    D.  1
    E.  None of the above

    View Slide

  60. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 3
    Which variable declarations compile?
    var a = null; var b = 1;
    var c; var var = 3;
    A.  a
    B.  b
    60
    C.  c
    D.  var

    View Slide

  61. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 4
    Which allow using var?
    A.  Inner class instance variables
    B.  Lambda variables
    C.  Static variables
    D.  Try-with-resources
    61

    View Slide

  62. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 5
    What does the following output?
    long count = Stream
    .iterate(1; i-> i< 10; i-> i+2).count();
    System.out.println(count);
    A.  0
    B.  5
    C.  10
    62
    D.  The code does not
    compile
    E.  None of the above

    View Slide

  63. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 6
    What does the following output?
    Stream.iterate(1, i-> i< 10, i-> i++)
    .takeWhile(i -> i < 5)
    .forEach(System.out::println);
    A.  The numbers 1-4
    B.  The numbers 5-9
    C.  An infinite stream
    63
    D.  The code does not
    compile
    E.  None of the above

    View Slide

  64. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 7
    What does the following output?
    long count = Stream
    .iterate(1, i-> i< 10, i-> i+2).count();
    System.out.println(count);
    A.  0
    B.  5
    C.  10
    64
    D.  The code does not
    compile
    E.  None of the above

    View Slide

  65. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 8
    What does the following output?
    Stream.iterate(1, i-> i< 10, i-> ++i)
    .dropWhile(i -> i < 5)
    .forEach(System.out::println);
    A.  The numbers 1-4
    B.  The numbers 5-9
    C.  An infinite stream
    65
    D.  The code does not
    compile
    E.  None of the above

    View Slide

  66. @JeanneBoyarsky @ScottSelikoff @omniprof
    Question 9
    What does the following output?
    long count = Stream.of(null).count();
    System.out.println(count);
    A.  0
    B.  1
    C.  null
    66
    D.  The code does not
    compile
    E.  None of the above

    View Slide

  67. @JeanneBoyarsky @ScottSelikoff @omniprof
    VI. Lab #2
    67
    (when done have a beer at CloudFest)

    View Slide