얼마 전 CSDN의 초대를 받아 Java 지식 베이스의 내용을 검토했습니다. 또한 Java 지식 시스템에 들어가려는 프로그래머에게 이 기사가 도움이 되기를 바랍니다. 자바 세계로 트레킹 중입니다.
첫 번째 기본 그림
저는 2003년쯤에 Java를 접하기 시작했지만(당시에는 여전히 Delphi를 사용하고 있었습니다) 2004년에 학부를 졸업하고 나서야 알게 되었습니다. 나는 공식적으로 Java를 배우기로 결정했습니다. 당시에는 델파이를 이용해 C/S 아키텍처 프로그램을 작성하는 것이 흥미롭지 않다고 느꼈습니다. 당시 자바가 제안한 J2EE 표준 개념과 엔터프라이즈급 아키텍처는 온갖 하이엔드 느낌을 주었고, 억제할 수 없었습니다. 내면의 욕망 때문에 자바의 여정을 시작했습니다. 솔직히 말해서 저는 자바 세계에 입문하자마자 어지러웠습니다. 다양한 사양과 개념, 영어 약어가 사람들을 어지럽게 할 수 있습니다.
J2SE
J2EE
J2ME
JSP
JDBC
JMS
EJB
JNDI
JDBC
JTA
들어온 순간을 떠올려보세요. 물건을 보자마자 생소한 영어 약어가 많았고(다행히 당시 Java에는 온갖 프레임워크가 피어나지 않았으므로 그렇지 않으면 더 어지러울 것임) 어디서부터 시작해야 할지 몰랐습니다. 우연히 내 반 친구가 JSP 책을 가지고 있어서 JSP를 시작하게 되었습니다. 솔직히 말해서 지금은 이름조차 기억나지 않는 정말 형편없는 책이었습니다. JSP 데모 사이트를 구축하기 위해 몇 가지 예제를 시작했던 기억이 납니다. 다양한 환경과 컨테이너 문제로 수천번의 고민 끝에 드디어 예제를 실행했는데, 드디어 로컬 브라우저를 통해 예제의 페이지를 보게 되었고, 잠시 성취감을 느꼈고, 이내 당황했습니다. 나는 그것이 어떻게 작동하는지 이해하지 못하기 때문에 원리는 무엇입니까? 다시 시작할 기회가 주어진다면 기본 Java 언어 기초부터 시작하겠습니다.
근거는 무엇인가요? Java는 객체 지향 언어이며 가장 중요한 개념은 객체이며 모든 구문은 객체를 중심으로 이루어집니다. 다른 프로그램의 기본 구조와 변수인 시퀀스, 루프, 분기 등은 이전에는 다른 언어를 기반으로 했지만 형태만 다를 뿐입니다. 객체를 이해하면 객체를 둘러싼 개념, 즉 클래스와 인터페이스는 모두 자연스러운 확장입니다. 물론 핵심 개념과 기본 문법을 익히면 Hello World만 작성할 수 있지만 요점은 출발점이 맞다면 여행이 가까워진다는 것입니다.
이 단계에서는 좋은 책을 읽고 기본적인 연습을 통해 언어 및 관련 수업 라이브러리에 익숙해질 수 있습니다. 내 생각엔 "Thinking In Java"가 Java를 시작하기에 적합한 책이라고 생각한다. ", " 코어 자바》. 이런 종류의 시작 도서를 몇 권 더 구해서 각 지식 포인트를 참고하면서 읽어도 좋을 것 같습니다. 결국 저자가 한 권의 책을 처음부터 끝까지 세로로 읽는 대신 가로로 읽는 경우도 있을 수 있습니다. 하나의 지식 포인트를 하나씩 파악하고 이해하고 한 단계에서 깊은 발자국을 만드십시오. 결과는 일반적입니다. 그러면 더 빨리 갈 수 있습니다.
기본적으로는 핵심적이고 중요한 부분이 많지 않은 것 같아요.
핵심 개념
객체 모델
인터페이스 디자인
클래스 라이브러리
lang
컬렉션
동시
io
여기서는 핵심 개념에 대해 많이 쓰지 않겠습니다. 기본적으로 모든 Java 코드 라이브러리에는 처음부터 차이점이 있습니다. 이해와 추상의 개념. JDK에는 수많은 라이브러리가 있지만 여기에는 위의 라이브러리만 나열되어 있습니다. 사실 lang에서 가장 중요한 것은 많은 사람들이 무시하는 String입니다. C에는 String이라는 개념이 없습니다. Java는 이 객체를 제공하지만, 이 객체를 이해하고 잘 활용하지 못한다면 앞으로도 끝없는 함정에 빠지게 될 것이고, 계속해서 밟게 될 것입니다. 내 말을 믿을 수 없다면, 검색해서 다양한 문자 인코딩 왜곡 문자에 대해 얼마나 많은 하위 수준 문제가 있는지 알아보세요. 또한 문자열로 인해 발생하는 다양한 성능 문제도 있습니다. String의 핵심 객체는 문자 인코딩, 문자의 바이트 표현(빅 엔디안, 리틀 엔디안, 네트워크 바이트 순서), GC에 대한 영향, 정규식 및 패턴 일치에서 비롯됩니다. 이는 Java에서 가장 풍부한 콘텐츠일 수 있습니다. 물체.
컬렉션 프레임워크는 일반적으로 사용되는 다수의 데이터 구조 캡슐화를 제공합니다. 이를 통해 기본적으로 Java 프로그래머는 데이터 구조 과정에서 배우는 대부분의 일반적인 데이터 구조를 수동으로 구현하지 않아도 됩니다. 수동으로 구현하는 것보다 다양한 데이터 구조의 적용 가능한 시나리오를 올바르게 이해하는 것이 훨씬 더 유용합니다. 할 일이 없으면 컬렉션의 코드를 살펴보세요. 모두 마스터 수준 구현입니다. 제가 Java를 배울 당시에는 JDK 1.3이던 기억이 나네요. 제가 일을 시작한 후에도 주류는 1.4였고 당시에는 동시 라이브러리가 없었습니다. 스레드 간 통신을 직접 처리할 때 각종 알림이 생략되고, 조기 알림이 발생해 교착상태가 발생하는 현상이 발생했습니다. 따라서 오늘날의 Java 프로그래머는 훨씬 더 행복합니다. Concurrent는 또 다른 마스터 수준 클래스 라이브러리 구현이며 자세히 살펴보고 알아낼 수 있습니다. 파일 IO든 네트워크 IO든 IO 라이브러리는 Java 프로그래머가 가장 많이 다루는 부분입니다. API에 익숙해지는 것도 중요하지만 더 중요한 것은 IO 작업을 추상화하고 모델링하는 방법을 이해하고 그 차이점을 이해하는 것입니다. IO 모델의 본질과 원리.
자, 위의 기본 컨텐츠를 완성하고 나면 아래와 같은 첫 번째 맵이 나옵니다.
둘째, 스킬맵
첫 번째 맵을 마스터하더라도 계속해서 자유롭게 달려야 합니다. 자바의 세계는 아직 좀 어렵네요. 현재 Java의 주류 사용 시나리오 중 하나는 백엔드 개발입니다. 이전 시대에는 Java Enterprise Edition이라고도 알려진 J2EE(현재 Java EE라고 함)가 이 분야를 지배했습니다. J2EE에는 많은 컨텐츠가 포함되어 있으며 그 핵심은 EJB입니다. 당시 저는 학교에서 분산 객체 기술을 막 공부하고 CORBA와 EJB를 예로 들어 구현해 본 상태였습니다. 나는 EJB 디자인 패턴과 모범 사례에 관한 여러 권의 책을 읽었고, 졸업하고 인턴십을 위해 회사에 들어가기 전에 모두가 EJB가 더 이상 필요하지 않다고 말하고 우리는 Spring이라는 것을 사용한다는 것을 알게 되었습니다. IoC, DI 등 새로운 영어 약어가 다시 등장했다. 한 입 가득 낡은 피가 튀기도 전에 나는 다시 일어서서 새로운 배움의 여정을 시작했다.
네, EJB는 그 당시(2005년)부터 서서히 주류에서 벗어나기 시작했습니다. 음악학 박사인 로드 존슨(Rod Johnson)이 쓴 『EJB 없는 일대일 J2EE 개발 전문가』라는 책은 EJB의 사형 선고를 내리며 스프링은 역사의 무대에 들어섰다. 이후 Java는 프레임워크의 대대적인 발전 시대에 진입했습니다. SSH/SSI와 같은 기술 프레임워크의 결합은 Java 개발의 주류를 형성했으며 오늘날까지 계속해서 영향을 미치고 있습니다.
그렇다면 Java 엔지니어로서 몇 개의 프레임워크를 마스터해야 할까요? 아무리 많은 사람을 마스터하더라도 충분하지 않기 때문에 이는 잘못된 제안입니다. 해결책은 몇 가지 핵심 사항을 능숙하게 마스터하고, 많은 부분을 일반적으로 이해하고, 빠른 학습 프레임워크를 마스터하는 것입니다. SSH/SSI를 예로 들면, 전문적인 프론트엔드 업무 분업 추세가 점점 더 분명해지고 있으며 백엔드 Java 엔지니어의 걱정이 완전히 해소되고 있습니다. Spring을 예로 든 프레임워크는 수많은 범용 문제를 해결합니다. 오늘날의 Spring은 이전보다 수십 배 이상 크고(Spring 이름을 딴 모든 하위 프로젝트 포함) 모두 특정 범용 문제를 해결합니다. 따라서 코드를 작성하다가 갑자기 Util의 이름을 딴 클래스를 작성하고 싶을 때는 잠시 멈추고 이것이 일반적인 문제를 해결하는 클래스인지 생각해 보십시오. 예를 들어 Apache Commons와 같은 클래스 라이브러리를 검색해 보는 것이 좋습니다. 필요한 코드가 있을 수 있습니다. 일반 클래스 라이브러리와 프레임워크를 사용하면 비즈니스 논리와 효율성에 집중할 수 있습니다. 이는 아마도 코드에서 가장 중요한 부분일 것입니다. 일부 프로그래머는 여기에 기술적인 내용이 없다고 불평할 수도 있지만, 저는 비즈니스를 달성하는 데 가장 효과적인 기술을 사용할 수 있다고 생각합니다. .가치를 극대화하는 것이 가장 기술적인 일입니다.
프레임은 무기와 같습니다. 18개(18개보다 훨씬 더 많은) 무기를 모두 알 수는 없지만 장무기가 태극권을 배우는 것처럼 우리도 같은 능력을 가져야 합니다. 치 검(Chi Sword). 적들은 검을 배워서 그를 이길 수 있습니다. 여기서의 비결은 비결을 배우는 것이 아닙니다. 예를 들어, Hibernate 사용법이 완벽하다고 생각할 수 있지만 데이터베이스가 온라인 상태가 되자마자 충돌이 발생합니다. 여기서의 핵심은 여전히 관계형(SQL) 데이터베이스를 이해하는 것이며, 이제는 특정 비관계형(NoSQL) 데이터베이스의 원리와 메커니즘에 대한 이해, 심지어 O/R 매핑 모델에 대한 필수적인 이해까지 추가해야 할 수 있습니다.
그래서 기본은 내면의 힘과 같고, 틀은 무기와 같고, 사용은 움직임과 같다. 한 마음으로 최선을 다하면 이 세 가지가 합쳐지면 가능하다. 이미 Java 세계를 지배하고 있습니다. 위에서 언급했듯이 이를 기반으로 두 번째 지도가 있습니다.
세 번째 사진, 확장 사진
세 번째 사진은 더 이상 제안을 드릴 수 없습니다. 제 생각에는 다소 일반적이라고 생각합니다. 이 단계에서 각 사람의 성장과 발전 방향은 자신의 환경과 실제 상황에 따라 영향을 받게 됩니다. 인터넷 회사에 입사한 이후 지난 몇 년 동안 Java 기술의 개발은 J2EE 컨테이너화된 단일 애플리케이션에서 SOA 및 마이크로서비스로 진화하기 시작했습니다. 대규모 분산 시스템이 표준이 되었기 때문에 관련 작업 중 더 많은 부분이 이 영역에 집중되어 있습니다. 한편으로는 지식 사각지대를 완성하기 위한 심층적인 발굴이 계속됩니다. 예를 들어 분산 프로그램의 기본은 RPC 호출이고, RPC의 본질은 네트워크와 객체 직렬화입니다. 따라서 우리는 TCP의 원리, Unix/Linux의 네트워크 프로그래밍 모델 및 여러 가지 네트워크 IO 모델을 철저히 이해해야 합니다. 그리고 이를 기반으로 Java에서 제공하는 네트워크 프로그래밍 모델인 BIO(차단), NIO(비차단), AIO(비동기 IO)로 이동하여 실제 업무 실습과 결합하여 심층적인 이해를 하게 됩니다.
이 과정에서 Java 자체 RMI부터 WebService 기술 사양까지 다양한 RPC 기술을 접하게 되었습니다. 나중에 Hessian, Thrift 등과 같은 더 간단하고 강력한 RPC 프레임워크가 속속 등장했습니다. 다양한 프레임워크의 본질은 동일하게 서비스화의 발전과 함께 Alibaba의 오픈소스 Dubbo와 같이 RPC 프레임워크를 기반으로 추가적인 부가가치 기능을 제공하는 서비스 프레임워크가 더욱 파생되었습니다. 업무 실무가 심화됨에 따라 JVM 수준으로 내려와 객체의 메모리 사용량, 스레드 스케줄링 및 지연을 분석하는 것이 가능해졌습니다. 이 단계에서 핵심적인 역할을 하는 것은 여전히 앞서 언급한 빠른 학습 능력과 이를 실무에 적용하는 능력입니다.
작업의 성격이 변화함에 따라 더 넓은 기술 지식이 필요할 수도 있습니다. 예를 들어, 건축가가 된 후에는 어떤 측면에서 요구되는 기술 지식의 폭이 더 높아질 것입니다. 체계적인 기술 학습과 손재주 기술을 통해 기술의 폭을 더 빠르게 확장하고, 더 높은 관점에서 다양한 기술 방향과 제품을 검토하며, 가장 효과적으로 적절한 기술 결정을 내릴 수 있습니다.
이 단계에서는 모든 사람이 서로 다른 환경과 관행에 직면할 수 있으므로 이 단계에서 형성되는 지도는 매우 다양합니다. 다음은 자바 여행의 동료 여행자들이 참고할 수 있는 세 번째 사진입니다. 그리고 이렇게 서로 다른 지도를 따라가는 길은 우연히 독특한 당신을 형성합니다.
아직 지도가 없더라도 당황하지 말고 영원히 전진을 멈추세요. 계속해서 전진하면 반드시 길을 찾을 수 있을 것입니다. 사실 저는 감히 멈출 수가 없었습니다.
위 내용은 Java Journey: Walker's Map의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!