• 200个最常见的JAVA面试问题(附答案)


    本文内容:

    • 20个最常见的JAVA面试问题(附答案)
    • 13个单例模式JAVA面试问题(附答案)
    • 说说JVM和垃圾收集是如何工作的(附答案)
    • 说说如何避免JAVA线程死锁(附答案)
    • Java中HashSet和HashMap的区别(附答案)
    • Java面试中和Collection有关的10个问题(附答案)
    • Java面试中和Spring相关的10个问题(附答案)
    • 30个C/C++/Java面试中的常见算法问题
    • Stackoverflow中回复超过20的算法问题
    • 面试攻略
    • 微软面试技术题(附答案)

    20个最常见的JAVA面试问题(附答案)

     
    1. What is immutable object? Can you write immutable object?
     
    Immutable classes are Java classes whose objects can not be modified once created. Any modification in Immutable object result in new object. For example is String is immutable in Java. Mostly Immutable are also final in Java, in order to prevent sub class from overriding methods in Java which can compromise Immutability. You can achieve same functionality by making member as non final but private and not modifying them except in constructor.
     
    2. Does all property of immutable object needs to be final?
    Not necessary as stated above you can achieve same functionality by making member as non final but private and not modifying them except in constructor.
     
    3. What is the difference between creating String as new() and literal?
    When we create string with new() Operator, it’s created in heap and not added into string pool while String created using literal are created in String pool itself which exists in PermGen area of heap.
     

    String s = new String("Test");
     

    does not  put the object in String pool , we need to call String.intern() method which is used to put  them into String pool explicitly. its only when you create String object as String literal e.g. String s = "Test" Java automatically put that into String pool.

     
    4. How does substring () inside String works?
    Another good Java interview question, I think answer is not sufficient but here it is “Substring creates new object out of source string by taking a portion of original string”. see my post How SubString works in Java for detailed answer of this Java question.
     
    5. Which two method you need to implement for key Object in HashMap ?
    In order to use any object as Key in HashMap, it must implements equals and hashcode method in Java. Read How HashMap works in Java for detailed explanation on how equals and hashcode method is used to put and get object from HashMap. You can also see my post 5 tips to correctly override equals in Java to learn more about equals.
     
    6. Where does these  two method comes in picture during get operation?
    This core Java interview question is follow-up of previous Java question and candidate should know that once you mention hashCode, people are most likely ask How its used in HashMap. See How HashMap works in Java for detailed explanation.
     
    7. How do you handle error condition while writing stored procedure or accessing stored procedure from java?
    This is one of the tough Java interview question and its open for all, my friend didn't know the answer so he didn't mind telling me. my take is that stored procedure should return error code if some operation fails but if stored procedure itself fail than catching SQLException is only choice.
     
    8. What is difference between Executor.submit() and Executer.execute() method ?
    This Java interview question is from my list of Top 15 Java multi-threading question answers, Its getting popular day by day because of huge demand of Java developer with good concurrency skill. Answer of this Java interview question is that former returns an object of Future which can be used to find result from worker thread)
     
    By the way @vinit Saini suggested a very good point related to this core Java interview question
     
    There is a difference when looking at exception handling. If your tasks throws an exception and if it was submitted with execute this exception will go to the uncaught exception handler (when you don't have provided one explicitly, the default one will just print the stack trace to System.err). If you submitted the task with submit any thrown exception, checked exception or not, is then part of the task's return status. For a task that was submitted with submit and that terminates with an exception, the Future.get will re-throw this exception, wrapped in an ExecutionException.
    9. What is the difference between factory and abstract factory pattern?
    This Java interview question is from my list of 20 Java design pattern interview question and its open for all of you to answer.

    @Raj suggested

    Abstract Factory provides one more level of abstraction. Consider different factories each extended from an Abstract Factory and responsible for creation of different hierarchies of objects based on the type of factory. E.g. AbstractFactory extended by AutomobileFactoryUserFactoryRoleFactory etc. Each individual factory would be responsible for creation of objects in that genre.
    You can also refer What is Factory method design pattern in Java to know more details.
     
    10. What is Singleton? is it better to make whole method synchronized or only critical section synchronized ?
    Singleton in Java is a class with just one instance in whole Java application, for example java.lang.Runtime is a Singleton class. Creating Singleton was tricky prior Java 4 but once Java 5 introduced Enum its very easy. see my article How to create thread-safe Singleton in Java for more details on writing Singleton using enum and double checked locking which is purpose of this Java interview question.
     
     
    11. Can you write critical section code for singleton?
    This core Java question is followup of previous question and expecting candidate to write Java singleton using double checked locking. Remember to use volatile variable to make Singleton thread-safe. check 10 Interview questions on Singleton Pattern in Java for more details and questions answers


    12. Can you write code for iterating over hashmap in Java 4 and Java 5 ?

    Tricky one but he managed to write using while and for loop.


    13. When do you override hashcode and equals() ?
    Whenever necessary especially if you want to do equality check or want to use your object as key in HashMap. check this for writing equals method correctly 5 tips on equals in Java

    14. What will be the problem if you don't override hashcode() method ?
    You will not be able to recover your object from hash Map if that is used as key in HashMap. 
    See here  How HashMap works in Java for detailed explanation.

    15. Is it better to synchronize critical section of getInstance() method or whole getInstance() method ?
    Answer is critical section because if we lock whole method than every time some one call this method will have to wait even though we are not creating any object)

    16. What is the difference when String is gets created using literal or new() operator ?
    When we create string with new() its created in heap and not added into string pool while String created using literal are created in String pool itself which exists in Perm area of heap.

    17. Does not overriding hashcode() method has any performance implication ?
    This is a good question and open to all , as per my knowledge a poor hashcode function will result in frequent collision in HashMap which eventually increase time for adding an object into Hash Map.

    18. What’s wrong using HashMap in multithreaded environment? When get() method go to infinite loop ?
    Another good question. His answer was during concurrent access and re-sizing.

    19. Give a simplest way to find out the time a method takes for execution without using any profiling tool?
    this questions is suggested by @Mohit
    Read the system time just before the method is invoked and immediately after method returns. Take the time difference, which will give you the time taken by a method for execution.

    To put it in code…

    long start = System.currentTimeMillis ();
    method ();
    long end = System.currentTimeMillis ();

    System.out.println (“Time taken for execution is ” + (end – start));

    Remember that if the time taken for execution is too small, it might show that it is taking zero milliseconds for execution. Try it on a method which is big enough, in the sense the one which is doing considerable amout of processing

    13个单例模式JAVA面试问题

    1) Which classes are candidates of Singleton? Which kind of class do you make Singleton in Java?
    Here they will check whether candidate has enough experience on usage of singleton or not. Does he is familiar of advantage/disadvantage or alternatives available for singleton in Java or not.
    Answer: Any class which you want to be available to whole application and whole only one instance is viable is candidate of becoming Singleton. One example of this is Runtime class , since on whole java application only one runtime environment can be possible making Runtime Singleton is right decision. Another example is a utility classes like Popup in GUI application, if you want to show popup with message you can have one PopUp class on whole GUI application and anytime just get its instance, and call show() withmessage. 

    2) Can you write code for getInstance() method of a Singleton class in Java?
    Most of the java programmer fail here if they have mugged up the singleton code because you can ask lots of follow-up question based upon the code they have written. I have seen many programmer write Singleton getInstance() method with double checked locking but they are not really familiar with the caveat associated with double checking of singleton prior to Java 5.
    Answer: Until asked don’t write code using double checked locking as it is more complex and chances of errors are more but if you have deep knowledge of double checked locking, volatile variable and lazy loading than this is your chance to shine. I have shared code examples of writing singleton classes using enum, using static factory and with double checked locking in my recent post Why Enum Singletons are better in Java, please see there.
      
    3) Is it better to make whole getInstance() method synchronized or just critical section is enough? Which one you will prefer?
    This is really nice question and I mostly asked to just quickly check whether candidate is aware of performance trade off of unnecessary locking or not. Since locking only make sense when we need to create instance and rest of the time its just read only access so locking of critical section is always better option. read more about synchronization on How Synchronization works in Java
    Answer: This is again related to double checked locking pattern, well synchronization is costly and when you apply this on whole method than call to getInstance() will be synchronized and contented. Since synchronization is only needed during initialization on singleton instance, to prevent creating another instance of Singleton,  It’s better to only synchronize critical section and not whole method. Singleton pattern is also closely related to factory design pattern where getInstance() serves as static factory method.

    4) What is lazy and early loading of Singleton and how will you implement it?
    This is another great Singleton interview question in terms of understanding of concept of loading and cost associated with class loading in Java. Many of which I have interviewed not really familiar with this but its good to know concept.
    Answer: As there are many ways to implement Singleton like using double checked locking or Singleton class with static final instance initialized during class loading. Former is called lazy loading because Singleton instance is created only when client calls getInstance() method while later is called early loading because Singleton instance is created when class is loaded into memory.


    5) Example of Singleton in standard Java Development Kit?
    This is open question to all, please share which classes are Singleton in JDK. Answer to this question is java.lang.Runtime
    Answer: There are many classes in Java Development Kit which is written using singleton pattern, here are few of them:
    • Java.lang.Runtime with getRuntime() method
    • Java.awt.Toolkit with getDefaultToolkit()
    • Java.awt.Desktop with  getDesktop()

    6) What is double checked locking in Singleton?
    One of the most hyped question on Singleton pattern and really demands complete understanding to get it right because of Java Memory model caveat prior to Java 5. If a guy comes up with a solution of using volatile keyword with Singleton instance and explains it then it really shows it has in depth knowledge of Java memory model and he is constantly updating his Java knowledge.
    Answer: Double checked locking is a technique to prevent creating another instance of Singleton when call to getInstance() method is made in multi-threading environment. In Double checked locking pattern as shown in below example, singleton instance is checked two times before initialization.
     
    public static Singleton getInstance(){
         if(_INSTANCE == null){
             synchronized(Singleton.class){
             //double checked locking - because second check of Singleton instance with lock
                    if(_INSTANCE == null){
                        _INSTANCE = new Singleton();
                    }
                }
             }
         return _INSTANCE;
    }
     
    Double checked locking should only be used when you have requirement for lazy initialization otherwise use Enum to implement singleton or simple static final variable.

    7) How do you prevent for creating another instance of Singleton using clone() method?
    This type of questions generally comes some time by asking how to break singleton or when Singleton is not Singleton in Java.
    Answer: Preferred way is not to implement Clonnable interface as why should one wants to create clone() of Singleton and if you do just throw Exception from clone() method as  “Can not create clone of Singleton class”.

    8) How do you prevent for creating another instance of Singleton using reflection?
    Open to all. In my opinion throwing exception from constructor is an option. 
    Answer: This is similar to previous interview question. Since constructor of Singleton class is supposed to be private it prevents creating instance of Singleton from outside but Reflection can access private fields and methods, which opens a threat of another instance. This can be avoided by throwing Exception from constructor as “Singleton already initialized”
      
     
    9) How do you prevent for creating another instance of Singleton during serialization?
    Another great question which requires knowledge of Serialization in Java and how to use it for persisting Singleton classes. This is open to you all but in my opinion use of readResolve() method can sort this out for you.
    Answer: You can prevent this by using readResolve() method, since during serialization readObject() is used to create instance and it return new instance every time but by using readResolve you can replace it with original Singleton instance.  I have shared code on how to do it in my post Enum as Singleton in Java. This is also one of the reason I have said that use Enum to create Singleton because serialization of enum is taken care by JVM and it provides guaranteed of that.

    10) When is Singleton not a Singleton in Java?
    There is a very good article present in Sun's Java site which discusses various scenarios when a Singleton is not really remains Singleton and multiple instance of Singleton is possible. Here is the link of that article http://java.sun.com/developer/technicalArticles/Programming/singletons/

    Apart from these questions on Singleton pattern, some of my reader contribute few more questions, which I included here. Thank you guys for your contribution.
     
    11) Why you should avoid the singleton anti-pattern at all and replace it with DI?
    Answer: Singleton Dependency Injection: every class that needs access to a singleton gets the object through its constructors or with a DI-container.
    Singleton Anti-Pattern: with more and more classes calling getInstance the code gets more and more tightly coupled, monolithic, not testable and hard to change and hard to reuse because of not configurable, hidden dependencies. Also, there would be no need for this clumsy double checked locking if you call getInstance less often (i.e. once).
     
    12) How many ways you can write Singleton Class in Java?
    Answer:  I know at least four ways to implement Singleton pattern in Java
    1) Singleton by synchronizing getInstance() method
    2) Singleton with public static final field initialized during class loading.
    3) Singleton generated by static nested class, also referred as Singleton holder pattern.
    4) From Java 5 on-wards using Enums

    13) How to write thread-safe Singleton in Java?
    Answer: Thread safe Singleton usually refers to write thread safe code which creates one and only one instance of Singleton if called by multiple thread at same time. There are many ways to achieve this like by using double checked locking technique as shown above and by using Enum or Singleton initialized by class loader.
     
    At last few more questions for your practice, contributed by Mansi:
    14) Singleton vs Static Class?
    15) When to choose Singleton over Static Class?
    16) Can you replace Singleton with Static Class in Java?
    17) Difference between Singleton and Static Class in java?
    18) Advantage of Singleton over Static Class?

    I have covered answers of couple of these questions in my post, Singleton vs Static Class in Java - Pros and Cons.

    说说JVM和垃圾收集是如何工作的

    1) objects are created on heap in Java  irrespective of there scope e.g. local or member variable. while its worth noting that class variables or static members are created in method area of Java memory space and both heap and method area is shared between different thread.
    2) Garbage collection is a mechanism provided by Java Virtual Machine to reclaim heap space from objects which are eligible for Garbage collection.
    3) Garbage collection relieves java programmer from memory management which is essential part of C++ programming and gives more time to focus on business logic.
    4) Garbage Collection in Java is carried by a daemon thread called Garbage Collector.
    5) Before removing an object from memory Garbage collection thread invokes finalize () method of that object and gives an opportunity to perform any sort of cleanup required.
    6) You as Java programmer can not force Garbage collection in Java; it will only trigger if JVM thinks it needs a garbage collection based on Java heap size.
    7) There are methods like System.gc () and Runtime.gc () which is used to send request of Garbage collection to JVM but it’s not guaranteed that garbage collection will happen.
    8) If there is no memory space for creating new object in Heap Java Virtual Machine throws OutOfMemoryError or java.lang.OutOfMemoryError heap space
    9) J2SE 5(Java 2 Standard Edition) adds a new feature called Ergonomics goal of ergonomics is to provide good performance from the JVM with minimum of command line tuning.


    When an Object becomes Eligible for Garbage Collection

    An Object becomes eligible for Garbage collection or GC if its not reachable from any live threads or any static refrences in other words you can say that an object becomes eligible for garbage collection if its all references are nullCyclic dependencies are not counted as reference so if Object A has reference of object B and object B has reference of Object A and they don't have any other live reference then both Objects A and B will be eligible for Garbage collection. 
    Generally an object becomes eligible for garbage collection in Java on following cases:
    1) All references of that object explicitly set to null e.g. object = null
    2) Object is created inside a block and reference goes out scope once control exit that block.
    3) Parent object set to null, if an object holds reference of another object and when you set container object's reference null, child or contained object automatically becomes eligible for garbage collection.
    4) If an object has only live references via WeakHashMap it will be eligible for garbage collection. To learn more about HashMap see here How HashMap works in Java.

    Heap Generations for Garbage Collection in Java

    Java objects are created in Heap and Heap is divided into three parts or generations for sake of garbage collection in Java, these are called as Young generation, Tenured or Old Generation and Perm Area of heap
    New Generation is further divided into three parts known as Eden spaceSurvivor 1 and Survivor 2 space. When an object first created in heap its gets created in new generation inside Eden space and after subsequent Minor Garbage collection if object survives its gets moved to survivor 1 and then Survivor 2 before Major Garbage collection moved that object to Old or tenured generation.

    Permanent generation of Heap or Perm Area of Heap is somewhat special and it is used to store Meta data related to classes and method in JVM, it also hosts String pool provided by JVM as discussed in my string tutorial why String is immutable in Java. There are many opinions around whether garbage collection in Java happens in perm area of java heap or not, as per my knowledge this is something which is JVM dependent and happens at least in Sun's implementation of JVM. You can also try this by just creating millions of String and watching for Garbage collection or OutOfMemoryError.

    Types of Garbage Collector in Java

    Java Runtime (J2SE 5) provides various types of Garbage collection in Java which you can choose based upon your application's performance requirement. Java 5 adds three additional garbage collectors except serial garbage collector. Each is generational garbage collector which has been implemented to increase throughput of the application or to reduce garbage collection pause times.

    1) Throughput Garbage Collector: This garbage collector in Java uses a parallel version of the young generation collector. It is used if the -XX:+UseParallelGC option is passed to the JVM via command line options . The tenured generation collector is same as the serial collector.

    2) Concurrent low pause Collector: This Collector is used if the -Xingc or -XX:+UseConcMarkSweepGC is passed on the command line. This is also referred as Concurrent Mark Sweep Garbage collector. The concurrent collector is used to collect the tenured generation and does most of the collection concurrently with the execution of the application. The application is paused for short periods during the collection. A parallel version of the young generationcopying collector is sued with the concurrent collector. Concurrent Mark Sweep Garbage collector is most widely used garbage collector in java and it uses algorithm to first mark object which needs to collected when garbage collection triggers.

    3) The Incremental (Sometimes called train) low pause collector: This collector is used only if -XX:+UseTrainGC is passed on the command line. This garbage collector has not changed since the java 1.4.2 and is currently not under active development. It will not be supported in future releases so avoid using this and please see 1.4.2 GC Tuning document for information on this collector.
    Important point to not is that -XX:+UseParallelGC should not be used with -XX:+UseConcMarkSweepGC. The argument passing in the J2SE platform starting with version 1.4.2 should only allow legal combination of command line options for garbage collector but earlier releases may not find or detect all illegal combination and the results for illegal combination are unpredictable. It’s not recommended to use this garbage collector in java.

    JVM Parameters for garbage collection in Java

    Garbage collection tuning is a long exercise and requires lot of profiling of application and patience to get it right. While working with High volume low latency Electronic trading system I have worked with some of the project where we need to increase the performance of Java application by profiling and finding what causing full GC and I found that Garbage collection tuning largely depends on application profile, what kind of object application has and what are there average lifetime etc. for example if an application has too many short lived object then making Eden space wide enough or larger will reduces number of minor collections. you can also control size of both young and Tenured generation using JVM parameters for example setting -XX:NewRatio=3 means that the ratio among the young and tenured generation is 1:3 , you got to be careful on sizing these generation. As making young generation larger will reduce size of tenured generation which will force Major collection to occur more frequently which pauses application thread during that duration results in degraded or reduced throughput. The parameters NewSize and MaxNewSize are used to specify the young generation size from below and above. Setting these equal to one another fixes the young generation. In my opinion before doing garbage collection tuning detailed understanding ofgarbage collection in java is must and I would recommend reading Garbage collection document provided by Sun Microsystems for detail knowledge of garbage collection in Java. Also to get a full list of JVM parameters for a particular Java Virtual machine please refer official documents on garbage collection in Java. I found this link quite helpful though http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

    Full GC and Concurrent Garbage Collection in Java

    Concurrent garbage collector in java uses a single garbage collector thread that runs concurrently with the application threads with the goal of completing the collection of the tenured generation before it becomes full. In normal operation, the concurrent garbage collector is able to do most of its work with the application threads still running, so only brief pauses are seen by the application threads. As a fall back, if the concurrent garbage collector is unable to finish before the tenured generation fill up, the application is paused and the collection is completed with all the application threads stopped. Such Collections with the application stopped are referred as full garbage collections or full GC and are a sign that some adjustments need to be made to the concurrent collection parameters. Always try to avoid or minimize full garbage collection or Full GC because it affects performance of Java application. When you work in finance domain for electronic trading platform and with high volume low latency systems performance of java application becomes extremely critical an you definitely like to avoid full GC during trading period.

    Summary on Garbage collection in Java

    1) Java Heap is divided into three generation for sake of garbage collection. These are young generationtenured or old generation and Perm area.
    2) New objects are created into young generation and subsequently moved to old generation.
    3) String pool is created in Perm area of Heap, garbage collection can occur in perm space but depends upon JVM to JVM.
    4) Minor garbage collection is used to move object from Eden space to Survivor 1 and Survivor 2 space and Major collection is used to move object from young to tenured generation.
    5) Whenever Major garbage collection occurs application threads stops during that period which will reduce application’s performance and throughput.
    6) There are few performance improvement has been applied in garbage collection in java 6 and we usually use JRE 1.6.20 for running our application.
    7) JVM command line options –Xmx and -Xms is used to setup starting and max size for Java Heap. Ideal ratio of this parameter is either 1:1 or 1:1.5 based upon my experience for example you can have either both –Xmx and –Xms as 1GB or –Xms 1.2 GB and 1.8 GB.
    8) There is no manual way of doing garbage collection in Java

    说说如何避免JAVA线程死锁(附答案)

    questions starts with "What is deadlock ?"
    answer is simple , when two or more threads waiting for each other to release lock and get stuck for infinite time , situation is called deadlock . it will only happen in case of multitasking.

    How do you detect deadlock in Java ?
    though this could have many answers , my version is first I would look the code if I see nested synchronized block or calling one synchronized method from other or trying to get lock on different object then there is good chance of deadlock if developer is not very careful.

    other way is to find it when you actually get locked while running the application , try to take thread dump , in Linux you can do this by command "kill -3" , this will print status of all the thread in application log file and you can see which thread is locked on which object.

    other way is to use jconsole , jconsole will show you exactly which threads are get locked and on which object.

    once you answer this , they may ask you to write code which will result in deadlock ?
    here is one of my version

    public void method1(){
    synchronized(String.class){
    System.out.println("Aquired lock on String.class object");

    synchronized (Integer.class) {
    System.out.println("Aquired lock on Integer.class object");
    }
    }
    }

    public void method2(){
    synchronized(Integer.class){
    System.out.println("Aquired lock on Integer.class object");

    synchronized (String.class) {
    System.out.println("Aquired lock on String.class object");
    }
    }
    }


    If method1() and method2() both will be called by two or many threads , there is a good chance of deadlock because if thead 1 aquires lock on Sting object while executing method1() and thread 2 acquires lock on Integer object while executing method2() both will be waiting for each other to release lock on Integer and String to proceed further which will never happen.

    now interviewer comes to final part , one of the most important in my view , How to fix deadlock ? or How to avoid deadlock in Java ?

    if you have looked above code carefully you may have figured out that real reason for deadlock is not multiple threads but the way they access lock , if you provide an ordered access then problem will be resolved , here is
    the fixed version.

    复制代码
    public void method1(){
    synchronized(Integer.class){
    System.out.println("Aquired lock on Integer.class object");
    
    synchronized (String.class) {
    System.out.println("Aquired lock on String.class object");
    }
    }
    }
    
    public void method2(){
    synchronized(Integer.class){
    System.out.println("Aquired lock on Integer.class object");
    
    synchronized (String.class) {
    System.out.println("Aquired lock on String.class object");
    }
    }
    }
    复制代码

    Now there would not be any deadlock because both method is accessing lock on Integer and String object in same order . so if thread A acquires lock on Integer object , thread B will not proceed until thread A releases Integer lock , same way thread A will not be blocked even if thread B holds String lock because now thread B will not expect thread A to release Integer lock to proceed further

    Java中HashSet和HashMap的区别

    Java面试中和Collection有关的10个问题(附答案)

    How HashMap works in Java?
    This is Classical Java Collection interview questions which I have also discussed in How HashMap works in Java. This collection interview questions is mostly asked during AVP Role interviews on Investment-Banks and has lot of followup questions based on response of interviewee e.g. Why HashMap keys needs to be immutable, what is race conditions on HashMap and how HashMap resize in Java. For explanation and answers of these questions Please see earlier link.
     
    What is difference between fail-fast and fail-safe Iterators?
    This is relatively new collection interview questions and can become trick if you hear the term fail-fast and fail-safe first time. Fail-fast Iterators throws ConcurrentModificationException when one Thread is iterating over collection object and other thread structurally modify Collection either by adding, removing or modifying objects on underlying collection. They are called fail-fast because they try to immediately throw Exception when they encounter failure. On the other hand fail-safe Iterators works on copy of collection instead of original collection
     
     
    What is difference between Synchronized Collection and ConcurrentCollection?
    Java5 has added several new ConcurrentCollection classes e.g. ConcurrentHashMap, CopyOnWriteArrayList, BlockingQueue etc, which has made Interview questions on Java Collection even trickier. Java Also provided way to get Synchronized copy of collection e.g. ArrayList, HashMap by using Collections.synchronizedMap() Utility function.One Significant difference is that ConccurentCollections has better performance than synchronized Collection because they lock only a portion of Map to achieve concurrency and Synchronization. See Difference between SynchronizedCollection and ConcurrentCollection in Java for more details.
     
     
     
    What is difference between Iterator and Enumeration?
    This is a beginner level collection interview questions and mostly asked during interviews of Junior Java developer up to experience of 2 to 3 years Iterator duplicate functionality of Enumeration with one addition of remove() method and both provide navigation functionally on objects of Collection.Another difference is that Iterator is more safe than Enumeration and doesn't allow another thread to modify collection object during iteration except remove() method and throws ConcurrentModificaitonException. See Iterator vs Enumeraiton in Java for more differences.
     
     
    Difference between HashMap and Hashtable?
    This is another Classical Java Collection interview asked on beginner’s level and most of Java developer has a predefined answer for this interview questions e.g. HashMap is not synchronized while hashtalbe is not or hashmap is faster than hashtable etc. What could go wrong is that if he placed another followup question like how hashMap works in Java or can you replace Hashtable with ConcurrenthashMap etc. See HashTable vs HashMap in Java for detailed answer of this interview question.
     
    When do you use ConcurrentHashMap in Java?
    This is another advanced level collection interview questions in Java which normally asked to check whether interviewer is familiar with optimization done on ConcurrentHashMap or not. ConcurrentHashMap is better suited for situation where you have multiple readers and one
    Writer or fewer writers since Map gets locked only during write operation. If you have equaled number of reader and writer than ConcurrentHashMap will perform in line of hashtable or synchronized hashMap.
     
    What is difference between Set and List in Java?
    Another classical Java Collection interview popular on telephonic round or first round of interview. Most of Java programmer knows that Set doesn't allowed duplicate while List does and List maintains insertion order while Set doesn't. What is key here is to show interviewer that you can decide which collection is more suited based on requirements.
     
    How do you Sort objects on collection?
    This Collection interview question serves two purpose it not only test an important programming concept Sorting but Also utilty class like Collections which provide several methods for creating synchronized collection and sorting. Sorting is implemented using Comparable and Comparator in Java and when you call Collections.sort() it gets sorted based on natural order specified in CompareTo method while Collections.sort(Comparator) will sort objects based on compare() method of Comparator. See Sorting in Java using Comparator and Comparable for more details.
     
     
    What is difference between Vector and ArrayList?
    One more beginner level collection interview questions, this is still very popular and mostly asked in telephonic round. ArrayList in Java is one of the most used Collection class and most interviewer asked questions on ArrayList.See Difference between Vector and ArrayList for answer of this interview question.
     
     
    What is difference between HashMap and HashSet?
    This collection interview questions is asked in conjunction with hashmap vs hashtable. See HashMap vs HashSet for detail Answer.

    10个Java面试中和Spring相关的问题(附答案)

    Spring Security Interview questions Answer 
    Some of the reader requested to provide Spring Security interview questions and answer, So i though to update this article with few of Spring security question I came across. Here are those:

    How do you setup LDAP Authentication using Spring Security?
    This is a very popular Spring Security interview question as Spring provides out of the box support to connect Windows Active directory for LDAP authentication and with few configuration in Spring config file you can have this feature enable. See How to perform LDAP authentication in Java using Spring Security for detailed code explanation and sample.

    How do you control concurrent Active session using Spring Security?
    Another Spring interview question which is based upon Out of box feature provided by Spring framework. You can easily control How many active session a user can have with a Java application by using Spring Security. See this spring security example of how to control concurrent session in Java and Spring for exact details.

     
    Question1: What is IOC or inversion of control?
    Answer: This Spring interview question is first step towards Spring framework and many interviewer starts Spring interview from this question. As the name implies Inversion of control means now we have inverted the control of creating the object from our own using new operator to container or framework. Now it’s the responsibility of container to create object as required. We maintain one xml file where we configure our components, services, all the classes and their property. We just need to mention which service is needed by which component and container will create the object for us. This concept is known as dependency injection because all object dependency (resources) is injected into it by framework.
     
    Example:
      <bean id="createNewStock" class="springexample.stockMarket.CreateNewStockAccont"> 
            <property name="newBid"/>
      </bean>
    In this example CreateNewStockAccont class contain getter and setter for newBid and container will instantiate newBid and set the value automatically when it is used. This whole process is also called wiring in Spring and by using annotation it can be done automatically by Spring, refereed as auto-wiring of bean in Spring.
     
     
    Question 2: Explain Bean-LifeCycle.
     
     
    Ans: Spring framework is based on IOC so we call it as IOC container also So Spring beans reside inside the IOC container. Spring beans are nothing but Plain old java object (POJO).
    Following steps explain their life cycle inside container.
    1. Container will look the bean definition inside configuration file (e.g. bean.xml).
    2 using reflection container will create the object and if any property is defined inside the bean definition then it will also be set.
    3. If the bean implements the BeanNameAware interface, the factory calls setBeanName() passing the bean’s ID.
    4. If the bean implements the BeanFactoryAware interface, the factory calls setBeanFactory(), passing an instance of itself.
    5. If there are any BeanPostProcessors associated with the bean, their post- ProcessBeforeInitialization() methods will be called before the properties for the Bean are set.
    6. If an init() method is specified for the bean, it will be called.
    7. If the Bean class implements the DisposableBean interface, then the method destroy() will be called when the Application no longer needs the bean reference.
    8. If the Bean definition in the Configuration file contains a 'destroy-method' attribute, then the corresponding method definition in the Bean class will be called.
     
    Question 3: what is Bean Factory, have you used XMLBeanFactory?
    Ans: BeanFactory is factory Pattern which is based on IOC design principles.it is used to make a clear separation between application configuration and dependency from actual code.
    XmlBeanFactory is one of the implementation of bean Factory which we have used in our project.
    org.springframework.beans.factory.xml.XmlBeanFactory is used to create bean instance defined in our xml file.
     
    BeanFactory factory = new XmlBeanFactory(new FileInputStream("beans.xml"));
    Or
    ClassPathResource resorce = new ClassPathResource("beans.xml"); 
    XmlBeanFactory factory = new XmlBeanFactory(resorce);
     
    Question 4: What are the difference between BeanFactory and ApplicationContext in spring?
    Answer : This one is very popular spring interview question and often asks in entry level interview. ApplicationContext is preferred way of using spring because of functionality provided by it and interviewer wanted to check whether you are familiar with it or not.
     
    ApplicationContext.
     
    BeanFactory
    Here we can have more than one config files possible
    In this only one config file or .xml file
    Application contexts can publish events to beans that are registered as listeners
    Doesn’t support.
    Support internationalization (I18N) messages
    It’s not
    Support application life-cycle events, and validation.
    Doesn’t support.
    Support  many enterprise services such JNDI access, EJB integration, remoting
    Doesn’t support.



    Question 5: What are different modules in spring?
    Answer : spring have seven core 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
     
    Question 6: What is difference between singleton and prototype bean?
     
    Ans: This is another popular spring interview questions and an important concept to understand. Basically a bean has scopes which defines their existence on the application
    Singleton: means single bean definition to a single object instance per Spring IOC container.
    Prototype: means a single bean definition to any number of object instances.
    Whatever beans we defined in spring framework are singleton beans. There is an attribute in bean tag named ‘singleton’ if specified true then bean becomes singleton and if set to false then the bean becomes a prototype bean. By default it is set to true. So, all the beans in spring framework are by default singleton beans.
     
      <bean id="createNewStock"     class="springexample.stockMarket.CreateNewStockAccont" singleton=”false”
            <property name="newBid"/> 
      </bean>
     
     
     Question 7: What type of transaction Management Spring support?
    Ans: This spring interview questions is little difficult as compared to previous questions just because transaction management is a complex concept and not every developer familiar with it. Transaction management is critical in any applications that will interact with the database. The application has to ensure that the data is consistent and the integrity of the data is maintained.  Two type of transaction management is supported by spring

    1. Programmatic transaction management
    2. Declarative transaction management.
     
     
    Question 8: What is AOP?
    Answer : The core construct of AOP is the aspect, which encapsulates behaviors affecting multiple classes into reusable modules. AOP is a programming technique that allows developer to modularize crosscutting concerns,  that cuts across the typical divisions of responsibility, such as logging and transaction management. Spring AOP, aspects are implemented using regular classes or regular classes annotated with the @Aspect annotation
     
    Question 9: Explain Advice?
    Answer: It’s an implementation of aspect; advice is inserted into an application at join points. Different types of advice include “around,” “before” and “after” advice
     
    Question 10: What is joint Point and point cut?
    Ans: This is not really a spring interview questions I would say an AOP one.  Similar to Object oriented programming, AOP is another popular programming concept which complements OOPS. Join point is an opportunity within code for which we can apply an aspect. In Spring AOP, a join point always represents a method execution.
    Pointcut: a predicate that matches join points. A point cut is something that defines at what join-points an advice should be applied

    更多

  • 相关阅读:
    Java 类加载、调用构造器、执行方法的过程
    flink定义各类source
    flink个人基础笔记
    flink任务提交流程
    Flink 命令
    Flink开发环境搭建(idea2019)
    Flink集群部署
    canal开启状态,但是不能生产数据到kafka,问题解决
    Cannal单节点部署
    kafka单节点部署
  • 原文地址:https://www.cnblogs.com/WayneZeng/p/3358459.html
Copyright © 2020-2023  润新知