Резюме для программиста
Смена расчёта - это смена тестов этого расчёта.
-----
Правда?
Рассчет:
было - 2 * 2...
стало - 2 + 2...
Основание замены - сложение выполняется быстрее.
Ну и что поменяется в тестах?
Что-то поднадоел твой тролинг... человек способный писать хоть простейший код не может быть настолько тупым...
Что-то поднадоел твой тролинг... человек способный писать хоть простейший код не может быть настолько тупым...
Если вы такой умный, то как вы можете до сих пор вестись на этот троллинг? ))
было - 2 * 2...
стало - 2 + 2...
Основание замены - сложение выполняется быстрее.
Ну и что поменяется в тестах?
А что так сложно? Почему не return 4? А можно вместо функции вообще возвращать небольшой массив констант на разных диапазонах - заранее посчитанная дискретная аппроксимация. Если точность аппроксимации достаточная, то и ладно.
Всё зависит от задачи. Если вам нужна именно 4, то тест менять не надо. А если нужно конкретное действие - умножение или сложение, и оно поменяалось, то и тест должен поменяться.
Если вам надо неважно какое значение получить, лишь бы близко в каком-то диапазоне, то в тестах можно просто проверять на диапазон. Но нужно понимать, какие вообще значения могут вернуться по смыслу задачи - какие диапазоны где допустимы. А если в задаче конкретная формула, то она и должна тестироваться. В жизни сложение проверяется пересчётом (правило из первого класса), а в тестах сложение проверяется сложением. Если вам нужен синус с точными значениями, то замена его той же дискретной аппроксимацией не подойдёт, и тест, который делает проверку по точной функции синуса, это покажет.
Хмм, логично. Но только для сложных формул. Если реально логика - банальные операции, которые встроены в язык или фреймворк, то их тестировать нет смысла - фреймворк и без меня тестируют.
Вот в этом моём случае я пожалуй перепишу на захардкоденные значения - т.е. тут удобнее не TestCaseSource (NUnit, если что) использовать, а пачку TestCase со вбитыми руками значениями.
Вобщем, примеры про сложение у меня слишком упрощённые, поэтому за ними потерялась суть. Конечно, логика у меня складывает значения и в тестах я проверяю её работу банальным сложением. Но логика складывает небанально. Вот тест
[TestCaseSource(nameof(_testValues))] public void AddModifier_AbsoluteValueModifier_ValueChangesCorrectly(double test) { _charStat.AddModifier(new StatModifier(test, StatModifierType.Absolute)); var result = _charStat.Value; var expected = _baseValue + test; expected = Math.Round(expected, 0, MidpointRounding.AwayFromZero); Assert.AreEqual(result, expected); }
А вот логика, где AddModifier вызывает CalculateValue, но через прокладку обработчика событий (AddModifier добавляет значения в ObservableCollection - я это всё опускаю, чтобы не загромождать тут).
void CalculateValue() { var finalValue = BaseValue; foreach (var mod in StatMidifiers) { switch (mod.ModifierType) { case StatModifierType.Absolute: finalValue += mod.Value; break; case StatModifierType.Percent: var percentage = mod.Value < -100 ? -100 : mod.Value; finalValue = (int)Rounding.RoundCharacterStatistics(finalValue * (1 + percentage / 100.0)); break; default: throw new ArgumentException(message: "Invalid enum value.", paramName: nameof(mod.ModifierType)); } } Value = Math.Round(finalValue, 0, MidpointRounding.AwayFromZero); }
Т.е. по бизнес-логике я просто добавляю значения, что проверяется суммированием, а по конкретной реализации суммирование я делаю только тут
finalValue += mod.Value;
но добавляю ещё кучу другой логики - т.е. делаю это далеко не банальным сложением.
Ещё вынесу правило округления в отдельную функцию (и может даже затестирую её), и даже библиотеку, и буду подключать её и к бизнес-логике, и к тестам. Чтобы код не дублировать.
Жаль, что не могу использовать C# 9, пока Юнити не перешёл на новую версию, где .NET 5 поддерживается (обещают в этом году) - приходится писать свичи в старом громоздком стиле.
Во, в крайнем случае можно писать простые вычислительные действия прямо в параметрах атрибутов
[TestCase(99999, 10 + 99999)] [TestCase(-99999, 10 - 99999)]
И ещё можно константы использовать (но не вычисляемые в самих методах теста переменные, т.к. код атрибута выполняется раньше любого метода теста, а значит к нему в конструктор должны прийти уже инициализированные переменные)
const int _baseValue = 10; [TestCase(99999, _baseValue + 99999)] [TestCase(-99999, _baseValue - 99999)]
Из комментов оттуда
Обычно в компаниях разводят js и. Net core, потому что над ними работают работают разные команды в разных редакторах, да и деплоят их отдельно.
Видно, я бевербовался в необычные компании, раз у них всё вместе мешают и над всем этим работает одна команда, или вообще один человек-оркестр.
Там немного про другое - отдельное JS-приложение. Но суть та же - два разных языка и разные технологии. В обычных компаниях их разводят по командам и специалистам. В необычных - всё в кучу.
Сейчас только обратил внимание на одно место в резюме, которое внутри Dienstleistungsfirma было, а там
Senior Softwareentwickler C#/.NET
Я конечно польщён, но кажется понятно, почему меня не очень хотели брать. А продавали явно не за 40к.
С другой стороны, как я говорил, разговаривал там с человеком, который тесты не писал. В чём в принципе разница между сеньёром и несеньёром в той фирме? Обязанности те же самые - полный цикл разработки приложения, если один делаешь, или то же самое в команде - т.е. на любой участок кинуть могут. Только сеньёр больше получает.
Короче, теперь буду просить минимум 45, а не 40. Плюс транспортные расходы.
Вот, переделал резюме. Использовал помощь от "Срыв покровов", данные из внутреннего резюме Dienstleistungsfirma, и от себя добавил.
В резюме Dienstleistungsfirma стоит национальность и дата рождения. Я здесь не указывал и не указываю сейчас. Буду проговаривать, если будут спрашивать. Не знаю, стоит ли указать, или лучше всё же проговаривать. Просто некоторые спрашивают про разрешение на работу и сколько ещё действительна виза - думают, что я по рабочей или вообще нелегал.
С нормальным переводом названия магистерской работы пока не знаю что делать. По-русски она звучит так: "Исследование и разработка метода синтеза фильтров на нерегулярных линиях передачи". Чтобы было понятно, имеются ввиду подобные линии Микрополосковая линия — Википедия (wikipedia.org).
Изменения:
- правка ошибок,
- опыт работы продлил до 21 года (я работал удалённо даже после переезда, консультировал), но не указал срок "по настоящее время" - может, ещё накинуть 1-2 месяца?
- добавил
раздел Weiterbildung, где написал про языки и прочие обучения - тут "по настоящее время"
- звание магистра написал не просто "Master", а "Master of Science" - чтобы было что-то из списка по ссылке Master – Wikipedia,
- Ausbildung заменил на Studium,
- убрал упоминание, что я переехал в Германию - у меня адрес немецкий,
- добавил NUnit в Kenntnisse )))
Если вы такой умный, то как вы можете до сих пор вестись на этот троллинг? ))
Я с айти ушёл, потому-что там выпендриваются типа мурр, и друг другу хотят показать свои знания. Если не умеешь то начинают всякое клеймо ставить, типа на неспособность в программирование, только погрубее. Допустим этот программер - https://yvision.kz/u/Hes говорил мне, что я не умею программировать на net, а у самого там много дизлайков. Со своим LINQ он мне весь плешь проел см. https://yvision.kz/post/429471 и https://yvision.kz/post/435356. Только из-за него и учил этот LINQ, провёл исследования, LINQ немного медленно работает. исследование простые - в начале до LINQ и foreach ставите DateTime Now, в конце LINQ и foreach ставите опять DateTime Now, а потом сравниваете 2 даты до и после, у меня на простые LINQ уходит где-то примерно 4 сек., а если сделать сложные LINQ и очень много записей, особенно на сервере - то всё замёрзнет напрочь и будет программа или сервер еле еле шевелиться, в Германии распространён тонкий клиент-сервер (так немцы экономят денюжки), покупают один сервер, покупают для сервера Client Access License, покупают 10-100 тонких клиентов, потом настраивают, а пользователь включает тонкий клиент, который подключается к Windows Server через сеть или Wi-Fi, если там будут сидеть одновременно ну скажем 20 пользователей, и будут выполняться тяжёлые и сложные LINQ, весь сервер просто замёрзнет, из-за того что будет много съедаться памяти см.:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace LINQTest { public partial class Form1 : Form { private DateTime tm1; public Form1() { // tm1 = DateTime.Now; InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { const int MAX_RECORDS = 6000; String[] firstnames = new String[] { "Ольга", "Наталья", "Марина", "Александра", "Ирина", "Екатерина", "Сабина", "Элеонора", "Елезавета" }; String[] lastnames = new String[] {"Попова", "Шевченко", "Найденко", "Сидорова", "Еремеева", "Шабанова", "Иванова", "Ким", "Пушкина", "Лысенко", "Квашенко", "Зайцева", "Краскова", "Даренко", "Абрамушина", "Березовская", "Касымова", "Чечмарёва", "Надымова", "Кокина", "Кабаева", "Лебедева", "Соколова", "Кузнецова", "Новикова", "Морозова", "Дроздова", "Дудь", "Порхоменко", "Надымова", "Викулова", "Здорова", "Краскова", "Гудкова", "Грудинина", "Конь", "Шишков", "Рыжкова", "Жукова", "Дмитриев", "Порхоменко", "Мухина"}; String[] stations = new String[] { "Онкология", "Пульмунология", "Гастрэнторология", "Травматология", ""}; Person[] persons = new Person[MAX_RECORDS]; Hospital[] hospital = new Hospital[MAX_RECORDS]; Random rnd = new Random(); Random rnd2 = new Random(); Random rnd3 = new Random(); Random rnd4 = new Random(); Random rnd5 = new Random(); Random rnd6 = new Random(); for (int j = 0; j < MAX_RECORDS; j++) { persons[j] = new Person(); persons[j].personID = j; persons[j].FirstName = firstnames[rnd.Next(0, firstnames.Length)]; persons[j].LastName = lastnames[rnd2.Next(0, lastnames.Length)]; persons[j].Birthday = new DateTime(rnd3.Next(1920, 1980), rnd3.Next(1, 12), rnd3.Next(1, 20)); } for (int j2 = 0; j2 < MAX_RECORDS; j2++) { hospital[j2] = new Hospital(); hospital[j2].PersonID = rnd4.Next(0, MAX_RECORDS); int day = rnd5.Next(1, 20); int month = rnd5.Next(1, 8); hospital[j2]._From = new DateTime(2018, month, day); hospital[j2]._To= new DateTime(2018, month+rnd5.Next(1, 4), day+5); hospital[j2].Station = stations[rnd6.Next(0, stations.Length)]; } tm1 = DateTime.Now; // засекаем отсюда время var results = from p in persons from h in hospital where p.personID == h.PersonID select new { p.FirstName, p.LastName, p.Birthday, h.Station, h._From, h._To }; this.dataGridView1.DataSource = results.ToList(); this.txtCount.Text = MAX_RECORDS.ToString(); TimeSpan ts= DateTime.Now - tm1; // вычисляем время this.txtTime.Text = ts.Seconds.ToString() + " сек."; /*foreach (var r in results) { //this.listBox1.Items.Add(r.FirstName + " " + r.LastName + " " + r.Birthday + " "+ r._From + " " + r._To); }*/ } } }
Вот результат 4 сек, всего 6 тыщ записей:
https://i.ibb.co/5YRjq4r/1-min.jpg
Этот код я делал в 2019 или 2020 году, сейчас посмотрел и вроде заметил ошибку, я тогда только начинал заниматься LINQ.
Вот результат 4 сек, всего 6 тыщ записей:
А теперь представим что это выполняется на IIS. Получается нужно будет наверное Request Timeout увеличить см. https://stackoverflow.com/questions/2414441/how-to-increase-request-timeout-in-iis?
<system.web> <httpRuntime executionTimeout="180" /> </system.web>
Этот код я делал в 2019 или 2020 году, сейчас посмотрел и вроде заметил ошибку, я тогда только начинал заниматься LINQ.
Хм, хотя в stackoverflow написано, что вроде так правильно...
var result = (from p in person from c in college select new { p.Name, p.Age, c.Course, c.Lecture });
Но всё равно я привык join-ить,
В резюме Dienstleistungsfirma стоит национальность и дата рождения.
Скорее всего, там написано "staatsangehörigkeit" - это гражданство. Допишите что есть разрешение на работу и проживание без ограничений.
Дату рождения тоже можно написать, главное что бы год был правильный.
Вместо A1-B2, я бы оставил только B2 и дописал "сертификат" или что там получено по окончании
Перевод гугла мне как то больше нравится, но как должно быть правильно ...
"Forschung und Entwicklung eines Verfahrens zur Synthese von Filtern auf unregelmäßigen Übertragungsleitungen"
Хм, хотя в stackoverflow написано, что вроде так правильно...
var result = (from p in person from c in college select new { p.Name, p.Age, c.Course, c.Lecture });
Зачем там взяли в скобки запрос, не знаю. Работает и без скобок. Может, человек выдрал не совсем правильно кусок код из более сложного запроса. Обычно в скобки берут, когда хотят к SQL-синтаксису потом дописать метод-синтакс, чтобы преобразовать результат запроса в список типа ToList или просто чтобы он выполнился (они же там все "ленивые"). Поэтому я предпочитаю метод-синтакс - меньше скобок и больше читаемость, на мой взгляд. Хотя, вроде, есть в метод-синтаксе пара штук, которые удобнее делать в SQL-синтаксе, но я не помню какие. Тут можно почитать.
А вообще, я сомневаюсь, что вы получаете существенный удар по производительности на таких маленьких коллекциях. Если всё написано правильно, навряд ли разница в производительности у LINQ и for отличается в разы. Да даже на десятки процентов. Если вы пишете сверхвылизанную по производительности систему, то можно заменить всё на стандартные циклы вместо линк. Не знаю, что там немцы выиграют по железу и производительности, но могут проиграть по поддержке такого кода - т.е. выигрыш уйдёт в дополнительные человекочасы программистов.
Знаете, когда народ толкает везде джаваскрипт, как-то двулично предъявлять претензии к линку. Некоторые вообще C# отрицают и даже местами С++ - всё должно быть в машинных кодах. Тут главное сильно не увлекаться - "не сотвори себе кумира".
Скорее всего, там написано "staatsangehörigkeit" - это гражданство. Допишите что есть разрешение на работу и проживание без ограничений.
Так и есть.
Дату рождения тоже можно написать, главное что бы год был правильный.
Я начитался рекомендаций из англоязычных (читай американских) источников - там у них жуткий пунктик по личным данным, чтобы всяких bias не было, что лучше подобные вещи скрывать. Ну и пока оставлю так - будет повод позвонить мне и поговорить. Хоть так буду поддерживать практику общения на эти темы. ))
Вместо A1-B2, я бы оставил только B2 и дописал "сертификат" или что там получено по окончании
Да, пожалуй.
Я просто хотел показать, что не балду пинал всё это время. Всё же, получить В2 с нуля - минимум год, и нормально - 2 года.
Перевод гугла мне как то больше нравится, но как должно быть правильно
...
"Forschung und Entwicklung eines Verfahrens zur Synthese von Filtern auf unregelmäßigen Übertragungsleitungen"
Да тоже лучше, наверное, самому скомпилировать, используя термины из Википедии. Переводчица что-то намудрила, но она не профессионал, и может терминов не знать. Я, кстати, тоже немецкие термины не знаю, но знаю английские и русские.
там у них жуткий пунктик по личным данным
Ну напишите только год
будет повод позвонить мне и поговорить
Скорее повод выбросить в корзину, чем звонить. Никому не нужна лишняя работа, подсчитывать по дате окончания института может быть просто лень.
наверное, самому скомпилировать
В любом случае, несколько местных должны прочитать и сказать своё мнение.
Например, я не знаю во всех ли случаях уместно использовать Übertragungsleitungen и для отличий от Übertragungsstrecken могу только строить предположения. Но Übertragungslinien - это скорее ZEN, чем электричество.
Что еще не понимаю откуда взялось слово Thesis
https://www.duden.de/rechtschreibung/Thesis
Обычно это тема
https://www.bachelorprint.de/wissenschaftliche-arbeiten/di...
Я офигеваю с нового тренда! - Курилка (germany.ru)
У меня - семерка.
Кто бы мне еще сказал какого черта лапоть греется... до запаха палева...
две браузерные игрушки... т.е. жабий скрипт и картинки...
И эти люди запрещают мне ковыряться в носу выговаривают мне за XML!
А я ведь даже не искал - случайно наткнулся. Что там можно ещё откопать, если искать специально...
)))
Что еще не понимаю откуда взялось слово Thesis
https://www.duden.de/rechtschreibung/Thesis
Обычно это тема
https://www.bachelorprint.de/wissenschaftliche-arbeiten/di...
- englische Bezeichnung der Abschlussarbeit zur Erlangung eines akademischen Grades, siehe Studienabschlussarbeit
Взял из примера одного резюме тут. Ну и звучит это на английский манер - могут подумать, что я знатный инглишмен и вообще диплом по международным стандартам имею. Короче, это всё ради первого впечатления. Я не пытаюсь выдать себя за местного немца, ни в резюме, ни в жизни.
В любом случае, несколько местных должны прочитать и сказать своё мнение.
Например, я не знаю во всех ли случаях уместно использовать Übertragungsleitungen и для отличий от Übertragungsstrecken могу только строить предположения. Но Übertragungslinien - это скорее ZEN, чем электричеств
русский
Исследование и разработка метода синтеза фильтров на нерегулярных линиях передачи.
"Линия передачи" это слишком широкое понятие, не имеющее какого-то устоявшегося термина (или его трудно найти), чтобы ассоциировать мою работу именно с микрополосковыми линиями. А микрополосок - это более узкий термин, имеющий прямой аналог в английском и немецком. Именно то, что изображено в татьях в Википедии по этим терминам, я и проектировал: Streifenleitung – Wikipedia
И ещё мне не нравится слово Ausarbeitung для "разработки" - его аналогов почти не встерчаю. Лучше, наверное, Entwicklung.
Вобщем, получается русский изменённый вариант
Исследование и разработка метода синтеза фильтров на нерегулярных микрополосковых линиях.
Тогда английский вариант будет звучать ближе к истине и чему-то конкретному - это взял из Гугл-Транслейт
Research and development of a method for the synthesis of filters on irregular microstrip lines.
Немецкий вариант возьму не напрямую из переводчика, а переделаю немного
Forschung und Entwicklung der Filtersynthesemethode für unregelmäßige Mikrostreifenleitungen.
Зачем там взяли в скобки запрос, не знаю. Работает и без скобок
Имхо это старый способ, сейчас пользуются методом Select, и ещё злоупотребляют лямбдами. Тот программист, ссылку которого я вам дал, он мне и про лямбды мозг выносил.