Posts

CST370 Week 2

     I found the assignments this week to be a lot of fun. I really enjoy coding challenges that feel like brain teasers. As for the material, recursion was definitely the trickiest part for me. I had to take my time with those questions on the quiz and did a bit of extra reading to get a better grasp on it. I’ve found that recursion makes a lot more sense when I see it in action through code, rather than trying to understand it in the abstract.

CST370 Week 1

 This week we worked on a palindrome puzzle. I immediately recognized it from when I solved a similar one on LeetCode a few years ago, though back then I used Python. My first instinct was to use a two pointer approach, but I specifically remembered this one because the optimal Python solution was a one liner: return string.lower() == reversed(string.lower()) I looked up the equivalent syntax in Java and gave that a try. Once I got that working, I added the logic to remove any non alphanumeric characters from the input and then ran the provided test cases to verify the results. Overall it was a really fun assignment. 

Service: Learning Journal Reflections

    What went well?      I think the student teams was able to collaborate well together. We came together quickly and were able to produce a product with minimal guidance.      What would you improve?      The School and the Sites need to be more transparent about the synchronous time requirements for     these projects. I did not choose the  interview track or another of the Site projects because the      meeting times stated up front were during business hours and I wanted to avoid this very issue.      What was the most impactful part?     Nothing was really impactful. We were given a project and then left to ourselves to complete.       What challenges did you face?      Due to the meetings taking place during the business day, I did not get to meet with the site supervisor     until near the end of the program when we turned in our p...

CST 334 Week 8

     This final week in CST 334, we covered persistence and its importance both in the context of operating systems and as a student. For operating systems, persistence is crucial for maintaining data and state beyond the life of a process. It is achieved by storing data in non-volatile memory, like hard drives or SSDs, ensuring that information survives even after a system shuts down or restarts.      As an online student, persistence is not just about data storage; it’s also about staying committed to completing the course and navigating the challenges that come with balancing my responsibilities at school and work. Managing deadlines and projects in both areas can be overwhelming, but I’ve learned that I can handle it if I stay focused. I’ve also realized that I can sometimes be too hard on myself. In the past, and honestly still today, I tend to be unforgiving when I miss a task or forget an assignment. However, I’m slowly learning that occasional setba...

CST 334 Week 7

     This week, we covered topics including I/O devices, disk drives, files and directories, file systems, and RAIDs. RAID is a storage technology that combines multiple physical disks into one logical unit to enhance performance, data redundancy, or both. RAID 1, also known as mirroring, duplicates data across two or more disks, ensuring that if one disk fails, the data remains intact on the other. This provides high data reliability but requires twice the storage capacity. RAID 4, on the other hand, uses a dedicated disk for parity, with parity information calculated using XOR, and distributed across the array. This parity allows for data recovery in the event of a disk failure. While RAID 4 offers better storage efficiency than RAID 1, it may suffer from performance bottlenecks, as the parity calculations are handled by a single disk.

CST 334 Week 6

     This week, we explored common concurrency issues, focusing on deadlock and how to manage it. Deadlock occurs when threads block each other by holding resources that others need, and four conditions must be met for it to happen: mutual exclusion, hold-and-wait, no preemption, and circular wait. We discussed techniques to prevent deadlock, such as enforcing strict lock ordering and using atomic lock acquisition. A practical approach to avoid circular wait is to always acquire locks in a consistent order, which can be managed through lock address ordering. Additionally, hold-and-wait can be avoided by acquiring all necessary locks at once, although this can reduce concurrency.      In addition to prevention, we also looked at methods like deadlock avoidance through intelligent scheduling, where the system ensures that conflicting threads never run simultaneously, and detecting and recovering from deadlock when it occurs. While deadlock detection and recov...

CST 334 Week 5

     This week, we explored threading, its benefits, and the potential challenges it introduces. One major issue with threading is that multiple threads running concurrently can interfere with each other, especially when they access shared resources. This interference can lead to race conditions, where the CPU switches between threads in the middle of important calculations, potentially causing incomplete or inconsistent results.      To address these issues, we discussed several synchronization mechanisms, including spin locks, test-and-set, compare-and-swap, and ticket locks. These mechanisms ensure that only one thread can access a critical section of code at a time, preventing race conditions and maintaining data integrity. However, each mechanism comes with its own trade-offs. For example, spin locks can waste CPU cycles as a thread waits for access, and they can lead to starvation if threads aren't given a fair chance to acquire the lock.   ...