Skip to content

Commit c30f7e0

Browse files
committed
Duplicate q+a pair (related with transactions) removed
1 parent 3afe4d3 commit c30f7e0

File tree

2 files changed

+47
-47
lines changed

2 files changed

+47
-47
lines changed

index.html

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -575,13 +575,14 @@ <h1>Java interview frequently asked questions and answers</h1><hr/>
575575
Serializable класс содержит поле static final long serialVersionUID, обычно вычисляемое автоматически. Если мы изменили описание класса, значение автоматически рассчитываемого поля изменится. Хорошим тоном является объявление своего такого поля с заданием его значения.<br/>
576576
</p>
577577
<p style="text-align:justify" tags="transactions">
578-
<a href="#q692371804" id="q692371804" class="a-title">Транзакции. Распределенные транзакции. Уровни изоляции транзакции. Свойства и модель транзакции. Привести примеры использования.</a><br/>
578+
<a href="#q-1412728602" id="q-1412728602" class="a-title">Транзакции. Распределенные транзакции</a><br/>
579579
= Транзакция – группа последовательных операций, представляющая логическую единицу работы с данными. Т может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще.<br/>
580580
</p>
581581
<p style="text-align:justify" tags="transactions">
582582
= Распределенная транзакция включает в себя несколько локальных транзакций, каждая из которых либо фиксируется, либо прерывается. Распределенная транзакция фиксируется только в том случае, когда зафиксированы все локальные транзакции, ее составляющие. Если хотя бы одна из них была прервана, то должна быть прервана и распределенная транзакция.<br/>
583583
</p>
584584
<p style="text-align:justify" tags="transactions">
585+
<a href="#q-1164275653" id="q-1164275653" class="a-title">Уровни изоляции транзакций. Свойства и модель транзакции. Привести примеры использования</a><br/>
585586
= Уровни изоляции транзакций:<br/>
586587
0 — Неподтверждённое чтение (Read Uncommitted, Dirty Read, грязное чтение) — чтение незафиксированных изменений своей транзакции и параллельных транзакций, возможны потерянные обновления, нечистые, неповторяемые чтения и фантомы<br/>
587588
1 — Подтверждённое чтение (Read Committed) — чтение всех изменений своей транзакции и зафиксированных изменений параллельных транзакций, нечистые чтения невозможны, возможны неповторяемые чтения и фантомы;<br/>
@@ -2822,7 +2823,7 @@ <h1>Java interview frequently asked questions and answers</h1><hr/>
28222823
Один композитный индекс заменяет несколько более простых: к примеру при наличии составного индекса по А,Б,В следующие индексы уже не необходимы: индекс по А; композитный по А,Б<br/>
28232824
</p>
28242825
<p style="text-align:justify" tags="db">
2825-
<a href="#q1787791340" id="q1787791340" class="a-title">Уровни изоляции транзакций, названия проблем, которые они решают. какой уровень по умолчанию?</a><br/>
2826+
<a href="#q-1962811476" id="q-1962811476" class="a-title">Уровни изоляции транзакций, названия проблем, которые они решают. Какой уровень по умолчанию?</a><br/>
28262827
<a href="https://ru.wikipedia.org/wiki/Уровень_изолированности_транзакций">https://ru.wikipedia.org/wiki/Уровень_изолированности_транзакций</a><br/>
28272828
При параллельном выполнении транзакций возможны следующие проблемы:<br/>
28282829
= потерянное обновление (lost update) — при одновременном изменении одного блока данных разными транзакциями теряются все изменения, кроме последнего;<br/>
@@ -2839,7 +2840,7 @@ <h1>Java interview frequently asked questions and answers</h1><hr/>
28392840
Типичный способ реализации данного уровня изоляции — блокировка данных на время выполнения команды изменения, что гарантирует, что команды изменения одних и тех же строк, запущенные параллельно, фактически выполняются последовательно, и ни одно из изменений не потеряется. Транзакции, выполняющие только чтение, при данном уровне изоляции никогда не блокируются.<br/>
28402841
</p>
28412842
<p style="text-align:justify" tags="db">
2842-
= Read committed (чтение фиксированных данных) (он обычно - по умолчанию)<br/>
2843+
= Read committed (чтение фиксированных данных) (обычно он - по умолчанию)<br/>
28432844
Большинство промышленных СУБД, в частности, Microsoft SQL Server, PostgreSQL и Oracle, по умолчанию используют именно этот уровень. На этом уровне обеспечивается защита от чернового, "грязного" чтения, тем не менее, в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных.<br/>
28442845
Реализация завершённого чтения может основываться на одном из двух подходов: блокировании или версионности.<br/>
28452846
</p>
@@ -3589,22 +3590,6 @@ <h1>Java interview frequently asked questions and answers</h1><hr/>
35893590
Array-&gt;List: Arrays.asList(arr) or for type-safe: Arrays.&lt;String&gt;asList(arr)
35903591
</code>
35913592
</p>
3592-
<p style="text-align:justify" tags="db,transactions">
3593-
<a href="#q-1436539255" id="q-1436539255" class="a-title">Describe levels of transactions isolation in DB</a><br/>
3594-
<a href="https://ru.wikipedia.org/wiki/Уровень_изолированности_транзакций">https://ru.wikipedia.org/wiki/Уровень_изолированности_транзакций</a><br/>
3595-
= Проблемы:<br/>
3596-
== Потерянное обновление - при одновременном изменении одного блока данных разными транзакциями одно из изменений теряется.<br/>
3597-
== «Грязное» чтение - чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится).<br/>
3598-
== Неповторяющееся чтение - при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными.<br/>
3599-
== Чтение «фантомов» - при повторном чтении в рамках одной транзакции одна и та же выборка дает разные множества строк. От неповторяющегося чтения оно отличается тем, что результат повторного обращения к данным изменился не из-за изменения/удаления самих этих данных, а из-за появления новых (фантомных) данных.<br/>
3600-
</p>
3601-
<p style="text-align:justify" tags="db,transactions">
3602-
= Уровни изоляции<br/>
3603-
== Read uncommitted - «грязное» чтение, неповторяющееся чтение, фантомы<br/>
3604-
== Read commited - неповторяющееся чтение, фантомы<br/>
3605-
== Repeatable read - фантомы<br/>
3606-
== Serializable - все ок<br/>
3607-
</p>
36083593
<p style="text-align:justify" tags="docker">
36093594
<a href="#q949775341" id="q949775341" class="a-title">Docker: describe namespaces / cgroups</a><br/>
36103595
<a href="https://stackoverflow.com/questions/34820558/difference-between-cgroups-and-namespaces">https://stackoverflow.com/questions/34820558/difference-between-cgroups-and-namespaces</a><br/>
@@ -5512,19 +5497,34 @@ <h1>Java interview frequently asked questions and answers</h1><hr/>
55125497
Графовая, key-value, документная, колоночная<br/>
55135498
</p>
55145499
<p style="text-align:justify" tags="db,transactions">
5515-
<a href="#q282607271" id="q282607271" class="a-title">Уровни изоляции транзакций в БД</a><br/>
5500+
<a href="#q1633881955" id="q1633881955" class="a-title">Уровни изоляции транзакций в БД. Какие проблемы решают?</a><br/>
55165501
<a href="https://ru.wikipedia.org/wiki/Уровень_изолированности_транзакций">https://ru.wikipedia.org/wiki/Уровень_изолированности_транзакций</a><br/>
5517-
= Read uncommitted. Если несколько параллельных транзакций пытаются изменять одну и ту же строку таблицы, то в окончательном варианте строка будет иметь значение, определенное всем набором успешно выполненных транзакций. При этом возможно считывание не только логически несогласованных данных, но и данных, изменения которых ещё не зафиксированы.<br/>
5502+
= Проблемы:<br/>
5503+
== Потерянное обновление - при одновременном изменении одного блока данных разными транзакциями одно из изменений теряется.<br/>
5504+
== «Грязное» чтение - чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится).<br/>
5505+
== Неповторяющееся чтение - при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными.<br/>
5506+
== Чтение «фантомов» - при повторном чтении в рамках одной транзакции одна и та же выборка дает разные множества строк. От неповторяющегося чтения оно отличается тем, что результат повторного обращения к данным изменился не из-за изменения/удаления самих этих данных, а из-за появления новых (фантомных) данных.<br/>
5507+
</p>
5508+
<p style="text-align:justify" tags="db,transactions">
5509+
= Уровни изоляции<br/>
5510+
== Read uncommitted. Если несколько параллельных транзакций пытаются изменять одну и ту же строку таблицы, то в окончательном варианте строка будет иметь значение, определенное всем набором успешно выполненных транзакций. При этом возможно считывание не только логически несогласованных данных, но и данных, изменения которых ещё не зафиксированы.<br/>
55185511
</p>
55195512
<p style="text-align:justify" tags="db,transactions">
5520-
= Read committed. Во многих БД это уровень по умолчанию. Защита от dirty read, тем не менее, в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. Реализация завершённого чтения может основываться на одном из двух подходов: блокировании или версионности.<br/>
5513+
== Read committed. Во многих БД это уровень по умолчанию. Защита от dirty read, тем не менее, в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. Реализация завершённого чтения может основываться на одном из двух подходов: блокировании или версионности.<br/>
55215514
</p>
55225515
<p style="text-align:justify" tags="db,transactions">
5523-
= Repeatable read. Уровень, при котором читающая транзакция «не видит» изменения данных, которые были ею ранее прочитаны. При этом никакая другая транзакция не может изменять данные, читаемые текущей транзакцией, пока та не окончена.<br/>
5516+
== Repeatable read. Уровень, при котором читающая транзакция «не видит» изменения данных, которые были ею ранее прочитаны. При этом никакая другая транзакция не может изменять данные, читаемые текущей транзакцией, пока та не окончена.<br/>
55245517
Блокировки в разделяющем режиме применяются ко всем данным, считываемым любой инструкцией транзакции, и сохраняются до её завершения. Это запрещает другим транзакциям изменять строки, которые были считаны незавершённой транзакцией. Однако другие транзакции могут вставлять новые строки, соответствующие условиям поиска инструкций, содержащихся в текущей транзакции. При повторном запуске инструкции текущей транзакцией будут извлечены новые строки, что приведёт к фантомному чтению. Учитывая то, что разделяющие блокировки сохраняются до завершения транзакции, а не снимаются в конце каждой инструкции, степень параллелизма ниже, чем при уровне изоляции READ COMMITTED. Поэтому пользоваться данным и более высокими уровнями транзакций без необходимости обычно не рекомендуется.<br/>
55255518
</p>
55265519
<p style="text-align:justify" tags="db,transactions">
5527-
= Serializable. Все транзакции выполняются последовательно, одна за другой.<br/>
5520+
== Serializable. Все транзакции выполняются последовательно, одна за другой.<br/>
5521+
</p>
5522+
<p style="text-align:justify" tags="db,transactions">
5523+
= Какие проблемы остаются на каждом уровне:<br/>
5524+
== Read uncommitted - «грязное» чтение, неповторяющееся чтение, фантомы<br/>
5525+
== Read commited - неповторяющееся чтение, фантомы<br/>
5526+
== Repeatable read - фантомы<br/>
5527+
== Serializable - все ок<br/>
55285528
</p>
55295529
<p style="text-align:justify" tags="transactions">
55305530
<a href="#q872713122" id="q872713122" class="a-title">Какая разница между фантомным чтением и неповторяющимся чтением?</a><br/>

0 commit comments

Comments
 (0)