Wipro Limited is an Indian multinational technology company headquartered in Bengaluru, India. It is a leading global provider of information technology (IT), consulting, and business process services. Founded on December 29, 1945, by MH Hasham Premji as Western India Vegetable Products Limited, the company initially focused on manufacturing cooking oils. After Hasham Premji's death in 1966, his son Azim Premji took over as chairperson at the age of 21 and shifted the company’s focus toward the IT and computing industry during the 1970s and 1980s, a period when this sector was emerging in India.
Today, Wipro is recognized as one of India’s major Big Tech companies, alongside firms like TCS, Infosys, and HCL Technologies. It operates in over 60 countries, serving clients across industries such as financial services, healthcare, manufacturing, retail, and telecommunications. Wipro’s service offerings include cloud computing, cybersecurity, digital transformation, artificial intelligence, robotics, data analytics, IT consulting, software development, system integration, and business process outsourcing (BPO). The company employs approximately 234,000 people worldwide as of March 2024, with women making up 36.6% of its workforce.
Wipro’s evolution includes key milestones: it changed its name to Wipro Products Limited in 1977 and then to Wipro Limited in 1982. By the 1990s, it had become a prominent player in India’s IT sector, and in 1998, it was the country’s second-largest software exporter. In 2000, Wipro listed its American Depositary Shares on the New York Stock Exchange (NYSE), and by 2004, it became the second Indian IT company to surpass $1 billion in annual revenue. In 2012, Wipro demerged its non-IT businesses—such as consumer care, lighting, and infrastructure engineering—into a separate entity called Wipro Enterprises, allowing it to focus solely on IT services.
The company’s equity shares are traded on the Bombay Stock Exchange (BSE) and the National Stock Exchange of India (NSE), where it is part of the NIFTY 50 index. As of March 2024, the promoter group, led by Azim Premji, holds a 72.88% stake in Wipro. Known for its commitment to sustainability and innovation, Wipro has also faced challenges, such as criticism in 2023 for reducing new hires’ salary packages by 50%, prompting backlash from employee unions. Despite this, it continues to secure significant deals, like a £500 million, 10-year contract with the UK’s Phoenix Group in 2025, reinforcing its global presence and growth trajectory.
Unique key | Primary key |
---|---|
A table can contain multiple unique keys. | A table can contain only one primary key. |
NULL values are allowed. | NULL values are not allowed. |
It helps to maintain a unique data in a column of a table. | It helps to identify a unique row from a table. |
For MS SQL server databases, a unique constraint will generate a unique NON-CLUSTERED INDEX | Primary key will generate a unique CLUSTERED INDEX |
DROP | TRUNCATE | DELETE |
---|---|---|
DROP is used for deleting a database, table, or a view | TRUNCATE is used for deleting all rows of a table | DELETE can either delete all of the rows at once or one by one. i.e., we can use it according to our needs. |
No data can be rollbacked | No data can be rollbacked | Data can be rollbacked |
It is a Data Definition Language (DDL) command | It is a Data Definition Language (DDL) command | It is a Data Manipulation Language (DML) command. |
It deletes the entire structure of the table. | It preserves the structure of the table. | It does not affect the structure of the table. |
To delete duplicate rows from a table in SQL, you can use different methods depending on your database system (MySQL, PostgreSQL, SQL Server, Oracle, etc.). Here are common approaches:
ROW_NUMBER()
(Preferred Method)If your database supports ROW_NUMBER()
, you can use it to identify and remove duplicates efficiently.
WITH CTE AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn
FROM table_name
)
DELETE FROM table_name
WHERE id IN (SELECT id FROM CTE WHERE rn > 1);
PARTITION BY column1, column2
groups duplicate rows based on selected columns.
ROW_NUMBER()
assigns a unique row number within each group.
Deletes rows where rn > 1
, keeping only the first occurrence.
DISTINCT
to Create a New Table (Safe Method)If direct deletion is risky, create a new table with only distinct records.
CREATE TABLE new_table AS
SELECT DISTINCT * FROM table_name;
DROP TABLE table_name;
ALTER TABLE new_table RENAME TO table_name;
* This ensures only unique records remain.
DELETE
with GROUP BY
(For Simple Cases)For databases that don’t support ROW_NUMBER()
, you can delete duplicates using GROUP BY
and HAVING
.
DELETE FROM table_name
WHERE id NOT IN (
SELECT MIN(id)
FROM table_name
GROUP BY column1, column2
);
* Keeps only the row with the minimum id
and deletes the rest.
CREATE PROCEDURE procedure_name
AS
sql_statement
GO; ?
EXEC procedure_name; ?
Self-Join: A self-join is a join which joins the table with itself, means that each row of the table is combined with itself and with every other row of the table. The table contains a FOREIGN KEY which references its PRIMARY KEY.
It shows the one-to-many relationship in a table also known as a unary relationship.
Now come to SQL outer join, all the content of both tables is integrated together either they are matched or not.
An outer join is of two types:
1. Left outer join (also known as left join): this join returns all the rows from left table combine with the matching rows of the right table. If you get no matching in the right table, it returns NULL values.
Syntax: Left outer join
2. Right outer join (also known as right join): this join returns all the rows from right table are combined with the matching rows of left table .If you get no column matching in the left table .it returns null value.
Basic syntax for right joins :
DELETE FROM table_name [WHERE condition];
DELETE FROM table_name;
TRUNCATE TABLE employee;
malloc()
calloc()
realloc()
free()
isfull()
to check if the stack is full or not. Here, the isfull()
is an example of a precondition.isempty()
must always hold after placing an element onto the stack. This is a push operation post-condition. Block | Inline |
---|---|
A block-level element is drawn as a block that will always start on a new line and will stretch to occupy the full width available to it, i.e. the width of its container. Examples of block-level elements by default: <div>, <img>, <section>, <form>, <nav>. |
Inline items are drawn where they are defined and take up only the space that is required. Looking at how text flows on a page is the simplest approach to understand how they work. Examples of inline elements by default: <span>, <b>, <strong>, <a>, <input>. |
//C
#include
#include
#define HRS 24 //Macro
int main()
{
printf("%d", HRS);
return 0;
}
24
//C
#include
int hrs()
{
return 24;
}
int main()
{
printf("%d", hrs()); //calling
return 0;
}
24
getRuntime()
. This instance of Runtime can be used to call the gc()
function to request garbage collection.System.gc()
function. public class Sample
{
public static void main(String[] args) throws InterruptedException
{
Sample s1 = new Sample();
Sample s2 = new Sample();
// Making the reference variable as null
s1 = null;
// Calling the system call function for garbage collection
System.gc();
// Making the reference variable as null
s2 = null;
// Calling for garbage collection through the getRuntime() method
Runtime.getRuntime().gc();
}
@Override
// This method is called on object once before garbage collecting it
protected void finalize() throws Throwable
{
System.out.println("Garbage collector has been called");
System.out.println("The Object whose garbage has been collected is : " + this);
}
}
Garbage collector has been called
The Object whose garbage has been collected is : Sample@4251f172
Garbage collector has been called
The Object whose garbage has been collected is : Sample@481e8172
public interface List<E> <strong>extends</strong> Collection<E>
Sleep () method in Java has two variants one which takes millisecond as sleeping time while other which takes both millisecond and nanosecond for the sleeping duration.
Yield () method pause all the currently executing thread, and give a chance to execute those threads or processes that need to be run. The current thread will continue to run again if no other thread is available to execute.
Wrapper class in Java provides the mechanism to convert primitive into object and object into primitive. The eight classes of the java.lang package is known as wrapper classes in java.
The list of eight wrapper classes is given below :
Primitive Type | Wrapper class |
---|---|
Boolean | Boolean |
Char | Character |
Byte | Byte |
Short | Short |
Int | Integer |
Long | Long |
Float | Float |
Double | Double |
Order of precedence is used with the operators. When a number of operators are used in an expression, it evaluates with the priority of the operators.
Associativity is used to check whether an expression is evaluated from left-to-right or right-to-left.
Order of precedence example:
(5 > 2 + 5 && 4)
The given expression is equivalent to:
(5 > (2 + 5)) && 4)
The expression (2 + 5) will executes first and the result will be 7
Then after first part of the expression (5 > 7) executes and gives 0 (false) as an output
Finally, (0 && 4) executes and gives 0 (false).
Associativity:
4 * 2 / 4
Here, operators * and / have the same precedence. Both "*" and "/" are left to right associative, i.e., the expression on the left is executed first and moves towards the right.
Thus, the expression above is equivalent to :
((4 * 2) / 4)
i.e., (4 * 2) executes first and the result will be 8 (true)
then, (8 / 4) executes and the final output will be 2 (true)
//Javascript
function fib(n){
let [x, y] = [0, 1]
while (n > 0){
[x, y] = [y, x + y]
n -= 1
}
return x
}
Errors | Exceptions |
---|---|
It is not feasible to recover from an error during compilation and execution. | Exceptions can be recovered by utilising a try-catch block or by throw keyword. |
In Java, all errors are of the unchecked type. | There are exceptions for both checked and unchecked types. |
The environment in which the code is running is the most common cause of errors. | Exceptions are generated by the code itself. |
Errors can arise both at compile and run time. Compile Time: eg Syntax Error Run Time: Logical Error. |
All exceptions occur at runtime. |
Errors are defined in the java.lang.Error package. | Exceptions are defined in the java.lang.Exception package |
Examples : java.lang.StackOverflowError, java.lang.OutOfMemoryError | Examples : Checked Exceptions : SQLException, IOException Unchecked Exceptions : ArrayIndexOutOfBoundException, NullPointerException, ArithmeticException. |
Strings | Character Arrays |
---|---|
A string is a sequential collection of characters that are represented as a single data type. | A Character Array is a collection of char data types in sequential order. |
Strings are immutable which means the data or state of a String object can't be modified once it has been created; instead, a new String object is generated. | Character Arrays are mutable which means the contents of a char array can be changed. |
Strings can be used with built-in functions like substring() and charAt(). | In Java, there are no built-in functions for working with Character Arrays. |
The '+' operator can be used to join two strings together to generate a new one. | Appending two Character Arrays with '+' is not possible. |
The charAt() method is used to access characters in a String at a specific index. | [] can be used to access the characters in a Character Array in the same way it can in any other language. |
Strings can be stored in memory in any manner. | Character Array elements are sequentially stored at increasing memory places. |
The String Constant Pool contains all Strings. | The Heap contains all Character Arrays. |
The toCharArray() function of the String class can be used to transform a String into a Character Array. Eg: String s = “GEEKS”; char [] ch = s.toCharArray(); The code above converts a string into a char array. |
A String Constructor can be used to transform a Character Array to a String. Eg: char[] a = {‘G’, ‘E’, ‘E’, ‘K’, ‘S’}; String A = new String(a); The code above converts a char array into a string. |
//C++ program to find the LCM of n elements of an array
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
//the function that finds
//GCD of 'x' and 'y'
int GCD(int x, int y)
{
if (y == 0)
return x;
return GCD(y, x % y);
}
//Driver Code
int main()
{
int a[] = { 11, 7, 3, 9, 4 };
int len = sizeof(a) / sizeof(a[0]);
// Initializing result which will store the lcm
ll res = a[0];
// res contains LCM of a[0], ..a[i]
// after i'th iteration,
for (int i = 1; i < len; i++)
res = (((a[i] * res)) /
(GCD(a[i], res)));
cout<<res<<endl;
return 0;
}
2772
// C++
#include
#include
using namespace std;
class IB
{
public:
IB() {}
IB(const IB &b)
{
cout<<"Copy constructor is called "<<endl;
}
IB& operator = (const IB &b)
{
cout<<"Assignment operator is called "<<endl;
return *this;
}
};
// Driver code
int main()
{
IB b1, b2;
b2 = b1;
IB b3 = b1;
getchar();
return 0;
}
Assignment operator is called
Copy constructor is called
Data abstraction in DBMS is a process of hiding irrelevant details from users. Because database systems are made of complex data structures, so it makes accessible the user interaction with the database.
Following are three levels of data abstraction:
Physical level: It is the lowest level of abstraction. It describes how data are stored.
Logical level: It is the next higher level of abstraction. It describes what data are stored in the database and what the relationship among those data is.
View level: It is the highest level of data abstraction. It describes only part of the entire database.
Yes, it is possible to declare an anonymous class that both implements an interface and extends a class in Java. However, since Java does not support multiple inheritance, the anonymous class can only extend one class and optionally implement one or more interfaces.
Superclass obj = new Superclass() {
@Override
public void methodFromSuperclass() {
System.out.println("Overridden method from superclass");
}
@Override
public void methodFromInterface() {
System.out.println("Implemented method from interface");
}
};
// Parent class
class Parent {
void show() {
System.out.println("Parent class method");
}
}
// Interface
interface MyInterface {
void display();
}
public class Main {
public static void main(String[] args) {
// Anonymous class extending Parent and implementing MyInterface
Parent obj = new Parent() {
@Override
public void show() {
System.out.println("Overridden show() from anonymous class");
}
public void display() {
System.out.println("Implemented display() from anonymous class");
}
};
obj.show(); // Calls overridden method
// To call display(), we need a type cast
if (obj instanceof MyInterface) {
((MyInterface) obj).display();
}
}
}
The anonymous class extends Parent
.
It implements MyInterface
.
Since the reference type is Parent
, we need typecasting to call interface methods.