Post para mapear os principais testes de código.
Coding Interview
Uber S1 |
Solution
Educative S1 S2 S3 |
Este post demonstra a instalação do NetBeans no Ubuntu.
OBS: Tive problemas com o OpenJDK Headless, então sugiro que utilize a instalação normal.
Caso o JDK não esteja instalado
$ sudo apt install openjdk-11-jdk
Baixar ou instalar o NetBeans. Neste exemplo, baixei e descompactei no diretório,
/opt/netbeans-12.3/
Para executar, digite o comando,
$ /hd1/opt/netbeans-12.3/netbeans/bin/netbeans
Este artigo demonstra a integração do MongoDB com CRUD em Java.
Instalação do MongoDB – Veja artigo Instalando MongoDB
Você pode baixar o projeto whs-test
Trata-se de um Projeto Maven com dependência com o mongo-java-driver e gson.
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase db = mongoClient.getDatabase("test");
Através desse acesso é possível efetuar as operações no Banco de Dados como consulta, inclusão, alteração e exclusão.
MongoCollection<Document> collection = database.getCollection("test");
Map<String, Object> map = g.fromJson(jsonContent, new TypeToken<Map<String, Object>>() {}.getType());
Document doc = new Document(map);
collection.insertOne(doc);
Para este exemplo, buscamos todos os registros e atualizamos o campo “updated”. Pode-se utilizar uma buscas específica de um determinado registo.
MongoCursor<Document> cursor = collection.find().iterator();
while (cursor.hasNext()) {
Document doc = cursor.next();
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
Map<String,Object> mapDoc = (Map)gson.fromJson(doc.toJson(), Map.class);
mapDoc.put("updated", new Date().toString());
Document docUp = new Document(mapDoc);
}
No bloco while, invocamos o método updateOne (atualiza o primeiro registro a encontrar o critério).
collection.updateOne(doc, new Document("$set", new Document("updated", new Date())));
Para o exemplo abaixo, buscamos o registro a ser excluído através de uma busca pelo campo “tableName” igual a “Customer”.
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("test");
collection.deleteOne(Filters.eq("tableName","Customer"));
No método list, buscamos todos os registros do banco “test” e escrevemos no console o respectivo JSON.
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("test");
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
A idéia é armazenar os eventos gerados pelo domínio e que, mais tarde, será reconstruído o estado atual do objeto em questão.
@Configuration
É uma annotation que indica que determinada classe possui métodos que expõe beans.
@Controller
Identifica classes que possuem métodos que processam requests numa aplicação web.
@Repository
Identifica classes que isolam o acesso aos dados da sua aplicação. Comumente associada a DAO’s.
@Service
Identifica classes que representam a ideia do Service do Domain Driven Design. Para ficar menos teórico pense em classes que representam algum fluxo de negócio da sua aplicação. Por exemplo, um fluxo de finalização de compra envolve atualizar manipular o carrinho, enviar email, processar pagamento etc. Este é o típico código que temos dificuldade de saber onde vamos colocar, em geral ele pode ficar num Service.
@Component
A annotation básica que indica que uma classe vai ser gerenciada pelo container do Spring. Todas as annotations descritas acima são, na verdade, derivadas de @Component. A ideia é justamente passar mais semântica.
@ComponentScan
Em geral você a usa em classes de configuração(@Configuration) indicando quais pacotes ou classes devem ser scaneadas pelo Spring para que essa configuração funcione.
@Bean
Anotação utilizada em cima dos métodos de uma classe, geralmente marcada com @Configuration, indicando que o Spring deve invocar aquele método e gerenciar o objeto retornado por ele. Quando digo gerenciar é que agora este objeto pode ser injetado em qualquer ponto da sua aplicação.
@Autowired
Anotação utilizada para marcar o ponto de injeção na sua classe. Você pode colocar ela sobre atributos ou sobre o seu construtor com argumentos.
@Scope
Annotation utilizada para marcar o tempo de vida de um objeto gerenciado pelo container. Pode ser utilizada em classes anotadas com @Component, ou alguma de suas derivações. Além disso também pode usada em métodos anotados com @Bean. Quando você não utiliza nenhuma, o escopo default do objeto é o de aplicação, o que significa que vai existir apenas uma instância dele durante a execução do programa. Você alterar isso, anotando o local e usando alguma das constantes que existem na classe ConfigurableBeanFactory ou WebApplicationContext.
@RequestMapping
Geralmente utilizada em cima dos métodos de uma classe anotada com @Controller. Serve para você colocar os endereços da sua aplicação que, quando acessados por algum cliente, deverão ser direcionados para o determinado método.
@ResponseBody
Utilizada em métodos anotados com @RequestMapping para indicar que o retorno do método deve ser automaticamente escrito na resposta para o cliente. Muito comum quando queremos retornar JSON ou XML em função de algum objeto da aplicação.
@Primary
Caso você tenha dois métodos anotados com @Bean e com ambos retornando o mesmo tipo de objeto, como o Spring vai saber qual dos dois injetar por default em algum ponto da sua aplicação? É para isso que serve a annotation @Primary. Indica qual é a opção padrão de injeção. Caso você não queira usar a padrão, pode recorrer a annotation @Qualifier.
@Profile
Indica em qual profile tal bean deve ser carregado. Muito comum quando você tem classes que só devem ser carregadas em ambiente de dev ou de produção. Essa eu utilizo bastante e acho uma ideia simples, mas super relevante dentro do Spring.
@SpringBootApplication
Para quem usa Spring Boot, essa é uma das primeiras que você. Ela engloba a @Component, @ComponentScan e mais uma chamada @EnableAutoConfiguration, que é utilizada pelo Spring Boot para tentar advinhar as configurações necessárias para rodar o seu projeto.
Bom, acho que é isso aí. Adoro escrever posts que foram solicitados diretamente pela galera que acompanha o meu trabalho, é uma motivação bem grande.
@EnableAsync
Essa aqui não é tão comum, mas muitas vezes você precisa ações no sistema em background(outra thread). Essa annotation deve ser colocada em alguma classe marcada com @Configuration, para que o Spring habilite o suporte a execução assíncrona.
@Async
Uma vez que seu projeto habilitou o uso de execução de métodos assíncronos com a @EnableAsync, você pode marcar qualquer método de um bean gerenciado do projeto com essa annotation. Quando tal método for invocado, o Spring vai garantir que a execução dele será em outra thread.
Domain Driven Design, ou seja, Desenvolvimento Orientado a Domínio.
O objetivo é focar no domínio da solução, através de um contexto apresentado, determinar a solução de maneira que atenda:
O modelo de software típico de DDD consiste:
Exemplos:
https://github.com/paoesco/cargotracker-ddd
https://github.com/citerus/dddsample-core
https://github.com/olivergierke/spring-restbucks
http://www.the-coder-life.com/2016/02/domain-driven-design-hands-on-example.html
https://github.com/simbo1905/root-objects
Links:
http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/
Em minhas buscas pelo conhecimento de JPA e CDI, encontrei uma solução interessante para modelar classes JPA, o JPA Modeler.
Site:
http://jpamodeler.github.io/
Vídeo demonstrativo:
A utilização da arquitetura de microserviços vem se tornando padrão entre as empresas.
Com a busca de informações dessa nova forma de desenvolver os aplicativos, encontrei uma solução de framework para utilização de microserviços, o KumuluzEE.
Por ser uma solução compatível com JEE, torna-se uma grande opção, tanto para novos projetos quanto para aplicações existentes e que deseja-se transformá-las em microserviços.
Fonte:
https://ee.kumuluz.com/
O Maven é uma excelente ferramenta para gerenciar e implantar projetos Java. O objetivo desse post é apresentar de forma clara e fácil como utilizar o Maven.
Através do Prompt de Comando, vá no diretório onde deseja criar o projeto e digite
mvn archetype:generate -DgroupId=br.com.emp -DartifactId=WebAppDemo -DarchetypeArtifactId=maven-archetype-webapp
Introdução
Arquitetura de microservices consiste em dividir a aplicação em conjunto de serviços. É recomendável utilizar em aplicações robustas e/ou que necessitam evoluir rapidamente.
Links:
https://www.infoq.com/br/articles/microservices-intro
https://dzone.com/articles/building-microservices-with-java