Before the shell executes the cat command on the command line, it looks for redirections.
There are two redirections:
>file1 This will make the command's standard output go to file1.
<file2 This will make the command's standard input come from file2.
The fact that these redirections are placed in a wonky location on the command line doesn't matter.
$ >file1 cat <file2
is the same as
$ cat <file2 >file1
which is the same as
$ <file2 >file1 cat
etc.
Note that the cat utility in all of these instances is executed without any operands. The redirections are not operands to the cat command, they are instructions to the shell to set up redirections into and out of the command (connecting its standard input and output to files).
The difference between cat file and cat <file (or, if you will, <file cat) is that in the first case, the cat utility itself is opening the file, which is given as an operand on the command line, for reading, while in the second case, the shell will open the file and connect cat's input stream to it1. In the second case, cat will notice it wasn't given a file operand and will automatically switch to reading from its standard input (this is a feature of cat, not something that all utilities do).
1 See also the question "cat gives different error when opening non-existing file".
The fact that the shell sets up the redirections before even executing the command on the command line is why things like these fail and you end up with an empty output file:
$ sort file >file
Here, the shell will truncate (empty) the file file before executing sort file and connecting sort's standard output to the file. The sort utility will then open file and sort its contents (which is nothing). The result (nothing) is passed through the standard output stream to file.
>is not nothing, it's output – Dmitry Grigoryev 19 hours ago