Вопросы об интервью на программировании сокета и [закрытой] многопоточности

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

22
задан Aquarius_Girl 4 March 2014 в 07:09
поделиться

6 ответов

Как менеджер по найму, мой любимый сетевой вопрос спросить был этим:

Воображают пользователя, сидящего в соединенном с Ethernet ПК. У него есть открытый браузер. Он вводит "www.google.com" в строке поиска, и хиты входят.

Теперь говорят мне, что первый пакет, который появится на Ethernet.

Возможные ответы (переменной правильности) включают:

  • я не знаю.
  • пакет Запроса HTTP.
  • TCP А syn пакет.
  • пакет запроса DNS А.
  • пакет ARP.
  • Это зависит.

Каждый из ответов показывает что-то о понимании человека сетей в целом, и IP и TCP в частности. Последующее обсуждение может показать объемы об их понимании. (Предположение, конечно, что у корреспондента есть некоторые экспертные знания в этой области).

35
ответ дан Robᵩ 29 November 2019 в 03:26
поделиться

Различие в Программировании

  • Сокета между UDP и TCP.
  • Различие между асинхронными и синхронными сокетами.
  • , Что такое пакет.
  • , Как Вы определили бы, не прибыл ли пакет уродливый.
  • , Как Вы определили бы, где один пакет заканчивается и где другой запускается.
  • , Что такое порт.

Многопоточность

  • , Что примитивы синхронизации, Вы знаете, говорите различие между ними.
  • , Что является мертвой блокировкой и что является динамической взаимоблокировкой.
  • , Что такое состояние состязания.
  • , Что означает термин 'без блокировок'.
  • , Что лучший способ состоит в том, чтобы завершить поток.
  • , Почему Вы не должны использовать функции TerminateThread-esque.
27
ответ дан arul 29 November 2019 в 03:26
поделиться

Несколько вопросов о примере:

  • Асинхронный ввод-вывод, один подход должен задать вопрос, где различные клиенты могут запросить сервер и могут привести к условиям состязания, если реализовано через несколько потоков (например, кэширование результатов). Если интервьюируемый идет для нескольких потоков, поднимите условия состязания и посмотрите, упоминают ли они асинхронный ввод-вывод как опцию.
  • , Что является различием между мертвой блокировкой и динамической взаимоблокировкой
  • , Моделируют веб-сервер
  • , Моделируют веб-клиент
  • , Что является эфемерными портами; альтернативно опишите приложение рабочего напряжения, которое поражает сервер 1000-ми запросов в секунду, но после остановок нескольких секунд, выполняющих запросы к серверу; после 2-4 минут приложение снова начинает поражать сервер 1000-ми запросов.
  • Запись ориентированный на многопотоковое исполнение буфер производителя/потребителя, к которому может получить доступ один или несколько производитель/потребители
  • , Что является различием между клиентом/сервером и p2p
  • , который Это больше объединяет в сеть, но полезно знать то, что происходит под вызовами сокета: опишите трехстороннее квитирование TCP
  • , Каков алгоритм nagle? Когда это желательно? Как Вы выключили бы это?
  • вариант Linux: при записи демону, что является основными стандартными блоками (т.е. разветвление ребенка и уничтожение родителя, закрываясь stdin/stdout/stderr и т.д.)
  • вариант Windows: при записи сервиса окон, каковы основные стандартные блоки.
  • Дизайн протокол для передачи между клиентом и сервером для отправки аудио/видео. Как Вы расширяете его для следующей последней/самой большой функции.
  • , Как делает окна TCP, работают и что может я делать для оптимизации производительности для приложения, которое выполняет много больших чтений на континентах.
8
ответ дан terson 29 November 2019 в 03:26
поделиться

Что такое мертвая блокировка и как Вы избегаете его?

Некоторые вопросы о программировании сокета .

7
ответ дан Eclipse 29 November 2019 в 03:26
поделиться

Вы спрашиваете, потому что Вы были притянуты для интервьюирования кого-то, кто будет в команде? Задайте вопросы, которые базируются в реальных проблемах, с которыми необходимо было столкнуться в повседневной эксплуатации. Думайте о последней ошибке, которую Вы связали с программированием сокета и превращаете его в вопрос об интервью.

Теория хороша, но Вы хотите знать, что у человека, присоединяющегося к команде, есть опыт в канавках.

6
ответ дан Andy Lester 29 November 2019 в 03:26
поделиться
  • , Почему типичное снабжает программу сокетом, нуждаются во много поточной обработке
  • , Как Вы говорите с набором различных сетевых соединений сразу от того же процесса/потока? Подсказка: Асинхронный Сокет
  • Объясняет, как Интернет datatransfer работает? или Объясните, как веб-сервер работает? ответьте на него на основе концепций программирования сокета, Подсказка TCP Http и т.д.
5
ответ дан Jobi Joy 29 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: