My Notes some of this and some of that


Problem statement: Given 2 strings, find if they are anagram of each other. An anagram of a string is another string that contains the same characters, only the order of characters can be different. Example: abc and bac are an anagram of each other. abb and baa are not anagrams of each other.

Azure Solutions Architect Expert Certification Guide

I cleared AZ-900 Microsoft Azure Fundamental around a year back, and since then had the goal of clearing Azure Solutions Architect Expert Certification on my agenda. I attended one 30 hours instructor led training by Microsoft certified trainer on AZ-303 and then took a de-tour for couple of months to clear CKAD (Certified Kubernetes Application Developer) first, as Kubernetes knowledge was even more desirable from my own project’s point of view. I cleared CKAD around 6 months back, and since then was preparing for this certification.

The curriculum for this certification is colossal, and it took many months of preparation. I have cleared both AZ-303 and AZ-304 with 900+ score, and wanted to share my experience with anyone aspiring for this certification.

Who should aim for this certification?

According to official site: Candidates for the Azure Solutions Architect Expert certification should have subject matter expertise in designing and implementing solutions that run on Microsoft Azure, including aspects like compute, network, storage, and security. Candidates should have intermediate-level skills for administering Azure. Candidates should understand Azure development and DevOps processes. Responsibilities for this role include advising stakeholders and translating business requirements into secure, scalable, and reliable cloud solutions. An Azure Solution Architect partners with cloud administrators, cloud DBAs, and clients to implement solutions.

Main certification page

How to get Azure Solutions Architect Expert Certification?

One is required to clear 2 exams in order to get Azure Solutions Architect Expert Certified.

  • AZ-303: Microsoft Azure Architect Technologies
  • AZ-304: Microsoft Azure Architect Design

AZ-303 is more focussed on implementation whereas AZ-304 is more focussed on design. These can be given in any sequence but I would suggest to go for AZ-303 first and then AZ-304.

Let’s talk about each of these exams now.

AZ-303: Microsoft Azure Architect Technologies

Exam pattern

  • 55-65 questions which could also include case studies and hands-on labs
  • 130 minutes
  • 700 score for passing

Preparation material

I did most of my preparations from Alan’s course but on occasions I have also looked into similar courses from Scott Duffy and Skylines to get better understanding of the topics.

How to prepare: The estimated time to complete this learning material is 80 hours, but in reality it will take a lot more. It is much preferable to have real project experience to get more familiarity and clarity on the concepts. The project generally use handful of Azure services, but the knowledge required to clear this certification is far more. Everyone has their own style of learning, I will share what worked for me. Feel free to try this, or improvise to what suits you best. I devoted lot of time to each topic. First step is to get clarity on concepts by going through course material, second is to do hands on the portal. It is very important to do hands-on as the certification comprises of hands-on labs. And you understand a lot more and gain lot of confidence. Third step is while practising questions. You will some across some questions which were not really covered by the course material, so you need to look into more documentation on Azure to get even more clarity and understanding on the subject.

I also attended 2 different trainings from Microsoft certified trainer. Each training was for around 30 hours. It provided a good overview of the whole curriculum, but you need to self study and take deeper dive into each topics to get better understanding and clarity. And there can be no better alternative than self hands-on.

Last step is to go through the learning material again as needed.

Practice Material

In practice test, learn from your mistakes, read about questions answered incorrectly and make sure to not repeat same mistakes again. Good way to do that is to read more related documents if needed or really try out the question in portal so it’s engraved in your memory.

Exam experience

I opted for online exam from home though Person Vue. I started 30 minutes before exam time to check-in well in time. During check-in you need provide photo of yourself, your identification (passport) and your surroundings (4 walls of your room). The desk needs to be clean. Proctor will ask you to show your desk from Webcam and would even check all corners and area under your desk.

You always need to be in front of your web cam. Dont even look away into the distance which we tend to do while thinking. I was warned just for doing that. There can be multiple sections in the exam. One section is multiple choice question, one is for case studies and there can be one for labs. I did not got any hands-on labs when I appeared for these exams, but they can come randomly. You cannot return to a section once you click on finish, so make sure to proceed only if you are sure and done reviewing all the questions

There is ample amount of time. 130 minutes were given for around 62 questions, I was able to complete easily with 40 minuts still left. There wasn’t a single question related to powershell or azure cli commands, whereas some practice tests have lot of them.

AZ-304: Microsoft Azure Architect Design

Exam pattern

  • 55-65 questions which could also include case studies and hands-on labs
  • 130 minutes
  • 700 score for passing

Preparation material

Preparation for AZ-303 will cover 70% of the things needed for AZ-304. Even learning path is similar to AZ-303. But some topics like Data Factory and API Management is more relevant for AZ-304.

Practice Material

Exam experience

Most of the things I shared for AZ-303 are relevant here as well. There is ample amount of time. 130 minutes were given for around 58 questions, I was able to complete easily with 50 minutes still left. Data factory and API Management is more important for this exam.

Important tips relevant for both exams

  • There are many ways to monitor in Azure. This is best link to understand how Azure monitoring is structured.
  • You need to well aware of the features provided by various app service plans
  • Hybrid identity is an important topic, so you need to know which strategy would be appropriate for which scenario
  • Azure storage and key vault are the most important topics, not just from exam perspective but also from real project usage perspective. There is a very good probability that you will use either or both of these for any application deployed on Azure.

Wish you all the best!

CKAD Exam Guide

I cleared CKAD recently (Nov 2020) on my first attempt. It was the most challenging certification till date for me but an equally gratifying one. I read lot of blogs on how to prepare for CKAD and really grateful for the ones who shared their wisdom and experience, so now it’s time to do the same.

What is CKAD?

CKAD is a comprehensive exam that could help software engineers strengthen their Kubernetes knowledge in practical way. It’s a complete hands on certification, so it not only needs your concepts to be clear but also be quick with configurations and commands.

According to official site: The Certified Kubernetes Application Developer (CKAD) program has been developed by the Cloud Native Computing Foundation (CNCF), in collaboration with The Linux Foundation, to help expand the Kubernetes ecosystem through standardized training and certification. As one of the highest velocity projects in the history of open source, Kubernetes use is exploding.”

CKAD certification detail links:

How to get CKAD certified?

  • Create a CNCF account
  • Register for CKAD for $300
  • Schedule exam as per your convenience
  • Take the exam online

Exam pattern

  • 19 questions of different weightage
  • 2 hours
  • 66% passing
  • Complete hands-on
  • Open book (you are allowed to refer Kubernetes documentation)
  • Proctored (Someone would keep a watch on you remotely via webcam)

Preparation material


Practice Material

You need build your concepts first and then do lot of practice in order to complete all questions in time.

Exam experience

I was ready 30 minutes before exam, and noticed that exam button gets enabled 15 minutes before the exam start time. Proctor also joined right on time, and straight away started the chat to proceed with identification. He verified my Id through Webcam (I showed my passport). Then he proceeded to check if there are not any additional processes or applications running on my system apart from Chrome. Then he checked the whole room from where I appeared for the exam. All the walls must be clear. He also verified the desk, it should be clean and should not have any extra objects apart from your laptop.

This was over in 10 minutes, with 5 minutes left for the exam to start. Proctor also asked me at randomly to raise my hands, and will keep communicating about the left over time.

The exam panel has 2 sections. Questions are displayed on left hand panel, and terminal on right hand panel. Toolbar at the top has link to notepad and submit/end your exam. You can skip questions and also flag the questions you want to return to. There is chat box at the bottom which can be used to communicate with proctor.

I attempted the questions based on their weightage and difficulty. I attempted the questions in my strong area and the ones which involved less steps, or could be done easily with imperative commands. I was able to attempt 13 questions in the first hour, with only 6 left to be done within next 1 hour. This helped to calm my nerves. Then I proceeded with all left over questions and was able to attempt all those with 15 minutes still left. So I started validating all questions one by one. I wasn’t able to validate all questions but still happy that at least got some time to validate. I was happy that I found one mistake where I created my resources in wrong namespace, and was able to fix it quickly.

Auto complete didn’t work for me, which created a minor hassle for me, and still I don’t know the reason why. The timer bar is displayed, but it doesn’t shows the actual time remaining which is not very ideal.

It’s an intense situation because you have to remain very focussed for 2 hours. But thankfully everything went smoothly.

Important tips

  • Before even registering for the exam, it’s very important to do a compatibility check on your system.

  • Bookmarks are a big help. Import the bookmarks and use it for your practice so that you get the familiarity and can navigate quickly.

  • Imperative commands are the biggest differentiator in this exam. I can’t stress this enough, you should be very thorough with all imperative commands.

  • Create alias for kubectl commands, a second saved here, a second saved there adds up to few minutes! I created these 3 aliases and these were enough for me. Feel free to create more if needed.

alias k=‘kubectl’
alias kdo=‘kubectl --dry-run=client -o yaml'
alias kns=‘kubectl config set-context --current --namespace'
  • Enable autocomplete using below command. This also helps to save lot of time. More details here
complete -F __start_kubectl k
  • Be aware of short aliases for Kubernetes resources, it help to save some time. You can always check with “kubectl api-resources”. Here are some:
po for PODs
rs for ReplicaSets
deploy for Deployments
svc for Services
ns for Namespaces
netpol for Network policies
pv for Persistent Volumes
pvc for PersistentVolumeClaims 
sa for service accounts
  • For the exam, try to create separate yaml for each question (1.yaml, 2.yaml). This will help you to remember and make changes if needed.

  • Exam has questions of different weightages and difficulties. Attempt high weightage questions first, or the ones which seems simpler to you or could be done easily with imperative commands.

  • Practice is the name of the game for this certification. It’s an open book for a reason! Clear your concepts first and then practice a lot to get lot of familiarity with the configurations and imperative commands.

  • Be cautious of namespace, node and context. Each question in the exam would mention the command to change context if needed. Make sure to switch to right context before attempting the question.

  • Some questions might require you to recreate object. Take care to export existing object to yaml before changing. You don’t want to end up in a situation where you have deleted the resource and unable to recreate one.

  • You need to be well versed with Vim/Nano editor. Choose the one you like or are most comfortable with. After imperative commands, this is the second most important factor which would save you time. Make sure you know how to navigate, copy/paste and modify the file quickly. This link would help: Essential Vim For CKAD Or CKA Exam

  • You should also be aware of Vim settings. This would make sure that you have the right indentations, and copy/paste does not insert tabs, which could be time consuming to troubleshoot and fix. Here are the Vim settings which worked for me.

vi ~/.vimrc
Add below lines
set nu
set et
set sw=2 ts=2 sts=2
  • There is a good chance you might get a question related to fluentd. You need not be aware of fluentd, and it’s configurations would be given but be aware of how to provide multi line configurations in the yaml file if needed. Here is an example


Here are the bookmarks for all the tasks and configurations for quick navigation. Use this for your practice to get better familiarity.

This is an extensive guide with my experience and has links to some very good blogs and practice questions. I hope this will help you in clearing your certification. All the best!

Dynamic checklist - Github action

Checkout this action on Github marketplace

Tests are nice, but they are not written for everything, especially when few things seems obvious or like a best practice.

For example, it’s a best practice to close resources in finally block but this is not usually tested through a test case. Experienced developer usually finds this during review, but even they can miss sometimes.

Or may be you are creating index, which is ok if it’s a small table, but it should be created concurrently for big tables so that rows are not locked for long time in production.

This action provides that safety net, or an extra set of eyes.

It will analyze the code for given keywords, given by you and will create a point in the checklist if that keyword is found in the code.

You can have multiple keywords map to same comment.

And that’s the only input for this action. A mapping file which contains mapping of keywords to comments. You can keep this mapping.json at the root of your repo and even name it the way you want. Just ensure to refer it correctly in workflow file.

Example mapping.json

  "mappings": [
      "keywords": ["create index", "createIndex"],
      "comment": "Indexes have been created concurrently in big tables"
      "keywords": ["connection", "session", "CloseableHttpClient", "HttpClient"],
      "comment": "Resources have been closed in finally block or using try-with-resources"
      "keywords": ["RequestMapping", "GetMapping", "PostMapping", "PutMapping"],
      "comment": "Endpoint URLs exposed by application use only small case"
      "keywords": ["keyword1", "keyword2"],
      "comment": "Expert comment"

The output of this action is a formatted checklist in md format, like this:


  • Indexes have been created concurrently in big tables
  • Resources have been closed in finally block or using try-with-resources
  • Endpoint URLs exposed by application use only small case
  • Expert comment

This action will analyze the diff of the pull request, and based on the diff and mapping file given by you, will comment on the PR with dynamic checklist, hence the name.

Example to configure it:

name: "Dynamic checklist"

    branches: [ master ]

    runs-on: ubuntu-latest
    name: A job to create dynamic checklist
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Dynamic checklist action
        uses: vishalsinha21/dynamic-checklist@v1
          mappingFile: 'mapping.json'
          GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

Here is one more example to configure it, and print the output (formatted checklist) of dynamic checklist action

name: "Dynamic checklist"

    branches: [ master ]

    runs-on: ubuntu-latest
    name: A job to create dynamic checklist
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Dynamic checklist action
        id: dynamic_checklist
        uses: vishalsinha21/dynamic-checklist@v1
          mappingFile: 'mapping.json'
          GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      - name: Print checklist
        run: echo "The final checklist ${{ steps.dynamic_checklist.outputs.checklist }}"

The path to mapping file is relative to your repo root directory. For example, if you keep your mapping.json file inside a checklist directory inside repo’s root directory then configure path as show below:

          mappingFile: './checklist/mapping.json'

Logs of this action does not prints the pull request diff by default, it gets printed at debug level. In case you are interested in looking at the pull request diff, and the newly added line then add secret ‘ACTIONS_STEP_DEBUG’ as true in the settings of your repo. More details here

Here is a PR with example of how to add this github action to your repo along with mapping file. It also shows the example of how a comment would be made on the pull request. Since the added mapping file has all the keywords, it adds all possible comments to the checklist.

Here is an example which shows the dynamic checklist which was created based on the changes as part of that pull request. Only 2 comments have been added in this particular instance based on code diff and mapping file in the repo.

How to prepare for AZ-900: Microsoft Azure fundamentals certification

Certification Objectives

As the name conveys, this certification is all about fundamentals. It helps as the stepping stone to establish the fundamentals of cloud services and how those services are provided by Azure.

Main certification page with all details & skills measured

Is it good for me?

Azure and AWS are leading cloud solution providers and any certification in this area would be a good career investment.

It’s good for technical folks who are starting out their journey in Azure to get acquainted, to get the high level overview of Azure capabilities and get experience of the certification environment before appearing for advanced level Azure certifications.

But this is even better for folks in non-technical roles working in pre-sales, sales and delivery. This helps in getting that “30000 foot view” of Azure, helps in understanding clients requirements better and add more weightage to your opinions/suggestions. In my humble opinion, it’s a must for managers of all levels if their account is handling Azure projects.

This certification is not mandatory to appear for advanced level certifications but I would recommend it as the stepping stone and to get familiarity with certification environment. Advantages of certification is pretty subjective and depends on individuals perception. I like it because not only it helps in grasping the concepts but it also really helps me to focus on few details that I would ignore otherwise. And there is always a motivational boost if you clear any industry known certification.

How to prepare

  • AZ-900: Microsoft Azure Fundamentals Exam Prep -2020 Edition by Scott Duffy (Udemy)
    3 hours concise course which covers all topics related to this certification. There are other lengthy courses on Udemy for AZ-900, but I found this course just to be of the right length and instructor explains all concepts in simple language. It also has 1 practice test of 50 questions.

  • AZ-900: Microsoft Azure Fundamentals Original Practice Tests by Scott Duffy (Udemy)
    3 practice tests of 50 questions each

  • Official learning path
    This path includes exhaustive coverage of all topics, creating free account, gives walk-through of the portal and has some simple hands-on exercise. This should take 10-12 hours to complete.

This should be enough to achieve the objectives of this certification. Go through course and material again until you feel comfortable with the fundamentals. If you are able to score consistently above 95% in all practice tests and complete a test under 20 minutes then you are more than ready.

How to schedule for exam

The link to schedule exam with Pearson Vue is on the main certification page. There is option to take it from exam center or online (home/office). It’s very important to check that your system meets the requirements to take the exam online, before scheduling one.

All details related to online exams are here

Download OnVue software on your system and check-in to get acquainted with the check in process needed before exam. It can be done anytime and you can appear for one sample exam (1 random unrelated question).

You will be redirected to Pearson Vue to accept terms & conditions, language and select date/time slot for exam. This exam costs USD 99.

Exam experience

Check in process requires you to take photos of yourself, your identification (passport/driving license) and the photos of the room from where you would be attempting this exam. You will be prompted if photos are too dark/bright or blurred and then you will have to retake and re-submit. I started check-in 20 minutes before the actual appointment time, and was comfortably done with check in 15 min.

I waited for 5 minutes, and the exam started right on time. All other running applications would be closed and its very important that you remain visible from your laptop camera all the times and no one enters your room, else it might lead to termination.

Total exam time is 90 minutes which includes 5 minutes for terms and conditions and 10 minutes for feedback on questions after exam. I got 32 questions to be completed in 60 minutes (this can vary), so don’t assume that you will get all 90 minutes for the exam.

The passing score is 700. I was able to score 900 with the preparation I mentioned above. I was able to identify some topics which deserves more attention (mentioned in next section) and with little more focus on them you should be able to score even better.

32 questions is bit misleading because many questions has sub-questions. Some questions were really short but some have multiple sub-questions. For example: some questions had 3 statements to choose yes/no, or multiple statements with drag and drop options. Drag and drop question mentions that each choice can be used 0 to n times, so be careful.

60 minutes is still a lot of time for this exam. I was able to attempt all questions in 30 minutes, devoting ample amount of time to each question.

Topics that deserves more attention

Below topics deserves more attention to details and for removing any kind of ambiguity.

Aspects applicable to free account
Azure monitor vs Azure event hubs
Availability zone vs availability set
Azure advanced threat protection vs Azure premium identity protection
Different support levels


It’s been 6 months since I have started working on Azure. The project has got me some experience on Terraform, Kubernetes, Helm and Azure DevOps, but preparing for this certification has given me a very good overview of the many Azure fundamentals, core services and capabilities. This helps in broadening your horizon when proposing cloud solutions to customers/clients, and also helps to get acquaintance for the more advanced level certifications on Azure.

I did my research when preparing for this certification, and I think I took longer to prepare than I should have as I didn’t find all the information readily enough. I hope that sharing all this information at one place would help anyone aspiring to appear for this certification with just the right amount of preparation. I hope you will find this article useful and will do well in your exam. All the best!