C/C++ 백엔드 개발 학습 루트 요약(인턴십 학습 경험 공유 포함)

안녕하세요 여러분, 9월인데 업무나 인턴십 일정이 어떻게 되어 가고 있는지 모르겠습니다. 암튼 가본 사람으로서 라이언은 각종 게시판에서만 볼 수 있는 안타까움이 가득 하고 , 은근히 충격을 받고 지금 젊은이들이 섞이기 쉽지 않은 느낌~

그런 다음 Lion은 최근 백그라운드에서 C/C++ 백엔드를 배우는 방법에 대한 많은 초대와 답변을 받았습니다. 다음은 C/C++ 백엔드 개발 학습 경로 및 인턴십 경험 공유에 대한 또 다른 요약입니다.


Zhihu 외에도 특정 DN이 있으며 특정 웹 사이트의 너무 많은 독자가 저에게 다음과 같은 질문을했습니다. 초보자는 어떻게 배우나요? 취업하려면 무엇을 배워야 하나요? 어떤 학습 자료를 추천하시나요?


사실 인터넷에 배움의 길 등 많은 글들이 있지만 많이 읽어봤고, 대부분은 코스와 지식 포인트가 많이 나열되어 있지만 타임라인 같은 것이 부족해서 어떤 리듬으로 나아가야 하는지 알려주고 , 따라서 이 중요한 정보를 추가하기를 바랍니다.


이 학습 루트에는 초보자부터 실무까지 단계별로 학습해야 하는 내용, 세부 지식 포인트, 참고할 수 있는 도서 목록, 전자책 자료 등이 포함되어 있습니다. C/C++ 백엔드 개발을 보여드리겠습니다. 마지막 문단에는 제 동생의 인턴쉽과 학습 경험이 포함되어 있습니다 . 차를 시작하세요~
로드맵은
그림으로 시작합니다.일반적인 이해부터 시작하겠습니다.

이 사진은 약간 큽니다. WeChat은 사진을 너무 심하게 압축하기 때문에 고화질 버전을 원하는 경우 Lion: C++ 에 개인 메시지를 보내 자동으로 받을 수 있습니다.

기본적인 부분은 어디에서나 배울 수 있으므로 여기서는 너무 자세히 설명하지 않겠습니다; 경력을 변경하거나 C/C++ 백엔드로 전환하려는 경우 Lion은 더 자세한 기본 공유도 작성합니다. 10. 판으로 학습 경로를 진행합니다.

1. 정련의 초석

1. 데이터 구조 및 알고리즘

  • 어디에나 있는 레드-블랙 트리
  • 디스크 스토리지 체인 B-트리 및 B+ 트리
  • Hash 및 BloomFilter, 대량 데이터 중복 제거를 위한 비트맵

2. 디자인 패턴

  • 창조적인 디자인 패턴
  • 구조 디자인 패턴

3. C++의 새로운 기능

  • stl 컨테이너, 스마트 포인터, 정규 표현식
  • 스레드, 코루틴, 원자 연산, 람다 표현식의 새로운 기능

4.리눅스 프로젝트 관리

  • 메이크파일/cmake/구성
  • 분산 버전 제어 git
  • Linux 시스템 런타임 매개변수 명령

2. 고성능 네트워크 설계

1. 네트워크 프로그래밍

  • 네트워크 IO 및 선택, 투표, epoll
  • 리액터의 원리와 구현
  • http/https 서버 구현
  • websocket 프로토콜 및 서버 구현

2. 네트워크 원리

  • 백만 서버 동시 구현
  • redis, memcached, nginx 네트워크 구성 요소
  • Posix API 및 네트워크 프로토콜 스택
  • UDP의 신뢰할 수 있는 전송 프로토콜 QUIC

3. 코루틴 프레임워크 NtyCo 구현

  • 코루틴 설계 원리 및 어셈블리 구현
  • 코루틴 스케줄러 구현 및 성능 테스트

4. 사용자 모드 프로토콜 스택 NtyTcp 구현

  • 사용자 모드 프로토콜 스택 설계 및 구현
  • tcp/ip 타이머 및 슬라이딩 윈도우
  • 손으로 epoll 설계 및 구현

5. 고성능 비동기 io 메커니즘 io_uring

  • epoll과 유사한 io_uring
  • io_uring 사용 시나리오

3. 기본 부품 설계

1. 풀 구성 요소

  • 필기 스레드 풀 및 성능 분석
  • Memory Pool 구현 및 시나리오 분석
  • 비동기 요청 풀 구현
  • mysql 연결 풀 구현

2. 고성능 부품

  • 원자 연산 CAS 및 잠금 구현
  • Lock-free 메시지 큐는 RingBuffer를 구현합니다.
  • 타이머 체계 레드-블랙 트리, 타임 휠, 최소 힙
  • 필기 교착 상태 감지 구성 요소
  • 필기 메모리 누수 감지 구성 요소
  • 손으로 분산 잠금 구현

3. 오픈 소스 컴포넌트

  • Libevent/Libev 프레임워크 실제 전투의 구덩이
  • 비동기 로그 체계 log4cpp
  • 애플리케이션 계층 프로토콜 설계 ProtoBuf/Thrift

4. 미들웨어 개발

1.레디스

  • Redis 관련 명령어에 대한 자세한 설명 및 원리
  • Redis 프로토콜 및 비동기 모드
  • 저장 원리 및 데이터 모델
  • 마스터-슬레이브 동기화 및 개체 모델

2.MySQL

  • SQL 문, 인덱스, 뷰, 저장 프로시저, 트리거
  • MySQL 인덱스 원칙 및 SQL 최적화
  • MySQL 트랜잭션 원리 분석
  • MySQL 캐싱 전략

3. 카프카

  • Kafka 사용 시나리오 및 설계 원칙
  • 카프카 스토리지 메커니즘

4.gRPC

  • gRPC의 내부 구성 요소 연결
  • http2 기반 gRPC 통신 프로토콜

5.nginx

  • Nginx 리버스 프록시 및 시스템 매개변수 구성 conf 원칙
  • nginx 필터 모듈 구현
  • nginx 핸들러 모듈 구현

5. 오픈소스 프레임워크

1.스카이넷

  • 스카이넷 설계 원리
  • Sky Net 네트워크 계층 캡슐화 및 lua/c 인터페이스 프로그래밍
  • 스카이넷의 중요 구성요소와 티어오프 게임 프로젝트

2. 분산 API 게이트웨이

  • 고성능 웹 게이트웨이 Openresty
  • Kong 동적 로드 밸런싱 및 서비스 검색

3. DPDK

  • DPDK 환경 및 testpmd/I3fwd/skeletion
  • DPDK의 사용자 모드 프로토콜 스택
  • 수천만 트래픽의 동시 DNS 처리
  • 고성능 데이터 처리 프레임워크 vpp
  • DPDK의 가상 스위치 프레임워크 OVS

4. 고성능 컴퓨팅 CUDA

  • GPU 병렬 컴퓨팅 cuda의 개발 과정
  • 오디오 및 비디오 코덱의 병렬 컴퓨팅

6. 클라우드 네이티브

1. 도커

  • Docker 환경에서 커널 기능
  • Docker 컨테이너 관리 및 이미지 작업
  • 도커 네트워크 관리
  • Docker 클라우드 및 컨테이너 오케스트레이션

2.쿠버네티스

  • K8S 환경 구축
  • Pod 및 서비스 사용
  • K8S 클러스터 관리
  • K8S 2차 개발 및 K8S API

일곱, 성능 분석

1. 성능 및 테스트 도구

  • 테스트 프레임워크 gtest 및 메모리 누수 감지
  • 성능 도구 및 성능 분석
  • 화염 그래프의 생성 원리 및 구축 방법

2. 관측 기술 bpf 및 ebpf

  • 커널 bpf의 구현 원리
  • 커널 함수에 대한 bpf 관찰

3. 커널 소스 코드 메커니즘

  • 프로세스 스케줄링 메커니즘
  • 커널 메모리 관리 작업 메커니즘
  • 네트워크 카드 NIC와 네트워크 프로토콜 스택 간의 관계
  • 파일 시스템 구성 요소

8. 분산 아키텍처

1.록스DB

  • kv 스토리지 RocksDB의 다양한 사용 시나리오
  • RocksDB 특수 작업

2. 클라우드 네이티브 분산 데이터베이스 TiDB

  • TiDB 스토리지 엔진의 원리
  • TiDB 클러스터 솔루션 및 복제 원리

3. 분산 서비스

  • 커널 수준에서 지원되는 분산 스토리지 Ceph
  • 등록 서비스 센터 등

9. 프로젝트 실전

1. 이미지 베드 공유 클라우드 스토리지

  • fastdfs 아키텍처 분석 및 구성
  • fastdfs 저장 원리
  • 분산 fastdfs 스토리지 클러스터 배포
  • 고부하 nginx/fastcgi
  • 파일 전송 및 인터페이스 설계
  • 클라우드 공용 네트워크의 제품 출시/테스트 사례

2. 마이크로서비스 인스턴트 메시징

  • IM 인스턴트 메시징 프로젝트 프레임워크 분석 및 배포
  • IM 메시징 서버/파일 전송 서버
  • 메시지 서버/라우팅 서버
  • 데이터베이스 프록시 서버 설계
  • 파일 서버 및 도커 배포
  • 클라우드 공중망/공중망 테스트 라인에 제품 출시

10. 참고도서 지원

1. MySQL: "고성능 MySQL 버전 3"

2. Nginx: "Nginx에 대한 심층적인 이해: 모듈 개발 및 아키텍처 분석(2판)"(타오 후이)

3. Redis: Redis 설계 및 구현(Huang Jianhong)

4. Linux 커널: "Linux 커널 아키텍처에 대한 심도 있는 이해"(Guo Xu 번역)

5. 데이터 구조 및 알고리즘: 알고리즘 소개(3판)

6. 성능 분석: "시스템, 기업 및 클라우드 컴퓨팅에 대한 최고의 성능 통찰력" 8

7. MongoDB: "MongoDB에 대한 최종 가이드"

8. Ceph: "Ceph 분산 스토리지 학습 가이드"(Ceph 중국 커뮤니티)

9.Docker: "Docker 컨테이너 및 컨테이너 클라우드(2판)".

10.TCP/IP: "Tcp/1p 상세 설명 볼륨 1 볼륨 2 볼륨 3" 8

11. 리눅스 시스템 프로그래밍: "유닉스 환경에서의 고급 프로그래밍"

12. 컴퓨터: "컴퓨터 시스템에 대한 심층적인 이해"

13. DPDK: "간단히 말해서 DPDK" 8

14.k8s: Gong Zheng 등이 편집한 "Kubernates Definitive Guide"

15.bpf: "Linux 시스템 및 애플리케이션 성능에 대한 BPF 최고의 통찰력"


요약하다

위 내용은 C/C++ 백엔드 개발을 하는 것입니다.초보자부터 실무자까지 배워야 할 내용을 정리했습니다.포괄적이지 않을 수 있지만 위 내용을 마스터하면 대부분의 직책의 요구 사항을 충족하기에 충분합니다.

학습 경로 외에도 이 과정에서 학습한 많은 학습 자료를 편집하여 위의 학습 경로와 함께 사용했습니다.


엔지니어에게 적합

1. 다년간 비즈니스 개발에 종사해 왔으며 기본 원칙에 대한 깊은 이해가 없는 현장 엔지니어

2. 임베디드 개발에 종사하고 있으며 인터넷 개발로 편입하고자 하는 현장 엔지니어

3. Qt/MFC 등 데스크톱 개발에 종사하는 현직 엔지니어로 수년간 급여가 많이 오르지 않은 사람

4. 비개발 직위(알고리즘 직위, 운영 및 유지보수 직위, 테스트 직위)에 종사하고 있으며 백그라운드 개발 직위로 이동하고자 하는 현장 엔지니어

5. 직장에서 기술적 문제가 없고 직장에서 새로운 기술에 접근할 수 없는 현장 엔지니어

6. 스스로 공부하고 배우는 것이 느리고 지식 체계를 체계적으로 구축할 수 없는 개발자

7. 기술용어는 많이 알고 있으나 심도 있는 문의를 통해 이해가 되지 않는 엔지니어

8. 컴퓨터 관련 전공자로서 대규모 공장진출을 희망하는 학생(학사 이상, c/c 기초 소지자)


다음은 학생의 인턴십 경험의 예입니다. (나는 그와 좋은 관계가 있습니다. 모든 것을 데려가십시오) 인턴십 인터뷰의 기본 상황, 인터뷰에 참여하는 회사 : CVTE , Sohu , Oriental Fortune , Meituan , Tencent , Bytedance , 알리바바

CVTE : 필기시험-기술1-기술2시간-제안 (1차면접, 잘됐다고 함)

알리바바 사전 승인 : 기술적인 부분 1-hang

Dongfang Wealth : 기술 1-인사-전화 끊기

ByteDance : Technical 1-Technical 2-Technical 3-hr-offer (Byte 3의 면접관은 인터뷰에 거의 보름이 걸렸습니다. 당시 정신력이 매우 나빴고 학생들은 모두 큰 공장에서 제안을 받았습니다. )

바이두 : 테크니컬 1-테크니컬 2-테크니컬 3 (인터뷰는 오후에 끝냈는데 오전 내내 놀다가 바이두 에서 2통 안오더니 사라짐)

텐센트 : 테크니컬 1-테크니컬 2-테크니컬 3시간

나중에 다른 회사는 서면 테스트 인터뷰 초대를 거부했습니다.

그런 다음 그의 학습 경험, 원래 단어가 있습니다.

2020년 3월-8월: 전염병이 집에 있었던 3월에 C++를 배우기 위해 준비하기 시작했습니다. 집에서의 효율성이 극도로 낮았기 때문에 저는 3일 동안 놀고 하루를 배웠고 7월과 8월에는 C++를 사용하고 손 연습을 위한 작은 MFC 프로젝트를 작성했습니다.

2020년 9월: 상반기에는 컴퓨터 네트워크에 대해 배우고, 하반기에는 컴퓨터 시스템을 이해하는 방법을 배웁니다(물론 첫 번째 패스에서는 일반적인 개념만 이해합니다).

2020년 10월-12월: 다중 스레드 서버 프로젝트(즉, 적응 muduo)를 작성하고 이 과정에서 네트워크 프로그래밍, 운영 체제 및 C++에 대한 다양한 지식을 배웁니다(C++는 이전에 피상적으로만 배웠습니다).

2021년 1월-2월: 데이터 구조 및 알고리즘을 배우고 질문 작성 , 200개 미만 질문. (겨울방학에 반달동안 집에서 놀았음)

2021년 3월: Haitou 모델을 시작하고 먼저 소규모 회사에 투자합니다. 기본적으로 모두 이력서가 있고 마지막으로 몇 개의 소규모 회사에서 인터뷰 기회를 제공하고 인터뷰하면서 검토합니다. 저는 3월 중순부터 대기업 투자를 시작했습니다. 메이투안을 제외하고 Byte, Tencent , Baidu 와의 인터뷰는 순조롭게 진행되었습니다. 저는 실패하지 않았습니다. Qingming 이전에 Byte로부터 구두 제안을 받았습니다.

2021년 4월: Byte의 공식 제안 이메일.

(솔직히 늦게 자는 걸 좋아해서 공부 효율이 그다지 높지 않다.)

ps: 그가 늦게 자고 매일 아침 일어나지 못한다는 것을 알았습니다...


발문


전직이든 인턴십이든 자격을 갖춘 C++ 개발자는 일자리를 찾지 못하는 것을 두려워하지 않습니다. 비용은 더 낮을 것입니다. 다른 것보다 훨씬 작습니다.


나는 대학에서 1년 동안 C 언어와 VB를, 3년 동안 C#을 썼고, 대학원생 때 1년 동안 Python을, 2년 동안 C++를 썼습니다. .


내가 가장 좋아하는 언어가 무엇인지 묻고 싶습니까?
확실히 C++임에는 의심의 여지가 없습니다!
그 엄격함처럼 이유가 없습니다!

C++는 세계 1위! ! !


나무를 심기에 가장 좋은 시기는 10년 전이고, 두 번째는 지금입니다 .

수년간의 열심히 공부하고 일한 경험에 실망하지 말고 열심히 일하고 잘 살며 관련 정보나 학습 로드맵을 원하면 Lion에게 개인적으로 메시지를 보낼 수 있습니다. 그러면 세상의 모든 사람들이 기뻐할 것입니다! ! !

안녕~

추천

출처blog.csdn.net/m0_58687318/article/details/126667506