ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

1
スケーラブルなメッセージキューアーキテクチャの設計
最近、スケーラブルなエンタープライズコンピューターアーキテクチャのニュアンスを学び始めました。中心的なコンポーネントの1つはメッセージングキューです。プログラミングパラダイムからできる限り多くを学ぶために、独自のバージョンのメッセージングキューサービスを実装しようとしています。 これまでのところ、私の最初の設計はスレッドソケットリスナーで実行されますが、2つの別々の処理ノードによって同じメッセージが2回ダウンロードされるのを防ぐために、読み取りが開始されるとメッセージキューインデックスレジスタがロックされ、レジスタがロック解除されるとロックが解除されます更新しました。そのため、これはスレッド化の必要性をなくし、メッセージングキューサービスが実行されているサーバーの処理速度に基づいてスケーラブルなシステムのサイズに上限があることを意味します。 これを回避する方法は、複数のサーバーでメッセージキューサービスを実行することですが、これにより、同じメッセージが2回ダウンロードされる可能性が高くなります。このような問題の発生を防ぐ唯一の方法は、(サーバー、または単一サーバー上のスレッドでさえ、情報を同期し、そのような再発行を検出した後)処理ノードに停止するように命令する失効コールバックを含めることです現在のジョブ、および次のメッセージのためにメッセージキューを再クエリしますが、送信されるトラフィックのほとんどが同期および失効コールバックであり、ボトルネックを引き起こし、情報の処理を遅らせる天井があります多くの処理ノードがnull操作を実行し、時間を浪費します。 この問題を回避するために考えることができる最後の方法は、各メッセージキューサーバー(および各サーバーの各スレッド)がキュー内のどこを探しているかに関して特定のオフセットを持たせることですが、それは特に処理を特定の順序で実行する必要がある場合は、アプリケーションのタイプ。 ということで、既存のエンタープライズグレードのメッセージキューサービスがこれらの問題をどのように回避するかを示すことができるメッセージキューアーキテクチャの設計はありますか?

2
SQLは宣言的ですか?
私が尋ねるのは、SQLで見られる質問の多くが「これは遅いです。どうすれば高速化できますか」ということです。または、「この方法を使用し、高速ではないので、この方法を使用してください」と記載されているチュートリアルです。 SQLの大部分は、式がどのように実行されるかを知っており、その知識から、より良いパフォーマンスの式スタイルを選択しているように思えます。これは、宣言型プログラミングの1つの側面(システムが計算を生成する対象を指定するだけで計算を実行する最適な方法を決定することを離れる)とは異なります。 SQLエンジンは、を使用inしたexistsかjoinどうかを気にしてはいけませんか、それが本当に宣言型である場合、3つの方法のいずれかによって可能であれば、妥当な時間内に正しい答えを与えるべきではありませんか?この最後の例は、冒頭の段落で言及したタイプのこの最近の投稿によって促されます。 インデックス 私が使用できた最も簡単な例は、テーブルのインデックスの作成に関するものだと思います。gumph w3schools.com上、ここでは、でも、パフォーマンス上の理由であり、ユーザが目に見えない何かとしてそれを説明しようとします。それらの記述は、SQLインデックスを非宣言型のキャンプに入れているようで、純粋にパフォーマンス上の理由で手作業で定期的に追加されています。 彼らはどこか他のすべてよりもはるかに宣言的な理想的なSQL DBですが、それは良い人がそれについて聞いていないためですか?

10
オーバーエンジニアリングは警告サインですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 そのため、いくつかの明確に定義された要件を備えた新しい候補者に、簡単なコーディング演習を提示します。時々、実際に目の前の問題を解決することはできませんが、認識された問題を解決するために過剰に設計されたソリューションを受け取ることがあります-多くの場合、演習の範囲外です。 さて、私の質問は、これは警告サインですか? 編集:議論のかなりの部分は、テストの欠陥に基づいています-これは公平な点です。コメントで説明したように、テストの基本的な前提は、ファイルからデータを賢明な方法で読み取る方法を示すことです(そして、私たちが見るさまざまなアプローチに驚かれることでしょう)。更新間の待ち時間を計算する前の項目。これが機能するためには、データについて特定の前提条件を作成する必要があり、これらの前提条件を探します。また、2時間ですべてのアプローチ(OOアプローチなどを含む)を見たいと明示的に述べています。時間枠。 私見、私がインタビューしたとき、それは私が出くわした中で最も完全な運動でした。 私が熟考している特定のシナリオは、ファイルから読み取るのではなく、候補がマルチスレッドアプリケーションで「ネットワーク」入力を受け入れた場合です。これは明らかに範囲外です。

6
プログラミング言語が他の言語にコンパイルされると言うにはどうすればよいですか?
プログラミング言語を他のプログラミング言語にコンパイルできることを英語で言うにはどうすればよいですか? 例はHaxeです。Webサイトでは、言語は「マルチプラットフォーム」と記述されています。 マルチプラットフォーム:Haxeは、JavaScript、Flash、NekoVM、PHP、C ++、C#、Java(すぐに)の高速コンパイラーを使用して、すべての一般的なプログラミングプラットフォームにコンパイルできます。 しかし、マルチプラットフォームはハードウェアまたはソフトウェアプラットフォーム(win、mac、linux)と誤解される可能性があります。 それでは、この能力を表す最も適切な言葉は何ですか?

9
OOPの原則とメソッド名
class Boxer: def punch(self, punching_bag, strength): punching_bag.punch(strength) class PunchingBag: def punch(self, strength): print "Punching bag punched with strength", strength boxer = Boxer() punching_bag = PunchingBag() boxer.punch(punching_bag, 2) punchボクサーの場合、それが良いメソッド名であることは間違いありません。しかし、名前punchはパンチングバッグの方法にも適していますか?どちらの場合も、コマンドとしてのパンチ(つまり、パンチ)を意味します。

5
リモートコーディングインタビューのためのツールはありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 第一に、この質問がここでうまくいくのか、workplace.SEでうまくいくのかははっきりしません。間違った場所にある場合はご容赦ください。 開発ポジションの候補者の一部にインタビューを行っていますが、現在、候補者は私たちの都市にはいません。 簡単なコーディングテストを行って、日常業務で直面する一般的な問題に対してどのように機能するかを確認したいと思います。 これに向けた特定のツールはありますか?現在私たちはSkypeを使用していますが、多くの開発者は恥ずかしがり屋であるため、多くの開発者のパフォーマンスが低下する傾向があり、誰かが直接見つめているとうまくいかないことがよくあります。 テスト用の質問をメールで送信する際の問題は次のとおりです。 彼らの思考プロセスが何であるかを知ることは不可能であり、最終結果を見るだけです。重要なステップである、議論または質問の明確化はありません。 問題が候補者自身によって解決されたという保証はありません。彼らはより賢い友人にそれを送ることができました、そして、我々は知ることができなかったでしょう。 これらの問題は通常どのように解決されますか?

4
BDDは中規模から大規模のプロジェクトに拡張可能ですか?
BDD(Behaviour Driven Development)について読んだすべてのWebサイトで、要件を定義することがいかに明白で簡単かを示す非常にシンプルで素晴らしい例が見つかります。しかし、このプロセスを(電卓の例ではなく)大きな製品に実装しようとすると、物事がかなり複雑で読みにくくなる(または得られる)ことがわかりました。特に後でリクエストを変更することは、このための統合テストを修正するための多くの作業を意味します。 だから、BDDは本当に価値があるのだろうか?他の手法では解決できない問題を解決できますか?

1
Haskellに型レベルのラムダ抽象化がないのはなぜですか?
それにはいくつかの理論的な理由(型チェックや型推論が決定不能になるなど)か、実際的な理由(適切に実装するのが難しすぎる)がありますか? 現在、我々はに物事をラップすることができますnewtypeように newtype Pair a = Pair (a, a) そして、持っている Pair :: * -> * しかし、私たちのようなことはできませんλ(a:*). (a,a)。 (例えば、Scalaが持っているような、それらを持っているいくつかの言語があります。)

5
WindowsサービスにGUIがないのはなぜですか?
XPやNTなどの以前のWindowsリリースでこの機能を使用していました。WindowsサービスからGUIを実行できました。しかし、それ以降のバージョンでは不可能です。 この機能が削除された理由は何ですか?WindowsサービスにGUIがないのはなぜですか?
22 .net  windows 

3
仮想マシンを構築したいのですが、良い参考資料はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 ゲームコード(本質的にスクリプト)を実行するプラットフォームに依存しない方法として仮想マシンを構築したいと考えています。 私がゲームで知っている仮想マシンはかなり古く、InfocomのZ-Machine、LucasArtsのSCUMM、id SoftwareのQuake 3です。.net開発者として、私はCLRに精通しており、CIL命令を調べて、VMレベル(言語レベル)で実際に実装するものの概要を取得しました。昨年、6502 Assemblerでも少し手を出しました。 問題は、これを実装したい¹ので、もう少し深く掘り下げる必要があります。スタックベースのVMとレジスタベースのVMがあることは知っていますが、どのアプローチがどれが優れているか、また、より多くのアプローチまたはハイブリッドアプローチがあるかどうかはわかりません。メモリ管理に対処し、どの低レベルタイプがVMの一部であるかを判断し、ldstrのようなものが動作する理由を理解する必要があります。 私の唯一の参考書(Z-Machineのものを除く)はCLI Annotated Standardですが、VMに関するより良い、より一般的/基本的な講義があるのでしょうか?基本的にDragon Bookのようなものですが、VM用ですか?レジスタベースのVMを使用するドナルドクヌースのコンピュータープログラミングの技術は知っていますが、特に未完成であるため、そのシリーズがまだどのように適用できるのかわかりません。 明確化:目標は、専用のVMを構築することです。たとえば、InfocomのZ-Machineには、背景色を設定したり、サウンドを再生したりするためのOpCodeが含まれています。したがって、スクリプト(言語TBD)を受け取り、それからバイトコードを生成するコンパイラーに対して、OpCodesとしてVMにどれだけの量が入るかを把握する必要がありますが、そのためには、実際に何をしているのかを理解する必要があります。 ¹最新の技術により、高レベルのスクリプト言語をその場で解釈することができます。しかし、その面白さはどこにありますか?:)また、最近では仮想マシンはVMWareタイプのOS仮想化に関連付けられていることが多いため、Googleを検索するのも少し難しいです...

8
理論的ではない実用的なプログラミング言語には予約キーワードがありませんか?
予約済みのキーワードを持たない実用的なプログラミング言語を探してきましたが、見つけることができませんでした。 私は自分の教育とエンターテイメントのためにプログラミング言語に取り組んでおり、まだキーワードを含める必要はありません。それが私の検索と質問につながった理由です。 コンパイラの作成者にとっては、この言語のエンドユーザーにとって重要であるとは思いません。コンピュータは、コンテキストから意味を推測できるほど強力になりました。作家が小説を書くときに名詞や動詞などにラベルを付ける必要があるのは、プログラマが関数や変数にfunction x() {}or set x = 1またはvar x = 1etcなどのラベルを付ける必要がある理由だけです。ステートメントのコンテキストから、それが関数宣言または呼び出しである、またはラベルが値への割り当てまたはそのラベル値への参照であると推測できる場合 ここに私の現在のパーサーが何をしているかの具体的な例として、通常の束だろう一般的な事柄をサポートするために予約されたキーワードが不要で、ノイズのようなfuncまたはfunctionまたはdecまたはものではありませんが。 関数宣言 sum3(a,b,c) -> a + b + c. 関数呼び出し x = sum3(1,2,3). xという名前の匿名関数 x = (a,b,c) -> a + b + c. y = x(1,2,3). 成功するプログラミング言語にとってキーワードがなぜ重要なのか知りたいのですが。
22 theory  languages 

4
HTMLはマークアップ言語であり、C ++はプログラミング言語であると言われましたが、その違いは何ですか?
私のプログラミングの友人は、HTMLがマークアップ言語であり、C ++がプログラミング言語であるといつも言っています。私は彼らに違いは何であるかを尋ねると、彼らは私に合理的な答えを与えることはありません。 何がC ++をプログラミング言語と呼び、HTMLはそうではないのでしょうか?

2
JSONへのログインがパフォーマンスに与える影響
JSONでのロギングに関する記事が増えています。NodeJSブログでも見つけることができます。誰もがそんなに好きなのですか?より多くの操作が関与しているのを見ることができます: いくつかの新しいオブジェクトが作成されます。 オブジェクトの文字列化。文字列の長さを計算するか、複数の文字列を割り当てます。 作成されたすべてのがらくたをGCします。 JSONログと通常の文字列ログを使用するときのパフォーマンスのテストはありますか?人々はエンタープライズプロジェクトでJSON(ロギング用)を使用していますか?
22 logging  json 

7
ソフトウェアの腐敗とは、主にパフォーマンスのことですか、それとも面倒なコードのことですか?
ソフトウェア腐敗のウィキペディアの定義は、ソフトウェアのパフォーマンスに焦点を当てています。これは私が慣れているものとは異なる使用法です。コードの清潔さとデザインの観点から、コードのすべての標準品質特性(読みやすさ、保守性など)を考慮して、それ以上に考えていました。何が起こっているのか誰も知らないからです。しかし、ソフトウェアの腐敗という用語には、パフォーマンスに特別な言及がありますか?または私はそれがコードの清潔さを指していると思うのは正しいですか?または、これはおそらく、用語の複数の感覚が一般的に使用されている場合です。ユーザーの観点からは、パフォーマンスに関係しています。しかし、ソフトウェア職人にとっては、コードの読み方をより具体的にする必要がありますか?

3
CLAにサインアウトすると、オープンソースプロジェクトの法的問題がどのように防止されますか?
たとえば、次のヨーマン。BSDライセンスの下でライセンスされています。CLAフォーム(コントリビュータライセンス契約)は、プロジェクト固有のものではない、それは電子的に署名することができます。 この契約をサインアウトすると、どのような問題を防ぐことができますか? 私がどれだけ大きな貢献をしたか、小さな貢献をしたかは重要ですか? なぜパッチを受け入れるのに署名付きCLAを必要とするプロジェクトとそうでないプロジェクトがあるのですか?(例:node.js対rails)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.