Я хотел бы спросить, делали ли вы здесь какие-нибудь проекты?
Не могли бы вы рассказать нам о проектах, над которыми вы работали, какой технологический стек вы использовали и за разработку какого контента вы отвечали? (опыт проекта)
Каковы восемь основных типов данных? (База)
Можете ли вы сказать мне, можно ли запускать длинный тип напрямую? Вопрос должен заключаться в том, можно ли его вычислить напрямую? (База)
Вы понимаете шаблон синглтона? Можете ли вы поговорить об этом (Шаблоны проектирования)
В чем разница между режимом ленивого человека и режимом голодного человека?
Каковы особенности транзакций? (сделка)
Расскажите, с какими исключениями вы сталкивались при работе над проектами? (аномальный)
Давайте поговорим о трех часто используемых категориях времени? (База)
Поговорим о трёх методах календаря?
Давайте поговорим о жизненном цикле сессии. (сессия)
Сталкивались ли вы когда-нибудь с потерей точности чисел с плавающей запятой во время работы над проектом? Как вы это решили?
Затем у нас есть расчет с плавающей запятой. Какой тип данных вы бы выбрали для расчета?
Можете ли вы рассказать мне некоторые часто используемые аннотации? Весна? Или что-то другое?
Знаете ли вы о нитях?
В чем разница между потоком и процессом?
Итак, скажите мне, что такое потокобезопасность?
Скажите мне разницу между == и равно?
Итак, вы когда-нибудь использовали Linux? Можете ли вы кратко рассказать о некоторых часто используемых командах?
задача решена
- 我想问一下你这边有做过什么项目吗?
Я думаю, вы можете просто выбрать один или два относительно профессиональных проекта для разговора.
- 你说一下long类型能直接运转吗(Я думаю, речь идет о том, можно ли напрямую работать с данными длинного типа)
С данными типа Long можно напрямую работать. Когда вы смешиваете значения типа int и long в выражении, значение типа int автоматически преобразуется в тип long, чтобы гарантировать, что результатом всего выражения будет тип long.
- 你了解单例模式吗?你可以讲一下吗
Шаблон Singleton — это широко используемый шаблон проектирования программного обеспечения. Его цель — гарантировать, что класс имеет только один экземпляр, и предоставить глобальную точку доступа для получения этого уникального экземпляра. Этот шаблон полезен, когда вам необходимо контролировать доступ к ресурсам или когда создание экземпляров объектов требует больших ресурсов или времени, и глобально необходим только один из этих ресурсов или экземпляров. Общие методы реализации одноэлементного режима в основном включают: ленивый режим и голодный режим.
- 懒汉模式跟饿汉模式有什么区别?
Можно получить изВремя инициализации объекта, безопасность потоков и использование ресурсовСравните в других аспектах:
Время инициализации
ленивый режим: Ленивый режим延迟加载 одноэлементный узор.Он характеризуется第一次使用时创建实例对象 , а не создавать его при загрузке класса.Этот шаблон позволяет избежать необходимости использования объектов-экземпляров при资源浪费, создается только при необходимости.
Голодный режим: Режим голодного человека — это своего рода在类加载时就创建实例 одноэлементный узор. Его особенностью является то, что объект экземпляра создается при загрузке класса, независимо от того, будет ли он использоваться.Этот метод гарантирует, что один и тот же объект экземпляра может быть получен при любых обстоятельствах, но это может привести к некоторым性能和资源上的浪费, особенно в некоторых случаях объект экземпляра не используется.
потокобезопасность
ленивый режим: Ленивый режим сам по себе非线程安全的 , поскольку существует вероятность того, что несколько потоков одновременно вызовут метод getInstance() и введут оператор оценки, что приведет к созданию нескольких экземпляров.Чтобы обеспечить безопасность потоков, вы можете использовать метод getInstance().添加synchronized关键字 , но это приведет к увеличению производительности. Кроме того, вы также можете использовать блокировку с двойной проверкой (Double-Checked Locking) и другие методы для уменьшения накладных расходов на синхронизацию.
Голодный режим: Режим голодания есть.线程安全Да, поскольку объект экземпляра создается при загрузке класса, в многопоточной среде не возникает проблем конкуренции.
Использование ресурсов и производительность
ленивый режим : Ленивый режим позволяет экономить ресурсы, поскольку позволяет избежать их бесполезной траты, когда объекты экземпляра не нужны. Однако, поскольку его необходимо инициализировать при первом использовании, на производительность может повлиять, если процесс инициализации сложен или занимает много времени.
Голодный режим : Голодный режим может быть не таким гибким, как ленивый режим, с точки зрения использования ресурсов, поскольку он создает объекты-экземпляры независимо от того, будут ли они использоваться. Однако, поскольку объект экземпляра уже создан при загрузке класса, он выполняется быстрее при первом вызове, поскольку инициализация не требуется.
Применимая сцена
ленивый режим: Применимый кСценарий, в котором объект создается только при первом использовании, и в процессе инициализации экземплярного объекта не предъявляются сложные требования к безопасности потоков. . Например,Файловый менеджерЭто типичный пример, поскольку вам может не потребоваться чтение и запись файлов сразу при запуске приложения, а выполнять соответствующие операции только при необходимости.
Голодный режим : подходит для ресурсов, которые необходимо инициализировать при запуске программы и использовать на протяжении всего жизненного цикла приложения. Например, средство ведения журнала является хорошим кандидатом для шаблона «Голодный», поскольку функция ведения журнала обычно должна быть готова в начале работы приложения и регистрировать сообщения на протяжении всего времени выполнения приложения.
Таким образом, режим ленивого человека и режим голодного человека имеют свои преимущества и недостатки, и в практическом применении их следует всесторонне рассматривать и разрабатывать в соответствии с конкретными сценариями.
- 说一下事务的几种特性?
Транзакции имеют четыре основные характеристики, которые также называютсяКИСЛОТАОсобенности, в частности:
атомарность : Атомарность означает, что все операции в транзакции либо завершены, либо не выполнены. Они представляют собой неделимую единицу работы. Если во время выполнения транзакции возникнут какие-либо ошибки или сбои, выполненные операции будут отменены (откачены), и вся транзакция будет похожа на операцию, которой никогда не было. Эта функция обеспечивает целостность и согласованность транзакций.
Последовательность : Согласованность означает, что транзакция должна перевести базу данных из одного состояния согласованности в другое состояние согласованности. До начала транзакции и после ее завершения ограничения целостности базы данных (например, ограничения первичного ключа, ограничения внешнего ключа и т. д.) не уничтожаются, и все данные сохраняют логическую согласованность. Если целостность базы данных будет нарушена во время выполнения транзакции, транзакция будет прервана, а выполненные операции будут отменены.
Изоляция : Изоляция означает, что когда несколько транзакций выполняются одновременно, каждая транзакция изолирована друг от друга, и выполнение одной транзакции не может мешать другим транзакциям. Система базы данных обеспечивает определенный уровень изоляции, чтобы одновременно выполняемые транзакции не мешали друг другу, тем самым обеспечивая корректность и согласованность данных. Изоляция обычно достигается с помощью таких механизмов, как блокировки (например, блокировки строк, блокировки таблиц и т. д.) или управление многоверсионным параллелизмом (MVCC).
Долговечность : Долговечность, также называемая постоянством, означает, что после фиксации транзакции ее изменения в базе данных являются постоянными и не будут потеряны даже в случае сбоя системы. Система базы данных обеспечивает надежность транзакций с помощью журналов и механизмов восстановления. Даже в случае сбоя системы система может восстановить изменения в базе данных путем совершения транзакций через журналы.
Исключение нулевого указателя : Выдается при попытке доступа или работы с неинициализированным объектом. Часто забывают проверить, является ли объект нулевым, и использовать его напрямую.
Исключение выхода массива за пределы (ArrayIndexOutOfBoundsException): при доступе к массиву использовался недопустимый индекс (индекс меньше 0 или больше или равен размеру массива).
Исключение преобразования типа (ClassCastException): при приведении преобразуемый объект не является экземпляром целевого типа или его подкласса.
ArithmeticException // по нулю: При выполнении операции деления делитель равен нулю.
Исключения данных:
Ошибка формата данных: Например, при анализе данных JSON или XML формат данных не соответствует ожиданиям.
Исключение целостности данных: Если ограничение внешнего ключа в базе данных не выполнено, правила целостности данных нарушаются при попытке вставки или обновления данных.
Данные не найдены, исключение: Если соответствующие данные не найдены в соответствии с заданными условиями при запросе к базе данных.
Сетевые исключения:
Тайм-аут соединения (ConnectTimeoutException): При попытке установить сетевое соединение истекло время ожидания ответа на запрос соединения.
Тайм-аут чтения (SocketTimeoutException): время ожидания операции при чтении данных из соединения истекло.
Сеть недоступна (UnknownHostException):неверное имя хоста.
Соединение отклонено (ConnectionRefusedError): Целевая машина отклонила запрос на подключение.
Исключения системных ресурсов:
Переполнение памяти (OutOfMemoryError): JVM не хватило свободного места при попытке выделить память.
Файл не существует (FileNotFoundException): Файл или каталог, к которому вы пытаетесь получить доступ, не существует.
Недостаточно разрешений (SecurityException/AccessDeniedException): Недостаточно разрешений для выполнения операций, таких как чтение и запись файлов, доступ к сетевым ресурсам и т. д.
Исключения для сторонних служб:
Служба недоступна (ServiceUnavailableException): Зависимый сторонний сервис временно недоступен.
Ограничение API (RateLimitException): запрос к стороннему API превышает его лимит (например, ограничение частоты запросов).
Ошибка аутентификации (AuthenticationException): При доступе к сторонним службам информация аутентификации недействительна или срок ее действия истек.
Логические исключения:
Ошибка бизнес-логики: Например, сумма заказа рассчитана неправильно, товарный запас недостаточен, но заказ все равно обрабатывается и т. д.
Несогласованный статус: определенное состояние системы не соответствует ожиданиям, в результате чего последующие операции становятся невозможными.
В Java обычно используемые классы для определения времени обработки — это классы трех пакетов java.util.Date, java.util.Calendar и java.time, представленных в Java 8 (например,Локальная дата, Местное время, Местная дата и времяждать)
- 说一下日历的三个方法?
Когда речь идет об операциях, связанных с календарем, мы обычно думаем о классе java.util.Calendar, поскольку это абстрактный класс, предоставляющий методы для работы с полями календаря (такими как год, месяц, день, час и т. д.).Начиная с Java 8, был представлен новый API даты и времени (расположенный в пакете java.time), обеспечивающий улучшенные возможности обработки даты и времени.
Введение в распространенные методы LocalDateTime:
Создать объект LocalDateTime
now(): создает объект LocalDateTime, представляющий текущую дату и время.
of(): создает объект LocalDateTime с указанным годом, месяцем, днем, часом, минутой, секундой (и необязательными наносекундами). Например: LocalDateTime.of(2023, Месяц.ЯНВАРЬ, 1, 12, 0, 0).
Получите свойства объекта LocalDateTime.
getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond() и т. д.: используются для получения атрибутов года, месяца, дня, часа, минуты и секунды в объекте LocalDateTime соответственно.
Измените свойства объекта LocalDateTime.
withYear(), withMonth(), withDayOfMonth(), withHour(), withMinute(), withSecond() и т. д.: установите для свойства объекта LocalDateTime указанное значение и верните новый объект LocalDateTime. Исходный объект остается неизменным. . переменная (поскольку LocalDateTime является неизменяемой).
Сложение и вычитание даты и времени
plusYears(), plusMonths(), plusDays(), plusHours(), plusMinutes(), plusSeconds() и т. д.: добавьте указанный период времени в объект LocalDateTime и верните новый объект LocalDateTime. minusYears(), minusMonths(), minusDays(), minusHours(), minusMinutes(), minusSeconds() и т. д.: вычтите указанный период времени из объекта LocalDateTime и верните новый объект LocalDateTime.
Сравнить объекты LocalDateTime
isBefore(LocalDateTime Other): определяет, является ли текущий объект более ранним, чем указанный объект LocalDateTime.
isAfter(LocalDateTime Other): определяет, является ли текущий объект более поздним, чем указанный объект LocalDateTime.
Форматирование объекта LocalDateTime
format(DateTimeFormatter formatter): форматирует объект LocalDateTime в строку в указанном формате даты и времени. Например: форматировщик DateTimeFormatter = DateTimeFormatter.ofPattern("гггг-ММ-дд ЧЧ:мм:сс"); String formattedDateTime = dateTime.format(formatter);.
Рассчитать разницу во времени
Хотя сам LocalDateTime не предоставляет метода для прямого расчета разницы во времени, вы можете использовать класс Duration или класс ChronoUnit для расчета разницы во времени между двумя объектами LocalDateTime.
Используйте класс Duration: Duration period = Duration.between(start, end); и затем вы сможете получить конкретное значение разницы во времени, например секунды, миллисекунды и т. д., через объект длительности.
С помощью класса ChronoUnit: вы можете указать единицы измерения разницы во времени, например, год, месяц, день, час и т.д. Например: длинные дни = ChronoUnit.DAYS.between(start, end);.
- 说一下session的生命周期吧。
Создание сеанса
Время создания:Сессия используется, когда пользователь впервые обращается к серверу и запрашивает JSP, сервлет и т. д.动态资源 создан когда.Доступ только к HTML, изображениям и т. д.静态资源 Это не приведет к созданию сеанса. При необходимости вы можете принудительно создать сеанс, вызвав request.getSession(true).
место хранения: Сеанс хранится на стороне сервера, обычно в памяти сервера для быстрого доступа.
Обслуживание сеанса
Обновить время последнего доступа: пока пользователь продолжает обращаться к серверу, сервер будет обновлять время последнего доступа к сеансу и поддерживать сеанс для каждого запроса, независимо от того, читать или записывать сеанс. Это указывает на то, что сеанс пользователя находится в «активном» состоянии.
уникальность сеанса : у каждого пользователя будет независимый сеанс, однозначно идентифицируемый идентификатором сеанса. Идентификатор сеанса обычно отправляется клиенту через файл cookie (с именем JSESSIONID), чтобы сервер мог идентифицировать различные сеансы пользователей.
Уничтожение сеанса
Автоматически уничтожено : по истечении срока жизненного цикла сессии (то есть в течение длительного времени нет активности), сервер автоматически очистит ее из памяти. Это время обычно настраивается и в Tomcat по умолчанию составляет 30 минут.
Ручное уничтожение : Разработчики могут вручную уничтожить сеанс, вызвав его метод validate(). Обычно это используется для таких сценариев, как выход из системы и тайм-аут.
Настройки жизненного цикла сеанса
Установите в сервлете: установите тайм-аут сеанса в секундах, вызвав метод session.setMaxInactiveInterval(int Interval).
Задается в web.xml: в файле web.xml веб-приложения通过