I work with a lot of interns who have learned Java in school and are now applying it for job purposes. My answer is going to assume you're looking at entry-level positions.
Schools, for the most part, do not teach Java job skills. If you're learning event driven programming using Swing, for example, expecting to use that on the job is a pipe dream. Unless you're applying to a job that lists it specifically, most Java is web or enterprise oriented.
Conceptually, you need to understand the following in Java and know how to describe and apply it:
- Understanding of all basic Java control structures, able to declare methods and a working understanding of pass-by-value and pass-by-reference.
- A understanding of classes vs. interfaces.
- Understand the role of the public/private/protected modifiers.
- Understanding of Strings as immutable objects. How to create mutable Strings via StringBuilder and other classes.
- Creation of a basic Java POJO/bean (data entity).
- Understand how statics work.
- Know how to declare constants.
- Understand basic class, variable and constant naming conventions.
- Know how to organize code into packages.
- Understand the role and usage of JAR library files and how to reference them in your application.
- Have a working understanding of the core Java API and where to find stuff. At a minimum, know the roles and uses of classes in java.lang, understand and able to use the Java Collections API correctly (i.e. declare variables of List type, not ArrayList) and know some of the utility classes in java.util, java.text and java.math.
- Knowledge and theory of some basic design patterns (Singleton, Factory, Facade, DAO, MVC).
- Know what the CLASSPATH is!
- Know how the main() method works and how to pass arguments to basic programs.
If you're looking to get into web or enterprise development, some exposure and knowledge of the following is helpful:
- Familiarity with SQL databases and programming against them via JDBC.
- For web, understand how the HTTP protocol works and how basic web interaction takes place.
- A basic knowledge of HTML. Specifically, basic page structure and how HTML forms work. Difference between GET and POST.
- Any knowledge of the Servlet/JSP API, how web containers work and the Servlet lifecycle.
- Any understanding of XML. Web services and WSDL theory is a bonus.
- Any understanding of TCP/IP networking (TCP vs UDP, role of IP, DNS, network addressing).
- Use of any logging framework.
- Know what Apache Commons is!
- Any understanding or exposure to source code control systems and why they are important.
- Any understanding of software project management and the software development lifecycle.
Notice I have not listed a single framework! I am always looking for fundamental knowledge and a foundation to build upon. An entry-level person is not expected to know too much. The more the better but it must be a place we can grow you from.
And of that first list, only about 1/4 to 1/2 of it is ever touched upon in a college or university class. Virtually none of the second list is ever covered in college or university classes.
Honestly, having a working if imperfect knowledge of stuff on the first list, able to answer some questions off the top of your head without needing a book or the Internet as a crutch at every stage and a willingness to learn is what is needed to get you in the door. Given I am usually interviewing candidates that are from the same school, I am looking for things that differentiate them. Self-starters and motivated learners are often that differentiator.
No comments:
Post a Comment