ソフトウェア工学

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

5
else else構造がより適切な時間で仕事をすることができるときに、(関数で)HashMapを使用して(キーに対して)返す値を決定する必要があるのはなぜですか?
私が最近大企業で働いていたときに、プログラマーがこのコーディングスタイルに従っていることに気づきました。 入力がAの場合は12、入力がBの場合は21、入力がCの場合は45を返す関数があるとします。 だから私は関数のシグネチャを次のように書くことができます: int foo(String s){ if(s.equals("A")) return 12; else if(s.equals("B")) return 21; else if(s.equals("C")) return 45; else throw new RuntimeException("Invalid input to function foo"); } しかし、コードレビューで、関数を次のように変更するように求められました。 int foo(String s){ HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("A", 12); map.put("B", 21); map.put("C", 45); return map.get(s); } 2番目のコードが最初のコードよりも優れている理由を私は納得できません。2番目のコードの実行には、間違いなく時間がかかります。 2番目のコードを使用する唯一の理由は、コードが読みやすくなることです。しかし、関数が何度も呼び出される場合、2番目の関数はそれを呼び出すユーティリティの実行時間を遅くしませんか? これについてどう思う?

1
キャッシュラインとメモリページの関係
正しければ、メインメモリのページは、メインメモリとハードディスクなどの外部ストレージデバイスとの間でデータを転送するための最小の単位単位です。メインメモリのキャッシュラインは、メインメモリとCPUキャッシュ間のデータ転送の最小単位です。 ページサイズは常に、またはキャッシュラインサイズの自然数になるのが最適ですか?キャッシュラインサイズが64バイトで、メモリページサイズが4KBの場合、各ページには4KB / 64バイト== 64キャッシュラインがあります。 ページとキャッシュラインはどちらもメモリ内の固定オブジェクトですか?または、特定のサイズのメモリの連続したブロックだけであり、メモリ内のどこにでも開始して浮動させることができますか? キャッシュラインが複数のページにまたがることは常に可能ですか?つまり、キャッシュラインの一部がページにあり、キャッシュラインの他の部分が別のページにあるのですか? ありがとう。
9 memory  caching 

4
ツリー内のすべてのノードのすべての子孫を生成する最も効率的な方法
ツリー(エッジのリスト、または親ノードから子ノードのリストへのマッピングのリストのいずれかとして格納)を取得するための最も効率的なアルゴリズムを探しています。すべてのノードについて、そのノードの子孫であるすべてのノードのリスト(リーフレベルと非リーフレベル)を生成します。 規模の関係上、実装は反省ではなくループを介して行う必要があります。理想的にはO(N)である必要があります。 このSOの質問は、ツリー内の1つのノードの答えを見つけるための標準的な合理的に明白なソリューションをカバーしています。しかし、明らかに、すべてのツリーノードでそのアルゴリズムを繰り返すことは非常に非効率的です(頭上からO(NlogN)からO(N ^ 2)へ)。 ツリーのルートは既知です。ツリーは完全に任意の形状です(例:N-naryではなく、いかなる形でもバランスが取れていない、形状または形式、均一な深さではない)-一部のノードには1〜2個の子があり、一部には30Kの子があります。 実用的なレベルでは(アルゴリズムには影響しないはずですが)、ツリーには100K〜200Kのノードがあります。

4
空の関数が必要な理由
私はpythonの学習を開始し、なぜプログラミング言語で空の関数が必要なのか疑問に思っています 例:python: def empty_func(): pass シェルスクリプトでも、空の関数空の関数を使用できます。 私の理解と質問: なぜプログラミング言語は空の関数を必要としたのですか?それは、プログラミング言語で遊んでいるだけなのか、それとも本当に重要なことなのか? これに目的がある場合、誰かがユースケースを説明したり、空の関数の使用法の実際の例を挙げたりできますか? または、空の関数を許可するプログラミング言語の伝統はありますか? 編集(私があなたの回答を読んで得たもの): スケッチアルゴリズムまたは抽象関数用 アクションなしでフォームを送信するために実行する必要があります いくつかの必須操作のプレースホルダー

8
オブジェクト指向とアルゴリズムの関係
私がいくつかのアルゴリズムの教科書を読んでいるとき、それらはいくつかの問題(ソート、最短経路)またはいくつかの一般的な方法(再帰アルゴリズム、分割統治、動的プログラミング...)の賢い手順でいっぱいです。そこではオブジェクト指向プログラミングの痕跡をいくつか見つけました。(なぜそれらはより手続き指向であるのですか?) それから私は考えていました: アルゴリズムとOOPの関係は何ですか?2つの独立したトピックですか? OOPでしか表示および解決できない問題はありますか? OOPはアルゴリズムをどのように支援できますか?それともどの方向に影響を与えることができますか?

5
OOP言語およびタイプのクラス
プログラミング言語理論では、型は値のセットです。たとえば、「int」型はすべての整数値のセットです。 OOP言語では、クラスはタイプですよね? クラスが複数のメンバーで定義されている場合、例えば class myclass{ int a; double b; } クラスについて話すとき、 「(a,b)どこaint型で、b二重である」、または 「{ (x,y)| xは任意のint、y任意のdoubleです}」? のインスタンスはmyclassどういう意味ですか? 「(a,b)どこaint型で、b二重である」、または メモリ空間を占有し、(必ずしもそうである必要はない、つまり空である可能性があります)を格納できるオブジェクト(x,y)。ここxで、int yはあり、doubleはありますか?

7
C ++の深い知識は、他の言語をより速く/より簡単に学ぶのに役立ちますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 C ++のすべての主要な側面を学び、言語の基礎をよく知っている人が、他の言語(Python、Perl、Javaなど)をより速く簡単に学ぶ可能性はありますか?
9 c++ 

2
String [] args vs(String。。。args)
Android向けにプログラミングする場合、AsyncTaskを使用すると、doInBackgroundメソッドは次のようになります。 protected String doInBackground(String... args) しかし、そのブロックのどこかで引数を使用すると、たとえばプログラムで通常の文字列配列のように引数にアクセスできます @Override protected String doInBackground(String... args) { String details = ""; try { details = facade.getRecipeDetails(args[0]); } catch(Exception ex) { ex.printStackTrace(); } return details; } これはうまく機能し、私はそれを扱うことに問題はありません。しかし、なぜ通常の文字列配列の代わりに(String。。。args)を使用するのか疑問に思っています。それは、呼び出しメソッドで次のようなものを書くことができるからです: new AsyncHandler.execute("argument1","argument2","argument3",...) 引数を渡す新しい配列を作成する代わりに?書けたけど new AsyncHandler().execute(new String[]{"Argument1","Argument2"}); これはもう少し冗長です。 (String ...)とString []は同じように機能しますが、配列を作成する必要がないため、前者を使用すると引数の受け渡しが簡単になりますか?私が知る限り、前者もバックグラウンドで文字列配列に変換されるので、両方とも同じコードにコンパイルされ、それは単に「構文上の砂糖」にすぎませんか?
9 java  android 

2
Javaを使用しないAndroidでの開発[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 この質問のタイトルが示すように、Javaをまったく使用せずにAndroidプラットフォームでアプリを開発できることを楽しみにしています。私がこの美しい言語に対して何らかの復讐をしたり、Javaでアプリを開発する方法がわからなかったりするわけではありません。しかし、私のアプリケーションはXML、JavaScript、およびAjaxを使用することによってのみ開発できると考えています。 それでも、Javaに依存する必要がありますか? Javaを使用しないことのデメリットはありますか? 今後もアプリを拡張できますか? ここで本当に愚かな質問をしていますか? 親切に私を助けてください。 編集: 私が取り組んでいるアプリ(まだホワイトボードにあり、このアプローチについて専門家の意見が必要です)は、さまざまなニュースソースからニュースをフェッチし、そのユーザーに表示します。

4
構造体を使用して組み込み型の検証を実施する
通常、ドメインオブジェクトには、組み込みの型で表すことができるプロパティがありますが、その有効な値は、その型で表すことができる値のサブセットです。 これらの場合、値は組み込み型を使用して格納できますが、値は常にエントリの時点で検証されるようにする必要があります。そうしないと、無効な値で処理される可能性があります。 これを解決する1つの方法は、組み込み型のstruct単一のprivate readonlyバッキングフィールドがあり、そのコンストラクターが指定された値を検証するカスタムとして値を格納することです。そうすれば、このstructタイプを使用することで、検証済みの値のみを使用することが常に確実になります。 基になる組み込み型との間のキャスト演算子を提供して、値が基になる型としてシームレスに出入りできるようにすることもできます。 例として、ドメインオブジェクトの名前を表す必要がある状況を取り上げます。有効な値は、1〜255文字の文字列です。これを表すには、次の構造体を使用します。 public struct ValidatedName : IEquatable<ValidatedName> { private readonly string _value; private ValidatedName(string name) { _value = name; } public static bool IsValid(string name) { return !String.IsNullOrEmpty(name) && name.Length <= 255; } public bool Equals(ValidatedName other) { return _value == other._value; } public override bool …
9 c#  .net 

1
CCライセンス(0、BY、BY-SA)は、プロプライエタリ/クローズドソースアプリケーションにどのように影響しますか?
この質問は、インディーズの開発者が懸念しているものに固有のものだと思います。それを「ライセンスの明確化」または「ライセンスの実用的な使用例」と考えてください。 プロジェクトの基本パッケージ構造をどのようにする必要があるか、またどのように配布できるかを知る必要がありますか? 私はアプリデベロッパーですが、まだサイトがありません。コードを作成します(パッケージ(B)は、非常に限られたスキルで作成できるプレースホルダーアセットです。または、プロジェクトにいくつかのものを持たせるために後で購入できるアセットです。独自のビジュアル/ sfx /音楽機能、それがパッケージ(C)と競合しない場合は、問題が発生する可能性があります)。 私は考えた: A)バイナリ独自の実行可能アプリケーション・パッケージ(NOソース配布)。 B)専有メディアのメディア/アセットパッケージ((A)と一緒に梱包できます)。 C)CCコンテンツのメディア/アセットパッケージ。 パッケージ(C)に関する問題は次のとおりです。 CC-0は私が静かにできる唯一のCCコンテンツですか?私はこれを少なくともCC-BYパッケージとして再配布する必要があります:if-i-create-a-collection-that-includes-a-work-offered-under-a-cc-license-which-licenses-may -i-choose-for-the-collection パッケージ(C)でCC-BYおよびCC-BY-SAコンテンツを使用しても問題ありませんか?私が読んだように、CC-BY-SAは少なくとも、スクリーンショット、ビデオ、およびその他の宣伝メディアに干渉します(ただし、自分のプロジェクトでカットシーンを作成しない限り、宣伝メディアは私にとってそれほど面倒ではありません)。 。 CC-BY-SAの内容は、(2)で指定されている以外の方法でパッケージ(A)または(B)に影響しますか?それで、(A)または(B)はいくつかのCCライセンスに該当する必要がありますか? このCC-BY-SA句は、「誤解を避けるために、作品が音楽作品、演奏、または表音文字である場合、時間との関係における作品の動画との同期(「同期」)は、適応と見なされます。このライセンスの目的のために。」プロジェクトエンジンの同期コード部分(または完全なソースコード)について、プロジェクトをオープンソースとして自由に配布するように強制しますか?プロジェクトを考えると、「パフォーマンス」と見なされることがあります。 アプリケーションの実行にはパッケージ(C)が必要な場合があるため、この依存関係が壊れない場合、アプリケーションライセンスに何らかの影響がありますか?また、それなしでアプリケーションを実行できる場合でも、アプリケーションはその影響を受けますか? パッケージ(C)をアプリケーションと一緒に配布し、後で(それを購入した)ユーザーがパッケージ(C)を自由に再配布して、CCコンテンツを再配布するサイトに公開することはできますか?または、自分のサイト(またはパッケージを販売するサイト)や他のサイトで、そのパッケージをすぐに無料で利用できるようにすることを強制されますか?または、他のサイトからのみ配布して、自分のサイトからのみリンクすることはできますか? PS .:答えを確認するライセンスコードの抜粋は大歓迎です!私はそれをすべて読んで理解しようとしましたが、確かに私には簡単ではありません... FAQやその他の種類のような他の許可された情報源も十分に良いかもしれません(彼らは通常、理解しやすくします)。 PS.2:パブリックドメインメディアについて知っておくべき興味のある常識の概念:http : //pixabay.com/en/blog/posts/public-domain-images-what-is-allowed-and-what -is-4 /

5
サーバーの終了時にオブジェクトを正しく破棄する
大規模なC ++プロジェクトに取り組んでいます。REST APIを公開するサーバーで構成され、他の多くのサーバーで構成される非常に広範なシステムにシンプルでユーザーフレンドリーなインターフェースを提供します。コードベースは非常に大きく複雑であり、適切な設計を事前に行わずに時間をかけて進化しました。私の仕事は、新しいコードを実装し、古いコードをリファクタリング/修正して、より安定して信頼できるようにすることです。 現時点では、サーバーは、プロセスが終了しても終了も破棄もされない、長期間存続するオブジェクトを多数作成します。これにより、Valgrindはリーク検出にほとんど使用できなくなります。何千もの(疑わしい)正当なリークと「危険な」リークを区別することは不可能だからです。 私の考えは、すべてのオブジェクトが終了前に確実に破棄されるようにすることですが、私がこの提案をしたとき、私の同僚と上司は、OSがとにかくそのメモリを解放することを指摘し(誰にとっても明らかです)、オブジェクトを破棄することに反対しましたサーバーのシャットダウンを遅くします(現時点では、これは基本的にへの呼び出しですstd::exit)。私は、「クリーンな」シャットダウン手順を持っているからといって、それを使用しなければならないということを必ずしも意味しないと答えました。焦りを感じたらいつでも呼んでstd::quick_exitもいいしkill -9、ただプロセスを呼んでもいい。 彼らは、「ほとんどのLinuxデーモンとプロセスはシャットダウン時にわざわざメモリを解放しない」と答えました。私はそれを見ることができますが、私はすでにメモリ破損、二重解放、および初期化されていない変数を見つけたので、プロジェクトが正確なメモリデバッグを必要とすることも事実です。 あなたの考えは何ですか?私は無意味な努力を追求していますか?そうでない場合、同僚や上司をどのように説得できますか?もしそうなら、なぜ、そして代わりに私は何をすべきですか?
9 c++  debugging  memory 

3
テストデータはどこに保存すればよいですか?
実際のデータセットからの小さなスニペットを使用する小さな単体テストがあります。また、さまざまな理由から、完全なデータセットに対してプログラムをテストしたいと思います。唯一の問題は、単一の実際のデータセットが約5GBであることです。Gitリポジトリーに保管できる具体的な数値は見つかりませんでしたが、多すぎるようです。 このプログラマーの投稿によると、プロジェクトをテストするために必要なすべてのデータをリポジトリーに保管する必要があります。 私のチームが採用したソリューションは、プロジェクトに、テストデータを保持するネットワーク接続ファイルシステムへのパスを含むファイルがあることです。ファイルはGit無視されます。 これは2つの理由で不完全な解決策であると感じています。NASが動作していない、遅い、または完全なテストを実行できないほどダウンしている場合。2番目の理由は、誰かが最初にリポジトリのクローンを作成するときにユニットテストが失敗するため、特定の名前で物をマウントする方法と、テストパスファイルの構築に使用される構文を理解する必要があるためです。 だから私の質問は二つあります。どのくらいのデータが多すぎてリビジョン管理に保存できませんか? 大量のテストデータを処理するためのより良い方法は何ですか?
9 testing 

1
GCCがデフォルトでAT&T構文を使用するのはなぜですか?
タイトルはそれをすべて言うと思います:) GCCがAT&T / GAS構文を使用する特別な実用的な理由はありますか? 注:これは単なるデフォルトであり、切り替えることができます 注2:個人的には「インテルの構文」の方がずっと読みやすいと思うので、驚いたのはこのためです。
9 history  assembly  gcc 

5
スクラム:ユーザーストーリーのデザイン/ UXが実装と同じスプリントで発生しても問題ありませんか
私は現在、スプリント中(2週間)で、特定のユーザーストーリーの要件とUXを定義することをデザイナーに課しています。 同じスプリントで、私はこのデザインを実装します。スプリントの計画中、私はこの未定義のユーザーストーリーがどのくらいの時間を要するかについて、かなりの推測をしなければなりませんでした。 今日、ようやくデザインを受け取りました。残念ながら、設計は不完全で曖昧であり、設計よりもクライアントの要件に似ています。ただし、このことから、まだ十分に見積もっていないことがわかります。 さらに悪いことに、これは初めてではありません。最後のスプリントでは、まったく同じことが起こりました。私はそれを振り返ってフラグを立てましたが、スクラムマスターは「それはあなたのための単なる開発だ」と言うのではなく、これを解決する方法の答えがありませんでした。皮肉なことに、バーンダウンが目標に達していない場合、彼はイライラします... 今、私は彼の仕事を成し遂げるためにデザイナーに尋ねる/協力する必要があります。私は他のすべてのタスクを完了しているので、これは私を我慢するでしょう。 だから私の質問は A)スプリント計画で依存関係をどのように処理しますか?編集:ユーザーストーリーのデザイン/ UXが実装と同じスプリントで発生しても問題ありませんか B)今はどのようにスプリントにアプローチすべきですか?現在のユーザーストーリーを再推定し、バーンダウンがバーンアップに変わり、無能/非生産的と見なされるのを確認しますか?または、「デザイナーが適切なデザインを作成するのを助ける」という行に沿って、現在のスプリントに新しいタスクを追加します
9 agile  scrum  planning 

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