1) Rxjs provides a paradigm for dealing with asynchronous operations in a synchronous way using observables. Observables allow representing push-based data streams and provide operators to compose and transform these streams.
2) Operators like map, filter, and switchMap allow manipulating observable streams and their values in various ways. Common patterns include cascading asynchronous calls, parallelizing multiple requests, and retrying or error handling of streams.
3) Schedulers allow bending time and virtual clocks, enabling testing asynchronous code by controlling when asynchronous operations complete. Marble testing uses descriptive patterns to visually test observable streams and operator behavior.