ソフトウェア工学

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

7
システムプログラミングとは正確には何ですか?
システムプログラミングの意味を理解したことがありません。与えられる通常の定義は、「... Osに近い何かをするか、Os機能を拡張する...」です。 一部のライブラリではなくWindows APIを直接使用して、ファイルI / Oがシステムプログラミングを行うと言っていますか?Android OSシステムプログラミングを書いていましたか?Androidのアプリのようなコンソールを介してLinuxカーネルを公開するようなものを書いたら、システムプログラミングをしていますか?洗濯機を制御するソフトウェアを書いている場合、システムプログラミングを書いていますか? 私はプログラミングの初心者であり、これは私を終わりのない混乱させています。「アプリケーションプログラミング」と対比して説明してください。

11
Postfix Increment演算子を避ける
パフォーマンス上の理由で(特定の場合に)後置インクリメント演算子を避けるべきだと読みました。 しかし、これはコードの可読性に影響しませんか?私の考えでは: for(int i = 0; i < 42; i++); /* i will never equal 42! */ より良く見える: for(int i = 0; i < 42; ++i); /* i will never equal 42! */ しかし、これはおそらく単なる習慣ではありません。確かに、私は多くの使用を見ていません++i。 この場合、パフォーマンスは可読性を犠牲にするのに悪いですか?または私はただ盲目であり、++iより読みやすいですi++か?

2
FAT16が2 GBを超えて保存できないのはなぜですか?
FAT16の情報を探しに行くすべてのサイトは、2 GBを超える容量を割り当てることができないと宣言的に述べています。OK。すばらしいです。私はあなたを信じています。しかし、どうやってその結論に達しますか(テストするだけではありません)? FAT16システムがどれだけ保持できるかを判断するために使用できる式はありますか?

4
マイクロサービスとデータストレージ
モノリシックREST APIをマイクロサービスアーキテクチャに移行することを検討していますが、データストレージについて少し混乱しています。私が見るように、マイクロサービスの利点のいくつかは次のとおりです。 水平方向にスケーラブル-負荷やサーバーのダウンに対処するために、マイクロサービスの複数の冗長コピーを実行できます。 疎結合-他のマイクロサービスを変更することなく、マイクロサービスの内部実装を変更できます。また、独立して展開および変更することもできます。 私の問題はデータストレージです。ご覧のとおり、いくつかのオプションがあります。 すべてのマイクロサービスで共有される単一のデータベースサービス-これは、疎結合の利点を完全に排除するようです。 各マイクロサービスにローカルにインストールされたデータベースインスタンス-これを水平方向にスケーリングする方法が見当たらないため、オプションとは思わない。 各マイクロサービスには独自のデータベースサービスがあります-疎結合と水平スケーリングの利点を保持するため、これは最も有望であると思われます(冗長データベースコピーの使用および/または複数でのシャーディング) 私には、3番目のオプションが唯一のオプションのように思えますが、私には信じられないほど重く、非常に過剰に設計されたソリューションです。私がそれを正しく理解している場合、4-5マイクロサービスを備えたシンプルなアプリケーションでは、16-20サーバーを実行する必要があります-マイクロサービスごとに2つの実際のマイクロサービスインスタンス(サーバー障害の場合、およびダウンタイムなしでデプロイするため)、およびマイクロサービスごとに2つのデータベースサービスインスタンス(サーバー障害などの場合)。 これは、率直に言って、少しばかげているようです。16〜20台のサーバーでシンプルなAPIを実行しますが、現実的なプロジェクトにはおそらく4〜5以上のサービスがあることに留意してください。これを説明する基本的な概念がありませんか? 回答中に役立ついくつかのこと: 私はこのプロジェクトの唯一の開発者であり、近い将来になります。 Node.jsとMongoDBを使用していますが、言語に依存しない回答に興味があります。答えは、間違ったテクノロジを使用しているだけかもしれません。

4
リファクタリングでLOCが高くなるのは理にかなっていますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 去年閉鎖されました。 より簡潔なコードよりも詳細なコード(より論理的なステートメントのように)のほうがクリーンな場合がありますか?

2
Cookieベースの認証、セッション認証、トークン認証、クレーム認証
認証について読んだことがあり、型の分類について混乱するようになりました。 Cookieベースの認証から始めましょう。正しく理解できれば、重要な点は、ユーザー認証に必要なすべてのデータがCookieに保存されるということです。そしてこれが私の最初の混乱です:クッキーに私たちは保存するかもしれません セッションIDとそれはセッションベースの認証になりますか? クレームなので、クレームベース認証と呼ばれるべきですか? 一部の人々はJWTトークンをCookieに保存することもありますが、これは独自の認証フローのカスタム実装のようです... それでは、クレームベース認証に切り替えましょう。主な要素はクレームであり、クレームのコレクションはコンテナとして使用できます Cookie(上記のとおり) トークン(例としてJWT)。 反対側から、トークンについて話しているとき、それはあらゆる種類の情報を含んでいるかもしれません...例えばセッションID ... だから私は何を見逃しましたか?なぜ人々は、何かのように定義していないCookie-Session-basedか、Token-Claims-based認証の種類について話したときに認証を?

8
地理的な住所/場所をデータベースに保存する一般的な方法は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 地球上の住所に適した地理的な住所/場所の正しい形式は何ですか?今のところ: 国 シティ 通り 数 テキストデータ(簡単にするため) zip 緯度/経度 しかし、私はそれを改善できると信じています。国の州/地域または地域のようなものがあるかもしれません。または、シンガポールや香港には、地域/地域/州はありません。 通りはないかもしれませんが、道路や大通りなどがあります。多数の建物が複合している場合があります。床があるかもしれません。部屋番号。等....

3
ワームホールノードで最短パスを見つける方法
これは、コードでやりたいことの例です。ジャンプポイント検索を使用して、緑のノードから赤のノードに問題なく、またはA *でも簡単に取得できることを知っています。しかし、これをワープでどのように計算しますか。 画像では、青のパスを取るときに緑のノードから赤のノードに到達するのに8回の移動しか必要ないことがわかります。青いパスは、紫色のノードから次のノードにすぐに移動します。中央に2移動するスペースは、移動する必要がある2つのワープゾーンの間のポイントです。 黄色のパスまで半分(大まかに)移動するだけでよいので、青いパスを取る方が明らかに高速ですが、プログラムでこれを行うにはどうすればよいですか? この問題を解決するために、使用可能なグラフの周りに複数の紫色の「ワープ」があり、各紫色のポイントがワープする場所とグラフ上のどこにあるかを正確に把握します。 紫色のワープには双方向のものとそうでないものがあります。つまり、片側からしかワープに入ることができず、ワープ後に戻ることができない場合があります。 私は解決策について考えましたが、各ワープポイントまでの距離(一方向のポイントを差し引いたもの)、それらのポイント間の差、およびそれらに近いポイントをチェックすることで問題を計算できると結論付けました。 プログラムは、最初のジャンプから歩くのではなく、2番目のワープを取る方がより有益であることを何らかの方法で把握する必要があります。したがって、6つのスポットを移動してからワープし、残りの8ステップを徒歩で移動する代わりに(ワープをまったく使用しない場合よりも高速です)、6つの動きを取り、2つの動きを2番目のワープに移動します。 編集:青のパスは実際には8回ではなく12回の動きをすることに気付きましたが、問題は同じままです。

4
「変化するものをカプセル化する」と言うとき、それはどういう意味ですか?
私が出会ったOOP原則の1つは次のとおりです。-さまざまなものをカプセル化します。 私はフレーズの文字通りの意味が何であるかを理解しています。しかし、私はそれがより良いデザインにどの程度貢献するのかわかりません。誰かが良い例を使って説明できますか?

7
ソフトウェアエンジニアとして、他人のコードを読むことはどれほど重要ですか?
私は新進のソフトウェアエンジニア(現在、2年生、CS専攻)であり、他の人のプログラムを理解するのに本当に苦労しています。このスキル(またはスキルの欠如)が私にとってハンディキャップになる可能性があるかどうかを知りたいのですが、もしそうなら、どのように開発できますか?

8
Git-マスターで直接作業することから生じる問題は何ですか?
gitブランチモデルに関する多くのアドバイスを見てきましたが、最も一般的な意見は、masterブランチで直接変更を加えることは悪い考えだと思われます。 同僚の1人がmasterブランチ上で直接変更を行うことを非常に喜んでおり、いくつかの会話にもかかわらず、彼らはこれを変更する可能性は低いようです。 現時点では、マスターに直接取り組むのは悪い習慣である同僚を納得させることはできませんが、私は彼の働き方と矛盾することを理解し、いつ再訪する必要があるかを知りたいですこの問題。

5
インスタンスは、より具体的なタイプの他のインスタンスと同等ですか?
私はこの記事を読みました:Javaで平等メソッドを書く方法。 基本的に、継承をサポートするequals()メソッドのソリューションを提供します。 Point2D twoD = new Point2D(10, 20); Point3D threeD = new Point3D(10, 20, 50); twoD.equals(threeD); // true threeD.equals(twoD); // true しかし、それは良いアイデアですか?これらの2つのインスタンスは同じように見えますが、2つの異なるハッシュコードを持つ場合があります。それは少し間違っていませんか? 代わりにオペランドをキャストすることで、これがよりよく達成されると思います。
25 java  c#  scala  comparison 

6
複雑なマージにどのようにアプローチしますか
ここに取引があります。私は新しい会社に入社し、ほとんど一年間触れられていないブランチの仕事を終えるように頼まれました。一方、マスターブランチは安定したペースで成長しています。masterブランチからのすべての変更をfeatureブランチにマージして、そこから作業を継続したいのが理想ですが、どのようにこれにアプローチするのかはよくわかりません。 ブランチの両側で重要な変更を保持しながら、このマージを安全に実行するにはどうすればよいですか?

5
Promiseを拒否するのはエラーの場合のみですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 3年前に移行され ました。 約束を返すこの関数を認証させるとしましょう。その結果、約束が解決します。私が見るように、falseとtrueは期待される結果であり、拒否はエラーの場合にのみ発生するはずです。または、認証の失敗は、約束を拒否する何かと見なされますか?
25 javascript 

5
ゲッターを使用して定数を回避するのは良い習慣ですか?
クラスの外部で使用されている定数をゲッターで置き換えるのは良い習慣ですか? 例として、if User.getRole().getCode() == Role.CODE_ADMINまたはを使用する方が良いif User.getRole().isCodeAdmin()でしょうか? それはこのクラスにつながります: class Role { constant CODE_ADMIN = "admin" constant CODE_USER = "user" private code getRoleCode() { return Role.code } isCodeAdmin () { return Role.code == Role.CODE_ADMIN } isCodeUser () { return Role.code == Role.CODE_USER } }

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