Background
Java started life at Sun as an object oriented embedded language for consumer devices called Oak. Sun released Oak as Java in 1995 after reworking it for the Web. The first version, Java 1, was embodied in the freely downloadable JSDK - Java System Development Kit. The current version is Java 1.2.2, known as Java 2.
Java is an architecturally neutral language with a similar look and feel to C++. Although it's a compiled language, the compiler produces Bytecodes designed to run on a JVM, a Java Virtual Machine, rather than target processor or Operating System.
Only the JVM need be implemented for a specific hardware platform and, in a perfect world, any program written in Java will run unchanged on any platform for which a JVM is available.
However, it's perfectly possible to write non-portable Java programs if you need to take advantage of platform-specific features. In order to ensure full portability, Java programs must be written to the JNI - Java Native Interface. The JNI also enables Java code running in a JVM to operate with applications and libraries written in other languages such as C++.
Adding to Java's flexibility, the Invocation API enables you to embed the JVM into a native application.
Applets, Servlets, Beans
Java comes in three pre-packaged editions from Sun. J2ME - Java 2 Micro Edition, J2SE - Standard Edition, and J2EE - Enterprise Edition. J2ME is aimed at those producing embedded code for phones, set top boxes and other consumer devices. J2SE is aimed at application and Web developers, while J2EE is aimed at those producing distributed enterprise applications.
Most Web users come across Java as Applets, intended to be downloaded with, and run within, a Web page. Sun originally released the HotJava browser with Java. Written in Java, it's a Web browser with a built in JVM. Both Netscape and Internet Explorer now include a JVM.
Running any downloaded program is insecure and Applets are therefore constrained to a Sandbox (unlike ActiveX). The Sandbox denies Java Applets direct access to the underlying hardware and OS. This enables end users to trust them. Applets cannot be run alone. Applets are simply a subset of Java programs, not intrinsically different.
In contrast, full blown Java applications are designed to be loaded and run locally with full access to local hardware and software via the JVM. Though there is a security model for Java applications based on policies which can restrict an application's permissions for network, file or directory access and so on.
Java has proved particularly popular for server side applications, thus the name, Servlets. In practice, a Servlet is a program which runs within a Web server similar to the way an Applet runs in a browser. You'd use one instead of a Perl CGI script, for example.
It's worth noting JavaScript isn't Java, it was developed as an interpreted HTML scripting language by Netscape to enable a greater degree of user/page interaction.
Java is an object oriented language. The underlying technology for implementing Java objects is JavaBeans. These are objects designed for intra-process communication. In effect, you bolt JavaBeans together to create Java applications.
In constrast, EJB - Enterprise JavaBeans - are objects designed for inter-process communication. EJBs support distributed processing. It's a fairly new and complex technology and quite distinct from JavaBeans despite the repeat of the name. Enterprise Java technologies are discussed more fully below.
Classes, Compilers
A Java application will consist of Java class files plus data files such as images and any other components. With the advent of JavaBeans, the JAR - Java Archive - file format arrived. Based on the ZIP format and using LZW compression, a JAR file is a convenient way to distribute a Java application.
As far as Java developers are concerned, the J2SDK - Java 2 Developer Kit - is the current standard. There are also Integrated Development Environments implemented as wrappers around the J2SDK. The main J2SDK components can be conveniently divided into tools, class libraries, demo programs and class library source code.
While all Java programs are implemented as a class file, the JFC - Java Foundation Classes - in J2SDK are often referred to as Java APIs - Application Programming Interfaces. These are what enable Java applications to be architecturally neutral. The JFCs are basic to Java's portability.
Java's J2SDK provides command line tools. These include the Java compiler, called javac, the run time environment containing the Java bytecode interpreter, which is - logically enough - called java, a debugger called jdb, javaviewer for running applets and javadoc for document generation.
Java programs are saved with a .java filetype and compiled to a .class file. Class files can be grouped together in Packages for convenience and in practice any class file not in a Package is assumed to be in the default Package.
Java's class files embody Java technology, and are constantly being extended. One of the more exciting recent additions to the JFC is the Swing library. This enables you to easily generate consistent graphical user interfaces in Java. Previously, you had to use AWT, the Abstract Windowing Toolbox. All you need to know about it is that it wasn't up to the job and, specifically, applications using it exhibited different behaviours on different platforms.
And More
EJBs are one of the main components of J2EE - Java 2 Platform, Enterprise Edition. Other important components include JDBC - Java Database Connectivity. This implements connection to various database systems via a Driver class.
RMI - Remote Method Invocation - provides a straightforward support for distributed computing provided both clients and servers are also written in Java.
For situations where the client or server isn't Java based, Sun provides Java IDL - Interface Description Language. This is a CORBA based solution which includes a built in ORB - Object Request Broker. Such solutions are also available from third party developers.
JNDI - Java Naming and Directory Interface - supports network directory services including NIS, LDAP and NDS as well as for RMI and CORBA directory services.
JMS - Java Messaging Service - supports networked messaging services. In practice, this appears to be little used. Possibly because a separate JMS is necessary for each, vendor specific, messaging service.
Sun is trying to extend Java into every area of computing life - so expect JIVE - Java Interpersonal Relation Interface RSN. In the meantime, the Java technologies below are already available.
Java Plug-in Software enables you to tell applets or JavaBeans on enterprise intranet Web pages to use JRE - Java 2 Runtime Environment - instead of the web browser's built in VM.
The Java Card specifications puts Java to run on Smart Cards and memory limited devices. This enables you to write Smart Card applications which will run on different Smart Card technology - as long as it also uses the Java Card. To develop Java Card apps you need the JCAE - Java Card Application Environment - which Sun normally licenses to OEMs.
PersonalJava is an application environment for those developing applications for personal devices with network connection capabilities. It's even available for Windows CE.
Which brings us to the most hyped and least used Java technology, Jini, which oddly isn't an acronym. Jini is designed to enable hardware devices to recognise and work with each other automatically.
Although we've by no means exhausted even Sun's Java technologies, and haven't touched on any from third party vendors, this should be more than enough to get you through the job interview.