Monday, August 8, 2016

Competencies of Software Architect


Basic Algorithms and Data Structures 


  • Big O notations 
  • Recursion and backtracking 
  • Linear data structures (linked list , dynamic list ,stack , queue , priority queue )
  • Sorting 
  • Searching (linear , binary , interpolation )
  • Hashing (Hash function , collision resolution  - chaining , open addressing , double hashing/universal hashing )
  • String Algorithms (KMP, Rabin Karp  , Boyce Moore)
  • Trees (Binary Tree , Binary Search Tree, Binary Heaps )
  • Tree Balancing algorithms (B-trees , AVL , 2-3 , red-black trees)
  • Graphs (Minimum Spanning Tree , Shortest Paths , Cycle detection , dynamic connectivity )


Advanced Algorithms and Data Structures 
  • Greedy Algorithms 
  • Dynamic Programming 
  • Linear Programming 
  • Probabilistic Data Structures 
  • Complexity classes (P,NP etc .)



Distributed Algorithm Concepts
  • 2 phase commit 
  • Paxos - solving consensus 
  • Leader election 
  • Consistent Hashing /Routing 
  • Synchronous/Asynchronous communication 
  • Fault tolerance
  • Eventual Consistency 
  • Replication 
  • pub-sub using distributed queues
  • Bloom Filters 


Distributed/Cloud Computing technologies 

  • Basics of AWS or OpenStack  or Azure or IBM bluemix 
  • No-SQL 
    • Key value store  - Redis , Memcached
    • Column Family - Cassandra 
    • Document - MongoDB , Elastic Search 
    • Graph Databases - Neo4j 
  • Distributed Queues (SQS , RabbitMQ , Kafka)
  • Distributed Locking /co-ordination  - Apache ZooKeeper 
  • Map-Reduce frameworks 
    • Hadoop eco-systems
    • Apache Spark 
  • REST web services (Jersey , apache CXF , Swagger )


REST/SOAP web services 
  1.  Micro-service architecture 
    • what is micro-service 
    • How to design micro-service which persists data.
  2. SOAP web services in general 
  3. Differences between SOAP and REST , why REST ?
  4.  REST Design principles 
    • Idempotent (GET , HEAD , PUT) , (POST,PATCH)
    • HATEOS  
    • Security  (stateless , Authentication and  Authorization m Security frameworks (OAuth , Basic on    SSL , HTTPS , Digest , error messages  ) )
    • Caching (cache-control , etag , validation , expiration )
    • HTTP headers used for rest (Media-Type , Cache Control , Auth , Accept , Content-Type, If-Non- Match )
    • Commonly used HTTP codes (1XX, 2XX, 3XX, 4XX, 5XX)
    • Searching , sorting , filtering and paging  (Link headers , rel , href , query parameters )
    • Documentation - Swagger 
    • HTTP 1.1 vs HTTP 2.0
    • Handling Asynchronous request (Notification URL , Push /Pull models ) 
    • URL designing conventions 
    • Versioning of APIs
    • Error Messaging (user message , developer message , http error codes 4XX, 5XX) 
    • JSON (snake_case , vs camelCase , DATE format)
  5. REST frameworks - Jersey , Apache CXF , Spring Framework  , Play framework , REST Easy 

Basic References :
http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
RESTful Web Services
http://www.amazon.in/dp/9352130693
http://www.amazon.in/dp/059680168


Search Technologies 
  • Elastic Search 
  • Apache Solr 

Object Oriented Design 

  • Design Patterns (at least design patterns from GOF)
  • SOLID design principles 
  • UML 


Java Technology Stack 

Java Language :
  • Java Language basics (grammar , collections , exception handling )
  • Concurrency 
    •   Java Memory Model 
    •   Pessimistic Concurrency control ( exclusive locks , read/write locks )
    •   Optimistic Concurrency control (CAS based operations )
    •   Java Concurrent Package (Locks , Concurrent collections , Semaphore , Latch , Cyclic Barriers ,  ThreadPools , Executors  etc.)
    • Thread dump analysis 
  • Lambda Expressions 
  • Custom Annotations 
  • Java Serialization Specifications 
  • JVM architecture 
    • Class loaders 
    • Garbage Collection algorithms 
    • Java Security 
  • Regex 



Source Code Management

  •  GIT
  •  PerForce 
  •  SVN 


Testing Frameworks 

  • TDD
    • Junit 
    • TestNG
  • BDD
    • Concumber 

Cryptography 

Cryptographic hash functions