id:side_tanaと「ミッシングマグネティックストレージ」チームで出て、5110点で予選敗退した。Nodeを選んだ例年Perlで出てるけど、今年はNodeで出てみた。その理由はPerlでは非同期処理が苦手なので、出せる技の選択肢を増やしておきたかったVSCodeの支援がよくできていたり、Chromeのデバッガにattachしてデバッグできたりと、プログラミング環境が充実している定義に飛べたりとか存在しない変数を参照して怒られるといった凡ミスを防げるメンバー全員が得意な言語がなかったので、全員そこそこ書けそうな言語を選んだふだんからフロントエンドはTypeScriptで書いてるので調子よく実装できた。await書かなければ待たずに次に進むとか、Promise.allで、これとこれが終わるのを待つ、とか、こういうことをやりたいというときにすっと書けるのが便利だったと思う。週末に一度会社に集まって練習していた。id:tkzwtksはAlibabaのログサービスを調べたりしていた。例年同じ技で出るよりかは、毎年新しいツールとか武器を獲得して出られる方が面白いと思う。チームのScrapboxに知見をまとめたり、他チームにも有用そうなことは、社のエンジニアのScrapboxに書いたりしていた。午前中サーバーが'なかなか立たず、問題のレギュレーションから予想される問題の特性を予想したりしていた。実際の問題を見たときに、どのパターンに当てはまるかなという感じで考えられてよかった。Traceに、レスポンスタイムの分布とか、その中でのクエリやAPI呼び出しが可視化されて感動したちょっとした小手先の改善をしたらレスポンしタイムの分布が目に見えて変わって、これが見えてるのは勝てそうという手応えがあったtransactions.jsonでAPIを叩きまくっている→DBから引くようにしたDBからのN+1の解消categoryはベンチマーク中増えないのでオンメモリにMySQLとのコネクションプールを使うようにnodeのプロセスをCPU数だけforkするように→なぜか18プロセスくらい?立ってしまって不思議だったそうこうしてたら午後になり、焼肉弁当を食べた。前日の夜にも、どこの出前を取るかに一番時間を使っていた。途中までは調子良かったけど後半でつっかえて、そのまま時間切れという感じだった。buyへのPOSTで時間がかかっていて、トランザクション中でAPI呼び出ししているのをなんとかしたい、ということになった。100)とかで結果を得られなかったら打ち切っても良かったのかもキャンペーンの数値を変えてみる→タイムアウトするようになったのでやめたキャンペーン中はタイムアウトが厳しくなるのか?とか話してたけど深追いできていなかった小手先の技で新着商品を調整した売れたものは出さない→これでちょっと上がった一度に返すアイテム数を変える→ベンチマークが落ちる高い順に返す→ベンチマークが落ちるAPI2つ叩いているところをPromise.allで並列化→スコアに変化なしサーバー3台構成を試す→sessionの問題?が出てやめた今思うとkeepaliveの設定したら良かったのか?loginが遅い問題→既存のユーザーのハッシュは変えられないので困ったねというところで手を出せずサーバー2台構成を試していたけど、動かないまま残り10分になったので戻す6720点がベストで、だいたい5000点くらいをふらふらしていた。良かったこと分散トレーシングを入れたり、今年はコンソールに入れたのでコンソールからログを集計できたりと、新たな技を出せたのは良かった僕はコードを書くのは得意というロールで、小手先の実装をささっとできたのはよかった。エディタの環境もよくて、心地よく書いてスコアアップできたのでその瞬間はやったぜという感じだったデータを第一に扱って、事実と仮説を分けて扱えた。ホワイトボードに仮説コーナーを作り、思い込みで進んでしまわないようにした悪かったことボトルネックに集中することと、ペアプロに重きをおいたので1:2で動く作戦でやっていたけど、視野が狭かった。ぶつかったボトルネックの直し方がわからないときに、一人引いた視点で見る動きをやってもらえばよかった分散トレースで、1リクエスト内での動きは手にとるように分かったけど、どのユーザーはいつログインして、とか、どの商品がいつどうなって、のような、リクエスト間を超えたストーリーをつかめていなかった。去年本戦で強かった人は、ベンチマークの挙動のメンタルモデルができていたと思う。変なロックを取っているのはなぜなのか、というときに、どのようなストーリーでロックがられているのかという議論ができなかった最終的に3台使わないことには勝てないと思われるので、全員でアプリケーションの改善をするまえに、足回りをしっかり整えて、サーバー3台構成にできるよう準備してもらったらよかった。API呼び出しが遅いからサーバーが増えても仕方ないのでは?とか話していたけど、CPUは使い切っていたので、分散すればもうすこしスコアを伸ばせた可能性はあったのではないか大きな作戦を立てて全員で集中しましょうという作戦で、連携しながら動いた。大体の場合はよかったけど、状況に合わせて、作戦のパターンを増やしたほうがよい瞬間には自立した人間が3人に分散できるようなチームをとれるとより強くなれそうホワイトボードのコーナーカウボーイが暴れると言うよりは、助け合い、協調を重んじる作戦。開始前に、自分たちが出題するとしたらどういう問題や罠を仕込むだろう、という話をしていた。関連図は頭に入ってないと議論にならないので、最初に書く。大きなテーブルはどれなのかというコーナー。今回はデータ量はたいしたことなかった。データ量のコーナーなぜ物が売れないのかという議論。API呼び出しをなんとかしたいね〜という話。終わってから、ShipしてからPaymentを呼んでるのがおかしいのでは?とか話していた。出品から購入までの分析(結局うまくいかなかった)毎年、どこをどうしたか覚えていて、それだけ印象に残ってるということは一年で数回あるかないかくらいの楽しい一日だと思う。出題者の皆様、運営の皆様、お疲れさまでした。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。