I am looking to provide "Master Class" Java training for developers of high throughput and low latency systems based on my experience in designing and implementing trading systems for hedge funds.
As this will be my first course, I am looking for feedback as to what to include and what to drop. I am concerned this is an overwhelming amount of information to cover in a week which will make it difficult to cover each topic in much depth.
You can contact me on peter.lawrey (a) higherfrequencytrading.com if you are interested in the course. This is in person training in English. My first session will be in London, but I would consider other cities if there is enough interest.
The training assumes you are familiar with all the standard features of Java and know most of the topics covered by advanced Java programming courses. i.e. everything covered in most advanced books.
The scope of the training is designing, developing, testing and tuning performance Java applications. The three areas covered are low latency, high throughput and big data techniques. Both common libraries in these spaces and how to implement simple examples of your own are covered. The course is 30% design and theory and 70% practical.
Developers should have at least five years solid, hands on Core Java coding experience. e.g. you should be able to write multi-threaded code on paper which has a good chance of compiling.
A brief coverage of advanced programming techniques from a performance point of view. This is intended to cover in a day all the functionality you might expect to cover in a week of an advanced training course. This refresher assumes you know at least 80% of this material already. This is the foundation of the the following days sessions
These topics are discussed from a performance point of view.
• improvements in Java 5.0 to 7
• implementing the Actor pattern using the High Level Concurrency library.
• working with Streams, Reader/Writers and Channels.
• working with compressed stream in files and over sockets.
• using Blocking NIO.
• Reflection and MethodHandles.
• Review design patterns.
Writing micro-benchmarks and measuring the performance of systems such as
simple network services. This will look at latency distributions, throughputs and degrees of concurrency.
Tools introduces: CPU and memory profilers. VisualVM and commercial. Libraries introduced: Caliper, Java Thread Affinity
Designing and writing performance distributed systems.
Libraries introduced: ZeroMQ, FastMPJ, Java Chronicle.
Lock free multi threading, ultra low garbage and off heap coding.
Libraries introduced: Trove, Javolution Fast collections, Disruptor, Under the bonnet of the Java Concurrency library.
Performance Parsing and Serialization/Deserialization techniques. Big Memory techniques.
• Using busy waiting for resources and shared data.
• Using intrinsics which are faster than JNI.
• Recycling instead of discarding data, and when to do it. What are the disadvantages?
• Using ByteBuffers and allocating native space.
• Externalizable, ObjectInput/ObjectOutput
• Custom serialization
• JSon, XML, text and binary parsers.
Libraries introduced: Javolution Struct, ByteBuffer, Unsafe, memory mapped files.