рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрдорд░реВрдж рдХреЗ рд╕рд╛рде рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рдиред

рд╣рдордиреЗ рдПрдХ рдирдпрд╛ рдкрд╛рдареНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ - "рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо" , рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреАрдЬреАрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ред рдЗрд╕рд▓рд┐рдП рдЖрдЬ рд╣рдо рдЬрд╛рд╡рд╛ рдореЗрдВ рдмреНрд▓реВрдо рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдиреЛрдЯ рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдкрд░рд┐рдЪрдп

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЕрдорд░реВрдж рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдмреНрд▓реВрдо рдлрд┐рд▓реНрдЯрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреБрд╢рд▓ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрднрд╛рд╡реНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдХреНрдпрд╛ рдпрд╣ рддрддреНрд╡ рд╕реЗрдЯ рдореЗрдВ рд╣реИ?"ред

рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдХреЛрдИ рдЧрд▓рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдпрд╣ рдЧрд▓рдд рд╣реИ, рддреЛ рдЖрдк 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рддрддреНрд╡ рд╕реЗрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЬрдм рд╕рдЪ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИ рдХрд┐ рддрддреНрд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЗрдЯ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛ 100% рдирд╣реАрдВ рд╣реИред

рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдХреЛ рджреЗрдЦреЗрдВред



рдорд╛рд╡реЗрди рдХреА рд▓рдд

рд╣рдо рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдЕрдорд░реВрдж рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдорд░реВрдж рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдорд╛рд╡реЗрди рд╕реЗрдВрдЯреНрд░рд▓ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>22.0</version> </dependency> 

рдПрдХ рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдХрд┐рдлрд╛рдпрддреА рдФрд░ рддреЗрдЬрд╝ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЭреВрдареЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЙрддреНрддрд░реЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ , рдФрд░, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдореЗрдореЛрд░реА рд▓реЗрдЧрд╛ред

рдЕрдкрдиреА рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдХрд╛рд░рдг, рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдХреИрд╕реЗрдВрдбреНрд░рд╛ рдФрд░ рдУрд░реЗрдХрд▓ рд╕рд╣рд┐рдд рдХреБрдЫ рдбреЗрдЯрд╛рдмреЗрд╕, рдбрд┐рд╕реНрдХ рдпрд╛ рдХреИрд╢ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЖрдИрдбреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдХреНрд╡реЗрд░реА рдбрд┐рд╕реНрдХ рдкрд░ рдЬрд╛рддреА рд╣реИ рдФрд░ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЖрдЗрдЯрдо рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред

рдПрдХ рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдирд╛

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо 500 рд╕реЗ рдЕрдзрд┐рдХ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐рд╢рдд (0.01) рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рддреАрди рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдорд░реВрдж рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ BloomFilter рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдмрддрд╛рдП рдЧрдП рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

 BloomFilter<Integer> filter = BloomFilter.create( Funnels.integerFunnel(), 500, 0.01); 

рдЕрдм рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ:

 filter.put(1); filter.put(2); filter.put(3); 

рд╣рдордиреЗ рдХреЗрд╡рд▓ рддреАрди рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рдЖрд╡реЗрд╖рдг рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА - 500, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдХрд╛рдлреА рд╕рдЯреАрдХ рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ mightContain() рд╕рд╛рде mightContain() рд╡рд┐рдзрд┐:

 assertThat(filter.mightContain(1)).isTrue(); assertThat(filter.mightContain(2)).isTrue(); assertThat(filter.mightContain(3)).isTrue(); assertThat(filter.mightContain(100)).isFalse(); 

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рд╣реА рд╣реИ рддреЛ рдпрд╣ рддрддреНрд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм mightContain() рд╕рд╣реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ 99% рд╣реИ рдХрд┐ рддрддреНрд╡ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рд╣реИ, рдФрд░ 1% рд╣реИ, рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рдпрджрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдЧрд▓рдд рд╣реИ, рддреЛ рдЖрдк 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддрддреНрд╡ рдЧрд╛рдпрдм рд╣реИред

рдЕрд╕рдВрддреГрдкреНрдд рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░

рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рддрддреНрд╡реЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдЯреАрдХ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЕрдиреНрдпрдерд╛, рд╣рдорд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рддрдирд╛ рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рдмрд░рд╛рдмрд░ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрднрд╛рд╡рдирд╛ рдФрд░ рдкрд╛рдВрдЪ рдХреЗ рдмрд░рд╛рдмрд░ рддрддреНрд╡реЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо 100,000 рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 BloomFilter<Integer> filter = BloomFilter.create( Funnels.integerFunnel(), 5, 0.01); IntStream.range(0, 100_000).forEach(filter::put); 

рдЗрддрдиреЗ рдХрдо рддрддреНрд╡реЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛, рдлрд╝рд┐рд▓реНрдЯрд░ рдмрд╣реБрдд рдХрдо рдореЗрдореЛрд░реА рд▓реЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдзрд┐рдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рд┐рд▓реНрдЯрд░ рдУрд╡рд░рд╕реИрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдПрдХ рдкреНрд░рддрд┐рд╢рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрд▓рдд-рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрддреА рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ mightContatin() рд╡рд┐рдзрд┐ рдЙрд╕ рдорд╛рди рдХреЗ рд▓рд┐рдП рднреА рд╕рд╣реА рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдерд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕ рддреНрд╡рд░рд┐рдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдордиреЗ рдЕрдорд░реВрдж рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмреНрд▓реВрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рдВрднрд╛рд╡реНрдп рдкреНрд░рдХреГрддрд┐ рдХреЛ рджреЗрдЦрд╛ред

рдЗрди рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЧрд┐рдЯрд╣рдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдорд╛рд╡реЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдпрд╛рдд рдФрд░ рд▓реЙрдиреНрдЪ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдВрдд

рд╣рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдпрд╣рд╛рдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЦреБрд▓реЗ рдШрд░ рдХреЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд╢рд┐рдХреНрд╖рдХ рдорд┐рдЦрд╛рдЗрд▓ рдЧреЛрд░реНрд╢рдХреЛрд╡ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

Source: https://habr.com/ru/post/hi433700/


All Articles