diff --git a/README.md b/README.md index e497526..e1bb7e2 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ Each piece of code (change/patch) is verified, to make the change is safe to mer
What is Continuous Deployment?
-A development strategy used by developers to release software automatically into production where any code commit must pass through an automated testing phase. Only when this is successful is the release considered production worthy. This eliminates any human interaction and should be implemented only after production-ready pipelines have been set with real-time monitoring and reporting of deployed assets. If any issues are detected in production it should be easy to rollback to previous working state. +A development strategy used by developers to release software automatically into production where any code commit must pass through an automated testing phase. Only when this is successful is the release considered production worthy. This eliminates any human interaction and should be implemented only after production-ready pipelines have been set with real-time monitoring and reporting of deployed assets. If any issues are detected in production it should be easy to rollback to previous working state. For more info please read [here](https://www.atlassian.com/continuous-delivery/continuous-deployment)
@@ -265,11 +265,11 @@ One can argue whether it's per company definition or a global one but at least a
What are MTTF (mean time to failure) and MTTR (mean time to repair)? What these metrics help us to evaluate?
- - * MTTF (mean time to failure) other known as uptime, can be defined as how long the system run before if fails. - * MTTR (mean time to recover) on the other hand, is the amount of time it takes to repair a system. + + * MTTF (mean time to failure) other known as uptime, can be defined as how long the system run before if fails. + * MTTR (mean time to recover) on the other hand, is the amount of time it takes to repair a system. * MTBF (mean time between failues) is the amount of time between failures of the system. These errors can be intermittent or fatal. - +
@@ -278,12 +278,12 @@ One can argue whether it's per company definition or a global one but at least a
What is "infrastructure as code"? What implementation of IAC are you familiar with?
- IAC (infrastructure as code) is a declerative approach of defining infrastructure or architecture of a system. Some implementations are ARM templates for Azure and Terraform that can work across multiple cloud providers. + IAC (infrastructure as code) is a declerative approach of defining infrastructure or architecture of a system. Some implementations are ARM templates for Azure and Terraform that can work across multiple cloud providers.
How do you manage build artifacts?
- Build artifacts are usually stored in a repository. They can be used in release pipelines for deployment purposes. Usually there is retention period on the build artifacts. + Build artifacts are usually stored in a repository. They can be used in release pipelines for deployment purposes. Usually there is retention period on the build artifacts.
@@ -292,13 +292,13 @@ One can argue whether it's per company definition or a global one but at least a
What deployment strategies are you familiar with or have used?
- - There are several deployment strategies: + + There are several deployment strategies: * Rolling * Blue green deployment * Canary releases * Recreate strategy - +
@@ -342,7 +342,7 @@ This situation might lead to bugs which hard to identify and reproduce.
How to deal with a configuration drift?
- Configuration drift can be avoided with desired state configuration (DSC) implementation. Desired state configuration can be a declarative file that defined how a system should be. There are tools to enforce desired state such a terraform or azure dsc. There are incramental or complete strategies. + Configuration drift can be avoided with desired state configuration (DSC) implementation. Desired state configuration can be a declarative file that defined how a system should be. There are tools to enforce desired state such a terraform or azure dsc. There are incramental or complete strategies.
@@ -472,7 +472,7 @@ You can describe the UI way to add new nodes but better to explain how to do in
-## Cloud +## Cloud
What is Cloud Computing? What is a Cloud Provider?
@@ -717,10 +717,10 @@ False. Charges are being made when the code is executed. Which of the following set of languages Lambda supports? * R, Swift, Rust, Kotlin - * Python, Ruby, Go + * Python, Ruby, Go * Python, Ruby, PHP
- * Python, Ruby, Go + * Python, Ruby, Go
#### AWS Containers @@ -750,7 +750,7 @@ Learn more [here](https://aws.amazon.com/fargate)
#### AWS Storage - +
Explain what is AWS S3?
@@ -820,7 +820,7 @@ Storage classes offered today: * Less expensive than Standard and Standard-IA storage classes * 2x9% durability * 99.50% availability - + * Intelligent-Tiering: * Long-lived data with changing or unknown access patterns. Basically, In this class the data automatically moves to the class most suitable for you based on usage patterns * Price depends on the used class @@ -1015,7 +1015,7 @@ False. Auto scaling adjusts capacity and this can mean removing some resources b * Classic LB - low costs, good for test or dev environments
-#### AWS Security +#### AWS Security
What is the shared responsibility model? What AWS is responsible for and what the user is responsible for based on the shared responsibility model?
@@ -1195,7 +1195,7 @@ cloud data warehouse
What is AWS ElastiCache? For what cases is it used?
-Amazon Elasticache is a fully managed Redis or Memcached in-memory data store. +Amazon Elasticache is a fully managed Redis or Memcached in-memory data store. It's great for use cases like two-tier web applications where the most frequently accesses data is stored in ElastiCache so response time is optimal.
@@ -1526,7 +1526,7 @@ Read more about it [here](https://aws.amazon.com/sns) * Publishers
* Topics - used for grouping multiple endpoints - * Subscribers - the endpoints where topics send messages to + * Subscribers - the endpoints where topics send messages to * Publishers - the provider of the message (event, person, ...)
@@ -1947,7 +1947,7 @@ A router is a physical or virtual appliance that passes information between two
What is NAT?
- Network Address Translation (NAT) is a process in which one or more local IP address is translated into one or more Global IP address and vice versa in order to provide Internet access to the local hosts. + Network Address Translation (NAT) is a process in which one or more local IP address is translated into one or more Global IP address and vice versa in order to provide Internet access to the local hosts.
@@ -1990,7 +1990,7 @@ Bonus question: what is the RTT of LAN?
What is the difference between TCP and UDP?
- + TCP establishes a connection between the client and the server to guarantee the order of the packages, on the other hand, UDP does not establish a connection between client and server and doesn't handle package order. This makes UDP more lightweight than TCP and a perfect candidate for services like streaming. [Penguintutor.com](http://www.penguintutor.com/linux/basic-network-reference) provides a good explanation. @@ -2158,7 +2158,7 @@ There is also "Management Plane" which refers to monitoring and management funct
What is HSTS?
-HTTP Strict Transport Security is a web server directive that informs user agents and web browsers how to handle its connection through a response header sent at the very beginning and back to the browser. This forces connections over HTTPS encryption, disregarding any script's call to load any resource in that domain over HTTP. +HTTP Strict Transport Security is a web server directive that informs user agents and web browsers how to handle its connection through a response header sent at the very beginning and back to the browser. This forces connections over HTTPS encryption, disregarding any script's call to load any resource in that domain over HTTP. Read more [here](https://www.globalsign.com/en/blog/what-is-hsts-and-how-do-i-use-it#:~:text=HTTP%20Strict%20Transport%20Security%20(HSTS,and%20back%20to%20the%20browser.)
@@ -2185,7 +2185,7 @@ An open question. Answer based on your real experience. You can highlight one or
Explain what each of the following commands does and give an example on how to use it: * ls - * rm + * rm * rmdir (can you achieve the same result by using rm?) * grep * touch @@ -2250,14 +2250,14 @@ mv command.
Explain each field in the output of `ls -l` command
-It shows a detailed list of files in a long format. From the left; +It shows a detailed list of files in a long format. From the left; * file permissions, number of links, owner name, owner group, file size, timestamp of last modification and directory/file name
What are hidden files/directories? How to list them?
-These are files directly not displayed after performing a standard ls direct listing. An example of these files are .bashrc which are used to execute some scripts. Some also store configuration about services on your host like .KUBECONFIG. The command used to list them is, +These are files directly not displayed after performing a standard ls direct listing. An example of these files are .bashrc which are used to execute some scripts. Some also store configuration about services on your host like .KUBECONFIG. The command used to list them is, `ls -a`
@@ -2272,7 +2272,7 @@ You would solve this by fixing your $PATH variable: As to fix it there are several options: -1. Manually adding what you need to your $PATH PATH="$PATH":/user/bin:/..etc +1. Manually adding what you need to your $PATH PATH="$PATH":/user/bin:/..etc 2. You have your weird env variables backed up. 3. You would look for your distro default $PATH variable, copy paste using method #1 @@ -2334,13 +2334,13 @@ It adds execute permissions to all sets i.e user, group and others
Explain what is setgid and setuid
-* setuid is a linux file permission that permits a user to run a file or program with the permissions of the owner of that file. This is possible by elevation of current user privileges. +* setuid is a linux file permission that permits a user to run a file or program with the permissions of the owner of that file. This is possible by elevation of current user privileges. * setgid is a process when executed will run as the group that owns the file.
What is the purpose of sticky bit?
-Its a bit that only allows the owner or the root user to delete or modify the file. +Its a bit that only allows the owner or the root user to delete or modify the file.
@@ -2352,7 +2352,7 @@ Its a bit that only allows the owner or the root user to delete or modify the fi * chmod - changes access permissions to files system objects * chown - changes the owner of file system files and directories - * chgrp - changes the group associated with a file system object + * chgrp - changes the group associated with a file system object
@@ -2604,7 +2604,7 @@ Another way to ask this: what happens from the moment you turned on the server u For each file (and directory) in Linux there is an inode, a data structure which stores meta data related to the file like its size, owner, permissions, etc. -
+
Which of the following is not included in inode: @@ -2658,7 +2658,7 @@ There are many answers for this question. One way is running `df -T`
How to create a - * new empty file + * new empty file * a file with text (without using text editor) * a file with given size
@@ -2710,7 +2710,7 @@ There are many answers for this question. One way is running `df -T` * sed "s/1/2/g' /tmp/myFile * find . -iname \*.yaml -exec sed -i "s/1/2/g" {} ; - +

sed 's/1/2/g' /tmp/myFile
@@ -3412,7 +3412,7 @@ Notes: How to create a file of a certain size?
There are a couple of ways to do that: - + * dd if=/dev/urandom of=new_file.txt bs=2MB count=1 * truncate -s 2M new_file.txt * fallocate -l 2097152 new_file.txt @@ -3581,7 +3581,7 @@ A process is a running program. A program is one or more instructions and the pr It would support the following: -* Create - allow to create new processes +* Create - allow to create new processes * Delete - allow to remove/destroy processes * State - allow to check the state of the process, whether it's running, stopped, waiting, etc. * Stop - allow to stop a running process @@ -3757,7 +3757,7 @@ spun up and shut down, without you tracking every change in these sources. --- - name: Print information about my host hosts: localhost - gather_facts: 'no' + gather_facts: 'no' tasks: - name: Print hostname debug: @@ -3810,7 +3810,7 @@ When given a written code, always inspect it thoroughly. If your answer is “th vars: mario_file: /tmp/mario package_list: - - 'zlib' + - 'zlib' - 'vim' tasks: - name: Check for mario file @@ -3852,13 +3852,13 @@ When given a written code, always inspect it thoroughly. If your answer is “th The playbook to deploy the system_info file ``` ---- +--- - name: Deploy /tmp/system_info file hosts: all:!controllers - tasks: + tasks: - name: Deploy /tmp/system_info template: - src: system_info.j2 + src: system_info.j2 dest: /tmp/system_info ``` @@ -3886,7 +3886,32 @@ Variable precedence is about how variables override each other when they set in In the context of our question, the order will be extra vars (always override any other variable) -> host facts -> inventory variables -> role defaults (the weakest). -A full list can be found at the link above. Also, note there is a significant difference between Ansible 1.x and 2.x. +Here is the order of precedence from least to greatest (the last listed variables winning prioritization): + +1. command line values (eg “-u user”) +2. role defaults [[1\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id15) +3. inventory file or script group vars [[2\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id16) +4. inventory group_vars/all [[3\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17) +5. playbook group_vars/all [[3\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17) +6. inventory group_vars/* [[3\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17) +7. playbook group_vars/* [[3\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17) +8. inventory file or script host vars [[2\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id16) +9. inventory host_vars/* [[3\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17) +10. playbook host_vars/* [[3\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17) +11. host facts / cached set_facts [[4\]](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id18) +12. play vars +13. play vars_prompt +14. play vars_files +15. role vars (defined in role/vars/main.yml) +16. block vars (only for tasks in block) +17. task vars (only for the task) +18. include_vars +19. set_facts / registered vars +20. role (and include_role) params +21. include params +22. extra vars (always win precedence) + +A full list can be found at [PlayBook Variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#ansible-variable-precedence) . Also, note there is a significant difference between Ansible 1.x and 2.x.
@@ -3902,6 +3927,33 @@ A full list can be found at the link above. Also, note there is a significant di * This “hosts: all:!controllers” means ‘run only on controllers group hosts
+
+Explain the Diffrence between Forks and Serial & Throttle.
+ +`Serial` is like running the playbook for each host in turn, waiting for completion of the complete playbook before moving on to the next host. `forks`=1 means run the first task in a play on one host before running the same task on the next host, so the first task will be run for each host before the next task is touched. Default fork is 5 in ansible. + +``` +[defaults] +forks = 30 +``` + +``` +- hosts: webservers + serial: 1 + tasks: + - name: ... +``` + +Ansible also supports `throttle` This keyword limits the number of workers up to the maximum set via the forks setting or serial. This can be useful in restricting tasks that may be CPU-intensive or interact with a rate-limiting API + +``` +tasks: +- command: /path/to/cpu_intensive_command + throttle: 1 +``` + +
+
What is ansible-pull? How is it different from how ansible-playbook works?
@@ -4035,22 +4087,22 @@ HCL stands for Hashicorp Configuration Language. It is the language Hashicorp ma Explain each of the following: * Provider - * Resource - * Provisioner + * Resource + * Provisioner
- * Provider is any cloud based technology - github, aws, postgresql etc - which one can make an API call to with its unique terraform provider binary to provision available services and components.
+ * Provider is any cloud based technology - github, aws, postgresql etc - which one can make an API call to with its unique terraform provider binary to provision available services and components.
* Resources are the services and components you provision on these platforms.
* Provisioner in terraform's lingo specifically refers to configuration tools like ansible or salt-stack which are used in combination with terraform to orchestrate a system.
-What terraform.tfstate file is used for?
+What terraform.tfstate file is used for?
It keeps track of the IDs of created resources so that Terraform knows what it is managing.
-How do you rename an existing resource?
+How do you rename an existing resource?
terraform state mv
@@ -4058,10 +4110,10 @@ terraform state mv
Explain what the following commands do: - * terraform init - * terraform plan - * terraform validate - * terraform apply + * terraform init + * terraform plan + * terraform validate + * terraform apply
terraform init scans your code to figure which providers are you using and download them. @@ -4142,14 +4194,14 @@ Output variables are named values that are sourced from the attributes of a modu
Explain "Remote State". When would you use it and how?
- Terraform generates a `terraform.tfstate` json file that describes components/service provisioned on the specified provider. Remote + Terraform generates a `terraform.tfstate` json file that describes components/service provisioned on the specified provider. Remote State stores this file in a remote storage media to enable collaboration amongst team.
Explain "State Locking"
- State locking is a mechanism that blocks an operations against a specific state file from multiple callers so as to avoid conflicting operations from different team members. Once the first caller's operation's lock is released the other team member may go ahead to - carryout his own operation. Nevertheless Terraform will first check the state file to see if the desired resource already exist and + State locking is a mechanism that blocks an operations against a specific state file from multiple callers so as to avoid conflicting operations from different team members. Once the first caller's operation's lock is released the other team member may go ahead to + carryout his own operation. Nevertheless Terraform will first check the state file to see if the desired resource already exist and if not it goes ahead to create it.
@@ -4271,13 +4323,13 @@ Applied tar sha256:514c3a3e64d4ebf15f482c9e8909d130bcd53bcc452f0225b0a04744de7b8
How do you run a container?
- + docker run
What `docker commit` does?. When will you use it?
- + Create a new image from a container’s changes
@@ -4302,7 +4354,7 @@ Create a new image from a container’s changes
How do you remove old, non running, containers?
- + 1. To remove one or more Docker images use the docker container rm command followed by the ID of the containers you want to remove. 2. The docker system prune command will remove all stopped containers, all dangling images, and all unused networks 3. docker rm $(docker ps -a -q) - This command will delete all stopped containers. The command docker ps -a -q will return all existing container IDs and pass them to the rm command which will delete them. Any running containers will not be deleted. @@ -4312,13 +4364,13 @@ Create a new image from a container’s changes
What is Dockerfile
- + Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.
What is the difference between ADD and COPY in Dockerfile?
- + COPY takes in a src and destination. It only lets you copy in a local file or directory from your host (the machine building the Docker image) into the Docker image itself. ADD lets you do that too, but it also supports 2 other sources. First, you can use a URL instead of a local file / directory. Secondly, you can extract a tar file from the source directly into the destination. Although ADD and COPY are functionally similar, generally speaking, COPY is preferred. That’s because it’s more transparent than ADD. COPY only supports the basic copying of local files into the container, while ADD has some features (like local-only tar extraction and remote URL support) that are not immediately obvious. @@ -4326,7 +4378,7 @@ Although ADD and COPY are functionally similar, generally speaking, COPY is pref
What is the difference between CMD and RUN in Dockerfile?
- + RUN lets you execute commands inside of your Docker image. These commands get executed once at build time and get written into your Docker image as a new layer. CMD is the command the container executes by default when you launch the built image. A Dockerfile can only have one CMD. You could say that CMD is a Docker run-time operation, meaning it’s not something that gets executed at build time. It happens when you run an image. A running image is called a container. @@ -4340,7 +4392,7 @@ A common answer to this is to use [hadolint](https://github.com/hadolint/hadolin
Explain what is Docker compose and what is it used for
- + Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. For example, you can use it to set up ELK stack where the services are: elasticsearch, logstash and kibana. Each running in its own container. @@ -4382,9 +4434,9 @@ Swarm management which means you can create new swarms in Docker Cloud.
Explain image layers
- + A Docker image is built up from a series of layers. Each layer represents an instruction in the image’s Dockerfile. Each layer except the very last one is read-only. -Each layer is only a set of differences from the layer before it. The layers are stacked on top of each other. When you create a new container, you add a new writable layer on top of the underlying layers. This layer is often called the “container layer”. All changes made to the running container, such as writing new files, modifying existing files, and deleting files, are written to this thin writable container layer. +Each layer is only a set of differences from the layer before it. The layers are stacked on top of each other. When you create a new container, you add a new writable layer on top of the underlying layers. This layer is often called the “container layer”. All changes made to the running container, such as writing new files, modifying existing files, and deleting files, are written to this thin writable container layer. The major difference between a container and an image is the top writable layer. All writes to the container that add new or modify existing data are stored in this writable layer. When the container is deleted, the writable layer is also deleted. The underlying image remains unchanged. Because each container has its own writable container layer, and all changes are stored in this container layer, multiple containers can share access to the same underlying image and yet have their own data state.
@@ -4554,7 +4606,7 @@ More on this topic [here](https://kubernetes.io/docs/concepts/services-networkin
-What services types are there?
+What services types are there?
@@ -4595,7 +4647,7 @@ More on this topic [here](https://kubernetes.io/docs/concepts/services-networkin How does scheduling work in kubernetes?
The control plane component kube-scheduler asks the following questions, -1. What to schedule? It tries to understand the pod-definition specifications +1. What to schedule? It tries to understand the pod-definition specifications 2. Which node to schedule? It tries to determine the best node with available resources to spin a pod 3. Binds the Pod to a given node @@ -4988,7 +5040,7 @@ SOLID is: * Single Responsibility - A class should only have a single responsibility * Open-Closed - An entity should be open for extension, but closed for modification. What this practically means is that you should extend functionality by adding a new code and not by modifying it. Your system should be separated into components so it can be easily extended without breaking everything. * Liskov Substitution - Any derived class should be able to substitute the its parent without altering its corrections. Practically, every part of the code will get the expected result no matter which part is using it -* Interface segregation - A client should never depend on anything it doesn't uses +* Interface segregation - A client should never depend on anything it doesn't uses * Dependency Inversion - High level modules should depend on abstractions, not low level modules
@@ -5025,7 +5077,7 @@ SOLID is: * Can you implement it? (in any language you prefer) * What is the average performance of the algorithm you wrote?
-It's a search algorithm used with sorted arrays/lists to find a target value by dividing the array each iteration and comparing the middle value to the target value. If the middle value is smaller than target value, then the target value is searched in the right part of the divided array, else in the left side. This continues until the value is found (or the array divided max times) +It's a search algorithm used with sorted arrays/lists to find a target value by dividing the array each iteration and comparing the middle value to the target value. If the middle value is smaller than target value, then the target value is searched in the right part of the divided array, else in the left side. This continues until the value is found (or the array divided max times) [python implementation](coding/python/binary_search.py) @@ -5161,7 +5213,7 @@ The mutable data types are: List Dictionary Set - + The immutable data types are: Numbers (int, float, ...) @@ -5350,31 +5402,31 @@ class MyClass(object): Generally, every compiling process have a two steps. - Analysis - Code Generation. - + Analysis can be broken into: 1. Lexical analysis (Tokenizes source code) 2. Syntactic analysis (Check whether the tokens are legal or not, tldr, if syntax is correct) - + for i in 'foo' ^ SyntaxError: invalid syntax - + We missed ':' - - + + 3. Semantic analysis (Contextual analysis, legal syntax can still trigger errors, did you try to divide by 0, hash a mutable object or use an undeclared function?) - + 1/0 ZeroDivisionError: division by zero - + These three analysis steps are the responsible for error handlings. - + The second step would be responsible for errors, mostly syntax errors, the most common error. The third step would be responsible for Exceptions. - + As we have seen, Exceptions are semantic errors, there are many builtin Exceptions: - + ImportError ValueError KeyError @@ -5382,33 +5434,33 @@ Generally, every compiling process have a two steps. IndentationError IndexError ... - + You can also have user defined Exceptions that have to inherit from the `Exception` class, directly or indirectly. Basic example: - + class DividedBy2Error(Exception): def __init__(self, message): self.message = message - - + + def division(dividend,divisor): if divisor == 2: raise DividedBy2Error('I dont want you to divide by 2!') return dividend / divisor - + division(100, 2) - + >>> __main__.DividedBy2Error: I dont want you to divide by 2! ```
Explain Exception Handling and how to use it in Python
- + **Exceptions:** Errors detected during execution are called Exceptions. -**Handling Exception:** When an error occurs, or exception as we call it, Python will normally stop and generate an error message.
+**Handling Exception:** When an error occurs, or exception as we call it, Python will normally stop and generate an error message.
Exceptions can be handled using `try` and `except` statement in python. **Example:** Following example asks the user for input until a valid integer has been entered.
@@ -5434,7 +5486,7 @@ For more details about errors and exceptions follow this [https://docs.python.or
Explain the following built-in functions (their purpose + use case example): - * repr + * repr * any * all
@@ -5519,7 +5571,7 @@ x, y = y, x
Explain the following object's magic variables: - * __dict__ + * __dict__
@@ -5630,7 +5682,7 @@ nested_li = [['1', '2', '3'], ['4', '5', '6']] How to merge two sorted lists into one sorted list?
``` -sorted(li1 + li2) +sorted(li1 + li2) ``` Another way: @@ -5647,7 +5699,7 @@ while i < len(li1) and j < len(li2): merged_li.append(li2[j]) j += 1 -merged_li = merged_li + merged_li[i:] + merged_li[j:] +merged_li = merged_li + merged_li[i:] + merged_li[j:] ```
@@ -5701,7 +5753,7 @@ def is_unique4(l:list) -> bool: ``` def my_func(li = []): - li.append("hmm") + li.append("hmm") print(li) ``` @@ -6002,7 +6054,7 @@ Detailed answer can be found here: http://codingshell.com/python-all-string-perm
How to reverse a string? (e.g. pizza -> azzip)
-The correct way is: +The correct way is: ``` my_string[::-1] @@ -6128,12 +6180,12 @@ pdb :D Short answer is: It returns a None object. -We could go a bit deeper and explain the difference between +We could go a bit deeper and explain the difference between ``` def a (): return - + >>> None ``` @@ -6142,7 +6194,7 @@ And ``` def a (): pass - + >>> None ``` Or we could be asked this as a following question, since they both give the same result. @@ -6172,14 +6224,14 @@ Disassembly of ", line 5>: ``` An empty return is exactly the same as return None and functions without any explicit return -will always return None regardless of the operations, therefore +will always return None regardless of the operations, therefore ``` def sum(a, b): global c c = a + b - + >>> None ```
@@ -6315,8 +6367,8 @@ list(zip(range(5), range(50), range(-2))) ``` def add(num1, num2): return num1 + num2 - - + + def sub(num1, num2): return num1 - num2 @@ -6328,11 +6380,11 @@ def mul(num1, num2): def div(num1, num2): return num1 / num2 -operators = { +operators = { '+': add, '-': sub, '*': mul, - '/': div + '/': div } if __name__ == '__main__': @@ -6361,7 +6413,7 @@ def wee(word): def oh(f): return f + "Ohh" - + >>> oh(wee("Wee")) <<< Wee Ohh ``` @@ -6782,7 +6834,7 @@ False. If you would like to keep a file on your filesystem, use `git reset
@@ -6794,12 +6846,12 @@ This is a great article about Octopus merge: http://www.freblogg.com/2016/12/git What are some characteristics of the Go programming language?
* Strong and static typing - the type of the variables can't be changed over time and they have to be defined at compile time - * Simplicity + * Simplicity * Fast compile times * Built-in concurrency * Garbage collected * Platform independent - * Compile to standalone binary - anything you need to run your app will be compiled into one binary. Very useful for version management in run-time. + * Compile to standalone binary - anything you need to run your app will be compiled into one binary. Very useful for version management in run-time. Go also has good community.
@@ -6911,7 +6963,7 @@ Go's iota identifier is used in const declarations to simplify definitions of in
What _ is used for in Go?
- + It avoids having to declare all the variables for the returns values. It is called the [blank identifier](https://golang.org/doc/effective_go.html#blank).
@@ -6945,16 +6997,16 @@ Since the first iota is declared with the value `3` (` + 3`), the next one has t ``` package main - + import ( "fmt" "sync" "time" ) - + func main() { var wg sync.WaitGroup - + wg.Add(1) go func() { time.Sleep(time.Second * 2) @@ -6993,17 +7045,17 @@ func mod1(a []int) { for i := range a { a[i] = 5 } - + fmt.Println("1:", a) } func mod2(a []int) { a = append(a, 125) // ! - + for i := range a { a[i] = 5 } - + fmt.Println("2:", a) } @@ -7026,7 +7078,7 @@ Output:
2 [1 2 3 4]
-In `mod1` a is link, and when we're using `a[i]`, we're changing `s1` value to. +In `mod1` a is link, and when we're using `a[i]`, we're changing `s1` value to. But in `mod2`, `append` creats new slice, and we're changing only `a` value, not `s2`. [Aritcle about arrays](https://golangbot.com/arrays-and-slices/), @@ -7069,7 +7121,7 @@ func main() { h := &IntHeap{4, 8, 3, 6} heap.Init(h) heap.Push(h, 7) - + fmt.Println((*h)[0]) } ``` @@ -7097,7 +7149,7 @@ MongoDB advantages are as followings: What is the difference between SQL and NoSQL?
The main difference is that SQL databases are structured (data is stored in the form of -tables with rows and columns - like an excel spreadsheet table) while NoSQL is +tables with rows and columns - like an excel spreadsheet table) while NoSQL is unstructured, and the data storage can vary depending on how the NoSQL DB is set up, such as key-value pair, document-oriented, etc.
@@ -7205,7 +7257,7 @@ Answer: Magnetic is about 10ms and SSD is somewhere between 0.08 and 0.16ms What this line in scripts mean?: #!/bin/bash
-`#!/bin/bash` is She-bang +`#!/bin/bash` is She-bang /bin/bash is the most common shell used as default shell for user login of the linux system. The shell’s name is an acronym for Bourne-again shell. Bash can execute the vast majority of scripts and thus is widely used because it has more features, is well developed and better syntax. @@ -7217,7 +7269,7 @@ Answer: Magnetic is about 10ms and SSD is somewhere between 0.08 and 0.16ms Few example: * Comments on how to run it and/or what it does - * Adding "set -e" since I want the script to exit if a certain command failed + * Adding "set -e" since I want the script to exit if a certain command failed You can have an entirely different answer. It's based only on your experience.
@@ -7323,7 +7375,7 @@ ping -c 3 $SERVERIP > /dev/null 2>&1 if [ $? -ne 0 ] then # Use mailer here: - mailx -s "Server $SERVERIP is down" -t "$NOTIFYEMAIL" < /dev/null + mailx -s "Server $SERVERIP is down" -t "$NOTIFYEMAIL" < /dev/null fi ``` @@ -7370,11 +7422,11 @@ A short way of using if/else. An example:
What does the following code do and when would you use it? - + diff <(ls /tmp) <(ls /var/tmp)
-It is called 'process substitution'. It provides a way to pass the output of a command to another command when using a pipe | is not possible. It can be used when a command does not support STDIN or you need the output of multiple commands. +It is called 'process substitution'. It provides a way to pass the output of a command to another command when using a pipe | is not possible. It can be used when a command does not support STDIN or you need the output of multiple commands. https://superuser.com/a/1060002/167769
@@ -7392,7 +7444,7 @@ Structured Query Language How is SQL Different from NoSQL
The main difference is that SQL databases are structured (data is stored in the form of -tables with rows and columns - like an excel spreadsheet table) while NoSQL is +tables with rows and columns - like an excel spreadsheet table) while NoSQL is unstructured, and the data storage can vary depending on how the NoSQL DB is set up, such as key-value pair, document-oriented, etc.
@@ -7402,11 +7454,11 @@ as key-value pair, document-oriented, etc. ACID stands for Atomicity, Consistency, Isolation, Durability. In order to be ACID compliant, the database much meet each of the four criteria -**Atomicity** - When a change occurs to the database, it should either succeed or fail as a whole. +**Atomicity** - When a change occurs to the database, it should either succeed or fail as a whole. -For example, if you were to update a table, the update should completely execute. If it only partially executes, the +For example, if you were to update a table, the update should completely execute. If it only partially executes, the update is considered failed as a whole, and will not go through - the DB will revert back to it's original -state before the update occurred. It should also be mentioned that Atomicity ensures that each +state before the update occurred. It should also be mentioned that Atomicity ensures that each transaction is completed as it's own stand alone "unit" - if any part fails, the whole statement fails. **Consistency** - any change made to the database should bring it from one valid state into the next. @@ -7424,10 +7476,10 @@ time you executed your query, 15 of the 20 changes had gone through, but 5 were only see the 15 changes that had completed - you wouldn't see the database mid-update as the change goes through. **Durability** - Once a change is committed, it will remain committed regardless of what happens -(power failure, system crash, etc.). This means that all completed transactions -must be recorded in non-volatile memory. +(power failure, system crash, etc.). This means that all completed transactions +must be recorded in non-volatile memory. -Note that SQL is by nature ACID compliant. Certain NoSQL DB's can be ACID compliant depending on +Note that SQL is by nature ACID compliant. Certain NoSQL DB's can be ACID compliant depending on how they operate, but as a general rule of thumb, NoSQL DB's are not considered ACID compliant @@ -7437,8 +7489,8 @@ how they operate, but as a general rule of thumb, NoSQL DB's are not considered SQL - Best used when data integrity is crucial. SQL is typically implemented with many businesses and areas within the finance field due to it's ACID compliance. -NoSQL - Great if you need to scale things quickly. NoSQL was designed with web applications -in mind, so it works great if you need to quickly spread the same information around to +NoSQL - Great if you need to scale things quickly. NoSQL was designed with web applications +in mind, so it works great if you need to quickly spread the same information around to multiple servers Additionally, since NoSQL does not adhere to the strict table with columns and rows structure @@ -7449,14 +7501,14 @@ that Relational Databases require, you can store different data types together. What is a Cartesian Product?
A Cartesian product is when all rows from the first table are joined to all rows in the second -table. This can be done implicitly by not defining a key to join, or explicitly by +table. This can be done implicitly by not defining a key to join, or explicitly by calling a CROSS JOIN on two tables, such as below: Select * from customers **CROSS JOIN** orders; Note that a Cartesian product can also be a bad thing - when performing a join on two tables in which both do not have unique keys, this could cause the returned information -to be incorrect. +to be incorrect. ##### SQL Specific Questions @@ -7546,8 +7598,8 @@ Inner JOIN cat_food f
ON c.Customer_ID = f.Customer_ID
where c.Customer_ID in (Select Customer_ID from cat_food); -Although this was a simple statement, the "with" clause really shines when -a complex query needs to be run on a table before joining to another. With statements are nice, +Although this was a simple statement, the "with" clause really shines when +a complex query needs to be run on a table before joining to another. With statements are nice, because you create a pseudo temp when running your query, instead of creating a whole new table. The Sum of all the purchases of cat food weren't readily available, so we used a with statement to create @@ -7704,7 +7756,7 @@ startap-script
What is Cloud Code?
-It is a set of tools to help developers write, run and debug GCP kubernetes based applications. It provides built-in support for rapid iteration, debugging and running applications in development and production K8s environments. +It is a set of tools to help developers write, run and debug GCP kubernetes based applications. It provides built-in support for rapid iteration, debugging and running applications in development and production K8s environments.
### Google Kubernetes Engine (GKE) @@ -7719,12 +7771,12 @@ It is a set of tools to help developers write, run and debug GCP kubernetes base
What is Anthos
-It is a managed application platform for organisations like enterprises that require quick modernisation and certain levels +It is a managed application platform for organisations like enterprises that require quick modernisation and certain levels of consistency for their legacy applications in a hybrid or multicloud world. From this explanation the core ideas can be drawn from these statements; * Managed -> the customer does not need to worry about the underlying software intergrations, they just enable the API. * application platform -> It consists of open source tools like K8s, Knative, Istio and Tekton -* Enterprises -> these are usually organisations with complex needs +* Enterprises -> these are usually organisations with complex needs * Consistency -> to have the same policies declaratively initiated to be run anywhere securely e.g on-prem, GCP or other-clouds (AWS or Azure) fun fact: Anthos is flower in greek, they grow in the ground (earth) but need rain from the clouds to flourish. @@ -7751,15 +7803,15 @@ fun fact: Anthos is flower in greek, they grow in the ground (earth) but need ra How does Anthos handle the control plane and node components for GKE?
On GCP the kubernetes api-server is the only control plane component exposed to customers whilst compute engine manages -instances in the project. +instances in the project.
Which load balancing options are available?
* Networking load balancing for L4 and HTTP(S) Load Balancing for L7 which are both managed services that do not require - additional configuration. -* Ingress for Anthos which allows the ability to deploy a load balancer that serves an application across multiple clusters + additional configuration. +* Ingress for Anthos which allows the ability to deploy a load balancer that serves an application across multiple clusters on GKE
@@ -7773,10 +7825,10 @@ instances in the project. List and explain the enterprise security capabilities provided by Anthos
* Control plane security - GCP manages and maintains the K8s control plane out of the box. The user can secure the api-server by using master authorized networks and private clusters. These allow the user to disable access on the public IP address by assigning a private IP address to the master. -* Node security - By default workloads are provisioned on Compute engine instances that use Google's Container Optimised OS. This operating system implements a locked-down firewall, limited user accounts with root disabled and a read-only filesystem. There is a further option to enable GKE Sandbox for stronger isolation in multi-tenant deployment scenarios. -* Network security - Within a created cluster VPC, Anthos GKE leverages a powerful software-defined network that enables simple Pod-to-Pod communications. Network policies allow locking down ingress and egress connections in a given namespace. Filtering can also be implemented to incoming load-balanced traffic for services that require external access, by supplying whitelisted CIDR IP ranges. +* Node security - By default workloads are provisioned on Compute engine instances that use Google's Container Optimised OS. This operating system implements a locked-down firewall, limited user accounts with root disabled and a read-only filesystem. There is a further option to enable GKE Sandbox for stronger isolation in multi-tenant deployment scenarios. +* Network security - Within a created cluster VPC, Anthos GKE leverages a powerful software-defined network that enables simple Pod-to-Pod communications. Network policies allow locking down ingress and egress connections in a given namespace. Filtering can also be implemented to incoming load-balanced traffic for services that require external access, by supplying whitelisted CIDR IP ranges. * Workload security - Running workloads run with limited privileges, default Docker AppArmor security policies are applied to all Kubernetes Pods. Workload identity for Anthos GKE aligns with the open source kubernetes service accounts with GCP service account permissions. -* Audit logging - Adminstrators are given a way to retain, query, process and alert on events of the deployed environments. +* Audit logging - Adminstrators are given a way to retain, query, process and alert on events of the deployed environments.
@@ -7799,13 +7851,13 @@ It is a core component of the Anthos stack which provides platform, service and 1. An importer that reads from a central Git repository 2. A component that synchronises stored configuration data into K8s objects -3. A component that monitors drift between desired and actual cluster configurations with a capability of reconciliation when need rises. +3. A component that monitors drift between desired and actual cluster configurations with a capability of reconciliation when need rises.
How does Anthos Config Management help?
-It follows common modern software development practices which makes cluster configuration, management and policy changes auditable, revertable, and versionable easily enforcing IT governance and unifying resource management in an organisation. +It follows common modern software development practices which makes cluster configuration, management and policy changes auditable, revertable, and versionable easily enforcing IT governance and unifying resource management in an organisation.
@@ -7824,18 +7876,18 @@ It follows common modern software development practices which makes cluster conf
What are the components of the managed control plane of Anthos Service Mesh?
-1. Traffic Director - it is GCP's fully managed service mesh traffic control plane, responsible for translating Istio API objects into configuration information for the distributed proxies, as well as directing service mesh ingress and egress traffic +1. Traffic Director - it is GCP's fully managed service mesh traffic control plane, responsible for translating Istio API objects into configuration information for the distributed proxies, as well as directing service mesh ingress and egress traffic 2. Managed CA - is a centralised certificate authority responsible for providing SSL certificates to each of the distributed proxies, authentication information and distributing secrets -3. Operations tooling - formerly stackdriver, provides a managed ingestion point for observability and telemetry, specifically monitoring, tracing and logging data generated by each of the proxies. This powers the observability dashboard for operators to visually inspect their services and service dependencies assisting in the implementation of SRE best practices for monitoring SLIs and establishing SLOs. +3. Operations tooling - formerly stackdriver, provides a managed ingestion point for observability and telemetry, specifically monitoring, tracing and logging data generated by each of the proxies. This powers the observability dashboard for operators to visually inspect their services and service dependencies assisting in the implementation of SRE best practices for monitoring SLIs and establishing SLOs.
How does Anthos Service Mesh help?
Tool and technology integration that makes up Anthos service mesh delivers signficant operational benefits to Anthos environments, with minimal additional overhead such as follows: -* Uniform observability - the data plane reports service to service communication back to the control plane generating a service dependency graph. Traffic inspection by the proxy inserts headers to facilitate distributed tracing, capturing and reporting service logs together with service-level metrics (i.e latency, errors, availability). +* Uniform observability - the data plane reports service to service communication back to the control plane generating a service dependency graph. Traffic inspection by the proxy inserts headers to facilitate distributed tracing, capturing and reporting service logs together with service-level metrics (i.e latency, errors, availability). * Operational agility - fine-grained controls for managing the flow of inter-mesh (north-south) and intra-mesh (east-west) traffic are provided. -* Policy-driven security - policies can be enforced consistently across diverse protocols and runtimes as service communications are secured by default. +* Policy-driven security - policies can be enforced consistently across diverse protocols and runtimes as service communications are secured by default.
@@ -7850,7 +7902,7 @@ Tool and technology integration that makes up Anthos service mesh delivers signf
What is Cloud Run for Anthos?
-It is part of the Anthos stack that brings a serverless container experience to Anthos, offering a high-level platform experience on top of K8s clusters. It is built with Knative, an open-source operator for K8s that brings serverless application serving and eventing capabilities. +It is part of the Anthos stack that brings a serverless container experience to Anthos, offering a high-level platform experience on top of K8s clusters. It is built with Knative, an open-source operator for K8s that brings serverless application serving and eventing capabilities.
@@ -7860,9 +7912,9 @@ Platform teams in organisations that wish to offer developers additional tools t * Easy migration from K8s deployments - Without Cloud Run, platform engineers have to configure deployment, service, and HorizontalPodAutoscalers(HPA) objects to a loadbalancer and autoscaling. If application is already serving traffic it becomes hard to change configurations or roll back efficiently. Using Cloud Run all this is managed thus the Knative service manifest describes the application to be autoscaled and loadbalanced * Autoscaling - a sudden traffic spike may cause application containers in K8s to crash due to overload thus an efficient automated autoscaling is executed to serve the high volume of traffic -* Networking - it has built-in load balancing capabilities and policies for traffic splitting between multiple versions of an application. -* Releases and rollouts - supports the notion of the Knatibe API's revisions which describe new versions or different configurations of your application and canary deployments by splitting traffic. -* Monitoring - observing and recording metrics such as latency, error rate and requests per second. +* Networking - it has built-in load balancing capabilities and policies for traffic splitting between multiple versions of an application. +* Releases and rollouts - supports the notion of the Knatibe API's revisions which describe new versions or different configurations of your application and canary deployments by splitting traffic. +* Monitoring - observing and recording metrics such as latency, error rate and requests per second.
@@ -7870,7 +7922,7 @@ Platform teams in organisations that wish to offer developers additional tools t * Rapid, request-based autoscaling - default autoscalers monitor request metrics which allows Cloud Run for Anthos to handle spiky traffic patterns smoothly * Concurrency controls - limits such as max in-flight requests per container are enforced to ensure the container does not become overloaded and crash. More containers are added to handle the spiky traffic, buffering the requests. -* Scale to zero - if an application is inactive for a while Cloud Run scales it down to zero to reduce its footprint. Alternatively one can turn off scale-to-zero to prevent cold starts. +* Scale to zero - if an application is inactive for a while Cloud Run scales it down to zero to reduce its footprint. Alternatively one can turn off scale-to-zero to prevent cold starts.
@@ -8009,7 +8061,7 @@ You can read about TripleO right [here](https://docs.openstack.org/tripleo-docs/ * neutron-metering-agent * neutron-*-agtent * neutron-server
- + * neutron-l3-agent - L3/NAT forwarding (provides external network access for VMs for example) * neutron-dhcp-agent - DHCP services @@ -8173,7 +8225,7 @@ Using: * AdminURL
* PublicURL - Publicly accessible through public internet - * InternalURL - Used for communication between services + * InternalURL - Used for communication between services * AdminURL - Used for administrative management
@@ -8192,7 +8244,7 @@ A list of services and their endpoints * Sahara * Ironic * Trove - * Aodh + * Aodh * Ceilometer
* Swift - highly available, distributed, eventually consistent object/blob store @@ -8280,7 +8332,7 @@ A list of services and their endpoints What types of Nova proxies are you familiar with?
* Nova-novncproxy - Access through VNC connections - * Nova-spicehtml5proxy - Access through SPICE + * Nova-spicehtml5proxy - Access through SPICE * Nova-xvpvncproxy - Access through a VNC connection
@@ -8369,7 +8421,7 @@ Access control based on user roles (i.e., a collection of access authorizations
Explain Symmetric encryption
-A symmetric encryption is any technique where the same key is used to both encrypt and decrypt the data. +A symmetric encryption is any technique where the same key is used to both encrypt and decrypt the data.
@@ -8396,7 +8448,7 @@ A asymmetric encryption is any technique where the there is two different keys t Cross Site Scripting (XSS) is an type of a attack when the attacker inserts browser executable code within a HTTP response. Now the injected attack is not stored in the web application, it will only affact the users who open the maliciously crafted link or third-party web page. A successful attack allows the attacker to access any cookies, session tokens, or other sensitive information retained by the browser and used with that site  You can test by detecting user-defined variables and how to input them. This includes hidden or non-obvious inputs such as HTTP parameters, POST data, hidden form field values, and predefined radio or selection values. You then analyze each found vector to see if their are potential vulnerabilities, then when found you craft input data with each input vector. Then you test the crafted input and see if it works. - +
@@ -8466,7 +8518,7 @@ You can test by using a stored procedure, so the application must be sanitize th DNS spoofing occurs when a particular DNS server’s records of “spoofed” or altered maliciously to redirect traffic to the attacker. This redirection of traffic allows the attacker to spread malware, steal data, etc. **Prevention** -- Use encrypted data transfer protocols - Using end-to-end encryption vian SSL/TLS will help decrease the chance that a website / its visitors are compromised by DNS spoofing. +- Use encrypted data transfer protocols - Using end-to-end encryption vian SSL/TLS will help decrease the chance that a website / its visitors are compromised by DNS spoofing. - Use DNSSEC - DNSSEC, or Domain Name System Security Extensions, uses digitally signed DNS records to help determine data authenticity. - Implement DNS spoofing detection mechanisms - it’s important to implement DNS spoofing detection software. Products such as XArp help product against ARP cache poisoning by inspecting the data that comes through before transmitting it. @@ -8512,7 +8564,7 @@ Spectre is an attack method which allows a hacker to “read over the shoulder Cross-Site Request Forgery (CSRF) is an attack that makes the end user to initate a unwanted action on the web application in which the user has a authenticated session, the attacker may user an email and force the end user to click on the link and that then execute malicious actions. When an CSRF attack is successful it will compromise the end user data  You can use OWASP ZAP to analyze a "request", and if it appears that there no protection against cross-site request forgery when the Security Level is set to 0 (the value of csrf-token is SecurityIsDisabled.) One can use data from this request to prepare a CSRF attack by using OWASP ZAP - +
@@ -8580,7 +8632,7 @@ MAC address flooding attack (CAM table flooding attack) is a type of network att
What is Cache Poisoned Denial of Service?
-CPDoS or Cache Poisoned Denial of Service. It poisons the CDN cache. By manipulating certain header requests, the attacker forces the origin server to return a Bad Request error which is stored in the CDN’s cache. Thus, every request that comes after the attack will get an error page. +CPDoS or Cache Poisoned Denial of Service. It poisons the CDN cache. By manipulating certain header requests, the attacker forces the origin server to return a Bad Request error which is stored in the CDN’s cache. Thus, every request that comes after the attack will get an error page.
@@ -8667,7 +8719,7 @@ From the official docs:
-Describe what happens from the moment an app logged some information until it's displayed to the user in a dashboard when the Elastic stack is used
+Describe what happens from the moment an app logged some information until it's displayed to the user in a dashboard when the Elastic stack is used
The process may vary based on the chosen architecture and the processing you may want to apply to the logs. One possible workflow is: @@ -9008,7 +9060,7 @@ A (Address) Maps a host name to an IP address. When a computer has multiple adap
What is a AAAA record?
- + An AAAA Record performs the same function as an A Record, but for an IPv6 Address.
@@ -9026,7 +9078,7 @@ MX (Mail Exchange) Specifies a mail exchange server for the domain, which allows
Is DNS using TCP or UDP?
-DNS uses UDP port 53 for resolving queries either regular or reverse. DNS uses TCP for zone transfer. +DNS uses UDP port 53 for resolving queries either regular or reverse. DNS uses TCP for zone transfer.
@@ -9069,7 +9121,7 @@ According to the CAP theorem, it's not possible for a distributed data store to * Availability: Every request receives a response (it doesn't has to be the most recent data) * Consistency: Every request receives a response with the latest/most recent data -* Partition tolerance: Even if some the data is lost/dropped, the system keeps running +* Partition tolerance: Even if some the data is lost/dropped, the system keeps running
@@ -9278,19 +9330,19 @@ TODO: explain what is actually a Cookie
-What is HTTP Pipelining?
+What is HTTP Pipelining?
-What is a proxy?
+What is a proxy?
-What is a reverse proxy?
+What is a reverse proxy?
-What is CDN?
+What is CDN?
@@ -9300,7 +9352,7 @@ TODO: explain what is actually a Cookie #### Load Balancing
-What is a load balancer?
+What is a load balancer?
@@ -9485,7 +9537,7 @@ You know the best :) You can use and elaborate on one or all of the following: * Passion -* Motivation +* Motivation * Autodidact * Creativity (be able to support it with some actual examples)
@@ -9532,11 +9584,11 @@ These are only a suggestion, use them carefully. Not every interviewer will be a
What is the current level of technical debt you are dealing with?
-Be careful when asking this question - all companies, regardless of size, have some level of tech debt. +Be careful when asking this question - all companies, regardless of size, have some level of tech debt. Phrase the question in the light that all companies have the deal with this, but you want to see the current pain points they are dealing with
-This is a great way to figure how managers deal with unplanned work, and how good they are at +This is a great way to figure how managers deal with unplanned work, and how good they are at setting expectations with projects.
@@ -9547,7 +9599,7 @@ setting expectations with projects.
What was your favorite project you've worked on?
-This can give you insights in some of the cool projects a company is working on, and if +This can give you insights in some of the cool projects a company is working on, and if you would enjoy working on projects like these. This is also a good way to see if the managers are allowing employees to learn and grow with projects outside of the normal work you'd do. @@ -9878,8 +9930,8 @@ Read about it [here](https://en.wikipedia.org/wiki/Cache_replacement_policies) You can mention: roll-back & roll-forward -cut over -dress rehearsals +cut over +dress rehearsals DNS redirection
@@ -10036,7 +10088,7 @@ Below you can find several exercises * [CI for open source project](exercises/ci_for_open_source_project.md) -#### Python +#### Python * [grep before and after](exercises/grep_berfore_and_after.md)