Good recommender systems are perfect tools to increase the revenue of any user-centric enterprise.
Not a single algorithm, but an ensemble (a proper combination) of different approaches is often used in practice, see the Further Reading section below for the detailed information of the Netflix Prize winners.
Recommender systems are an interesting fusion of the techniques we have already studied – linear models, K-nearest neighbours etc.
Building recommender systems is challenging, because data is large yet often sparse;
Here is the ratio of available ratings vs. all possible user-item valuations for the Netflix Prize (obviously, it is just a sample of the complete dataset that Netflix has):
##  0.01177558
Sparse matrix (many “zeros” = unassigned ratings) data structure is often used for storing of and computing over such data effectively.
Some users are biased in the sense that they are more critical or enthusiastic than average users.
Is 3 stars a “bad”, “fair enough” or “good” rating for you? Would you go to a bar/restaurant ranked 3.0 by you favourite Maps app community?
It is particularly challenging to predict the preferences of users that cast few ratings, e.g., those who just signed up (the cold start problem).
“Hill et al.  have shown that users provide inconsistent ratings when asked to rate the same movie at different times. They suggest that an algorithm cannot be more accurate than the variance in a user’s ratings for the same item.” (Herlocker et al. 2004: p. 6)
It is good to take into account the temporal (time-based) characteristics of data as well as external knowledge (e.g., how long ago a rating was cast, what is a film’s genre).
The presented approaches are vulnerable to attacks – bots may be used to promote or inhibit selected items.