View on GitHub

Today I Learned

Software Engineering Blog

1001 Data Engineering Interview Questions

https://github.com/andkret/Cookbook/blob/master/InterviewQuestions.md

SQL DBs

What are windowing functions?

対象の行に対して区間ごとに集計する機能

集約関数では同じカラム値を持つ全行を1行に集計するが、ウィンドウ関数ではまとめられることはなく行が返される。分析関数やOLAP機能とも呼ばれる

city毎にpopulationを集約している

SELECT
  userid,
  city,
  population,
  sum(population) OVER(PARTITION BY city)
FROM
  user
userid city population sum(population)
1 tokyo 10 18
2 tokyo 8 18
3 osaka 7 7
4 nagoya 6 6

What is a stored procedure?

一連のSQLをまとめて関数のように呼び出せる仕組み

入出力を指定して呼べる。データベース側に保存しておくのでアプリケーション側の負荷を減らすことができる

CREATE PROCEDURE sample01()
SELECT NOW()

引数を渡すこともできる

CREATE PROCEDURE get_comment(IN id INT)
BEGIN
  SELECT comment from post
END//

作成したプロシージャを確認

SHOW CREATE PROCEDURE get_comment

What are atomic attributes?

原子性と呼ばれ、トランザクションのタスクがすべて実行されるか、全く実行されないことを保証する性質

ACID特性のAtomicity

口座Aから口座Bに1万円を送金する例。以下の、1,2が両方行われるか、どちらも行われないかを保証する

  1. 口座Aから1万円を引く
  2. 口座Bに1万円を加える

Explain ACID props of a database

トランザクション処理の信頼性を保証するための特性

以下の頭文字をとったもの

How to optimize queries?

インデックスを作成する、SELECT句で*やDISTINCTを使わない、先頭にワイルドカードを使わない、などの方法がある

What are the different types of JOIN (CROSS, INNER, OUTER)?

INNER JOINは2つのテーブルに行がある時だけ結合、OUTER JOINはどちらか一方のテーブルに行があれば結合、CROSS JOINはキーを指定せずにすべての行の組み合わせを返す

Clustered indexはテーブル毎に一つ、readで速い。Non-Clustered indexはテーブル毎jjugに複数、insertやupdateで速い

The Cloud

What is serverless?

サーバ管理なしでアプリケーションを構築、実行する

What is the difference between IaaS, PaaS and SaaS?

IaaSはOS以下を提供するサービス。PaaSはミドルウェア以下を提供するサービス。SaaSはアプリケーションをサービス化して提供するサービス

How do you move from the ingest layer to the Consumption layer? (In Serverless)

collectorからpushされたデータはスケールアップ可能なリアルタイムストレージ(Kinesis Streams, DynamoDB, Pub/Sub, Kafkaなど)に書き込まれる

What is edge computing?

ユーザ側の近くで処理することでデータを最適化してクラウドの負荷を減らす

What is the difference between cloud and edge and on-premise?

クラウドはリモートにコンピューティングリソースがあり、エッジコンピューティングはエンドユーザ側にコンピューティングリソースがある

Linux

What is crontab?

定期的に処理を実行するためのコマンド

Big Data

What are the 4 V’s?

ビッグデータの4つのビジネス価値を表したVolume, Variety, Variation, Visibility

Which one is most important?

Veracity?

Kafka

What is a topic?

メッセージを保存する分散メッセージキュー

How to ensure FIFO?

Topic内で分けられるpartitionのなかでメッセージの順番が保証される

How do you know if all messages in a topic have been fully consumed?

kafka adminツールからトピックのオフセットの値を確認する

What are brokers?

トピックを持つ複数台のマシンのクラスタ

What are consumer groups?

トピックのメッセージを分散読み出しするための仕組み

What is a producer?

メッセージをTopicに書き込むためのクライアント

Coding

What is the difference between an object and a class?

クラスはフィールドとメソッドが定義されたテンプレート、オブジェクトはそれを実体化したもの

Explain immutability

変更不可能な状態のころ。オブジェクトの破壊的変更が起きないため想定外の問題が起きにくくなる、バグを抑制できる

What are AWS Lambda functions and why would you use them?

サーバレスを使うとサーバを準備しなくていいのでアプリケーションロジックに集中できる

Difference between library, framework and package

ライブラリはプログラムの集合、フレームワークはライブラリの集合、パッケージはライブラリやフレームワークとは異なりコードをまとめて配布する方法のこと

How to reverse a linked list

head Nodeのprevとnextを入れ替えるのをheadから開始してnextがnullになるまで続ける

Difference between args and kwargs

argsはtuple、kwargsはdictionary。**args, **kwargsで任意の数の引数を受け取りたいときに指定する。Pythonで利用される

Difference between OOP and functional programming

オブジェクト指向プログラミングはオブジェクト生成をベースとしたプログラミング技法。関数型プログラミングはデータに何らかの処理を加えていくプログラミング技法

NoSQL DBs

What is a key-value (rowstore) store?

NoSQLの一つで、すべてのデータに固有のキーを付けてKey-Value形式で保存するデータストア。分散データストアとして利用され、ディスクへの読み書き性能が高く、スケールが容易であり、分散処理に適している

What is a columnstore?

2つ以上の任意のキーでデータを格納できるデータストア。高いスケーラビリティを実現。Google Cloud BigTable、Apache HBase, Apache Cassandranなど

Diff between Row and col.store

行指向は、データの追加を効率的にお香なうことができる、インデックスを作成したデータを高速に検索できる。列指向は、最小限のデータだけを読み込むため、高速な読み書きができ、分散処理に優れている

What is a document store?

性能向上ではなくデータ処理の柔軟性を目的としたデータストア。JSONのようなスキーマレスデータを格納してクエリで実行できる。MongDBなど

Difference between Redshift and Snowflake

https://www.xplenty.com/blog/redshift-vs-snowflake/

Hadoop

What file formats can you use in Hadoop?

テキストCSV、JSON, Avro, シーケンスファイル、RCファイル、ORCファイル、Parquet

https://www.quora.com/What-are-the-different-file-formats-in-Hadoop-and-explain-their-significance-in-detail

What is the difference between a name and a datanode?

NameNodeはマスターノードでファイルシステムを管理するノード。DataNodeはスレーブノードでNameNodeの指示を受けて実際に保存するノード

What is HDFS?

Hadoop使われる分散ファイルシステム

What is the purpose of YARN?

クラスタのリソースマネージャー。HDFSがストレージ部分、YARNが処理部分をハンドリングしている。ストレージ上のデータをどのようにどのくらいのリソースで処理するかを判断しデーブロックをアサインする

Lambda Architecture

What is streaming and batching?

ストリーミングは低レイテンシの処理、バッチングは高スループットの処理

What is the upside of streaming vs batching?

ストリーミングは、正確でなくてもすぐに知ってインサイトを得ることができる。バッチは正確に大量のデータを処理することができる

What is the difference between lambda and kappa architecture?

ラムダアーキテクチャはバッチレイヤとスピードレイヤが並行で動いている。アーキテクチャを単純化したのがカッパアーキテクチャであり、スピードレイヤのみを残すアーキテクチャ

Can you sync the batch and streaming layer and if yes how?

あとから処理したバッチレイヤの結果をスピード処理の結果に上書きする

Python

Difference between list tuples and dictionary

リストは配列、tupleはイミュータブルな配列、dictionaryはマップ

Data Warehouse & Data Lake

What is a data lake?

構造化データや非構造化データを貯めることができる分散ストレージ

What is a data warehouse?

処理済みの構造化データを貯めてビジネスに活かす

Are there data lake warehouses?

Two data lakes within single warehouse?

What is a data mart?

データウェアハウスから特定の目的に沿って一部データを抽出

What is a slow changing dimension (types)?

現行データと履歴データの両方を保存管理するディメンション。3種類のSCDが存在する

What is a surrogate key and why use them?

APIs (REST)

What does REST mean?

REpresentational State Transfer

Webの設計モデル

What is idempotency?

何回実行しても同じ結果になる性質

RESTも同じリクエストを何度繰り返しても、同じリソース状態になる

What are common REST API frameworks (Jersey and Spring)?

Apache Spark

What is an RDD?

Resilient Distributed Datasets

イミュータブルなデータ要素の分散コレクション

SparkはRDDに対してデータ処理を行う

RDDの操作には変換とアクションがある。

変換は、既存のRDDに処理を加えて新しいRDDを作成していく操作

アクションは、ワーカでの処理結果をまとめ上げて通常のコレクションに変換したりストレージに保存したりする

What is a dataframe?

名前をつけたカラムで表現した分散データコレクション

JSON, ORC, Parquetなどさまざまな構造化データを簡単に扱える

データフレームのメリット

What is a dataset?

RDDとDataFrameの両方の強みを活かすことができる分散データコレクション

Spark SQL実行エンジンのパフォーマンスやロバスト性を提供する一方、JVMオブジェクト上での処理を簡単に表現できる

How is a dataset typesafe?

RDDとDatasetは型安全、Dataframeは型安全じゃない

What is Parquet?

多くのデータ処理システムでサポートされている列指向フォーマット

SparkSQLはParquetファイルの読み書きをサポートしている

What is Avro?

行指向フォーマット

Difference between Parquet and Avro

Tumbling Windows vs. Sliding Windows

Tumbling Windowは、時間固定でオーバラップしないwindow

Sliding Windowは、時間が場を固定して一定時間でスライドするwindow

Difference between batch and stream processing

バッチ処理は一定期間で保存されたデータブロックをまとめて処理

ストリーム処理は短い期間のデータをリアルタイムに処理

What are microbatches?

MapReduce

What is a use case of mapreduce?

サイト訪問者の集計、複数ソースからのデータ分析、顧客満足度の改善、顧客の洞察、ハードウェアコスト削減

Write a pseudo code for wordcount

What is a combiner?

Mapperの結果を中間処理するクラス

Docker & Kubernetes

What is a container?

Difference between Docker Container and a Virtual PC

What is the easiest way to learn kubernetes fast?

Data Pipelines

What is an example of a serverless pipeline?

What is the difference between at most once vs at least once vs exactly once?

at most onceは多くても1回処理する(ロストあり重複なし)、at least onceは少なくとも1回処理する(ロストなし重複あり)、exactly onceは確実に1回処理する(ロストなし重複なし)

What systems provide transactions?

What is a ETL pipeline?

ETLパイプラインは、1つのシステムからデータを抽出して変換し、データベースやデータウェアハウスに読み込む一連のプロセスを指す。データパイプラインはもう少し一般的な用語で、システムから別のシステムにデータを移動し、その過程でデータを変換する可能性がある処理のことを指す

Airflow

What is a DAG (in context of airflow/luigi)?

What are hooks/is a hook?

What are operators?

How to branch?

DataVisualization

What is a BI tool?

Security/Privacy

What is Kerberos?

What is a firewall?

What is GDPR?

What is anonymization?

Distributed Systems

How clusters reach consensus (the answer was using consensus protocols like Paxos or Raft). Good I didnt have to explain paxos

What is the cap theorem / explain it (What factors should be considered when choosing a DB?)

How to choose right storage for different data consumers? It’s always a tricky question

Apache Flink

データストリームをステートフルに処理する分散処理エンジン

両方ともストリーム処理アプリケーションが目的で利用される。アーキテクチャやコアコンポーネントが異なる

GitHub

What are branches?

What are commits?

What’s a pull request?

Dev/Ops

What is continuous integration?

What is continuous deployment?

Difference CI/CD

Development / Agile

What is Scrum?

What is OKR?

What is Jira and what is it used for?