1.
Explain in detail why wrapping every single function call in a generic 'try...catch (Exception e)' block is considered an anti-pattern in software development. Discuss the negative consequences of this approach on code maintainability, debugging, and system reliability.
2.
Describe the fundamental difference between checked exceptions and unchecked exceptions, specifically in the context of Java (or similar JVM languages). Provide at least two distinct examples for each type of exception to illustrate their usage and implications.
3.
Outline and explain three core principles or best practices for effective and responsible exception handling in production-grade software. For each principle, provide a brief justification of why it's important.