ソフトウェア工学

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

14
SQLインジェクション防止メカニズムがパラメーター化されたクエリを使用する方向に進化したのはなぜですか?
私の考えでは、SQLインジェクション攻撃は次の方法で防止できます。 入力を慎重にスクリーニング、フィルタリング、エンコードする(SQLへの挿入前) 使用して準備された文 /パラメータ化クエリを それぞれに長所と短所があると思いますが、なぜ#2が離陸し、インジェクション攻撃を防ぐための事実上の方法であると見なされるようになったのですか?単に安全でエラーが発生しにくいのですか、それとも他の要因がありましたか? 私が理解しているように、#1が適切に使用され、すべての警告が処理されれば、#2と同じくらい効果的です。 サニタイズ、フィルタリング、エンコード 私の側では、サニタイズ、フィルタリング、およびエンコードの意味が混乱していました。この場合、サニタイズとフィルタリングは入力データを変更または破棄する可能性があることを理解していますが、エンコードはデータをそのまま保持しますが、エンコードしますインジェクション攻撃を避けるために適切に。データをエスケープすることは、それをエンコードする方法と考えることができると信じています。 パラメータ化されたクエリとエンコーディングライブラリ parameterized queriesとの概念がencoding libraries相互に交換可能に扱われている答えがあります。私が間違っている場合は修正しますが、私はそれらが異なっているという印象を受けています。 私が理解しているのは、encoding librariesどんなに優れていても、SQL「プログラム」を変更する可能性は常にあるということです。 Parameterized queries 一方、SQLプログラムをRDBMSに送信すると、RDBMSはクエリを最適化し、クエリ実行プランを定義し、使用するインデックスを選択するなどして、RDBMS内の最後のステップとしてデータをプラグインします。自体。 エンコーディングライブラリ data -> (encoding library) | v SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement パラメータ化されたクエリ data | v SQL -> RDBMS (query execution plan defined) -> …

3
Pythonの**の名前は何ですか?
Pythonをプログラミングするとき**、変換を行うためにaを行うことがあります。私はそれが何をするのか理解していますが、どのデータ構造を操作していますか?A dictと他のものは何ですか?array?**オペレーターの名前はありますか?

24
NULLとゼロの違いを説明するにはどうすればよいですか?
パーセント変化式を使用する問題に取り組んでいます: percent change = 100 * [(new value - old value) / old value] プログラマーではないかもしれない誰かにではnew value or old value = NULLなく、ifの違いをどのように説明し0ますか? 上司は、値ではなく空の文字列がTextBoxにある理由を疑問に思っています。これは、新しい値ではなく古い値があるためです。
59 null  tsql 

9
最終手段としてのstd :: shared_ptr?
「Going Native 2012」ストリームを見ているだけで、についての議論に気付きましたstd::shared_ptr。Bjarneのやや否定的な見方std::shared_ptrと、オブジェクトの寿命が不確かな場合の「最後の手段」として使用すべきだという彼のコメントを聞いて、私は少し驚いていました(彼によると、そうではないはずです)。 これをもう少し詳しく説明したい人はいますか?どうすればstd::shared_ptrオブジェクトの寿命を安全な方法で管理し、管理できますか?

12
変数を再利用する必要がありますか?
変数を再利用する必要がありますか? 私は多くのベストプラクティスがあなたがそれをするべきではないと言うことを知っていますが、後で、異なる開発者がコードをデバッグしていて、似たような3つの変数を持っているとき、唯一の違いはそれらがコードの異なる場所で作成されることです混乱した。単体テストは、この好例です。 しかし、私はないのベストプラクティスは、それに対して、ほとんどの時間であることを知っています。例えば、彼らはメソッドのパラメーターを「オーバーライドしない」と言います。 ベストプラクティスは、以前の変数をnullにすることに対してです(Javaにはnull、変数に代入するときに警告を出すSonarがあります。Java6 以降、ガベージコレクターを呼び出すためにそれを行う必要はありません。どの警告がオフになります;ほとんどの場合、デフォルトはオンです。)

11
コードをコミットするタイミング
プロジェクトで作業する場合、コードは1日でかなり高速に開発される場合もあれば、数週間/月/年の長期にわたって少しずつ開発される場合もあります。コードコミットはプロジェクト開発の指標と見なされるようになっているため、コミットが少ないプロジェクトよりも多くのコードが記述されているという意味ではありません。 では、問題は、いつコミットを正当化できるようにリポジトリに実際にコミットするかです。 アドオンとして:コミットに基づいてプロジェクトの開発を測定することは正しい習慣ですか?

15
現在のソフトウェア業界でマルチスレッドはどれほど重要ですか?[閉まっている]
MVCフレームワーク(ストラットなど)を使用してJavaでWebアプリケーションを作成した経験が3年近くあります。私は主要な小売チェーン向けのコードを書いていますが、これまでマルチスレッドコードを書いたことはありません。 インタビュー中にマルチスレッドに関するいくつかの質問があり、通常はそれらに回答します(ほとんどが単純な質問です)。これにより、現在の業界シナリオでマルチスレッドがどれほど重要か疑問に思いました。

13
未定義行動の背後にある哲学
C \ C ++仕様では、コンパイラが独自の方法で実装するための多数の動作が公開されていません。同じことについて常にここで質問され続ける多くの質問があり、それに関するいくつかの素晴らしい投稿があります: https://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviour-that-ac-programmer-should-know-abo https://stackoverflow.com/questions/4105120/what-is-undefined-behavior https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points 私の質問は、未定義の振る舞いについてではなく、本当に悪いことです。危険と標準からの関連する未定義の動作の引用のほとんどを知っているので、それがどれほど悪いかについての回答を投稿することは控えてください。この質問は、コンパイラ実装のために非常に多くの動作を開いたままにすることの背後にある哲学に関するものです。 パフォーマンスが主な理由であると述べている素晴らしいブログ記事を読みました。パフォーマンスがそれを許可するための唯一の基準であるのか、それともコンパイラー実装のためにオープンなままにする決定に影響する他の要因があるのか​​疑問に思っていましたか? 特定の未定義の動作がコンパイラが最適化するのに十分な余地を提供する方法について引用する例がある場合は、それらをリストしてください。パフォーマンス以外の他の要因を知っている場合は、十分な詳細を含めて回答を返してください。 質問を理解していないか、回答を裏付ける十分な証拠/情報源がない場合は、広く推測する回答を投稿しないでください。

12
コンピューターの仕組み [閉まっている]
これはほとんど恥ずかしい質問です...私はコンピューターサイエンスの学位を取得しています(2番目の学位も取得中です)。私はフルタイムの.NET開発者として5年近く働いてきました。私は一般的に私がやっていることで有能だと思う。 しかし、私はコンピュータの仕組みがわかりません! ちょっとだけ裸にしてください。「How a Computer Works」の簡単なグーグルは多くの結果をもたらしますが、私が探しているものに本当に答えるものを見つけるのに苦労しました。これは非常に大きな質問だと思いますので、キーワードや方向性を教えていただければ幸いです。 コンポーネント、電源、マザーボード、RAM、CPUなどがあることは知っています。そして、それらが何をするのかについての「一般的なアイデア」を得ることができます。しかしConsole.Readline()、.NET(またはJavaやC ++)のようなコード行からどのように進んで、実際にそれを実行させるかは本当に理解していません。 確かに、MSIL(.NETの場合)を漠然と認識していますが、JITコンパイラーで何らかの魔法が発生し、ネイティブコードになります(と思います)。Javaも同様であり、C ++は中間段階を切り捨てたと言われています。 私はいくつかのメインフレームアセンブリを行いました。それは数年前のことです。いくつかの命令といくつかのCPUレジスタがあり、コードを書いたのを覚えています...そして魔法が起こりました...そして私のプログラムは動作します(またはクラッシュします)。私が理解していることから、「エミュレータ」は命令を呼び出すと何が起こるかをシミュレートし、CPUレジスタを更新します。しかし、これらの指示が彼らのやり方で機能するのはなぜですか? これは「コンピューター」の質問ではなく、エレクトロニクスの質問になりますか?これを理解する実用的な理由はないと思うが、できるはずだと思う。 (はい、これは小さな子供と1日を過ごすと何が起こるかです。約10分、「なぜ?」

8
なぜ人々はJavaScriptを無効にしているのですか?
昨日質問しましたが、JavaScriptを無効にするために開発する必要がありますか?。コンセンサスは次のとおりだと思います:はい、JavaScriptを無効にするために開発する必要があります。次に、ユーザーがJSを無効にする理由を理解したいだけです。多くの開発者(質問に答えた人は開発者だと思います)がJSを無効にしているようです。何故ですか。ユーザーがJSを無効にするのはなぜですか?セキュリティのために?速度?または何?

17
巨大な「switch」ステートメントの代わりにオブジェクト指向アプローチを使用するのはなぜですか?
私は.Net、C#ショップで働いており、より多くのオブジェクト指向のアプローチではなく、多くの「ケース」を使用してコードで巨大なSwitchステートメントを使用することを主張し続ける同僚がいます。彼の主張は一貫して、Switchステートメントが「cpuジャンプテーブル」にコンパイルされ、したがって最速のオプションであるという事実に戻っています(他のことでは、速度については気にしないとチームに言われますが)。 正直なところ、これに反対する議論はありません...彼が何について話しているのかわからないからです。 彼は正しいですか? 彼はただお尻を話しているだけですか? ここで学ぼうとしています。


3
F#とScalaの最大の違いは何ですか?
F#とScalaはどちらも関数型プログラミング言語であり、開発者が不変のデータ型のみを使用することを強制しません。どちらもオブジェクトをサポートしており、他の言語で記述されたライブラリを使用して、仮想マシンで実行できます。どちらの言語もMLに基づいているようです。 F#は.NETとJavaプラットフォーム用のScala向けに設計されているという事実にもかかわらず、F#とScalaの最大の違いは何ですか?

17
ブロックifの単一ステートメント-中括弧またはno?[閉まっている]
どちらが良い/より一般的に受け入れられていますか? この: if(condition) { statement; } または: if(condition) statement; 私は最初のものを好む傾向があります。実際にifブロックに属するものを簡単に伝えることができ、他の人が後で括弧を追加する(または忘れてバグを作成する)のを防ぎ、すべてのifステートメントを作成するためです中括弧のあるものとないものの代わりに均一。ただし、2番目のものはまだ構文的に正しく、間違いなくよりコンパクトです。どちらがより一般的に他の人に好まれているかを知りたいのですが。

19
優れたプログラマーと本当に優れたプログラマーとの違いは何ですか?[閉まっている]
あなたは彼らが誰であるかを知っています。彼らはプログラミングのロックスターです: 10倍速くコーディングされます。 彼らのコードは機能します。 彼らは、主要な言語の内外を知っているだけでなく、それが内部でどのように機能するかを知っています。 あなたが尋ねる前に、彼らはほとんどの質問に対する答えを知っています。 それらのいくつかは、私たち全員が使用するプログラミングの原則を発明しました。 そして、彼らも同様に謙虚になる傾向があります。 これらの人々についてはどうですか?彼らの思考プロセスについて、平均以上のプログラマーと根本的に異なるものはありますか?それとも、彼らは一生懸命働く非常に才能のある人々ですか? 別の言い方をすると、どうすれば彼らのようになれますか?そんなに良いことを学ぶ必要があると思うことは知っていますが、それを学ぶには今後10年かかると思われ、それから私の知識は時代遅れになります。

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