Wednesday 31 July 2019

Linux commands

-------------------- pwd / cd --------------------------------

pwd - print working directory
cd - change directory
cd / - move to root directory
cd ~ - home directory
cd dir1/dir2 - move to said directory
cd .. -fall back one directory

------------------------ LS---------------------------------
ls - displays files and folders in the currect directlory

ls-R - displays files and folders in the currect directlory & sub driectories

ls-a - shows hidden files

------------------------- CAT --------------------------------
cat command:

create file :
cat (enter)
> fileName1
> file content

combining file:
cat fileName1 fileName2 > newFileName

to view file content:
cat newFileName
------------------------ delete ---------------------------------
delete file
rm newFileName
------------------------- move --------------------------------
move a file ( file to a new directory )
mv fileName1 /home/dir1/dir2  --- permission denied

we need super user credentials for this
sudo mv fileName1 /home/dir1/dir2 

---------------------- rename -----------------------------------

rename file name
mv fileName newFileName

--------------------- mkdir ------------------------------------
create directory:
mkdir songs

create sub directories:
mkdir temp/songs

multiple directories:
mkdir  dir1 dir2 dir3

--------------------- rmdir ------------------------------------

deletes directory with contents init
rmdir dir1
---------------------------------------------------------
Help - Man

man ls
help information
---------------------------------------------------------
history
>history
---------------------------------------------------------
clear command
> clear






Monday 22 July 2019

Interview Qns - Core java

Output please

public class Test123 {

static {
System.out.println("first static block");
}
static {
System.out.println("Second static block");
}

public static void main(String[] args) {
System.out.println("Main Method");
Test123 t = new Test123();
}

Test123() {
System.out.println("COnstructor");
}

}


Output:
first static block
Second static block
Main Method
COnstructor



Yes, we can write n number of static blocks 
Main method executes after static blocks
--------------------------------


Can we write Throwable in Catch block??

public void doNotCatchThrowable() {
try {
// do something
} catch (Throwable t) {
// don't do this!
}
}

Throwable is the superclass of all exceptions and errors. You can use it in a catch clause, but you should never do it!

If you use Throwable in a catch clause, it will not only catch all exceptions; it will also catch all errors. Errors are thrown by the JVM to indicate serious problems that are not intended to be handled by an application. Typical examples for that are the OutOfMemoryError or the StackOverflowError. Both are caused by situations that are outside of the control of the application and can’t be handled.

So, better don’t catch a Throwable unless you’re absolutely sure that you’re in an exceptional situation in which you’re able or required to handle an error.

-----------------------------------
The task is to write a program to generate the largest number possible using these digits.
Input : arr[] = {8, 6, 0, 4, 6, 4, 2, 7}
Output : Largest number: 87664420


static int findMaxNum(int arr[])
{
    // sort the given array in
    // ascending order and then
    // traverse into descending
    Arrays.sort(arr);
   
    int num = arr[0];
    int n = arr.length;
   
    // generate the number
    for(int i = n - 1; i >= 0; i--)
    {
        num = num * 10 + arr[i];
    }
   
    return num;
}
--------------------------------------
Checked: are the exceptions that are checked at compile time. If some code within a method throws a checked exception, then the method must either handle the exception or it must specify the exception using throws keyword.
FileReader thows FileNotFoundException is a subclass of IOException - hence am throwing


import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        FileReader file = new FileReader("C:\\test\\a.txt");
        BufferedReader fileInput = new BufferedReader(file);
       
        // Print first 3 lines of file "C:\test\a.txt"
        for (int counter = 0; counter < 3; counter++)
            System.out.println(fileInput.readLine());
       
        fileInput.close();
    }
}

Ex:
ClassNotFoundException,
IOException,
SQLException


Unchecked: are the exceptions that are not checked at compiled time
Ex:
NullPointerException
ArithmeticException,
ArrayStoreException,
ClassCastException
IndexOutofbounds
---------------------------------------

Inheritance - Class casting -  Parent to Child and Child to parent


public class Parent {

public void m1() {
System.out.println("parent method");
}

}

public class Child1 extends Parent {

public void m1() {
System.out.println("Child1 method");
}

public static void main(String[] args) {
Parent p = new Parent();
p.m1();

Child1 c = new Child1();
c.m1();

Parent p1 = new Child1();
p1.m1();

Child1 cer = (Child1) p;// RuntimeError : java.lang.ClassCastException:
// javaProg.Parent cannot be cast
// to
// javaProg.Child1

Child1 cerr1 = (Child1) new Parent();// Runtime error :
// java.lang.ClassCastException: javaProg.Parent cannot be
// cast to javaProg.Child1
}
}

output:
parent method
Child1 method

Child1 method

Note - Only Child to parent casting is possible, Rest all Runtime Exception
--------------------------------------------------
Remove duplicates from array

// NOTE : SORTED ARRAY
public static int removeDuplicateElements(int arr[], int n){
        if (n==0 || n==1){
            return n;
        }
        int[] temp = new int[n]; // lets use temp array
        int j = 0;
        for (int i=0; i<n-1; i++){
            if (arr[i] != arr[i+1]){
                temp[j++] = arr[i];
            }
         }
        temp[j++] = arr[n-1]; // ADD LAST ITEM TO TEMP ARRAY
 
        // Changing original array
        for (int i=0; i<j; i++){
            arr[i] = temp[i];
        }
        return j;
    }
---------------------------------------------------
how to make thread safe

Static methods are marked as synchronized just like instance methods using the synchronized keyword. Here is a Java synchronized static method example:

  public static synchronized void add(int value){
      count += value;
  }
Also here the synchronized keyword tells Java that the method is synchronized.

Synchronized static methods are synchronized on the class object of the class the synchronized static method belongs to. Since only one class object exists in the Java VM per class, only one thread can execute inside a static synchronized method in the same class.


If the static synchronized methods are located in different classes, then one thread can execute inside the static synchronized methods of each class. One thread per class regardless of which static synchronized method it calls.
--------------------------------------
public vs protected

The protected specifier allows access by all subclasses of the class in a program, whatever package they reside in, as well as to other code in the same package. The default specifier allows access by other code in the same package, but not by code that is in subclasses residing in different packages

----------------------------------------

Guess the out put of below prog


try{
System.exit(-1);
System.out.println("in try");
}
catch(Exception ex){
System.out.println("in Exception block");
}

output : Nothing - as program exits then and there



Java System exit() Method
The exit() method of System class terminates the current Java virtual machine running on system. This method takes status code as an argument.


System.exit(0) or EXIT_SUCCESS;  ---> indicates Successful termination
System.exit(1) or EXIT_FAILURE;  ---> indicates unsuccessful termination with Exception
System.exit(-1) or EXIT_ERROR;   ---> indicates Unsuccessful termination


Thursday 11 July 2019

Collection Interface - ArrayList : How to make array list thread safe

ArrayList is NOT ThreadSafe

sometimes you need to restrict access one thread at a time by implementing Synchronization.

Collection list3 = Collections.synchronizedList(Arrays.asList(1, 2, 3, 4, 5));
synchronized (list3) {
Iterator j = list3.iterator();
while (j.hasNext())
System.out.println(j.next());
}