Google Interview Question for Software Engineers


Country: United States




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

var clone = function(object){
	var newObject = {};
	for(var key in object){
		newObject[key] = object[key];
	}
	return newObject;
}

var deepClone = function(object){
	var newObject = {};
	for(var key in object){
		if(typeof object[key] === 'object'){
			newObject[key] = deepClone(object[key]);
		}else{
			newObject[key] = object[key];
		}
	}
	return newObject;
}

- coolguy August 16, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
2
of 2 votes

You need to check for loops, basically you should do a DFS.

var a = {x:'y'};
var b = a;
b.c = a;

- shabgard August 18, 2015 | Flag
Comment hidden because of low score. Click to expand.
1
of 1 vote

Is this doable in Java?

- George August 17, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

Via reflection.

- JonathanBarOr November 04, 2015 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

Why not use a self-referential function ?

function deepCopy (obj) {
    var copy = {},
        properties = Object.getOwnPropertyNames(obj);
    for (var i = 0; i < properties.length; i++) {
      copy[properties[i]] = typeof properties[i] === "object" ? deepCopy(obj[properties[i]]) : obj[properties[i]];
    }
    return copy;
}

- Charbz August 21, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

Why not use a self-referential function ?

function deepCopy (obj) {
    var copy = {},
        properties = Object.getOwnPropertyNames(obj);
    for (var i = 0; i < properties.length; i++) {
      copy[properties[i]] = typeof properties[i] === "object" ? deepCopy(obj[properties[i]]) : obj[properties[i]];
    }
    return copy;
}

- charbz August 21, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

struct DPNode
{
	int val;
	vector<DPNode*> cons;
};

DPNode* Copy(DPNode* node) {
	DPNode* cNode = new DPNode{ node->val, {} };
	return cNode;
}

DPNode* DeepTreeCopy(DPNode* node)
{
	auto cNode = Copy(node);

	for (DPNode* child : node->cons) {
		auto cChild = DeepTreeCopy(child);
		cNode->cons.push_back(cChild);
	}

	return cNode;
}
void DPCopyTest()
{
	DPNode aa{ 4, {} };
	DPNode ab{ 5, {} };
	DPNode ba{ 6, {} };
	DPNode bb{ 7, {} };


	DPNode a{ 2, {&aa, &ab} };
	DPNode b{ 3, {&ba, &bb} };

	DPNode root{ 1, { &a, &b } };

	auto cRoot = DeepTreeCopy(&root);
}

- Anonymous October 24, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

var clone = function(obj){
	var ret = {};

	for(var prop : obj){
		ret[prop] = obj[prop];
	}	

	return ret;
};

var deepCopy = function(obj){
	var ret = { read: true };

	for(var prop : obj){
		if(typeof prop === 'object' && !prop.read){
			ret[prop] = deepCopy(prop);
		}
		else{
			ret[prop] = obj[prop];
		}
	}
};

- Andrew D May 27, 2016 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

function DeepCopy(oOldObject)
{
  var oNewObject = {};
		
  for(var sMember in oOldObject)
  {
    if(typeof(oOldObject[sMember]) != "object")
      oNewObject[sMember] = oOldObject[sMember];
    else if(Array.isArray(oOldObject[sMember])) // Array
    {
      oNewObject[sMember] = new Array();
      for(var i=0; i<oOldObject[sMember].length; i++)
        oNewObject[sMember][i] = typeof(oOldObject[sMember][i]) != "object" ?      
							oOldObject[sMember][i] :  																																			
							DeepCopy(oOldObject[sMember][i]);
    }	
    else
      oNewObject[sMember] = DeepCopy(oOldObject[sMember])
  }
  return oNewObject;
}

- Harel Gruia July 24, 2016 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

function DeepCopy(oOldObject)
{
  var oNewObject = {};
		
  for(var sMember in oOldObject)
  {
    if(typeof(oOldObject[sMember]) != "object")
      oNewObject[sMember] = oOldObject[sMember];
    else if(Array.isArray(oOldObject[sMember])) // Array
    {
      oNewObject[sMember] = new Array();
      for(var i=0; i<oOldObject[sMember].length; i++)
        oNewObject[sMember][i] = typeof(oOldObject[sMember][i]) != "object" ? 
          oOldObject[sMember][i] :  									  
          DeepCopy(oOldObject[sMember][i]);
    }	
    else
      oNewObject[sMember] = DeepCopy(oOldObject[sMember])
  } // for
  return oNewObject;
}

- Harel Gruia July 24, 2016 | Flag Reply
Comment hidden because of low score. Click to expand.
-2
of 2 vote

function deepCopy(obj) {
    var copy = {};
    for (var attrname in obj) {
        copy[attrname] = metadata[attrname]; 
    }
    return copy;
}

- Saad El August 15, 2015 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

This won't do deep copy.

- coolguy August 16, 2015 | Flag


Add a Comment
Name:

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

Books

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

Videos

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