> [!hint] > В старых рубежках может быть актуально все, кроме вопросов о PHP > Нужно знать весь материал лекций до 3.2 - [Файл](https://docs.google.com/document/d/11ccQ3H0NNVfMtdiKW1Zxq0woOfk9o-2p0VcKhj4Bz_A/edit?tab=t.0#heading=h.5xocd8wh7ln) для подготовки (от 2025 года) - [Разбор](https://docs.google.com/document/d/1c-9ci-rwhO1EB7cTknReMxZEzvrdazObXMiVpq9Ov3o/edit?tab=t.0) 2022 года - [Билеты](https://docs.google.com/document/d/1EBdskbN0v1942zgW2qu_datoyJ0yoVxBx69D4sPemyk/edit?tab=t.0) 2022 года - [Заметки](https://grove-spandex-678.notion.site/1-fe90f5db40b6477ebd439b9f3229e6ee) в notion - [Еще](https://github.com/AppLoidx/Web-Development-Cheats/blob/master/itmo-university/module%20tests/ModuleTest1Questions.md) 2022 год - [Задания](https://github.com/AppLoidx/Web-Development-Cheats/blob/master/itmo-university/module%20tests/ModuleTest1.md) на код 2022 года - Прошлогодняя [рубежка](https://github.com/sub-myitmo/web-rubezhka1) - [Еще](https://invited-digit-866.notion.site/2022-53c853d396364002b29a1331dfc78bba#80cee9d88a03495ea134ec05a365d43c) заметки в notion от 2022 года ## Разбор типовых задач ### 1. Сделать слошную синюю границу 2px у текстового ввода внутри класса `auth_form` при фокусе ```CSS .auth-form input[type="text"]:focus { border: 2px solid blue; } ``` ### 2. Написать миксин на SCSS и использовать его в классе `user-card`, добавить вложенный стиль при наведении курсора ```SCSS @mixin card-style($bg-color: #ffffff) { background-color: $bg-color; border-radius: 8px; } .user-card { @include card-style; &:hover { opacity: 0.8; } } ``` ### 3. Написать код на JS, который читает поле ввода, если там число, то выводит удвоенное значение в консоль, иначе сообщение об ошибке в alert ```JavaScript const form = document.querySelector("#calcForm"); const input = document.querySelector("#numInput"); form.addEventListener("submit", (event) => { event.preventDefault(); const text = input.value; const number = parseFloat(text); if (isNan(number)) { alert("Введите число"); } else { console.log(number*2); } }); ``` ### 4. Написать асинхронную функцию, которая делает POST запрос с координатами точки и возвращает json-ответ ```JavaScript async function sendCoordinates(x, y) { const url = "/api/points"; const data = {x: x, y: y}; const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data) }); if (!response.ok) { throw new Error(); } const res = await response.json(); return res; } ``` ### 5. Через JQuery поменять элемент с классом `content-box` и вывести значение из поля ввода с id `statusInput` ```JavaScript $("#toggle-btn").on("click", () => { $(".content-box").slideUp().css("color", "red"); console.log($("#statusInput").val()); }); ``` ### 6. Написать FCGI-сценарий, который проверяет строку запроса, если там есть слово `ping`, то выводит `pong`. Иначе возвращает 400 ошибку ```Java public class Main { public static void main(String[] args) { FCGIInterface fcgi = new FCGIInterface(); while (fcgi.accept() >= 0) { if (FCGIInterface.request == null) { continue; } String query = FCGIInterface.request.getProperty("QUERY_STRING"); if (query != null && query.contains("ping")) { System.out.println("Content-Type: text/plain\n"); System.out.println("ping"); } else { System.out.println("Status: 400 Bad Request"); System.out.println("Content-Type: text/plain\n"); System.out.println("Bad Request"); } } } } ``` ### 7. Написать сервлет, который считает количество заходов пользователя на сайт через HTTP-сессии ```Java @WebServlet("/counter") public class MyServlet extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse res) { HttpSession session = req.getSession(); if (session.getAttribute("visitCount") == null) { session.setAttribute("visitCount", 0); } int count = (Integer) session.getAttribute("visitCount") + 1; session.setAttribute("visitCount", count); res.setContentType("text/plain"); PrintWriter out = res.getWriter(); out.println("Вы посетили страницу %d раз".format(count)); } } ``` ### 8. Написать сервлет, который проверяет роль пользователя и пропускает, если он админ, иначе переадресация на сообщение об ошибке ```Java @WebServlet("/task") public class MyServlet extends HttpServlet { @Override public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String role = req.getParameter("role"); if (role == null || !role.equals("admin")) { res.sendRedirect("/access-denied.html"); } req.setAttribute("secretData", "TopSecret123"); RequestDispatcher disp = req.getRequestDispatcher("/admin.jsp"); disp.forward(req, res); } } ``` ### 9. Написать фильтр, который пропускает пользователя дальше, только если в его сессии есть атрибут `user` ```Java @WebFilter("/secure/*") public class MyFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException { HttpServletRequest httpReq = (HttpServletRequest) req; HttpServletResponse httpRes = (HttpServletResponse) res; HttpSession session = httpReq.getSession(); if (session.getAttribute("user")==null) { httpRes.setContentType("text/plain"); httpRes.setStatus(403); hhtpRes.getWriter().println("Вход воспрещен"); } else { chain.doFilter(req, res); } } } ``` ### 10. Реализовать функцию на JavaScript, которая будет закрывать текущее окно, если в нем открыт гугл ```JavaScript function closeWindow() { if (window.location.href === "https://www.google.ru") { window.close(); } } ``` ### 11. Открытие в новом окне браузера гугла через JS ```JavaScript window.open("http://google.com", "newwin", "width=1200,height=600"); ```