?? 3?? ?? ?????? ????? ????? ?? ??? ?? ??? ?? ????? ?????.
??? ?? ???
?? ?? ???? ???? ????? ????? Java? ??? ?? -
????? ?? ??? ????? HashMap? Hashtable? ?? ???? ??? HashMap? ??? ???? ?? ??-?? ??? ???? ? ??? ?????? B+ ??? ??, ??? ?, ?? ? ?? ???? ??? ? ??? MySQL
? ???? ?? ??? ?? B+ ??? ???? ??? ??????MySQL
的索引為什么使用B+樹而不使用跳表?Redis
-
Redis
?? ???? ???? ?? B+ ??? ?? ??? ???? ??? - ??? ?? ? ??? ?? ??????
- ? ???? ??? ?? ??? ?? ?? ?? ??? ???????
- 500? ?? ???? ??? ??? a? 300? ?? ???? ??? ??? b? ?? ? tid? ?? ?????. 50000?? 50200?? ??? ?? 200?? ??? ???? ??? ??? ??? ? ?????
- JVM ??? ??? ?? ???? ???
- ??? ??? ? ??????
?? ?? ??
?? ????????? ??:??
?????, ?? ?? ??? Zhang San???. ?? XX???? ??? ? ?? Java ??? ??? ????. 3?? ?????. ???? ?? ??? ??? Java ?? ??? ????.
??? ???? ? ?? ???: ??? ???? ??? ??? ?????? ??? ??? ???? ????? ?? ?? ????? ?? ??? ?? ???? ??? ?????? ??? ??? ???? ?? ??? ????? ??? ????? ??? ?? ????
??? ???, ??? ?? ??? ???? ??? ????? ?? ??? ??? ??? ?? ????? ????.
???? ???? ????? ?? ?????
? ??? ??? ???? ????. ?? ? ??? ???? ????? ??? ??? ???? ?? ?? ??? ??? ? ????.
????? '??'? ? ?? ??? ????. ??? ??? ???? ?? ????? ??? ????? ???, ?? ??? ??? ??? ???? ????? ????.
?? ???? ???? ??? '???'???. ???? ???? ????? ??? ??? ?? ?? ?? ??? ???? ?? "????" ???????.
???? ??? ??? ??? ????? ?? ? ?? ??? ?? ? ??? ????? ???? ??? ? ? ????. ???? ??? ?? ??? ?? ??? ?????? ?? ??? ? ??? ???? ??? ???? ? ????? ?? ??? ?? ??? ??? ??? ? ??? ??? ?? ??? ????.
?: 5~6? ??? ?? ??? dubbo? Spring Boot? ????, ?? ?? ??? ???? ??? ?????.
??? ???? ??? ????? ??? ? ?? ??? ????, ?? ???, ???? ?? ??? ?? ???? ?? ?????. ???. ?? ????? ??? ??? ???? ?? ? ?? ????.
??? ???? ?????? ??? ?? ??? ????.
1. ??? ???
2. ?? ???
3. ???? ??
????? ??? ??? ????? ?? ? ???, ??? ? ??? ??? ????.
??? ?? ???? ???????.
1. ?? ? xxx ???? ????? ???? ??? ? ????? xxx? ?? ????.
2. ?? ????? ?? ?? ??? ?? ???? ??? xxxx ??? ??????.
3. ??? ???? ?? ? ???? xxx? ???? ??? ????.
4. ??? ??? ???? ???? ?? ??? xxx ???? ??? ? ??? ???? ??? ???? ??? ??? ??? ??? ????? ??????.
????? Java? ??? ?????
?? ??? ?? ??? ??? ??? ?????? ?? ?????. ?? ?? ??? ??? ??????. ? ?? ??? ? ????.
?? ????, ?, ?? ??? ?????.
?? ???? ?? ????, ???? ????, ???? ?????.
?? ???? ?????? ?? ???? ?????.
?? ???? ?? ????? ????? ??, ?????? ?? ????? ????? ???. ?? ????? ???? ?? ? ??? ??????? ???? ?? ? ????. ?? ????? ?? ?? ??? ?? ? ??? ??????? ?? ?? ??? ????. ?? ??? ?? ?? ??? ?????. ???? ?? ?????? ??? ? ??? ?? ???? ??? ??? ? ????. , ? ?? ???? ?? ???? ? ????. ??? ?? ? ??? ??? ?? ????? ???? ? ????. ??? ??? ??????? ???? ? ??? ?? ???? ??? ? ????. ??? ??(???? ??): 接口>抽象類>實(shí)現(xiàn)類
.?? ???? ?? ??? ????? ? ????, ?????? ?? ??? ??? ????? ? ?????. ?? ???? ???? ????, ?????? ???? ????????.
HashMap? Hashtable? ?? ???? ?????.
?? ?? ???? ?? ? ????.
??? ?????? ? : HashMap? ?????? ???? ?? HashTable? ?????? ?????. HashTable? ?? ???? ????? ???? ???? ?????. (??? ???? ????? ConcurrentHashMap? ?????.)
???: ??? ??? ?? ??? HashMap? HashTable?? ?? ? ??????. ?? HashTable? ????? ????? ???? ???? ???.
Null ? ? Null ? ??: HashMap? null ?? ?? ??? ? ??? ?? null? ??? ?? ? ????. ??? ?? ?? ?? ? ????. HashTable? null ?? null ?? ???? ????. ??? ??? NullPointerException? ?????.
?? ??? ?? ?? ??? ??:
① ?? ? ?? ?? ?? ???? ??? ?????? ?? ?? ??? 11???. ??? ??? ??? ?? 2n+1? ???. HashMap? ?? ??? ??? 16???. ?? ??? ??? ??? ? ?? ?????.
② ?? ? ??? ?? ?? ???? Hashtable? ???? ??? ??? ?? ???? HashMap? ?? 2? ?????? ?????(
tableSizeFor()
??? ??).tableSizeFor()
方法保證)。底層數(shù)據(jù)結(jié)構(gòu):JDK1.8 以后的 HashMap 在解決哈希沖突時(shí)有了較大的變化,當(dāng)鏈表長度大于閾值(默認(rèn)為 8)(將鏈表轉(zhuǎn)換成紅黑樹前會(huì)判斷,如果當(dāng)前數(shù)組的長度度大于 64,那么會(huì)選擇先進(jìn)行數(shù)組擴(kuò)容,而不是轉(zhuǎn)換為紅黑樹)時(shí),將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時(shí)間。Hashtable 沒有這樣的機(jī)制。
盡管是普通不能再普通的面試題了,可面試中,照樣很大部分人同學(xué)回答的不好?;卮鹬刑岬搅?的n次冪,面試官很有可能會(huì)繼續(xù)追問相關(guān)的問題,如果還不清楚的,建議對HashMap進(jìn)行系統(tǒng)的學(xué)習(xí)。
我的博客上之前發(fā)過兩篇文章:
HashMap
添加一個(gè)元素的流程
HashMap
???? ? ???? ?? ? ? ?? ????, ?? ??? ??? ?? ???? ? ???? ?????. 2? n?? ??? ???? ???, ???? ???? ?? ??? ? ???? ????. ??? ??? ?????? HashMap? ????? ???? ?? ????. ??
??? ? ???? ? ?? ??? ??? ?? ????: ?? blockquote >
HashMap
?? ?? ????
HashMap
Put? ??? ???? ??? ?? 9??? ?? ? ????. ??
1. put() ???? ??? ? putVal()
???2? ?? ?????. 2. Put? ? ?? ??? ?? ??? ????, ?? ??? ?? ?? ??? ?????. 3 ??? ?? ??? ?? -1? ?? ?? ?? AND?? ??? ??? ?????. ???? ??? ??? ?? ??? ??? ? ?? ? ??? ??? ? ??? ?????. ?? 4. ?? ?? ????? ????, ??? ???? ?? ?? ?????. 5. ?? ??? ?? ?? ??? ?? ?????. ??? ?? ?? 6. ?? ??? ??? ??? ?? ??? ?? ?? ?? ??? ????? ?????. ??? ?? ?? ?? ??? ????? 7. ?? ??? ??? ? ?? ??? ???? ??? ???? ?? ??? ?? ??? ?? ??? ?????. ?? ??? ? ??? ? ????. 8. ?? ? ?? ?? ???? ?? ?? ?? ??? ??? 8? ????? ??? ?????. ?? ???? ??? ?? ??-?? ??? ?????. 9. ?? ??? ???? ?? ??? ?? ??? ??? ??? 64(??-?? ?? ??? ?? ?? ??? ?? ??? ??)?? ?? ?? ?? ?? ??? ?????. ??? ??? ?? ?? ????. ?? ?? ??? ???? ??? ??? ??? ?? ???? ???. ? ????? ??? ???? ?? ? ????: 3??? ?? HashMap ?? ??: http://www .woaijava.cc/blog/ 211
??-?? ??? ???? ? ??? ??????
Red Black Tree? ??? AVL ??(?? ?? ??)? ?? ? ?? ?? ? ?? ??? ???? ?? ?? ??? ??? ?????? ? ?? ?? ??? ????.
??? ???? 5?? ??? ????.
??? ??? ?? ??????.
?? ??? ??????.
?? ?? ??????(?? NIL ?????)
? ??? ??? ? ?? ??? ??????. (? ???? ????? ?? ??? ? ?? ??? ??? ??? ?? ? ????.)
?? ???? ? ????? ?? ???? ??? ?? ??? ??? ?????.
?? ? ??? ??? ????. ??? ? ??? ??? ???? ??-?? ??? ??? ?? ??? ?? ??? ????. ?? ?? ?? ??????, ? ? ???????. ??? ?? ? ?? ??? ?? ????.
B+ ??? ??, ?? ? ?? ???, ? ?? ???? ??? ? ????
B+ ??? ??? ? ?????:
1. ?, ??? ?? ??? ?? ??? ? ??? ?? ??? ? ???? 2. ??? ?? ?? ??? ??? ??? ?? ??? ???? ?? ???? ? ?? ??? ??? ? ????. . B+ ??? ?? 1?? 3??? ??????.
InnoDB ??? ?????? 16KB???:
??? ??? 1KB?? ???? ??? ???? 16?? ???? ??? ? ????(???? ?? ??? ??? ??) ?? ?? int ?? ??? ??? 6B?? ???? ??? ???? 16KB/(4B+6B)?1638
???16KB/(4B+6B)≈1638
個(gè)索引所以,兩層的B+樹可以存儲(chǔ):
16*1638=26208
條數(shù)據(jù);三層的B+樹可以存儲(chǔ):16*1638*1638=42928704
條數(shù)據(jù)。
MySQL
的索引為什么使用B+樹而不使用跳表?B+樹是多叉樹結(jié)構(gòu),每個(gè)結(jié)點(diǎn)都是一個(gè)16k的數(shù)據(jù)頁,能存放較多索引信息,所以扇出很高。三層左右就可以存儲(chǔ)
??? 2?? B+ ??? ??? ??? ? ????:2kw
16*1638=26208
??? ??, 3?? B+ ??? ??? ??? ? ????:16*1638*1638=42928704
??? ??. ????????MySQL
? ???? ? ?? ??? ?? B+ ??? ?????? ??????????B+ tree??? ?? ?? ?????. ? ??? 16k ??? ???? ? ?? ??? ??? ??? ? ???? ???? ?? ??????. ??? ?? ?????? ??? ? ????.2kw
??? ?. ?, ???? ? ? ???? ?? ??? ??? ???? ?? ???? ?? ?? ??? IO? ?? ??? ??? ???? ???. ??Jump list? ?? ??? ???, ??? 1?? ?? 1????.
2kw
????? ? ???2kw
數(shù)據(jù),且每次查詢都要能達(dá)到二分查找的效果,2kw
大概在2的24次方
左右,所以,跳表大概高度在24層左右。最壞情況下,這24層數(shù)據(jù)會(huì)分散在不同的數(shù)據(jù)頁里,也即是查一次數(shù)據(jù)會(huì)經(jīng)歷24次磁盤IO。因此存放同樣量級的數(shù)據(jù),B+樹的高度比跳表的要少,如果放在MySQL數(shù)據(jù)庫上來說,就是磁盤IO次數(shù)更少,因此B+樹查詢更快。
而針對寫操作,B+樹需要拆分合并索引數(shù)據(jù)頁,跳表則獨(dú)立插入,并根據(jù)隨機(jī)函數(shù)確定層數(shù),沒有旋轉(zhuǎn)和維持平衡的開銷,因此跳表的寫入性能會(huì)比B+樹要好。
其實(shí),MySQL的存儲(chǔ)引擎是可以換的,以前mysql 5.5是
myisam
,后來才有的innodb
,它們底層索引用的都是B+樹。也就是說,你完全可以造一個(gè)索引為跳表的存儲(chǔ)引擎裝到MySQL里。事實(shí)上,rocksDB
的存儲(chǔ)引擎,里面就用了跳表。直接說結(jié)論,它的寫入性能確實(shí)是比innodb要好,但讀性能確實(shí)比innodb要差不少。感興趣的話,可以在文章最后面的參考資料里看到他們的性能對比數(shù)據(jù)。?????. ??? ?? ??? 24? ??? ??? ?? ?? ??? ???? ?????. ?, ??? ??? ????
Redis
?? ?? 24?24?? ??? IO
? ?????. ??????? ?? ?? ???? ????? B+ ??? ??? ?? ???? ???? ????. MySQL ??????? ???? ????? IO ?? ???? B+ ??? ???. ??? ? ??????. ???? ???? ????? ?? B+ ??? ??? ??? ???? ?? ? ???? ?? ???? ???? ????? ???? ??? ?? ??? ??? ?? ?????. ?? ? ?? ??? ?? ????? ????. , ??? ???? ???? ?? ??? B+ ???? ????. ???????? MySQL? ?????? ??? ??? ? ??????. ??? mysql 5.5?myisam
, ??? ??innodb
, ?? ???? ?? ??B+ ????? ?????. ?, ?? ??? ???? ???? ??? ???? ???? ?? MySQL? ??? ? ??. ???????
Redis
B+ ??? ?? ?? ?? ???? ??? ???? ??? ?????? ????????B+ ??? ??? ?? ??? ???? ???? ??? ?? ??? ???? ???? ?????. B+ ??? ? ??? ?? ?? ???? ??? ? ???? ?? ??? ??? ??? ??? ??? ??? ? ????. ??? ??? ??. ??? ???? ?? ??? ?? ??? ????. ? ?? ???? ??? IO? ????? ?? ?? ??? ?? ??? ?? ???? ????. ????? ???? ?? ? ??? ??? ????? IO? ?? ??? 100??? 1?? Redis? IO? ???? ?? ????? ???? ????? ???? ???? ?????.??? ?? ? ??? ?? ??????
? ??? ?? SQL ???? ?? ??? ?? ?? ??? ? ????.
???? ?? ??? ?? WHERE
子句中的列,或連接子句中的列,而不是出現(xiàn)在SELECT
??? ?? ???? ????.??? ?? ?????? ??? ??? ??? ? ????. ??? ?? ?? ???? ???? ?? ???? ?? ? ????. ???? ?? ?? ???? ???. ??? ?? ?? ??? ??? ???? ?? ??? ???? ?????. ?? ?? ?? ??? ? ?? ??? ??? ???? ???? ??? ???? ????? ??? ?? ???? ?? ? ????. ???? ???? ? ??? ??? ?????? ?? ??? ?? ??? ? ????. ? ???? ??? ?? ??? ?? ?? ?? ??? ???????
1. ??????? ???? ???? ??? ? ?? ??? ?????. ?? ?? ?? ???? ??? ?? ??? ? ???. ???? ???? ????. ???? WHERE ? ORDER BY ??? ??? ??? ???? ? EXPLAIN? ???? ??? ?? ?? ??? ??? ????? ???? ??? ??? ??? ???? ??? ??? ?? ?
2. SQL? ??? ? ??? ?????. ?? ??, ?? ???? ?? ?? ???? ???? ????. ??? ?? ?? ?? ???? ?? SQL? ?? ? ????. * ?? ?? ??? ?? ?? ?? ?? ?????.
3. ???? ?? ??, MyISAM? SELECT ???? ???? ???? InnoDB? INSERT ? UPDATE ???? ???? ?????.
4. ?? ?????? ? ?? ??? ?: ?? ?????? ??????? ?? ?? ??? ?? ????. ??? ?? ??????? ???? ?? ?? ??? ?????. ??? ?? ??? ????! ??? ??? ?? ????? ?? ? ???? ????? ???? ??? ??? ??? ?? ???? ?? ???? ??? ??? ??? ?? ??? ?? ?? ?????. ????? ??? ?????. ??? ??? ?? ??? ?? ??? ????, ?? ??? ?? ??? ?? ?????. ?? ??, id ??? ???? 100?? ???? ???? ? ?????. ??? ??? tableName_id%100???. ??? ?? ???? ?? ???? ??? ???? ??? ??? ?? ??? ???? ?? ??? ?? ?????. ??? ?? ?? ???? ??? ??? ??? ???? ???? ?????. ?? ??? ?? ??? ? ???? ??? ??????? ???? ????. ??? ??? ? ? ????? ??? ?? ?? ???.
5. ???? ?????, ? ??? ?? ????? ???? ??? ??? ???? ??????.
6. ?????? ????? ?: MySQL ??????? ???? ???? ???? ???? ?????, POLARDB? ?????. POLARDB? Alibaba Cloud? ??? ??? ??? ?? ???? ???? ?????????. MySQL? ???? ?? ?? ?? ??? ??? ??? 100T? ??? ? ??? ??? MySQL? ?? 6????.
500? ?? ???? ??? ??? a? 300? ?? ???? ??? ??? b? ?? ? tid? ?? ?????. 50000?? 50200?? ??? ?? 200?? ??? ???? ??? ??? ??? ? ?????
?? 1: ??? a? tid? ?? ???? ???? ?? ??? b? id? ??????. SQL ?? ??? ????.
select * from a,b where a.tid = b.id and a.tid>500000 limit 200;?? 2: ??? a? tid? ????? ?? ?? ?? ???? ???? ???. tid? ?? ???? ?? ????? ??? b? id? ????? ???. SQL ?? ??? ????.
select * from b, (select tid from a limit 50000,200) a where b.id = a.tid;JVM? ??? ??? ?? ???? ?????
JVM ??? ???? ???? ???, ? ???, ??? ?? ? ??(Java ?? ?? ?? ? ?? ??? ??)? ?????.
???? ??? ????? ?? ??? ????, ? ??? ?? ????? ???? ?????? ? ?? ???? ??? ? ????. ?? ??? ??? ??(?? ??? ??? ??? ??? ?? ??? ?? ???? ???? ??? ? ??)?? ????? ?????? ???? ? ?? ??? ???? ?? ? ???? ?? ???? ?????. ????? ??, ??, ??, ??, ?? ?? ? ??? ??? ?? ??? ?? ? ???? ???? ?????.
? ???? JVM? ?? ? ???? Young Generation? Old Generation?? ?????. Young Generation ???? Eden ??, From Survivor ??, To Survivor ??? ? ???? ?????.
8:1:1
;??? ??? ??? ??, ??, ?? ?? ? ?? ???? ???? ?????. Java ?? ???? ?? ??? ???? Non?? ??? ????. -Heap(??); ??? Java ?? ?? ???? ???? ?? ??? ??? ?? ??? ??? ?????. ??? ??? ??? ??? ? ???, ? ??? ?? ??, ?? ?? ???.
Java Virtual Machine Stacks(Java Virtual Machine Stacks)? ??? ?????. ?? ??? ???? ?? ??? ?????. ?? ?? ??? Java ??? ??? ??? ??? ?????. ? ???? ???? ?? ???(Stack Frame)? ??? ???? ?? ?? ???, ?? ??, ?? ??, ??? ?? ?? ??? ?????. , ?. ? ???? ???? ??? ??? ???? ??? ?? ?? ??? ?? ???? ???? ???? ?? ??? ????? ??? ?????.
???? ??? ??? ?? ?? ??? ?? ??? ??? ???. ??? ???? ?? ?? ??? Java ???(?, ?????)? ???? ?? ??? ???? ??, ???? ??? ??? ???? ???? ????? ????. ?? ???? ?????. ?? ?? ??? ?? ??? ??? ??? ??, ???, ??? ??? ???? ???? ?? ?? ???? ???? ??? ? ????.
Survivor ??? ??? ??? ??????
Survivor? ??? Eden ???? Minor GC? ??? ??? ?? ??? ??? ???? ??? Old Generation?? ?????. ????? Old Generation? ??? ????? Major GC? ???? ???. (Major GC?? ?? Minor GC? ???? ??? Full GC? ???? ??? ? ?? ????.) Old ??? ??? ??? ???? ?? ?? ??, Full GC? Minor GC?? ?? ?? ????.
???? ??? ?? ??? ? ????. ? ?? ??? ??? ??????
?? ?? GC? ?? ??? ???? ??? ????? ?? ? ?? ??? ??? ????.
Old Generation ??? ???? ? ?? ?? ??? Old Generation? ?? ? ????. Full GC ??? ????? Old Generation ??? ???? ?? Full GC? ???? ?? ??? ?????.
Old Generation ??? ???? Full GC? ???? ??? ????? ? Old Generation? ???? ??? ?? ?? Full GC? ??? ??? ????.
??? Survivor? ?? ??? Old Generation?? ???? ??? ??? Full GC? ??? ??? ????. Survivor? ?? ????? 16?? Minor GC ??? ??? ???? ???? ? ?? ??? ????? ???? ????. ??.
??? ???? ??????
?? ????? ? ??? ???? ?? ??? ?? ??? ?? ????. ???? ? ??? ??? ??? ??? ??? ?????.
??? ??? ??? ??? ???? ???? ??? ????? ??? ???? ?? ???? ?? ?? ??? ??? ???? ???? ???
? ??? ?? ??? ??? ??? ?? ? ???? ??.
? ??? ???? ??? ?? ?? ??? ???? ?? ?????. ????? ???? ??? ??? ?? ??? ? ??? ?? ??? “?? ????”?? ??? ??? ???? ????. ??? ???? ?? ??? ?? ???? ?? ???? ????. ??? ????? ?? ?? ????? ????? ??? ??? ?? ????? ?????? ??? ???? ??? ?? ??? ??? ?? ???, ??? ???? ??? ???? ??? ????.
? ??? SF?????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

?? ? ?? ? ??? ?? ????? ??? Go ??? ?? ??? ???? ???? ???? ?????. Go ?? ???? ?? ??? ???? ?? ??? ??? ????? ??? ? ?? ?????. ???? ??? ? ?? ???? Go ?? ??? ?? 5??? ??? ??? ????. Go ??? ??? ?? ????? ??? ????? ??????. Go ??? ??? ?? ????? ?? ?? ????? 3? ?? ????? ???? ???. Go ????? ??? ??? ???? ??? Go ??? ????

? ??? ????? ?? ????? PHP ??? ????? ??? ?? ???? React ??? ???? ???? ???? ? ??? ?? ? ?? React ??? ??? ??????.

? ????? ??? ??? ?? ? ?? ??? ? ????? ??? ??? ?????(?? ??). ??? ??? ???? ?? ??? ? ??? ????.

? ???? ??? ????? ? Angular ?? ?? 50?? ??, ??, ??? ? ???? ???? ???? ????? ??? ????!

? ????? ??? ??? ?? 2023?? ??? Vue ??? ??? ??(?? ??)? ?????. ??? ??? ???? ?? ??? ? ??? ????.

?? ???? ?? ?? ?????? ?? ???? ?????. ? ??? ?????. ???? ???? ????? ?? ?? ??, CPU ?? ??, ?? GC, ?? ??, ??? ??? ?? ?? ?? ??? ?? ??? ???? ???. ??? ??? ?? ??? ???? ??? ??? ? ????.

? ??? ?? ??? ???? ? ??? ?? 28?? PHP ??? ??(?? ?? ??)? ???? ?????. ??? ??? ???? ?? ??? ? ??? ????.

?? 10?? ??? ????. 100? ??? ??? ?? ???? ?? ??? ?? ???? ????? ???. ! ! , ??? ????? ??? ????? ?? ????? ???, ?? ??? ?? ??? ??????, ???? ??? ??? ?????? ?????? ??? ??????. ?? ? ??? ? ?? ??? ???? ???? ???? ????? ?? ??? ????? ?? ??? ???.
