Saturday, September 17, 2016

Socket and Perception of Connection between Client and Server

Sockets: An object created by any networked application which contains 'data and address*' details to be sent to another program running on another machine elsewhere via wireless or wired infrastructure.
Eg: In case of Java, Socket is part of  Java's Networking API(java.net.* package) which knows how to talk to machine's Network Stack(TCP/IP) to send and receive data.

Network Stack: Its a software+hardware infrastructure specific to a computer. The software component is usually implemented by machine's OS.

data and address*:
Data -> Data from source program.
Address -> Host and Port details of the destination program.



Q) When can we say a connection is established between a server and a client?
Ans)       Many imagine or believe that a connection is physical wire or wireless connection. Or some might think it's specific to machine's protocol layer. But this is a pure misconception. Connection is purely abstract and conceptual. Below is how it's supposed to be perceived.

       Similar to how a socket object is created at source program, if a new socket object is created(to receive the data) at the destination program on the destination machine upon a receiving a request from source, then we can say a connection is established. So, in an abstract way connection means creation of client and server specific socket objects. The data transmission between source and destination programs over 'that connection' happens usually but not restricted to first via TCP(But also UDP, SCTP etc - Transport Layer protocols) then to IPv4(but also IPv6, ICMP etc - Internet layer protocols) then to ARN(but also NDP, OSN etc - Link Layer) and so on down through TCP/IP stack protocol layer. Above all the layers is the Application Layer. Hence, 'that connection' is named based on the application layer protocol...
Eg:
1) HTTP Connection if the client and server uses HTTP (Web applications use this)
2) SMTP Connection if the client and server uses SMTP (e-Mail applications use this)
etc,.

Note: Protocols used by Applications - Web Application, Mail Applications, Chat applications etc,. any user application - are called Application Layer protocols. But here is the catch. Sometimes applications may skip the Application Layer and directly communicate starting from Transport layer.

         Now, look at the below diagram showing how the above explained Sockets and Network Stack work exactly in a communication process between a Http Client and Http Server. Clearly indicated who does what - that of Server and Client.
Client - Server communication via TCP/IP with the help of Sockets



Wednesday, September 14, 2016

Frequently Bugging Questions - FBQs - Java

Q1) How many instances of data(variables) and behavior(methods) per objects are created during runtime?

Ans) Well, each instance of a class has its own set of non-static class data. But the behavior or methods(both static and non-static) will be created only once in the class area. After all what is the point of having a same method code multiple times!

Q2) Servlet Container, EJB Container...what is a Container?

Q3) What is Serialization in Java
Ans) Just like .txt, .pdf, .doc etc., Serialization(.ser) is a format which can be understood by a JVM or any java program. There are many ways - eg: text files -  we can save java's objects but .ser is the most efficient way.

Q4) Compare HTTP vs HTTPS vs SOAP in terms of Security?

Security Comparison
Q4) What is ThreadSaftey?
Ans? A Class or its object is said to be thread safe if it has
 i) No State or no instance variables
ii) Immutable state or all its instance variables are immutable
iii) State that can only be modified through it's methods which are synchronized

Q5) What is the difference between MOM and Message Broker?
Ans)
Basically, MOM- Message Oriented Middleware - is an enterprise integration system that does the function of transfer of messages from sender to receiver. It can be imagined as a central system that takes a message(in any format - Text/Soap/Json etc) and simply sends it to the target receiver as it is. MOM does not do any transformation. It just sends as is the message received.

Message Broker: This is nothing but a MOM with a special capability of transforming messages from Senders to accepted formats of the receivers and send/distribute them.

Q6) What is an Inner Class in Java?
When you need some functionality which must be a member of a class but can't be achieved with either a member variable or its method, then Inner Class is used.

Features of Inner Class:
1) Functionality achieved by the inner class is very much specific to the Class
2) It need to use the environment of the Outer class like its members etc to achieve the functionality

Q7) Benefit of DI in Unit Testing?
Dependency Injection and ease of doing Unit Testing:
There are no special advantages other than that are offered by DI itself.
Mock objects which are part of JUnit Tests are also injectable just like other dependencies.
In fact, DI does not prevent the use of Mock Objects -- can be considered as an advantage. Since, unit testing would be difficult if we cant use mocks in place of dependencies in DI environment.

Q8) Unable to Connect to SSL Services due to PKIX Path building failed
When you encounter this issue, the normal solution to add Certificate to cacerts which is part of your java environment using keytool. But sometimes it is necessary for you to add all the certificates in the certificate chain till the root need to be added.

Q9) Which .exe file is picked if two directories with same .exe file are present in Windows's system path?
Ans: Windows executes the .exe file from the first detected/found folder in the path.

Q10) What are keytool, keystore and cacerts in Java?
Ans: keystore, keytool and cacerts are provided by Java SE as part of SSL support. Another term that is required  to understand these concepts is Certificate.
Certificate: A certificate is a digitally signed statement of another entity(server of a person or an organisation), stating that the public key along with data sent from the entity is valid. When data is digitally signed, the signature can be verified at the java client side using a keystore file.

keystore: This is a file that jvm uses to store the digitally signed certificates and keys associated with them. cacerts is one such jvm's system wide available file residing in java.home\lib\security dir which contains CA Certificates. CA Certificate is a certificate awarded to an entity who claim that they are by a recognized Certificate Authority(Verizon, Symantec or GoDaddy) with its signature. During HTTPS communication, if a CA-certificate is received from a server, the signature of the Certificate Authority body can be verified in the store. So that the java client can trust the information received from the server is authorized and secure.

Adding Certificates to trust store: Sometimes, if obtaining a certificate is costly, then the organization may choose to send a self signed certificate. In this case, if the received Self Signed Certificate is verifed in the truststore(cacerts), the signature wont be found. Hence, the java client needs to add the certificate to its store so that the future communication can be established.

keytool: This is the utility to manage keystore and certificate etc.

Note:
iOS  has something called keychain that has the certificates
Android has keystore file that contains the certificates
Windows : has its own certificate store

Q11) How to know which path variable windows is reporting while you issue the command java -version?
Ans: for %I in (java.exe) do @echo %~$PATH:I will tell you the exact path on 'path' variable of Environment Variables on machine. This is useful when multiple versions of jre are installed and you are confused why system uses a version of java that you dont want eventhough you set the environment path properly

Q12) How margins apply in a webpage?
Ans: Every web-element has margin. Margin normally refers to the space around the widget or an element. If there are two web elements adjacent to each other, then if you increase the margin of a n element, it pushes the other away. If a widget is inside a container element, and if you increase the margin of the inner widget, the effect falls on the contents of the inner widget since the inner element cant push the container boundaries away. As a result, the text for example of an inner widget inside a container gets shrink. Suppose, the inner widget is another container and its margins are increased, the elements inside it get closer.

Q13) What is Server/Instance/Box etc?
1. Box/Machine: A physical machine - CPU, RAM and ROM - is called a Box. 
2. Instance: Database software running on a particular port on a physical machine or box is called Database-Service-instance. Similarly, if TomCat is installed on the machine, then it is TomCat instance. Likewise, these are called Server instances or Servers. A group of servers is called Cluster.
3. Proxy Server

4. LoadBalancer - F5

Q14)What is High-availability in webbased applications?
High availability means, customers should not get service interruption frequently. Service interruption means the failure of a request processing at server side(middleware or backend). There are various reasons why a request fails at server side but the relevant one in this context is the unavailability of the server - Application/Web Server or Database server. Unavailability means server is down with StackOverflow or OutofMemory or Physically Server is down or Server has reached the maximum limit to handle requests. In order to make the applications highly-available, ensure there is less number of server down issues. There are many solutions and most obvious one is to have a redundancy. Redundancy means keeping multiple servers - Database or Application Servers or Web Servers - with a Loadbalancer. In rare case of LoadBalancer failure, there should be a backup loadbalancer too.

Q15) How to dynamically provide JAVA_HOME path to MAVAN or mvn command?
Ans. Sometimes, when running the command mvn -version will result in JAVA_HOME is not set properly. Setting JAVA_HOME in the system variables(in case of windows) should fix the issue. But if you have multiple versions of java installed and you want mvn to use one dynamically then do the following.
1. Open the command prompt or shell
2. Temporarily set the JAVA_HOME. set JAVA_HOME="path of jdk which does not contain spaces"
3. Now run the mvn -version command to proceed.

How J2EE components work together in any Container - Spring or Application Server

In a Spring+Jersey+Hibernate RESTful webapplication, we can spot various J2EE components - JTA, JPA, Java Bean Validation, JSON-B API for B...