# Information Technology Industry Project Design Course Assignment 4 ## TSMC : Backend Software Engineer * Job Description : 1. The Role Software Engineer, Backend Development at tsmc IT focus on designing the most flexible, scalable backend architecture with optimized performance to support tsmc world-class super manufacture, engineering and business systems. The ideal candidate has a highly technical multi-discipline engineering skillset that can push the limits of complex system design at large scale. 2. Responsibilities a. Implement the features and services of backend for tsmc software products b. Develop state of the art code c. Continue to refactor existing applications d. Contribute to write tests to ensure software quality e. Apply software design principles to ensure software quality f. Ensure sustainability and performance of software applications g. Willing to learn new IT technology * Job Qualification : 1. BS/MS degree or above and major in Computer Science, Information engineering, Industry Engineering, Statistics or Mathematic related fields, similar technical field of study or equivalent practical experience. 2. Strong technical skills in at least one of the following fields: C++,C#, JAVA, Python, Database or System infrastructure architect. 3. Have solid foundation of either one of backend framework: Spring/Spring Boot, .NET Core/ASP.NET Core, Django/Flask. 4. Familiar with software engineering practices: CI, CD, DDD or TDD. 5. Experience managing container-based workloads, using Kubernetes or other orchestration software. 6. Familiarity with developing APIs with the care they deserve (e.g. gRPC/REST with OpenAPI/Swagger , GraphQL) 7. With experience with scrum or devops practice is a plus. 8. With AI domain experience is a plus. 9. Familiar with source code version control tools : Git ## Background of Backend Software Engineer * What is a Backend Engineer? A backend engineer is responsible for designing, building, and maintaining the server-side of web applications. In other words, a backend engineer’s primary responsibility is to build the structure of a software application. They set the software team’s foundations of what they need to do to achieve the main goals. This means that one of the primary functions of a backend engineer in a software development team is to write business logic, server scripts, and APIs that will later be used by the other developers and members of the team. The day-to-day backend engineering consists of optimizing servers for speed and stability, ensuring the structure is secure, and generating reusable code libraries and data storage solutions. Backend engineers are also in charge of: 1. Optimizing servers for speed and stability. 2. Building security structures. 3. Generating reusable code libraries. 4. Creating data storage solutions. * What Does a Backend Engineer Do? Backend engineers have a set of skills that are necessary to perform their jobs efficiently. As stated above, they are the ones who set the path for the software team. They oversee building the structure that a software application has. Backend engineers spend time writing server scripts and APIs that front-end engineers and UX designers will later use. Backend engineers work on the server components of multi-tier web applications focusing on web services and data stores. Additionally, they may be involved with business rule implementation logic. * Backend Engineer Skills 1. Proficiency in PHP, Python, Ruby, Java, .NET, JavaScript. 2. Knowledge of Java, HTML5, and CSS3. 3. Server-side experience with SASS and Less. 4. Understanding of accessibility and server compliance. 5. Solid OOP and software design knowledge. 6. Knowledge in database systems. * Backend Engineer Responsibilities Besides the tasks explained above, a backend engineer also has these responsibilities: 1. Regularly inspect server code for speed optimization. 2. Conceptualize and implement solutions for data storage. 3. Improve the quality of the team’s code through writing unit tests and automation. 4. Collaborate and work closely with the product and design team to understand better the end-user requirements. 5. Configure the backend usability of all front side application. ## Related Question of Backend Software Engineering * Reference of question backend software engineering : [Back-End-Developer-Interview-Questions](https://github.com/arialdomartini/Back-End-Developer-Interview-Questions) * Interview Question - Q1 : What are NoSQL databases? What are the different types of NoSQL databases? - ansewer Q1 : A NoSQL database provides a mechanism for storage and retrieval of data that is modeled in means other than the tabular relations used in relational databases (like SQL, Oracle, etc.). Types of NoSQL databases: 1. Document Oriented 2. Key Value 3. Graph 4. Column Oriented - Q2 : What is SQL injection? - Answer Q2 : Injection attacks stem from a lack of strict separation between program instructions (i.e., code) and user-provided (or external) input. This allows an attacker to inject malicious code into a data snippet. SQL injection is one of the most common types of injection attack. To carry it out, an attacker provides malicious SQL statements through the application. How to prevent: 1. Prepared statements with parameterized queries 2. Stored procedures 3. Input validation - blacklist validation and whitelist validation 4. Principle of least privilege - Application accounts shouldn’t assign DBA or admin type access onto the database server. This ensures that if an application is compromised, an attacker won’t have the rights to the database through the compromised application. - Q3 : Explain the architectural style for creating web API? - Answer Q3 : The architectural style for creating web api are : 1. HTTP for client server communication 2. XML/JSON as formatting language 3. Simple URI as the address for the services 4. Stateless communication - Q4 : What is the difference between JOIN and UNION? - Answer Q5 : `UNION` puts lines from queries after each other, while JOIN makes a cartesian product and subsets it -- completely different operations. Trivial example of `UNION`: ```clike= mysql> SELECT 23 AS bah -> UNION -> SELECT 45 AS bah; +-----+ | bah | +-----+ | 23 | | 45 | +-----+ 2 rows in set (0.00 sec) ``` similary trivial example of `JOIN`: ```clike= mysql> SELECT * FROM -> (SELECT 23 AS bah) AS foo -> JOIN -> (SELECT 45 AS bah) AS bar -> ON (33=33); +-----+-----+ | foo | bar | +-----+-----+ | 23 | 45 | +-----+-----+ 1 row in set (0.01 sec) ``` - Q5 : What is the difference between WHERE clause and HAVING clause? - Answer Q5 : `WHERE` clause introduces a condition on individual rows; `HAVING` clause introduces a condition on aggregations, i.e. results of selection where a single result, such as count, average, min, max, or sum, has been produced from multiple rows. Your query calls for a second kind of condition (i.e. a condition on an aggregation) hence `HAVING` works correctly. As a rule of thumb, use `WHERE` before `GROUP BY` and `HAVING` after `GROUP BY`. It is a rather primitive rule, but it is useful in more than 90% of the cases. While you're at it, you may want to re-write your query using ANSI version of the join: ```clike= SELECT L.LectID, Fname, Lname FROM Lecturers L JOIN Lecturers_Specialization S ON L.LectID=S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise)>=ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID) ``` ## Interview Conversation * A : Hi, Jakaria. I'm dino as the interviewer. In this interview, we will talk about basic knowledge of backend software engineering. how many programming languages are you understanding so far? * B : so far I am familiar with PHP, python, and java. my background experience in the field of website and mobile programming. * A : do you understand the concept of PHP NoSQL? * B : A NoSQL database provides a mechanism for storage and retrieval of data that is modeled in means other than the tabular relations used in relational databases (like SQL, Oracle, etc.). * A : What do you understand by NoSQL databases? Explain. * B : At the present time, the internet is loaded with big data, big users, big complexity, etc., and also becoming more complex day by day. NoSQL is the answer to all these problems; It is not a traditional database management system, not even a relational database management system (RDBMS). NoSQL stands for “Not Only SQL”. NoSQL is a type of database that can handle and sort all types of unstructured, messy, and complicated data. It is just a new way to think about the database. * A : in your opinion between SQL and NoSQL which one is better to use? then please compare SQL database and MongoDB. * B: it was probably not thinking about databases when he wrote this line but this is still the critical question most companies face these days. The biggest decision when it comes to choosing a database is picking a relational database (SQL) or a non-relational (NoSQL) database. While a relational database is a viable option most times, it is unsuited for large datasets and big data analysis. This is the major reason for the popularity of the NoSQL database systems in major Internet companies like Google, Yahoo, Amazon, etc. However, the decision to choose a database is not that simple (what is really?!!). Both the SQL and NoSQL databases have different structures and different data storage methods. So the choice between SQL vs NoSQL essentially boils down to the type of database that is required for a particular project. SQL databases store data in form of tables, rows, columns, and records. This data is stored in a pre-defined data model which is not very much flexible for today's real-world highly growing applications. MongoDB in contrast uses a flexible structure that can be easily modified and extended. * A : Okay I just heard your explanation, thank you for your time. We will notify you via email if you pass this interview process.