Hien Nguyen

Software developer

Software engineer experienced in back end system, integration , devops, software architectures, optimization, distributed computing, large-scale system, cloud services, data structures and algorithms.

My CV
My Github
My Cover Letter

Salary request: 84,000 e/ year

Back end
  • Large scale system: Multi thread, Concurrency, Reactive streams, Distributed system,
  • Java 8- Java EE (JSP- JSF - CDI - JaxRS - JSON- B,Restful web services - JSON processing services - Servlet) - Application server(Glashfish, Tomcat )
  • Spring frameowork(Spring boot, Data, MVC,Rest/Webflux, Cloud,AOP, Batch,Integration )
  • Node.js
  • Python
  • Caching : Redis, Memcached
  • Build tool : Maven, Gradle
  • Indexing tool : ElasticSearch, Apache Solr
  • ORM : Hibernate, JPA
  • Report and analytics : Jaspersoft
  • Testing : Junit, Mockito, Robot framework ,Selenium, TestNG, DBunit, JMetter, JBehave , Cucumber , BDD, TDD, unit testing , integration test
  • Lambda - Streams - Microservices(Netflix) - CQRS - DDD - Event sourcing - MQTT - STOMP
  • Microservices, OOP,
Clouds
  • AWS - GCP - Azure
  • Cloud native : Pivotal
Database
  • MySQL/MariaDB - PostgreSQL - MS SQL server - MongoDB - Cassandra - Neo4J
  • Migration tool: Flyway, Liquibase
  • AWS : DynamoDB, S3
  • Azure SQL
  • GCP :BigTable
Server - CD/CI - DevOps - Network
  • Nginx
  • Unix, Linux(Ubuntu, Centos7)
  • Version control : Git, Svn
  • Container : Docker, Vagrant
  • Network : TCP/IP - https - TLS - SSL - SSH key (DSA, RSA), Keystore, Telnet, Network proxy, RSocket
DevOps
  • Container, Kubernetes, Ansible, Jenkins, Build/ release pipeline, Code coverage
Software architecture
  • Distributed system
  • Modular system
  • Microservices
Network
  • Protocol : IP/TCP - UDP - OSI - SMTP - SFTP - Real time streaming RTCP - Remove desktop protocol (RDP), MQTT,AMQP
Security
  • SSL TLS Firewall
Algorithms
  • Search, Sort, Divide and conquer, Greedy, DP, DFS, BFS, BS, Hashing algorithms,etc
Design patterns
  • Creational DP : Builder, Prototype,Singleton,Factory
  • Behavior pattern :Chain of responsibility,Command, Iterator, Interpreter, Mediator, State, Template, Observer
  • Structural pattern : Adapter, Decorator, Facade, Proxy, Bridge,Composite
Big data
  • Apache Hadoop, Spark, HBase,HDFS, Apache Kafka
Machine learning | Deep learning
AI
Big data
  • Apache Hadoop, Spark, HBase,HDFS, Apache Kafka
Front end
  • Javascript frameworks - Typescript - Node.js
  • Webpack - bower - gulp - npm
Training certificate
    Cloud
  • Azure fundamentals
  • Architect great solutions in Azure(Microsoft)

My current pursuing education : Master of Computer Science (Harvard)

Course syllabus


Core Courses

AM 205 Advanced Scientific Computing: Numerical Methods
AM 207 Advanced Scientific Computing: Stochastic Methods for Data Analysis, Inference, and Optimization
CS 205 Computing Foundations for Computational Science : is doing
CS 207 Systems Development for Computational Science : DONE
COMPSCI 20 Discrete Mathematics for Computer Science : is doing
COMPSCI 145 Networking at scale : is doing


Research Courses
AC 297r CSE Capstone Research Project Course
AC 299r Independent Study in Applied Computation
Popular Electives
AM 221 Advanced Optimization : is doing
AM 227 Computational Methods in the Physical Sciences
AM 231 Decision Theory : is doing
CS 165 Data Systems : DONE
CS 171 Visualization : is doing
CS 181 Machine Learning
CS 182 Artificial Intelligence : is doing
CS 281 Advanced Machine Learning
CS 282r Topics in Machine Learning


Other advanced course at Bachelor level
CS 224 Advanced algorithms
CS 61 System programming and machine organization
CS 91R Supervised reading and research
CS 109 B Advanced topics in Data Science
CS124 Datastructures and algorithms
CS 127 Cryptography
CS 141 Computing hardware
CS 146 Computer architecture
CS 148 Design of VLSI Circuits and system
CS 153 Compiler
CS 161 OS
CS 165 Data system
CS 175 Computer graphics
CS 189 Autonomous robot system
CS 223 Probabilistic analysis and algorithms
CS 242 Computing at scale
CS 243 Advanced computer networks
CS 246 Advanced computer architecture
CS 247R Advanced topics in computer architecture
CS 249R Special topics in edge computing: Autonomous machines
CS 252R Advanced topics in programming languages
CS 263 System security
CS265 Big data system
CS 280R Curricular design for computer science: computational linguistics and natural language processing
CS 281 Advanced machine learning
CS 282BR Topics in ML : Interpretability and explainability
CS 282R Topics in ML : Batch reinforcement learning
CS 283 Computer Vision
CS 299R Special topics in CS
CS 143 Computer networks
Progress

Doing course assignments, projects and reading research paper


My Blog




Google Kickstart 2020

2020 Google Kickstart Round B

First time join Google Kickstart experience

Google Kickstart is algorithmic challenges developed by Google engineers anually for coders around the world the chance to develop and hone their programming skills through online-hosted competition rounds. The three-hour rounds feature a variety of algorithmic challenges, all developed by Google engineers so that you get a taste of the technical skills needed for a career at Google (the top competitors from our Kick Start rounds may be invited to interview at Google!). Our rounds are held regularly throughout the year at different times so they are easily accessible to coders everywhere. Each Kick Start Round is open to all participants, no pre-qualification needed, so you can try your hand at one or give them all a shot. When each round is open, the three hour countdown begins and you’ll compete on our website solving algorithmic and mathematical problems. Following the round, you can check out your rankings and the round analysis. If you were a top competitor, you may be contacted by Google for a chance to interview. Kickstart 2020 has passed 2 rounds A, B. Round B 2020 just ended several hours ago. This round I think Google engineer focused more on logical solving and analysis rather than so much hard & fancy algorithms. The difficulty level is ranging something in between medium level but of course to get good rank, you have to be fast enough than not just solved it. Started after 10 min the competition started, top 10 rank has already finished 3 problem set, which mean you have to be fast, get a template already there, open necessary tabs and be quick. Now, let's take a closer look on each problem.

1 is Bike Tour (5pts, 7pts).
This is an easy problem. Time complexity is O(N), space complexity is 0(1). You can keep track of 3 pointers for before, after and current position. Solution is good for both small & large test set. Analysis solution is now available. We can see this problem is a mix of the ability to tranverse through the array and ability to know how to keep track of and compare 3 neccessary data to check if it is the peak. We can recall a similar problem "Find a peak element" (https://www.geeksforgeeks.org/find-a-peak-in-a-given-array/) but this Kickstart problem is a little bit easier. Also, Introduction to Algorithms has a dedicated section for Peak Finding for 1D & 2D, and using Divide & Conquer technique. And of course, we can solve Bike Tour problem in O(Logn) using Divide & Conquer technique

PROBLEM 2 is Bus Routes(10pts, 13 pts)
Problem 2 is not hard to see the logical patterns. On Analysis solution for this solution online, there are brute force and optimized solution. At the first dry run on all sample test case, we can see the logical patterns. Of course you should try edge case as well. Brute force has time complexity O(DN) and passed for small dataset but time out for large test case. More optimized for naive solution is Binary search on the range from 1 - D to find the largest good starting day P. Time complexity now reduce to O(N log(D/X1)) which restrict the search to 1X, 2X, 3X, etc. Space complexity is the same. The more optimized solution is O(n) by working on the problem backwards. Intuition is since we want to find the latest day we can think of taking last bus at the day closest to the last day. Limit is D. So it is the largest multiple of Xi that before D. This problem is combination of the ability to think of problem from multiple perspective, forward, backwards, middle, up to one point, etc. Also taking into account of one intuition of reduce the time complexity from O(DN) to O(N log D) and to O(N) Lastly, the problem test the ability to think the similar patterns which is rather than give you this is the modulo, we will hide the modulo, by give you 1X, 2X, 3X.

PROBLEM 3 Robot Path Decoding (11pts, 16 pts).
I think this is a very good problem that is the combination between many techniques and test a lot of aspect in logical thinking. Not so hard to understand at the first read. The brute force solution(small test set) is to compute the whole direction string and calculate the position by taking one step at a time. The optimized solution is linear time complexity. For test set with number of moves is exponential. There is no huge thinking to move from small test case to big test case solution since there is only one state of the problem which has so-called "bottle-neck". We can not execute the moves one by one. So, expand the whole direction string seems to be the "bottle-neck". Let's now consider back this attributes from solution 2(E), observation is that E is repeated 2 times. So rather than, move one by one, we can just find the position after sub move 2E, Now how to computer the whole instruction string, we can use recursion to change the robot position after each sub instructions. "Since the planet is a torus, the first and last columns are adjacent, so moving east from column 109 will move the rover to column 1 and moving south from row 109 will move the rover to row 1. Similarly, moving west from column 1 will move the rover to column 109 and moving north from row 1 will move the rover to row 109" We will convert to logical algorithms with mod 10(9). To come up to optimized solution in the problem is not hard, since you just need to solve the "bottle-neck" by optimize the operations. To solve this problem, you need to get familiar with similar problem is Check for balanced parentheses in an expression (https://www.geeksforgeeks.org/check-for-balanced-parentheses-in-an-expression/). Of course, they also give the link to this, which mean a lot of problems has been modified from GeekForGeek,the ability to make use to data structures like Stack, String, 2D array. Recursion, String processing. Recursion has been tested in the solution mostly.

PROBLEM 4 Wandering Robot (14pts, 24pts)
I think this round is designed by a Google engineer who works in IoT/ Embedded/ Robotics since there are almost 2 questions related to Robot(JFF). This is a hard question for large test case. For small test case, this problem is something inbetween medium level. The problem is typical Dynamic Programming, which should be considered at the last round. Time complexity is O(W × H) but for the large test case, it will fail. My solution is quite similar to Google solution which has the same time complexity. We can use DP to compute all the possible paths from top left to bottom right of the matrix, and keep track of the path that not include to the area of rectangular subgrid of squares has been cut out from the grid since "The robot will randomly choose to either move to the square directly to the right, or to the square directly below it with equal probability." The last problem tested your skill in Dynamic Programming & Probability. I have not been able to come up with the most optimized solution for the large test case although get intuition that this will be a math solution for the most optimized solution for this problem, but using single binomial coefficient (https://www.geeksforgeeks.org/maths-behind-number-of-paths-in-matrix-problem/). Also we have to handle floating point issue to store every huge number in their log representation which again, test your knowledge of not only data structures & algorithms, but also knowledge of computer architecture The bottleneck of this problem is that you should focus on the fact of moving down and moving right share the same possibility 0.5, at least I have taken into account this attribute fact, but coming up to Binomial coefficient problem has neven been practiced by me, which need to practice in the next round of Kickstart contest. Solving 3.5/4 get rank after 136, which is good enough to get a call from Google. At least, I need to aim at solving all 4/4 which no time constraint, will for sure enough to pass on site Google interview.





Google Summer of Code 2020

Proposal that get selected to Google Summer of Code 2020

Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open source organization on a 3 month programming project during their break from school.


Cool things about Google Summer of Code is that you will get kind of salary ranging from 3000 - 6000 $ paid to seletected students who successfully finish the project(https://developers.google.com/open-source/gsoc/help/student-stipends). And you can get the chance to get seletected for full time role Google interview (https://developers.google.com/open-source/gsoc/help/post-todo)


Here is my proposal for Apache organisation

Apache RocketMQ Scaler for KEDA

Apache RocketMQ Scaler for KEDA project

Context KEDA allows for fine-grained autoscaling (including to/from zero) for event-driven Kubernetes workloads. KEDA serves as a Kubernetes Metrics Server and allows users to define autoscaling rules using a dedicated Kubernetes custom resource definition. KEDA has a number of “scalers” that can both detect if a deployment should be activated or deactivated, and feed custom metrics for a specific event source. In this topic, you need to implement the RocketMQ scalers. You should learn before applying for this topic Helm/Apache RocketMQ Operator/Apache RocketMQ Docker Image Apache RocketMQ multi-replica mechanism(based on DLedger) How KEDA works Mentor wlliqipeng@apache.org, vongosling@apache.org Difficulty: Major Potential mentors: duheng, mail: duheng (at) apache.org Project Devs, mail: dev (at) rocketmq.apache.org

My proposal
My CV