Enforced Type Safety with Server-Defined Types 🔄⚙️ Join Steve Kinney to master end-to-end type safety with TypeScript. Share types between client and server, use Zod schemas to avoid API surprises, build with tRPC, and simplify database migrations with Prisma. https://lnkd.in/gHzB-BiA #Fullstack #Backend #WebDev #Programming #Coding #LearnToCode #TypeScript
More Relevant Posts
-
One of the fastest ways I learn any programming language, especially a language like Rust, is by building real-world projects that implement essential backend concepts such as: CRUD operations Pagination File uploads External API integration Asynchronous email delivery Password hashing and JWT authentication Database connectivity Caching. With these concepts, you would have touched on some of the core aspects of the language. #rust #Rust #RustLang #LearnRust
To view or add a comment, sign in
-
🧩 LeetCode #300 – Longest Increasing Subsequence (Medium) Today I solved one of the classic Dynamic Programming problems — Longest Increasing Subsequence (LIS). This problem really helped me strengthen my understanding of how smaller subproblems can be combined to build an optimal solution. ⚙️ Approach: ➤ Used a Dynamic Programming (Bottom-Up) method. ➤ For each element in the array, I checked all previous elements to find if any smaller number could form an increasing sequence. ➤ If yes, I extended the subsequence by updating dp[i] = max(dp[i], dp[j] + 1) for all j < i where nums[j] < nums[i]. ➤ The longest subsequence length is simply the maximum value in the dp array. 🧠 Key Learning: Learned how to break a problem into smaller overlapping subproblems. Understood how DP avoids recomputation and ensures efficiency. Practiced identifying the transition relation between subproblems — the most important step in DP. 📈 Complexity: Time Complexity → O(n²) Space Complexity → O(n) Solving this helped me think more clearly about state definitions and optimal substructure — two pillars of dynamic programming. Feeling more confident moving deeper into DP problems now 🚀 #LeetCode #DynamicProgramming #ProblemSolving #CodingJourney #Java #DSA #StudentDeveloper
To view or add a comment, sign in
-
-
⚙️ BeanFactory vs ApplicationContext Both BeanFactory and ApplicationContext are Spring containers, but they differ in functionality: 🔹 BeanFactory – The basic container that lazily initializes beans, mainly used for lightweight applications. 🔹 ApplicationContext – A more advanced container that eagerly loads beans and provides additional features like event handling, internationalization, and annotation-based configuration. #SpringFramework #Java #SpringBoot #BeanFactory #ApplicationContext #BackendDevelopment #SoftwareEngineering #Programming #TechLearning #CodeBetter
To view or add a comment, sign in
-
Day 26 of #100DaysOfCode 🚀 Today's problem was all about balance — literally. 🔹 LeetCode 1941 — Check if All Characters Have Equal Number of Occurrences The task: Verify whether every character in a string appears the same number of times. At first glance, it looks simple — but it's a great exercise in clean logic, frequency counting, and edge-case handling. 🧠 Approach (Java): Use an array of size 26 to store character frequencies. Track the first non-zero frequency. Compare all other non-zero counts with it. If any mismatch occurs → return false. Otherwise, the string is perfectly balanced. A small problem, but a powerful reminder that clarity > complexity. Efficient logic and readable code always scale better in the long run. 💡 Key Takeaway Mastering these bite-sized logic checks builds strong intuition for: ✔ string manipulation ✔ hashing concepts ✔ pattern consistency ✔ frequency-based problem solving These fundamentals become the building blocks for bigger DSA challenges. #100DaysOfCode #Day26 #LeetCode #DSA #JavaDeveloper #CodingJourney #ProblemSolving #Programming #Strings #Hashing #LearningEveryday #TechJourney
To view or add a comment, sign in
-
-
🌟 Day 144 of 150 – LeetCode Challenge 📌 Problem #63: Unique Paths II 🔗 Category: Dynamic Programming 🧩 Problem Brief: ✔ Given an $m \times n$ grid with obstacles (marked as 1) and empty spaces (marked as 0), find the number of unique paths from the top-left to the bottom-right corner. The robot can only move down or right. 🧠 Approach Summary: ➤ This is an extension of the classic Unique Paths problem, solved efficiently using Dynamic Programming with Space Optimization. ➤ A 1D DP array, $\text{dp}$, is used to store the number of unique paths to reach the cells in the current row. The size of $\text{dp}$ is $n$ (the number of columns). ➤ Initialization: * $\text{dp}[0]$ is set to 1, representing one path to the first column's first cell (if it's not an obstacle). ➤ DP Transition: The grid is iterated row by row. For each cell $(i, j)$: * If the cell contains an obstacle ($\text{obstacleGrid}[i][j] == 1$), $\text{dp}[j]$ is set to 0, as no path can go through it. * If the cell is not an obstacle and $j > 0$, the number of paths to reach it is the sum of paths from the cell above it ($\text{dp}[j]$ from the previous row) and the cell to its left ($\text{dp}[j-1]$ from the current row). * If the cell is the first column ($j=0$) and not an obstacle, its path count only depends on the cell above it (which is already stored in $\text{dp}[0]$ before the update). ➤ The final answer is the value at the last column of the DP array, $\text{dp}[n-1]$. ⚡ Result: ✔ Runtime: 0 ms (Beats 100.00%) ✔ Memory: 41.76 MB (Beats 66.83%) #LeetCode #150DaysOfCode #CodingChallenge #Java #DSA #DynamicProgramming #ProblemSolving #CodeEveryday
To view or add a comment, sign in
-
C# 14 just made properties simpler, cleaner, and smarter with one new keyword: 𝐟𝐢𝐞𝐥𝐝. This release introduces the 𝐟𝐢𝐞𝐥𝐝 keyword, which lets you write property accessors without declaring a separate backing field. Instead of managing private variables manually, the compiler creates the backing field for you, and the 𝐟𝐢𝐞𝐥𝐝 token gives you direct access to it inside your getter or setter. This change streamlines common scenarios like adding validation, transforming input, or enforcing constraints. You keep full control of your logic while shedding repetitive boilerplate that clutters class definitions. Why this matters for developers: 1. Less boilerplate since explicit backing fields are no longer needed 2. Cleaner, more focused accessor syntax 3. Full flexibility to add logic in one or both accessors 4. Better readability and intent clarity 5. Fewer chances for typos or inconsistent naming ⚠️ If your type happens to already contain a member named 𝐟𝐢𝐞𝐥𝐝, you can still disambiguate with @𝐟𝐢𝐞𝐥𝐝 or 𝐭𝐡𝐢𝐬.𝐟𝐢𝐞𝐥𝐝, or rename the existing symbol for clarity. Small language enhancements like field keyword can make a big difference in maintainability and developer experience. Give it a try! Are you using the field keyword in your codebases? --- ♻️ Share this and help spread knowledge freely. 👉 Follow me [Elliot One] + Enable Notifications. #dotnet #csharp #programming #coding
To view or add a comment, sign in
-
-
Still trying to leak sensitive data?! Instead of a 'safelist' for WHAT TO INCLUDE, you need a 'blocklist' for what to exclude! Meet Omit. It's the perfect utility type for when you want to return ALMOST everything from an object, but need to guarantee you hide sensitive fields: Yesterday we discussed Pick and it only felt natural for us to discuss Omit today! Share this with a friend and come back tomorrow for another Typescript tip! https://lnkd.in/gSFrRK3V #code #coding #programming #softwareengineering
To view or add a comment, sign in
-
-
🚀 Day 414 of #500DaysOfCode 🔢 LeetCode 2536: Increment Submatrices by One (Medium) Today I worked on an interesting matrix manipulation problem that teaches an important optimization idea — 2D Difference Arrays. 🧠 Problem Summary We are given an n x n matrix initialized with zeros and a list of queries. Each query represents a submatrix, and we need to increment every element inside that submatrix by 1. A brute-force solution would update each cell for every query, which becomes inefficient when the matrix and number of queries grow. ⚡ Key Insight Instead of updating all cells directly, we use a 2D prefix / difference matrix technique: Update only the corners of each submatrix Convert the difference matrix into the final matrix using prefix sums Achieve O(n² + q) performance instead of O(q · n²) A neat trick that’s extremely useful for range update problems! ✅ Takeaways Difference arrays are not just for 1D — they scale beautifully to 2D Matrix prefix sums simplify many complex update operations Thinking in terms of range operations often leads to faster algorithms 💻 Tech Used Java 2D prefix sum optimization Matrix manipulation Another day, another concept mastered. On to the next challenge! 💪🔥 #coding #leetcode #java #programming #dsa #matrix #problemsolving #500DaysOfCode #Day414
To view or add a comment, sign in
-
-
#Day13 2 – Add Two Numbers Solved this classic linked list problem by implementing an efficient algorithm to add two numbers represented as reverse-digit linked lists. 💡 Approach: Used a dummy node to simplify list construction, iterated through both lists while handling different lengths, and maintained a carry value for proper digit summation. The solution elegantly handles cases where lists have different sizes and final carry propagation. #LeetCode #Java #LinkedList #DataStructures #Algorithms #ProblemSolving #Coding #Tech #SoftwareEngineering #DailyCoding #Programming
To view or add a comment, sign in
-
-
🎯 Day 8 of #365DaysofDSA Today I solved “Convert Sorted Array to Binary Search Tree” (LeetCode #108) 🌲 💡 Concepts used: • Recursion • Divide and Conquer • Binary Search Tree Construction ✨ Approach Summary: The goal is to convert a sorted array into a height-balanced BST. To maintain balance, I picked the middle element of the array as the root — ensuring roughly equal elements on both sides. Then recursively repeated the process for left and right halves of the array. For each recursive call: 1️⃣ Find the middle index of the current subarray. 2️⃣ Create a node with that middle element. 3️⃣ Recursively build left and right subtrees using the respective halves. 🚀 Key takeaway: The divide and conquer strategy naturally fits problems that require balance and recursion — just like in this BST construction. Breaking a big problem into symmetric subproblems leads to elegant and efficient solutions. 🌿 #Day8 #DSA #LeetCode #Java #BinarySearchTree #Recursion #ProblemSolving #CodingJourney #LearnByDoing #Programming
To view or add a comment, sign in
-
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development