<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Last Bencher</title>
    <description>The latest articles on DEV Community by Last Bencher (@rwadile).</description>
    <link>https://dev.to/rwadile</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1268567%2F0731676d-3b1a-4cc8-b744-aab2755096ed.jpg</url>
      <title>DEV Community: Last Bencher</title>
      <link>https://dev.to/rwadile</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rwadile"/>
    <language>en</language>
    <item>
      <title>React interview practice: explain a stale search result before fixing it</title>
      <dc:creator>Last Bencher</dc:creator>
      <pubDate>Tue, 15 Sep 2026 14:35:57 +0000</pubDate>
      <link>https://dev.to/rwadile/react-interview-practice-explain-a-stale-search-result-before-fixing-it-4i7b</link>
      <guid>https://dev.to/rwadile/react-interview-practice-explain-a-stale-search-result-before-fixing-it-4i7b</guid>
      <description>&lt;p&gt;A user searches for “react”, then quickly changes the search to “react hooks”. The second request finishes first. A moment later, results for the older search replace the current results.&lt;/p&gt;

&lt;p&gt;The network did not necessarily fail. The UI accepted a response that no longer belonged to the current request.&lt;/p&gt;

&lt;p&gt;This is a useful interview exercise because it tests reasoning about time, state and cleanup—not just whether you remember a Hook name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Draw the sequence first
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Request A starts for “react”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Request B starts for “react hooks”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;B finishes; the UI shows B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;A finishes; an unguarded callback overwrites B&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The requirement is not “use the last response to arrive.” It is “only the request belonging to the current search may update this result state.”&lt;/p&gt;

&lt;p&gt;Clarify the intended loading experience as well. Should old results remain visible with a loading indicator, or disappear immediately? That is separate from preventing an obsolete response from winning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Describe ownership, then implementation
&lt;/h2&gt;

&lt;p&gt;Each search operation needs a way to determine whether it is still current when its asynchronous work finishes. In an Effect-based implementation, cleanup can mark an old operation inactive. React's &lt;a href="https://react.dev/learn/synchronizing-with-effects#fetching-data" rel="noopener noreferrer"&gt;Effect documentation&lt;/a&gt; describes aborting a fetch or ignoring its obsolete result during cleanup.&lt;/p&gt;

&lt;p&gt;The following small JavaScript model demonstrates result ownership. It is not a complete React component or a production fetching library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createLatestResultGate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;generation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nx"&gt;generation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;mine&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;generation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nf"&gt;invalidate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;generation&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createLatestResultGate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isCurrentA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isCurrentB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;isCurrentB&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B owns the current result&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;isCurrentA&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A must not update the result&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;gate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invalidate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;isCurrentB&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cleanup invalidates B too&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This models the ordering rule without needing unpredictable network delays. A real integration must keep the gate scoped to the appropriate component/request lifecycle; recreating it for every callback would defeat the comparison. An Effect-local inactive flag is often simpler for one Effect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guard more than successful data
&lt;/h2&gt;

&lt;p&gt;An obsolete request can also clear a loading indicator or display an error after a newer request succeeds. Apply the ownership rule to every asynchronous state transition associated with the request, including error handling and finalization.&lt;/p&gt;

&lt;p&gt;For example, if A fails after B succeeds, the user should not suddenly see A's error presented as the status of B. That case belongs in the test plan alongside out-of-order successes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debouncing answers a different question
&lt;/h2&gt;

&lt;p&gt;Delaying a request until typing pauses may reduce how many operations start. It does not establish which already-started request owns the current state.&lt;/p&gt;

&lt;p&gt;In an interview, separate the two requirements explicitly: controlling request frequency and preventing stale updates. Choosing one does not demonstrate that the other is solved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test sequences, not just the happy path
&lt;/h2&gt;

&lt;p&gt;Use controllable promises or a request mock so the test decides completion order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A starts, B starts, B succeeds, then A succeeds: B must remain visible.&lt;/li&gt;
&lt;li&gt;A starts, B starts, B succeeds, then A fails: A's error must not replace B's status.&lt;/li&gt;
&lt;li&gt;A starts, then the component unmounts: the old operation must not update its state.&lt;/li&gt;
&lt;li&gt;The latest request fails: the current error must still be shown.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also explain what happens to loading state in each sequence. Merely hiding every error would make one test pass while breaking the actual feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid rebuilding your entire data layer in the interview
&lt;/h2&gt;

&lt;p&gt;If the application already uses a framework loader or client-side query cache, explain how its request identity, cancellation and cache behavior apply. React discusses the limitations of manual fetching in Effects in its &lt;a href="https://react.dev/reference/react/useEffect#fetching-data-with-effects" rel="noopener noreferrer"&gt;useEffect reference&lt;/a&gt;. A small example proves understanding; it does not justify replacing the application's existing data layer.&lt;/p&gt;

&lt;p&gt;Disclosure: I am Raviindra Wadile, creator of &lt;a href="https://wasasked.com" rel="noopener noreferrer"&gt;wasAsked&lt;/a&gt;. I use interview questions as prompts for explaining behavior and testing assumptions. The site offers public question browsing and a browser-local practice shortlist; this article is an educational exercise, not a report of a production incident.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>interview</category>
    </item>
    <item>
      <title>How to answer “How would you optimize a slow .NET API?”</title>
      <dc:creator>Last Bencher</dc:creator>
      <pubDate>Tue, 15 Sep 2026 14:34:49 +0000</pubDate>
      <link>https://dev.to/rwadile/how-to-answer-how-would-you-optimize-a-slow-net-api-4poj</link>
      <guid>https://dev.to/rwadile/how-to-answer-how-would-you-optimize-a-slow-net-api-4poj</guid>
      <description>&lt;p&gt;“Add caching” is a possible intervention, but it is not yet a diagnosis. In an interview, a stronger answer explains what you would measure, how you would narrow the problem, and what would prove the change helped.&lt;/p&gt;

&lt;p&gt;Here is a practice scenario: a paginated document search endpoint feels slow. You have not been given a trace, a database plan, or production measurements. Everything below is a proposed investigation, not a claim about a real incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the symptom and the boundary
&lt;/h2&gt;

&lt;p&gt;Ask whether “slow” means the browser takes a long time to show results, the server takes a long time to respond, or a background operation finishes late. Those are different boundaries.&lt;/p&gt;

&lt;p&gt;Clarify the affected route, filters, result size, concurrency and timing. Is every request slow, or only the first request after inactivity? Does one customer experience it more often? Is the error rate increasing too?&lt;/p&gt;

&lt;p&gt;State an explicit success criterion with the interviewer. For example, agree on a latency target under a specified workload while preserving response correctness. Do not invent an existing baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build an evidence table before proposing a fix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Observation to collect&lt;/th&gt;
&lt;th&gt;Question it helps answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;End-to-end request duration and dependency timings&lt;/td&gt;
&lt;td&gt;Where is the time going?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database command count per request&lt;/td&gt;
&lt;td&gt;Are we making repeated trips?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generated SQL and execution plan&lt;/td&gt;
&lt;td&gt;What work is the database actually doing?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rows returned and response size&lt;/td&gt;
&lt;td&gt;Are we moving data the screen does not need?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Allocation and CPU profile when relevant&lt;/td&gt;
&lt;td&gt;Is application work the bottleneck?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error and timeout rates under load&lt;/td&gt;
&lt;td&gt;Is a “faster” result hiding failures?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use request correlation to connect those observations. Avoid copying tokens, personal records or sensitive query values into logs just to make an investigation easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  If the database dominates, inspect the query shape
&lt;/h2&gt;

&lt;p&gt;For EF Core, inspect the generated query rather than assuming the LINQ expression is cheap. Limit results, select the fields the response needs, and investigate repeated related-data queries. Index suitability depends on the actual predicates and ordering. Microsoft explains these considerations in its &lt;a href="https://learn.microsoft.com/en-us/ef/core/performance/efficient-querying" rel="noopener noreferrer"&gt;efficient querying guidance&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Keep authorization filters in place throughout the investigation. Removing a tenant or ownership predicate can change both correctness and performance, so the result would not be a valid optimization of the original request.&lt;/p&gt;

&lt;p&gt;Pagination also needs a product decision: does the user need arbitrary page numbers or only the next set of results? That requirement should shape the implementation, rather than choosing a pattern because it sounds faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make caching a conditional proposal
&lt;/h2&gt;

&lt;p&gt;Before recommending a cache, answer four questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Who is allowed to reuse this response?&lt;/li&gt;
&lt;li&gt;Which inputs determine its contents?&lt;/li&gt;
&lt;li&gt;How stale may it become?&lt;/li&gt;
&lt;li&gt;What happens after a write or a cache failure?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a private document search, sharing an entry across users could expose information. For a public catalogue, reuse may be simpler. The same word—“cache”—does not resolve those differences.&lt;/p&gt;

&lt;p&gt;Also distinguish a fast cache hit from a healthy uncached path. Your evaluation should include both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Close with a verification plan
&lt;/h2&gt;

&lt;p&gt;Change one suspected cause, repeat the same representative workload, and compare latency distributions, errors, resource use and response correctness. Keep the original request shape and access restrictions. Check both small and large result sets.&lt;/p&gt;

&lt;p&gt;A useful closing answer is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I would first locate the slow part using request and dependency measurements. If database work dominates, I would inspect the actual query and plan, then test a focused change. I would consider caching only after defining access boundaries and freshness. I would compare the same workload before and after and check that correctness and error rates have not regressed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Practise the follow-up, too
&lt;/h2&gt;

&lt;p&gt;Ask a partner to change one condition: “Only the first request is slow,” “The database takes little time,” or “The response contains private data.” Explain how that changes your investigation.&lt;/p&gt;

&lt;p&gt;Disclosure: I am Raviindra Wadile, creator of &lt;a href="https://wasasked.com" rel="noopener noreferrer"&gt;wasAsked&lt;/a&gt;, where developers can browse reported interview questions and keep a browser-local practice shortlist. This article is a practice framework, not a measured performance case study.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>performance</category>
      <category>career</category>
      <category>interview</category>
    </item>
    <item>
      <title>Turn an interview question list into a practice session</title>
      <dc:creator>Last Bencher</dc:creator>
      <pubDate>Tue, 15 Sep 2026 14:12:03 +0000</pubDate>
      <link>https://dev.to/rwadile/turn-an-interview-question-list-into-a-practice-session-fod</link>
      <guid>https://dev.to/rwadile/turn-an-interview-question-list-into-a-practice-session-fod</guid>
      <description>&lt;p&gt;An interview question list becomes more useful when it tells you what to do next. Reading a familiar question can feel like preparation even when you cannot explain an answer without looking it up.&lt;/p&gt;

&lt;p&gt;Try this workflow with a small set of questions for the role and technology you are targeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Capture what is actually known
&lt;/h2&gt;

&lt;p&gt;For each question, record the company, technology, reported year and interview context when supplied. Leave missing information unknown. A question reported from one team does not describe every interview at that company, and a publication date is not necessarily an interview date.&lt;/p&gt;

&lt;p&gt;Keep the original question separate from your interpretation. For example, “How would you improve this query?” needs more context before there can be one useful recommendation. The database engine, schema, query, data distribution and performance goal all matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Explain before opening an answer
&lt;/h2&gt;

&lt;p&gt;Pick one question and explain your approach aloud or in a short note. A useful structure is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What do I need to clarify?&lt;/li&gt;
&lt;li&gt;What assumptions am I making?&lt;/li&gt;
&lt;li&gt;What approach would I try first, and why?&lt;/li&gt;
&lt;li&gt;What tradeoff or failure case should I mention?&lt;/li&gt;
&lt;li&gt;How would I check whether the approach works?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You do not need a polished speech. You need enough detail to reveal where your understanding stops.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check evidence rather than familiarity
&lt;/h2&gt;

&lt;p&gt;Compare the explanation with primary documentation, a small reproducible example, or a reviewed source. A popular answer can still omit assumptions. A plausible explanation can still apply to the wrong framework version.&lt;/p&gt;

&lt;p&gt;For a technical question, write down what evidence would change your answer. If performance is involved, describe what you would measure before claiming an improvement. If behavior depends on a version or configuration, name it instead of treating it as universal.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Record one actionable gap
&lt;/h2&gt;

&lt;p&gt;Avoid a vague note such as “learn SQL.” Prefer “I could explain the symptom, but could not describe how I would inspect the execution plan.” Your next session now has a concrete starting point.&lt;/p&gt;

&lt;p&gt;Use a simple self-assessment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To practise:&lt;/strong&gt; I have not attempted an explanation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revisit:&lt;/strong&gt; I found a specific gap or relied on prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confident for now:&lt;/strong&gt; I can explain my assumptions and reasoning, and have checked the important details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is your assessment, not a certification of correctness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copyable worksheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Your notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Question and source URL&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Company/role/year, only if known&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clarifying questions&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assumptions&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proposed approach and reason&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tradeoffs or failure cases&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example, test or primary reference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One gap to revisit&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next action&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Start with three questions rather than a large checklist. The purpose is to produce three honest explanations and a few useful next actions—not to claim that you completed an entire technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  A tool for keeping the shortlist
&lt;/h2&gt;

&lt;p&gt;Disclosure: I am Raviindra Wadile, the creator of &lt;a href="https://wasasked.com" rel="noopener noreferrer"&gt;wasAsked&lt;/a&gt;. I built it to organize reported interview questions by company and technology and provide a browser-local saved/practice flow. You can browse without signing in. Community answers are available where contributors have supplied them; coverage is still developing.&lt;/p&gt;

&lt;p&gt;The same workflow works in a notebook. The useful part is attempting an explanation, checking its assumptions and keeping a clear record of what to revisit.&lt;/p&gt;

</description>
      <category>career</category>
      <category>interview</category>
      <category>learning</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Features and Updates in .NET 7</title>
      <dc:creator>Last Bencher</dc:creator>
      <pubDate>Mon, 29 Jan 2024 12:50:36 +0000</pubDate>
      <link>https://dev.to/rwadile/features-and-updates-in-net-7-14d4</link>
      <guid>https://dev.to/rwadile/features-and-updates-in-net-7-14d4</guid>
      <description>&lt;p&gt;.NET 7 packed with amazing features that make coding way more fun. Let's check out the best stuff.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Change on the Fly with Hot Reload&lt;/strong&gt;:&lt;br&gt;
Forget waiting around! .NET 7 lets you make changes to your code while your app is running. No need to stop and start again. It's like magic – your updates happen instantly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Faster and Smoother with Performance Boosts&lt;/strong&gt;:&lt;br&gt;
Picture this: your apps running super-fast. That's what .NET 7 does – it makes everything speedy and efficient. Less waiting, more doing!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cool Upgrades in C# 11&lt;/strong&gt;:&lt;br&gt;
Meet the new and improved C# 11. It's got some neat features, making your code cleaner and easier to understand. Say hello to record types and smarter pattern matching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easy Peasy APIs with Minimal APIs&lt;/strong&gt;:&lt;br&gt;
Building apps is now a breeze with Minimal APIs. They're like a simplified version, making it way easier to create and use APIs. Less hassle, more productivity!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blazor Love – Dependency Injection Made Simple&lt;/strong&gt;:&lt;br&gt;
If you're a fan of Blazor, you'll love this. .NET 7 brings native support for injecting things into your Blazor apps. It's like organizing your tools – everything in its place for smoother development.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In a nutshell, .NET 7 isn't just an update – it's a game-changer. Hot Reload, performance boosts, C# 11 goodies, Minimal APIs, and Blazor enhancements make coding a joy. Embrace the awesomeness of .NET 7 and take your development skills to the next level!&lt;/p&gt;

</description>
      <category>backenddevelopment</category>
      <category>backend</category>
      <category>dotnetcore</category>
      <category>dotnet7</category>
    </item>
  </channel>
</rss>
