88 hours training + 32 hours work project = 120 hr.
- Introduction to Java. Benefits.
- JDK, JVM.
- Java 2 (Java EE / SE / ME)
- Tools: java, javac, javadoc
- Install JDK from Oracle website
- Set $JAVA_HOME and $PATH
$ javac -version
$ java -version
- Classes and *.class files
- Java app definition
- Classloading
- Classpath
- Packages
- JARs
- Main and Printer classes
- Different packages
- One of them in JAR
Hello, world!
- Intro to GIT
- Repos
- Commits
- Shortly about branches, conflicts and merges
- Install Git and in case of Windows TortoiseGit
- Create account at Github: teamXX
- Fork this repo to your account
- Clone your fork repo locally
- Update README.md locally to your teammates names
- Commit and push initial commit
$ git add .
$ git commit -m “…”
$ git push
- Trainer see all the forks in github
- Trainer can locate every teammate by its team repo
- Intro to Maven: build tool and dependency management
- Build lifecycle, goals
- Plugins
- pom.xml
- Dependencies and binary repositories
- Install Maven
- Set $M2_HOME
- Analyse our project: tree and pom.xml
- Move your old codebase to this project
- Make it build
- Take your last app under version control and push it
$ ls teamXX
src README.md pom.xml
$ mvn clean verify
BUILD SUCCESS
$ git add .
$ git commit -m
$ git push
- Opening Maven projects
- Running java apps
- Running maven builds
- Debugging
- Hotkeys
- Git operations
- Download and install IDEA with trial corporate license
- Open our maven project
- Change in pom.xml to teamXX
- Build project with maven from IDEA
- Push
- Trainer can see your team in pom.xml
- Singe and multi-line
- JavaDoc
- Intro to procedure style
- Java Dictionary for naming
- Return type
- Static modifier
- Name
- Parameters
- Static initializers
- Local variables
- Class variables and methods, static import
- Instance variables and methods: later
- As local variables
- Method overloading
- Primitive variable declaration and initialization
- Primitive types
- Primitive types literal values
- Primitive types casting
- Types Overflow and solution with BigInteger
- FP precision loss and solution with BigDecimal
- Reference types in Java
- Reference variables declaration and initialization
- Heap and stack
- Garbage collector
- String type
- String literal values
- Interning
- String concatenation
- Read and analyse specification as tests for this iteration in src/test
- Uncomment specification cases
- Implement features needed
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Arithmetic
- Arithmetic type promotions
- Bitwise
- Logical (lazy and eager)
- Compare and Ternary
- Object references and equality
- if/switch
- for/do/while/foreach
- Procedure Metrics: CC
- Read and analyse specification as tests for this iteration in src/test
- Uncomment specification cases
- Implement features needed
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Arrays declaration
- Array literals
- Multi-dimension arrays
- Declaration
- Using
- Constraints
- Read and analyse specification as tests for this iteration in src/test
- Uncomment specification cases
- Implement features needed
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Subject of procedural design
- Reuse
- Procedure generalization
- Inner quality attributes
- Metrics: cyclomatic complexity
- Programming styles and paradigms
- Procedure style vs OOAD
- Classes and objects
- Inheritance and Delegation as code reuse styles
- Visibility as key for encapsulation
- Polymorphism as key for supportability
- Stateful and stateless design
- Metrics of OOAD: Coupling and Cohesion
- Example Appenders and Filters
- FR: presentation changes and sink changes
- Inner NFRs
- Refactorings to do
- Switch and polymorphism and OCP
- Command Design Pattern
- Intro to Refactoring
- Basic Refactorings Matrix
- Wrap method / Sprout method
- Final modifier semantics: 3
- Enums emulation with class
- Switch recap
- Smart Enum Pattern
- FR: presentation changes
- Refactor to Enums: Dumb Commands
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Encapsulation for packages
- Encapsulation for classes
- Access modifiers
- Inheritance implementation
- Overriding methods
- Overriding constraints
- Constructors
- Object Initializers
- Constructors with inheritance issue
- FR: presentation changes
- Introduce Facade Design Pattern
- Refactor to Smart Commands with classes
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Polymorphic collections
- Polymorphic arguments
- Polymorphic algorithms
- Type casting
- Abstract classes
- Template Method pattern
- Strategy/State patterns
- Interface
- Implementation
- Multiple implementation
- Default modifiers for fields and methods
- Static and default (defender) methods
- FR: presentation changes and sink changes
- Refactor to Polymorphic Commands and Appenders
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- SRP
- OCP and Abstraction leak issues
- LSP
- ISP
- DIP
- Creator
- Factory
- DI
- What inner NFR issues do we have now
- What refactorings to do
- FR: presentation changes and sink changes
- Refactor to DI
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Assertions in Java
- Testing scopes
- Unit tests
- Structure of unit test
- Tests and contract
- JUnit
- Hamcrest and FEST-assert
- Test doubles types
- Mockito
- Types of coverage (including permutation)
- Intro to TDD
- Cover current components with unit tests
- State what code covered
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 50%
- Permutation coverage ≥ 30%
- Nested Classes
- Inner classes
- Local classes
- Anonymous classes
- Observer
- Implementation with Anonymous classes
- FR: As developer I want easily add new Appenders
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 50%
- Permutation coverage ≥ 30%
- Introduced Observer for supportability
- Closures in java
- Lambdas
- Functional Interfaces
- Functional style: state, function composition, declarative, immutability
- FR: As developer I want filter my messages
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 50%
- Permutation coverage ≥ 30%
- Introduced lambdas for filtering messages
- Comparison of the exception mechanism to the traditional error-handling mechanism
- Types of exceptions, their handling
- Standard Java exceptions
- Designing exceptions type system
- FR: As developer I want strict contracts and error handling
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 70%
- Permutation coverage ≥ 50%
- Introduced checked exceptions for errors and alternate scenarios
- Generics as design style
- Type safety
- Generic classes
- Generic methods
- System
- Math
- Object: hc and eq contract, toS
- String, its API. Immutability and interns.
- StringBuffer, StringBuilder
- Wrapper classes
- Autoboxing
- NFR: As a developer I want higher collection performance for messages through non-default eq and hc
- NRF: As a developer I want more polymorphism with toS for messages
- NFR: As a developer I want lower memory consumption through StringB*
- FR: As a developer I want business rules applied to all messages types
log("1", "2");
assertMessageEquals("3")
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 70%
- Collection types and implementations
- Iteration over collections
- Comparable and Comparator
- Maps and implementations
- Utility classes Collections and Arrays
- Queues
- Stream API
- Choose and state collection interfaces
- Choose and state collection implementations
- Refactor legacy codebase to collections API
- java.io.File
- RandomAccessFile
- Stream classes
- InputStreams and OutputStreams
- Stream chaining
- Readers and Writers
- FR: As a developer I want messages logged to file as plain text
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 70%
- Serialization API
- Network API
- Sockets and ServerSocket API
- Welcome to hell no.1! CAP theorem
- FR: As a developer I want collect logs though many app instances and have centralized log
- Server App
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 70%
- System tests for remote log server
- Thread definition
- Thread start: 3 options
- Thread management
- Thread states begin
- Priorities
- Daemons
- Thread API
- Blocking operations
- FR: As a developer I want more performance for server app
- NFR: File per Thread
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 70%
- System tests for remote log server
- Connector/Acceptor
- Proxy
- Pro-actor
- Handler
- Welcome to hell no.2! Concurrency.
- Thread safety and data race
- Thread synchronization
- synchronized section
- Lock API
- New thread states
- Collections thread safety
- wait() / notify()
- Deadlocks
- Intro to java.util.concurrent
- FR: As a developer I want more and more performance for server app
- NFR: one file for threads
- NFR: less threads with non-blocking input
- Hints: available() and queues
- All given specifications runs are green
- Code reuse and minimum code duplication
- Code style
- Documented public API
- Unit tests coverage ≥ 70%
- Load test for remote log server
- Annotations (0,5/0)
- Purpose of annotations
- Standard annotations
- Custom annotations
- Reflection API overview
- Class loaders
- Class introspection
- PM
- Analyst
- Product's FRs and NFRs
- System's internal NFRs
- CI server
- Sonar server
- Teams formed
- Every team's git repo visible to PM and is identifiable
- Teams formed
- Every team's git repo visible to PM and is identifiable
- Teams deliver product with six iterations
- PM and Business Customers accept product with six demo sessions