Skills

  • Fluent in the backend programming language. Preferably in Java and Python.

  • Good knowledge of data structures and algorithms - if methods you write are in traffic request path, you know how to avoid unacceptable time complexity

  • Thorough knowledge of REST Framework like Spring Boot (or Lagom), REST Maturity Levels, good and bad practices of REST

  • Where to use non-REST frameworks like gRPC over Thrift or Protobuf

  • Nuances of TCP, UDP, HTTP, HTTP2, SSL

  • Thorough understanding of designing distributed systems without a single point of failure that self-heal and stay responsive during failures

  • How to stop cascading failures by implementing fallbacks, graceful degradation, back pressure, circuit breaker, request collapsing/caching, adaptive concurrency limits, rate-limitingHystrix, Resilience4J

  • Choosing the right data store for the given requirements – Relational, Graph, Object, Document, Columnar, Key-Value. We use Oracle, MySQL, Mongo, Cassandra

  • Usage of mid-tier caches – define the right keys, how to partition them, setting TTLs. We use Redis, Memcache, EHCache, Hazelcast, Aerospike.

  • Load Balancing and Adaptive Routing across nodes

  • Implementing distributed paradigms like tune-able eventual consistency, CQRS, Event sourcing

  • Understanding the implications of asynchronous communication and non-blocking IO

  • Nuances of using different servers – embedded vs standalone, Tomcat, Undertow, Netty, Jetty

  • Designing systems for achieving low latency, low error rate, and high throughput

  • X, Y, Z cubes of scaling – by cloning, sharding, and breaking into microservices. Applying the right trade-offs using CAP (Consistency, Availability and tolerance to network Partition)

  • Compliance to 12-factor app and a solid understanding of different layers in the services stack – Load Balancer, API Gateway, Service Discovery, Central Config Management, Feature toggle, Aggregator Pattern, etc.

  • Understanding of Data Streaming and Messaging frameworks like Apache Spark, Storm, Flink, Kafka, Apache Active MQ, RabbitMQ, JMS. Google Pub-Sub.

  • Experience with Infrastructure as Code (Terraform, Ansible)

  • Build automation / CICD pipeline integration tools (Jenkins)

  • Authentication and role-based authorization frameworks and standards such as OAuth 2, OIDC ,SAML, Single Sign-On, Mobile Device Management, asymmetric Encryption (JWT / JWS and JWE) etc.

  • Upkeep, setup, and creation of content management systems (CMS)

  • The most commonly used server-side template engines like Jinja2 or Jinja, Mako, etc.

  • Building ETL data pipelines

  • Shell scripting in Linux (preferably BASH)

  • ORM frameworks (e.g. SQL Alchemy)

  • performance tuning

  • key management service like alibabacloud kms, huaweicloud kms.

  • Troubleshooting using monitoring tools such as Prometheus, Grafana, Loki, Splunk, etc in complex cloud-based environments.

  • tracing using pinpoint

  • service discovery

  • encryption

Qualities

  • You are a champion at Code reviews and Unit/Mock/integration Tests
  • You have a strong sense of ownership of what you design and deploy
  • You provide strong technical mentorship to team members
  • You are an excellent team player
  • You continuously learn and improve
  • You are certainly NOT an intellectual jerk

Reference

JAVA Backend Microservices