Behavioral Questions and Answers

Which do you like first, the good news or the bad news? 
I like good news first. It will elate my mood so I will be able to take bad news better. If I get bad news first that I might miss the gravity of the good news.


Have you been in a situation where the team has let you down and you've to take the blame?
Yes it has recently happened. I provided reqs to engineering about a product feature. They were supposed to send out data of certain time period. Instead they sent out data for a longer period. We realized it when we received our invoices and they were higher than usual. Now there is no point blaming them but to own it up. I did bring it up with the engineering team and requested them to stick to the requirements.
As a fallback mechanism, I added a QA process for all the outgoing data. I had a rough estimate of numbers that can be sent out for all new requests. So for every new request, I asked them to provide me with the total size. If it matched or was within a specific range, we went ahead with sending out the data. This happened for only new requests so we didn't had to worry about them providing me with updates all the time since subsequent similar requests were automated.


How has your tolerance for mistakes changed over the years?
It has increased a lot. I have realized that people will make mistakes all the times and most of the times, they are genuine. There is no point getting upset over honest and genuine mistakes. And some people does mistakes because they don't know any better. For ex: Kids are just being kids, no point getting upset/angry at them when they are being themselves. New hires might deploy a bug in the production, it will not be productive if we start doubting them. So bottomline is: Mistakes will happen, we just need to learn from them and move on. However I am careful when someone conducts same mistakes over and over again. Now that is being careless and would hurt a business in a professional setting. Such behavior should be addressed in timely manner before the person becomes habitual of mistakes.


What have you learned about saying no?
It is a very important skill to have. And you can't say no to all the audiences. But to whosoever I am saying it to, I make sure that I say it nicely and precisely.
  • Recently I got a project request from Engineering. They wanted to prioritize an infrastructure project over a revenue generating one. Now infrastructure is important but not over revenue. I requested information on how they were planning to impact the revenue via it and they didn't come up with solid backing. The project would have added stars to the engineering manager's profile but wouldn't have generated any revenue for the company. Based on preliminary analysis, I politely said no and suggested them to get a budget approval from their Execs to move forward. But Product was not ready to buy the idea at the moment. I suggested to talk to my manager and exec level if they thought so strongly about it. They didn't so we didn't moved ahead with the project. 
  • We get a lot of feature requests that are one time use. Now we want our users to be honest to us but we can't tell them no on the face directly. We ask them for ROI on these features and its apparent that those features are not going to be extensively used for a lot of projects. One project that might not see the light of the day requires such features but we can't commit all our resources to build something that is not showing a lot of promise. 
  • And in product management you'll have to say no a lot then yes. If you say yes to everything then you will busy executing someone's vision and not your vision of the product. Trying to understand the impact or ROI is best way to weed out must haves from good to have features. 

Do you manage people from different functions differently? If so, how? 
Yes I do. Exec level is way different from Customer/user and that is different from Engineering or Legal or Procurement or Finance.
  • Exec level wants to know more about strategy and Product vision. They care about numbers with focused plan, about business goals, product goals, KPIs. 
  • Engineering cares about how well the Product fits in the vision. If it is high visibility product or a supporting product. What technology to use? What technology is used by integrating partners? How to integrate well to improve the performance? Are the requirements clear enough to build a solid foundation? Is there scope of automation?
  • Legal cares about fine print on the contracts. They want to make sure that business is executed as expected and we are conducting it by adhering to all the rules. 
  • Finance cares about if our product is generating the revenue. How can we decrease cost without affecting performance or any business goals? 
  • Procurement worries about getting the contracts signed to continue the business or initiate a new business quickly. They try to lock down a great deal at a good rate for few years. This way we are not reinventing the wheel all the time and are making sure that the deal is in place so that different functions can focus on achieving the business goals. 
  • Customers/users want to learn about a new feature. Want to know when a specific feature will be available. Will communicate with them to provide hope that their feature is on its way or politely turn them down telling them we are focussing on something else that requires our attention.

What would somebody do to lose your confidence?
Lie to me multiple times and double standards. If I catch someone constantly lying about something then that's it for me. If you lie one time its ok. There might be some reason why you did it. May be you were trying not to hurt me. But lying every time a tough situation comes up or when you are confronted tell me that the person shouldn't be trusted.
Second, if you say one thing in private but something else in public then bye bye.


How do you get a team to commit to a schedule?
  1. Explain them the bigger picture and product/business goals. 
  2. Make them feel that their contribution is making a difference to motivate them. 
  3. Create a roadmap and associate key tasks/stories to different items on the roadmap. 
  4. Define key metrics/KPIs and associate them to the tasks/stories and map. 
  5. Setup a meeting to go over above steps and define the project plan.
  6. Email out the plan with people held accountable to different tasks/stories. 
  7. Check periodically to monitor progress. 
  8. Ensure you are available to help prioritize if competing projects are showing up regularly. 
  9. Ensure to send updates when tasks are completed or are falling behind schedule
  10. Send out emails to key stakeholders once project is completed. 
  11. Celebrate the success!
  12. Document the learnings and measure the metrics and KPIs. 
  13. Refine metrics if need be. 
  14. Iterate.
Tell me about a time when a team didn't gel. Why do you think that happened, and what have you learned? 


What types of people have you found it difficult to work with?
People who never get along with anyone. Anything is a huge task for them. They are just trying to finish off something so quickly and don't want to think through things. Since they are in such a hurry that they resent any new task that is added to their plate. 


What kinds of people do you like to work with?
  • People who like to own the responsibility and don't mind few challenges here and there. A daily challenge might be an issue for many.
  • Those who like learning and are open to teach any acquired skills. 
  • Those who are able to focus on bigger picture while executing day to day activities. 

What's the difference between management and leadership? 
ManagementLeadership
Focuses on just day to day. Involves the team on strategy
and help with the bigger picture understanding
short term thinking Long term thinking
Focuses on onselfFocuses on the team
Not aware of employees goals and long term plansIs aware
Build processes and systemsBuild relationships
DirectCoach

How do you earn the respect of the engineering team as a product manager or someone outside that team?

  1. I usually provide them goals of the projects and how they will impact the revenue.
  2. If its an urgent ask, I try to get hold of someone in Sales or Planning team to understand how much revenue it is going to bring. If I know it, I communicate it to the team.
  3. If we are running an experiment then I am upfront with them by telling them this is just an experiment that might not result in a full blown project. So I tell them to do it in a quick and dirty way. Don't need to think about it and doesn't need to build a solution out of it.
  4. Since I have technical background, I try to communicate in the same language and they are usually comfortable explaining things further.
  5. I am usually polite most of the times. It helps. If I put someone on their plate I make sure other low priority items are moved out.
  6. While writing specifications, I write them out as detailed as possible.
  7. While they are releasing something, I help them out with the plan and am available if they identify a bug and need approval to roll back new features.


You might also like:
List of all behavioral questions

B-Tree

Features:
  1. Its a self balancing tree
  2. All its nodes live in the main memory. 
  3. If the height of the tree is long then nodes are accessed from the disk in the form of blocks. Hence the height is kept low and it reduces the disk access. Disk access time is low compared to AVL trees, Red-Black trees, etc.
  4. All leaves are at same level. 
  5. A factor x is defined that determines number of keys. 
  6. Node may contain 1 key. 
  7. All nodes must contain atleast t-1 keys and atmost 2t-1 keys.
  8. Keys are stored in ascending order.
  9. It grows and shrinks in size unlike BST. 
  10. O(Logn) is for search, insert, and delete.

Search operation:
  1. If key to be searched is x, we start by looking at the root node. 
  2. If x > root then we search RHS of the tree. 
  3. In the node we look for all the values sequentially. If the intended node doesn't has the key then we go back to root, look for next key sequentially present in the root and repeat step 2. 
  4. If x<root then we search for LHS of the tree.
  5. Repeat step similar to 3.
  6. If we don't find the keys in any of the nodes then we return Null.

Traverse operation:

jQuery Guide

This guide has the information you need to know about jQuery to get started. 

Basics

  1. jQuery is a library of javascript functions that you can use in your code. If you know the basics of javascript then you will be able to easily learn jQuery. 
  2. You can very easily apply different operations and formatting on different tags in your html code. For ex: If you want to hide a specify elements(lets say <p>) upon click a link. You can easily do this via jQuery. 
  3. To use jQuery you have to find the tag(selector) on which you have to perform the action. Basic syntax is:
    1. $(selector).action(
      1. To access jQuery library $ is used. We can use jQuery in place of $. At some places we do use jQuery instead of a $, we will explore it in more details at later point in the tutorial. 
      2. A (selector) or tag in the html document. 
      3. action() specifies the operation to be performed on the selected tag.
  4. There are certain ways to find the html element. These methods are similar to finding elements in CSS.
    1. $(“h1”) - This method will select the element h1.
    2. $(“#format”) - This method will select the element whose id=“format” in the html page.
    3. $(“.formatter”) - This method will select the element whose class = “formatter” in the html element. 
  5. To use jQuery library you can either download it and include it your source code. Or else you can refer it from its hosted location. One such location is: http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
  6. Hence you should include this library reference in the script tag like this:
    1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
  7. And it should be included in your head tag like this:
    1. <head>
    2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
    3. </head>
  8. Quick Notes:
    • jQuery uses $ sign as a shortcut for jQuery
    • jQuery is Client side scripting
  9. What if other JavaScript frameworks also use the $ sign as a shortcut?
  10. If two different frameworks are using the same shortcut, one of them might stop working.
    The jQuery team have already thought about this, and implemented the noConflict() method.
    The noConflict() method releases the hold on the $ shortcut identifier, so that other scripts can use it.
    $.noConflict();
    jQuery(document).ready(function(){
      jQuery("button").click(function(){
        jQuery("p").text("jQuery is still working!");
      });
    });


jQuery Events

jQuery Mouse Events
Some of the jQuery methods are common and can be executed on desired tags. All the methods attaches the event handlers on the html element on which they are attached. Once that action is performed the event handler is called and it performs the set of steps on the corresponding html element. 
  1. .click() - Action is performed when html tag/selector is clicked.
  2. .dblclick() - Action is performed when html tag/selector is double clicked
  3. .focus() - Action is performed when html/tag selector is focused on.
  4. .change() - Action is performed when html tag/selector value changes. It is limited to tags: <input>, <textarea>, <select>
  5. .mouseenter() - Action is performed when mouse enters the html tag/selector. 
  6. .mouseleave() - Performs opposite action as compared to mouse enter.
  7. .hover() - Perform action when mouse is hovered over the corresponding html tag/selector.
  8. .focusout() - Event is executed when the focus moves away from corresponding html tag/selector.
  9. .mousedown() - Event is executed when mouse button is clicked on the html tag/selector.
  10. .mousemove() - Event is executed when mouse move in the html tag/selector.
  11. .mouseout() - Event is executed when mouse moves out of the html element. 
  12. .mouseover() - Event is executed when mouse moves over the html element. 
  13. .mouseup() - Event is executed when mouse is over the html element and is released. 
  14. .toggle() - This event is deprecated in the jQuery 1.8. 

jQuery Keyboard events:
  1. .focusout() - Event is invoked when any element or an element below it loses focus. It is different from blur since it supports losing focus from the child elements.
  2. .keydown() - Event is invoked when any key is pressed. Any element in focus will receive the actions when this event is executed. 
  3. .keypress() - Similar to keydown but following keys will not register key press event: shift, Del, Esc
  4. .keyup() - Event is invoked when a key is released.Because of event bubbling all the key presses will be propagated to the document element. For specific elements, we can use .keypress().

Document Rendering Events:
    • .load() - Action is performed when html tag/selector is loaded.
    • .ready() - Action is performed when the DOM is ready or the document is ready. It doesn’t work well with .load since that operation will start performing its operation as soon as the element is available. However, .ready is not going to execute its action till entire DOM is available. When this function is called then we should use $.noConflict() to avoid the namespace conflicts and we have to use jQuery in place of $. 
    • .unload() - Action to be performed when the user intends to go away from the page. The action of going away include:
      • - click on forward and back button.
      • - Refresh a page
      • - clicking on exit browser button. 

Keyboard Events:
    • 1) .focusout() - Event is invoked when any element or an element below it loses focus. It is different from blur since it supports losing focus from the child elements.
    • 2) .keydown() - Event is invoked when any key is pressed. Any element in focus will receive the actions when this event is executed. 
    • 3) .keypress() - Similar to keydown but following keys will not register key press event: shift, Del, Esc
    • 4) .keyup() - Event is invoked when a key is released.Because of event bubbling all the key presses will be propagated to the document element. For specific elements, we can use .keypress().

Commonly Used jQuery Event Methods
    • $(document).ready(): The $(document).ready() method allows us to execute a function when the document is fully loaded. This event is already explained in the jQuery Syntax chapter.
    • click()
      • The click() method attaches an event handler function to an HTML element.
      • The function is executed when the user clicks on the HTML element.
    • dblclick()
      • The dblclick() method attaches an event handler function to an HTML element.
      • The function is executed when the user double-clicks on the HTML element:
    • mouseenter()
      • The mouseenter() method attaches an event handler function to an HTML element.
      • The function is executed when the mouse pointer enters the HTML element:
    • mouseleave()
      • The mouseleave() method attaches an event handler function to an HTML element.
      • The function is executed when the mouse pointer leaves the HTML element:
    • mousedown()
      • The mousedown() method attaches an event handler function to an HTML element.
      • The function is executed, when the left mouse button is pressed down, while the mouse is over the HTML element:
    • mouseup()
      • The mouseup() method attaches an event handler function to an HTML element.
      • The function is executed, when the left mouse button is released, while the mouse is over the HTML element:
    • hover()
      • The hover() method takes two functions and is a combination of the mouseenter() and mouseleave() methods.
      • The first function is executed when the mouse enters the HTML element, and the second function is executed when the mouse leaves the HTML element:
    • focus()
      • The focus() method attaches an event handler function to an HTML form field.
      • The function is executed when the form field gets focus:
    • blur()
      • The blur() method attaches an event handler function to an HTML form field.
      • The function is executed when the form field loses focus:


jQuery DOM Manipulation: One very important part of jQuery is the possibility to manipulate the DOM. jQuery comes with a bunch of DOM related methods that make it easy to access and manipulate elements and attributes
    • text() - Sets or returns the text content of selected elements
    • html() - Sets or returns the content of selected elements (including HTML markup)
    • val() - Sets or returns the value of form fields
    • The jQuery attr() method is used to get attribute values.


Call back functions

$("#btn1").click(function(){
    $("#test1").text(function(i,origText){
        return "Old text: " + origText + " New text: Hello world!
        (index: " + i + ")"; 
     });
 });
We can have similar callback functions for the other methods: text, html, val
  • remove() - Removes the selected element (and its child elements)
  • empty() - Removes the child elements from the selected element

Call Back Function example:
$("#div1").remove();
$("p").remove(".italic");


jQuery Methods


  • jQuery addClass() Method
The following example shows how to add class attributes to different elements. Of course you can select multiple elements, when adding classes:
Example
$("button").click(function(){
    $("h1,h2,p").addClass("blue");
    $("div").addClass("important");
});

  • jQuery removeClass() Method
The following example shows how to remove a specific class attribute from different elements:
Example
$("button").click(function(){
    $("h1,h2,p").removeClass("blue");
});

  • jQuery toggleClass() Method
The following example will show how to use the jQuery toggleClass() method. This method toggles between adding/removing classes from the selected elements:
Example
$("button").click(function(){
    $("h1,h2,p").toggleClass("blue");
});

  • Set a CSS Property
$("p").css("background-color","yellow");


  • Set Multiple CSS Properties
$("p").css({"background-color":"yellow","font-size":"200%"});


  • jQuery Dimension Methods
jQuery has several important methods for working with dimensions:
    • width()
    • height()
    • innerWidth()
    • innerHeight()
    • outerWidth()
    • outerHeight()

  • Traversing Up the DOM Tree
Three useful jQuery methods for traversing up the DOM tree are:
    • parent(): The parent() method returns the direct parent element of the selected element. And it goes up only a single level.
    • parents(): Find all the parents.
    • parentsUntil(): Find the parents till a specific html or class or id specified
$(document).ready(function(){
     $("span").parentsUntil("div");
});


  • Traversing Down the DOM Tree
Two useful jQuery methods for traversing down the DOM tree are:
    • children()
    • find()
The children() method returns all direct children of the selected element and it traverses only a single level down. 

The find() method returns descendant elements of the selected element, all the way down to the last descendant.
$(document).ready(function(){
     $("div").find("span");
});

  • Traversing Sideways in The DOM Tree
    • siblings(): Returns all the siblings of the current element. 
    • next()
    • nextAll()
    • nextUntil()
    • prev()
    • prevAll()
    • prevUntil()

  • jQuery prev(), prevAll() & prevUntil() Methods
The prev(), prevAll() and prevUntil() methods work just like the methods above but with reverse functionality: they return previous sibling elements (traverse backwards along sibling elements in the DOM tree, instead of forward).
JQuery Filtering
The first() method returns the first element of the selected elements.


  • jQuery + Ajax: 
<script>
$(document).ready(function(){
    $("button").click(function(){
       $("#div1").load("demo_test.txt");
  });
});
</script>

<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div>
<button>Get External Content</button>


  • jQuery load() Method
The load() method loads data from a server and puts the returned data into the selected element.
Syntax:
$(selector).load(URL,data,callback);
- The required URL parameter specifies the URL you wish to load.
- The optional data parameter specifies a set of querystring key/value pairs to send along with the request.
- The optional callback parameter is the name of a function to be executed after the load() method is completed.
$(document).ready(function(){
  $("button").click(function(){
    $("#div1").load("demo_test.txt");
  });
});
</script>


  • jQuery $.get() Method
The $.get() method requests data from the server with an HTTP GET request.
Syntax:
$.get(URL,callback);
$("button").click(function(){
  $.get("demo_test.asp",function(data,status){
    alert("Data: " + data + "\nStatus: " + status);
  });
});


  • jQuery $.post() Method
The $.post() method requests data from the server using an HTTP POST request.
Syntax:
$.post(URL,data,callback);
$("button").click(function(){
  $.post("demo_test_post.asp",
  {
    name:"Donald Duck",
    city:"Duckburg"
  },
  function(data,status){
    alert("Data: " + data + "\nStatus: " + status);
  });
});

There are many other popular JavaScript frameworks like: Angular, Backbone, Ember, Knockout, and more.


Basic Code Snippets
Get Text:
$("#btn1").click(function(){
  alert("Text: " + $("#test").text());
});

Set Text:
$("#btn1").click(function(){
  $("#test1").text("Hello world!");
});

Get Html:
$("#btn2").click(function(){
  alert("HTML: " + $("#test").html());
});

Set Html:
$("#btn2").click(function(){
  $("#test2").html("<b>Hello world!</b>");
});

Get Value:
$("#btn1").click(function(){
  alert("Value: " + $("#test").val());
});

Set Value: 
$("#btn3").click(function(){
  $("#test3").val("Dolly Duck");
});

Get Value:
$("button").click(function(){
  alert($("#w3s").attr("href"));
});

Set Value:
$("button").click(function(){
  $("#w3s").attr("href","http://www.w3schools.com/jquery");
});

$("button").click(function(){
  $("#w3s").attr({
    "href" : "http://www.w3schools.com/jquery",
    "title" : "W3Schools jQuery Tutorial"
  });
});


SQL Basics

Switch Case:
Following is the syntax of switch case in MySql.

Example:
Employee {
       id int,
       name string,
}


  • Employee table has 2 columns called as id and name. 
  • For ex, if you want string 'First' to be displayed for employee with id = 1 & 'Second' to be displayed for employee id = 2 then the query can be written as follows:

SELECT string,
CASE WHEN id = 1 THEN 'First' WHEN id = 2 THEN 'Second' END
From Employee

So every time id=1 is a part of result, it will display 'First'.

Indexing
Indexing could result in increasing the performance of the database. If indexes are not set then it impacts the performance. Here are some best practices of selecting the indexes:

  1. Pick a good clustering key: Not varchar but an int. 
  2. Int is narrow, stable, ever-increasing, and unique.
  3. An index can be added to any column that is being used as foreign key on other table.
  4. Avoid overlapping indexes. 
  5. Avoid indexing on too many columns. 
  6. Have a baseline number for testing. Before adding any columns your queries are taking 10 seconds to provide a response. Now after adding the indexes find out the time it takes to run the same queries. If its less then 10 seconds then you have added indexes on right columns. So observe, measure, and compare the baseline.

How to convert a string to a date: 
Its very common in business world to convert a string to a date for reporting purposes. To achieve those results here is an operation:
STR_TO_DATE('2003/07/09', 'yyyy/mm/dd')
Result: date value of July 9, 2003

Popular Sql Operations:

  1. COALESCE: Returns first non-null value from a list of strings. 
    1. Example 1: Select COALESCE(NULL, 'Interview questions', NULL, 'Product interview questions'); 
      1. Result: Interview questions
    2. Example 2: Select COALESCE(NULL, NULL, NULL, NULL, 'Interview', NULL, 'Product interview questions'); 
      1. Result: Interview
  2. CURRENT_TIMESTAMP: Returns current date and timestamp. "YYYY-MM-DD HH-MM-SS" format if used in a string context
    1. Example: Select CURRENT_TIMESTAMP
      1. Result: 2018-08-13 01:09:13

Spring Dependencies for Maven

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
    <groupId>com.practice.spring</groupId>
    <artifactId>SpringPractice</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
    </dependencies>

</project>

You might also like:









Servlet Filter

- Filter help to block a malicious request if they are not allowed to access a backend resource.
- Filter also help to manipulate the responses that will be sent back to the client.

Different types of filters:
  1. Authentication-Blocking: Block or allow any requests based on user identity.
  2. Logging and auditing: Helps in user tracking.
  3. Image conversion: Helps with scaling maps
  4. Data compression: Reduces download size
  5. Localization: Helps support the code in various countries based on different languages and formatting. 
  6. Encryption filters
  7. Tokenizing filters
  8. Mime-type chaining filters
  9. Caching filters
  10. XSL/T Filters: Helps transforming XML requests.

- Filters are specified in web.xml and are executed in the order specified in the file.
- Filter java class implements javax.servlet.Filter and implements these 3 methods: init(), doFilter(), destroy()

import javax.servlet.*;
import java.util.logging.Filter;

public class TestFilter implements Filter {
    public void  init(FilterConfig config) throws ServletException {
        //Get and print init param                
        String testParam = config.getInitParameter("param1");
        System.out.println("Test Param: " + testParam);
    }

    public void  doFilter(ServletRequest request,
                          ServletResponse response,
                          FilterChain chain)
            throws java.io.IOException, ServletException {

        // Get the method of the request
        String method = request.getMethod();
        logger.info("Request Method is: ", method);

        // Pass request back down the filter chain
        chain.doFilter(request,response);
    }
    public void destroy( ){
        //close any resources here        }
}

Compile TestFilter.java in usual way and put your class file in <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes

Make following config change in the web.xml
<filter>
    <filter-name>TestFilter</filter-name>
    <filter-class>TestFilter</filter-class>
    <init-param>
        <param-name>param1</param-name>
        <param-value>Test</param-value>
    </init-param>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

The TestFilter will apply to all the servlets since we specified url-pattern as /*. For example if we want to apply TestFilter to only a class called as TestFile then the config will look like
<filter>
    <filter-name>TestFilter</filter-name>
    <filter-class>TestFilter</filter-class>
    <init-param>
        <param-name>param1</param-name>
        <param-value>Test</param-value>
    </init-param>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>TestFile</url-pattern>
</filter-mapping>

Multiple filters
<filter>
    <filter-name>TestFilter</filter-name>
    <filter-class>TestFilter</filter-class>
    <init-param>
        <param-name>param1</param-name>
        <param-value>Value1</param-value>
    </init-param>
</filter>

<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>TestFilter2</filter-name>
<filter-class>TestFilter2</filter-class>
<init-param>
    <param-name>param</param-name>
    <param-value>Value</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>TestFilter2</filter-name>
<url-pattern>TestFile</url-pattern>
</filter-mapping>
In this example, TestFilter will be applied followed by TestFilter2.

You might also like:
Java Concepts
Java String concepts
Immutable classes in Java
Remove duplicates from the array
Telephonic phone technical interview questions
Telephonic phone technical interview questions - Part 2
Serialization & Deserialization
Jersey Package Dependencies
Observable and Observer Interface
Servlet Client Request
Spring dependencies for Maven
Java String Operations

Mercurial Commands CheatSheet

Mercurial Commands:
  1. Merging
    1. hg update default
    2. hg pull
    3. hg update
    4. hg merge branch_name
    5. hg commit 
    6. hg push
  2. Creating a new branch
    1. hg branch branch_name
    2. hg commit -m “Creating a new branch” 
    3. hg push - - new-branch
  3. Post a review on one of the published reviews
    1. hg postreview -i {repositoryId} -e {CodeReviewId}
  4. To rollback a merge:
    1. hg update -C . 
  5. Clone a repository:
    1. hg clone ssh://merc//home/hg/RepoName
  6. Undo a merge:
    1. hg update -C -r .

NoSQL

NoSQL Data models: key-value  Aggregate model.  key or id is used to get the data.  Lookup is based on the key.   document Aggre...