Skip to content

Commit 8faa6cd

Browse files
committed
Add interactive quiz bank for GitHub Pages
1 parent 14976dc commit 8faa6cd

59 files changed

Lines changed: 204544 additions & 3 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/pages.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,17 @@ jobs:
2727
with:
2828
python-version: "3.12"
2929

30-
- name: Install dependencies
30+
- name: Set up Node
31+
uses: actions/setup-node@v4
32+
with:
33+
node-version: "22"
34+
35+
- name: Install Python dependencies
3136
run: pip install -r requirements.txt
3237

38+
- name: Validate quiz bank
39+
run: node tools/validate-quizzes.mjs
40+
3341
- name: Build site
3442
run: mkdocs build --strict
3543

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
| Банковский backend | [Сбер](guides/sber.md) · [Альфа-Банк](guides/alfa-bank.md) · [Т1 Иннотех](guides/t1-innotech.md) · [Лига](guides/liga.md) |
1919
| BigTech / алгоритмы | [VK](guides/vk.md) · [Яндекс Путешествия](guides/yandex-travel.md) |
2020
| Повторение по темам | [индекс тем](TOPICS.md) |
21+
| Самопроверка знаний | [тесты на GitHub Pages](https://javajub.github.io/java-interview/quizzes/) |
2122

2223
## Гайды по компаниям
2324

TOPICS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Индекс тем
22

3-
Навигация по темам помогает готовиться не только к конкретной компании, но и к типовым блокам Java interview: Java Core, Spring Boot, SQL, Kafka, JVM, многопоточность и live coding.
3+
Навигация по темам помогает готовиться не только к конкретной компании, но и к типовым блокам Java interview: Java Core, Spring Boot, SQL, Kafka, JVM, многопоточность и live coding. Для самопроверки используйте [тесты на GitHub Pages](https://javajub.github.io/java-interview/quizzes/).
44

55
[← На главную](README.md) · [Канал JavaJub](https://t.me/+6GwSVWu9VIxlN2Yy)
66

docs/TOPICS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Индекс тем
22

3-
Навигация по темам помогает готовиться не только к конкретной компании, но и к типовым блокам Java interview: Java Core, Spring Boot, SQL, Kafka, JVM, многопоточность и live coding.
3+
Навигация по темам помогает готовиться не только к конкретной компании, но и к типовым блокам Java interview: Java Core, Spring Boot, SQL, Kafka, JVM, многопоточность и live coding. Если хотите сначала проверить себя, откройте [интерактивные тесты](quizzes/index.md).
44

55
[← На главную](index.md) · [Канал JavaJub](https://t.me/+vDYjUmPrBYZmMTAy)
66

docs/assets/css/quiz.css

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
.quiz-hero,
2+
.quiz-panel {
3+
border: 1px solid var(--md-default-fg-color--lightest);
4+
border-radius: 8px;
5+
padding: 1rem;
6+
margin: 1rem 0;
7+
background: var(--md-default-bg-color);
8+
}
9+
10+
.quiz-hero {
11+
display: flex;
12+
align-items: center;
13+
justify-content: space-between;
14+
gap: 1rem;
15+
}
16+
17+
.quiz-kicker {
18+
color: var(--md-primary-fg-color);
19+
font-size: .75rem;
20+
font-weight: 700;
21+
letter-spacing: .04em;
22+
margin: 0 0 .25rem;
23+
text-transform: uppercase;
24+
}
25+
26+
.quiz-modes,
27+
.quiz-grid,
28+
.quiz-actions,
29+
.quiz-review-links {
30+
display: flex;
31+
flex-wrap: wrap;
32+
gap: .75rem;
33+
}
34+
35+
.quiz-mode,
36+
.quiz-card,
37+
.quiz-choice {
38+
border: 1px solid var(--md-default-fg-color--lightest);
39+
border-radius: 8px;
40+
background: var(--md-code-bg-color);
41+
}
42+
43+
.quiz-mode {
44+
flex: 1 1 220px;
45+
padding: .75rem;
46+
text-align: left;
47+
cursor: pointer;
48+
}
49+
50+
.quiz-mode span {
51+
display: block;
52+
color: var(--md-default-fg-color--light);
53+
font-size: .8rem;
54+
margin-top: .2rem;
55+
}
56+
57+
.quiz-mode.is-active,
58+
.quiz-choice.is-selected {
59+
border-color: var(--md-primary-fg-color);
60+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--md-primary-fg-color) 20%, transparent);
61+
}
62+
63+
.quiz-grid {
64+
align-items: stretch;
65+
}
66+
67+
.quiz-card {
68+
display: flex;
69+
flex: 1 1 260px;
70+
flex-direction: column;
71+
justify-content: space-between;
72+
padding: .9rem;
73+
}
74+
75+
.quiz-card h4 {
76+
margin: 0 0 .35rem;
77+
}
78+
79+
.quiz-card p {
80+
color: var(--md-default-fg-color--light);
81+
margin: 0;
82+
}
83+
84+
.quiz-card-footer {
85+
align-items: center;
86+
display: flex;
87+
justify-content: space-between;
88+
gap: .75rem;
89+
margin-top: .9rem;
90+
}
91+
92+
.quiz-card-footer span {
93+
color: var(--md-default-fg-color--light);
94+
font-size: .8rem;
95+
}
96+
97+
.quiz-card button,
98+
.quiz-actions button,
99+
.quiz-telegram {
100+
border: 0;
101+
border-radius: 6px;
102+
background: var(--md-primary-fg-color);
103+
color: var(--md-primary-bg-color);
104+
cursor: pointer;
105+
display: inline-flex;
106+
font: inherit;
107+
font-weight: 700;
108+
padding: .55rem .8rem;
109+
text-decoration: none;
110+
}
111+
112+
.quiz-actions button:disabled {
113+
cursor: not-allowed;
114+
opacity: .45;
115+
}
116+
117+
.quiz-secondary {
118+
background: var(--md-code-bg-color) !important;
119+
color: var(--md-default-fg-color) !important;
120+
border: 1px solid var(--md-default-fg-color--lightest) !important;
121+
}
122+
123+
.quiz-run-header {
124+
align-items: center;
125+
display: flex;
126+
justify-content: space-between;
127+
gap: 1rem;
128+
}
129+
130+
.quiz-progress {
131+
background: var(--md-code-bg-color);
132+
border-radius: 999px;
133+
height: .45rem;
134+
margin: .8rem 0 1rem;
135+
overflow: hidden;
136+
}
137+
138+
.quiz-progress span {
139+
background: var(--md-primary-fg-color);
140+
display: block;
141+
height: 100%;
142+
}
143+
144+
.quiz-choices {
145+
display: grid;
146+
gap: .65rem;
147+
margin: 1rem 0;
148+
}
149+
150+
.quiz-choice {
151+
align-items: flex-start;
152+
display: flex;
153+
gap: .65rem;
154+
padding: .75rem;
155+
}
156+
157+
.quiz-choice input {
158+
margin-top: .25rem;
159+
}
160+
161+
.quiz-choice.is-correct {
162+
border-color: #2e7d32;
163+
background: color-mix(in srgb, #2e7d32 12%, var(--md-code-bg-color));
164+
}
165+
166+
.quiz-result-badge {
167+
border-radius: 999px;
168+
display: inline-flex;
169+
font-weight: 700;
170+
padding: .2rem .6rem;
171+
}
172+
173+
.quiz-result-badge.is-good {
174+
background: color-mix(in srgb, #2e7d32 14%, transparent);
175+
color: #2e7d32;
176+
}
177+
178+
.quiz-result-badge.is-bad {
179+
background: color-mix(in srgb, #b3261e 14%, transparent);
180+
color: #b3261e;
181+
}
182+
183+
.quiz-explanation {
184+
border-left: 4px solid var(--md-primary-fg-color);
185+
margin: 1rem 0;
186+
padding: .7rem .9rem;
187+
background: var(--md-code-bg-color);
188+
}
189+
190+
.quiz-review-links a {
191+
border: 1px solid var(--md-default-fg-color--lightest);
192+
border-radius: 999px;
193+
padding: .25rem .6rem;
194+
text-decoration: none;
195+
}
196+
197+
.quiz-summary h2 {
198+
font-size: 2rem;
199+
margin-bottom: .2rem;
200+
}
201+
202+
@media (max-width: 700px) {
203+
.quiz-hero,
204+
.quiz-card-footer,
205+
.quiz-run-header {
206+
align-items: stretch;
207+
flex-direction: column;
208+
}
209+
}

0 commit comments

Comments
 (0)