먼저 제가 언급하고 있는 PHP 엔지니어링 질문에 대해 분명히 말씀드리겠습니다. 저는 졸업 후 주로 PHP를 사용하여 WEB 시스템을 개발했으며 다른 언어로 작업한 적이 없습니다. 저는 3~4년 정도의 업무 경험을 가지고 있습니다. 저는 기본적으로 일반 WEB 시스템(백만 수준의 액세스, 1,000 수준 미만의 데이터 또는 비즈니스 로직이 특별히 복잡하지 않은 경우)을 문제 없이 개발하는 데 능숙합니다. 그러나 그들은 다음과 같이 지적할 것입니다:
PHP 이외의 다른 언어를 사용하지 말고, 쉘 스크립트를 클릭할 수도 있습니다.
PHP에 대한 숙달 부족(라이브러리를 제외하고 PHP 매뉴얼을 많이 읽지 않음)
지식이 부족함(요구에 직면하여 PHP 및 mysql을 사용하는 것 외에 다른 솔루션을 알지 못함)
PHP 코드에 집중
이러한 PHP 사용자는 고성능, 높은 동시 처리 및 대량의 데이터가 필요한 프로젝트 또는 비즈니스 로직에 직면해 있습니다(시스템은 비즈니스 문제를 해결해야 함). 여러 분야에서)), 아이디어가 부족합니다. 문제의 본질을 분석하지 못하고 기술적 판단력이 부족하여 문제에 대한 일시적인 해결책을 빠르게 찾을 수 있지만, 끊임없는 일시적인 해결책에 시스템과 자체가 단계적으로 붕괴되는 경우가 많습니다. 그렇다면 어떻게 자신을 향상시킬 수 있나요? 더 어려운 시스템은 어떻게 도전할 수 있나요?
더 높은 도전은 어디에 있나요? 내 경험을 바탕으로 모든 사람이 지각적으로 이해할 수 있도록 몇 가지 구체적인 과제를 나열하겠습니다.
고성능 시스템의 과제는 무엇인가요?
웹 서버를 선택하는 방법은 무엇인가요? fast-cgi 모드를 사용해야 하나요?
역방향 프록시 서비스를 사용해야 하나요? 전체 메모리 캐시 또는 하드 디스크 캐시를 선택하시겠습니까?
로드 밸런싱이 필요합니까? 애플리케이션 계층을 기반으로 합니까, 아니면 네트워크 계층을 기반으로 합니까? 높은 신뢰성을 보장하는 방법은 무엇입니까?
최적화 도구를 사용한 후 PHP 코드의 성능은 어떻습니까? 성능 병목 현상은 어디에 있습니까? C의 확장으로 작성해야 합니까?
사용자 접속의 특징은 읽기인가요, 쓰기인가요? 읽기-쓰기 분리가 필요합니까?
데이터는 어떻게 저장되나요? 쓰기 속도와 읽기 속도는 어떻습니까? 데이터가 증가함에 따라 액세스 속도는 어떻게 변합니까?
캐시는 어떻게 사용하나요? 실패를 어떻게 고려하는가? 데이터 일관성을 보장하는 방법은 무엇입니까?
복잡도가 높은 시스템의 과제는 무엇인가요?
해당 사업이 어떤 분야에 해당하는지 알 수 있나요? 하나인가요, 여러 개인가요?
비즈니스를 합리적으로 추상화하고 적은 비용으로 비즈니스 규칙의 변경을 구현할 수 있나요?
데이터의 일관성과 보안이 보장될 수 있나요?
객체지향 분석과 설계 방법을 터득하셨나요?
제가 제시한 질문에 '예'로 답할 수 있다면 기본적으로 기술적으로 건축가가 될 수 있다고 생각합니다. 아직 대답을 할 수 없다면 다음 방향으로 강화해야 합니다.
그래도 대답할 수 없다면 다음 방향으로 강화해야 합니다.
사용하는 기술의 원리와 그 이면의 메커니즘을 분석하여 기술적 판단력을 향상할 수 있습니다. 기술 솔루션 선택의 정확성을 높이세요.
대학 시절 중요한 지식, 운영 체제 원리, 데이터 구조 및 알고리즘을 배우세요. 과거에는 시험을 위해 공부했지만 이제는 스스로 공부하고 그 이유를 스스로에게 알려야 합니다.
이미 대학에서 C 언어를 배웠더라도 다시 시작해 보세요. 이는 PHP 확장을 작성해야 할 수도 있을 뿐만 아니라 C 애플리케이션에는 항상 성능, 메모리 제어, 변수 수명 주기, 데이터 구조 및 알고리즘에 관심을 갖는 환경이 있기 때문입니다.
복잡한 문제를 해결하는 효과적인 방법인 객체지향 분석과 설계를 배워보세요. 추상화를 배우십시오. 이것이 복잡한 문제를 해결하는 유일한 방법입니다.
"그렇게 많은 걸 어떻게 배우나요? 배우는 데 시간이 얼마나 걸리나요?" 열심히 일하고 좋은 계획을 세운다면 아마 1~2년은 걸릴 것 같습니다.
어떻게 효과적으로 공부하느냐가 큰 문제입니다. 약간의 연습이 있지만 매우 분산되어 요약하기가 어렵습니다. 어젯밤 잠자리에 들기 전 문득 '아키텍처 중심, 유스 케이스 중심, 반복 개발'이라는 RUP의 핵심이 떠올랐다. 또는 메커니즘, 작업 중심, 반복 학습.
좀 추상적입니다. 학습 방법을 설명하기 위해 예를 들어 보겠습니다. 목적: 처리 성능을 향상시키는 방법을 알아봅니다.
반복 가능한 작업: IP로 위치를 찾습니다.
이것은 웹 애플리케이션의 일반적인 작업입니다. IP 데이터베이스에는 약 100,000행의 레코드가 있습니다.
첫 번째 반복: 성능을 고려하지 않고 기능을 구현합니다(PHP를 통해 구현). KEY(IP)를 통해서는 직접 영역을 검색할 수 없기 때문에 데이터에 직접 넣거나 연관배열을 통해서 하는 등의 간단한 방법은 작동하지 않습니다. 데이터를 먼저 정렬한 다음 검색하는 것이 아이디어입니다.
IP로 검색하는 방법은 무엇인가요? 정렬된 데이터의 경우 이진 검색이 가장 빠릅니다.
정렬하는 방법? 물론 라이브러리 함수인 sort를 사용해도 되지만, 배우는 중이므로 직접 퀵소트를 구현해 보는 것이 더 좋습니다.
학습 목표: 정렬 알고리즘, 검색 알고리즘.
PHPer는 일반적으로 데이터 구조와 알고리즘에 대한 기초가 부족합니다. 그는 일반적으로 이 분야에 대한 작업이 없고 스스로 공부하지 않기 때문에 이 분야에 대한 지식이 부족합니다. 그러나 프로그래밍으로 해결되는 문제는 궁극적으로 데이터 구조와 이 데이터 구조에서 작동하는 알고리즘으로 귀결됩니다. 자료구조 알고리즘을 항상 염두에 두면 문제가 발생했을 때 그 내부 구조를 명확하게 이해할 수 있고, 해결책도 자연스럽게 떠오르게 됩니다.
두 번째 반복: 데이터 로드 및 정렬을 최적화합니다. 첫 번째 단계를 수행하면 매번 데이터를 로드하고 정렬해야 하기 때문에 기본적으로 사용할 수 없으며 이는 시간이 너무 많이 걸립니다. 해결책은 데이터를 한 번 로드하고 정렬한 다음 각 PHP 프로세스가 액세스할 수 있는 위치에 배치하는 것입니다.
멤캐시에 넣어보세요. 누구에게나 쉬운 질문입니다. 실제로 Memcache에는 더 많은 네트워크 작업이 있으므로 공유 메모리(EA 및 기타 가속기에서 지원)에 저장하는 것이 더 빠른 방법입니다. 데이터가 전체적으로 공유 메모리에 저장되나요? 성능을 테스트하는 방법(xdebug)을 분석하는 방법을 알아봅니다.
학습 목표: PHP 구현 구조가 성능에 미치는 영향을 감지하고 찾아 최적화하는 방법입니다.
세 번째 반복: PHP 확장 기능 작성. 여전히 성능이 향상되지 않고 C/C++의 세계로 들어가야 합니다. 하지만 앞으로는 PHPer뿐만 아니라 서버 측의 만능 엔지니어가 될 것입니다. C/C++를 한번도 해본 적이 없는 학생들을 위한 도전입니다. 여기서는 단순히 C/C++ 학습 방법을 설명할 수 없습니다.
학습 목표: C/C++ 학습, PHP 확장 작성
결정 방법 필요성 학습의 메커니즘과 원리는 어떻습니까? 운전 학습 과제를 찾는 방법은 무엇입니까? 위의 두 가지 질문에 어떻게 답해야 할까요?
이 기술의 포지셔닝에서 배워야 할 핵심 사항, 즉 어떻게 수행하는지(메커니즘)와 왜 수행할 수 있는지(모델 또는 원리)를 알아보세요.
가장 많이 나열하세요. 이 기술 응용 프로그램의 일반적인 측면은 학습 과제로서 단순한 것부터 어려운 것까지 수행됩니다.
Javascript를 배워야 한다면 HTML과 CSS에 대한 지각적 지식이 어느 정도 있습니다. 우선, JS는 웹페이지의 동적 상호작용을 주로 해결하는 WEB 분야의 동적 언어라는 것을 배웠습니다. 그렇다면 제가 배우고 싶은 핵심 포인트는 다음과 같습니다.
JS가 HTML과 상호작용하는 방식(메커니즘)
JS의 동적 특성은 무엇이며, 다른 동적 언어와 어떻게 다른가요? (언어 모델)
완전히 독학이라면 학습해야 할 핵심 포인트(메커니즘, 모델, 원리)를 찾아 학습 과제를 설정하는 것은 참으로 쉽지 않습니다. 경험이 풍부한 사람을 찾아 지도해 주거나 학습 팀을 추가하면 학습 속도가 실제로 크게 향상될 것입니다.