The Flag module provides the infrastructure that allows you to add any number of “flags” to a node, comment, user, taxonomy term, etc. In most cases, these aren’t referred to using the abstract term “flag”, but as something more specific: e.g. “liking” a piece of content, indicating “I use this” for a listing in a directory, “claiming” a particular audio recording to do transcription work, or flagging a comment as spam or inappropriate. Flags can be on a per-user basis (e.g. “liking”, adding something to “my favorites”) or on a sitewide basis (e.g. spam flagging).
Flagging info is available in Views, so you can create views that, for instance, display all content that a user has “liked”, or order content by how many people have “liked” it. You can also integrate flags with the Rules module so that flagging triggers some sort of action. For instance, you could configure Drupal to automatically unpublish any node that a user has flagged as spam.
There’s a lot of written documentation and videos about how to use Flag. Here’s a 9-minute video overview of Flag (from early 2013, so predating the 7.x-3.x version which made some non-trivial changes to the infrastructure, but the basic ideas are still applicable.) There’s also a 5-part video series, with each video covering a different topic:
Flags and CSS styling (e.g. how to replace text links for the flag with image links)