You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: topics/software_development/README.md
+55-10Lines changed: 55 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -41,6 +41,8 @@
41
41
42
42
<details>
43
43
<summary>What programming language do you prefer to use for DevOps related tasks? Why specifically this one?</summary><br><b>
44
+
45
+
For example, Python. It's multipurpose, easy-to-learn, continuously-evolving, and open-source. And it's very popular today
44
46
</b></details>
45
47
46
48
<details>
@@ -60,18 +62,30 @@ Statements are instructions executed by the interpreter like variable assignment
60
62
61
63
<details>
62
64
<summary>What is Object Oriented Programming? Why is it important?</summary><br><b>
65
+
66
+
[educative.io](https://www.educative.io/blog/object-oriented-programming) "Object-Oriented Programming (OOP) is a programming paradigm in computer science that relies on the concept of classes and objects. It is used to structure a software program into simple, reusable pieces of code blueprints (usually called classes), which are used to create individual instances of objects."
67
+
68
+
OOP is the mainstream paradigm today. Most of the big services are wrote with OOP
63
69
</b></details>
64
70
65
71
<details>
66
72
<summary>Explain Composition</summary><br><b>
67
-
</b></details>
68
73
69
-
<details>
70
-
<summary>What is a compiler?</summary><br><b>
74
+
Composition - ability to build a complex object from other objects
71
75
</b></details>
72
76
73
77
<details>
74
-
<summary>What is an interpreter?</summary><br><b>
78
+
<summary>What is a compiler and interpreter?</summary><br><b>
"A compiler is a translator used to convert high-level programming language to low-level programming language. It converts the whole program in one session and reports errors detected after the conversion. Compiler takes time to do its work as it translates high-level code to lower-level code all at once and then saves it to memory."
85
+
86
+
Interpreter:
87
+
88
+
"Just like a compiler, is a translator used to convert high-level programming language to low-level programming language. It converts the program line by line and reports errors detected at once, while doing the conversion. With this, it is easier to detect errors than in a compiler."
75
89
</b></details>
76
90
77
91
<details>
@@ -84,35 +98,52 @@ SOLID design principles are about:
84
98
85
99
SOLID is:
86
100
87
-
* Single Responsibility - A class should only have a single responsibility
88
-
* 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.
101
+
* Single Responsibility - A class* should have one ~responsibility~ reason to change. It was edited by Robert Martin due to wrong understanding of principle
102
+
* Open-Closed - A class 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
89
103
* 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
90
-
* Interface segregation - A client should never depend on anything it doesn't uses
104
+
* Interface Segregation - A client should never depend on anything it doesn't uses. Big interfaces must be splitted to smaller interfaces if needed
91
105
* Dependency Inversion - High level modules should depend on abstractions, not low level modules
106
+
107
+
*there also can be module, component, entity, etc. Depends on project structure and programming language
92
108
</b></details>
93
109
94
110
<details>
95
111
<summary>What is YAGNI? What is your opinion on it?</summary><br><b>
112
+
113
+
YAGNI - You aren't gonna need it. You must add functionality that will be used. No need to add functionality that is not directly needed
96
114
</b></details>
97
115
98
116
<details>
99
117
<summary>What is DRY? What is your opinion on it?</summary><br><b>
118
+
119
+
DRY - Don't repeat yourself. Actually it means that you shouldn't duplicate logic and use functions/classes instead. But this must be done smartly and pay attention to the domain logic. Same code lines don't always mean duplication
100
120
</b></details>
101
121
102
122
<details>
103
123
<summary>What are the four pillars of object oriented programming?</summary><br><b>
124
+
125
+
* Abstraction - you don't need to know how this class implemented. You need to know what functionality does it provide (interface) and how to use it
126
+
* Encapsulation - keep fields for class purposes private (or protected) and provide public methods if needed. We must keep the data and code safe within the class itself
127
+
* Inheritance - gives ability to create class that shares some of attributes of existing classes
128
+
* Polymorphism - same methods in different contexts can do different things. Method overloading and overriding are some forms of polymorphism
104
129
</b></details>
105
130
106
131
<details>
107
132
<summary>Explain recursion</summary><br><b>
133
+
134
+
Recursion - process (or strategy), when function calls itself. It has recursive case and exit case. In recursive case we call function again, in exit case we finish function without calling it again. If we don't have exit case - function will work infinite, until memory overload or call stack limit
108
135
</b></details>
109
136
110
137
<details>
111
-
<summary>Explain Inversion of Control</summary><br><b>
138
+
<summary>Explain Inversion of Control (IoC)</summary><br><b>
139
+
140
+
Inversion of Control - design principle, used to achieve loose coupling. You must use some abstraction layer to access some functionality (similar to SOLID Dependency Inversion)
Dependency Injection - deisgn pattern, used with IoC. Our object fields (dependecies) must be configurated by external objects
116
147
</b></details>
117
148
118
149
<details>
@@ -129,15 +160,29 @@ True
129
160
130
161
<details>
131
162
<summary>Explain big O notation</summary><br><b>
163
+
164
+
[habr.com](https://habr.com/ru/post/559518/) "We can use Big O notation to compare and search different solutions to find which solution is best. The best solution is one that consumes less amount of time and space. Generally, time and space are two parameters that determine the efficiency of the algorithm.
165
+
166
+
Big O Notation tells accurately how long an algorithm takes to run. It is a basic analysis of algorithm efficiency. It describes the execution time required. It depends on the size of input data that essentially passes in. Big O notation gives us algorithm complexity in terms of input size. For the large size of input data, the execution time will be slow as compared to the small size of input data. Big O notation is used to analyze space and time."
132
167
</b></details>
133
168
134
169
<details>
135
170
<summary>What is "Duck Typing"?</summary><br><b>
171
+
172
+
"When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."
173
+
174
+
This is direction in programming, where we are checking properties of object, but not it's type
0 commit comments