SlideShare a Scribd company logo
1 of 17
コーディング面接
岩永 信之
目的・今日やること
• 日本でももっとコーディング面接はやらないか
な
• 実際に出るような問題で、ありそうな流れの例
をライブ コーディング
出題例
• 文字列の中から回文になっている部分をすべて
列挙
abcbad
a, b, c, bcb, abcba
ポイント
• 見られるのは計算機科学的なところ
• アルゴリズムを考えられるか
• 計算量やテストも考えているか
• 過程も見られる
• どういう考えでコードを書いているか
• 試験監との対話
やること
• まずはシンプルな実装を
• 計算量とか気にせずとりあえず結果出したい
• 後々、アルゴリズムを改善していくうえでのテスト
に使いたい
ここまで
• アルゴリズムがらみではyield return便利
• この手の問題にはデータの列挙が非常に多い
• 「substringの列挙」と「回文判定」を分けれる
やること
• ちょっとコード整理
• 1で作ったコードはテスト用にとっておきたい
• → SimpleImplementationクラスに移動
• オーダーとか抜きにして軽く書き換え&テストして
みる
• string.Substringは呼ぶたびに文字列のコピーを作るという
問題が
• 回文判定を前にもってきて、必要な時にだけSubstringする
ように
• →Implementation1クラス追加
ここまで
• とりあえず下準備完了
• stringのコピー作らないように
• 条件判定をデリゲートで渡して前にもってくる
• テスト
• 1で作ったコードとSequenceEqual
• とりあえずテストデータは数パターン
• 後で時間があればもっとテストケース増やす
やりたいこと
• 最適化の基本は計測
• ループの一番深いところにcount++仕込む
• Stopwatch
ここまで
• 判定の順序変えただけなので
• 比較回数は変わってない
• 文字列コピーの頻度が減るので
• 実行時間はかなり減る
• 元のコードは常時O(n3)
• 新しいコードは平均的にはO(n2)
やりたいこと
• ようやくまともにアルゴリズムを考える
回文
非回文
回文a a
非回文a a
回文の両脇だけ見れば
1周り大きい回文の
判定できる
回文a b
回文
非回文
非回文
回文でないものを中心
として別の回文ができ
ることはありえない
ここまで
• 元のアルゴリズム
• 平均O(n2)、最悪O(n3)
• ちゃんとしたアルゴリズム
• 平均O(n)、最悪O(n2)
最後に
• この内容は下準備ありなので手際よくやれて当
然
• あんまりテスト コードに気をとられてるとそれだ
けで時間切れになるかも
• 先にどういうコード書きたいかのアイディア伝える
• 本番中にいいアルゴリズムを思いつくとも限らない
けども、対話しながら進める

More Related Content

Viewers also liked

めとべや東京#4 LT「WP8.1アプリ開発のススメ」
めとべや東京#4 LT「WP8.1アプリ開発のススメ」めとべや東京#4 LT「WP8.1アプリ開発のススメ」
めとべや東京#4 LT「WP8.1アプリ開発のススメ」
OD-10Z Midorikawa
 

Viewers also liked (12)

C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
シリコンバレー 面接体験
シリコンバレー 面接体験シリコンバレー 面接体験
シリコンバレー 面接体験
 
DeclarativeSql
DeclarativeSqlDeclarativeSql
DeclarativeSql
 
Modern .NET
Modern .NETModern .NET
Modern .NET
 
第5回 cogbot勉強会!
第5回 cogbot勉強会!第5回 cogbot勉強会!
第5回 cogbot勉強会!
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
 
中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術
 
めとべや東京#4 LT「WP8.1アプリ開発のススメ」
めとべや東京#4 LT「WP8.1アプリ開発のススメ」めとべや東京#4 LT「WP8.1アプリ開発のススメ」
めとべや東京#4 LT「WP8.1アプリ開発のススメ」
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
C# でブロックチェーン実装
C# でブロックチェーン実装C# でブロックチェーン実装
C# でブロックチェーン実装
 

Similar to Coding Interview

TeamLabLT20120630
TeamLabLT20120630TeamLabLT20120630
TeamLabLT20120630
tayama0324
 
a-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまでa-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまで
girigiribauer
 
開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
Takaaki Kasai
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
nishikawa_makoto7
 

Similar to Coding Interview (20)

Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016
 
Cobolでもやりたいテスト自動化
Cobolでもやりたいテスト自動化 Cobolでもやりたいテスト自動化
Cobolでもやりたいテスト自動化
 
型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―
 
VBAとPythonで始める数値計算教育
VBAとPythonで始める数値計算教育VBAとPythonで始める数値計算教育
VBAとPythonで始める数値計算教育
 
TeamLabLT20120630
TeamLabLT20120630TeamLabLT20120630
TeamLabLT20120630
 
a-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまでa-blog cms初心者が テンプレート作るまで
a-blog cms初心者が テンプレート作るまで
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
コード祭り予選突破練習会
コード祭り予選突破練習会コード祭り予選突破練習会
コード祭り予選突破練習会
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
 
TDD を自分の道具にしよう
TDD を自分の道具にしようTDD を自分の道具にしよう
TDD を自分の道具にしよう
 
開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
JOI-summer-seminar
JOI-summer-seminarJOI-summer-seminar
JOI-summer-seminar
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
 
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
 

More from 信之 岩永

Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4
信之 岩永
 

More from 信之 岩永 (20)

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
 
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版
 

Coding Interview