Java Fundamentals
!!!!! Exam info !!!!!
Exam times:
- May 22nd - ICT-315, ICT-312 @12.00
- May 29th - ICT-A1, ICT-A2 @12.00
Format:
- Written part
- 25 multiple choice questions (choose one)
- 45 minutes
- Oral part
- 2 questions
- 10-15 minutes each
- You will receive your grade immediately
Course Introduction
Offered by ZeroTurnaround in Spring semester 2017. The course will be taught in English.
- Course code: ITI8905
- Credits: 3 EAP
- Time: Lectures on Mondays 12:00-13:30. First meeting on January 30.
- Place: ICT-315 (ICT building is at Akadeemia tee 15a)
The course is targeted to students who (think they) already know Java. It is not a beginner's course!
NB! The number of places is limited to 40! Sign up ASAP! When we cannot find any evidence of you having taken some Java courses in the past, we may vacate the place to other students.
Students from TUT should register in ÕIS (registration will be opened on January 11 January 30). Students from Tallinn University and IT College, who are interested in taking the course should send an e-mail to Siiri Taveter (siiri.taveter@ttu.ee) mentioning ITI8905 in the subject line.
Final Grade
Your final grade will consist of:
- 50% Homework
- 50% Exam
Homework
There are 14 homework assignments total for Lectures 1-14. The last lecture (lecture 15) will not have a homework assignment. Each assignment submission will be scored between 0.0 - 1.0. For a perfect score for homeworks you need at least 12 points out of the 14. So there is some buffer if you happen to miss a homework or if you didn't get a great score for each of them. For those of you that happen to get more than 12 points, we will make your life easier on the exam :).
Homework assignments for the lectures will be given out at the end of each lecture (Monday) and each one, except for the first one, will need to be submitted by Sunday 23:59 EEST same week. This means you have 6 days for solving the homework and submitting it to us for grading. Don't be late - if you are late then you'll get 0 points and we won't even look at it!
No cheating:
- Copying solutions from a friend is forbidden - if we see two identical submissions, they both get a 0.
- Copying solutions from StackOverflow is forbidden - its okay to look at solutions for ideas, but don't blatantly copy.
Use the Java Standard Library unless homework assignment itself uses some other libraries
Exam
The exam will be:
- 60% written (multiple-choice questions)
- 40% oral (2+1 questions)
- NB! Prerequisite: must get at least 6 points for Homework
Lectures
Lecture 1
- Slides: JavaFundamentals - Lecture 1 - Introduction.pdf
- Homework:
- Link: https://github.com/JavaFundamentalsZT/jf-hw-intro
- Goals:
- Get the failing unit test to pass
- Submit it
- Deadline: Sunday, February 12 23:59 EET
Lecture 2
- Slides: JavaFundamentals - Lecture 2 - Lambdas and Streams.pdf
- Homework:
- Link: https://github.com/JavaFundamentalsZT/jf-hw-2-lambdas
- Goals:
- Implement the method getWords(filename) in class Homework2. Do not change the method signature.
- Find five most used words in a file. Treat words in case insensitive manner.
- Implementation must use the stream API and lambdas.
- Consider edge cases and don't forget to add tests!
- Deadline: Sunday, February 12 23:59 EET
Lecture 3
- Slides: JavaFundamentals - Lecture 3 - Collections and Generics.pdf
- Homework:
- Link: https://github.com/JavaFundamentalsZT/jf-hw-3-generics
- Goals:
- Task 1: Implement CardDeck, its constructor and methods shuffle(), take(), add(), size()
- Task 2: Create function unique() which receives a varg of List-s and returns a List of values that exist only once across all collections
- Deadline: Sunday, February 19 23:59 EET
Lecture 4
- Slides: JavaFundamentals - Lecture 4 - IO.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-packer
- Goals:
- Write a Java program which packs and unpacks files without compression
- More details on GitHub!
- Deadline: Sunday, February 26 23:59 EET
Lecture 5
- Slides: JavaFundamentals - Lecture 5 - IO2.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-sysdump
- Goals:
- Write a Java program which outputs system info as XML and JSON files
- More details on GitHub!
- Deadline: Sunday, March 5 23:59 EET
Lecture 6
- Slides: JavaFundamentals - Lecture 6 - Threads and Java Memory Model.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-threads-jmm
- Goals:
- Create tests with JCStressTest that demonstrate concurrency issues and outcomes
- Explain why these outcomes are possible under the Java Memory Model
- Deadline: Sunday, March 12 23:59 EET
Lecture 7
- Slides: JavaFundamentals - Lecture 7 - Thread Safety and Locks.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-money-transfers
- Deadline: Sunday, March 19 23:59 EET
Lecture 8
- Slides: JavaFundamentals - Lecture 8 - Concurrency API.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-password-cracker
- Deadline: Sunday, March 26 23:59 EET
Lecture 9
- Slides: JavaFundamentals - Lecture 9 - Classloaders.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-classloaders
- Deadline: Sunday, April 2 23:59 EEST
- General feedback:
- Very many of you print the stacktrace before throwing a new exception or returning null.The convention in the industry is to have exception logging (print it out in some sort) at one single location at some higher part of the calling chain. In your catch sections I would either handle the exception (some logic) or re throw.
- Make sure you close your streams! Classloaders are usually quite hot, meaning that they process a ton of files. If you happen to leak a handle each time then the leak can be substantial! Don’t forget to close them in the finally block or using the more convenient try-with-resources approach.
- Test your submission before you send them in! Out of the 22 submissions 4 threw an exception with the supplied input files.
Lecture 10
- Slides: JavaFundamentals - Lecture 10 - Java Memory Management.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-jmm
- Deadline: Sunday, April 9 23:59 EEST
Lecture 11
- Slides: JavaFundamentals - Lecture 11 - Reflection API.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-reflection
- Deadline: Sunday, April 16 23:59 EEST
Lecture 12
- Slides: Meedia:JavaFundamentals - Lecture 12 - Java Bytecode and Javassist.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-javassist
- Deadline: Sunday, April 23 23:59 EEST
Lecture 13
- Slides: Meedia:JavaFundamentals - Lecture 13 - Networking.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-net
- Deadline: Sunday, April 30 23:59 EEST
Lecture 14
- Slides: Meedia:JavaFundamentals - Lecture 14 - Java Troubleshooting and Performance.pdf
- Homework
- Link: https://github.com/JavaFundamentalsZT/jf-hw-performance
- Deadline: Sunday, May 14 23:59 EEST
Lecture 15