My Notes some of this and some of that

Next Greater Element

Problem statement: Given an array, print the Next Greater Element (NGE) for every element. The Next greater Element for an element x is the first greater element on the right side of x in the array. Elements for which no greater element exist, consider the next greater element as -1.

Examples: For an array, the rightmost element always has the next greater element as -1. For an array that is sorted in decreasing order, all elements have the next greater element as -1. For the input array [4, 5, 2, 25], the next greater elements for each element are as follows.

Element       NGE
4      -->   5
5      -->   25
2      -->   25
25     -->   -1

For the input array [13, 7, 6, 12}, the next greater elements for each element are as follows.

Element        NGE
13      -->    -1
7       -->     12
6       -->     12
12      -->     -1

Anagrams

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

Blogs

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

Bookmarks

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:

Checklist:

  • 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"

on:
  pull_request:
    branches: [ master ]

jobs:
  checklist_job:
    runs-on: ubuntu-latest
    name: A job to create dynamic checklist
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Dynamic checklist action
        uses: vishalsinha21/dynamic-checklist@v1
        with:
          mappingFile: 'mapping.json'
        env:
          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"

on:
  pull_request:
    branches: [ master ]

jobs:
  checklist_job:
    runs-on: ubuntu-latest
    name: A job to create dynamic checklist
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Dynamic checklist action
        id: dynamic_checklist
        uses: vishalsinha21/dynamic-checklist@v1
        with:
          mappingFile: 'mapping.json'
        env:
          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:

        with:
          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.