Questão de Entrevista, o que responder?

13 respostas
PadrE

Eae povo…

Acho que muitos ja passaram por isso e vão passar de novo…

Fiz uma entrevista e fiquei muito chateado com o resultado… e não entendi o que deveria ter dito de diferente para ter me saido melhor… então, queria saber se alguem pode me ajudar a entender para nao cometer o mesmo erro na proxima. E vale de ajuda para o pessoal tb…

Eh o seguinte, fiz toda aquela parte de RH, pergunta de qual animal vc seria ou não, redação e um monte de outras coisas de pscologia…

Depois fui conversar com o coordenador do projeto (eu acho) e no começo estava tudo bem até que ele me perguntou o seguinte:
Imagine que vc tenha uma lista e dois métodos, um para add e outro para remove o item da lista… e vc tem uma série te thread’s manipulando essa lista… o que voçê faria para evitar os problemas de concorrência?

Na hora veio em mente as palavras syncronized, static, wait, join e semaforo…

Então lancei que utilizaria syncronized e alguma lógica para ver se o item ja existe etc… isso nos métodos add e remove !!!

Senti que não era que ele queria ouvir… o que eu disse de errado ??

Vlw ae povo !!

13 Respostas

T

É bem mais simples que isso. Você realmente pode usar o synchronized:

List<Object> lista = new ArrayList<Object>();

adicionar ->
    synchronized (lista) { 
        lista.add (seu objeto); 
    }

remover -> 
    synchronized (lista) { 
        lista.remove (seu objeto); 
    }

Não é preciso usar lógica para ver se já existe, ou outras coisas. Você complicou muito.

Acho que você acabou provando que não sabe mexer com isso na prática, mas tentou enrolar. Dependendo do entrevistador, ele não gosta de ser enrolado.

( Outra forma é encapsular a tal lista com um Collections.synchronizedList(), mas mesmo isso não exclui o uso de "synchronized" às vezes.
Collections.synchronizedList . Isso você não precisaria saber - mesmo seu entrevistador não saberia isso de cor. )

sigma

Estas pegadinhas de entrevista…

Eu acho que você não enrolou apenas não sabia na bucha mas sabia o que procurar, isso e importante saber se virar (não e fazer gambiarra) mas do que ter decorado todo um procedimento para resolver determinado problema.

C

Essa é facil. Basta que sua lista seja imutavel. Assim os metodos add/remove retornam uma nova lista com o objeto inserido (ou removido).

MyList lista = new MyList();
MyList listaMaisObject = lista.add(object);
MyList listaMenosObject = lista.remove(object);

Ate onde sei, semaforos nao evita problemas de concorrencia, apenas movem o problema de lugar.

el_loko

[i]Uma coisa é certa…

Se vc falou a palavra syncronized quer dizer que pelo menos vc sabia por onde começar a resolver o problema que ele te apresentou. Somando isso ao fato de que colocando syncronized no google vc resolveria o problema em 10 minutos, ele deve ter achado que vc sabe oq está falando mas ainda não domina o suficiente para o projeto em que ele quer te alocar…[/i]

fantomas

Vai ver o entrevistador sabe uma gambiarra e pensa que ela é a melhor solução logo achou a sua saida absurda demais rsrsrsrs.

flws

fantomas

Uma vez trabalhei com um COORDENADOR de TI que achava que ao utilizar uma variável auxiliar para várias coisas diferentes éra orientação a objetos.

O que vc acha que ele vai pensar de suas respostas sobre OO?

Se vc provasse que ele estava errado no mínimo ele iria achar que vc era “ENRROLÃO”.

flws

PadrE

Vlw as dicas pessoal…

Enrolar o cara, não tentei mesmo… ao menos não propositalmente… mesmo porque a questão foi verbal e não acho que deveria ter ditado algum código para ele, mas dizer a chave da solução que pelo que vi é o syncronized mesmo… Só que percebi que ele não ficou satisfeito, então falei em aplicar o syncronized nos métodos que adicionam e removem os itens… (pensei em algo parecido com o que thingol citou…

thingol:
É bem mais simples que isso. Você realmente pode usar o synchronized:

List<Object> lista = new ArrayList<Object>();

adicionar ->
    synchronized (lista) { 
        lista.add (seu objeto); 
    }

remover -> 
    synchronized (lista) { 
        lista.remove (seu objeto); 
    }

Tive essa mesma idéia depois… de que ele esta a procura de alguém que saiba digitar o código de “bate-pronto” para as situações que ele tenha no projeto…

Mas se fosse isso, porque não me deu um teste escrito ?? Ia ser muito melhor…

Enfim… vou ter que esperar um retorno vamos ver o que rola… se não rolar, seria legal eles falarem o porque… coisa dificil de acontecer…

Vlw mesmo pessoal, vi que não estou tão mal na teoria e no conhecimento… mas que preciso melhorar na prática…

=]

Marcio_Duran

thingol:
É bem mais simples que isso. Você realmente pode usar o synchronized:

List<Object> lista = new ArrayList<Object>();

adicionar ->
    synchronized (lista) { 
        lista.add (seu objeto); 
    }

remover -> 
    synchronized (lista) { 
        lista.remove (seu objeto); 
    }

Não é preciso usar lógica para ver se já existe, ou outras coisas. Você complicou muito.

Acho que você acabou provando que não sabe mexer com isso na prática, mas tentou enrolar. Dependendo do entrevistador, ele não gosta de ser enrolado.

( Outra forma é encapsular a tal lista com um Collections.synchronizedList(), mas mesmo isso não exclui o uso de “synchronized” às vezes.
Collections.synchronizedList . Isso você não precisaria saber - mesmo seu entrevistador não saberia isso de cor. )


Em uma ocasião foi muito engraçado !!! , fui em uma empresa fazer uma entrevista… leram o meu curriculum é ficaram desconfiado de mim…
Começou a entrevista, e tinha ido muito bem, entrevistador da consultoria + arquiteto do projeto, depois resolveram me aplicar uma prova de 30 paginas !!!, fiquei umas 2 horas fazendo as questões…
3 dias depois me ligaram, e me chamavam para ir ao cliente fazer uma outra entrevista, fui ver do que se tratava o projeto, ao inves de acontecer uma entrevista sobre o que a empresa tratava ou não do projeto, ahahah o entrevistador começou a fazer chamada oral de prova de certificação, eu queria matar o cara achei aquilo um lixo e ainda pensei, “meu que mico estou pagando aqui” , e pior com o cliente do meu lado da consultoria.É claro que você consegue desmembrar um assunto ou outro, mas naquela forma foi esquisito, respondi algumas questões e outras fiquei meio que confuso, pois a indagação foi foda…foda … mesmo…, tem que ficar esperto pra tudo ahahah!!!

B

O java.util.Vector também funciona pra esses casos.

peczenyj

Com certeza, porem imagine que vc tem um List e vc não saber se é ou não um Vector? Este tipo de problema serve pra mostrar todo o dominio sobre concorrencia e coleções, provavelmente englobaria um for each, enfim, de tudo um pouco. Mas mostrar que Vector é sincronizado e ArrayList não ja é alguma coisa.

Y

Amigo, provavelmente nao foi esse o motivo da sua nao contratacao. Uma pergunta só, por mais simples que seja, nao vai decidir sozinha uma contratacao. A nao ser claro que os selecionadores sejam imbecis, mas nesse caso voce saiu ganhando.

Marcio Duran, eu ja abandonei uma entrevista por muito menos. Se os caras sao chatos assim numa entrevista, imagine pra tabalhar com eles.

Acho que o correto é fazer como na empresa em que trabalho, primeiro as entrevistas com os tecnicos, as avaliacoes que tiver que fazer, depois se tiver ido bem passa pro blablabla do RH e dos psicologos.

peerless

se não sabe/quer responder perguntinhas de certificação, ta fazendo o que numa entrevista para XPTO JAVA ?

A observação acima não é para o autor do tópico.

[]s

Y

Porra, em todo topico em que o Marcio Duran posta tem que vir alguem tumultuar???

Isso ja ta ficando chato pra caramba.

Criado 20 de março de 2009
Ultima resposta 21 de mar. de 2009
Respostas 13
Participantes 11