ようへいの日々精進XP

よかろうもん

2018 年 05 月 10 日(木)

ジョギング

  • 香椎浜 x 2 周
  • テンポ良く走れているような気がする

日課

  • (腕立て x 50 + 腹筋 x 50) x 3

今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (re: 17) ~

もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.

Q52. webrick (ライブラリ)

webrick ライブラリの説明として正しいものを選択する.

  1. webrick ライブラリは, Web サーバを実装するためのライブラリで Ruby on Rails でも使用されている

以下, ドキュメントの Abstract より抜粋.

以下, 超シンプルな Web サーバーの実装で動作確認.

require 'webrick'

server = WEBrick::HTTPServer.new({
  DocumentRoot: './',
  BindAddress: '127.0.0.1',
  Port: '12345',
})

server.start

適当な HTML を用意して, 上記のスクリプトを起動する.

$ tree .
.
├── index.html
└── webrick.rb

0 directories, 2 files

$ cat index.html 
test

$ ruby webrick.rb &
[1] 4802
[2018-05-06 07:40:17] INFO  WEBrick 1.3.1
[2018-05-06 07:40:17] INFO  ruby 2.1.10 (2016-04-01) [x86_64-linux]
[2018-05-06 07:40:17] INFO  WEBrick::HTTPServer#start: pid=4802 port=12345

$ curl localhost:12345
test
localhost - - [06/May/2018:07:40:25 JST] "GET / HTTP/1.1" 200 5
- -> /

Q53. socket (ライブラリ)

以下のコードの説明として正しいものを選択する.

# コード
require 'socket'
p TCPSocket.ancestors.member?(IO)
  1. このコードを実行すると 「true」 が出力される

以下, irb による実行例.

irb(main):001:0> require 'socket'
=> true
irb(main):002:0> p TCPSocket.ancestors.member?(IO)
true
=> true

以下, 解説より抜粋.

  • TCPSocket は IO クラスを継承している
  • File クラスなどと同様な操作でソケットを扱うことが出来る
irb(main):003:0> p TCPSocket.ancestors
[TCPSocket, IPSocket, BasicSocket, IO, File::Constants, Enumerable, Object, Kernel, BasicObject]
=> [TCPSocket, IPSocket, BasicSocket, IO, File::Constants, Enumerable, Object, Kernel, BasicObject]

上記の通り, TCPSocket の直接的なスーパークラスは IPSocket になるが, IO クラス自体もスーパークラスとなっている.

設問とは関係無いが, Enumerable#member? は引数で指定した値がレシーバに要素として含まれる際に true を返す.

irb(main):005:0> ['a', 'b', 'c'].member?('a')
=> true
irb(main):006:0> ['a', 'b', 'c'].member?('d')
=> false

Q54. thread (ライブラリ)

Thread ライブラリを使用して新たなスレッドを生成するメソッドではないものを選択する.

  1. open

以下, 解説より抜粋.

  • Thread クラスのクラスメソッド new, start, fork はそれぞれ新しいスレッドを生成するメソッド

それぞれのメソッドの特徴 (ドキュメントより抜粋).

メソッド 特徴
new スレッドを生成して, ブロックの評価を開始する. 生成したスレッドを返す.
start 基本的に Thread.new と同じ機能を提供するが, new メソッドと異なり initialize メソッドを呼ばない.
fork 同上

フムフム.