Ebay Interview Question for Front-end Software Engineers

Comment hidden because of low score. Click to expand.
of 1 vote

Flyweight is a software design pattern. A flyweight is an object that minimizes memory use by sharing as much data as possible with other similar objects; it is a way to use objects in large numbers when a simple repeated representation would use an unacceptable amount of memory. The term is named after the boxing weight class[citation needed]. Often some parts of the object state can be shared and it's common to put them in external data structures and pass them to the flyweight objects temporarily when they are used.
A classic example usage of the flyweight pattern is the data structures for graphical representation of characters in a word processor. It might be desirable to have, for each character in a document, a glyph object containing its font outline, font metrics, and other formatting data, but this would amount to hundreds or thousands of bytes for each character. Instead, for every character there might be a reference to a flyweight glyph object shared by every instance of the same character in the document; only the position of each character (in the document and/or the page) would need to be stored internally.
In other contexts the idea of sharing identical data structures is called hash consing.

// Flyweight object
public interface CoffeeOrder {
public void serveCoffee(CoffeeOrderContext context);

// ConcreteFlyweight object that creates ConcreteFlyweight
public class CoffeeFlavor implements CoffeeOrder {
String flavor;

CoffeeFlavor(String newFlavor) {
flavor = newFlavor;

public String getFlavor() {
return this.flavor;

public void serveCoffee(CoffeeOrderContext context) {
System.out.println("Serving Coffee flavor " + flavor + " to table number " + context.getTable());

public class CoffeeOrderContext {
int tableNumber;

CoffeeOrderContext(int tableNumber) {
this.tableNumber = tableNumber;

public int getTable() {
return this.tableNumber;

import java.util.HashMap;
import java.util.Map;

//FlyweightFactory object
public class CoffeeFlavorFactory {
Map<String, CoffeeFlavor> flavors = new HashMap<String, CoffeeFlavor>();

public CoffeeFlavor getCoffeeFlavor(String flavorName) {
CoffeeFlavor flavor = flavors.get(flavorName);
if (flavor == null) {
flavor = new CoffeeFlavor(flavorName);
flavors.put(flavorName, flavor);
return flavor;

public int getTotalCoffeeFlavorsMade() {
return flavors.size();

class TestFlyweight {
static CoffeeFlavor[] flavors = new CoffeeFlavor[100]; // the flavors ordered
static CoffeeOrderContext[] tables = new CoffeeOrderContext[100]; // the tables for the orders
static int ordersMade = 0;
static CoffeeFlavorFactory flavorFactory;

static void takeOrders(String flavorIn, int table) {
flavors[ordersMade] = flavorFactory.getCoffeeFlavor(flavorIn);
tables[ordersMade++] = new CoffeeOrderContext(table);

public static void main(String[] args) {
flavorFactory = new CoffeeFlavorFactory();

takeOrders("Cappuccino", 2);
takeOrders("Cappuccino", 2);
takeOrders("Frappe", 1);
takeOrders("Frappe", 1);
takeOrders("Xpresso", 1);
takeOrders("Frappe", 897);
takeOrders("Cappuccino", 97);
takeOrders("Cappuccino", 97);
takeOrders("Frappe", 3);
takeOrders("Xpresso", 3);
takeOrders("Cappuccino", 3);
takeOrders("Xpresso", 96);
takeOrders("Frappe", 552);
takeOrders("Cappuccino", 121);
takeOrders("Xpresso", 121);

for (int i = 0; i < ordersMade; ++i) {
System.out.println(" ");
System.out.println("total CoffeeFlavor objects made: " + flavorFactory.getTotalCoffeeFlavorsMade());

- prvn August 31, 2011 | Flag Reply
Comment hidden because of low score. Click to expand.
of 0 votes

You could have just posted the link to Wikipedia.

- Wolverine September 18, 2011 | Flag
Comment hidden because of low score. Click to expand.
of 0 votes


- loveCoding July 13, 2012 | Flag

Add a Comment

Writing Code? Surround your code with {{{ and }}} to preserve whitespace.


is a comprehensive book on getting a job at a top tech company, while focuses on dev interviews and does this for PMs.

Learn More


CareerCup's interview videos give you a real-life look at technical interviews. In these unscripted videos, watch how other candidates handle tough questions and how the interviewer thinks about their performance.

Learn More

Resume Review

Most engineers make critical mistakes on their resumes -- we can fix your resume with our custom resume review service. And, we use fellow engineers as our resume reviewers, so you can be sure that we "get" what you're saying.

Learn More

Mock Interviews

Our Mock Interviews will be conducted "in character" just like a real interview, and can focus on whatever topics you want. All our interviewers have worked for Microsoft, Google or Amazon, you know you'll get a true-to-life experience.

Learn More