So then, how to pregenerate addresses like 100,000 numbers at once without click [Request payment] button in wallet program 100,000 times?
The easiest probably would be to use a small script to generate private-/public- keypairs.
It is important to pick a script (or better: write one yourself) with good entropy. Any bug/vulnerability/mistake in implementation could make your private keys 'guessable' and therefore unsafe.
And so this means, exchange generate whole address for users with exchange his own private key, exchange can access whole user's addresses?
Of course.
An (deposit-)address from an exchange is always in full control of the exchange itself.
You (as a customer) are depositing to the exchange. From this moment on the exchange is in control of your funds.
In return they give you 'credits' which match your deposited amount/crypto. Those are just assigned numbers in their database.
Only after withdrawing (after transaction got confirmed) you are in control of your cryptos again.
You are right on this. I made a transaction today to my exchange wallet and I noticed that the TXHash shows my transfer to the exchange wallet but under it I saw that the funds was actually moved from my exchange wallet to another wallet though, the funds actually showed in my wallet as balance. As I saw your post it now became clear to me. Thanks for that clarification.