文章目录
- 1.云原生
- CNCF trail map
- 云原生技术栈路线图
- 2. 微服务
- 3.容器化&编排
- docker
- Kubernetes
- Containers and Containerization
- Container Basics
- 4. DevOps & CI/CD
- Terms and Definitions
- 5.Agile&scrum
- Glossary: Agile & Scrum
- 6.PM
- HR QA
- Team leader
- technical QA
- Solving Coding Challenges –4-step framework
- support a salary negotiation are:
- Check List
- Elevator pitch(简单自我介绍)
1.云原生
云原生项目必定涉及到:项目管理、敏捷开发、容器云微服务,devops
CNCF trail map
云原生技术栈路线图
https://landscape.cncf.io/
2. 微服务
单体应用与微服务应用架构区别
- Monolithic applications: Built as a single unified unit, they are easy to operate and manage. However, they require updating the entire application, as any update is required for a part of the service.
- Microservices architecture: A collection of smaller, independent services that are maintained separately. You won’t need to update the entire application to update an individual service.
GraphQL
GraphQL allows clients to specify the needed data, reducing over-fetching and under-fetching
GraphQL is specifically designed as a query language for APIs. Unlike REST APIs, it allows clients to request the data they need, where multiple endpoints return predefined data structures. GraphQL enables more precise and efficient data fetching.
One of GraphQL’s key advantages is that it reduces over-fetching (receiving more data than necessary) and under-fetching (not getting enough data, requiring additional requests).
Key differences: GraphQL and REST
Feature | REST | GraphQL |
---|---|---|
Data fetching | Over-fetching/Under-fetching | Precise fetching |
Number of endpoints | Multiple | Single |
Response structure | Fixed | Flexible |
3.容器化&编排
docker
Think of Docker as a container for your application. Like a shipping container holds goods and ensures they can be transported easily, Docker containers hold everything your application needs to run: your Java code, dependencies (like JDK and libraries), and configurations. This ensures that your application behaves consistently across development, testing, and production environments, reducing the “it works on my machine” issues.
For example, suppose you build a Java Spring Boot application. In that case, you can package it into a Docker container and run it on any system with Docker installed without worrying about missing dependencies or operating system differences.
Key Docker components
- Docker Images: A snapshot of your application and its dependencies.
- Docker Containers: Running instances of images.
- Dockerfile: A script that defines and describes the process of building a Docker image.
- Docker Compose: A tool to run multiple containers together (e.g., a database alongside your Java application).
Kubernetes
Imagine you have many Docker containers running different parts of your application. Managing all these manually would be challenging. This is where Kubernetes comes in.
Kubernetes acts like a container traffic controller, helping manage, scale, and organize multiple Docker containers efficiently. If one container crashes, Kubernetes can restart it automatically. If your app requires more resources due to increased user traffic, Kubernetes can create new containers (scaling up) and remove them when they’re no longer needed (scaling down).
Key Kubernetes concepts
- Pods: The smallest unit in Kubernetes, usually running one or more containers.
- Deployments: A way to define how many container instances should be running.
- Services: Expose your application to users and other system parts.
- Ingress: Manages external access, acting like a load balancer for HTTP traffic.
Containers and Containerization
- Containers are lightweight, portable, and self-sufficient units that package software and its dependencies to run consistently across different environments.
- Docker is a platform that automates the deployment, scaling, and management of containerized applications.
- Building a container image involves writing a Dockerfile that defines the application and its dependencies, then using docker build to create the image.
- Running a container image is done using the docker run command, which creates and starts the container instance.
- Docker objects include images, containers, volumes, networks, and services, which are essential for managing containerized applications.
- Docker architecture follows a client-server model where the Docker client interacts with the Docker daemon to build, run, and manage containers.
- Advantages of containers include:
- Faster deployment
- Improved scalability
- Better resource utilization
- Consistent application performance across environments
Container Basics
Term | Definition |
---|---|
Agile | is an iterative approach to project management and software development that helps teams deliver value to their customers faster and with fewer issues. |
Client-server architecture | is a distributed application structure that partitions tasks or workloads between the providers of a resource or service, called servers, and service requesters, called clients. |
A container | powered by the containerization engine, is a standard unit of software that encapsulates the application code, runtime, system tools, system libraries, and settings necessary for programmers to efficiently build, ship and run applications. |
Container Registry | Used for the storage and distribution of named container images. While many features can be built on top of a registry, its most basic functions are to store images and retrieve them. |
CI/CD pipelines | A continuous integration and continuous deployment (CI/CD) pipeline is a series of steps that must be performed in order to deliver a new version of software. CI/CD pipelines are a practice focused on improving software delivery throughout the software development life cycle via automation. |
Cloud native | A cloud-native application is a program that is designed for a cloud computing architecture. These applications are run and hosted in the cloud and are designed to capitalize on the inherent characteristics of a cloud computing software delivery model. |
Daemon-less | A container runtime that does not run any specific program (daemon) to create objects, such as images, containers, networks, and volumes. |
DevOps | is a set of practices, tools, and a cultural philosophy that automate and integrate the processes between software development and IT teams. |
Docker | An open container platform for developing, shipping and running applications in containers. |
A Dockerfile | is a text document that contains all the commands you would normally execute manually in order to build a Docker image. Docker can build images automatically by reading the instructions from a Dockerfile. |
Docker client | is the primary way that many Docker users interact with Docker. When you use commands such as docker run, the client sends these commands to dockerd, which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon. |
Docker Command Line Interface (CLI) | The Docker client provides a command line interface (CLI) that allows you to issue build, run, and stop application commands to a Docker daemon. |
Docker daemon (dockerd) | creates and manages Docker objects, such as images, containers, networks, and volumes. |
Docker Hub | is the world’s easiest way to create, manage, and deliver your team’s container applications. |
Docker localhost | Docker provides a host network which lets containers share your host’s networking stack. This approach means that a localhost in a container resolves to the physical host, instead of the container itself. |
Docker remote host | A remote Docker host is a machine, inside or outside our local network which is running a Docker Engine and has ports exposed for querying the Engine API. |
Docker networks | help isolate container communications. |
Docker plugins | such as a storage plugin, provides the ability to connect external storage platforms. |
Docker storage | uses volumes and bind mounts to persist data even after a running container is stopped. |
LXC | LinuX Containers is a OS-level virtualization technology that allows creation and running of multiple isolated Linux virtual environments (VE) on a single control host. |
IBM Cloud Container Registry | stores and distributes container images in a fully managed private registry. |
Image | An immutable file that contains the source code, libraries, and dependencies that are necessary for an application to run. Images are templates or blueprints for a container. |
Immutability | Images are read-only; if you change an image, you create a new image. |
Microservices | are a cloud-native architectural approach in which a single application contains many loosely coupled and independently deployable smaller components or services. |
Namespace | A Linux namespace is a Linux kernel feature that isolates and virtualizes system resources. Processes which are restricted to a namespace can only interact with resources or processes that are part of the same namespace. Namespaces are an important part of Docker’s isolation model. Namespaces exist for each type of resource, including networking, storage, processes, hostname control and others. |
Operating System Virtualization | OS-level virtualization is an operating system paradigm in which the kernel allows the existence of multiple isolated user space instances, called containers, zones, virtual private servers, partitions, virtual environments, virtual kernels, or jails. |
Private Registry | Restricts access to images so that only authorized users can view and use them. |
REST API | A REST API (also known as RESTful API) is an application programming interface (API or web API) that conforms to the constraints of REST architectural style and allows for interaction with RESTful web services. |
Registry | is a hosted service containing repositories of images which responds to the Registry API. |
Repository | is a set of Docker images. A repository can be shared by pushing it to a registry server. The different images in the repository can be labelled using tags. |
Server Virtualization | Server virtualization is the process of dividing a physical server into multiple unique and isolated virtual servers by means of a software application. Each virtual server can run its own operating systems independently. |
Serverless | is a cloud-native development model that allows developers to build and run applications without having to manage servers. |
Tag | A tag is a label applied to a Docker image in a repository. Tags are how various images in a repository are distinguished from each other. |
4. DevOps & CI/CD
Terms and Definitions
Terms | Definitions |
---|---|
Agile methodology | A set of techniques, values, and principles designed to guide and improve how software development teams work together to deliver new applications and updates |
Agile principle | The guiding principles that help teams implement and execute with Agility. |
Automation | The technique, method, or system of operating or controlling a process using highly automatic means, such as electronic devices, with minimal human intervention |
Application Programming Interface (API) | A set of rules that describe how computers or applications communicate with one another. |
Back-end developer | Back-end developers are the experts who build and maintain the mechanisms that process data and perform actions on websites. |
Container | A type of software that packages code so that it can be transferred quickly from one computing environment to another. |
Cluster | A collection of servers and other resources that work together to provide high availability, load balancing, and parallel processing |
Debugging | The process of locating and fixing errors or bugs in software source code; It detects and eliminates computer hardware and software errors. |
Database | A well-organized group of data or information saved electronically in a computer system. It operates using a database management system (DBMS). |
Framework | A layered structure that shows the type of programs developers can or should build and how they would interrelate; Some computer system frameworks also include programs, define programming interfaces, or provide programming tools for use with the frameworks. |
Integration testing | It is the phase in which individual software modules are combined and tested as a group. |
Kubernetes | It is open-source software that deploys, scales, and manages containerized applications anywhere. |
Microservices | An architectural style that structures a single application as a collection of small services; Each service operates independently. The services communicate with clients, and frequently with one another, via lightweight protocols, most commonly messaging or HTTP. |
Open-source software | Computer software distributed under a license that allows users to use, study, change, and distribute the software and its source code to anyone and for any purpose. |
Parameter | Passes a named variable into a function. The function uses parameter variables to import arguments. |
Pipeline | A set of data processing elements connected in series, where the output of one element is the input of the next one |
Plug-in | It is a type of software installed to enhance the capabilities of a program. |
Pull requests | A method for a developer to notify team members that a feature is complete; Once a pull request opens, they can discuss and review the potential changes and add follow-up commits before merging the changes into the base branch. |
Repository | A centralized digital storage system that developers use to make and manage changes to the source code of an application. |
Syntax | The rules govern the structure of a programming language’s symbols, punctuation, and words. The meaning or semantics of a language are nearly impossible to understand without syntax. |
Server | A computer program or device performs a service for another computer program and its user or client; The physical computer that a server program runs is a server in a data center. |
Test case | Specifies the inputs, testing procedure, execution conditions, and expected results for running a single test to achieve a specific software testing goal. |
Version control systems | Software tools that help software teams manage changes to source code over time. |
YAML file | It is a human-readable data serialization language often used for writing configuration files. |
5.Agile&scrum
- Agile development is an iterative approach to software development that emphasizes flexibility, collaboration, and customer feedback.
- Scrum is a framework within Agile that organizes work into fixed-length iterations called sprints.
- Agile principles focus on customer collaboration, responding to change, delivering working software frequently, and valuing individuals and interactions over processes and tools.
- Agile roles include the Product Owner (defines the product vision), Scrum Master (facilitates the process), and Development Team (delivers the product increment).
- User stories are short, simple descriptions of a feature from the user’s perspective, focusing on the value it provides.
- Story points are units used to estimate the effort required to complete a user story based on complexity and risk.
- The product backlog is a prioritized list of features, bug fixes, and tasks that guide development.
- Sprints are time-boxed iterations where teams work on completing backlog items.
- Stages of a sprint include:
- Sprint planning
- Sprint review
- Sprint retrospective
Glossary: Agile & Scrum
Term | Definition |
---|---|
Agile | An iterative approach to project management and software development. A set of techniques, values, and principles intended to guide and improve the collaboration of software development teams in delivering new applications and updates. |
Agile Manifesto | A document that outlines the key values and principles underlying the Agile philosophy to assist development teams in working more efficiently and sustainably. |
Autonomy | The ability of teams to decide how to do their work, in what order, and by whom. |
Fibonacci sequence | Each number in this sequence is the sum of the two preceding numbers. The Fibonacci sequence looks like this: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, and so on. The Fibonacci agile estimation estimates the effort of agile development tasks using this sequence as the scoring scale. |
Gantt chart | A project management tool used to track sprint progress, determine which tasks to remove from a sprint, track change requests from stakeholders, organize work, and track time spent on each task. |
GitHub | A web-based platform used for version control and collaborative software development offering developers robust platforms for hosting their repositories. |
Iterative | You repeat a series of steps to improve your production output with each cycle. |
Kanban board | An agile project management tool that manages work at a personal and organizational level. Its purpose is to improve the flow of the work in progress. |
Lean manufacturing | A methodology that focuses on reducing waste in manufacturing systems while increasing productivity. |
Monolithic | A single-tiered software application that combines user and data access codes into a single program. |
Metric | A method for quantitative analysis in computers used for assessing, comparing, and tracking its performance or production. |
Playback meeting | An opportunity to bring stakeholders into the loop and reflect as a group; They provide a safe environment for people to share their stories and provide feedback on their work. Holding Playbacks keeps teams and stakeholders aligned and in sync with the ever-changing situation of a project. |
Scrum | A management framework that provides a method of completing work in chunks over a specific time while conducting continuous experiments to learn and improve things. |
Scrum master | A professional who guides a team through an Agile project management process; To ensure a successful outcome, a Scrum Master facilitates all communication and collaboration between leadership and team members. |
Sprint | A one-to-four-week time-boxed event in which the Scrum team focuses solely on a sprint goal. |
Sprint backlog | A list of work items a team intends to complete during a project sprint. These items are usually taken from the product backlog during the sprint planning meeting. |
Sprint Retrospective | A dedicated time for the Scrum team to reflect on what went well, what didn’t, and how to improve future sprints. |
Syntax | The rules that govern the structure of a programming language’s symbols, punctuation, and words. The meaning or semantics of a language are nearly impossible to understand without syntax. |
User story | The smallest unit of work. It’s a goal, not a feature, expressed from the perspective of a software user. A user story is an informal, general explanation of a software feature written from the end user’s or customer’s point of view. |
Waterfall methodology | A sequential development process flows like a waterfall through all project phases, such as analysis, design, development, and testing, with each phase completely wrapping up before moving on to the next. |
Zen Hub | The only project management tool natively integrated into the GitHub user interface. Software teams use it to plan, track, and prioritize their work. |
6.PM
HR QA
- What motivated you to apply for this job?
- What attracted you to our job listing?
- Why did you leave your last job?
- What is your ideal working environment?
- What do you know about our company’s product or services?
- What are your expectations about salary and other compensation?
Team leader
- Tell me about a few of the first things you would do in this role.
- Give a few examples of best practices in data analysis as you understand them.
- What’s a data analysis project you would want to work on at our company?
- Tell me about a time you experienced conflict with a colleague and how you resolved it.
- Tell me about a time when your project failed. What did you do and what did you learn?
- Do you prefer to work closely with a team or mostly by yourself?
- How are you motivated?
- How do you start learning about a topic you don’t know about yet?
technical QA
- What coding languages do you know?
- What are some of your favorite data-related tools?
- How do you begin working on a problem you’ve been assigned?
- What do you do when you reach something you don’t understand?
- How do you stay on schedule and manage your time?
- How do you prepare for a presentation?
Solving Coding Challenges –4-step framework
- Understand and appreciate the problem statement.
- Did you fully understand the problem?
- Do you know what inputs are required?
- Do you know what the desirable output is?
- Does it give you enough information?
- Break down the problem into functions.
- Define the problem statement into various functions or modules.
- Does each module solve a specific subset of the problem?
- Can the functions/modules be reused?
- Apply common patterns or language constructs that you already know for the problem.
- Do you see a common pattern that you can use?
- Do you see a loop to use or a language function that might make things easy?
- Pseudocode your proposed solution.
- Start coding.
- This is the best place to start really coding.
- Ignore difficult parts for now – begin by solving a simpler sub-part.
- Run the code as you work and let errors show you where you can correct the code.
- Start with input gathering, then processing logic, and then output.
- Compare your solution for its accuracy and completeness relative to the problem statement.
- If time permits, optimize he solution by looking at various alternatives to shorten the code or increase its efficiency.
support a salary negotiation are:
- Commute and relocation expenses.
- Having a university degree that may not have been required to apply but provides an academic preparation that will contribute to exceeding job performance expectations.
- Possessing a skillset or certifications that required extensive or costly training, especially if they were stated as preferred qualifications in the job listing.
Check List
- Consider your professional options and decide what type of role to pursue
- Create your resume
- Gather and publish your portfolio to GitHub
- Compose and memorize your elevator pitch
- Draft your basic cover letter
- Create or update your LinkedIn profile
- Line up professional references and get their contact information
- Compose and practice answers for common interview questions
- Write questions you would like to ask interviewers
- Research local meetups and professional organizations for networking
- Ask friends to help you rehearse interviews and critique materials