ソフトウェア工学

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

1
NodeJSはどのようにして「ノンブロッキング」にできますか?
私はNodeJSを学んでおり、何かを明確にしたかっただけです。これまでのいくつかの入門チュートリアルと本では、非常に早い段階でNodeの「ノンブロッキング」アーキテクチャについて説明しました。 したがって、たとえば、この例は、データベースからデータを取得する非同期的な方法を読んでいる本で提供されました。 http.createServer(function (req, res) { database.getInformation(function (data) { res.writeHead(200); res.end(data); }); }); (私が理解しているように)起こることは、Nodeがデータベースへの呼び出しを行い、次に呼び出しスタックの次のものを処理し続けることです。データベースリクエストが完了すると、匿名コールバック関数のデータ変数が設定され、その関数がコールスタックに追加されます(その後、ノードがそれに到達したときに実行されます)。 私の質問は、データベース要求を正確に処理しているのは何ですか?確かにNodeはブロックしなければなりませんか?データベース要求を処理しているのは何ですか?または、Nodeが外部リソースへの非同期HTTP GETリクエストを待機している場合、Nodeがコールスタックの処理を継続して「非ブロッキング」になることを可能にするリクエストを処理しているのは何ですか?

2
個人コードを著作権で保護する方法
VBAを使用してプログラムを作成しているのは、簡単に入手できるため、パスワードを保護しているにもかかわらず、コードがCracksで利用できるからです。移植性は保護よりも重要であるため、VBAを選択したときにこれを知っていました。私の質問は著作権に関するものです。著作権と自分の名前をコードとスプレッドシートに入れて、それが自分のプログラムであることを示しますが、これは人々がコードをコピーし始めるときに十分ですか?コードに配置できる強力な法的バージョンはありますか?
14 copyright 

3
インターフェイス分離の原則の2つの矛盾する定義–どちらが正しいですか?
ISPに関する記事を読むとき、ISPには2つの矛盾する定義があるようです。 最初の定義(参照によると1、2、3)、ISPは、インターフェイスを実装するクラスは、彼らが必要としない機能を実装することを強制されるべきではないと述べています。したがって、太いインターフェイスIFat interface IFat { void A(); void B(); void C(); void D(); } class MyClass: IFat { ... } より小さなインターフェースに分割しISmall_1、ISmall_2 interface ISmall_1 { void A(); void B(); } interface ISmall_2 { void C(); void D(); } class MyClass:ISmall_2 { ... } このよう以来、私のMyClass唯一の方法、それが必要とする(実装することが可能であるD()とのC()またのためのダミー実装を提供することを余儀なくされることなく、) A()、B()およびC(): しかし、2番目の定義に従った(参照1、 2は、ナザールMerzaによって答えは、ISPはと述べている)MyClient上のメソッドを呼び出しますMyService上の方法を知っておくべきではないMyService、それは必要としないこと。つまり、とMyClientの機能のみが必要な場合、代わりにC()D() class MyService { public …

3
PKI証明書を使用したWeb認証
私はPKIを概念的な観点から合理的によく理解しています-秘密鍵/公開鍵-それらの背後にある数学、証明書に署名するためのハッシュと暗号化の使用、トランザクションやドキュメントのデジタル署名など。 Cライブラリは、通信と認証を保護するために証明書とともに使用されました。また、opensslコマンドラインツールにも非常に精通しています。 ただし、WebベースのPKI対応プロジェクトの経験はほとんどないため、これをよりよく理解するために個人プロジェクトを設計およびコーディングしようとしています。 要求事項 これは銀行のウェブサイトです。すべてのインターネットバンキングユーザーは、いくつかの既知のCA(verisign、Thawte、entrustなど)によって発行された証明書を使用できます。銀行は、ユーザーの証明書を取得する責任を負いません。これらの証明書は、銀行のWebサイトへの認証に使用されます。プラットフォーム/ OSなどはまだ修正されていません。 設計 認証を行うための最良の方法は何だろうと思っていました。 Apacheには2方向SSLを有効にする方法があることがわかりました。この場合、Webサイトに移動すると、ユーザーに証明書を自動的に要求すると思います。しかし、証明書が信頼できるCAによって署名されているかどうか、および証明書の件名行のホワイトリストに含まれるかどうかを検証するだけであると思われるため、これで十分かどうかはわかりません。しかし、これは十分ではありません。 bankuseridを証明書に関連付ける必要があるため、銀行の場合。 IISには、Active Directoryの各ユーザーの証明書を保存する方法があるようです。これは、いくつかのMSDN記事を読んで理解したことです。IISで2方向SSLをオンにし、ユーザーがWebサイトに移動しようとすると、IISは承認されたCAのリストを使用してブラウザーに要求を送信し、ブラウザーはユーザーが証明書ストアから適切な証明書を選択して送信できるようにしますバックエンドに。IISは2つのことを行うと仮定しています ユーザーが証明書に対応する秘密キーを持っていることを確認します(カバーネゴシエーションにより) ADユーザー証明書マッピングに基づいて、IISはユーザー名をアプリケーションに報告します。 暗号化関数を呼び出すことで明示的に認証を行いますが、Webサーバーに依存することに依存します。 証明書をアップロードするユーザー画面を表示すると、アプリケーションは、ユーザーが証明書に対応する秘密鍵を持っていることを確認します(証明書を使用して文字列に署名するようフロントエンドに要求します)。 アプリケーションにはいくつかのデータが保存されているデータベースがあり、各ユーザーを自分のユーザーIDにマッピングできます。これは 各ユーザーIDに対応する証明書全体 各ユーザーIDに対応するCAおよび証明書のシリアル番号。 よく使われる方法はどれだろうと思っていましたか?ベストプラクティスは何ですか?#3に進む必要がある場合、これを行う最良の方法は何ですか? スマートフォンアプリでも簡単に機能するものは、追加のボーナスになります。 更新 「認証部分を自分でコーディングする」というステートメントを明確にしましょう。答えの一部は、それが誤解されていることを示しているようです。 これは、私が自分で暗号文を書くという意味ではありません。これは、IISや他のWebサーバーに暗黙的に依存する代わりに、実際に明示的に暗号化ルーチンを呼び出すことを意味します。

5
API設計において、アドホックポリモーフィズムをいつ使用/回避するか?
スーはJavaScriptライブラリを設計していますMagician.js。その要はRabbit、渡された引数から抜き取る関数です。 彼女は、そのユーザーがウサギを引き出したいことを知っているString、Number、Function、多分HTMLElement。それを念頭に置いて、彼女は次のようにAPIを設計できます。 厳格なインターフェース Magician.pullRabbitOutOfString = function(str) //... Magician.pullRabbitOutOfHTMLElement = function(htmlEl) //... 上記の例の各関数は、関数名/パラメーター名で指定された型の引数を処理する方法を知っています。 または、彼女はそれを次のように設計できます: 「アドホック」インターフェース Magician.pullRabbit = function(anything) //... pullRabbitanything引数が想定されるさまざまな異なるタイプ、および(もちろん)予期しないタイプを考慮する必要があります。 Magician.pullRabbit = function(anything) { if (anything === undefined) { return new Rabbit(); // out of thin air } else if (isString(anything)) { // more } else if (isNumber(anything)) { // more …

3
「このウェブサイト/アプリをどのように構築しますか」インタビューの質問に対する一般的な思考プロセス[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 「フォトアルバムアプリケーションの設計方法を説明する」、「この特定のWebサイトのこの特定の機能を設計する方法を説明する」などのインタビューの質問を収集しましたブラックジャックの)。次に、このものが何百万ある場合はどうなりますか?何を変えますか? これは、データベーススキーマまたはクラス定義の束(またはその両方)を想定しているようです。私は学校でデータベースについて学んだことがありますが、実際にアプリケーションを設計したことがなく、どこから始めればよいか、思いついた設計が「良い」かどうか、スケーラブルにするために何を変更できるかがわかりません。 これらのシステムを設計するとき、一般的なアプローチまたは思考プロセスはありますか?そして、私が回避しようとする必要がある設計で多くのように思われる一般的な問題/問題?誰かが私にこれらの1つ(または好ましくはすべて、それぞれのニーズを比較しながら)を見て、説明することができますか? 1)どのエンティティが必要かをどのように思い付きますか?2)すべての関係をどのように決定しますか?3)パフォーマンスの最適化を設計にどのように組み込みますか?4)クラスまたはデータベースを使用してこれを行いますか?違いがありますか(つまり、実際にデータベーステーブルに変換できないクラスがあるでしょうか?) 私が質問している主な理由は、「コーディングインタビューをクラックする」ことを行っていたためであり、私の答えは著者のものとは完全に異なっていたためです。 私の試み: 写真共有アプリを使えば、クラスとテーブルが必ずあります:写真とユーザー。 次に、スキーマを作成しようとしている場合、写真の各人が写真にリンクされていると仮定すると、写真とユーザーをリンクするテーブルがあると思います(このテーブルは必要ですか?そうでない場合でも、それはまだ一般的な習慣ですか?多対多のリレーションシップ用に別のテーブルを作成するかどうか)。 しかし、オブジェクト指向のアプローチをとろうとしている場合は、代わりに、すべての作業を実行し、他の2つのテーブル/クラスからのすべての情報を保持するalbumというクラスを用意します。これは私が本で気づいた1つのことです-クラスの束があり、基本的にすべての情報を持ち、他のクラスを接続する1つのクラス-これは一般的ですか?たとえば、上記の私の例では、これは適用されるように見えますか? 現時点では、大規模システムの優れたアーキテクチャがどのように見えるかを知る方法がわからないため、いくつかの一般的なルール/ガイドラインに従うことを望んでいます。

3
テストのロジックを回避しながらコレクションを返すメソッドを単体テストする方法
データオブジェクトのコレクションを生成する方法をテスト駆動しています。オブジェクトのプロパティが正しく設定されていることを確認したい。一部のプロパティは同じものに設定されます。その他は、コレクション内での位置に依存する値に設定されます。これを行う自然な方法は、ループを使用するようです。ただし、Roy Osheroveは単体テストでロジックを使用しないことを強くお勧めします(Art of Unit Testing、178)。彼は言い​​ます: ロジックを含むテストは、通常、一度に複数のテストを行いますが、テストは読みにくく、壊れやすいため、お勧めできません。しかし、テストロジックは、隠れたバグを含む可能性のある複雑さも追加します。 テストは、一般的なルールとして、でなく、制御フローのない一連のメソッド呼び出しtry-catch、およびアサート呼び出しである必要があります。 ただし、デザインに問題はありません(データオブジェクトのリストを生成する方法はありますが、値の一部はシーケンスのどこに依存しますか?-個別に生成してテストすることはできません)。私のデザインにはテストに適さないものがありますか?または、オセロベの教えにあまりにも厳格に専念していますか?または、この問題を回避することについて私が知らない秘密のユニットテストマジックがありますか?(私はC#/ VS2010 / NUnitで書いていますが、可能であれば言語に依存しない答えを探しています。)

5
何年もの間、彼らのチームが製品革新に欠け、プロジェクト管理方法論を使用せず、悪いソフトウェア開発プラクティスを維持していた場合、開発者として何をすべきか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 何年も変更されておらず、最終的に製品とチームの障害につながる現在のソフトウェア開発プロセスに対処する方法を知りたいと思っています。はい、おそらくこれを解決するより簡単な方法は仕事を変えることですが、この経済では言うよりも簡単です。ただし、特定の例があり、同じ状況で複数回見たり、経験したことがあり、これらの問題に対処する最善の解決策が会社を辞めることだと思う場合は、回答をサポートしてください。重要なのは、特にこの問題に関する複数の専門家が最終的なルートがルートAであることを示す場合、この質問には本当に答えがあるということです。 私は、多くの開発者が同じような状況にあったことを知っています。これは、企業が市場で第1位から最後に、あるいは市場から外れてしまう主な理由の1つです。この投稿の回答が、同様の障害に直面している他の開発者の助けになることを願っています。小規模または大規模な開発チームでは、通常これが発生します。 一部の開発者は気にせず、フローを採​​用することを決め、多くのコードをそのまま残し、開発プロセスをそのままにすることを好むようです。 他の人は変化に飽きて辞任し、別の会社に移動します。 他の人は話をすることを恐れて静かに過ごすことを好むようです。 時には非常に少数の開発者またはたった1人の開発者が製品の改善について意見を表明し、クライアント、ユーザー、およびチームのコーディングのベストプラクティスとその利点に従うことの重要性をチームに伝えます。これらのタイプの開発者は通常、会社が提供するメリットが非常に少ないソフトウェア会社や製品に多くの可能性があるなどの理由により、チームに留まることを決定します。 私たちのチームの製品は、製品の傘を持っているため、会社が収益を得る場所のほんの一部です(この会社はソフトウェア/ハードウェア会社ではないため、少なくとも今のところ、雇用を創出する継続的な特許訴訟はありません)不安定)。ここ数年、他の開発者の経験からこれまでに学んだことと、私の経験では、開発チームを本当に知るには、数日でも数週間ではなく、数か月かかるということです。チームがあなたを雇いたい、またはあなたを必要とする場合、面接プロセス中。彼らはすべてを素晴らしい音にし、あなたが聞きたいことをあなたに伝えるかもしれません。ただし、そのチームで作業を開始し、コードの内部を掘り始めて、完全なSDLCプロセスに移行するときの現実は異なります。これは、開発者として、あなたが仕事に就いたことの現実を見始めたときです。この現実により、ある会社から別の会社に移動したいと思うのは難しくなります。なぜなら、あなたが移動する会社が良いか悪いかを知るのは難しいからです。はい、Glassdoorのレビューなどを読むことができますが、HRからではなく、実際のオンラインレビューの数はどれくらいですか? マネージャーは最初から常に変化に抵抗しており、以前の開発者は何年も同じことをしてきたことを考慮して、以下に概説する問題に取り組む最良の方法は何でしょうか? 長年にわたる製品革新の欠如:製品には多くの可能性があり、会社に良い収益をもたらしますが、製品は20年前に作られたように見えます。一部のユーザーは、製品が使いやすくも直感的でもないと不満を述べ、他の人は、Gmailのようなアプリに使用され、同様の機能がないために製品を使用するときにイライラすることを述べています。ここでの主な問題は、開発者として製品に変更を加えて、製品の主要な要素を数ピクセル離れたところに移動しようとすると(ユーザーフレンドリまたは直感的に)、マネージャーがパニックして、元の場所に戻します。ユーザーの生産性を向上させる機能を追加しようとすると、「ユーザーはプロセスを行うのに慣れているなどの理由で」削除するように求められます。あなたは、変化、改善、革新に対する抵抗のポイントを得たと思います(開発者としてあなたが利益の強い議論を提供したとしても、マネージャーは変化に対して開かれていません)。同社はこの分野でいくつかの競合他社を抱えていますが(そのうちのいくつかの製品ははるかに競争力があります)、何とかして現在の顧客を何年も維持しています。 プロジェクト管理の調整の欠如:この結果、一部のプロジェクトがバグで遅れて配信され、一部のクライアントから苦情が寄せられたり(クライアントからもバグが報告されたり)、プロジェクトの配信前に予算が早すぎたりするなど。いくつかのプロジェクト調整のヒントとアイデアが、プロジェクトと実行するタスクの進捗を追跡するために定期的に使用されています。 悪いソフトウェア開発プラクティス:コードの臭いは、すべてではないにしてもほとんどのファイルに見られ、ドキュメント、コードの冗長性、フロントエンド層とバックエンドが同じファイルに混在している、古い開発ツール、実際のテスト環境もテストツールもありません(コピーアンドペーストのみ)開発環境から本番環境へのファイルを作成してから、手動でテストして問題が発生していないことを確認してリリースします)。チームがコード開発とソース管理に2つのIDEのみを使用しているため、チームが知らないところで開発とテストに使用する開発ツールのほとんどは、開発環境でのみ使用できます。他の開発者は最新のフレームワークを使用して現在の問題を改善しようとしましたが、マネージャーは「あなたが去ったら、そのコードを維持するのは誰ですか?、そのままにしておきましょう」という理由でそれを好まない去り、別の会社に移った。 要約すると、他の会社の多くの開発者にも同様の状況が起こると確信していますが、状況が異なるため、開発者は(仕事の都合、仕事の柔軟性、会社の利益、またはより良い機会が届いていないという理由だけで)。私が知っている完璧な会社はありませんが、開発者としてあなたがどのように行動し、物事をポジティブに保ち、最終的に製品の改善とソフトウェア開発プロセスの改善のための変更を促進するためにこれらの問題に対処しますか?長年の開発経験またはほんの数年)?これは投稿が長いことは知っていますが、より有用なフィードバックを得る可能性を高めるために、詳細を追加することを好みました。 フィードバックと時間をありがとうございました

3
テスト中の開発者とは何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は最近、Test in Developerの職に就くために会社に入れたいリクルーターと話していました。彼は本質的に、新しいプログラミング手法を試したり、ソフトウェアのバグや改良点をテストしたり、標準的な期限を気にする必要がないような立場にしたようです。あなたの仕事で非常に創造的になります。 しかし、その説明は私にはまだあいまいでした。私は何年もの間Web開発者であり、ほとんどがPHPで働いています。それで、私は、コミュニティの他の人々がこれらのポジションが通常伴うものについてもっと知っているかどうか知りたかったです。 私はこれがこのフォーラムにふさわしい主題ではないかもしれないことを知っていますが、Stack Exchangeで見つけることができる最適なものでした。 。 私はそれをグーグルで試しましたが、そこには多くの情報がありません。では、テスト中の開発者とは正確には何ですか?

12
学校で一般的に教えられていないプロのプログラミングには、どのようなスキルが不可欠ですか?[閉まっている]
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細がない回答は、編集または削除できます。 閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックソフトウェア工学スタックExchange用。 4年前に閉鎖されました。 私はコンピューターサイエンス専攻の1年生です。私は就職説明会に行き、履歴書を配りました。驚いたことに、面接を受け、最終的に開発者としてのインターンシップを得ました。 私はインタビュアー(上司になる)に、私は最初の1年であり、プログラミングの経験があまりないことを説明しました。彼は私に数学の強いバックグラウンドを持っているので(数学の学士号をほぼ取得していることに加えて、ベルトの下にいくつかの大学院課程があるので)、彼は私がうまくいくと自信があると言った。 私はすべてのプログラミングコースでうまくやっていますが、それでも私は不利な立場にいると感じています。今、私は本当にこの仕事を始めたときにうまくやりたいと思っています。仕事は主にC#を使用しますが、明らかにC#を学習することに加えて、実際のプログラマーになる前にあなたが学びたいと思っていたスキルは何ですか? アドバイスは大歓迎ですが、本をお持ちの場合は教えてください。ありがとう!
14 skills 

1
Javaバージョン間の違いの概要 [閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 2年前に閉店。 この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答やインタラクションを受け入れていません。 ソフトウェア開発に関して、Javaバージョン間の主な違いは何ですか?プログラミングに関連する最も重要な変更点の概要はどこにありますか? http://www.oracle.com/technetwork/java/javase/releasenotes-136954.htmlなどのリリースノートは読みにくい場合があります。 たとえば、Java 1.5には「for each」という新しいコード構造があります。
14 java  versioning 

7
コードを両方ともできない場合は、乾燥させるか、読み取り可能にしますか?
私は単純な暗号化の演習用にRubyコードを書いていますが、このジレンマに頻繁に遭遇しています(この演習は、知っていなければならないソリティア暗号です)。反復を排除したり、エラーの機会を最小限にしたりする簡潔で高密度のステートメントの代わりに、関数を読みやすくする記述変数とシングルステップステートメントでロジックをパディングするかどうかの問題です。 私の最新の例:私のプログラムは入力を受け取り、厳格な形式のガイドラインのために、入力を暗号化または復号化する必要があるかどうかを簡単に判断できます。単純化するには、暗号化キーとメッセージが互換性があるように変換/生成されたら、暗号化されたメッセージからキーを減算するか、暗号化されていないメッセージにキーを追加して、目的の出力を取得します(キーを暗号化として考え、メッセージ+暗号化=コード、コード-暗号化=メッセージ)。DRYの位置は、暗号化されたメッセージを暗号化されていないメッセージとは異なる方法で変換する必要があることを示しています。これは、関数内にネストされたifステートメントが必要であることを意味しますが、ロジックはしっかりしているように見えます。ただし、このコードは簡単には読み込めません。 一方、アプリケーションが暗号化または復号化を決定するときに設定されるフラグに基づいて呼び出される2つの異なる関数を作成できます。これは読みやすくなりますが、暗号化キーをメッセージに適用する(メッセージを暗号化または復号化する)高レベルの機能を複製します。 読みやすいコード、または簡潔なコードに頼るべきですか?または、この機能を取得して両方の原則を満たす別の方法を逃しましたか?プロジェクトの目的を考慮し、その目的を果たすために最善の決定を下さなければならないスケールに沿った位置ですか? これまでのところ、読みやすいコードよりも簡潔なDRYコードを強調する傾向があります。

3
オブジェクト指向プログラミング:なぜ「指向」なのか?
私はゲームプログラミングの学位を取得しました。これはコンピューターサイエンスの学位ではないので、理論の多くは実用的なポートフォリオの構築と、ゲーム業界で明らかに重要なJIT学習と思われるものを優先します。最初の主題は「オブジェクト指向プログラミングの紹介」でした。 さまざまなプログラミングパラダイムについて学ぶまで、そのフレーズは気にしませんでした(https://en.wikipedia.org/wiki/Comparison_of_programming_paradigmsからこのリストを取得しています)。 命令的 機能的 手続き型 構造化 イベント駆動 オブジェクト指向 宣言的 オートマトンベース これは完全なリストではなく、これらの概念のすべてが同等ではなく、それらのほとんどが排他的でもないことがわかりますが、なぜそれらのほとんどが1つの単語だけを必要とするのか理解できません。機能的; 宣言的-しかし、オブジェクトを使ったプログラミングについて話すときは、それらのオブジェクトを中心に指向していることを明確にする必要があります。オブジェクトだけを使用することはできませんか?ただオブジェクトを持てないのですか?なぜ彼らは私たちをガイド星として方向づけなければならないのですか? ここ(https://en.wikipedia.org/wiki/Object-oriented_programming)を見ると、独自の用語として「指向」という用語が使用されています。「オブジェクト」のみが説明されています。 また、イベントドリブンが使用されている実用的な理由を見ることができます。なぜなら、イベントプログラミングは既に会議を行っているときに行うことであり、オートマタプログラミングは、ロボット生産ラインをセットアップしているように聞こえるからです。そのため、そこに追加の明確な単語があると役立ちます。 オブジェクトプログラミングをフレーズとして、プログラミングでオブジェクトを使用するときの動作を説明するのに十分ではないのはなぜですか? 私の口調から、明らかに「指向」という言葉はあまり好きではありません。弁護士が一種の口頭ダニとして「に関連して」というフレーズを使用した後、弁護士に耳を傾け、法廷記者としての時間を思い出させます。それは何の意味もありませんでした。彼らが次に何を言いたいかを考えている間に、彼らがかつて空気を満たしていた用語でした。しかし、私は言語の変更を提唱しようとはしていません。なぜそうなっているのかを尋ねているだけです。純粋に歴史的、痕跡的な理由でそのように知られるようになった理由を誰かが知っていれば、それが答えです。言語の変更を提唱することに時間を浪費することにした場合、それは弾薬になります。 一方、ツールやツールベルトに単にそれらを持たせるのではなく、他のすべての方向を除外して、言語やコードがオブジェクトを指す必要がある理由が実際にある場合、私は本当にそれについて学ぶことに興味があります。役に立つことを学ぶのが好きです。

8
インタビューでは、難しい質問に対するブルートフォースソリューションをコーディングするのがよいのでしょうか、それともインタビューを注意深く質問を調べるのに費やすほうがよいでしょうか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 インタビュアーが意図しているかどうかにかかわらず、インタビューの質問は難しい場合があります。限られたインタビュー時間を使用して、い、非効率的なブルートフォースソリューションをコーディングするか、インタビュアーで問題のあらゆる側面を理解する時間を費やすかを選択できます。 たとえば、Project Eulerの問題91は、可能性のあるすべての三角形を計算し、isRightTriangle()テストを記述し、テストに合格するすべての三角形をセットにポップするというそれほど難しくないブルートフォースソリューションによって解決できます。しかし、X / Y座標の2つのペアにより、高い定数値を持つO(x ^ 4)解が作成されます。友人と私は、はるかにエレガントで効率的なソリューションを思いつきましたが、2人で3時間かけて数十個の図を描き、複数の数式をテストし、複数のアプローチを検討しました。 すべてのインタビューの質問が公正であるとは限りません。また、ある人にとって簡単なことは別の人にとっては難しいかもしれません。誰かが質問に苦労した場合、ブルートフォースのい解決策が効果的であることにもっと感心しますか?または、優れた問題理解とエレガントなソリューションへの道を歩んでいますが、コード化されたソリューションはありませんか?20分後には、何があってもコーディングを始めるべきというようなルールはありますか?

4
安全なクロージャーを実装するにはガベージコレクションが必要ですか?
私は最近、プログラミング言語のオンラインコースに参加しました。このコースでは、概念の中でも特にクロージャが紹介されました。質問をする前に、このコースに触発された2つの例を書き留めて、コンテキストを説明します。 最初の例は、1からxまでの数字のリストを生成するSML関数です。xは関数のパラメーターです。 fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end SML REPLで: val countup_from1 = fn : int -> int list - countup_from1 5; val it = [1,2,3,4,5] …

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