Unit testing is directed at the smallest part of the implementation possible. In javaJava this means you are testing a single class. If the class depends on other classes these are faked.
When your test calls more than one class, itsit's an integration test.
Full test suites can take a long time to run, so after a change many teams run some quick to complete tests to detect significant breakages. For example, you have broken the URIs to essential resources. These are the smoke tests.
Regression tests run on every build and allow you to refactor effectively by catching what you break. Any kind of test can be regression test, but I find unit tests are most helpful finding the source of fault.