Which is the best, most recognized Java certification?

Oracle certified java certification receives the highest value as it is one of the most typical certification and thus hard to crack. It requires comprehensive knowledge of Java technologies. Oracle certification has been known to give a salary hike, position elevation or job proficiency. Oracle offers different stages of certification – junior, professional, associate, and experts, specialist. Once you got this certification, many doors related to Java technology like software development, application development, will open for you.

Java certification offered by oracle:

●Oracle Certified Associate, Java SE 7 Programmer (OCAJP 7).

●Oracle Certified Associate, Java SE 8 Programmer (OCAJP 8).

●Oracle Certified Professional, Java SE 7 Programmer (OCPJP 7).

●Oracle Certified Professional, Java SE 8 Programmer (OCPJP 8).

●Oracle Certified Professional, Java SE 9 Programmer (OCPJP 9).

To prepare for this certification, you need proper programming techniques which you can learn by doing Java certification course or by taking java mock exams.

How much does an Oracle certified Java programmer earns?

It depends on the organization you are joining in.

Usually product based organizations, like Symantec, Quick Heal, EMC, eQ offer a good package to freshers.  It ranges from 6-9 LPA, depending upon your performance in the interview, your scores in exams and your college. Obviously number of interview rounds is more, and gets tough as you progress.

Service based organizations, like Persistent, TCS, TechM, Wipro, Infosys offer a little lower packages ranging from 3.5-5 LPA. They usually conduct 2 technical and a HR round.

If you are joining a start up,  the salary will totally depend on the phase of the startup.

Phase 1:

If the start up is recently formed, which is yet to stabilize their product and establish good contacts in the market, then they usually offer low salaries ranging from 1.5 LPA to 3.5 LPA.

Number of employees is usually 5 to 25. Most of them are founders and co-founders. They have tremendous work, and they need resources who will help to take the organization to the next phase. If this goes well, and startup succeeds, in couple of years, I’ve seen salaries of employees jumping by 200% to 400%.

However, if the idea or the product fails, then employee may have to search for other job. This risk is always there at this phase. There is hardly any education criteria for such organization. You appear for the interview, if you pass it, then you get the job.

Phase 2:

In this phase, their product is stable and they have acquired at least three-four paying customers. Such start ups  are considered stable, and their progress goes well. Number of employees ranges from 50 to 100.
Such start ups offer very good packages ranging from 6 LPA – 12 LPA depending on your university/college, your scores, and the interview.
There is low risk involved, salary hikes are usually around 20-30%.

Phase 3:

I won’t call these organizations as start up. They are now well established software organizations trying to acquire more and more customers. Number of employees ranges from 100-300.
Such organizations offer a regular packages ranging from 3.5 LPA – 6 LPA depending on your university/college and the scores, and the interview. Salary hikes are around 15-25%.

I personally don’t think OCJP certification will give you ‘extra’ package than other candidates. Everyone is aware of the quality and difficulty level of OCJP exams. It is pretty easy to score 80%. So it hardly has any impacts on your salary.

However, your chances of getting selected in interview increase if you have this certification.

Which Java Certification course should I do?

Are you new to Java programming world?

If the answer is Yes, then you have the following two certifications as the first one to crack for decorate your profiles.

  • Oracle Certified Associate, Java Programmer I (OCAJP)
  • Oracle Certified Professional, Java Programmer II (OCPJP)

The above two certifications would give you good understanding the Java programming fundamentals and get you a Job. Note that OCAJP is the entry level and mandatory for writing any of the Java certifications.

Are you already working with Java and enhance your career?

If the answer is Yes, then you have the expert level exams to improve your skills. There are various expert level exams:

  • OCEJWCD – JSP and Servlets
  • OCEJSFD – Java Server Faces (JSF)
  • OCEJWSD – Web Services
  • OCEJPAD – Java Persistence API (JPA)
  • OCEEJBD – Enterprise Java Beans (EJB)

Note: all the above certifications would require the OCAJP as the mandatory certification.

Are you a Java developer with more than 10 years of experience?

If the answer is Yes, then you would probably have to think about writing the Oracle Certified Master, Java EE Enterprise Architect (OCMJEA) exam. This exam not require any basic certification as the mandatory. You can directly write this certification. If you could pass this exam, you will be able to handle any kind of Java projects.

Are you looking for Java certification practice questions?

If the answer is Yes, then you have the option to buy good commercial mock exam simulators like JavaMockexams. With this you will be able to practice several mock exams before the exam. These simulators would provide the questions that are very similar to the real exam.

Hope this helps!!

What are the different modules of spring?

Spring comprises of seven modules.

1.The Core container module
2.Application context module
3.AOP module (Aspect Oriented Programming)
4.JDBC abstraction and DAO module
5.O/R mapping integration module (Object/Relational)
6.Web module
7.MVC framework module

The core container:

The core container provides the essential functionality of the Spring framework. A primary component of the core container is the BeanFactory, an implementation of the Factory pattern. The BeanFactory applies the Inversion of Control (IOC) pattern to separate an application’s configuration and dependency specification from the actual application code.

Spring context:

The Spring context is a configuration file that provides context information to the Spring framework. The Spring context includes enterprise services such as JNDI, EJB, e-mail, internalization, validation, and scheduling functionality.

Spring AOP:

The Spring AOP module integrates aspect-oriented programming functionality directly into the Spring framework, through its configuration management feature. As a result you can easily AOP-enable any object managed by the Spring framework. The Spring AOP module provides transaction management services for objects in any Spring-based application. With Spring AOP you can incorporate declarative transaction management into your applications without relying on EJB components.

Spring DAO:

The Spring JDBC DAO abstraction layer offers a meaningful exception hierarchy for managing the exception handling and error messages thrown by different database vendors. The exception hierarchy simplifies error handling and greatly reduces the amount of exception code you need to write, such as opening and closing connections. Spring DAO’s JDBC-oriented exceptions comply to its generic DAO exception hierarchy.

Spring ORM:

The Spring framework plugs into several ORM frameworks to provide its Object Relational tool, including JDO, Hibernate, and iBatis SQL Maps. All of these comply to Spring’s generic transaction and DAO exception hierarchies.

Spring Web module:

The Web context module builds on top of the application context module, providing contexts for Web-based applications. As a result, the Spring framework supports integration with Jakarta Struts. The Web module also eases the tasks of handling multi-part requests and binding request parameters to domain objects.

Spring MVC framework:

The Model-View-Controller (MVC) framework is a full-featured MVC implementation for building Web applications. The MVC framework is highly configurable via strategy interfaces and accommodates numerous view technologies including JSP, Velocity, Tiles, iText, and POI.

Why is learning Spring Framework so hard?

Learning Spring Framework is no different from learning to count. I explain the concept here.

I assume you are not “asking” us this question here. You are in fact, telling us that you have found Spring Framework harder to pick up and would like a solution.

If that is the case, please read on.

If you just want to understand why Spring is hard, Please skip anything I say below.

I have been in your shoes and can relate to the question. Here is how I would approach the task of learning Spring Framework.

(This below applies to anything you are struggling with and not just for Spring or even technology for that matter. You could apply this to anything in life with a good chance of success.)

  1. Define the problem

Let’s define what our challenge is here. You mentioned “learning Spring Framework”. And that deserves some clarification in itself.

I am sure you have figured out by now that Spring Framework is actually an ecosystem of various projects and modules.

An explanation of this ecosystem is here but I don’t think you are referring to learning the details in it. There is something else that is on the mind here right on the periphery.

The entire Spring Framework is in question here.

  1. Divide the problem

It would benefit you immensely if you split the question into smaller chunks. To learn Spring Framework, I would start with the smallest unit of work that would get me into the learning mode.

In our case, if you looked at the snapshot above, you would want to go to the “Spring Core” first. That is where Spring began. That is where everything started in Spring world.

To understand Spring Core, you need to understand why you need it to begin with.

You also need to understand where you can use it.

And you need to understand if its worth your time to learn it.

  1. Schedule the learning

Tony Robbins said something wonderful the other day:

If you talk about it, it’s a dream, if you envision it, it’s possible, but if you schedule it, it’s real.

This is where you attack the smallest challenge possible. You identified this in step 2 – It was to get a hello world on Spring Core. I will give you a glimpse of what hello world looks like:

I provide more than one way of bringing Spring into a project from scratch here.

But there are equally qualified articles elsewhere that will get you started. For instance:

Spring MVC hello world example from Mkyong is excellent

A slightly outdated article (yet relevant from core concept) from Tutorialspoint is here

I also like Cave of Programming tutorials by John Purcell on youtube which will provide a good start.

Ranga Karanam has a slew of videos that could provide good start. here is one for beginners.

The trick is to go small and then gradually grow from there.

Let me know if this helps.

What is the purpose of the Spring framework?

From Spring Boot vs Spring MVC vs Spring – How do they compare?

What is the core problem that Spring Framework solves?

Think long and hard. What’s the problem Spring Framework solves?

Most important feature of Spring Framework is Dependency Injection. At the core of all Spring Modules is Dependency Injection or IOC Inversion of Control.

Why is this important? Because, when DI or IOC is used properly, we can develop loosely coupled applications. And loosely coupled applications can be easily unit tested.

Let’s consider a simple example:

Example without Dependency Injection

Consider the example below: WelcomeController depends on WelcomeService to get the welcome message. What is it doing to get an instance of WelcomeService? WelcomeService service = new WelcomeService();. It’s creating an instance of it. And that means they are tightly coupled. For example : If I create an mock for WelcomeService in a unit test for WelcomeController, How do I make WelcomeController use the mock? Not easy!

  1. @RestController
  2. public class WelcomeController {
  3.  
  4. private WelcomeService service = new WelcomeService();
  5.  
  6. @RequestMapping(“/welcome”)
  7. public String welcome() {
  8. return service.retrieveWelcomeMessage();
  9. }
  10. }
  11.  
  12.  

Same Example with Dependency Injection

World looks much easier with dependency injection. You let the spring framework do the hard work. We just use two simple annotations: @Component and @Autowired.

  • Using @Component, we tell Spring Framework – Hey there, this is a bean that you need to manage.
  • Using @Autowired, we tell Spring Framework – Hey find the correct match for this specific type and autowire it in.

In the example below, Spring framework would create a bean for WelcomeService and autowire it into WelcomeController.

In a unit test, I can ask the Spring framework to auto-wire the mock of WelcomeService into WelcomeController. (Spring Boot makes things easy to do this with @MockBean. But, that’s a different story altogether!)

  1. @Component
  2. public class WelcomeService {
  3. //Bla Bla Bla
  4. }
  5.  
  6. @RestController
  7. public class WelcomeController {
  8.  
  9. @Autowired
  10. private WelcomeService service;
  11.  
  12. @RequestMapping(“/welcome”)
  13. public String welcome() {
  14. return service.retrieveWelcomeMessage();
  15. }
  16. }
  17.  
  18.  

What else does Spring Framework solve?

Problem 1 : Duplication/Plumbing Code

Does Spring Framework stop with Dependency Injection? No. It builds on the core concept of Dependeny Injection with a number of Spring Modules

  • Spring JDBC
  • Spring MVC
  • Spring AOP
  • Spring ORM
  • Spring JMS
  • Spring Test

Consider Spring JMS and Spring JDBC for a moment.

Do these modules bring in any new functionality? No. We can do all this with J2EE or JEE. So, what do these bring in? They bring in simple abstractions. Aim of these abstractions is to

  • Reduce Boilerplate Code/ Reduce Duplication
  • Promote Decoupling/ Increase Unit Testablity

For example, you need much less code to use a JDBCTemplate or a JMSTemplate compared to traditional JDBC or JMS.

Problem 2 : Good Integration with Other Frameworks.

Great thing about Spring Framework is that it does not try to solve problems which are already solved. All that it does is to provide a great integration with frameworks which provide great solutions.

  • Hibernate for ORM
  • iBatis for Object Mapping
  • JUnit & Mockito for Unit Testing

What are the steps to develop a mobile application using spring framework?

Spring is made on top of JAVA, and Java si for backend development so you won’t be able to make a mobile application using Spring only; it will hold the datas management, the critical logic but will never handle mobile application UI.

Nevertheless, you made me curious and i search for a Spring integration with Android; as Android being made on top of Java and used to build Android applications it could exist, and it does: Spring for Android, but you’ll still need to learn Android.

As a full-stack developer i recommend you to make your backend with Spring, and follow these steps:

1. The Service Layer on the web server should be created first. For this, can be used framework named “Spring” or Spring Boot”.

2. The Service Layer having the complete functionalities about REST API’s that’s what it’s suggested to create first.

3. In the next step to build the application, you can choose Native Android or Native iOS, but the better and the best option would be, go for React Native as both users android or iOS can download and use the application.

4. In the fourth step, the application will be starting its communication with the service layer as it has the REST API’s.

What is the difference between Spring Boot and the Spring framework?

Let’s go through the definitions of those mentioned things. Assume that we are talking about an application that accepts request from any browser, do certain computing then persist data in specific type of database. A little bit more technical, we are talking about the flow of

Browser <> RESTful layer <> Middle layer <> Database

Spring framework is a Injection dependency framework at first (it’s still as it is today) targeting managing life-cycle of Java components (what so-called beans). Today, Spring framework is pretty bloated with tons facilities/helpers on top of it; but if you look at the big picture, it’s still a framework that glue things together, a middle man to MVC frameworks (Struts 1,2, JSF etc), ORM frameworks (Hibernate, iBatis, JOOQ etc) and other necessary facilities (Quartz, Email, you can tell, whatever you need, most likely, there’s a Spring support). Back to our assumed flow, it takes quite a lengthy tutorial to set Spring framework up and running because Spring framework nature is to provide flexibility of choices to you.

Spring boot on the other hand is built on a totally different mantra. It’s basically a suite, pre-configured, pre-sugared set of frameworks/technologies to reduce boiler plate configuration providing you the shortest way to have a Spring web application up and running with smallest line of code/configuration out-of-the-box. As you can see from there Spring Boot page, it took less than 20 LOC to have a simple RESTful application up and running with almost zero configuration. It definitely has a ton of way to configure application to match your need, this is the Spring Boot Reference Guide for your reference

What are the learning stages of Java?

The learning stages of Java depends on the person who’s trying to learn it. It can be a tough journey or a smooth sailing one. Whatever your learning journey is, please do not quit. Believe me, it will be all worth it.

Take time to read this one from a self-taught programmer, Carlos Hunter, regarding his thoughts on the learning stages of Java.

“Assuming you’ve never programmed before:

Kinda like this:

  1. Fun, I’m learning to output Hello World. But what the heck does “static void main(String[] args)” mean?
  2. Ok, so math operations are easy, they’re as the’ve always been. I can also declare ints, chars, bools…
  3. Learn loops and conditional. Not difficult.
  4. Learn to declare and use methods. Cool.
  5. Learn more things like arrays, classes… Multidimensional arrays..?
  6. Learn strange things like polymorphism, abstract classes, inheritance, constructors… May be difficult for beginners.
  7. Think “please stop”
  8. Learn more new concepts and language stuff, some keywords.
  9. Get tired of it
  10. Learn about exceptions
  11. Learn about threads
  12. Learn to work with files.
  13. You know most of what you need but there are some concepts you don’t know very well so you are useless. Everything seems to be very hard to learn.
  14. Try to make something, but you are going to be the next five hours debugging.
  15. Re-learn everything again
  16. Feel you’ll never do a program that runs with no bugs before.
  17. Spend more hours debugging while you realize little facts you didn’t know.
  18. Almost give up, or give up
  19. Discover any question you had about programming is already in stackoverflow
  20. Get banned from asking in stackoverflow for a week
  21. Break everything trying to do anything
  22. Find some good book
  23. Learn new stuff like streams, etcetera. If you don’t speak English as a native it may be very difficult.
  24. Say kill me please
  25. Hard learning of getting accustomed to coding
  26. Learn to make GUIs, because that’s what we always wanted, right?
  27. Trying to do some project you found in a tutorial.
  28. Fail.
  29. Just copy the code.
  30. No, not copy-paste, type it.
  31. Implement new things using what you learnt.
  32. This is where you start to learn to program.
  33. Debug and program some more…
  34. This will take a while.
  35. More debugging.
  36. At this point you probably got used to some java important packages.
  37. MORE DEBUGGING.
  38. Add things to your GUI program.
  39. Continue programming.
  40. You ask yourself things like why abstract classes exist if there are interfaces.
  41. Suffer.
  42. Now you should be comfortable with Java.
  43. Continue getting accustomed to program with Java.
  44. Now you feel you can call yourself a programmer, after at (the very) least three months of everyday hard work since starting.
  45. Read code and improve your terrible skill.
  46. Get used to it.
  47. Realize there are some stuff that you weren’t taught
  48. Learn what you need
  49. Let the time pass (“What do I do now?”)
  50. You know Java.
  51. Learn boring sorting algorithms, etc, whatever you want.
  52. Keep learning.

End.”

What are some things every Java developer should know?

The foremost thing every Java developer should know is that the language is not “finished”. After a period of relatively slow development, updates have accelerated in recent years leading to smaller but more frequent feature drops. JDK 11 will be released this year, and each new release carries with it new enhancements, features, updates to the standard library and more. Hence, to me, the most important thing to know is the limit of one’s knowledge (and a desire to expand it).

Having said that, here are some of the things I have learned over the years that have served me well.

1. Get familiar with the Java Class Library

Shipping with the JVM itself, this library is probably the most well-debugged Java library available. Pretty much anyone using Java is debugging it. As such, leveraging it as much as possible is a good start on the way to not have too many bugs.

Having said that, there are quirks, some of which are surprising. My personal favourite, and an item that often flies under the radar, is spurious wakeup, a decades-old artifact that permeates many imperative threaded programming languages. It is documented in depthrepeatedly in the Java documentation, yet I had missed it and most people I introduce to it are unaware of it as it is one of those bugs that mostly only happens on a heavily loaded system and thus is easily missed.

Additionally, it follows from the Java language evolution that so does the JCL. This adds an ongoing — but very useful — effort to update one’s knowledge of the JCL as new features are added. For example, the introduction of Lambda expressions in Java was a nice addition from a syntax point of view, but it was made all the better by the JCL adding new methods to all old interfaces that effectively eliminated the need for many types of common boilerplate, such as Map.computeIfAbsent().

2. Learn how to write documentation properly

One of the most-frequently misunderstood parts of the JCL I encounter with developers is Comparator. This is also one of the most striking ones, as it is ostensibly an extremely simple interface: one function that says if an element comes before or after another element. Let’s have a look at the javadoc for the all-important compare function:

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

In the foregoing description, the notation sgn(expression) designates the mathematical signum function, which is defined to return one of -1, 0, or 1 according to whether the value of expression is negative, zero or positive.

The implementor must ensure that sgn(compare(x, y)) == -sgn(compare(y, x)) for all x and y. (This implies that compare(x, y) must throw an exception if and only if compare(y, x) throws an exception.)

Actually, it goes on for three more paragraphs, each carving out a more specific use-case, and none of which bothering to provide an example of the more-and-more theoretical description provided.

The end result is that most developers I know of have effectively given up on this documentation and will just run the comparison in a test case to see if they got it the right way around or not (it’s a 50–50 chance anyway).

Compare it, for example, with the documentation for String.substring() which spends far less time being theoretical, ending up providing concrete examples and thus allowing the reader to quickly grasp the essence of the method.

3. Threading is the Dark Side (mostly). See how to avoid using threads explicitly.

Much work has been done on the Java side to provide methods that abstract away threading. Constructs such as ForkJoinPool, implicitly used when using Stream.parallel(), and JCL packages such as java.nio/2 deal with different ways of avoiding to use/create multiple threads.

This trend has been predicated by multiple avenues, both Java and otherwise. For example, RxJava has been preaching this pattern for a while. It’s also one of the reasons for the popularity of NodeJS. There are many advantages of doing it, and it is a testament to the JVM that it can support different approaches, gaining the advantages of them.

4. Don’t try to outsmart the JVM.

Java, the JVM and the JCL have had contributions from many smart people. Yes, some of the parts make little sense, and others have been redone multiple times because of inherent flaws; however, on the whole, a lot of thought has gone into it. It’s possible, though unlikely, to outsmart it.

An excellent source on this is the JVM Anatomy Park, a strongly recommended read on how the JVM does cool and smart stuff under the hood for you. The one I’ll choose to highlight (but there are more, and do have a look at them all!) is lock elision. In short, it’s a way for the JVM to completely eliminate synchronized blocks that it determines don’t perform useful locking. As a developer one can therefore write correct code while the JVM makes sure it is performant.

A related issue would be the synchronized keyword. A younger, more naïve me would come armed with the theory of locking and figure out a situation where a Spinlock would be better than a Mutex. That’s great and all, until one figures out (after not seeing any performance improvement) that Java will automatically use both spinlock and mutex for synchronized depending on how it is performing.

Of course there are still cases for judicial use of synchronisation and reasons for when to do what. But outsmarting the JVM is almost never a good reason to write code.

5. Java has loads of tooling, for a good reason. Leverage it!

Perhaps one of the biggest benefits that come with Java as such an established language is the veritable cornucopia of tools associated with it, from static code analysis, to runtime configuration, to convention libraries and pretty much everything under the sun.

Any good Java developer today should know how to leverage that code. Doing this has two benefits.

First, it makes it easier to debug code, find errors before they reach production, find them afterwards and optimise the code. There is no reason to make these tasks anything but easier.

Second, and far more dear to my heart, is that leveraging all this existing code makes one’s own codebase all that much smaller. Assuming the tooling chosen is good (e.g. Spring) then that ideally means less code, less bugs.