This video demonstrates a comprehensive Python technical interview covering fundamental concepts including mutable vs immutable data types (lists, dicts vs numbers, strings, frozen sets), hash table internals and collision resolution, concurrency models (asyncio vs multithreading) and the Global Interpreter Lock (GIL), database systems (PostgreSQL ACID properties, transaction isolation levels, indexing strategies), and architectural principles (SOLID, microservices vs monoliths). The interview illustrates how senior developers assess candidates' depth of understanding through probing questions about implementation details, trade-offs, and practical considerations in real-world scenarios.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Открытое Python-собеседование с ментором из E-comAdded:
Vova, can I ask you to start off by telling us about yourself, what you do, who you are, and so on, and then talk about your experience, Artem. Then we'll come to this, to the Social Security Office itself, while everyone is gathering here. OK. Yes.
Ah, so. This is Vova. Firstly, I have about 5 years of commercial experience with Python. During all this time, I worked, well, I would say, in two companies.
Ah, here is the first company, it’s like, when I started, ah, it was something like m CRM, and there are different branches, uh, work with your own CRM system.
Here. And now the current company is an analytics service. And, accordingly, we provide marketplaces, work with marketplace descriptions, provide sellers with information about, for example, competitive analytics, and some prices, products, inventory, that is, everything that sellers live on on marketplaces, we try to provide them with all of this. Covers a wide range of integrations.
Well, it’s clear that the main ones there are VBSHA, Ozone, Yandexmarket, but we have quite a lot of them in general. I didn't even know that there were so many of them. Well, something like this.
Artyom, tell us about yourself.
Yes, my name is Artem. I work as an engineer at GKtekh. Well, basically, this is my, basically, only first company. I came here immediately and have been here for more than 3 years.
And according to the tasks, we introduce various agents into marketing processes, making the lives of colleagues easier, accordingly, I work in the marketing department.
Some AI agents, yes, that's all the latest fashion, AIPe and so on.
And what did you use to work directly with the rag? Eh, well, with rag, and with longgraf, and longchain, that is, everything in a row. Also, I introduced the model at one time. Yes.
What is your main stack like?
But mainly Python, FAP, and Longchain with Longgraph for AI. Yes. Yes.
What frameworks did you work with?
I worked with Djngo, but from the main ones, here is Fastapi PoidentStream from our domestic developers. And from the queues I touched Taskika. This is an asynchronous selari, also from the guys from Fastrim. Uh-huh, uh-huh, I see. Okay, let's start, I guess, right from the very base.
Ah, so these are the types of data we have.
Well, by class they can be divided into mutable and immutable. Yes. Do you know which ones are mutable and which ones are unmutable?
And mutable ones are dictionaries, lists, and, well, in general, all those objects for which, uh, you can’t calculate the hash. Yes. Yes.
Immutable are immutable objects whose hash can be calculated. These are numbers, strings.
Ah, well, we generally refer to numerical data, there is FR, number and so on, int. Yes.
Do you know this Frozen set? Yes.
This is a frozen immutable tuple. Oh, not a cortege, a set. Well, that could be it too. Yes, we also have Frozen in 315, I know.
appears. Yes. Yes.
Ah, so. Well then, the first question right away. For example, we have a set. Yes.
Can we, for example, put some mutable data type there? Yes.
We can put mutable data into the set. Just because it's the most changeable doesn't mean you can put anything in it.
Well, these are these tricky questions.
Now I need to think.
List or A, well, I guess that's possible.
Well, that's not possible at all. There, like, if you try to uh do this, there, uh, we will get a typo error, like, it’s generally connected to the fact that the site itself internally uses the hash table for quick searching. For example, if we have a mutable object, and its hash can change, and, well, then the structure of the set itself will break. Yes. Yes.
Well, what the set is based on, you know, right?
On hashtables. Yes.
Yes, what did you say? Well, I just wanted to check. Ah, look, we have, for example, we have, well, for example, let's take tle.
Can we, for example, put a list in tle? Yes.
Yes, we can in Tapl. And if, for example, with this list inside, ah, make it the dictionary key?
Ah, it seems that this is also possible. With a key.
Ah, a cortege with a list, right? Yes.
What type of data is a list for us?
Changeable.
Ah, and what kind of keys should they be?
Unchangeable. Yes. The answer is no.
It is forbidden. Absolutely right. Well, because, for example, if we have some mutable data type in TAPLE, it’s just, well, no matter what the keys are, they must be hashed, that is, hashable types must be immutable.
But I would like to ask you, you know, what do we have, for example, how can we, for example, store numbers, like with floating point? Do you mean how they are written in binary?
Well, well, here are fractional numbers in general, how can we store them in Python? In what form?
Um, well, like, there are ints, there are floats, you know?
Ah, well yes, there is a fleet, there are fractions, there are also Nambayevsky fleets with different ranks. Are you familiar with desimole? I am familiar with desiccant, but have never worked with it.
Well, yes, he is quite specific. Do you know what the difference is between a flat desino, for example?
Ah, well, the fleet has a certain precision, uh, there are some bytes, I think 32 bytes.
And desimole has a higher accuracy, it is used more, probably, in financial transactions, most likely, where the accuracy of the mantisa is very important.
Well, yes, yes, actually, yes. Ah, in general, the main difference between float and decimal, like when would you use which?
Mm, well, if I don't care about any accuracy, I would use the fleet.
If the accuracy of some financial transactions is important to me, as I already said, in translations and so on, I would use Decimal. In banks, deimal is probably often used. Yes.
Even under the hood it's arranged differently. stored differently in memory than the decimal data type.
So, for example, we want to compare two floats, for example, how to do this?
through comparison operators, yes, but there may be inaccurate information there, there is something specific there. You don't know, do you?
Ah, well, maybe the order of the manti before some rounding may still exist.
Well, that's an option, but mostly Mes close is used.
But I would say that, well, not everyone just needs it. Here. But it's good to know that too.
Well, this is the first time I've heard of it, by the way. M is close.
Yeah, that's cool. Ah, well, that's good. Ah, I would like to torment you a little more about mutability. I would like to know, for example, how we can define an immutable object.
What options do we have?
Precisely unchangeable.
Well, he probably shouldn't have the sh method in his implementation. Yes. Yes.
That is, this is some kind of user class that does not have a danrhsh.
Look, here comes the question. For example, if we, a, apply a hash to a variable, what will happen? Have you ever tried it?
Ah, the error will not be unhasable type, in my opinion.
Yes, yes, yes, yes. There the exception is thrown of type error and unhasable type. Yes, that's right.
Ah, okay, let's, for example, uh, well, let's say, let's take sheets of paper. Ah, you know what, yes, there is some kind of difficulty accessing the element. Yes. Well, look, for example, let's just take some sheets of paper. And, for example, the operation is access by index.
What kind of difficulty will we have there?
M, unit of operation. Yes.
And, for example, if we are looking for an element A from N linearly, right? That's right. Ah, good. And, for example, we add and we add, for example, something e to the sheet.
Well, also linear.
Linear. And in what case will it be linear?
And if not to the end? Well, it depends on the foliage arrangement. If we're talking about a regular sheet in Python, inserting into the middle costs linear complexity, and inserting into the end costs one.
So, for example, in the middle, can you explain what’s going on there?
Ah, this is for the fact that, well, this happens because you need to go to the middle, find the middle, and insert this element into the middle. And for the element that is before the one we are inserting, change the link to a new element, for the new element, put a link to the second part, the second part in the middle of this list. Here. Yes.
Well, yes, there the elements shift to the right, yes, it works for Aten, it works, yes.
Ah, good. And, for example, if we take dicts and, well, for example, add some element there to the dict.
And the dict is also a unit. Yes.
Why?
Well, there too, damn, what is it based on?
Also on hash tables. Basically, we need to calculate the hash and put the value according to this hash. Yes. Yes.
Well, actually, yes. But, for example, if you delve deeper into the hash table, what does it actually consist of? How would it be arranged?
In general, it looks like a list, and a list of buckets. And under each bucket, in each bucket we have a value.
Fine. Ah, and how, for example, are these values calculated?
Ah, through a hash function?
Well, that is, in a hash table there is some kind of hash function, and there are, uh, some values that are obtained and, for example, the keys themselves. Yes.
Ah, well, I would simply say that this is separate, this is still separate. That is, this is generally called a recording array, like it is ordered. There is also an index array in the hash table - this is the real hash table, and it stores these positions of the elements. That is, it is not ordered and is generally used only for quick searching.
Here. Ah, well then I have a question, for example, about, uh, about the list. If we add, uh, an element to the end of the list, you said it would be O1.
And will it always be O1?
Oh, no, that's an amortized value. What if we have a list of a billion items there? That is, a unit is a flexible concept depending, well, on what we are working with. Yes. Yes.
Actually, yes, because we'll have O1 most of the time, but we have rare resize operations, like we can't predict when they're, uh, even happening. There are few of them. And it is precisely during these resize operations that we will have OAT.
Here. And in our hashtables we have, let's say, such a feature as a collision. Can you tell me something? Oh, yeah. A collision is when a hash function, a, calculates a value that already exists in our dictionary.
This means that we get two hashes, i.e. double entry by hash. Yes.
How can we prevent such situations? How does Python even resolve them?
Ah, there is a certain algorithm there. Mm, I don't remember what it's called, either nate or something like that. And he himself resolves all conflicts.
But in general there are a couple of methods for resolving collisions. These are chains and I forgot the second one, I don’t remember. Yes.
Maybe it has something to do with arrays and lists too. Are you familiar with the open addressing method?
Well, this is probably the second one that we are familiar with. Forgot.
No, there, uh, well, this is, let's say, a method when we, uh, the index of the next cell, it is removed, well, let's say, in a pseudo-random manner.
And due to this, it is as if it is allowed, well, uh, to find such a place, uh, free in the hashtable. and, uh, the element is inserted.
Here. Ah, okay. I would like to know from you about mm pro and such methods as new and init. in what situations and what situations we call there may be.
But here I don’t remember exactly. Ah, but it is called before init, that's for sure. And init is called when a class instance is created.
And new is not called when creating, well, also in theory when creating an instance of a class or when creating a class, in my opinion. Yes.
And init when instantiating the class. Yes.
Well, it's easier to understand, like new, it creates an object. It's like this is the constructor itself, and Init already initializes it.
There seems to be some kind of stake there. Yes, yes. Yes. Do you know what the stake is for? I just know that it exists.
Fine. We have, uh, a slet pattern there.
Hey, do you know him?
Yes, a class can only have one instance. Yes. Yes.
Ah, well, there's the call method, it kind of allows class objects to behave like functions.
And, for example, here is a callable of type colable. Yes.
For example, we need this for some, uh, I don’t know, work with a decorator, when we can, for example, write a decorator class in the decorator. To write a decorator class, we need exactly this method so that the class is callable.
Ah, that's it, I understand what stake you're talking about, or rather, yes. Yes. Can you tell us anything about the decorator? Maybe you'll use it for something?
Usage.
Well, this is one of the patterns in Python - these are separate functions that take functions as arguments and return functions. If we talk about a pattern, then it’s just hanging some additional logic function without changing its internal specifics. It's mainly used for, well, maybe some metrics, to attach metrics to a function. Retry decorators, the most popular.
There are also decorator parameters.
Ah, and we can write a decorator class, right?
With what method?
Well, I guess the number needs to be determined. Yes. Yes. Yes. Yes.
Well, that is, a decorator can be used, as it were, in addition to a function, also a class.
Here. And we have a class attribute called slats. Do you know him? Yes.
Ah, well, it optimizes object instantiation a little. That is, we define the structure of the properties of the field class in advance. And there it works a little faster, but only if we have a lot of objects, more than a billion, millions of things like that.
And look, for example, when we create, for example, some object, it has class attributes, what kind of, uh, data type is used for instances of the object class, probably for an instance of the class.
Well, the data type is probably this class.
or, well, generally like dicts, dicts, so that, for example, slots, so to speak, allows you not to create a dict, but to use some kind of fixed array, uh, to store, so to speak, attributes. And you said something about the object? And we have a metaclass in Python. Can you tell me why they are there, what they are for? Or maybe you know some basic metaclass?
Our main metaclass is typйe. Yes.
All classes of which are derived.
Ah, uh-huh.
Needed to create classes. Metaclasses are classes that contain other classes as attributes. Yes.
And, as far as we know, metaclasses are often used in Django.
Metaclasses can also be used in singletons. Yes. Yes.
Okay, okay. Let's talk about OOP, I'd probably like to know in more detail what it is, maybe what the three main principles are. M,encapsulation, polymorphism and inheritance. Yes.
And if we talk about encapsulation, then this means hiding data and class implementation within the class itself.
This is not just about private attributes in other languages. This is public private protected. In Python this is implemented through underscores. but also about hiding the implementation of classes themselves, so that it would be like a blackbox. Yes.
Inheritance. Well, it's basically like in Python, where after a class we write parent classes.
The ability of classes to adopt the functionality of parent classes or override it. Yes.
But polymorphism is the hardest thing for me to tell someone about. I myself understand it more or less. In general, this is probably, if we speak in our own words, when a class can, uh, migrate to the behavior of another class. Yes. Yes.
I would say it's more for, uh, working with, well, with different types of objects. That is, it allows you to use some kind of unified interface. Yes.
Ah, well, overall, yes, overall you're right. But there is an abbreviation called Solid. And it also seems to be considered as principles. Do you know her?
Ah, yes, I don’t remember that very well either.
So, a couple of principles.
Single responsibility, open closed, the Lisk principle, and I don’t remember the other two. Interface and dependency. In general, can you tell the essence of each one or not?
Regarding single responsibility, a class should be responsible only for its own logic and should not implement the logic of another class that, logically, does not belong to its semantics. Yes. Yes.
And open closed means that the class should be open for extension, but closed for modification.
For changes, in general, and the Liskov principle is that we cannot change the logic in child classes, well, to be more precise, the signature of the base methods of the base class.
Mm, I don't remember about the rest. Yes.
Mm, okay, okay. Ah, for example, look, we have, uh, mm, we have, for example, iterators and generators. Can you tell me what it is used for if you know it?
Well, we mainly use iterators when traversing collections. And generators are used for, well, lazy calculations, for processing large memory objects efficiently. Yes.
And what is the main difference, so to speak?
And generators implement the same methods as the iterator, but with the condition that y is used in the Dernx method. Yes.
What methods does an iterator have, for example?
Next. Yes. Yes.
And so it's good, good. Overall it's clear. Let's talk about synchronicity, I guess.
We have, well, first of all, you can talk about concurrency in Python. And what types are there, so to speak, how do they differ?
I would highlight three methods, the competitive method. Wait, no, probably two. With competition, we have two. This is asynchronous and multithreaded. Yes.
With multithreading we use preemptive multitasking, and with synchronization we have cooperative multitasking.
Here.
But, for example, look, we have, uh, uh, well, you said, yes, about asynchronous. For example, look, we have a multi-probe.
and multithreading. But what are the differences between these two species, so to speak?
And in Python, within a single process, our threads are limited to a single interpreter thanks to Gil. Yes.
And in our processes, accordingly, each process has its own interpreter, and we can, it turns out, perform some computing operations effectively in the processes. In multithreaded interaction, computational operations run inefficiently, only in one thread. Yes.
Fine. And we, well, for example, have how we, how we communicate between, for example, processes, how do they communicate with each other?
And through the synchronization primitives.
And what kind, you know, pipes, locks, semaphores, events, barriers, air conditioning.
Well, it's more of a blockage. Here is pй shemory. Yes. Ah, can you tell us something about them or have you not worked with them?
Sharemory hasn't worked with interprocessor pipes. Yes. Have you worked with multithreading at all?
It worked, but mostly with asynchronous ones. Yes.
Mm.
But, for example, look, we have, you said, synchronization and multithreading.
What is the difference anyway?
And with multithreading we have several threads, in asynchronous we have only one thread, respectively.
And, well, in principle, at the computer level it works differently. The fact is that with multithreading, our task scheduler itself decides which threads will be executed at a certain point in time. And in asynchrony, in the asynchronous approach, the caroutines themselves say that they have become free. and can begin execution.
And you said multithreading, it is limited to one thread from Agil. But I just want to understand then why asynchronous and multithreaded systems are needed.
Here, in principle, it is worth distinguishing between two classes of problems. This is when we have CPO calculations and bound tasks.
If we talk about CP calculations, then according to the structure of the software object we have a rifunter, which can be modified by several threads in a race condition. That is, uh, some thread can, uh, consider one value, and can change another to another. We may have some anomalies from this.
Here. and the object reference count will be incorrect. That's why we've introduced a global interpreter blocker to resolve situations like this.
And if we talk about AOS tasks, then they mainly use caroutines, which can wait for some asynchronous connections. Yes.
Well, trips to the database, then accessing the Internet.
Well, that is, some CPU bound tasks. Would you allow it to be multithreaded?
No, I would run them on multiprocessors.
Yeah. Yeah. Ah, so. Fine. So what's the difference between asynchronous multithreading if we have all of this as its own bounce task?
Now.
Well, okay. In asynchronous workflows, we use asynchronous sockets, which can work effectively with asynchronous workflows in multithreaded environments if we are executing a CPU task. But we have one interpreter that uses all the threads, that is, they are blocked, roughly speaking, a locker is used there. Where do you get CPU ban tasks in multithreading? I don't understand. Ah, okay. Ah, that's it, I get it. No, well, you can use multithreading for her task bounty.
Okay, okay, okay, okay.
Well, in general, what is Gil’s purpose? It's just that, in your understanding, why is Gil needed at all?
Well, to resolve thread race conditions, work efficiently with memory, and not worry about garbage collection. Yes. Yes.
Well, in general, why?
to protect your data or not, not to protect data, but for the correct behavior of the program.
Well, that is to say, he can’t protect your data in any way.
But if we store data in a variable of variables, then that’s it.
Goodbye, Artyom.
It was a fascinating ride.
Well, come on. Ee Gil ousted Artyom.
Sorry, I'm here. I had a micro internet outage. So, if we are talking about protecting variables, then it can be protected because some thread can delete the variable. Yes.
And someone else can write it down there. And in that case we may lose the variable. Well, that is, in this case the collector can delete our object, which still has links. Yes. Yes.
Ah, do you know anything about, for example, POL Executor? Do we have such an interface? Or maybe you can tell us something about him?
Oh yeah, he's in modules in competitive futures, I think.
needed to use the thread pool. That is, we already have a pool of created threads, we can manage them, and distribute some tasks between them. Yes. Yes.
Well, yes, it queues tasks and distributes them between threads.
Aaa so good. And you and I touched on e- blocking options.
But you said, locks, erlocks, semaphores. In general, here is a lock and a semaphore, well, how are they different, what are they for?
Essentially, a semaphore is a lock with, or more precisely, a lock is a semaphore with one m pancake with one. I can't find the condition.
So, it has two options: blocked and unblocked by the lock, right? Iliz, naturally. Yes.
Well, they are needed in order to Well, in the ur locker they are needed in order to not allow more threads or caroutines into a certain fragment of code.
And the semaphore is greater than N. the number of these, uh, threads or coroutines. Yes.
Well, yes, that’s true, so to speak, the counter is e and there, well, accordingly, it can have some greater meaning than one. I wanted to talk to you about carutina and event loops in general.
What is karutina?
And carutina in Python is def.
Ah, and in Russian, for those who don’t understand.
Well, in Russian it’s a coroutine, probably a subroutine.
Well, what can she do on her own in Python?
Is this some special type of function that does what?
She takes control in the event loop, intercepts.
How? I probably said some nonsense just now.
And so we roll back. Let 's roll back. We have evventloop running around, well, constantly chasing these carotins there, looking at what carotins we have freed up. Essentially, the carutina can say that she is free, and the screwlob will hand over control to her.
What is the essence of karutina as such?
And the fact that it can start from the moment, damn, how can I say? Well, that is, we can transfer control to the caroutine, and execute this caroutine in the parent caroutine that we called, continuing from the place where we called this caroutine. Yes.
Well, she has the opportunity, yes, to sort of pause, let it be another one, yes, yes. And giving up control, for example, to another, a crutch, a karutin, no matter what. And then it can sort of resume its work from where it left off. That's kind of the point of it.
Ah, can we run several caroutines at the same time? Yes.
With the help of what?
With the help of tasks, with the help of create task, I mean, with the help of Ger. Yes. Yes.
Mm. U.
Yes. And you mentioned Futura and Taska.
Ah, what is this anyway? What are they for, what do they do?
Okay, good, good.
Look, then I have a question about Osinkai and multithreading.
But I, for example, think that the aspen yo, it can be faster than the multi-bot. What would you say to that?
Well, there is some truth to that.
And in what exactly?
Why? Why should we, how should we determine what to choose?
It's like if you compare them.
And if we compare approaches, then in the case of, well, I recently saw a comparison of synchronous servers of Azgi and SG.
Well, asynchronous web server and synchronous in some cases, depending on the context, asynchronous is faster.
And due to the fact that our threads can be idle, and also in the threads there is such a moment with context switching. It's heavier than in the karutins. This means that it is more difficult for threads to switch context. If we have, say, a lot of threads, then they can create a very large amount of overhead. Yes.
There aren't that many overhead costs in paintings. And due to this, they can show a greater increase in productivity on a larger number of tasks. Yes.
Ah, look, for example, ah, downloading files, for example, or some kind of parsing. What would you choose for this?
For partnering, I would probably choose asynchrony.
Why?
Now you'll say that I've been tormenting you for 20 minutes with the synchronizer. We've encountered worse.
No, well, it’s not clear that you probably worked with this a little, but it’s as if I would like some understanding.
But still, here it is. Okay, let's move on to the databases.
What were the main databases you worked with?
But I mainly worked with Pozgrya. Yes.
Well, from relational ones, and from non-relational ones with Redis and to a lesser extent with a vector DB.
This was our elastic. Yes.
What is the difference between relational and non-relational?
When to choose which one?
And in relational ones we use entities. There are no non-relational entities, that is, there is no strict structure. Yes.
That is, if we need structured data, then we choose a relational database. If structure is not important, then we choose a non-relational database. Yes. Do you know Acid? Yes.
Set of requirements. Yes.
to transactions. Yes.
Ah, well, those are the four properties of transactions: atomicity, consistency, isolation, and durability.
I think that's what they call durability, right?
Reliability, rather.
But if we talk about atomicity, then, roughly speaking, we have a set of skeleton commands that can either be executed or not executed. Yes.
That is, there is no other state given; they cannot be half-fulfilled. That is, either the whole set, or nothing. Yes. Well, yes.
There are no intermediate states. Yes.
As for consistency, this means that we may have some restrictions in our database, and within a transaction these restrictions cannot be violated. That is, we may have some kind of data type, well, some kind of basic validation in the database, there more than five, there less than zero, and so on. Yes.
Isolation is when multiple sessions in a database change the same data.
There are four transaction isolation levels.
They resolve different types of anomalies. Yes.
And regarding reliability, it’s worth mentioning here that if some critical infrastructure failure occurs, we are confident that our data will not be lost. Yes.
And you mentioned isolation levels.
What are the levels of insulation?
Four levels of transaction isolation.
By default, most of us are read committed. And the most unreliable one is read committed.
It doesn't solve any of the anomalies, there's dirty reading and so on. And read committed already solves the problem of dirty reads, but it doesn’t solve non-repeatable reads.
Repeatable read solves all the previous anomalies, but Repeatable Bриit does not solve the remaining anomalies, or rather, serialization anomalies, so to speak. And the last level is serializable, it resolves all anomalies independently, and does not allow two parallel sessions to change the same data. That is, our transactions must be executed sequentially at the pozdrili engine level. All this is Uh-huh.
is being implemented.
Fine. But there is phantom reading, what is it connected with, why does it occur? A natural read occurs when, when working with two transactions, well, with several transactions, more than one, the first transaction can read some data under certain conditions, and the second one can change it. Moreover, during the second transaction, when we changed the data, the first one will still consider that the condition is met.
This means that the consistency of the databases may be disrupted.
Well, this is not so much a repeating read, but a phantom read - it is still about one transaction. That is, when it executes, for example, two identical queries, it receives different sets of rows, because some other transaction has already added or deleted rows that matched the query conditions.
Still, nonreable read is when, for example, one transaction reads data, and then before it completes, another one modifies or deletes it. And, accordingly, when we re-read the data from the first transaction, it sees these modified values.
Here.
Yes, I got it mixed up. Yes.
For example, when working with the database, did you somehow optimize it, or maybe, I do n’t know, tables, queries?
Mostly it didn't fit. Our database was not very busy. Yes. I did n't have to. Do you know anything about XLIN Explain Anli?
Ah, well, XLIN does output a query plan.
Explain analyze it outputs the query plan and its query execution plan. That is, roughly speaking, he carries it out. Yes. Yes.
Fine. Ah, good. For example, we have, what types of indexes do you know? Eh, posgre, for example, well, the most basic binary bitri index. Oh, oops, not binary, but B3. There are also sh indexes, hist indexes, sprt indexes, and so on. Yes. Yes.
Well, there is Jin, Dist, BN, there are a lot of them in general.
Ah, okay. So this begs the question: where is it better not to use indexes, in which tables?
And, in tables with frequent writes, because after writing, the index structure needs to be rebuilt and rebalanced. Yes.
M. M, and if, for example, we have, uh, in some columns, uh, a lot of catches, what should we do?
Or, for example, some, uh, I don’t know, small table. What should I do to solve this?
Well, in general, I just want to know about indexes. I just said one option with indexes worked at all?
No. Yes.
Okay, fine. Ah, look, astshka, do you know what this is?
No, ah-ah, like a table, a generalized tabular expression. Ah, unfamiliar, huh?
Temporary table or what? Yes. Yes. Here's some kind of pattern.
Didn't understand. OK.
And so it's good.
Do you know what a vacuum is used for in puzzles?
To clear the log file, to clear the row versions. Yes. Yes.
There is an auto vacuum and a regular vacuum, yes. There is an autovacuum, there is a regular vacuum, there is a vacuumf, there is vacuum analysis. There are a lot of them.
Ah, good, good. Ah, what types of joints do you know?
A, cross join, left join, right joint and outer on each left and right. Yes. Have you worked with brokers?
But mostly only with cocoa.
Caucasus. Ah, and what does cavka consist of?
From parties, from consumers and producers.
Producers are probably more concerned with the client side. Well, mostly about consumers and partitions.
Well, I agree with the producer and consumer.
Ah, but I would highlight four parts, like there is a broker as the main server iper. Yes.
Well, first of all, this turns out to be a storage facility.
Well, she kind of monitors the state of the entire, uh, Caucasian cluster, so to speak. Fine. But, for example, look, uh, there is a guarantee that Kavka, uh, so to speak, guarantees this order of messages within the framework of, for example, a topic, partition.
And within the partition, we are guaranteed order within one partition, right? Yes. Yes.
A, for example, a, for example, within one section, for example, cavities, within a topic.
Order is not guaranteed. Yes. Yes.
And, for example, look, in Kaifka, well, I don’t know, for example, there are 10 consumers, ah, a topic and five partitions. Will they work like all consumers?
10 parties and five consumers, right?
Ah, well, for example, 10 consumers and five parties.
And the remaining five will remain idle. Yes.
And the first five will be carried out.
Well, because the message between the parties is distributed, oh, between the consumers, or rather, no, it is distributed evenly between the parties. That is, one party can have one consumer.
Well, yes, but what if there are two or more, for example, consumers, they cannot read from one partition in a group then.
In general, when should you use a broker?
For what? For what and under what conditions?
For synchronous interaction.
Well, I'm not talking specifically about Kavka, I'm talking about a message broker in general for reliable data processing, for streaming data processing.
Well, for example, you have a microservice architecture. Yes.
But in any case, you will have to use a broker to somehow communicate between, say, services. Uh, for example, in Kafik we have, uh, a message delivery guarantee.
Do you know which ones?
Oh, yes, they're called accollegements.
There are three types of attachments.
And the latter guarantees that both the master and the syncretists will confirm, uh, the delivery of the message.
If it's zero, we don't guarantee delivery, so we don't need confirmation. At first, I don’t remember, some part, in my opinion, was confirmation.
Ah, good. For example, look, we have exactly ones, which, well, will 100% be delivered once and without duplication. How does it work anyway? Are you talking about idempotency or not? Well, I mean, I just want to understand from you how you, so to speak, how it works inside. For example, we have atmost Ones, yes, at least ones, when we have, for example, atmost Ones, when we can have it delivered either once or not delivered at all. Like, why? Why do we have atlist ones, which, well, implies that the message will be delivered at least once, but duplication is possible? So why is this happening here? No, I don't know. Yes. Yes.
OK. Ah, good. Ah, so, regarding architecture, here’s a quick question in general – some kind of principles, you know, architectural ones?
Well, microservices and monoliths.
Well, okay, but, for example, we discussed principles with you. Here's Solid, for example, do you know any others? Yes.
MIS dry.
Do you stick to them at all?
Oh, of course.
Code frequency is the most important thing.
Well, within the framework of real code, I think it’s 100% impossible.
Here. Fine. And you mentioned architecture, for example, monolith, microservice. What is the difference, and when should we use which? In what cases?
Ah, well, probably microservices. Well, I probably won't answer why it's worth using manoliths, or why microservices. It's just that in some cases microservices are easier to support, and in other cases monoliths are easier. Ah, but monoliths are more difficult to maintain in a basic way.
Microservices are simpler, it is easier to scale microservices.
But, for example, look, in the Monolith, there’s this main, uh, the main problem in the monolith, uh, do you know what it is?
Why switch to microservices?
Maybe some integration testing?
May be. Okay, I won't bore you with architecture. Everything, in general, is clear. Did you work as a sker?
With what?
With a docker.
Ah, with a docker, but not really. Mostly on DevOps.
Okay, okay. Well, it's the same story with Kubera, right?
M. Well, okay. Uh, in general, everything is clear. I think we can finish. Uh, then I appear from 2007.
Oh, actually, yes, guys, what you saw was an interview that you can go through in the shortcut. While Vova is preparing the feedback, I'll tell you a little about the shortcut itself, uh, and then we'll get back to the feedback. But I really want to talk not only about shortcat, but also about the labor market. Actually, a shortcut. We are a mentoring program. We help developers achieve their career goals faster, advance faster, and, consequently, receive great offers faster, and so on, and so on, and so on. During our work, we conducted about 2,000 MOG interviews and more than 5,000 lessons with an average rating of 4.9, which helped our team receive more than 500 BKTch offers. Of these, yes, 75%, actually, were at BGITK.
The rest are small companies.
Actually, let's talk a little about the current IT labor market. Yes, it's important to say that the market has changed, and, accordingly, the requirements for auto jobs have increased, and, accordingly, resumes are often drowned in automated responses, and so on and so forth. Why is this happening? Yes, first of all, guys, this is due to the overall increase in competition in the labor market. It is measured, for example, by the HDHunter index. This is a thing that shows how many resumes we have on average for one vacancy. And now, on average, yes, the number of resumes per vacancy is twice as high as a year ago. What is this? Yes, that 's a lot, not much in general. Yes, high competition is considered when the Hunter Index is greater than 12. Currently, in IT, it's 22.
So, what caused this? On the one hand, guys, our number of vacancies is decreasing, yes, there is a crisis, and, accordingly, there are difficulties for many companies, financing adventures, and so on, and so on, and so on.
In fact, we have 36% fewer vacancies than last year and 50% fewer than two years ago. At the same time, the resume actually gets bigger, right?
20% more resumes than a year ago, 45% more than 2 years ago.
Accordingly, on the one hand, the number of vacancies is decreasing, on the other hand, the number of resumes is growing, and as a result, we get this div, yes, almost twice as much as we have compared to last year. In general, if just a couple of years ago the market was fine and you could find a job in just a couple of days, now you need to budget for several months, yes, m 3 4 5she and so on. That is, it became a full-time job. But on top of all this, of course, there are still lingoes, yes, these are mass layoffs, which are happening in European and American companies, and in Russian IT companies. Everyone has probably heard about such layoffs at VK or, for example, Sberbank.
And yes, all this together tells us about a crisis in the labor market, yes, for the worker. On the one hand, companies are cutting staff, but on the other hand, there are still no fewer new ones. On top of that, there's this added layer of the fact that there were a lot of people who were working before, who were your colleagues, and today they've been laid off. Plus neural networks, plus add here the fact that if you want to go to BICtech, then, accordingly, uh, if you didn't get in somewhere, uh, and at some stage, at the sixtieth interview, you failed at the sixtieth stage, which means you can only come back to all this again in six months. In general, the difficulty of finding a job has increased significantly. What should be done? First of all, of course, to raise your prices as a specialist, yes, to quickly grow your grade from internena, szhuna domedla, smedla to sinora, and so on.
Why? Because the higher your grade, the lower the competition there is.
What does it actually mean to grow a grade? Firstly, of course, you need to take on more, in general, a larger area of responsibility at work. If you want to grow at work within your grade, then, accordingly, you need to take on a larger area of responsibility, learn technologies, and so on. If you want to change jobs and upgrade your grade, first of all, don't quit your current job. Yes, it’s better not to do this, because the times are such that the search may take a long time. If you do, have a cushion for six months.
Actually, uh, yeah, guys, to improve your grade when you transfer, you need to learn how to pass an interview, including, yes, you need to improve your skills, plus learn how to pass Dima Tak.
Well, yes, my internet connection today is not very good, actually. But in short, guys, you need to improve your grade, you need to, and, accordingly, pass social security, you need to improve the conversion of your resume, and so on, and so on, and so on. We help with all this in the shortcut. We are the number one mentoring platform for Pyno developers in terms of the number of MOOCs conducted and the number of classes conducted, respectively. And we, our task, yes, not only uh, I do n’t know about you, uh, uh, let’s do something today, you see, uh, yes, I just got a call on my phone, and that’s why I asked, because I was distributing the Internet. Well, actually, we do help you to grow your grade faster. We help you pass interviews, help you create your resume, and, accordingly, help you level up in hard skills.
In fact, there are already more than 20,000 developers in our community. This is our YouTube channel, these are, accordingly, our Telegram bots, and so on. More than 2,000 people have completed, uh, our IOC and the, uh, training program.
More than 500 offers were received. And the average rating for a shortcut class is 4.9 out of 5. Actually, our goal isn't just to make you some kind of, I don't know, thing that you paid money for, practiced, and got nothing out of it. No. Our job is to make it a worthwhile investment, right? To make it so that with us you can, firstly, find a job faster, and secondly, accordingly, the job for which you find this new salary could pay off the investments that, accordingly, you made in us. But we are not a money button. The money buttons don't even exist. Therefore, we would like you to be prepared to devote at least 10 hours a week to your studies. This is usually several evenings and one day off. And, actually, then we will get such a fastrekfer for you. First of all, we will analyze your current situation, because you know very well what you need to improve. We will help you with your resume and do all of this. In short, we'll do everything we can to ensure you have great offers, and we'll do something no one else does. We guarantee, yes, that if you come to us, you will, accordingly, get five interviews, right? You come to our shortcut if you have a great midle or higher. We also agree on this for juniors, but each approach is individual. We say, if you come to us, if you pay this rate, then in this case we give you an extra five interviews.
Accordingly, if, for example, you yourself found some kind of security for yourself, contacted the company yourself, and so on, we do not count them in these five interviews. This is just an extra five interviews for you when looking for a job. The first step for us is the MOC interview. A mock interview is an opportunity to analyze what you know and what you don't know, and therefore, to understand your strengths and weaknesses, your current grade, and to honestly tell you how much you would be worth on the market now, and what you need to improve to earn a higher salary. And, accordingly, it’s also, of course, an opportunity to understand what they’re asking in which company, because we have mentors from all these large Russian and foreign companies. You can come to them, ask what they ask at the interview in their company and so on. And most importantly, guys, yes, if you don’t like the IOC interview for some reason, we have a universal shorts rule. If you don't like the mock interview, we'll refund your money. Actually, after completing the MOKA, we begin to work one-on-one with a mentor, right? Before each lesson, the cop sends you the theory so that you can look it up, study it if necessary, and then, accordingly, you move from topic to topic. And when you complete a topic, you will always have a mock interview on that topic with another mentor.
This is necessary so that you don’t just read something, but also so that we can make sure that you can answer it during the interview, among other things. So you go through some topic, and then you have a section with an interview on that topic.
Between classes, the mentor does not disappear anywhere. Accordingly, you can ask him questions, you can ask him to conduct a code review of homework or a subproject, you can ask him to provide material on the topic of homework, and so on.
Accordingly, further, yes, we have more mentors, more than 100 mentors in total. And these are people from all the big Russian IT companies and from small ones, yes, we also have guys, for example, Vova doesn’t work at Bektech. Eh, and we also help, accordingly, if you want, on the contrary, to join a startup or some small company without problems.
But among the BI-techs, we have mentors from Izzavita, Yandex, VK, EPAM, Uzum, Yandex, I already mentioned Yandex, well, never mind, Wildberries, Cooper, Sber. In general, any company you know, large Russian, we have a mentor from there. Why? Because we already have more than 150 of them. These are all, respectively, practicing seniors or leads or midle pluses. Uh, and you'll always have a mentor who's higher in grading than you, so yeah, uh, we do all this so your success story card appears in our collection.
We have more than 500 of them there. Well, these are my three favorite restomatings, actually. And the first cop, yes, came to us because he was fed bribes at work. They said that, in fact, we will definitely raise your gray level soon, brother. Just take on one more task, do something else, and so on. And but, of course, to what result did it translate?
He came to us, and we quickly assessed what he needed to upgrade his grade.
Accordingly, he came and in a month and a half he leveled up and went back to work with a new salary. The second man is here on the left, he, accordingly, uh-huh, he had the task of quickly finding a new job after being laid off from a large Russian IT company. There was no pillow.
Here we realized that we need to, in general, quickly, quickly have an interview. There's no time to improve your skills, no need to grow in rank, just need some kind of vacancy. At this point, Menti had already forgotten who to interview and sat in one place for a long time. We conducted 10 rounds of interviews and, accordingly, successfully found a job.
A-ah and further, well, and quickly, yes, so that, in general, it would be necessary to go into the minus in terms of money. And then there was the cop on the right here, who, accordingly, with our help, yes, was able to get a job as a lead. At the same time, she was a syndor before.
That is, we help not only with growth, from guide to guide, but we can also help you with some management skills, because among our mentors there are leads, moves, and other cool technical guys.
Next, guys, you go through the IOC, we will offer you one of the tariffs. Most often, they take the extended one, here in the center, because it is here that five technical interviews are guaranteed. But yes, we will still give you a choice in any tariff, well, in any case, we will give you a choice. We will tell you, uh, specifically for you, which tariff works best. Maybe you don't need classes at all, you're ready, you just need to finish your resume, and then you'll move on. But the first step, guys, is the IOC interview. And, accordingly, it costs 2,000 rubles for everyone watching us today. You can get it using this QR code, or leave a request for it using the link in the description. If you come to us for Mock, yes, then how will it be? You'll pay 2,000 now, then we'll introduce you to a mentor, set up a chat with them within one day, and you'll choose a convenient time slot for the call.
Usually, a slot is selected there plus or minus 3 days, yes, usually within 3 days. Well, if you, for example, want to pay for an hour, it could happen after the vacation, there, I don’t know, in a week, no problem. This is also possible. In fact, during this time, the mentor will conduct, uh, a one-on-one interview with you in an hour. The mentor could be from a specific company, it could be Vova, who conducted today's interview, or there could be other mentors from our channel. Within the framework of this, and yes, within the framework of this interview, you can discuss everything there, I don’t know, about Ptone or doing lifecoding or going through, for example, system design, depending on your needs. And then, accordingly, we will give you feedback, we will tell you what was good, what was bad, we will tell you what your current salary could be on the market if you enter the market.
Let's tell you, accordingly, what your next goal might be, what grade we can get you to, and what your salary will be at this new grade.
Accordingly, in order for, yes, uh, all this to happen, you only need to pay 2,000. And if for some reason you don’t like it, you can write to us about it within a week, and we will return all your money. That's roughly how things are. By the way, I could, uh, by the way, uh, sorry, I wanted to say something, but I forgot. Well, basically, yes, 2,000 rubles. just a little bit. If you don't like it, we'll give you your money back. Here, you can scan this QR code. I will ask Vova and Artyom to gradually return to us. Actually, Artyom has already returned. Vova has already returned it too. Vova, can I ask you something? I'll hold you guys for one more minute so you can scan this QR code, and in the meantime, I'll ask Vova to give us feedback on today's interview.
Ah, yes, I'm generally fast. Ah, good miid level.
Oh, Vova, I can't hear you.
Not Vova, you can hear me Vova.
Ah, yes, yes.
Damn, I have no sound. It's kind of muted. I'll probably try to log in again, I guess.
OK.
5 seconds.
Okay, can you hear me or not?
You can hear me, you can hear me. I can hear everything, Artyom. I can hear everything for now, Artyom.
Oh well. Come on guys, vote in the chat for now. Accordingly, give a plus to whatever grade you would give Artyom. I, if intern, j, if jниorр, M, if midle, S, if sinor.
Artyom, write what grade you would give in the chat or in the comments if you're watching the recording. In the meantime, a word.
Artyom, Gil won't let you go. Can you hear me?
Yes, everything can be heard perfectly. Gil definitely won't let me go. That 's it, Artyom, now you can't hear Artyom.
Well, in short, I listen to Artyom and Vova. Well, anyway, in short, now I can’t hear Artyom.
This is from vicious hands. In short, we're having fun. Eh, I'll try to be quick.
Overall the level is good, really middle. Ah, but when we start to delve into some, uh, moments there like, uh, multithreaded asynchronous, why, when you start digging, you feel like something is missing. Well, first of all, it’s clear that I’m looking at how you answer in any case, because when you answer confidently, I don’t want to ask about it, but when I see that you’re starting to think about something or something, I want to dig in and see what exactly you don’t know here, what exactly you don’t know here, and so on. Here.
In any case, it is necessary to look at all the competition and how it works, so that there is an understanding. Plus, we have to deal with Gel, because they swim very strongly. Here. Oh, and of course, I'd like it to work with most, let's say, some infrastructure aspects, so that there would be at least an understanding, not necessarily that it would work directly, but at least that there would be an understanding, and there, for example, with different frameworks, and different message brokers, not just with one. Here. Eh, well, and, accordingly, due to this, I would probably still raise the level. Something like that.
Thank you.
Artyom, how did you like today's interview? What do you think? I know that you were with us for a mock interview. Tell me how it was for you there, what did you like or not like?
Yes, everything is great. I liked both mock interviews. At the first mock I found my weaknesses. And they gave me a further plan on how to develop all these skills. But I have n't yet gained the necessary experience in the problem of lack of time. And the same moments that have just surfaced. That's exactly it.
Ah, so they said the same thing about the washers.
Well, yes, yes, I have tightened up some things, but I still have n’t managed to tighten up some things.
Brilliant, blissful. And who would you advise to pass the mog? Then I will have this question. Guys, if you have any questions, you can also write them in the chat.
Um, well, I guess for the developers who work, uh, well, it was helpful for me personally because I couldn't figure out my level. That is, basically all my colleagues were either at my level or at a lower level. And because of this, I developed some kind of impostor principle, some kind of impostor principle, that I didn’t know what grade I really was, no one could appreciate it. And in principle, to see where things could be different. That is, within the scope of my competence, I can be a mid-level or higher there. But if we're talking about some high-level project, then I might even be a junior there. Here. That is, there are moments where something stronger is required.
Brilliant, blissful. Thanks a lot. And then, guys, you don’t have a question. I'll ask Vova one last question and then we'll come in too.
Vova, who would you advise to take a mock interview?
Yes, I would say, probably, to everyone. Well, first of all, in order to understand your level and to have a path to move forward, because after all, this is a profession, we should not stand still. Well, in any case, there is always something new, well, it comes with every day, every month, every year, there is always something new, there is something to study. And there is room to move forward. And if without movement, well, there will be no growth in salary, uh, or in any skills. This is awesome. Thank you guys. Actually, I think we'll end here.
Thank you very much Vova for conducting today's interview. Thank you very much, Artyom, for completing today's interview. But as always, the biggest thank you to you, our dear viewers. Thank you for watching us every Tuesday. Without you, we would be strange people who gather and talk to each other. I don't understand why. And you highlight all of this with meaning. Thank you.
Thanks a lot. Have a nice evening everyone. See you next Tuesday. And of course, guys, come to our IOC interview. Costs 2,000 and lasts 1 hour.
If you don't like it, we'll give you your money back. But in all the time that we have been running them, we have brought in 2,000 of them, and we have only had nine returns. This is less than half a percent. So come to us. Uh, super cool stuff. Could. That's it, see you all next day.
Takka, yes, thank you all. Good.
Bye-bye everyone.
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 views•2026-05-28
How agent o11y differs from traditional o11y — Phil Hetzel, Braintrust
aiDotEngineer
450 views•2026-05-28
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanation💯✅
LearnwithSahera
1K views•2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 views•2026-05-29
Search Algorithms Explained in 60 Seconds! 🤖💨
samarthtuliofficial
218 views•2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 views•2026-05-30
Introduction to Problem Solving Part - 1 | Lecture 1 | Intermediate DSA
ascensionix
107 views•2026-05-29
So What's Odin Lang Even Good For
TechOverTea
131 views•2026-06-01











