SlideShare a Scribd company logo
1 of 357
Download to read offline
1


     Learn Java/J2EE core concepts and key areas


                        With


Java/J2EE Job Interview Companion


                         By

                K.Arulkumaran
                       &
                  A.Sivayini




              Technical Reviewers

                   Craig Malone
                  Stuart Watson
               Arulazi Dhesiaseelan
                  Lara D’Albreo




        Cover Design, Layout, & Editing

                     A.Sivayini




               Acknowledgements

                    A. Sivayini
         Mr. & Mrs. R. Kumaraswamipillai
2


                                                        Java/J2EE
                                                Job Interview Companion


                                      Copy Right 2005-2007 ISBN 978-1-4116-6824-9



    The author has made every effort in the preparation of this book to ensure the accuracy of the information. However,
    information in this book is sold without warranty either expressed or implied. The author will not be held liable for any
                       damages caused or alleged to be caused either directly or indirectly by this book.




         Please e-mail feedback & corrections (technical, grammatical and/or spelling) to
                                 java-interview@hotmail.com




First Edition (220+ Q&A): Dec 2005
Second Edition (400+ Q&A): March 2007
3

Outline


SECTION     DESCRIPTION

            What this book will do for you?

            Motivation for this book

            Key Areas index

SECTION 1   Interview questions and answers on:

            Java

                    Fundamentals
                    Swing
                    Applet
                    Performance and Memory issues
                    Personal and Behavioral/Situational
                    Behaving right in an interview
                    Key Points

SECTION 2   Interview questions and answers on:

            Enterprise Java

                    J2EE Overview
                    Servlet
                    JSP
                    JDBC / JTA
                    JNDI / LDAP
                    RMI
                    EJB
                    JMS
                    XML
                    SQL, Database, and O/R mapping
                    RUP & UML
                    Struts
                    Web and Application servers.
                    Best practices and performance considerations.
                    Testing and deployment.
                    Personal and Behavioral/Situational
                    Key Points

SECTION 3   Putting it all together section.

            How would you go about…?

            1.     How would you go about documenting your Java/J2EE application?

            2.     How would you go about designing a Java/J2EE application?

            3.     How would you go about identifying performance problems and/or memory leaks in your Java
                   application?

            4.     How would you go about minimizing memory leaks in your Java/J2EE application?

            5.     How would you go about improving performance of your Java/J2EE application?

            6.     How would you go about identifying any potential thread-safety issues in your Java/J2EE
                   application?

            7.     How would you go about identifying any potential transactional issues in your Java/J2EE
4

                 application?

            8.   How would you go about applying the Object Oriented (OO) design concepts in your Java/J2EE
                 application?

            9.   How would you go about applying the UML diagrams in your Java/J2EE project?

            10. How would you go about describing the software development processes you are familiar with?

            11. How would you go about applying the design patterns in your Java/J2EE application?

            12. How would you go about designing a Web application where the business tier is on a separate
                machine from the presentation tier. The business tier should talk to 2 different databases and your
                design should point out the different design patterns?

            13. How would you go about determining the enterprise security requirements for your Java/J2EE
                application?

            14. How would you go about describing the open source projects like JUnit (unit testing), Ant (build
                tool), CVS (version control system) and log4J (logging tool) which are integral part of most
                Java/J2EE projects?

            15. How would you go about describing Service Oriented Architecture (SOA) and Web services?


SECTION 4   Emerging Technologies/Frameworks

                    Test Driven Development (TDD).

                    Aspect Oriented Programming (AOP).

                    Inversion of Control (IoC) (Also known as Dependency Injection).

                    Annotations or attributes based programming (xdoclet etc).

                    Spring framework.

                    Hibernate framework.

                    EJB 3.0.

                    JavaServer Faces (JSF) framework.

SECTION 5   Sample interview questions …

                    Java

                    Web Components

                    Enterprise

                    Design

                    General

            GLOSSARY OF TERMS

            RESOURCES

            INDEX
5

Table of contents


Outline_________________________________________________________________________________________ 3
Table of contents ________________________________________________________________________________ 5
What this book will do for you? ____________________________________________________________________ 7
Motivation for this book __________________________________________________________________________ 8
Key Areas Index ________________________________________________________________________________ 11
Java – Interview questions & answers _____________________________________________________________ 13
  Java – Fundamentals _____________________________________________________________________________________ 14
  Java – Swing ____________________________________________________________________________________________ 69
  Java – Applet____________________________________________________________________________________________ 76
  Java – Performance and Memory issues _____________________________________________________________________ 78
  Java – Personal and Behavioral/Situational __________________________________________________________________ 83
  Java – Behaving right in an interview________________________________________________________________________ 89
  Java – Key Points ________________________________________________________________________________________ 91

Enterprise Java – Interview questions & answers ____________________________________________________ 94
  Enterprise - J2EE Overview ________________________________________________________________________________ 95
  Enterprise - Servlet ______________________________________________________________________________________ 108
  Enterprise - JSP ________________________________________________________________________________________ 126
  Enterprise – JDBC & JTA _________________________________________________________________________________ 145
  Enterprise – JNDI & LDAP ________________________________________________________________________________ 155
  Enterprise - RMI ________________________________________________________________________________________ 159
  Enterprise – EJB 2.x _____________________________________________________________________________________ 163
  Enterprise - JMS ________________________________________________________________________________________ 180
  Enterprise - XML ________________________________________________________________________________________ 190
  Enterprise – SQL, Database, and O/R mapping _______________________________________________________________ 197
  Enterprise - RUP & UML __________________________________________________________________________________ 206
  Enterprise - Struts_______________________________________________________________________________________ 214
  Enterprise - Web and Application servers ___________________________________________________________________ 218
  Enterprise - Best practices and performance considerations ___________________________________________________ 222
  Enterprise – Logging, testing and deployment _______________________________________________________________ 225
  Enterprise – Personal and Behavioral/Situational_____________________________________________________________ 228
  Enterprise – Software development process _________________________________________________________________ 230
  Enterprise – Key Points __________________________________________________________________________________ 233

How would you go about…?_____________________________________________________________________ 238
  Q 01:   How would you go about documenting your Java/J2EE application? FAQ ________________________________ 239

  Q 02:   How would you go about designing a Java/J2EE application? FAQ _____________________________________ 240

  Q 03:   How would you go about identifying performance and/or memory issues in your Java/J2EE application? FAQ _ 243

  Q 04:   How would you go about minimizing memory leaks in your Java/J2EE application? FAQ __________________ 244

  Q 05:   How would you go about improving performance in your Java/J2EE application? FAQ _____________________ 244

  Q 06:   How would you go about identifying any potential thread-safety issues in your Java/J2EE application? FAQ __ 245

  Q 07:   How would you go about identifying any potential transactional issues in your Java/J2EE application? FAQ __ 246
6

    Q 08:    How would you go about applying the Object Oriented (OO) design concepts in your Java/J2EE application? FAQ
             247
    Q 09:    How would you go about applying the UML diagrams in your Java/J2EE project? FAQ _____________________249

    Q 10:    How would you go about describing the software development processes you are familiar with? FAQ ________251
    Q 11:    How would you go about applying the design patterns in your Java/J2EE application? _____________________253
    Q 12:    How would you go about designing a Web application where the business tier is on a separate machine from the
    presentation tier. The business tier should talk to 2 different databases and your design should point out the different
    design patterns? FAQ ____________________________________________________________________________________286
    Q 13:    How would you go about determining the enterprise security requirements for your Java/J2EE application? ___287
    Q 14:     How would you go about describing the open source projects like JUnit (unit testing), Ant (build tool), CVS
    (version control system) and log4J (logging tool) which are integral part of most Java/J2EE projects? ________________292
    Q 15:    How would you go about describing Service Oriented Architecture (SOA) and Web services? FAQ ___________299

Emerging Technologies/Frameworks… ____________________________________________________________311
    Q 01:    What is Test Driven Development (TDD)? FAQ _______________________________________________________312
    Q 02:    What is the point of Test Driven Development (TDD)? What do you think of TDD?__________________________313
    Q 03:    What is aspect oriented programming (AOP)? Do you have any experience with AOP? _____________________313
    Q 04:    What are the differences between OOP and AOP? ____________________________________________________317
    Q 05:    What are the benefits of AOP?_____________________________________________________________________317
    Q 06:    What is attribute or annotation oriented programming? FAQ ___________________________________________317

    Q 07:    What are the pros and cons of annotations over XML based deployment descriptors? FAQ _________________318
    Q 08:    What is XDoclet? ________________________________________________________________________________319
    Q 09:    What is inversion of control (IoC) (also known more specifically as dependency injection)? FAQ_____________319

    Q 10:    What are the different types of dependency injections? FAQ ___________________________________________321

    Q 11:    What are the benefits of IoC (aka Dependency Injection)? FAQ _________________________________________322
    Q 12:    What is the difference between a service locator pattern and an inversion of control pattern? _______________323
    Q 13:    Why dependency injection is more elegant than a JNDI lookup to decouple client and the service? ___________323
    Q 14:    Explain Object-to-Relational (O/R) mapping? ________________________________________________________323
    Q 15:    Give an overview of hibernate framework? FAQ ______________________________________________________324
    Q 16:    Explain some of the pitfalls of Hibernate and explain how to avoid them? Give some tips on Hibernate best
    practices? FAQ _________________________________________________________________________________________333

    Q 17:    Give an overview of the Spring framework? What are the benefits of Spring framework? FAQ _______________334

    Q 18:    How would EJB 3.0 simplify your Java development compared to EJB 1.x, 2.x ? FAQ ______________________337
    Q 19:    Briefly explain key features of the JavaServer Faces (JSF) framework? __________________________________339
    Q 20:     How would the JSF framework compare with the Struts framework? How would a Spring MVC framework compare
    with Struts framework?___________________________________________________________________________________341

Sample interview questions… ____________________________________________________________________344
    Java___________________________________________________________________________________________________345
    Web components________________________________________________________________________________________345
    Enterprise ______________________________________________________________________________________________345
    Design_________________________________________________________________________________________________347
    General ________________________________________________________________________________________________347

GLOSSARY OF TERMS__________________________________________________________________________348
RESOURCES __________________________________________________________________________________350
INDEX ________________________________________________________________________________________352
7

What this book will do for you?

Have you got the time to read 10 or more books and articles to add value prior to the interview? This book has been
written mainly from the perspective of Java/J2EE job seekers and interviewers. There are numerous books and articles
on the market covering specific topics like Java, J2EE, EJB, Design Patterns, ANT, CVS, Multi-Threading, Servlets, JSP,
emerging technologies like AOP (Aspect Oriented Programming), Test Driven Development (TDD), Dependency Injection
Dl (aka IoC – Inversion of Control) etc. But from an interview perspective it is not possible to brush up on all these books
where each book usually has from 300 pages to 600 pages. The basic purpose of this book is to cover all the core
concepts and key areas, which all Java/J2EE developers, designers and architects should be conversant with to perform
well in their current jobs and to launch a successful career by doing well at interviews. The interviewer can also use this
book to make sure that they hire the right candidate depending on their requirements. This book contains a wide range of
topics relating to Java/J2EE development in a concise manner supplemented with diagrams, tables, sample codes and
examples. This book is also appropriately categorized to enable you to choose the area of interest to you.

This book will assist all Java/J2EE practitioners to become better at what they do. Usually it takes years to understand all
the core concepts and key areas when you rely only on your work experience. The best way to fast track this is to read
appropriate technical information and proactively apply these in your work environment. It worked for me and hopefully it
will work for you as well. I was also at one stage undecided whether to name this book “Java/J2EE core concepts and
key areas” or “Java/J2EE Job Interview Companion”. The reason I chose “Java/J2EE Job Interview Companion” is
because the core concepts and key areas discussed in this book helped me to be successful in my interviews, helped me
to survive and succeed at my work regardless what my job (junior developer, senior developer, technical lead, designer,
contractor etc) was and also gave me thumbs up in code reviews. This book also has been set out as a handy reference
guide and a roadmap for building enterprise Java applications.
8

Motivation for this book

I started using Java in 1999 when I was working as a junior developer. During those two years as a permanent employee,
I pro-actively spent many hours studying the core concepts behind Java/J2EE in addition to my hands on practical
experience. Two years later I decided to start contracting. Since I started contracting in 2001, my career had a much-
needed boost in terms of contract rates, job satisfaction, responsibility etc. I moved from one contract to another with a
view of expanding my skills and increasing my contract rates.

In the last 5 years of contracting, I have worked for 5 different organizations both medium and large on 8 different
projects. For each contract I held, on average I attended 6-8 interviews with different companies. In most cases multiple
job offers were made and consequently I was in a position to negotiate my contract rates and also to choose the job I
liked based on the type of project, type of organization, technology used, etc. I have also sat for around 10 technical tests
and a few preliminary phone interviews.

The success in the interviews did not come easily. I spent hours prior to each set of interviews wading through various
books and articles as a preparation. The motivation for this book was to collate all this information into a single book,
which will save me time prior to my interviews but also can benefit others in their interviews. What is in this book has
helped me to go from just a Java/J2EE job to a career in Java/J2EE in a short time. It has also given me the job
security that ‘I can find a contract/permanent job opportunity even in the difficult job market’.

I am not suggesting that every one should go contracting but by performing well at the interviews you can be in a position
to pick the permanent role you like and also be able to negotiate your salary package. Those of you who are already in
good jobs can impress your team leaders, solution designers and/or architects for a possible promotion by demonstrating
your understanding of the key areas discussed in this book. You can discuss with your senior team members about
performance issues, transactional issues, threading issues (concurrency issues) and memory issues. In most of
my previous contracts I was in a position to impress my team leads and architects by pinpointing some of the critical
performance, memory, transactional and threading issues with the code and subsequently fixing them. Trust me it is not
hard to impress someone if you understand the key areas.


For example:

    Struts action classes are not thread-safe (Refer Q113 in Enterprise section).
    JSP variable declaration is not thread-safe (Refer Q34 in Enterprise section).
    Valuable resources like database connections should be closed properly to avoid any memory and performance
    issues (Refer Q45 in Enterprise section).
    Throwing an application exception will not rollback the transaction in EJB. (Refer Q77 in Enterprise section).


The other key areas, which are vital to any software development, are a good understanding of some of key design
concepts, design patterns, and a modeling language like UML. These key areas are really worthy of a mention in your
resume and interviews.

For example:

    Know how to use inheritance, polymorphism and encapsulation (Refer Q7, Q8, Q9, and Q10 in Java section.).
    Why use design patterns? (Refer Q5 in Enterprise section).
    Why is UML important? (Refer Q106 in Enterprise section).



If you happen to be in an interview with an organization facing serious issues with regards to their Java application
relating to memory leaks, performance problems or a crashing JVM etc then you are likely to be asked questions on
these topics. Refer Q72 – Q74 in Java section and Q123, Q125 in Enterprise section.


If you happen to be in an interview with an organization which is working on a pilot project using a different development
methodology like agile methodology etc or has just started adopting a newer development process or methodology
then you are likely to be asked questions on this key area.

If the team lead/architect of the organization you are being interviewed for feels that the current team is lacking skills in
the key areas of design concepts and design patterns then you are likely to be asked questions on these key areas.
9

Another good reason why these key areas like transactional issues, design concepts, design patterns etc are vital are
because solution designers, architects, team leads, and/or senior developers are usually responsible for conducting the
technical interviews. These areas are their favorite topics because these are essential to any software development.

Some interviewers request you to write a small program during interview or prior to getting to the interview stage. This is
to ascertain that you can code using object oriented concepts and design patterns. So I have included a coding key area
to illustrate what you need to look for while coding.

          Apply OO concepts like inheritance, polymorphism and encapsulation: Refer Q10 in Java section.
          Program to interfaces not to implementations: Refer Q12, Q17 in Java section.
          Use of relevant design patterns: Refer Q11, Q12 in How would you go about… section.
          Use of Java collections API and exceptions correctly: Refer Q16 and Q39 in Java section.
          Stay away from hard coding values: Refer Q05 in Java section.


       L anguage
     F u n d a m e n ta ls                                H o w m a n y b o o k s d o I h a v e to re a d to                                        P e rfo rm a n c e
                                                          u n d e rs ta n d a n d p u t to g e th e r a ll th e s e                                     Is s u e s
                                                          k e y a re a s ?

                                                          H o w m a n y y e a rs o f e x p e rie n c e
                                                          s h o u ld I h a v e to u n d e rs ta n d a ll th e s e
        S p e c ific a tio n                              k e y a re a s ?                                                                                  E x c e p tio n
        F u n d a m e n ta ls                                                                                                                               H a n d lin g
                                                          W ill th e s e k e y a re a s h e lp m e
                                                          p ro g re s s in m y c a re e r?
                                                                                                                             S o ftw a re
                                                                                                                           D e v e lo p m e n t
                                                                                                                               P ro c e s s
                                                          W ill th e s e k e y a re a s h e lp m e c u t
                                                          q u a lity c o d e ?                                                                              D e s ig n
       D e s ig n                                                                                                                                          C o n c e p ts
                                      S E c u rity
       P a tte rn s

                                                                                                                           T ra n s a c tio n a l
                                                                                                                               Is s u e s
                                                                                                                                                               B est
   C o n c u rre n c y           S c a la b ility                                                                                                            P ra c tic e s
      Is s u e s                   Iss u e s


                                                                                                                                                        M e m o ry
                                                                                                                                                        Is su e s
       C O d in g




                                LF                  DC         CI                  PI                SE               EH                 SD



                                DP                  SF        MI                   SI                 TI              BP                CO



                                                     This book aims to solve the above dilemma.

My dad keeps telling me to find a permanent job (instead of contracting), which in his view provides better job security but
I keep telling him that in my view in Information Technology the job security is achieved only by keeping your knowledge
and skills sharp and up to date. The 8 contract positions I held over the last 5.5 years have given me broader experience
in Java/J2EE and related technologies. It also kept me motivated since there was always something new to learn in each
assignment, and not all companies will appreciate your skills and expertise until you decide to leave. Do the following
statements sound familiar to you when you hand in your resignation or decide not to extend your contract after getting
another job offer? “Can I tempt you to come back? What can I do to keep you here?” etc. You might even think why you
waited so long. The best way to make an impression in any organizations is to understand and proactively apply and
10

resolve the issues relating to the Key Areas discussed in this book. But be a team player, be tactful and don’t be
critical of everything, do not act in a superior way and have a sense of humor.


                “Technical skills must be complemented with good business and interpersonal skills.”



                                                                                                 Describe a time when you
                                                                                                were faced with a stressful
                                                                                                situation that demonstrated
              Give me an example                                                                     your coping skills?
              of a time when you
              set a goal and were
               able to achieve it?

                                                                 Development team
                                                       You


                                                  Knowledge/understanding of the business.
                                           Ability to communicate and interact effectively with the
                                                         business users/customers.
                                           Ability to look at things from the user's perspective as
                                                 opposed to only technology perspective.
                                           Ability to persuade/convince business with alternative
                                                                  solutions.
                                              Ability to communicate effectively with your fellow
                                           developers, immediate and senior management.                      Immediate
          Business users/                     Ability to work in a team as well as independently.           management
         External customers                             Problem solving/analytical skills.
                                                              Organizational skills.
                                        Ability to cope with difficult situations like stress due to work
                                     load, deadlines etc and manage or deal with difficult people.
                                                  Being a good listener with the right attitude.


                                                                                                            Give me an example of a time you
  Describe a time when you had to                                                                           motivated others? Or dealt with a
 work with others in the organization                                                                               difficult person?
  to accomplish the organizational
               goals?


                                                             Senior management



IMPORTANT: Technical skills alone are not sufficient for you to perform well in your interviews and progress in your
career. Your technical skills must be complemented with business skills (i.e. knowledge/understanding of the business,
ability to communicate and interact effectively with the business users/customers, ability to look at things from the users’
perspective as opposed to only from technology perspective, ability to persuade/convince business with alternative
solutions, which can provide a win/win solution from users’ perspective as well as technology perspective), ability to
communicate effectively with your fellow developers, immediate and senior management, ability to work in a team as well
as independently, problem solving/analytical skills, organizational skills, ability to cope with difficult situations like stress
due to work load, deadlines etc and manage or deal with difficult people, being a good listener with the right attitude (It is
sometimes possible to have “I know it all attitude”, when you have strong technical skills. These are discussed in “Java
– Personal” and “Enterprise Java – Personal” sub-sections with examples.


Quick Read guide: It is recommended that you go through all the questions in all the sections (all it takes is to read a
few questions & answers each day) but if you are pressed for time or would like to read it just before an interview then
follow the steps shown below:

-- Read/Browse all questions marked as “FAQ” in all four sections.
-- Read/Browse Key Points in Java and Enterprise Java sections.
11

Key Areas Index

I have categorized the core concepts and issues into 14 key areas as listed below. These key areas are vital for any
good software development. This index will enable you to refer to the questions based on key areas. Also note that each
question has an icon next to it to indicate which key area or areas it belongs to. Additional reading is recommended for
beginners in each of the key areas.


 Key Areas               icon    --------------------------------------- Question Numbers ------------------------------------------------

                                      Java section                    Enterprise Java section            How               Emerging
                                                                                                       would you        Technologies
                                                                                                          go            / Frameworks
                                                                                                       about…?
 Language                       Q1-Q6, Q12-Q16, Q18-              -                                                     Q10, Q15,
 Fundamentals                   Q24, Q26-Q33, Q35-                                                                      Q17, Q19
                         LF
                                Q38, Q41-Q50, Q53-Q71

 Specification                  -                                 Q1, Q2, Q4, Q6, Q7-Q15,              Q15
 Fundamentals                                                     Q17-Q19, Q22, Q26-Q33,
                                                                  Q35-Q38, Q41, Q42, Q44,
                                                                  Q46-Q81, Q89-Q93, Q95-
                         SF
                                                                  Q97, Q99, 102, Q110,
                                                                  Q112-Q115, Q118-Q119,
                                                                  Q121, Q126, Q127, Q128

 Design Concepts                Q1, Q7-Q12, Q15, Q26,             Q2, Q3, Q19, Q20, Q21,               Q02, Q08,        Q3 - Q13,
                                Q22, Q56                          Q31, Q45, Q91, Q94, Q98,             Q09, Q15         Q13, Q14,
                         DC                                       Q101, Q106, Q107, Q108,                               Q16, Q17,
                                                                  Q109, Q111                                            Q18, Q20

 Design Patterns                Q12, Q16, Q24, Q36,               Q5, Q5, Q22, Q24, Q25,               Q11, Q12         Q9 - Q13
                                Q51, Q52, Q58, Q63,               Q41, Q83, Q84, Q85, Q86,
                         DP     Q75                               Q87, Q88, Q110, Q111,
                                                                  Q116

 Transactional                  -                                 Q43, Q71, Q72, Q73, Q74,             Q7
 Issues                   TI                                      Q75, Q77, Q78, Q79

 Concurrency Issues             Q15, Q17, Q21, Q34,               Q16, Q34, Q72, Q78,                  Q6
                          CI    Q42, Q46, Q62                     Q113

 Performance Issues             Q15, Q17,Q20-Q26,                 Q10, Q16, Q43, Q45, Q46,             Q3, Q5
                                Q46, Q62, Q72                     Q72, Q83-Q88, Q93, Q97,
                          PI                                      Q98, Q100, Q102, Q123,
                                                                  Q125, Q128

 Memory Issues                  Q26, Q34, Q37,Q38,                Q45, Q93                             Q3, Q4
                         MI     Q42, Q51, Q73, Q74

 Scalability Issues             Q23, Q24                          Q20, Q21, Q120, Q122
                          SI

 Exception Handling             Q39, Q40                          Q76, Q77
                         EH

 Security                       Q10, Q35, Q70                     Q12, Q13, Q23, Q35, Q46,             Q13
                         SE                                       Q51, Q58, Q81, Q92

 Best Practices                 Q17, Q25, Q39, Q72,               Q10, Q16, Q39, Q40, Q41,             Q1, Q2
                         BP     Q73                               Q46, Q82, Q124, Q125
12

    Software                          -                                Q103-Q109, Q129, Q130,             Q1, Q9,          Q1, Q2
    Development               SD                                       Q132, Q136                         Q10, Q14
    Process
    Coding1                           Q05, Q10, Q12, Q14 –             Q10, Q18, Q21, Q23, Q36,           Q11, Q12
                                      Q21, Q23, Q25, Q26,              Q38, Q42, Q43, Q45, Q74,
                              CO      Q33, Q35, Q39, Q51,              Q75, Q76, Q77, Q112,
                                      Q52, Q55                         Q114, Q127, Q128

    Frequently Asked                  Q1, Q6, Q7, Q9, Q10,             Q1, Q2, Q3, Q7, Q10, Q11,          Q1, Q2,          Q1, Q6, Q7,
    Questions                         Q12, Q13, Q14, Q15,              Q12, Q13, Q16, Q19, Q22,           Q3, Q4,          Q9, Q10, Q11,
                                      Q16, Q18, Q20, Q21,              Q24, Q25, Q27, Q28, Q30,           Q5, Q6,          Q15, Q16,
                                      Q22, Q23, Q27, Q28,              Q31, Q32, Q34, Q35, Q36,           Q7, Q8,          Q17, Q18
                                      Q29, Q30, Q31, Q32,              Q39, Q40, Q41, Q42, Q43,           Q9, Q10,
                                      Q36, Q37, Q43, Q45,              Q45, Q46, Q48, Q49, Q50,           Q12, Q15
                                      Q46, Q48, Q51, Q52,              Q52, Q53, Q61, Q63, Q65,
                                      Q55, Q58, Q60, Q62,              Q66, Q69, Q70, Q71, Q72,
                             FAQ      Q63, Q64, Q67, Q68,              Q73, Q76, Q77, Q82, Q83,
                                      Q69, Q70, Q71                    Q84, Q85, Q86, Q87, Q90,
                                      Q72 – Q86                        Q91, Q93, Q95, Q96, Q97,
                                                                       Q98, Q100, Q101, Q102,
                                                                       Q107, Q108, Q110, Q113,
                                                                       Q115, Q116, Q118, Q123,
                                                                       Q124, Q125, Q126, Q129,
                                                                       Q130, Q131, Q133, Q134,
                                                                       Q135, Q136.

1
  Some interviewers request you to write a small program during interview or prior to getting to the interview stage. This is to ascertain
that you can code using object oriented concepts and design patterns. I have included a coding key area to illustrate what you need to
look for while coding. Unlike other key areas, the CO is not always shown against the question but shown above the actual section of
relevance within a question.
Java                                                            13




                              SECTION ONE



                              Java – Interview questions & answers


                                 Language Fundamentals                      LF
                       K
                       E
                                 Design Concepts DC
                       Y         Design Patterns DP
                                 Concurrency Issues CI
                       A         Performance Issues PI
                       R         Memory Issues MI
                       E         Exception Handling EH
                       A
                       S
                                 Security SE
                                 Scalability Issues SI
                                 Coding1 CO




                              FAQ - Frequently Asked Questions




1
 Unlike other key areas, the CO is not always shown against the question but shown above the actual content of relevance within a
question.
14                                              Java - Fundamentals


Java – Fundamentals


Q 01: Give a few reasons for using Java? LF DC FAQ
A 01: Java is a fun language. Let’s look at some of the reasons:

           Built-in support for multi-threading, socket communication, and memory management (automatic garbage
           collection).

           Object Oriented (OO).

           Better portability than other languages across operating systems.

           Supports Web based applications (Applet, Servlet, and JSP), distributed applications (sockets, RMI, EJB etc)
           and network protocols (HTTP, JRMP etc) with the help of extensive standardized APIs (Application
           Programming Interfaces).


Q 02: What is the main difference between the Java platform and the other software platforms? LF
A 02: Java platform is a software-only platform, which runs on top of other hardware-based platforms like UNIX, NT etc.




       The Java platform has 2 components:

           Java Virtual Machine (JVM) – ‘JVM’ is a software that can be ported onto various hardware platforms. Byte
           codes are the machine language of the JVM.

           Java Application Programming Interface (Java API) – set of classes written using the Java language and run
           on the JVM.


Q 03: What is the difference between C++ and Java? LF
A 03: Both C++ and Java use similar syntax and are Object Oriented, but:

           Java does not support pointers. Pointers are inherently tricky to use and troublesome.

           Java does not support multiple inheritances because it causes more problems than it solves. Instead Java
           supports multiple interface inheritance, which allows an object to inherit many method signatures from
           different interfaces with the condition that the inheriting object must implement those inherited methods. The
           multiple interface inheritance also allows an object to behave polymorphically on those methods. [Refer Q9
           and Q10 in Java section.]

           Java does not support destructors but adds a finalize() method. Finalize methods are invoked by the garbage
           collector prior to reclaiming the memory occupied by the object, which has the finalize() method. This means
           you do not know when the objects are going to be finalized. Avoid using finalize() method to release non-
           memory resources like file handles, sockets, database connections etc because Java has only a finite
           number of these resources and you do not know when the garbage collection is going to kick in to release
           these resources through the finalize() method.

           Java does not include structures or unions because the traditional data structures are implemented as an
           object oriented framework (Java Collections Framework – Refer Q16, Q17 in Java section).
Java - Fundamentals                                                                   15

           All the code in Java program is encapsulated within classes therefore Java does not have global variables or
           functions.

           C++ requires explicit memory management, while Java includes automatic garbage collection. [Refer Q37 in
           Java section].


Q 04: What are the usages of Java packages? LF
A 04: It helps resolve naming conflicts when different packages have classes with the same names. This also helps you
       organize files within your project. For example: java.io package do something related to I/O and java.net
       package do something to do with network and so on. If we tend to put all .java files into a single package, as the
       project gets bigger, then it would become a nightmare to manage all your files.

       You can create a package as follows with package keyword, which is the first keyword in any Java program
       followed by import statements. The java.lang package is imported implicitly by default and all the other packages
       must be explicitly imported.

       package com.xyz.client ;
       import java.io.File;
       import java.net.URL;



Q 05: Explain Java class loaders? If you have a class in a package, what do you need to do to run it? Explain dynamic
       class loading? LF
A 05: Class loaders are hierarchical. Classes are introduced into the JVM as they are referenced by name in a class that
       is already running in the JVM. So, how is the very first class loaded? The very first class is especially loaded with
       the help of static main( ) method declared in your class. All the subsequently loaded classes are loaded by the
       classes, which are already loaded and running. A class loader creates a namespace. All JVMs include at least one
       class loader that is embedded within the JVM called the primordial (or bootstrap) class loader. Now let’s look at
       non-primordial class loaders. The JVM has hooks in it to allow user defined class loaders to be used in place of
       primordial class loader. Let us look at the class loaders created by the JVM.

       CLASS LOADER        reloadable?           Explanation
        Bootstrap          No                    Loads JDK internal classes, java.* packages. (as defined in the sun.boot.class.path
        (primordial)                             system property, typically loads rt.jar and i18n.jar)

        Extensions         No                    Loads jar files from JDK extensions directory (as defined in the java.ext.dirs system
                                                 property – usually lib/ext directory of the JRE)

        System             No                    Loads classes from system classpath (as defined by the java.class.path property, which
                                                 is set by the CLASSPATH environment variable or –classpath or –cp command line
                                                 options)



                                                                JVM class loaders
                             Bootstrap
                            (primordial)
                                                                  Classes loaded by Bootstrap class loader have no visibility into classes
                           (rt.jar, i18.jar)
                                                                  loaded by its descendants (ie Extensions and Systems class loaders).

                               Extensions                         The classes loaded by system class loader have visibility into classes loaded
                                (lib/ext)                         by its parents (ie Extensions and Bootstrap class loaders).

                                                                  If there were any sibling class loaders they cannot see classes loaded by
                                  System                          each other. They can only see the classes loaded by their parent class
                               (-classpath)                       loader. For example Sibling1 class loader cannot see classes loaded by
                                                                  Sibling2 class loader

                   Sibling1                     Sibling2          Both Sibling1 and Sibling2 class loaders have visibilty into classes loaded
                 classloader                  classloader         by their parent class loaders (eg: System, Extensions, and Bootstrap)



       Class loaders are hierarchical and use a delegation model when loading a class. Class loaders request their
       parent to load the class first before attempting to load it themselves. When a class loader loads a class, the child
       class loaders in the hierarchy will never reload the class again. Hence uniqueness is maintained. Classes loaded
16                                                   Java - Fundamentals

     by a child class loader have visibility into classes loaded by its parents up the hierarchy but the reverse is not true
     as explained in the above diagram.

     Q. What do you need to do to run a class with a main() method in a package?

     Example: Say, you have a class named “Pet” in a project folder “c:myProject” and package named
     com.xyz.client, will you be able to compile and run it as it is?

     package com.xyz.client;

     public class Pet {
         public static void main(String[] args) {
              System.out.println("I am found in the classpath");
         }
     }

     To run      c:myProject> java com.xyz.client.Pet

     The answer is no and you will get the following exception: “Exception in thread "main" java.lang.-
     NoClassDefFoundError: com/xyz/client/Pet”. You need to set the classpath. How can you do that? One of the
     following ways:

     1.   Set the operating system CLASSPATH environment variable to have the project folder “c:myProject”. [Shown
          in the above diagram as the System –classpath class loader]
     2.   Set the operating system CLASSPATH environment variable to have a jar file “c:/myProject/client.jar”, which
          has the Pet.class file in it. [Shown in the above diagram as the System –classpath class loader].
     3.   Run it with –cp or –classpath option as shown below:

          c:>java –cp  c:/myProject com.xyz.client.Pet
                        OR
          c:>java -classpath c:/myProject/client.jar com.xyz.client.Pet

     Important: Two objects loaded by different class loaders are never equal even if they carry the same values, which mean a
     class is uniquely identified in the context of the associated class loader. This applies to singletons too, where each class
     loader will have its own singleton. [Refer Q51 in Java section for singleton design pattern]

     Q. Explain static vs. dynamic class loading?
      Static class loading                 Dynamic class loading
      Classes are statically loaded with Java’s     Dynamic loading is a technique for programmatically invoking the functions of a
      “new” operator.                               class loader at run time. Let us look at how to load classes dynamically.

      class MyClass {                               Class.forName (String className); //static method which returns a Class
         public static void main(String args[]) {
            Car c = new Car();                      The above static method returns the class object associated with the class
         }                                          name. The string className can be supplied dynamically at run time. Unlike the
      }                                             static loading, the dynamic loading will decide whether to load the class Car or
                                                    the class Jeep at runtime based on a properties file and/or other runtime
                                                    conditions. Once the class is dynamically loaded the following method returns an
                                                    instance of the loaded class. It’s just like creating a class object with no
                                                    arguments.

                                                    class.newInstance (); //A non-static method, which creates an instance of a
                                                                          //class (i.e. creates an object).

                                                    Jeep myJeep = null ;
                                                    //myClassName should be read from a .properties file or a Constants class.
                                                    // stay away from hard coding values in your program. CO
                                                    String myClassName = "au.com.Jeep" ;
                                                    Class vehicleClass = Class.forName(myClassName) ;
                                                    myJeep = (Jeep) vehicleClass.newInstance();
                                                    myJeep.setFuelCapacity(50);

      A NoClassDefFoundException is                 A ClassNotFoundException is thrown when an application tries to load in a
      thrown if a class is referenced with          class through its string name using the following methods but no definition for the
      Java’s “new” operator (i.e. static loading)   class with the specified name could be found:
      but the runtime system cannot find the
      referenced class.                                     The forName(..) method in class - Class.
                                                            The findSystemClass(..) method in class - ClassLoader.
                                                            The loadClass(..) method in class - ClassLoader.
Java - Fundamentals                                                             17

        Q. What are “static initializers” or “static blocks with no function names”? When a class is loaded, all blocks
        that are declared static and don’t have function name (i.e. static initializers) are executed even before the
        constructors are executed. As the name suggests they are typically used to initialize static fields. CO

        public class StaticInitializer {
           public static final int A = 5;
           public static final int B; //note that it is not    public static final int B = null;
           //note that since B is final, it can be initialized only once.

              //Static initializer block, which is executed only once when the class is loaded.

              static {
                 if(A == 5)
                    B = 10;
                 else
                    B = 5;
              }

              public StaticInitializer(){}            //constructor is called only after static initializer block
        }

        The following code gives an Output of A=5, B=10.

        public class Test {
            System.out.println("A =" + StaticInitializer.A + ", B =" + StaticInitializer.B);
        }



Q 06: What is the difference between constructors and other regular methods? What happens if you do not provide a
        constructor? Can you call one constructor from another? How do you call the superclass’s constructor? LF FAQ
A 06:
            Constructors                                           Regular methods
            Constructors must have the same name as the class      Regular methods can have any name and can be called any number of
            name and cannot return a value. The constructors       times. E.g. for a Pet.class.
            are called only once per creation of an object while
            regular methods can be called many times. E.g. for a   public void Pet(){}   // regular method has a void return type.
            Pet.class
                                                                   Note:      method name is shown starting with an uppercase to
            public Pet() {} // constructor                         differentiate a constructor from a regular method. Better naming
                                                                   convention is to have a meaningful name starting with a lowercase
                                                                   like:

                                                                   public void createPet(){} // regular method has a void return type

        Q. What happens if you do not provide a constructor? Java does not actually require an explicit constructor in
        the class description. If you do not include a constructor, the Java compiler will create a default constructor in the
        byte code with an empty argument. This default constructor is equivalent to the explicit “Pet(){}”. If a class includes
        one or more explicit constructors like “public Pet(int id)” or “Pet(){}” etc, the java compiler does not create the
        default constructor “Pet(){}”.

        Q. Can you call one constructor from another? Yes, by using this() syntax. E.g.

        public Pet(int id) {
            this.id = id;                                     // “this” means this object
        }
        public Pet (int id, String type) {
            this(id);                                         // calls constructor public Pet(int id)
            this.type = type;                                // ”this” means this object
        }

        Q. How to call the superclass constructor? If a class called “SpecialPet” extends your “Pet” class then you can
        use the keyword “super” to invoke the superclass’s constructor. E.g.

        public SpecialPet(int id) {
             super(id);                                      //must be the very first statement in the constructor.
        }

        To call a regular method in the super class use: “super.myMethod( );”. This can be called at any line. Some
        frameworks based on JUnit add their own initialization code, and not only do they need to remember to invoke
18                                               Java - Fundamentals

       their parent's setup() method, you, as a user, need to remember to invoke theirs after you wrote your initialization
       code:
       public class DBUnitTestCase extends TestCase {
         public void setUp() {
           super.setUp();
           // do my own initialization
         }
       }

       public void cleanUp() throws Throwable
       {
            try {
              … // Do stuff here to clean up your object(s).
            }
            catch (Throwable t) {}
            finally{
                super.cleanUp(); //clean up your parent class. Unlike constructors
                                 // super.regularMethod() can be called at any line.
            }
       }



Q 07: What are the advantages of Object Oriented Programming Languages (OOPL)? DC FAQ
A 07: The Object Oriented Programming Languages directly represent the real life objects like Car, Jeep, Account,
       Customer etc. The features of the OO programming languages like polymorphism, inheritance and
       encapsulation make it powerful. [Tip: remember pie which, stands for Polymorphism, Inheritance and
       Encapsulation are the 3 pillars of OOPL]


Q 08: How does the Object Oriented approach improve software development? DC
A 08: The key benefits are:

           Re-use of previous work: using implementation inheritance and object composition.
           Real mapping to the problem domain: Objects map to real world and represent vehicles, customers,
           products etc: with encapsulation.
           Modular Architecture: Objects, systems, frameworks etc are the building blocks of larger systems.

       The increased quality and reduced development time are the by-products of the key benefits discussed above.
       If 90% of the new application consists of proven existing components then only the remaining 10% of the code
       have to be tested from scratch.


Q 09: How do you express an ‘is a’ relationship and a ‘has a’ relationship or explain inheritance and composition? What
       is the difference between composition and aggregation? DC FAQ
A 09: The ‘is a’ relationship is expressed with inheritance and ‘has a’ relationship is expressed with composition. Both
       inheritance and composition allow you to place sub-objects inside your new class. Two of the main techniques for
       code reuse are class inheritance and object composition.


                                       Inheritance [ is a ] Vs Composition [ has a ]

             Building           is a             is a [House is a Building]      has a [House has a Bathroom]
                                                 class Building{                 class House {
                                 has a            .......                            Bathroom room = new Bathroom() ;
                                                 }                                   ....
                                                                                    public void getTotMirrors(){
                                                 class House extends Building{           room.getNoMirrors();
                                 Bathroom         .........                              ....
              House
                                                 }                                  }
                                                                                 }



       Inheritance is uni-directional. For example House is a Building. But Building is not a House. Inheritance uses
       extends key word. Composition: is used when House has a Bathroom. It is incorrect to say House is a
Java - Fundamentals                                                                    19

        Bathroom. Composition simply means using instance variables that refer to other objects. The class House will
        have an instance variable, which refers to a Bathroom object.

        Q. Which one to favor, composition or inheritance? The guide is that inheritance should be only used when
        subclass ‘is a’ superclass.

              Don’t use inheritance just to get code reuse. If there is no ‘is a’ relationship then use composition for code
              reuse. Overuse of implementation inheritance (uses the “extends” key word) can break all the subclasses, if
              the superclass is modified.

              Do not use inheritance just to get polymorphism. If there is no ‘is a’ relationship and all you want is
              polymorphism then use interface inheritance with composition, which gives you code reuse (Refer Q10
              in Java section for interface inheritance).

        What is the difference between aggregation and composition?
         Aggregation                                    Composition
          Aggregation is an association in which one class                Composition is an association in which one class belongs to a
          belongs to a collection. This is a part of a whole              collection. This is a part of a whole relationship where a part
          relationship where a part can exist without a whole.            cannot exist without a whole. If a whole is deleted then all parts are
          For example a line item is a whole and product is a             deleted. For example An order is a whole and line items are parts.
          part. If a line item is deleted then corresponding              If an order is deleted then all corresponding line items for that
          product need not be deleted. So aggregation has a               order should be deleted. So composition has a stronger
          weaker relationship.                                            relationship.




Q 10: What do you mean by polymorphism, inheritance, encapsulation, and dynamic binding? DC SE FAQ
A 10: Polymorphism – means the ability of a single variable of a given type to be used to reference objects of
        different types, and automatically call the method that is specific to the type of object the variable references. In a
        nutshell, polymorphism is a bottom-up method call. The benefit of polymorphism is that it is very easy to add new
        classes of derived objects without breaking the calling code (i.e. getTotArea() in the sample code shown
        below) that uses the polymorphic classes or interfaces. When you send a message to an object even though you
        don’t know what specific type it is, and the right thing happens, that’s called polymorphism. The process used by
        object-oriented programming languages to implement polymorphism is called dynamic binding. Let us look at
        some sample code to demonstrate polymorphism: CO

Sam ple code:
 //client or calling code                                                                                              <<abstract>>
                                                                        For exam ple: given a base                        Shape
 double dim = 5.0; //ie 5 m eters radius or width
 List listShapes = new ArrayList(20);                                   class/interface Shape,
                                                                        polymorphism allows the                       +area() : double
 Shape s = new Circle();                                                program m er to define
 listShapes.add(s); //add circle
                                                                        different area(double
 s = new Square();                                                      dim 1) methods for any               Circle
 listShapes.add(s); //add square                                        number of derived classes                                          Square
                                                                        such as Circle, Square etc.     +area() : double
 getTotArea (listShapes,dim ); //returns 78.5+25.0=103.5
                                                                        N o m atter what shape an                                      +area() : double

 //Later on, if you decide to add a half circle then define             object is, applying the area
 //a HalfCircle class, which extends Circle and then provide an         m ethod to it will return the      H alfC ircle
 //area(). m ethod but your called m ethod getTotArea(...) rem ains     right results.
 //sam e.
                                                                                                        +area() : double
 s = new H alfCircle();                                                 Later on H alfCicle can be
 listShapes.add(s); //add HalfC ircle                                   added without breaking
                                                                        your called code i.e.
 getTotArea (listShapes,dim ); //returns 78.5+25.0+39.25=142.75
                                                                        m ethod getTotalArea(...)                    «interface»
                                                                                                                       Shape
 /** called m ethod: m ethod which adds up areas of various
                                                                                                                   +area() : double
 ** shapes supplied to it.
 **/                                                                    Depending on what the
 public double getTotArea(List listShapes, double dim ){                shape is, appropriate
     Iterator it = listShapes.iterator();                               area(double dim ) m ethod            Circle                    Square
     double totalArea = 0.0;                                            gets called and calculated.
     //loop through different shapes
                                                                        Circle     area is 78.5sqm      +area() : double         +area() : double
     w hile(it.hasNext()) {
         Shape s = (Shape) it.next();                                   Square       area is 25sqm
         totalArea += s.area(dim );       //polym orphic m ethod call   HalfC ircle    area is 39.25
                                                                                                                          HalfCircle
     }                                                                  sqm
     return totalArea ;
 }                                                                                                                    +area() : double
20                                                      Java - Fundamentals

Inheritance – is the inclusion of behavior (i.e. methods) and state (i.e. variables) of a base class in a derived class so
that they are accessible in that derived class. The key benefit of Inheritance is that it provides the formal mechanism for
code reuse. Any shared piece of business logic can be moved from the derived class into the base class as part of
refactoring process to improve maintainability of your code by avoiding code duplication. The existing class is called the
superclass and the derived class is called the subclass. Inheritance can also be defined as the process whereby one
object acquires characteristics from one or more other objects the same way children acquire characteristics from their
parents. There are two types of inheritances:

1. Implementation inheritance (aka class inheritance): You can extend an application’s functionality by reusing
functionality in the parent class by inheriting all or some of the operations already implemented. In Java, you can only
inherit from one superclass. Implementation inheritance promotes reusability but improper use of class inheritance can
cause programming nightmares by breaking encapsulation and making future changes a problem. With implementation
inheritance, the subclass becomes tightly coupled with the superclass. This will make the design fragile because if you
want to change the superclass, you must know all the details of the subclasses to avoid breaking them. So when using
implementation inheritance, make sure that the subclasses depend only on the behavior of the superclass, not on
the actual implementation. For example in the above diagram, the subclasses should only be concerned about the
behavior known as area() but not how it is implemented.

2. Interface inheritance (aka type inheritance): This is also known as subtyping. Interfaces provide a mechanism for
specifying a relationship between otherwise unrelated classes, typically by specifying a set of common methods each
implementing class must contain. Interface inheritance promotes the design concept of program to interfaces not to
implementations. This also reduces the coupling or implementation dependencies between systems. In Java, you can
implement any number of interfaces. This is more flexible than implementation inheritance because it won’t lock you into
specific implementations which make subclasses difficult to maintain. So care should be taken not to break the
implementing classes by modifying the interfaces.

Which one to use? Prefer interface inheritance to implementation inheritance because it promotes the design concept of
coding to an interface and reduces coupling. Interface inheritance can achieve code reuse with the help of object
composition. If you look at Gang of Four (GoF) design patterns, you can see that it favors interface inheritance to
implementation inheritance. CO

Implementation inheritance                                     Interface inheritance with composition
Let’s assume that savings account and term deposit account     Let’s look at an interface inheritance code sample, which makes use
have a similar behavior in terms of depositing and             of composition for reusability. In the following example the methods
withdrawing money, so we will get the super class to           deposit(…) and withdraw(…) share the same piece of code in
implement this behavior and get the subclasses to reuse this   AccountHelper class. The method calculateInterest(…) has its specific
behavior. But saving account and term deposit account          implementation in its own class.
have specific behavior in calculating the interest.

Super class Account has reusable code as methods               public interface Account {
deposit (double amount) and withdraw (double amount).            public abstract double calculateInterest(double amount);
                                                                 public abstract void deposit(double amount);
public abstract class Account {                                  public abstract void withdraw(double amount);
  public void deposit (double amount) {                        }
       System.out.println("depositing " + amount);
  }                                                            Code to interface so that the implementation can change.

    public void withdraw (double amount) {                     public interface AccountHelper {
       System.out.println ("withdrawing " + amount);             public abstract void deposit (double amount);
    }                                                            public abstract void withdraw (double amount);
                                                               }
    public abstract double calculateInterest(double amount);
}                                                              class AccountHelperImpl has reusable code as methods deposit
                                                               (double amount) and withdraw (double amount).

public class SavingsAccount extends Account {                  public class AccountHelperImpl implements AccountHelper {
                                                                 public void deposit(double amount) {
    public double calculateInterest (double amount) {                 System.out.println("depositing " + amount);
      // calculate interest for SavingsAccount                   }
      return amount * 0.03;
    }                                                              public void withdraw(double amount) {
                                                                      System.out.println("withdrawing " + amount);
    public void deposit (double amount) {                          }
      super.deposit (amount); // get code reuse
      // do something else                                     }
    }

    public void withdraw (double amount) {                     public class SavingsAccountImpl implements Account {
Java - Fundamentals                                                      21

         super.withdraw (amount); // get code reuse                 // composed helper class (i.e. composition).
         // do something else                                       AccountHelper helper = new AccountHelperImpl ();
    }
}                                                                   public double calculateInterest (double amount) {
                                                                      // calculate interest for SavingsAccount
public class TermDepositAccount extends Account {                     return amount * 0.03;
                                                                    }
    public double calculateInterest (double amount) {
      // calculate interest for SavingsAccount                      public void deposit (double amount) {
      return amount * 0.05;                                           helper.deposit( amount); // code reuse via composition
    }                                                               }

    public void deposit(double amount) {                            public void withdraw (double amount) {
      super.deposit (amount); // get code reuse                       helper.withdraw (amount); // code reuse via composition
      // do something else                                          }
    }                                                           }

    public void withdraw(double amount) {                       public class TermDepositAccountImpl implements Account {
      super.withdraw (amount); // get code reuse
      // do something else                                          // composed helper class (i.e. composition).
    }                                                               AccountHelper helper = new AccountHelperImpl ();
}
                                                                    public double calculateInterest (double amount) {
                                                                      //calculate interest for SavingsAccount
                                                                      return amount * 0.05;
                                                                    }

                                                                    public void deposit (double amount) {
                                                                       helper.deposit (amount) ; // code reuse via composition
                                                                    }

                                                                    public void withdraw (double amount) {
                                                                        helper.withdraw (amount) ; // code reuse via composition
                                                                    }

                                                                }

The Test class:

public class Test {
  public static void main(String[] args) {
     Account acc1 = new SavingsAccountImpl();
     acc1.deposit(50.0);

         Account acc2 = new TermDepositAccountImpl();
         acc2.deposit(25.0);

         acc1.withdraw(25);
         acc2.withdraw(10);

         double cal1 = acc1.calculateInterest(100.0);
         double cal2 = acc2.calculateInterest(100.0);

         System.out.println("Savings --> " + cal1);
         System.out.println("TermDeposit --> " + cal2);
     }
}

The output:

depositing 50.0
depositing 25.0
withdrawing 25.0
withdrawing 10.0
Savings --> 3.0
TermDeposit --> 5.0

Q. Why would you prefer code reuse via composition over inheritance? Both the approaches make use of
polymorphism and gives code reuse (in different ways) to achieve the same results but:

        The advantage of class inheritance is that it is done statically at compile-time and is easy to use. The disadvantage of
        class inheritance is that because it is static, implementation inherited from a parent class cannot be changed at run-
22                                                                Java - Fundamentals

      time. In object composition, functionality is acquired dynamically at run-time by objects collecting references to other
      objects. The advantage of this approach is that implementations can be replaced at run-time. This is possible because
      objects are accessed only through their interfaces, so one object can be replaced with another just as long as they
      have the same type. For example: the composed class AccountHelperImpl can be replaced by another more
      efficient implementation as shown below if required:

      public class EfficientAccountHelperImpl implements AccountHelper {
          public void deposit(double amount) {
              System.out.println("efficient depositing " + amount);
          }

            public void withdraw(double amount) {
                System.out.println("efficient withdrawing " + amount);
            }
      }

      Another problem with class inheritance is that the subclass becomes dependent on the parent class implementation.
      This makes it harder to reuse the subclass, especially if part of the inherited implementation is no longer desirable and
      hence can break encapsulation. Also a change to a superclass can not only ripple down the inheritance hierarchy to
      subclasses, but can also ripple out to code that uses just the subclasses making the design fragile by tightly coupling
      the subclasses with the super class. But it is easier to change the interface/implementation of the composed class.

Due to the flexibility and power of object composition, most design patterns emphasize object composition over
inheritance whenever it is possible. Many times, a design pattern shows a clever way of solving a common problem
through the use of object composition rather then a standard, less flexible, inheritance based solution.

Encapsulation – refers to keeping all the related members (variables and methods) together in an object. Specifying
member variables as private can hide the variables and methods. Objects should hide their inner workings from the
outside view. Good encapsulation improves code modularity by preventing objects interacting with each other in
an unexpected way, which in turn makes future development and refactoring efforts easy. CO

Sample code
 Class MyMarks {
  private int vmarks = 0;                                                    k)                    in
  private String name;                                                     ar                        tg                    Member
                                                                        t m                            et
                                                                     (in                                  M
                                                                                                           ar
                                                                                                                           variables are
                                                                   ks                                                      encapsulated,
     public void setMarks(int mark)                              ar                                          ks
                                                                                                               ()
                        throws MarkException {                 tM                                                          so that they
        if(mark > 0)
                                                             se                                                            can only be
            this.vmarks = mark;                                                                                            accessed via
        else {                                                                    private int vmarks;                      encapsulating
            throw new MarkException("No negative                                 private String name;                      methods.
                                    Values");
        }                                                  se
                                                             tN                                                        )
     }                                                         am                                                 e(
                                                                 e                                               m
                                                                     (S
                                                                       tri                                    tNa
     public int getMarks(){                                                ng                               ge
                                                                                na                      g
         return vmarks;                                                                              rin
     }                                                                            m
                                                                                   e)              St
     //getters and setters for attribute name goes here.
 }




Being able to encapsulate members of a class is important for security and integrity. We can protect variables from
unacceptable values. The sample code above describes how encapsulation can be used to protect the MyMarks object
from having negative values. Any modification to member variable “vmarks” can only be carried out through the setter
method setMarks(int mark). This prevents the object “MyMarks” from having any negative values by throwing an
exception.


Q 11: What is design by contract? Explain the assertion construct? DC
A 11: Design by contract specifies the obligations of a calling-method and called-method to each other. Design by
          contract is a valuable technique, which should be used to build well-defined interfaces. The strength of this
          programming methodology is that it gets the programmer to think clearly about what a function does, what pre
          and post conditions it must adhere to and also it provides documentation for the caller. Java uses the assert
          statement to implement pre- and post-conditions. Java’s exceptions handling also support design by contract
          especially checked exceptions (Refer Q39 in Java section for checked exceptions). In design by contract in
          addition to specifying programming code to carrying out intended operations of a method the programmer also
          specifies:
Java - Fundamentals                                                             23

1. Preconditions – This is the part of the contract the calling-method must agree to. Preconditions specify the
conditions that must be true before a called method can execute. Preconditions involve the system state and the
arguments passed into the method at the time of its invocation. If a precondition fails then there is a bug in the
calling-method or calling software component.

    On public methods                                                     On non-public methods
    Preconditions on public methods are enforced by explicit checks       You can use assertion to check the parameters of the
    that throw particular, specified exceptions. You should not use       non-public methods.
    assertion to check the parameters of the public methods but
    can use for the non-public methods. Assert is inappropriate           private void setCalculatedRate(int rate) {
    because the method guarantees that it will always enforce the           assert (rate > 0 && rate < MAX_RATE) : rate;
    argument checks. It must check its arguments whether or not               //calculate the rate and set it.
    assertions are enabled. Further, assert construct does not throw      }
    an exception of a specified type. It can throw only an
    AssertionError.                                                       Assertions can be disabled, so programs must not
                                                                          assume that assert construct will be always executed:
    public void setRate(int rate) {
      if(rate <= 0 || rate > MAX_RATE){                                   //Wrong:
          throw new IllegalArgumentException(“Invalid rate   ” + rate);   //if assertion is disabled, “pilotJob” never gets removed
      }                                                                   assert jobsAd.remove(pilotJob);
      setCalculatedRate(rate);
    }                                                                     //Correct:
                                                                          boolean pilotJobRemoved = jobsAd.remove(pilotJob);
                                                                          assert pilotJobRemoved;

2. Postconditions – This is the part of the contract the called-method agrees to. What must be true after a
method completes successfully. Postconditions can be used with assertions in both public and non-public
methods. The postconditions involve the old system state, the new system state, the method arguments and the
method’s return value. If a postcondition fails then there is a bug in the called-method or called software
component.

public double calcRate(int rate) {
   if(rate <= 0 || rate > MAX_RATE){
       throw new IllegalArgumentException(“Invalid rate !!! ”);
    }

         //logic to calculate the rate and set it goes here

         assert this.evaluate(result) < 0 : this; //message sent to AssertionError on failure
         return result;
    }

3. Class invariants - what must be true about each instance of a class? A class invariant as an internal invariant
that can specify the relationships among multiple attributes, and should be true before and after any method
completes. If an invariant fails then there could be a bug in either calling-method or called-method. There is
no particular mechanism for checking invariants but it is convenient to combine all the expressions required for
checking invariants into a single internal method that can be called by assertions. For example if you have a class,
which deals with negative integers then you define the isNegative() convenient internal method:

class NegativeInteger {
   Integer value = new Integer (-1); //invariant

        //constructor
        public NegativeInteger(Integer int) {
             //constructor logic goes here
             assert isNegative();
        }

        // rest of the public and non-public methods goes here. public methods should call
        // assert isNegative(); prior to its return

        // convenient internal method for checking invariants.
        // Returns true if the integer value is negative

        private boolean isNegative(){
             return value.intValue() < 0 ;
         }
}
24                                                    Java - Fundamentals

       The isNegative() method should be true before and after any method completes, each public method and
       constructor should contain the following assert statement immediately prior to its return.

       assert isNegative();

       Explain the assertion construct? The assertion statements have two forms as shown below:

       assert Expression1;
       assert Expression1 : Expression2;

       Where:
           Expression1        is a boolean expression. If the Expression1 evaluates to false, it throws an AssertionError without any
           detailed message.
           Expression2        if the Expression1 evaluates to false throws an AssertionError with using the value of the Expression2 as
           the error’s detailed message.

       Note: If you are using assertions (available from JDK1.4 onwards), you should supply the JVM argument to
       enable it by package name or class name.

       java -ea[:packagename...|:classname] or java -enableassertions[:packagename...|:classname]
       java –ea:Account



Q 12: What is the difference between an abstract class and an interface and when should you use them? LF DP DC
       FAQ
A 12: In design, you want the base class to present only an interface for its derived classes. This means, you don’t want
       anyone to actually instantiate an object of the base class. You only want to upcast to it (implicit upcasting, which
       gives you polymorphic behavior), so that its interface can be used. This is accomplished by making that class
       abstract using the abstract keyword. If anyone tries to make an object of an abstract class, the compiler prevents
       it.

       The interface keyword takes this concept of an abstract class a step further by preventing any method or function
       implementation at all. You can only declare a method or function but not provide the implementation. The class,
       which is implementing the interface, should provide the actual implementation. The interface is a very useful and
       commonly used aspect in OO design, as it provides the separation of interface and implementation and
       enables you to:

             Capture similarities among unrelated classes without artificially forcing a class relationship.
             Declare methods that one or more classes are expected to implement.
             Reveal an object's programming interface without revealing its actual implementation.
             Model multiple interface inheritance in Java, which provides some of the benefits of full on multiple
             inheritances, a feature that some object-oriented languages support that allow a class to have more than one
             superclass.

        Abstract class                                                 Interface
        Have executable methods and abstract methods.                  Have no implementation code. All methods are abstract.
        Can only subclass one abstract class.                          A class can implement any number of interfaces.


                              Diamond problem & use of interface


                          Shape                                   <<Interface>>
                                                                    ShapeIF



                                                        Circle          Square        CircleOnSquare
              Circle                   Square


                                                           <<Interface>>         <<Interface>>
                                                              CircleIF             SquareIF
                       CircleOnSquare
                                                        Multiple interface inheritance in JAVA
                No multiple inheritance in JAVA
Java - Fundamentals                                                            25

         Q. When to use an abstract class?: In case where you want to use implementation inheritance then it is
        usually provided by an abstract base class. Abstract classes are excellent candidates inside of application
        frameworks. Abstract classes let you define some default behavior and force subclasses to provide any specific
        behavior. Care should be taken not to overuse implementation inheritance as discussed in Q10 in Java section.

        Q. When to use an interface?: For polymorphic interface inheritance, where the client wants to only deal with a
        type and does not care about the actual implementation use interfaces. If you need to change your design
        frequently, you should prefer using interface to abstract. CO Coding to an interface reduces coupling and
        interface inheritance can achieve code reuse with the help of object composition. For example: The Spring
        framework’s dependency injection promotes code to an interface principle. Another justification for using interfaces
        is that they solve the ‘diamond problem’ of traditional multiple inheritance as shown in the figure. Java does not
        support multiple inheritance. Java only supports multiple interface inheritance. Interface will solve all the
        ambiguities caused by this ‘diamond problem’.

        Design pattern: Strategy design pattern lets you swap new algorithms and processes into your program without
        altering the objects that use them. Strategy design pattern: Refer Q11 in How would you go about… section.


Q 13: Why there are some interfaces with no defined methods (i.e. marker interfaces) in Java? LF FAQ
A 13: The interfaces with no defined methods act like markers. They just tell the compiler that the objects of the classes
        implementing the interfaces with no defined methods need to be treated differently. Example java.io.Serializable
        (Refer Q23 in Java section), java.lang.Cloneable, java.util.EventListener etc. Marker interfaces are also known as
        “tag” interfaces since they tag all the derived classes into a category based on their purpose.


Q 14: When is a method said to be overloaded and when is a method said to be overridden? LF CO FAQ
A 14:
         Method Overloading                                              Method Overriding
         Overloading deals with multiple methods in the same class       Overriding deals with two methods, one in the parent class and
         with the same name but different method signatures.             the other one in the child class and has the same name and
                                                                         signatures.
         class MyClass {
            public void getInvestAmount(int rate) {…}                    class BaseClass{
                                                                            public void getInvestAmount(int rate) {…}
             public void getInvestAmount(int rate, long principal)       }
             { … }
         }                                                               class MyClass extends BaseClass {
                                                                            public void getInvestAmount(int rate) { …}
         Both the above methods have the same method names               }
         but different method signatures, which mean the methods
         are overloaded.                                                 Both the above methods have the same method names and
                                                                         the signatures but the method in the subclass MyClass
                                                                         overrides the method in the superclass BaseClass.

         Overloading lets you define the same operation in               Overriding lets you define the same operation in different
         different ways for different data.                              ways for different object types.




Q 15: What is the main difference between an ArrayList and a Vector? What is the main difference between HashMap
        and Hashtable? What is the difference between a stack and a queue? LF DC PI CI FAQ
A 15:
         Vector / Hashtable                                            ArrayList / HashMap
         Original classes before the introduction of Collections     So if you don’t need a thread safe collection, use the ArrayList or
         API. Vector & Hashtable are synchronized. Any               HashMap. Why pay the price of synchronization unnecessarily at
         method that touches their contents is thread-safe.          the expense of performance degradation.


        Q. So which is better? As a general rule, prefer ArrayList/HashMap to Vector/Hashtable. If your application is a
        multithreaded application and at least one of the threads either adds or deletes an entry into the collection
        then use new Java collections API‘s external synchronization facility as shown below to temporarily synchronize
        your collections as needed: CO

        Map myMap = Collections.synchronizedMap (myMap);                                  // single lock for the entire map
        List myList = Collections.synchronizedList (myList);                              // single lock for the entire list
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion
Java/J2EE Job Interview Companion

More Related Content

Similar to Java/J2EE Job Interview Companion

Preview java j2_ee_book
Preview java j2_ee_bookPreview java j2_ee_book
Preview java j2_ee_bookSubhadip Pal
 
Java j2 ee job interview companion k.arulkumaran
Java j2 ee job interview companion   k.arulkumaranJava j2 ee job interview companion   k.arulkumaran
Java j2 ee job interview companion k.arulkumaranRama Krishnan L
 
82747038 preview-java-j2 ee-book
82747038 preview-java-j2 ee-book82747038 preview-java-j2 ee-book
82747038 preview-java-j2 ee-bookhomeworkping3
 
Ibm web sphere_job_interview_preparation_guide
Ibm web sphere_job_interview_preparation_guideIbm web sphere_job_interview_preparation_guide
Ibm web sphere_job_interview_preparation_guideKhemnath Chauhan
 
Java 7 - State of the Enterprise
Java 7 - State of the EnterpriseJava 7 - State of the Enterprise
Java 7 - State of the EnterpriseMarkus Eisele
 
Whats Cool in Java E 6
Whats Cool in Java E 6Whats Cool in Java E 6
Whats Cool in Java E 6Arun Gupta
 
Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Aditya Jha
 
Overview of Java
Overview of JavaOverview of Java
Overview of Javajosemachoco
 
Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...
Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...
Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...IndicThreads
 
Interviewing Tips and Techniques
Interviewing Tips and TechniquesInterviewing Tips and Techniques
Interviewing Tips and TechniquesBonnie Hambor
 

Similar to Java/J2EE Job Interview Companion (20)

Imp Book
Imp BookImp Book
Imp Book
 
Preview java j2_ee_book
Preview java j2_ee_bookPreview java j2_ee_book
Preview java j2_ee_book
 
JavaFAQS
JavaFAQSJavaFAQS
JavaFAQS
 
Java j2 ee job interview companion k.arulkumaran
Java j2 ee job interview companion   k.arulkumaranJava j2 ee job interview companion   k.arulkumaran
Java j2 ee job interview companion k.arulkumaran
 
82747038 preview-java-j2 ee-book
82747038 preview-java-j2 ee-book82747038 preview-java-j2 ee-book
82747038 preview-java-j2 ee-book
 
Java/J2EE CV Guide
Java/J2EE CV GuideJava/J2EE CV Guide
Java/J2EE CV Guide
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 
Ibm web sphere_job_interview_preparation_guide
Ibm web sphere_job_interview_preparation_guideIbm web sphere_job_interview_preparation_guide
Ibm web sphere_job_interview_preparation_guide
 
Java
JavaJava
Java
 
Java 7 - State of the Enterprise
Java 7 - State of the EnterpriseJava 7 - State of the Enterprise
Java 7 - State of the Enterprise
 
SAIGANESH CHINTALA_JAVA
SAIGANESH CHINTALA_JAVASAIGANESH CHINTALA_JAVA
SAIGANESH CHINTALA_JAVA
 
Whats Cool in Java E 6
Whats Cool in Java E 6Whats Cool in Java E 6
Whats Cool in Java E 6
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...
 
Overview of Java
Overview of JavaOverview of Java
Overview of Java
 
Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...
Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...
Spring Roo and the Cloud (Tutorial) [5th IndicThreads.com Conference On Java,...
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
Interviewing Tips and Techniques
Interviewing Tips and TechniquesInterviewing Tips and Techniques
Interviewing Tips and Techniques
 
J2ee seminar
J2ee seminarJ2ee seminar
J2ee seminar
 
KumarJava
KumarJavaKumarJava
KumarJava
 

Recently uploaded

Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxNirmalaLoungPoorunde1
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxpboyjonauth
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...Marc Dusseiller Dusjagr
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdfssuser54595a
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxheathfieldcps1
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Sapana Sha
 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxmanuelaromero2013
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application ) Sakshi Ghasle
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991RKavithamani
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 

Recently uploaded (20)

Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptx
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Introduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptxIntroduction to AI in Higher Education_draft.pptx
Introduction to AI in Higher Education_draft.pptx
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptx
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application )
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 

Java/J2EE Job Interview Companion

  • 1.
  • 2. 1 Learn Java/J2EE core concepts and key areas With Java/J2EE Job Interview Companion By K.Arulkumaran & A.Sivayini Technical Reviewers Craig Malone Stuart Watson Arulazi Dhesiaseelan Lara D’Albreo Cover Design, Layout, & Editing A.Sivayini Acknowledgements A. Sivayini Mr. & Mrs. R. Kumaraswamipillai
  • 3. 2 Java/J2EE Job Interview Companion Copy Right 2005-2007 ISBN 978-1-4116-6824-9 The author has made every effort in the preparation of this book to ensure the accuracy of the information. However, information in this book is sold without warranty either expressed or implied. The author will not be held liable for any damages caused or alleged to be caused either directly or indirectly by this book. Please e-mail feedback & corrections (technical, grammatical and/or spelling) to java-interview@hotmail.com First Edition (220+ Q&A): Dec 2005 Second Edition (400+ Q&A): March 2007
  • 4. 3 Outline SECTION DESCRIPTION What this book will do for you? Motivation for this book Key Areas index SECTION 1 Interview questions and answers on: Java Fundamentals Swing Applet Performance and Memory issues Personal and Behavioral/Situational Behaving right in an interview Key Points SECTION 2 Interview questions and answers on: Enterprise Java J2EE Overview Servlet JSP JDBC / JTA JNDI / LDAP RMI EJB JMS XML SQL, Database, and O/R mapping RUP & UML Struts Web and Application servers. Best practices and performance considerations. Testing and deployment. Personal and Behavioral/Situational Key Points SECTION 3 Putting it all together section. How would you go about…? 1. How would you go about documenting your Java/J2EE application? 2. How would you go about designing a Java/J2EE application? 3. How would you go about identifying performance problems and/or memory leaks in your Java application? 4. How would you go about minimizing memory leaks in your Java/J2EE application? 5. How would you go about improving performance of your Java/J2EE application? 6. How would you go about identifying any potential thread-safety issues in your Java/J2EE application? 7. How would you go about identifying any potential transactional issues in your Java/J2EE
  • 5. 4 application? 8. How would you go about applying the Object Oriented (OO) design concepts in your Java/J2EE application? 9. How would you go about applying the UML diagrams in your Java/J2EE project? 10. How would you go about describing the software development processes you are familiar with? 11. How would you go about applying the design patterns in your Java/J2EE application? 12. How would you go about designing a Web application where the business tier is on a separate machine from the presentation tier. The business tier should talk to 2 different databases and your design should point out the different design patterns? 13. How would you go about determining the enterprise security requirements for your Java/J2EE application? 14. How would you go about describing the open source projects like JUnit (unit testing), Ant (build tool), CVS (version control system) and log4J (logging tool) which are integral part of most Java/J2EE projects? 15. How would you go about describing Service Oriented Architecture (SOA) and Web services? SECTION 4 Emerging Technologies/Frameworks Test Driven Development (TDD). Aspect Oriented Programming (AOP). Inversion of Control (IoC) (Also known as Dependency Injection). Annotations or attributes based programming (xdoclet etc). Spring framework. Hibernate framework. EJB 3.0. JavaServer Faces (JSF) framework. SECTION 5 Sample interview questions … Java Web Components Enterprise Design General GLOSSARY OF TERMS RESOURCES INDEX
  • 6. 5 Table of contents Outline_________________________________________________________________________________________ 3 Table of contents ________________________________________________________________________________ 5 What this book will do for you? ____________________________________________________________________ 7 Motivation for this book __________________________________________________________________________ 8 Key Areas Index ________________________________________________________________________________ 11 Java – Interview questions & answers _____________________________________________________________ 13 Java – Fundamentals _____________________________________________________________________________________ 14 Java – Swing ____________________________________________________________________________________________ 69 Java – Applet____________________________________________________________________________________________ 76 Java – Performance and Memory issues _____________________________________________________________________ 78 Java – Personal and Behavioral/Situational __________________________________________________________________ 83 Java – Behaving right in an interview________________________________________________________________________ 89 Java – Key Points ________________________________________________________________________________________ 91 Enterprise Java – Interview questions & answers ____________________________________________________ 94 Enterprise - J2EE Overview ________________________________________________________________________________ 95 Enterprise - Servlet ______________________________________________________________________________________ 108 Enterprise - JSP ________________________________________________________________________________________ 126 Enterprise – JDBC & JTA _________________________________________________________________________________ 145 Enterprise – JNDI & LDAP ________________________________________________________________________________ 155 Enterprise - RMI ________________________________________________________________________________________ 159 Enterprise – EJB 2.x _____________________________________________________________________________________ 163 Enterprise - JMS ________________________________________________________________________________________ 180 Enterprise - XML ________________________________________________________________________________________ 190 Enterprise – SQL, Database, and O/R mapping _______________________________________________________________ 197 Enterprise - RUP & UML __________________________________________________________________________________ 206 Enterprise - Struts_______________________________________________________________________________________ 214 Enterprise - Web and Application servers ___________________________________________________________________ 218 Enterprise - Best practices and performance considerations ___________________________________________________ 222 Enterprise – Logging, testing and deployment _______________________________________________________________ 225 Enterprise – Personal and Behavioral/Situational_____________________________________________________________ 228 Enterprise – Software development process _________________________________________________________________ 230 Enterprise – Key Points __________________________________________________________________________________ 233 How would you go about…?_____________________________________________________________________ 238 Q 01: How would you go about documenting your Java/J2EE application? FAQ ________________________________ 239 Q 02: How would you go about designing a Java/J2EE application? FAQ _____________________________________ 240 Q 03: How would you go about identifying performance and/or memory issues in your Java/J2EE application? FAQ _ 243 Q 04: How would you go about minimizing memory leaks in your Java/J2EE application? FAQ __________________ 244 Q 05: How would you go about improving performance in your Java/J2EE application? FAQ _____________________ 244 Q 06: How would you go about identifying any potential thread-safety issues in your Java/J2EE application? FAQ __ 245 Q 07: How would you go about identifying any potential transactional issues in your Java/J2EE application? FAQ __ 246
  • 7. 6 Q 08: How would you go about applying the Object Oriented (OO) design concepts in your Java/J2EE application? FAQ 247 Q 09: How would you go about applying the UML diagrams in your Java/J2EE project? FAQ _____________________249 Q 10: How would you go about describing the software development processes you are familiar with? FAQ ________251 Q 11: How would you go about applying the design patterns in your Java/J2EE application? _____________________253 Q 12: How would you go about designing a Web application where the business tier is on a separate machine from the presentation tier. The business tier should talk to 2 different databases and your design should point out the different design patterns? FAQ ____________________________________________________________________________________286 Q 13: How would you go about determining the enterprise security requirements for your Java/J2EE application? ___287 Q 14: How would you go about describing the open source projects like JUnit (unit testing), Ant (build tool), CVS (version control system) and log4J (logging tool) which are integral part of most Java/J2EE projects? ________________292 Q 15: How would you go about describing Service Oriented Architecture (SOA) and Web services? FAQ ___________299 Emerging Technologies/Frameworks… ____________________________________________________________311 Q 01: What is Test Driven Development (TDD)? FAQ _______________________________________________________312 Q 02: What is the point of Test Driven Development (TDD)? What do you think of TDD?__________________________313 Q 03: What is aspect oriented programming (AOP)? Do you have any experience with AOP? _____________________313 Q 04: What are the differences between OOP and AOP? ____________________________________________________317 Q 05: What are the benefits of AOP?_____________________________________________________________________317 Q 06: What is attribute or annotation oriented programming? FAQ ___________________________________________317 Q 07: What are the pros and cons of annotations over XML based deployment descriptors? FAQ _________________318 Q 08: What is XDoclet? ________________________________________________________________________________319 Q 09: What is inversion of control (IoC) (also known more specifically as dependency injection)? FAQ_____________319 Q 10: What are the different types of dependency injections? FAQ ___________________________________________321 Q 11: What are the benefits of IoC (aka Dependency Injection)? FAQ _________________________________________322 Q 12: What is the difference between a service locator pattern and an inversion of control pattern? _______________323 Q 13: Why dependency injection is more elegant than a JNDI lookup to decouple client and the service? ___________323 Q 14: Explain Object-to-Relational (O/R) mapping? ________________________________________________________323 Q 15: Give an overview of hibernate framework? FAQ ______________________________________________________324 Q 16: Explain some of the pitfalls of Hibernate and explain how to avoid them? Give some tips on Hibernate best practices? FAQ _________________________________________________________________________________________333 Q 17: Give an overview of the Spring framework? What are the benefits of Spring framework? FAQ _______________334 Q 18: How would EJB 3.0 simplify your Java development compared to EJB 1.x, 2.x ? FAQ ______________________337 Q 19: Briefly explain key features of the JavaServer Faces (JSF) framework? __________________________________339 Q 20: How would the JSF framework compare with the Struts framework? How would a Spring MVC framework compare with Struts framework?___________________________________________________________________________________341 Sample interview questions… ____________________________________________________________________344 Java___________________________________________________________________________________________________345 Web components________________________________________________________________________________________345 Enterprise ______________________________________________________________________________________________345 Design_________________________________________________________________________________________________347 General ________________________________________________________________________________________________347 GLOSSARY OF TERMS__________________________________________________________________________348 RESOURCES __________________________________________________________________________________350 INDEX ________________________________________________________________________________________352
  • 8. 7 What this book will do for you? Have you got the time to read 10 or more books and articles to add value prior to the interview? This book has been written mainly from the perspective of Java/J2EE job seekers and interviewers. There are numerous books and articles on the market covering specific topics like Java, J2EE, EJB, Design Patterns, ANT, CVS, Multi-Threading, Servlets, JSP, emerging technologies like AOP (Aspect Oriented Programming), Test Driven Development (TDD), Dependency Injection Dl (aka IoC – Inversion of Control) etc. But from an interview perspective it is not possible to brush up on all these books where each book usually has from 300 pages to 600 pages. The basic purpose of this book is to cover all the core concepts and key areas, which all Java/J2EE developers, designers and architects should be conversant with to perform well in their current jobs and to launch a successful career by doing well at interviews. The interviewer can also use this book to make sure that they hire the right candidate depending on their requirements. This book contains a wide range of topics relating to Java/J2EE development in a concise manner supplemented with diagrams, tables, sample codes and examples. This book is also appropriately categorized to enable you to choose the area of interest to you. This book will assist all Java/J2EE practitioners to become better at what they do. Usually it takes years to understand all the core concepts and key areas when you rely only on your work experience. The best way to fast track this is to read appropriate technical information and proactively apply these in your work environment. It worked for me and hopefully it will work for you as well. I was also at one stage undecided whether to name this book “Java/J2EE core concepts and key areas” or “Java/J2EE Job Interview Companion”. The reason I chose “Java/J2EE Job Interview Companion” is because the core concepts and key areas discussed in this book helped me to be successful in my interviews, helped me to survive and succeed at my work regardless what my job (junior developer, senior developer, technical lead, designer, contractor etc) was and also gave me thumbs up in code reviews. This book also has been set out as a handy reference guide and a roadmap for building enterprise Java applications.
  • 9. 8 Motivation for this book I started using Java in 1999 when I was working as a junior developer. During those two years as a permanent employee, I pro-actively spent many hours studying the core concepts behind Java/J2EE in addition to my hands on practical experience. Two years later I decided to start contracting. Since I started contracting in 2001, my career had a much- needed boost in terms of contract rates, job satisfaction, responsibility etc. I moved from one contract to another with a view of expanding my skills and increasing my contract rates. In the last 5 years of contracting, I have worked for 5 different organizations both medium and large on 8 different projects. For each contract I held, on average I attended 6-8 interviews with different companies. In most cases multiple job offers were made and consequently I was in a position to negotiate my contract rates and also to choose the job I liked based on the type of project, type of organization, technology used, etc. I have also sat for around 10 technical tests and a few preliminary phone interviews. The success in the interviews did not come easily. I spent hours prior to each set of interviews wading through various books and articles as a preparation. The motivation for this book was to collate all this information into a single book, which will save me time prior to my interviews but also can benefit others in their interviews. What is in this book has helped me to go from just a Java/J2EE job to a career in Java/J2EE in a short time. It has also given me the job security that ‘I can find a contract/permanent job opportunity even in the difficult job market’. I am not suggesting that every one should go contracting but by performing well at the interviews you can be in a position to pick the permanent role you like and also be able to negotiate your salary package. Those of you who are already in good jobs can impress your team leaders, solution designers and/or architects for a possible promotion by demonstrating your understanding of the key areas discussed in this book. You can discuss with your senior team members about performance issues, transactional issues, threading issues (concurrency issues) and memory issues. In most of my previous contracts I was in a position to impress my team leads and architects by pinpointing some of the critical performance, memory, transactional and threading issues with the code and subsequently fixing them. Trust me it is not hard to impress someone if you understand the key areas. For example: Struts action classes are not thread-safe (Refer Q113 in Enterprise section). JSP variable declaration is not thread-safe (Refer Q34 in Enterprise section). Valuable resources like database connections should be closed properly to avoid any memory and performance issues (Refer Q45 in Enterprise section). Throwing an application exception will not rollback the transaction in EJB. (Refer Q77 in Enterprise section). The other key areas, which are vital to any software development, are a good understanding of some of key design concepts, design patterns, and a modeling language like UML. These key areas are really worthy of a mention in your resume and interviews. For example: Know how to use inheritance, polymorphism and encapsulation (Refer Q7, Q8, Q9, and Q10 in Java section.). Why use design patterns? (Refer Q5 in Enterprise section). Why is UML important? (Refer Q106 in Enterprise section). If you happen to be in an interview with an organization facing serious issues with regards to their Java application relating to memory leaks, performance problems or a crashing JVM etc then you are likely to be asked questions on these topics. Refer Q72 – Q74 in Java section and Q123, Q125 in Enterprise section. If you happen to be in an interview with an organization which is working on a pilot project using a different development methodology like agile methodology etc or has just started adopting a newer development process or methodology then you are likely to be asked questions on this key area. If the team lead/architect of the organization you are being interviewed for feels that the current team is lacking skills in the key areas of design concepts and design patterns then you are likely to be asked questions on these key areas.
  • 10. 9 Another good reason why these key areas like transactional issues, design concepts, design patterns etc are vital are because solution designers, architects, team leads, and/or senior developers are usually responsible for conducting the technical interviews. These areas are their favorite topics because these are essential to any software development. Some interviewers request you to write a small program during interview or prior to getting to the interview stage. This is to ascertain that you can code using object oriented concepts and design patterns. So I have included a coding key area to illustrate what you need to look for while coding. Apply OO concepts like inheritance, polymorphism and encapsulation: Refer Q10 in Java section. Program to interfaces not to implementations: Refer Q12, Q17 in Java section. Use of relevant design patterns: Refer Q11, Q12 in How would you go about… section. Use of Java collections API and exceptions correctly: Refer Q16 and Q39 in Java section. Stay away from hard coding values: Refer Q05 in Java section. L anguage F u n d a m e n ta ls H o w m a n y b o o k s d o I h a v e to re a d to P e rfo rm a n c e u n d e rs ta n d a n d p u t to g e th e r a ll th e s e Is s u e s k e y a re a s ? H o w m a n y y e a rs o f e x p e rie n c e s h o u ld I h a v e to u n d e rs ta n d a ll th e s e S p e c ific a tio n k e y a re a s ? E x c e p tio n F u n d a m e n ta ls H a n d lin g W ill th e s e k e y a re a s h e lp m e p ro g re s s in m y c a re e r? S o ftw a re D e v e lo p m e n t P ro c e s s W ill th e s e k e y a re a s h e lp m e c u t q u a lity c o d e ? D e s ig n D e s ig n C o n c e p ts S E c u rity P a tte rn s T ra n s a c tio n a l Is s u e s B est C o n c u rre n c y S c a la b ility P ra c tic e s Is s u e s Iss u e s M e m o ry Is su e s C O d in g LF DC CI PI SE EH SD DP SF MI SI TI BP CO This book aims to solve the above dilemma. My dad keeps telling me to find a permanent job (instead of contracting), which in his view provides better job security but I keep telling him that in my view in Information Technology the job security is achieved only by keeping your knowledge and skills sharp and up to date. The 8 contract positions I held over the last 5.5 years have given me broader experience in Java/J2EE and related technologies. It also kept me motivated since there was always something new to learn in each assignment, and not all companies will appreciate your skills and expertise until you decide to leave. Do the following statements sound familiar to you when you hand in your resignation or decide not to extend your contract after getting another job offer? “Can I tempt you to come back? What can I do to keep you here?” etc. You might even think why you waited so long. The best way to make an impression in any organizations is to understand and proactively apply and
  • 11. 10 resolve the issues relating to the Key Areas discussed in this book. But be a team player, be tactful and don’t be critical of everything, do not act in a superior way and have a sense of humor. “Technical skills must be complemented with good business and interpersonal skills.” Describe a time when you were faced with a stressful situation that demonstrated Give me an example your coping skills? of a time when you set a goal and were able to achieve it? Development team You Knowledge/understanding of the business. Ability to communicate and interact effectively with the business users/customers. Ability to look at things from the user's perspective as opposed to only technology perspective. Ability to persuade/convince business with alternative solutions. Ability to communicate effectively with your fellow developers, immediate and senior management. Immediate Business users/ Ability to work in a team as well as independently. management External customers Problem solving/analytical skills. Organizational skills. Ability to cope with difficult situations like stress due to work load, deadlines etc and manage or deal with difficult people. Being a good listener with the right attitude. Give me an example of a time you Describe a time when you had to motivated others? Or dealt with a work with others in the organization difficult person? to accomplish the organizational goals? Senior management IMPORTANT: Technical skills alone are not sufficient for you to perform well in your interviews and progress in your career. Your technical skills must be complemented with business skills (i.e. knowledge/understanding of the business, ability to communicate and interact effectively with the business users/customers, ability to look at things from the users’ perspective as opposed to only from technology perspective, ability to persuade/convince business with alternative solutions, which can provide a win/win solution from users’ perspective as well as technology perspective), ability to communicate effectively with your fellow developers, immediate and senior management, ability to work in a team as well as independently, problem solving/analytical skills, organizational skills, ability to cope with difficult situations like stress due to work load, deadlines etc and manage or deal with difficult people, being a good listener with the right attitude (It is sometimes possible to have “I know it all attitude”, when you have strong technical skills. These are discussed in “Java – Personal” and “Enterprise Java – Personal” sub-sections with examples. Quick Read guide: It is recommended that you go through all the questions in all the sections (all it takes is to read a few questions & answers each day) but if you are pressed for time or would like to read it just before an interview then follow the steps shown below: -- Read/Browse all questions marked as “FAQ” in all four sections. -- Read/Browse Key Points in Java and Enterprise Java sections.
  • 12. 11 Key Areas Index I have categorized the core concepts and issues into 14 key areas as listed below. These key areas are vital for any good software development. This index will enable you to refer to the questions based on key areas. Also note that each question has an icon next to it to indicate which key area or areas it belongs to. Additional reading is recommended for beginners in each of the key areas. Key Areas icon --------------------------------------- Question Numbers ------------------------------------------------ Java section Enterprise Java section How Emerging would you Technologies go / Frameworks about…? Language Q1-Q6, Q12-Q16, Q18- - Q10, Q15, Fundamentals Q24, Q26-Q33, Q35- Q17, Q19 LF Q38, Q41-Q50, Q53-Q71 Specification - Q1, Q2, Q4, Q6, Q7-Q15, Q15 Fundamentals Q17-Q19, Q22, Q26-Q33, Q35-Q38, Q41, Q42, Q44, Q46-Q81, Q89-Q93, Q95- SF Q97, Q99, 102, Q110, Q112-Q115, Q118-Q119, Q121, Q126, Q127, Q128 Design Concepts Q1, Q7-Q12, Q15, Q26, Q2, Q3, Q19, Q20, Q21, Q02, Q08, Q3 - Q13, Q22, Q56 Q31, Q45, Q91, Q94, Q98, Q09, Q15 Q13, Q14, DC Q101, Q106, Q107, Q108, Q16, Q17, Q109, Q111 Q18, Q20 Design Patterns Q12, Q16, Q24, Q36, Q5, Q5, Q22, Q24, Q25, Q11, Q12 Q9 - Q13 Q51, Q52, Q58, Q63, Q41, Q83, Q84, Q85, Q86, DP Q75 Q87, Q88, Q110, Q111, Q116 Transactional - Q43, Q71, Q72, Q73, Q74, Q7 Issues TI Q75, Q77, Q78, Q79 Concurrency Issues Q15, Q17, Q21, Q34, Q16, Q34, Q72, Q78, Q6 CI Q42, Q46, Q62 Q113 Performance Issues Q15, Q17,Q20-Q26, Q10, Q16, Q43, Q45, Q46, Q3, Q5 Q46, Q62, Q72 Q72, Q83-Q88, Q93, Q97, PI Q98, Q100, Q102, Q123, Q125, Q128 Memory Issues Q26, Q34, Q37,Q38, Q45, Q93 Q3, Q4 MI Q42, Q51, Q73, Q74 Scalability Issues Q23, Q24 Q20, Q21, Q120, Q122 SI Exception Handling Q39, Q40 Q76, Q77 EH Security Q10, Q35, Q70 Q12, Q13, Q23, Q35, Q46, Q13 SE Q51, Q58, Q81, Q92 Best Practices Q17, Q25, Q39, Q72, Q10, Q16, Q39, Q40, Q41, Q1, Q2 BP Q73 Q46, Q82, Q124, Q125
  • 13. 12 Software - Q103-Q109, Q129, Q130, Q1, Q9, Q1, Q2 Development SD Q132, Q136 Q10, Q14 Process Coding1 Q05, Q10, Q12, Q14 – Q10, Q18, Q21, Q23, Q36, Q11, Q12 Q21, Q23, Q25, Q26, Q38, Q42, Q43, Q45, Q74, CO Q33, Q35, Q39, Q51, Q75, Q76, Q77, Q112, Q52, Q55 Q114, Q127, Q128 Frequently Asked Q1, Q6, Q7, Q9, Q10, Q1, Q2, Q3, Q7, Q10, Q11, Q1, Q2, Q1, Q6, Q7, Questions Q12, Q13, Q14, Q15, Q12, Q13, Q16, Q19, Q22, Q3, Q4, Q9, Q10, Q11, Q16, Q18, Q20, Q21, Q24, Q25, Q27, Q28, Q30, Q5, Q6, Q15, Q16, Q22, Q23, Q27, Q28, Q31, Q32, Q34, Q35, Q36, Q7, Q8, Q17, Q18 Q29, Q30, Q31, Q32, Q39, Q40, Q41, Q42, Q43, Q9, Q10, Q36, Q37, Q43, Q45, Q45, Q46, Q48, Q49, Q50, Q12, Q15 Q46, Q48, Q51, Q52, Q52, Q53, Q61, Q63, Q65, Q55, Q58, Q60, Q62, Q66, Q69, Q70, Q71, Q72, FAQ Q63, Q64, Q67, Q68, Q73, Q76, Q77, Q82, Q83, Q69, Q70, Q71 Q84, Q85, Q86, Q87, Q90, Q72 – Q86 Q91, Q93, Q95, Q96, Q97, Q98, Q100, Q101, Q102, Q107, Q108, Q110, Q113, Q115, Q116, Q118, Q123, Q124, Q125, Q126, Q129, Q130, Q131, Q133, Q134, Q135, Q136. 1 Some interviewers request you to write a small program during interview or prior to getting to the interview stage. This is to ascertain that you can code using object oriented concepts and design patterns. I have included a coding key area to illustrate what you need to look for while coding. Unlike other key areas, the CO is not always shown against the question but shown above the actual section of relevance within a question.
  • 14. Java 13 SECTION ONE Java – Interview questions & answers Language Fundamentals LF K E Design Concepts DC Y Design Patterns DP Concurrency Issues CI A Performance Issues PI R Memory Issues MI E Exception Handling EH A S Security SE Scalability Issues SI Coding1 CO FAQ - Frequently Asked Questions 1 Unlike other key areas, the CO is not always shown against the question but shown above the actual content of relevance within a question.
  • 15. 14 Java - Fundamentals Java – Fundamentals Q 01: Give a few reasons for using Java? LF DC FAQ A 01: Java is a fun language. Let’s look at some of the reasons: Built-in support for multi-threading, socket communication, and memory management (automatic garbage collection). Object Oriented (OO). Better portability than other languages across operating systems. Supports Web based applications (Applet, Servlet, and JSP), distributed applications (sockets, RMI, EJB etc) and network protocols (HTTP, JRMP etc) with the help of extensive standardized APIs (Application Programming Interfaces). Q 02: What is the main difference between the Java platform and the other software platforms? LF A 02: Java platform is a software-only platform, which runs on top of other hardware-based platforms like UNIX, NT etc. The Java platform has 2 components: Java Virtual Machine (JVM) – ‘JVM’ is a software that can be ported onto various hardware platforms. Byte codes are the machine language of the JVM. Java Application Programming Interface (Java API) – set of classes written using the Java language and run on the JVM. Q 03: What is the difference between C++ and Java? LF A 03: Both C++ and Java use similar syntax and are Object Oriented, but: Java does not support pointers. Pointers are inherently tricky to use and troublesome. Java does not support multiple inheritances because it causes more problems than it solves. Instead Java supports multiple interface inheritance, which allows an object to inherit many method signatures from different interfaces with the condition that the inheriting object must implement those inherited methods. The multiple interface inheritance also allows an object to behave polymorphically on those methods. [Refer Q9 and Q10 in Java section.] Java does not support destructors but adds a finalize() method. Finalize methods are invoked by the garbage collector prior to reclaiming the memory occupied by the object, which has the finalize() method. This means you do not know when the objects are going to be finalized. Avoid using finalize() method to release non- memory resources like file handles, sockets, database connections etc because Java has only a finite number of these resources and you do not know when the garbage collection is going to kick in to release these resources through the finalize() method. Java does not include structures or unions because the traditional data structures are implemented as an object oriented framework (Java Collections Framework – Refer Q16, Q17 in Java section).
  • 16. Java - Fundamentals 15 All the code in Java program is encapsulated within classes therefore Java does not have global variables or functions. C++ requires explicit memory management, while Java includes automatic garbage collection. [Refer Q37 in Java section]. Q 04: What are the usages of Java packages? LF A 04: It helps resolve naming conflicts when different packages have classes with the same names. This also helps you organize files within your project. For example: java.io package do something related to I/O and java.net package do something to do with network and so on. If we tend to put all .java files into a single package, as the project gets bigger, then it would become a nightmare to manage all your files. You can create a package as follows with package keyword, which is the first keyword in any Java program followed by import statements. The java.lang package is imported implicitly by default and all the other packages must be explicitly imported. package com.xyz.client ; import java.io.File; import java.net.URL; Q 05: Explain Java class loaders? If you have a class in a package, what do you need to do to run it? Explain dynamic class loading? LF A 05: Class loaders are hierarchical. Classes are introduced into the JVM as they are referenced by name in a class that is already running in the JVM. So, how is the very first class loaded? The very first class is especially loaded with the help of static main( ) method declared in your class. All the subsequently loaded classes are loaded by the classes, which are already loaded and running. A class loader creates a namespace. All JVMs include at least one class loader that is embedded within the JVM called the primordial (or bootstrap) class loader. Now let’s look at non-primordial class loaders. The JVM has hooks in it to allow user defined class loaders to be used in place of primordial class loader. Let us look at the class loaders created by the JVM. CLASS LOADER reloadable? Explanation Bootstrap No Loads JDK internal classes, java.* packages. (as defined in the sun.boot.class.path (primordial) system property, typically loads rt.jar and i18n.jar) Extensions No Loads jar files from JDK extensions directory (as defined in the java.ext.dirs system property – usually lib/ext directory of the JRE) System No Loads classes from system classpath (as defined by the java.class.path property, which is set by the CLASSPATH environment variable or –classpath or –cp command line options) JVM class loaders Bootstrap (primordial) Classes loaded by Bootstrap class loader have no visibility into classes (rt.jar, i18.jar) loaded by its descendants (ie Extensions and Systems class loaders). Extensions The classes loaded by system class loader have visibility into classes loaded (lib/ext) by its parents (ie Extensions and Bootstrap class loaders). If there were any sibling class loaders they cannot see classes loaded by System each other. They can only see the classes loaded by their parent class (-classpath) loader. For example Sibling1 class loader cannot see classes loaded by Sibling2 class loader Sibling1 Sibling2 Both Sibling1 and Sibling2 class loaders have visibilty into classes loaded classloader classloader by their parent class loaders (eg: System, Extensions, and Bootstrap) Class loaders are hierarchical and use a delegation model when loading a class. Class loaders request their parent to load the class first before attempting to load it themselves. When a class loader loads a class, the child class loaders in the hierarchy will never reload the class again. Hence uniqueness is maintained. Classes loaded
  • 17. 16 Java - Fundamentals by a child class loader have visibility into classes loaded by its parents up the hierarchy but the reverse is not true as explained in the above diagram. Q. What do you need to do to run a class with a main() method in a package? Example: Say, you have a class named “Pet” in a project folder “c:myProject” and package named com.xyz.client, will you be able to compile and run it as it is? package com.xyz.client; public class Pet { public static void main(String[] args) { System.out.println("I am found in the classpath"); } } To run c:myProject> java com.xyz.client.Pet The answer is no and you will get the following exception: “Exception in thread "main" java.lang.- NoClassDefFoundError: com/xyz/client/Pet”. You need to set the classpath. How can you do that? One of the following ways: 1. Set the operating system CLASSPATH environment variable to have the project folder “c:myProject”. [Shown in the above diagram as the System –classpath class loader] 2. Set the operating system CLASSPATH environment variable to have a jar file “c:/myProject/client.jar”, which has the Pet.class file in it. [Shown in the above diagram as the System –classpath class loader]. 3. Run it with –cp or –classpath option as shown below: c:>java –cp c:/myProject com.xyz.client.Pet OR c:>java -classpath c:/myProject/client.jar com.xyz.client.Pet Important: Two objects loaded by different class loaders are never equal even if they carry the same values, which mean a class is uniquely identified in the context of the associated class loader. This applies to singletons too, where each class loader will have its own singleton. [Refer Q51 in Java section for singleton design pattern] Q. Explain static vs. dynamic class loading? Static class loading Dynamic class loading Classes are statically loaded with Java’s Dynamic loading is a technique for programmatically invoking the functions of a “new” operator. class loader at run time. Let us look at how to load classes dynamically. class MyClass { Class.forName (String className); //static method which returns a Class public static void main(String args[]) { Car c = new Car(); The above static method returns the class object associated with the class } name. The string className can be supplied dynamically at run time. Unlike the } static loading, the dynamic loading will decide whether to load the class Car or the class Jeep at runtime based on a properties file and/or other runtime conditions. Once the class is dynamically loaded the following method returns an instance of the loaded class. It’s just like creating a class object with no arguments. class.newInstance (); //A non-static method, which creates an instance of a //class (i.e. creates an object). Jeep myJeep = null ; //myClassName should be read from a .properties file or a Constants class. // stay away from hard coding values in your program. CO String myClassName = "au.com.Jeep" ; Class vehicleClass = Class.forName(myClassName) ; myJeep = (Jeep) vehicleClass.newInstance(); myJeep.setFuelCapacity(50); A NoClassDefFoundException is A ClassNotFoundException is thrown when an application tries to load in a thrown if a class is referenced with class through its string name using the following methods but no definition for the Java’s “new” operator (i.e. static loading) class with the specified name could be found: but the runtime system cannot find the referenced class. The forName(..) method in class - Class. The findSystemClass(..) method in class - ClassLoader. The loadClass(..) method in class - ClassLoader.
  • 18. Java - Fundamentals 17 Q. What are “static initializers” or “static blocks with no function names”? When a class is loaded, all blocks that are declared static and don’t have function name (i.e. static initializers) are executed even before the constructors are executed. As the name suggests they are typically used to initialize static fields. CO public class StaticInitializer { public static final int A = 5; public static final int B; //note that it is not public static final int B = null; //note that since B is final, it can be initialized only once. //Static initializer block, which is executed only once when the class is loaded. static { if(A == 5) B = 10; else B = 5; } public StaticInitializer(){} //constructor is called only after static initializer block } The following code gives an Output of A=5, B=10. public class Test { System.out.println("A =" + StaticInitializer.A + ", B =" + StaticInitializer.B); } Q 06: What is the difference between constructors and other regular methods? What happens if you do not provide a constructor? Can you call one constructor from another? How do you call the superclass’s constructor? LF FAQ A 06: Constructors Regular methods Constructors must have the same name as the class Regular methods can have any name and can be called any number of name and cannot return a value. The constructors times. E.g. for a Pet.class. are called only once per creation of an object while regular methods can be called many times. E.g. for a public void Pet(){} // regular method has a void return type. Pet.class Note: method name is shown starting with an uppercase to public Pet() {} // constructor differentiate a constructor from a regular method. Better naming convention is to have a meaningful name starting with a lowercase like: public void createPet(){} // regular method has a void return type Q. What happens if you do not provide a constructor? Java does not actually require an explicit constructor in the class description. If you do not include a constructor, the Java compiler will create a default constructor in the byte code with an empty argument. This default constructor is equivalent to the explicit “Pet(){}”. If a class includes one or more explicit constructors like “public Pet(int id)” or “Pet(){}” etc, the java compiler does not create the default constructor “Pet(){}”. Q. Can you call one constructor from another? Yes, by using this() syntax. E.g. public Pet(int id) { this.id = id; // “this” means this object } public Pet (int id, String type) { this(id); // calls constructor public Pet(int id) this.type = type; // ”this” means this object } Q. How to call the superclass constructor? If a class called “SpecialPet” extends your “Pet” class then you can use the keyword “super” to invoke the superclass’s constructor. E.g. public SpecialPet(int id) { super(id); //must be the very first statement in the constructor. } To call a regular method in the super class use: “super.myMethod( );”. This can be called at any line. Some frameworks based on JUnit add their own initialization code, and not only do they need to remember to invoke
  • 19. 18 Java - Fundamentals their parent's setup() method, you, as a user, need to remember to invoke theirs after you wrote your initialization code: public class DBUnitTestCase extends TestCase { public void setUp() { super.setUp(); // do my own initialization } } public void cleanUp() throws Throwable { try { … // Do stuff here to clean up your object(s). } catch (Throwable t) {} finally{ super.cleanUp(); //clean up your parent class. Unlike constructors // super.regularMethod() can be called at any line. } } Q 07: What are the advantages of Object Oriented Programming Languages (OOPL)? DC FAQ A 07: The Object Oriented Programming Languages directly represent the real life objects like Car, Jeep, Account, Customer etc. The features of the OO programming languages like polymorphism, inheritance and encapsulation make it powerful. [Tip: remember pie which, stands for Polymorphism, Inheritance and Encapsulation are the 3 pillars of OOPL] Q 08: How does the Object Oriented approach improve software development? DC A 08: The key benefits are: Re-use of previous work: using implementation inheritance and object composition. Real mapping to the problem domain: Objects map to real world and represent vehicles, customers, products etc: with encapsulation. Modular Architecture: Objects, systems, frameworks etc are the building blocks of larger systems. The increased quality and reduced development time are the by-products of the key benefits discussed above. If 90% of the new application consists of proven existing components then only the remaining 10% of the code have to be tested from scratch. Q 09: How do you express an ‘is a’ relationship and a ‘has a’ relationship or explain inheritance and composition? What is the difference between composition and aggregation? DC FAQ A 09: The ‘is a’ relationship is expressed with inheritance and ‘has a’ relationship is expressed with composition. Both inheritance and composition allow you to place sub-objects inside your new class. Two of the main techniques for code reuse are class inheritance and object composition. Inheritance [ is a ] Vs Composition [ has a ] Building is a is a [House is a Building] has a [House has a Bathroom] class Building{ class House { has a ....... Bathroom room = new Bathroom() ; } .... public void getTotMirrors(){ class House extends Building{ room.getNoMirrors(); Bathroom ......... .... House } } } Inheritance is uni-directional. For example House is a Building. But Building is not a House. Inheritance uses extends key word. Composition: is used when House has a Bathroom. It is incorrect to say House is a
  • 20. Java - Fundamentals 19 Bathroom. Composition simply means using instance variables that refer to other objects. The class House will have an instance variable, which refers to a Bathroom object. Q. Which one to favor, composition or inheritance? The guide is that inheritance should be only used when subclass ‘is a’ superclass. Don’t use inheritance just to get code reuse. If there is no ‘is a’ relationship then use composition for code reuse. Overuse of implementation inheritance (uses the “extends” key word) can break all the subclasses, if the superclass is modified. Do not use inheritance just to get polymorphism. If there is no ‘is a’ relationship and all you want is polymorphism then use interface inheritance with composition, which gives you code reuse (Refer Q10 in Java section for interface inheritance). What is the difference between aggregation and composition? Aggregation Composition Aggregation is an association in which one class Composition is an association in which one class belongs to a belongs to a collection. This is a part of a whole collection. This is a part of a whole relationship where a part relationship where a part can exist without a whole. cannot exist without a whole. If a whole is deleted then all parts are For example a line item is a whole and product is a deleted. For example An order is a whole and line items are parts. part. If a line item is deleted then corresponding If an order is deleted then all corresponding line items for that product need not be deleted. So aggregation has a order should be deleted. So composition has a stronger weaker relationship. relationship. Q 10: What do you mean by polymorphism, inheritance, encapsulation, and dynamic binding? DC SE FAQ A 10: Polymorphism – means the ability of a single variable of a given type to be used to reference objects of different types, and automatically call the method that is specific to the type of object the variable references. In a nutshell, polymorphism is a bottom-up method call. The benefit of polymorphism is that it is very easy to add new classes of derived objects without breaking the calling code (i.e. getTotArea() in the sample code shown below) that uses the polymorphic classes or interfaces. When you send a message to an object even though you don’t know what specific type it is, and the right thing happens, that’s called polymorphism. The process used by object-oriented programming languages to implement polymorphism is called dynamic binding. Let us look at some sample code to demonstrate polymorphism: CO Sam ple code: //client or calling code <<abstract>> For exam ple: given a base Shape double dim = 5.0; //ie 5 m eters radius or width List listShapes = new ArrayList(20); class/interface Shape, polymorphism allows the +area() : double Shape s = new Circle(); program m er to define listShapes.add(s); //add circle different area(double s = new Square(); dim 1) methods for any Circle listShapes.add(s); //add square number of derived classes Square such as Circle, Square etc. +area() : double getTotArea (listShapes,dim ); //returns 78.5+25.0=103.5 N o m atter what shape an +area() : double //Later on, if you decide to add a half circle then define object is, applying the area //a HalfCircle class, which extends Circle and then provide an m ethod to it will return the H alfC ircle //area(). m ethod but your called m ethod getTotArea(...) rem ains right results. //sam e. +area() : double s = new H alfCircle(); Later on H alfCicle can be listShapes.add(s); //add HalfC ircle added without breaking your called code i.e. getTotArea (listShapes,dim ); //returns 78.5+25.0+39.25=142.75 m ethod getTotalArea(...) «interface» Shape /** called m ethod: m ethod which adds up areas of various +area() : double ** shapes supplied to it. **/ Depending on what the public double getTotArea(List listShapes, double dim ){ shape is, appropriate Iterator it = listShapes.iterator(); area(double dim ) m ethod Circle Square double totalArea = 0.0; gets called and calculated. //loop through different shapes Circle area is 78.5sqm +area() : double +area() : double w hile(it.hasNext()) { Shape s = (Shape) it.next(); Square area is 25sqm totalArea += s.area(dim ); //polym orphic m ethod call HalfC ircle area is 39.25 HalfCircle } sqm return totalArea ; } +area() : double
  • 21. 20 Java - Fundamentals Inheritance – is the inclusion of behavior (i.e. methods) and state (i.e. variables) of a base class in a derived class so that they are accessible in that derived class. The key benefit of Inheritance is that it provides the formal mechanism for code reuse. Any shared piece of business logic can be moved from the derived class into the base class as part of refactoring process to improve maintainability of your code by avoiding code duplication. The existing class is called the superclass and the derived class is called the subclass. Inheritance can also be defined as the process whereby one object acquires characteristics from one or more other objects the same way children acquire characteristics from their parents. There are two types of inheritances: 1. Implementation inheritance (aka class inheritance): You can extend an application’s functionality by reusing functionality in the parent class by inheriting all or some of the operations already implemented. In Java, you can only inherit from one superclass. Implementation inheritance promotes reusability but improper use of class inheritance can cause programming nightmares by breaking encapsulation and making future changes a problem. With implementation inheritance, the subclass becomes tightly coupled with the superclass. This will make the design fragile because if you want to change the superclass, you must know all the details of the subclasses to avoid breaking them. So when using implementation inheritance, make sure that the subclasses depend only on the behavior of the superclass, not on the actual implementation. For example in the above diagram, the subclasses should only be concerned about the behavior known as area() but not how it is implemented. 2. Interface inheritance (aka type inheritance): This is also known as subtyping. Interfaces provide a mechanism for specifying a relationship between otherwise unrelated classes, typically by specifying a set of common methods each implementing class must contain. Interface inheritance promotes the design concept of program to interfaces not to implementations. This also reduces the coupling or implementation dependencies between systems. In Java, you can implement any number of interfaces. This is more flexible than implementation inheritance because it won’t lock you into specific implementations which make subclasses difficult to maintain. So care should be taken not to break the implementing classes by modifying the interfaces. Which one to use? Prefer interface inheritance to implementation inheritance because it promotes the design concept of coding to an interface and reduces coupling. Interface inheritance can achieve code reuse with the help of object composition. If you look at Gang of Four (GoF) design patterns, you can see that it favors interface inheritance to implementation inheritance. CO Implementation inheritance Interface inheritance with composition Let’s assume that savings account and term deposit account Let’s look at an interface inheritance code sample, which makes use have a similar behavior in terms of depositing and of composition for reusability. In the following example the methods withdrawing money, so we will get the super class to deposit(…) and withdraw(…) share the same piece of code in implement this behavior and get the subclasses to reuse this AccountHelper class. The method calculateInterest(…) has its specific behavior. But saving account and term deposit account implementation in its own class. have specific behavior in calculating the interest. Super class Account has reusable code as methods public interface Account { deposit (double amount) and withdraw (double amount). public abstract double calculateInterest(double amount); public abstract void deposit(double amount); public abstract class Account { public abstract void withdraw(double amount); public void deposit (double amount) { } System.out.println("depositing " + amount); } Code to interface so that the implementation can change. public void withdraw (double amount) { public interface AccountHelper { System.out.println ("withdrawing " + amount); public abstract void deposit (double amount); } public abstract void withdraw (double amount); } public abstract double calculateInterest(double amount); } class AccountHelperImpl has reusable code as methods deposit (double amount) and withdraw (double amount). public class SavingsAccount extends Account { public class AccountHelperImpl implements AccountHelper { public void deposit(double amount) { public double calculateInterest (double amount) { System.out.println("depositing " + amount); // calculate interest for SavingsAccount } return amount * 0.03; } public void withdraw(double amount) { System.out.println("withdrawing " + amount); public void deposit (double amount) { } super.deposit (amount); // get code reuse // do something else } } public void withdraw (double amount) { public class SavingsAccountImpl implements Account {
  • 22. Java - Fundamentals 21 super.withdraw (amount); // get code reuse // composed helper class (i.e. composition). // do something else AccountHelper helper = new AccountHelperImpl (); } } public double calculateInterest (double amount) { // calculate interest for SavingsAccount public class TermDepositAccount extends Account { return amount * 0.03; } public double calculateInterest (double amount) { // calculate interest for SavingsAccount public void deposit (double amount) { return amount * 0.05; helper.deposit( amount); // code reuse via composition } } public void deposit(double amount) { public void withdraw (double amount) { super.deposit (amount); // get code reuse helper.withdraw (amount); // code reuse via composition // do something else } } } public void withdraw(double amount) { public class TermDepositAccountImpl implements Account { super.withdraw (amount); // get code reuse // do something else // composed helper class (i.e. composition). } AccountHelper helper = new AccountHelperImpl (); } public double calculateInterest (double amount) { //calculate interest for SavingsAccount return amount * 0.05; } public void deposit (double amount) { helper.deposit (amount) ; // code reuse via composition } public void withdraw (double amount) { helper.withdraw (amount) ; // code reuse via composition } } The Test class: public class Test { public static void main(String[] args) { Account acc1 = new SavingsAccountImpl(); acc1.deposit(50.0); Account acc2 = new TermDepositAccountImpl(); acc2.deposit(25.0); acc1.withdraw(25); acc2.withdraw(10); double cal1 = acc1.calculateInterest(100.0); double cal2 = acc2.calculateInterest(100.0); System.out.println("Savings --> " + cal1); System.out.println("TermDeposit --> " + cal2); } } The output: depositing 50.0 depositing 25.0 withdrawing 25.0 withdrawing 10.0 Savings --> 3.0 TermDeposit --> 5.0 Q. Why would you prefer code reuse via composition over inheritance? Both the approaches make use of polymorphism and gives code reuse (in different ways) to achieve the same results but: The advantage of class inheritance is that it is done statically at compile-time and is easy to use. The disadvantage of class inheritance is that because it is static, implementation inherited from a parent class cannot be changed at run-
  • 23. 22 Java - Fundamentals time. In object composition, functionality is acquired dynamically at run-time by objects collecting references to other objects. The advantage of this approach is that implementations can be replaced at run-time. This is possible because objects are accessed only through their interfaces, so one object can be replaced with another just as long as they have the same type. For example: the composed class AccountHelperImpl can be replaced by another more efficient implementation as shown below if required: public class EfficientAccountHelperImpl implements AccountHelper { public void deposit(double amount) { System.out.println("efficient depositing " + amount); } public void withdraw(double amount) { System.out.println("efficient withdrawing " + amount); } } Another problem with class inheritance is that the subclass becomes dependent on the parent class implementation. This makes it harder to reuse the subclass, especially if part of the inherited implementation is no longer desirable and hence can break encapsulation. Also a change to a superclass can not only ripple down the inheritance hierarchy to subclasses, but can also ripple out to code that uses just the subclasses making the design fragile by tightly coupling the subclasses with the super class. But it is easier to change the interface/implementation of the composed class. Due to the flexibility and power of object composition, most design patterns emphasize object composition over inheritance whenever it is possible. Many times, a design pattern shows a clever way of solving a common problem through the use of object composition rather then a standard, less flexible, inheritance based solution. Encapsulation – refers to keeping all the related members (variables and methods) together in an object. Specifying member variables as private can hide the variables and methods. Objects should hide their inner workings from the outside view. Good encapsulation improves code modularity by preventing objects interacting with each other in an unexpected way, which in turn makes future development and refactoring efforts easy. CO Sample code Class MyMarks { private int vmarks = 0; k) in private String name; ar tg Member t m et (in M ar variables are ks encapsulated, public void setMarks(int mark) ar ks () throws MarkException { tM so that they if(mark > 0) se can only be this.vmarks = mark; accessed via else { private int vmarks; encapsulating throw new MarkException("No negative private String name; methods. Values"); } se tN ) } am e( e m (S tri tNa public int getMarks(){ ng ge na g return vmarks; rin } m e) St //getters and setters for attribute name goes here. } Being able to encapsulate members of a class is important for security and integrity. We can protect variables from unacceptable values. The sample code above describes how encapsulation can be used to protect the MyMarks object from having negative values. Any modification to member variable “vmarks” can only be carried out through the setter method setMarks(int mark). This prevents the object “MyMarks” from having any negative values by throwing an exception. Q 11: What is design by contract? Explain the assertion construct? DC A 11: Design by contract specifies the obligations of a calling-method and called-method to each other. Design by contract is a valuable technique, which should be used to build well-defined interfaces. The strength of this programming methodology is that it gets the programmer to think clearly about what a function does, what pre and post conditions it must adhere to and also it provides documentation for the caller. Java uses the assert statement to implement pre- and post-conditions. Java’s exceptions handling also support design by contract especially checked exceptions (Refer Q39 in Java section for checked exceptions). In design by contract in addition to specifying programming code to carrying out intended operations of a method the programmer also specifies:
  • 24. Java - Fundamentals 23 1. Preconditions – This is the part of the contract the calling-method must agree to. Preconditions specify the conditions that must be true before a called method can execute. Preconditions involve the system state and the arguments passed into the method at the time of its invocation. If a precondition fails then there is a bug in the calling-method or calling software component. On public methods On non-public methods Preconditions on public methods are enforced by explicit checks You can use assertion to check the parameters of the that throw particular, specified exceptions. You should not use non-public methods. assertion to check the parameters of the public methods but can use for the non-public methods. Assert is inappropriate private void setCalculatedRate(int rate) { because the method guarantees that it will always enforce the assert (rate > 0 && rate < MAX_RATE) : rate; argument checks. It must check its arguments whether or not //calculate the rate and set it. assertions are enabled. Further, assert construct does not throw } an exception of a specified type. It can throw only an AssertionError. Assertions can be disabled, so programs must not assume that assert construct will be always executed: public void setRate(int rate) { if(rate <= 0 || rate > MAX_RATE){ //Wrong: throw new IllegalArgumentException(“Invalid rate ” + rate); //if assertion is disabled, “pilotJob” never gets removed } assert jobsAd.remove(pilotJob); setCalculatedRate(rate); } //Correct: boolean pilotJobRemoved = jobsAd.remove(pilotJob); assert pilotJobRemoved; 2. Postconditions – This is the part of the contract the called-method agrees to. What must be true after a method completes successfully. Postconditions can be used with assertions in both public and non-public methods. The postconditions involve the old system state, the new system state, the method arguments and the method’s return value. If a postcondition fails then there is a bug in the called-method or called software component. public double calcRate(int rate) { if(rate <= 0 || rate > MAX_RATE){ throw new IllegalArgumentException(“Invalid rate !!! ”); } //logic to calculate the rate and set it goes here assert this.evaluate(result) < 0 : this; //message sent to AssertionError on failure return result; } 3. Class invariants - what must be true about each instance of a class? A class invariant as an internal invariant that can specify the relationships among multiple attributes, and should be true before and after any method completes. If an invariant fails then there could be a bug in either calling-method or called-method. There is no particular mechanism for checking invariants but it is convenient to combine all the expressions required for checking invariants into a single internal method that can be called by assertions. For example if you have a class, which deals with negative integers then you define the isNegative() convenient internal method: class NegativeInteger { Integer value = new Integer (-1); //invariant //constructor public NegativeInteger(Integer int) { //constructor logic goes here assert isNegative(); } // rest of the public and non-public methods goes here. public methods should call // assert isNegative(); prior to its return // convenient internal method for checking invariants. // Returns true if the integer value is negative private boolean isNegative(){ return value.intValue() < 0 ; } }
  • 25. 24 Java - Fundamentals The isNegative() method should be true before and after any method completes, each public method and constructor should contain the following assert statement immediately prior to its return. assert isNegative(); Explain the assertion construct? The assertion statements have two forms as shown below: assert Expression1; assert Expression1 : Expression2; Where: Expression1 is a boolean expression. If the Expression1 evaluates to false, it throws an AssertionError without any detailed message. Expression2 if the Expression1 evaluates to false throws an AssertionError with using the value of the Expression2 as the error’s detailed message. Note: If you are using assertions (available from JDK1.4 onwards), you should supply the JVM argument to enable it by package name or class name. java -ea[:packagename...|:classname] or java -enableassertions[:packagename...|:classname] java –ea:Account Q 12: What is the difference between an abstract class and an interface and when should you use them? LF DP DC FAQ A 12: In design, you want the base class to present only an interface for its derived classes. This means, you don’t want anyone to actually instantiate an object of the base class. You only want to upcast to it (implicit upcasting, which gives you polymorphic behavior), so that its interface can be used. This is accomplished by making that class abstract using the abstract keyword. If anyone tries to make an object of an abstract class, the compiler prevents it. The interface keyword takes this concept of an abstract class a step further by preventing any method or function implementation at all. You can only declare a method or function but not provide the implementation. The class, which is implementing the interface, should provide the actual implementation. The interface is a very useful and commonly used aspect in OO design, as it provides the separation of interface and implementation and enables you to: Capture similarities among unrelated classes without artificially forcing a class relationship. Declare methods that one or more classes are expected to implement. Reveal an object's programming interface without revealing its actual implementation. Model multiple interface inheritance in Java, which provides some of the benefits of full on multiple inheritances, a feature that some object-oriented languages support that allow a class to have more than one superclass. Abstract class Interface Have executable methods and abstract methods. Have no implementation code. All methods are abstract. Can only subclass one abstract class. A class can implement any number of interfaces. Diamond problem & use of interface Shape <<Interface>> ShapeIF Circle Square CircleOnSquare Circle Square <<Interface>> <<Interface>> CircleIF SquareIF CircleOnSquare Multiple interface inheritance in JAVA No multiple inheritance in JAVA
  • 26. Java - Fundamentals 25 Q. When to use an abstract class?: In case where you want to use implementation inheritance then it is usually provided by an abstract base class. Abstract classes are excellent candidates inside of application frameworks. Abstract classes let you define some default behavior and force subclasses to provide any specific behavior. Care should be taken not to overuse implementation inheritance as discussed in Q10 in Java section. Q. When to use an interface?: For polymorphic interface inheritance, where the client wants to only deal with a type and does not care about the actual implementation use interfaces. If you need to change your design frequently, you should prefer using interface to abstract. CO Coding to an interface reduces coupling and interface inheritance can achieve code reuse with the help of object composition. For example: The Spring framework’s dependency injection promotes code to an interface principle. Another justification for using interfaces is that they solve the ‘diamond problem’ of traditional multiple inheritance as shown in the figure. Java does not support multiple inheritance. Java only supports multiple interface inheritance. Interface will solve all the ambiguities caused by this ‘diamond problem’. Design pattern: Strategy design pattern lets you swap new algorithms and processes into your program without altering the objects that use them. Strategy design pattern: Refer Q11 in How would you go about… section. Q 13: Why there are some interfaces with no defined methods (i.e. marker interfaces) in Java? LF FAQ A 13: The interfaces with no defined methods act like markers. They just tell the compiler that the objects of the classes implementing the interfaces with no defined methods need to be treated differently. Example java.io.Serializable (Refer Q23 in Java section), java.lang.Cloneable, java.util.EventListener etc. Marker interfaces are also known as “tag” interfaces since they tag all the derived classes into a category based on their purpose. Q 14: When is a method said to be overloaded and when is a method said to be overridden? LF CO FAQ A 14: Method Overloading Method Overriding Overloading deals with multiple methods in the same class Overriding deals with two methods, one in the parent class and with the same name but different method signatures. the other one in the child class and has the same name and signatures. class MyClass { public void getInvestAmount(int rate) {…} class BaseClass{ public void getInvestAmount(int rate) {…} public void getInvestAmount(int rate, long principal) } { … } } class MyClass extends BaseClass { public void getInvestAmount(int rate) { …} Both the above methods have the same method names } but different method signatures, which mean the methods are overloaded. Both the above methods have the same method names and the signatures but the method in the subclass MyClass overrides the method in the superclass BaseClass. Overloading lets you define the same operation in Overriding lets you define the same operation in different different ways for different data. ways for different object types. Q 15: What is the main difference between an ArrayList and a Vector? What is the main difference between HashMap and Hashtable? What is the difference between a stack and a queue? LF DC PI CI FAQ A 15: Vector / Hashtable ArrayList / HashMap Original classes before the introduction of Collections So if you don’t need a thread safe collection, use the ArrayList or API. Vector & Hashtable are synchronized. Any HashMap. Why pay the price of synchronization unnecessarily at method that touches their contents is thread-safe. the expense of performance degradation. Q. So which is better? As a general rule, prefer ArrayList/HashMap to Vector/Hashtable. If your application is a multithreaded application and at least one of the threads either adds or deletes an entry into the collection then use new Java collections API‘s external synchronization facility as shown below to temporarily synchronize your collections as needed: CO Map myMap = Collections.synchronizedMap (myMap); // single lock for the entire map List myList = Collections.synchronizedList (myList); // single lock for the entire list