Posts

Showing posts from July, 2018

Grinding like I need to hit Lvl 99 (Week 3)

You know what, I think I did a good job of keeping my expectations more tame this week. I set out to work on data structures, algorithms, and database theory and for the most part I was able to hit each of those topics, and get in some extra stuff.  As far my how my on-site interview with iHerb went, I think I did good, I was able to hit their programming question and system architecture questions while maintaining good composure.  Their response was a bit weird, in that they said they really liked me and wanted me to come in again. This could mean a couple things, one that they aren't sure if they want to hire me, or two they feel they haven't seen my ceiling, so they want to see what more I have in the tank.  Both are the exact opposite, so I'm hoping that I can figure that out tomorrow.  Either way I told them I could come in on Tuesday for a followup. As far as things I want to do for this week, continue to work on programming questions, look into implementation

Scaling Engineering - How Reddit was able to Triple in Size

This is a blogpost to summarize some of the key notes from the InfoQ video: Scaling @reddit Triple Team Size w/o Losing Control. I though this was a interesting video to take notes for as it discusses issues from a process and team size, and how to create a good environment for engineers to work in, and what we should strive towards. Even the best architected project will fail as a product if the management isn't there. Video Link:  https://youtu.be/u6hmMW_6fOw 1. Roles and Responsibilities The presenter's main point around this was that each person should have a defined scope of responsibility to his team, his peers, and his bosses. By defining ambiguity of roles, you are able to delegate tasks more effectively and specialize tasks for the right person. RACI (Responsibility Assignment Matrix) A RACI chart is suppose to relate the task to the position, in what part that position must do for that task.   R - Responsible, The person that does the task (1) A - Account

Improving the Performance of Web API

Taking notes from this blog: https://www.c-sharpcorner.com/article/important-steps-to-increasing-web-api-performance/ Thread Usage Parallel Programming - Executing a collection of tasks at the same time in order to maximum thread usage. Asynchronous Programming - Asynchronous programming indicates to the program when it needs a thread to execute, and gives it back when finished or waiting. You may do this so that long operations do not block the thread. Data Transfer and Serialization Compress the results of Web API - You may enable some settings on IIS or use a different protocol to decrease the transfer size. Using a high speed serializer - In order to transform your .NET classes to readable data, it must perform serialization on your data to convert it to a form readable over the web. There are special performance libraries such as JSON.net or others like ProtoBuf that are faster than then builtin serializer. Data Caching - If there is a chance that you don't have t

Types of Algorithms

A list of algorithm approaches you can use to solve many problems. Brute Force Also referred to as exhaustive search because it is a naive approach that looks at all possible solutions for the problem and chooses the best solution. Divide and Conquer There are two components to this algorithm. The first step is to determine if you can split your current problem into smaller sub-problems and then combine smaller sub-problems to find the answer. Decrease and Conquer This approach is used when you only have one sub-problem, but you can filter the input by a simpler function in order to decrease the amount of complexity of the problem. Greedy Approach This algorithm is used to find the approximate best answer for hard problems. What it does is at a given time, it will take the locally optimal choice with the intent for finding the optimal solution. Dynamic Programming Another approach of splitting up a complex problem into overlapping sub-problems, using the answer for the s

Big O - Cheat Sheet

Going to make myself a personal copy of a Big O cheat sheet, and try to explain why each data structure has certain properties to be a refresher for my data structure. Array (Dynamic) Access - O(1) Array's have quick access to a specified index because arrays take a finite contiguous block or memory that can be used to pinpoint memory locations. Search - O(n) Array's have linear time search because there are no special properties to indicate the value you are trying to look for, therefore you have to search through the elements individually. Insertion - O(n) Array's take up a contiguous block of memory, therefore when a new element is added to the list, it must be recreated, and/or the elements may be shifted. Deletion - O(n) Same as insertion in that it takes a contiguous block of memory, and therefore needs to be shifted. Space - O(n) Requires as much space as elements Stack Access -  O(n) Must traverse through the top reference to get to index.

New Week, We Still Out Here (Week 2)

Last week I got busy preparing for for soft skills to get ready for phone screen interviews. For that I did a lot of preparing for preparing answers about my current position, behavioral questions, and my goals. I think that has gone a long way in that I've been able to talk with multiple parties comfortably about where I come from and where I want to go. I also brushed up on a lot of phone screen, high level interview questions pertaining to object-oriented programming, system architecture, algorithms, recursion. This week my goal is to brush up on data structures, database theory, and algorithms in preparation for my onsite on Thursday.

Dictionaries, HashSets, HashTables, and HashBrowns

Yesterday I was asked a question about what the differences were between a dictionary, a hashset, and a hashtable.  While I was able to reason through part of the question, I wanted to follow up with a blog post describing how each of the data structures relate. Hashtables and Dictionary is a collection key-value data pairs that allows you to store a key and relate it back to a value. Hashsets implement the Set interface which maintains that the collection contains only unique elements. Differences between Hashtables and Dictionaries The differences between Hashtables and Dictionaries in C#: Dictionaries are: Generic, Not thread-safe, Output KeyValuePair for enumeration, potentially faster for value types (No unboxing-needed) Hashtables - Non-generic, thread-safe, Output DictionaryEntry for enumeration, potentially slower for value types. Hashtable can only store object types, therefore when working with value types boxing/unboxing must occur. Both are: Internally manged b

Tallan: A Mobile Experience

As part of my first series of posts about my experiences at Tallan, I'll be going over some of the first projects that I ever did after completing training, and how they shaped my development perspective. At Tallan we do everything, and that is one of the appeals that I had going into working with the company. I thought that the amount of exposure to different technologies would allow me to try out different things, and boy did I do that. During training one of the things they mentioned was that they suggested we join a "Practice" so that we can further develop our skills in a certain area that we could master as a way to focus ourselves in the field in addition to our regular duties. The "practice" that stuck out to me the most was the "Mobile Practice" as the director, Matt Kruczek (who became my mentor), sold us on the idea of building consumer facing products that really sounded with me at the time. And so I was able to join the exclusive club

New Week Who Dis (Week 1)

Going on each week I'm going to try and make some goals and I can write about what I learned.  I think there's an opportunity for an interview for a job, so I'm going to focus on some stuff that will help me with that. First thing I want to do is to review the projects that I've worked on and be able to talk about what I learned from them and how they contributed to my career. Second I want to investigate core .NET concepts, some common patterns for web services, and the differences between .NET framework and .NET core. With the rest of the time, I want to review YouTube videos that I've watched and pull down the concepts and issues and begin creating a schedule of topics that I can go more in depth to in later weeks.