Вам, кто ищет работу
Говорят, что золото — это 3, а серебро — 4. Для тех, кто ищет работу, поскольку март или апрель — сезон конца года для многих интернет-компаний, многие люди недовольны получением премии в конце года или считают, что их развитие карьеры страдает.Ограничь, потом убегай. Таким образом, во многих отделах возникнут вакантные места из-за текучести кадров. ==Я хочу сказать, что март и апрель каждого года действительно являются сезонами с наибольшим количеством человеко-часов, но в то же время это пик сезона смены работы, и конкуренция огромна. хорошая яма, вам нужна абсолютная сила. ==Условно говоря конец года на самом деле хорошее время.Как говорится в инете много вакансий которые набирают людей круглый год,а людей круглый год не хватает.Конечно ХК не богат, а в конце года это зависит от возможностей.людей тоже мало. В конце концов, многие люди до сих пор заботятся о «премии в конце года». Таким образом, если вы поменяете работу в конце года, вы можете потерять часть премии по итогам года, но конкурентоспособность при смене работы будет относительно меньше, и будет меньше конкурирующих людей. "сила удачи"?
Быстрое интервью
алгоритм
Интервьюер очень любезен. Он сказал, что использовался лист Excel. Числа в листе Excel обычно такие: A....Z AA...AZ BA...BZ, что соответствует цифрам 0. ..25 26.. ..51 52...77, аналогия с цифровым отображением, по заданной строке найдите результат отображения.
анализироватьЭта тема на самом деле очень проста, ее можно понимать как базовое преобразование на основе 26, цикла for, за исключением того, что символы в конце добавляются непосредственно к результату, результат битов других символов -'A'+1 равен умножается на 26 * (разница между позицией символа и концом). Делая такого рода задачи, нужно сначала подумать об этом, и сделать это вручную. Если вы хотите увидеть конкретный код ответа, вы можете отсканировать код, чтобы следовать [Пути программиста], и ответить «Быстрое преобразование столбца вручную» в фоновом режиме.
Второй алгоритм немного предвзят, как реализовать распределенную блокировку redis.
Если вы не сталкивались с высокой степенью параллелизма или не использовали Redis в качестве распределенной блокировки, то этот алгоритм не должен быть написан, и, как этот алгоритм, вообще говоря, можно говорить об идеях. Конкретная реализация действительно немного сложна. Что касается распределенных блокировок, то на самом деле есть несколько ям:
- Для блокировки необходимо установить время истечения срока действия (чтобы предотвратить невозможность снятия блокировки, блокировку можно снять автоматически, если есть время истечения). А блокировка и установка срока действия должны быть атомарными операциями. В противном случае, если блокировка выполнена успешно, но клиент аварийно завершает работу при установке времени истечения срока действия, установка времени истечения не выполняется.
- Блокировка и снятие блокировки должны быть одним и тем же клиентом. отмечены уникальным идентификатором.
- При освобождении блокировки оценка того, принадлежит ли блокировка самому себе, и освобождение блокировки должны быть атомарной операцией.
Подумав об этом, можете ли вы написать правильный способ блокировки и разблокировки? Для конкретных ям и правильного способа разблокировки обратите внимание на [Путь программистов] и ответьте «распределенная блокировка redis» в фоновом режиме.
Основание
- Как создать индекс mysql, оператор запроса выбирает * из T, где a = "a" и b = "b" и c = "c", и выбирает * из T, где a = "a" и c = "c" и b= Имеет ли значение «b» какое-либо значение? Какие принципы рекомендуются для индексации?Ключевые моменты:
(1)尽量减少like,但不是绝对不可用,”xxxx%” 是可以用到索引的
(2)表的主键、外键必须有索引
(3 谁的区分度更高(同值的最少),谁建索引,区分度的公式是count(distinct(字段))/count(*)
(4)单表数据太少,不适合建索引
(5)where,order by ,group by 等过滤时,后面的字段最好加上索引
(6)如果既有单字段索引,又有这几个字段上的联合索引,一般可以删除联合索引;
(7)联合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
(8)联合索引: mysql 从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index(a,b,c). 可以支持 a|a,b|a,b,c 3种组合进行查找,但不支持 b,c 进行查找.当最左侧字段是常量引用时,索引就十分有效。
(9)前缀索引: 有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。其缺点是不能用于ORDER BY和GROUP BY操作,也不能用于覆盖索引 Covering index(即当索引本身包含查询所需全部数据时,不再访问数据文件本身)。
(10)NULL会导致索引形同虚设
= и in могут стоять не по порядку, например, a = 1 и b = 2 и c = 3. Индекс (a,b,c) можно строить в любом порядке, оптимизатор запросов mysql поможет вам его оптимизировать в форму, которую индекс может распознать.
-
Какие структуры данных есть в Redis и для чего они используются? Как использовать Sorted Set в Redis, какие параметры нужно передать?Ключевые моменты:Структура данных redis: String, Hash, List, Set, Sorted Set, просто скажите, что вы использовали, если вы не использовали это, вы, вероятно, можете догадаться, что это такое, исходя из существительного. Интервьюер спросил «Отсортированный набор», вероятно, потому, что вы слышали, как вы говорите «Отсортированный набор», поэтому я спросил ваш приказ, чтобы убедиться, что вы действительно его знаете.Если вы не знаете, вы не можете дурачиться. Упорядоченная коллекция. При настройке каждого ключа необходимо передать параметр score. Значение оценки ключа zadd для конкретной команды. Есть еще несколько команд, которые нужно выучить в гугле!
-
Какая польза от java volatile. public int incrment() {count++}, есть ли проблема с одновременным доступом к двум потокам, если count изменен с помощью volatile?Ключевые моменты:Volatile предназначен главным образом для обеспечения видимости многопоточного доступа. Мы знаем, что компьютер вводит вероятность рабочей памяти и основной памяти, чтобы улучшить скорость доступа к памяти.Когда многопоточность обращается к данным, она обращается к данным в рабочей памяти, и рабочая память между каждым потоком изолируется отдельно. Это может привести к тому, что одна и та же переменная, из-за наличия рабочей памяти, разные потоки «видят значение» не одинаково. Однако ключевое слово volatile заставляет каждый поток читать переменную из основной памяти, и в то же время изменение переменной также напрямую обновляется в основной памяти, что гарантирует, что изменение той же самой переменной может быть немедленно " видел" в других темах. . При этом используется метод «барьера памяти». Для count++, когда выполняется операционная система, это не атомарная операция, а разделенная на три шага: 1) Загрузить переменную count в память. 2) Выполнить count+1 3) Сохранить результат в памяти. Неатомарные операции при выполнении любого шага могут быть прерваны другими потоками, поэтому при многопоточном выполнении будут проблемы. Также нельзя использовать volatile модификацию, потому что это не атомарная операция, а только обеспечивает видимость, а проблему атомарности решить нельзя.
-
Какая память выделяется в jvm и для чего она используется?Ключевые моменты:Выделение памяти JVM является почти обязательным для каждого интервью разработчика Java, и одного содержания этой части достаточно, чтобы написать несколько глав. Вот лишь краткое введение. Память JVM делится на молодое поколение и старое поколение.Молодое поколение далее делится на области S0, S1 и Eden.JVM использует алгоритм сборки мусора поколений, потому что таким образом характеристики объектов молодого поколения и старое поколение может быть полностью использовано и максимально повысить эффективность сбора мусора.
-
Объекты класса выделяются в молодом поколении после того, как они определены.
-
Большие объекты или большие массивы выделяются непосредственно в старом поколении.
Общие алгоритмы сборки мусора включают алгоритм репликации, удаление меток, сортировку меток, а затем приводят к различным сборщикам мусора.Итерация сборщика мусора — это процесс постоянного поиска проблем и оптимизации.Сборщики, используемые сборщиками нового поколения: Serial, PraNew , Parallel Scavenge; сборщики, используемые старыми сборщиками: Serial Old, Parallel Old, CMS. Тогда говорите об этом со своим пониманием!
-
Что такое стек jvm, зачем там куча и стек, можно ли использовать только кучу?Ключевые моменты:Стек JVM является закрытым для потока, и некоторые основные переменные хранятся в стеке.Стек Java хранит кадры стека один за другим, каждый кадр стека соответствует вызываемому методу, а кадр стека включает в себя таблицу локальных переменных. (локальные переменные), стек операндов (стек операндов), ссылка на пул констант времени выполнения класса, к которому принадлежит текущий метод (концепция пула констант времени выполнения будет обсуждаться в области методов) (ссылка на пул констант времени выполнения) , адрес возврата метода (Return Address) и некоторую дополнительную дополнительную информацию. Когда поток выполняет метод, он создает соответствующий кадр стека и помещает созданный кадр стека в стек. Когда метод завершает выполнение, кадр стека извлекается из стека. Почему стек после кучи? Можно сказать, что существование стека решает проблему рекурсивных вызовов. Если бы была только куча памяти, не было бы рекурсивных вызовов.
-
Как реализовать распределенный идентификатор автоинкремента и как обеспечить согласованность с базой данных, если он реализован с помощью Redis? Распределенный идентификатор автоинкремента обычно использует идентификатор автоинкремента MySQL, функцию incr Redis и более классический алгоритм снежинки. Самоувеличивающийся идентификатор MySQL ограничен скоростью доступа к базе данных, а количество запросов в секунду при распределенном использовании невелико. Чтобы использовать Redis для генерации автоматически увеличивающегося идентификатора, необходимо предотвратить возможность сбоя Redis.Как правило, текущее наибольшее значение записывается в MySQL или hbase. Или, если вы проектируете комнату чата, должно быть постоянное хранилище максимального seqId текущей комнаты чата.В случае сбоя кластера Redis возьмите максимальный seqId из постоянного хранилища и автоматически увеличьте его.
-
В чем разница между ArrayList и LinkedList и когда они используются? Базовая реализация ArrayList представляет собой массив, и расширение массива выполняется непрерывно путем копирования, поэтому, когда емкость хранимых данных постоянно меняется, производительность ArrayList относительно низкая. При использовании ArrayList обычно прогнозируется максимальная емкость данных. Если вы можете использовать массивы напрямую, то, конечно, лучше всего использовать массивы. Базовая реализация LinkedList представляет собой связанный список.Когда происходит расширение данных, производительность выше, но пространство, занимаемое той же емкостью, больше, чем у ArrayList. Для частого расширения данных рекомендуется LinkedList.
Интервью содержит гораздо больше содержания, которое будет представлено в следующей статье из-за нехватки места. Друзья программисты, вам одиноко, тогда присоединяйтесь к официальному аккаунту [Programmer's Way], общайтесь вместе и уходите с пути нашего программиста!