Здравствуйте, mik1, Вы писали:
S>>у меня была задачка S>>есть файл скажем G что бы небыло соблазна использовать рекурсию S>>проверить что все скобки парные и правильно вложенн S>>([]()) это разрещенно S>>[(]) это нет
M>Ну и стоит помнить, что если глубина стека превышает длину файла пополам, то можно смело останавливаться.
Ну а начать процесс надо с определения четности длины массива, т.к. при нечетной длине явно будет несовпадение скобок.
Здравствуйте, binnom, Вы писали:
B>Ну а начать процесс надо с определения четности длины массива, т.к. при нечетной длине явно будет несовпадение скобок.
Здравствуйте, Aртёмка, Вы писали:
Aё>Здравствуйте, binnom, Вы писали: B>>Ну а начать процесс надо с определения четности длины массива, т.к. при нечетной длине явно будет несовпадение скобок. Aё>Я бы тебя на работу не взял
Ты знаешь, я бы лучше к индусам работать пошел бы
Здравствуйте, binnom, Вы писали:
B>Ты знаешь, я бы лучше к индусам работать пошел бы
В Бангалор?
B>Кстати, что там насчет ограниченности стэка?
Каждый thread при создании наделяется фиксированным стеком вызовов. Величины можешь погуглить, но обычно что-то вроде 1-8mb. При этом в функциональные языки stackless by design, т.е. их стек- это не стек thread-а, а управляемая средой исполнения структура в памяти. При том с GC- устаревшие куски стека возвращаются в кучу, стек "бесконечный".
Здравствуйте, Aртёмка, Вы писали:
Aё>Здравствуйте, binnom, Вы писали:
B>>Ты знаешь, я бы лучше к индусам работать пошел бы Aё>В Бангалор?
Я сейчас с индусами работаю, вот они примерно так же раздувают щеки, про архитектуру рассуждать могут часами, а по факту хранят текущий язык пользователя веб-приложения в статической переменной, и говорят что "на моем компе работает!" (с)
B>>Кстати, что там насчет ограниченности стэка? Aё>Каждый thread при создании наделяется фиксированным стеком вызовов. Величины можешь погуглить, но обычно что-то вроде 1-8mb. При этом в функциональные языки stackless by design, т.е. их стек- это не стек thread-а, а управляемая средой исполнения структура в памяти. При том с GC- устаревшие куски стека возвращаются в кучу, стек "бесконечный".
Хорошо, допустим про GC ты что-то слышал, хотя GC тут вообще никаким боком не участвует. Давай теперь разберемся по трем вопросам:
1) что именно пишется в стэк трэда,
2) почему ты решил использовать именно стэк трэда для определения парности скобок (хинт: recursive approach vs non-recursive)
и критикал хит:
3) можно ли создать свой класс стэка или обязательно использовать именно стэк трэда?
Здравствуйте, Aртёмка, Вы писали:
Aё>Почему люди стремятся так жить?
так как топик скатился к обсуждению велосипедов и алгоритмов я наверное наброшу
я работал в 3 амер копаниях и все три когда приходило время делатть GC меня увольняли, последняя врала в течении N месяццев что они делают GC, но при уволнении адвокат подвердил что они не начинали процесса
можно считать что я дурак, лентяй и невезучий но
у меня был коллега который за этоже время поменял 6 компаний тк сделал себе лимит — если компания не начала GC в течении 2-3 месяцев с оговоренного срока он менял работу. парень индус и без вазелина пролезет туда куда ему надо, социальные навыки у него лучше чем у 90% людей на rsdn те уже трудно списать что человек такой
те статистика небольшая но 9 компании в числе который как миниму 2 лидера индустрии
мой вопрос что надо делать что бы такое не присхоодило
мой текущейй ответ прогибаться но проходить собеседования и работать только для MS Amazon or Bloomberg так как есть много подверждений что с GC ррем не обманывают
Здравствуйте, sergey2b, Вы писали:
S>я работал в 3 амер копаниях и все три когда приходило время делатть GC меня увольняли, последняя врала в течении N месяццев что они делают GC, но при уволнении адвокат подвердил что они не начинали процесса
Я понимаю, что процессинг GC полностью зависит от работодателя, но наверное можно же потребовать с них каких-то бумаг в подтверждение?
S>у меня был коллега который за этоже время поменял 6 компаний тк сделал себе лимит — если компания не начала GC в течении 2-3 месяцев с оговоренного срока он менял работу. парень индус и без вазелина пролезет туда куда ему надо, социальные навыки у него лучше чем у 90% людей на rsdn те уже трудно списать что человек такой
Ну и? Сделал индус GC-то себе? У них гринка процессится столько, что успевают женить детей.
S>мой вопрос что надо делать что бы такое не присхоодило S>мой текущейй ответ прогибаться но проходить собеседования и работать только для MS Amazon or Bloomberg так как есть много подверждений что с GC ррем не обманывают
Если не выйдет остаться, то можно в принципе начать искать работу в ЕС: Британия, Ирландия, Германия, Нидерланды и далее по списку. А может и в Европе понравится, там с иммиграцией сейчас вообще проблем практически нет. Ну по крайней мере в той форме, что в Штатах.
Здравствуйте, sergey2b, Вы писали:
S>если не секрет это однофвмилиц ? https://cracklab.ru/faq/MozgC S>у Блумберга есть отдел который пишет секюрети софт
Нет, это не однофамилец, но я уже лет 10 этим не занимался, хотя ностальгия накатывает
Здравствуйте, binnom, Вы писали:
S>>у меня был коллега который за этоже время поменял 6 компаний тк сделал себе лимит — если компания не начала GC в течении 2-3 месяцев с оговоренного срока он менял работу. парень индус и без вазелина пролезет туда куда ему надо, социальные навыки у него лучше чем у 90% людей на rsdn те уже трудно списать что человек такой B>Ну и? Сделал индус GC-то себе? У них гринка процессится столько, что успевают женить детей.
он работает в компании которая точно делает, так что у него все будет нормально я думаю
Bloomberg так как есть много подверждений что с GC ррем не обманывают B>Если не выйдет остаться, то можно в принципе начать искать работу в ЕС: Британия, Ирландия, Германия, Нидерланды и далее по списку. А может и в Европе понравится, там с иммиграцией сейчас вообще проблем практически нет. Ну по крайней мере в той форме, что в Штатах.
я пожил в SA 8 лет в США 4 еще одну эмиграцию я не осилю и благосостояние моих коллег кто остался сейчас выше чем у меня
Здравствуйте, Aртёмка, Вы писали:
B>>Кстати, что там насчет ограниченности стэка? Aё>Каждый thread при создании наделяется фиксированным стеком вызовов.
Который в большинстве систем ты можешь задать при создании потока, если уж тебе так припёрло использовать именно писать рекурсию.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, binnom, Вы писали:
B>1) что именно пишется в стэк трэда,
Кадр. Любая функция имеет состояние, даже если не заводит переменных на стеке- точку возврата никто не отменял. Впрочем, оптимизирующий компилятор может и развернуть рекурсию.
B>2) почему ты решил использовать именно стэк трэда для определения парности скобок (хинт: recursive approach vs non-recursive)
Я лишь указал, что оба варианта- хранение скобок в стеке потока исполнения и хранение в динамической памяти в структуре "stack"- тупые. Во втором варианте методом лома, т.е. расхода памяти, можно отложить переполнение.
B>и критикал хит:
B>3) можно ли создать свой класс стэка или обязательно использовать именно стэк трэда?
Зачем создавать свой класс? Лучше озаботиться оптимальным алгоритмом подсчёта скобок. Кстати, здесь в топике кроме раздувания щёк никто так и не предложил вменяемый алгоритм. Михаил предложил решение с выгрузкой на диск- не самое оптимальное, но решающее задачу.
UPD:
1) Нарезать блоки фиксированного размера, например 8Mb.
2) Скажем у нас 4 вида скобок. На каждую открывающую скобку записываем 2 бита в текущий блок- смещение в байтах и битах легко вычислить по счётчику. В случае 3 битов чуть сложней формула, но смысл понятен.
3) При заполнении блока, он отдаётся в хранилище блоков. Хранилище блоков все кроме верхнего блока упаковывает deflate-м- так боремся с "паттернами" вроде "({([({([", не изобретаем велосипеды с RLE. Можно с отдельным потоком и блоком синхронизации
4) Хранилище блоков при суммарном размере сжатых блоков больше установленного размера, скажем 128m, сливает сжатые блоки порциями в зависимоси от требований к латентности, или разом в временный файл. При необходимости подгружает поблочно и распаковывает.
Здравствуйте, sergey2b, Вы писали:
S>я пожил в SA 8 лет в США 4 еще одну эмиграцию я не осилю и благосостояние моих коллег кто остался сейчас выше чем у меня
То есть ты планируешь жить в SA? У меня есть знакомые, которые оттуда уехали, и все в один голос говорят — что там только временно можно жить, и им не приходило в голову там остаться.
Здравствуйте, Antidote, Вы писали:
A>То есть ты планируешь жить в SA? У меня есть знакомые, которые оттуда уехали, и все в один голос говорят — что там только временно можно жить, и им не приходило в голову там остаться.
у меня есть квартира в подмосковьи минут 20 от метро
Здравствуйте, Aртёмка, Вы писали:
B>>3) можно ли создать свой класс стэка или обязательно использовать именно стэк трэда? Aё>Зачем создавать свой класс? Лучше озаботиться оптимальным алгоритмом подсчёта скобок. Кстати, здесь в топике кроме раздувания щёк никто так и не предложил вменяемый алгоритм. Михаил предложил решение с выгрузкой на диск- не самое оптимальное, но решающее задачу.
Не самое оптимальное, но гораздо более правдоподобное и жизнеспособное, нежели непонятная конструкция с компрессией.
Aё>UPD: Aё>1) Нарезать блоки фиксированного размера, например 8Mb. Aё>2) Скажем у нас 4 вида скобок. На каждую открывающую скобку записываем 2 бита в текущий блок- смещение в байтах и битах легко вычислить по счётчику. В случае 3 битов чуть сложней формула, но смысл понятен. Aё>3) При заполнении блока, он отдаётся в хранилище блоков. Хранилище блоков все кроме верхнего блока упаковывает deflate-м- так боремся с "паттернами" вроде "({([({([", не изобретаем велосипеды с RLE. Можно с отдельным потоком и блоком синхронизации Aё>4) Хранилище блоков при суммарном размере сжатых блоков больше установленного размера, скажем 128m, сливает сжатые блоки порциями в зависимоси от требований к латентности, или разом в временный файл. При необходимости подгружает поблочно и распаковывает.
Это все прекрасно, но твой подход не решает задачу, совсем не решает. Ты просто нагородил конструкцию, которая запаковывает входящие данные.
B>Не самое оптимальное, но гораздо более правдоподобное и жизнеспособное, нежели непонятная конструкция с компрессией.
Да на собеседованиях обычно нужн лишь продемонстрировать способность к мышлению. Где/как хранить — дело десятое. И вообще следующий вопрос по логике был бы "а как этот алгоритм распараллелить".
Здравствуйте, binnom, Вы писали:
B>Это все прекрасно, но твой подход не решает задачу, совсем не решает. Ты просто нагородил конструкцию, которая запаковывает входящие данные.
Входящие скобки, да, упаковывает. И совсем решает, да решает. Запихивать неупакованные данные в динамически изменяющую размер структуру в памяти без понятия о возможном размере входного файла — индия-стайл.
Здравствуйте, SkyDance, Вы писали:
SD>Да на собеседованиях обычно нужн лишь продемонстрировать способность к мышлению. Где/как хранить — дело десятое. И вообще следующий вопрос по логике был бы "а как этот алгоритм распараллелить".
Одну половину файла читать прямо, вторую половину файла читать в реверсе — т.е. в 2 потока исполнения, и в конце проверить сходимость скобок?
Aё>Входящие скобки, да, упаковывает. И совсем решает, да решает. Запихивать неупакованные данные в динамически изменяющую размер структуру в памяти без понятия о возможном размере входного файла — индия-стайл.
Справедливости ради, упаковка занимает циклы CPU (которых у нас и так мало, если получится распараллелить задачу на все ядра). А выгрузка на диск "бесплатна" с точки зрения CPU. Причем prefetch организовать очень просто.
Здравствуйте, Antidote, Вы писали:
A>То есть ты планируешь жить в SA? У меня есть знакомые, которые оттуда уехали, и все в один голос говорят — что там только временно можно жить, и им не приходило в голову там остаться.
South Australia? Там разве есть жизнь? Ну кроме Примуса, конечно.
Здравствуйте, SkyDance, Вы писали:
Aё>>Входящие скобки, да, упаковывает. И совсем решает, да решает. Запихивать неупакованные данные в динамически изменяющую размер структуру в памяти без понятия о возможном размере входного файла — индия-стайл.
SD>Справедливости ради, упаковка занимает циклы CPU (которых у нас и так мало, если получится распараллелить задачу на все ядра). А выгрузка на диск "бесплатна" с точки зрения CPU. Причем prefetch организовать очень просто.
Циклов CPU у нас много, дисковая операция всегда дороже циклов, учитывая необходимость перехода в режим ядра и синхронизаций- даже с ssd. Упаковку можно выбрать наиболее быструю, а не только deflate.