精华内容
下载资源
问答
  • JAVA工程师进阶之路

    2016-10-20 15:40:32
    1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://ifeve.com/jmm-faq/ 1.1.2. 了解JVM各种参数及调优 1.1.3. 学习使用Java工具 jps, jstack, ...

    一、基础篇

    1.1 JVM

    1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收

    http://www.jcp.org/en/jsr/detail?id=133

    http://ifeve.com/jmm-faq/

    1.1.2. 了解JVM各种参数及调优

    1.1.3. 学习使用Java工具

    jpsjstackjmap, jconsole, jinfo, jhat, javap, …

    http://kenai.com/projects/btrace

    http://www.crashub.org/

    https://github.com/taobao/TProfiler

    https://github.com/CSUG/HouseMD

    http://wiki.cyclopsgroup.org/jmxterm

    https://github.com/jlusdy/TBJMap

    1.1.4. 学习Java诊断工具

    http://www.eclipse.org/mat/

    http://visualvm.java.net/oqlhelp.html

    1.1.5. 自己编写各种outofmemory,stackoverflow程序

    HeapOutOfMemory

    Young OutOfMemory

    MethodArea OutOfMemory

    ConstantPool OutOfMemory

    DirectMemory OutOfMemory

    Stack OutOfMemory Stack OverFlow

    1.1.6. 使用工具尝试解决以下问题,并写下总结

    当一个Java程序响应很慢时如何查找问题 当一个Java程序频繁FullGC时如何解决问题,如何查看垃圾回收日志 当一个Java应用发生OutOfMemory时该如何解决,年轻代、年老代、永久代解决办法不同,导致原因也不同

    1.1.7. 参考资料

    http://docs.oracle.com/javase/specs/jvms/se7/html/

    http://www.cs.umd.edu/~pugh/java/memoryModel/

    http://gee.cs.oswego.edu/dl/jmm/cookbook.html

    http://www.guru99.com/java-virtual-machine-jvm.html

    1.2. Java基础知识

    1.2.1. 阅读源代码

    java.lang.String java.lang.Integer`` java.lang.Long java.lang.Enumjava.math.BigDecimal java.lang.ThreadLocal java.lang.ClassLoader & java.net.URLClassLoader java.util.ArrayList & java.util.LinkedList`` java.util.HashMap & java.util.LinkedHashMap & java.util.TreeMap java.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet

    1.2.2. 熟悉Java中各种变量类型

    1.2.3. 熟悉Java String的使用,熟悉String的各种函数

    1.2.4. 熟悉Java中各种关键字

    1.2.5. 学会使用List,Map,Stack,Queue,Set

    上述数据结构的遍历 上述数据结构的使用场景 Java实现对Array/List排序java.uti.Arrays.sort() java.util.Collections.sort() Java实现对List去重 Java实现对List去重,并且需要保留数据原始的出现顺序 Java实现最近最少使用cache,用LinkedHashMap

    1.2.6. Java IO&Java NIO,并学会使用

    java.io.* java.nio.* nio和reactor设计模式 文件编码,字符集

    1.2.7. Java反射与javassist

    反射与工厂模式 java.lang.reflect.*

    1.2.8. Java序列化

    java.io. Serializable 什么是序列化,为什么序列化 序列化与单例模式 google序列化protobuf

    1.2.9. 虚引用,弱引用,软引用

    java.lang.ref.* 实验这些引用的回收

    1.2.10. 熟悉Java系统属性

    java.util.Properties

    1.2.11. 熟悉Annotation用法

    java.lang.annotation.*

    1.2.12. JMS

    javax.jms.*

    1.2.13. JMX

    java.lang.management.* javax.management.*

    1.2.14. 泛型和继承,泛型和擦除

    1.2.15. 自动拆箱装箱与字节码

    1.2.16. 实现Callback

    1.2.17. java.lang.Void类使用

    1.2.18. Java Agent,premain函数

    java.lang.instrument

    1.2.19. 单元测试

    Junit,http://junit.org/

    Jmockit,https://code.google.com/p/jmockit/

    djUnit,http://works.dgic.co.jp/djunit/

    1.2.20. Java实现通过正则表达式提取一段文本中的电子邮件,并将@替换为#输出

    java.lang.util.regex.*

    1.2.21. 学习使用常用的Java工具库

    commons.langcommons.*... guava-libraries netty

    1.2.22. 什么是API&SPI

    http://en.wikipedia.org/wiki/Application_programming_interface

    http://en.wikipedia.org/wiki/Service_provider_interface

    1.2.23. 参考资料

    JDK src.zip 源代码

    http://openjdk.java.net/

    http://commons.apache.org/

    https://code.google.com/p/guava-libraries/

    http://netty.io/

    http://stackoverflow.com/questions/2954372/difference-between-spi-and-api

    http://stackoverflow.com/questions/11404230/how-to-implement-the-api-spi-pattern-in-java

    1.3. Java并发编程

    1.3.1. 阅读源代码,并学会使用

    java.lang.Thread java.lang.Runnable java.util.concurrent.Callablejava.util.concurrent.locks.ReentrantLockjava.util.concurrent.locks.ReentrantReadWriteLockjava.util.concurrent.atomic.Atomic* java.util.concurrent.Semaphorejava.util.concurrent.CountDownLatch java.util.concurrent.CyclicBarrierjava.util.concurrent.ConcurrentHashMap java.util.concurrent.Executors

    1.3.2. 学习使用线程池,自己设计线程池需要注意什么

    1.3.3. 锁

    什么是锁,锁的种类有哪些,每种锁有什么特点,适用场景是什么 在并发编程中锁的意义是什么

    1.3.4. synchronized的作用是什么,synchronized和lock

    1.3.5. sleep和wait

    1.3.6. wait和notify

    1.3.7. 写一个死锁的程序

    1.3.8. 什么是守护线程,守护线程和非守护线程的区别以及用法

    1.3.9. volatile关键字的理解

    C++ volatile关键字和Java volatile关键字 happens-before语义 编译器指令重排和CPU指令重排

    http://en.wikipedia.org/wiki/Memory_ordering

    http://en.wikipedia.org/wiki/Volatile_variable

    http://preshing.com/20130702/the-happens-before-relation/

    1.3.10. 以下代码是不是线程安全?为什么?如果为count加上volatile修饰是否能够做到线程安全?你觉得该怎么做是线程安全的?

    public class Sample {
      private static int count = 0;
      public static void increment() {
        count++;
      }
    }

    1.3.11. 解释一下下面两段代码的差别

    // 代码1
    public class Sample {
      private static int count = 0;
      synchronized public static void increment() {
        count++;
      }
    }
    
    // 代码2
    public class Sample {
      private static AtomicInteger count = new AtomicInteger(0);
      public static void increment() {
        count.getAndIncrement();
      }
    }

    1.3.12. 参考资料

    http://book.douban.com/subject/10484692/

    http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

    二、 进阶篇

    2.1. Java底层知识

    2.1.1. 学习了解字节码、class文件格式

    http://en.wikipedia.org/wiki/Java_class_file

    http://en.wikipedia.org/wiki/Java_bytecode

    http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

    http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/

    http://asm.ow2.org/

    2.1.2. 写一个程序要求实现javap的功能(手工完成,不借助ASM等工具)

    如Java源代码:

      public static void main(String[] args) {
        int i = 0;
        i += 1;
        i *= 1;
        System.out.println(i);
      }

    编译后读取class文件输出以下代码:

    public static void main(java.lang.String[]);
      Code:
       Stack=2, Locals=2, Args_size=1
       0:   iconst_0
       1:   istore_1
       2:   iinc    1, 1
       5:   iload_1
       6:   iconst_1
       7:   imul
       8:   istore_1
       9:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
       12:  iload_1
       13:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
       16:  return
      LineNumberTable: 
       line 4: 0
       line 5: 2
       line 6: 5
       line 7: 9
       line 8: 16

    2.1.3. CPU缓存,L1,L2,L3和伪共享

    http://duartes.org/gustavo/blog/post/intel-cpu-caches/

    http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html

    2.1.4. 什么是尾递归

    2.1.5. 熟悉位运算

    用位运算实现加、减、乘、除、取余

    2.1.6. 参考资料

    http://book.douban.com/subject/1138768/

    http://book.douban.com/subject/6522893/

    http://en.wikipedia.org/wiki/Java_class_file

    http://en.wikipedia.org/wiki/Java_bytecode

    http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

    2.2. 设计模式

    2.2.1. 实现AOP

    CGLIB和InvocationHandler的区别 http://cglib.sourceforge.net/

    动态代理模式 Javassist实现AOP http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/

    ASM实现AOP http://asm.ow2.org/

    2.2.2. 使用模板方法设计模式和策略设计模式实现IOC

    2.2.3. 不用synchronized和lock,实现线程安全的单例模式

    2.2.4. nio和reactor设计模式

    2.2.5. 参考资料

    http://asm.ow2.org/

    http://cglib.sourceforge.net/

    http://www.javassist.org/

    2.3. 网络编程知识

    2.3.1. Java RMI,Socket,HttpClient

    2.3.2. 用Java写一个简单的静态文件的HTTP服务器

    实现客户端缓存功能,支持返回304 实现可并发下载一个文件 使用线程池处理客户端请求 使用nio处理客户端请求 支持简单的rewrite规则 上述功能在实现的时候需要满足“开闭原则”

    2.3.3. 了解nginx和apache服务器的特性并搭建一个对应的服务器

    http://nginx.org/

    http://httpd.apache.org/

    2.3.4. 用Java实现FTP、SMTP协议

    2.3.5. 什么是CDN?如果实现?DNS起到什么作用?

    搭建一个DNS服务器 搭建一个 Squid 或 Apache Traffic Server 服务器 http://www.squid-cache.org/ http://trafficserver.apache.org/http://en.wikipedia.org/wiki/Domain_Name_System

    2.3.6. 参考资料

    http://www.ietf.org/rfc/rfc2616.txt

    http://tools.ietf.org/rfc/rfc5321.txt

    http://en.wikipedia.org/wiki/Open/closed_principle

    2.4. 框架知识

    spring,spring mvc,阅读主要源码 ibatis,阅读主要源码 用spring和ibatis搭建java server

    2.5. 应用服务器知识

    熟悉使用jboss,https://www.jboss.org/overview/ 熟悉使用tomcat,http://tomcat.apache.org/ 熟悉使用jetty,http://www.eclipse.org/jetty/

    三、 高级篇

    3.1. 编译原理知识

    3.1.1. 用Java实现以下表达式解析并返回结果(语法和Oracle中的select sysdate-1 from dual类似)

     sysdate
     sysdate - 1
     sysdate - 1/24
     sysdate - 1/(12*2)

    3.1.2. 实现对一个List通过DSL筛选

      QList<Map<String, Object>> mapList = new QList<Map<String, Object>>;
      mapList.add({"name": "hatter test"});
      mapList.add({"id": -1,"name": "hatter test"});
      mapList.add({"id": 0, "name": "hatter test"});
      mapList.add({"id": 1, "name": "test test"});
      mapList.add({"id": 2, "name": "hatter test"});
      mapList.add({"id": 3, "name": "test hatter"});
      mapList.query("id is not null and id > 0 and name like '%hatter%'");

    要求返回列表中匹配的对象,即最后两个对象;

    3.1.3. 用Java实现以下程序(语法和变量作用域处理都和JavaScript类似):

    代码:

    var a = 1;
    var b = 2;
    var c = function() {
      var a = 3;
      println(a);
      println(b);
    };
    c();
    println(a);
    println(b);

    输出:

    3
    2
    1
    2

    3.1.4. 参考资料

    http://en.wikipedia.org/wiki/Abstract_syntax_tree https://javacc.java.net/ http://www.antlr.org/

    3.2. 操作系统知识

    Ubuntu Centos 使用linux,熟悉shell脚本

    3.3. 数据存储知识

    3.3.1. 关系型数据库

    MySQL 如何看执行计划 如何搭建MySQL主备 binlog是什么 Derby,H2,PostgreSQL SQLite

    3.3.2. NoSQL

    Cache Redis Memcached Leveldb Bigtable HBase Cassandra Mongodb 图数据库 neo4j

    3.3.3. 参考资料

    http://db-engines.com/en/ranking

    http://redis.io/

    https://code.google.com/p/leveldb/

    http://hbase.apache.org/

    http://cassandra.apache.org/

    http://www.mongodb.org/

    http://www.neo4j.org/

    3.4. 大数据知识

    3.4.1. Zookeeper,在linux上部署zk

    3.4.2. Solr,Lucene,ElasticSearch

    在linux上部署solr,solrcloud,,新增、删除、查询索引

    3.4.3. Storm,流式计算,了解Spark,S4

    在linux上部署storm,用zookeeper做协调,运行storm hello world,local和remote模式运行调试storm topology。

    3.4.4. Hadoop,离线计算

    Hdfs:部署NameNode,SecondaryNameNode,DataNode,上传文件、打开文件、更改文件、删除文件

    MapReduce:部署JobTracker,TaskTracker,编写mr job

    Hive:部署hive,书写hive sql,得到结果

    Presto:类hive,不过比hive快,非常值得学习

    3.4.5. 分布式日志收集flume,kafka,logstash

    3.4.6. 数据挖掘,mahout

    3.4.7. 参考资料

    http://zookeeper.apache.org/

    https://lucene.apache.org/solr/

    https://github.com/nathanmarz/storm/wiki

    http://hadoop.apache.org/

    http://prestodb.io/

    http://flume.apache.org/

    http://logstash.net/

    http://kafka.apache.org/

    http://mahout.apache.org/

    3.5. 网络安全知识

    3.5.1. 什么是DES、AES

    3.5.2. 什么是RSA、DSA

    3.5.3. 什么是MD5,SHA1

    3.5.4. 什么是SSL、TLS,为什么HTTPS相对比较安全

    3.5.5. 什么是中间人攻击、如果避免中间人攻击

    3.5.6. 什么是DOS、DDOS、CC攻击

    3.5.7. 什么是CSRF攻击

    3.5.8. 什么是CSS攻击

    3.5.9. 什么是SQL注入攻击

    3.5.10. 什么是Hash碰撞拒绝服务攻击

    3.5.11. 了解并学习下面几种增强安全的技术

    http://www.openauthentication.org/

    HOTP http://www.ietf.org/rfc/rfc4226.txt

    TOTP http://tools.ietf.org/rfc/rfc6238.txt

    OCRA http://tools.ietf.org/rfc/rfc6287.txt

    http://en.wikipedia.org/wiki/Salt_(cryptography)

    3.5.12. 用openssl签一个证书部署到apache或nginx

    3.5.13. 参考资料

    http://en.wikipedia.org/wiki/Cryptographic_hash_function

    http://en.wikipedia.org/wiki/Block_cipher

    http://en.wikipedia.org/wiki/Public-key_cryptography

    http://en.wikipedia.org/wiki/Transport_Layer_Security

    http://www.openssl.org/

    https://code.google.com/p/google-authenticator/

    四、 扩展篇

    4.1. 相关知识

    4.1.1. 云计算,分布式,高可用,可扩展

    4.1.2. 虚拟化

    https://linuxcontainers.org/

    http://www.linux-kvm.org/page/Main_Page

    http://www.xenproject.org/

    https://www.docker.io/

    4.1.3. 监控

    http://www.nagios.org/

    http://ganglia.info/

    4.1.4. 负载均衡

    http://www.linuxvirtualserver.org/

    4.1.5. 学习使用git

    https://github.com/

    https://git.oschina.net/

    4.1.6. 学习使用maven

    http://maven.apache.org/

    4.1.7. 学习使用gradle

    http://www.gradle.org/

    4.1.8. 学习一个小语种语言

    Groovy Scala LISP, Common LISP, Schema, Clojure R Julia Lua Ruby

    4.1.9. 尝试了解编码的本质

    了解以下概念 ASCII, ISO-8859-1 GB2312, GBK, GB18030 Unicode, UTF-8 不使用 String.getBytes() 等其他工具类/函数完成下面功能

    public static void main(String[] args) throws IOException {
        String str = "Hello, 我们是中国人。";
        byte[] utf8Bytes = toUTF8Bytes(str);
        FileOutputStream fos = new FileOutputStream("f.txt");
        fos.write(utf8Bytes);
        fos.close();
    }
    public static byte[] toUTF8Bytes(String str) {
        return null; // TODO
    }

    想一下上面的程序能不能写一个转GBK的? 写个程序自动判断一个文件是哪种编码

    4.1.10. 尝试了解时间的本质

    时区 & 冬令时、夏令时 http://en.wikipedia.org/wiki/Time_zoneftp://ftp.iana.org/tz/data/asiahttp://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9C%8B%E6%99%82%E5%8D%80

    闰年 http://en.wikipedia.org/wiki/Leap_year

    闰秒 ftp://ftp.iana.org/tz/data/leapseconds

    System.currentTimeMillis() 返回的时间是什么

    4.1.11. 参考资料

    http://git-scm.com/

    http://en.wikipedia.org/wiki/UTF-8

    http://www.iana.org/time-zones

    4.2. 扩展学习

    4.2.1. JavaScript知识

    4.2.1.1. 什么是prototype

    修改代码,使程序输出“1 3 5”: http://jsfiddle.net/Ts7Fk/

    4.2.1.2. 什么是闭包

    看一下这段代码,并解释一下为什么按Button1时没有alert出“This is button: 1”,如何修改: http://jsfiddle.net/FDPj3/1/

    4.2.1.3. 了解并学习一个JS框架

    jQuery ExtJS ArgularJS

    4.2.1.4. 写一个Greasemonkey插件
    http://en.wikipedia.org/wiki/Greasemonkey
    4.2.1.5. 学习node.js

    http://nodejs.org/

    4.2.2. 学习html5

    ArgularJS,https://docs.angularjs.org/api

    4.2.3. 参考资料

    http://www.ecmascript.org/

    http://jsfiddle.net/

    http://jsbin.com/

    http://runjs.cn/

    http://userscripts.org/

    五、 推荐书籍

    《深入Java虚拟机》

    《深入理解Java虚拟机》

    《Effective Java》

    《七周七语言》

    《七周七数据》

    《Hadoop技术内幕》

    《Hbase In Action》

    《Mahout In Action》

    《这就是搜索引擎》

    《Solr In Action》

    《深入分析Java Web技术内幕》

    《大型网站技术架构》

    《高性能MySQL》

    《算法导论》

    《计算机程序设计艺术》

    《代码大全》

    《JavaScript权威指南》

    原文地址:http://www.hollischuang.com/archives/489

    展开全文
  • 作为Java程序员来说,最痛苦的事情莫...我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。由于文件太大不得不奉承六次上传,请见谅!!!!
  • java自我进阶书籍

    2018-06-28 14:11:07
    我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识。一、Java...

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识。
    一、Java编程入门类
      对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。
    1、《Java编程思想》
      在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它 对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太 厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。
    2、《Agile Java》中文版
      这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但 是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的 过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还 有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握 Java最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。
      虽然作者自己把这本书定位在入门级别,但我不确定这本书用来入门是不是稍微深了点,我自己也准备有空的时候翻翻这本书,学习学习。
    二、Java编程进阶类
      打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。
    1、《重构 改善既有代码的设计》
      这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对产生影响是潜移默化的。
    2、《测试驱动开发 by Example》
      本书最大特点是很薄,看起来没有什么负担。可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。
    三、Java架构师之路
      到这个阶段,应该已经非常娴熟的运用Java编程,而且有了一个良好的编程思路和习惯了,但是可能还缺乏对应用软件整体架构的把握,现在就是迈向架构师的第一步。
    1、《Expert One-on-One J2EE Design and Development》
      这本书是Rod Johnson的成名著作,非常经典,从这本书中的代码诞生了springframework。但是好像这本书没有中译本。
    2、《Expert One-on-One J2EE Development without EJB》
      这本书由gigix组织翻译,多位业界专家参与,虽然署名译者是JavaEye,其实JavaEye出力不多,实在是忝居译者之名。
      以上两本书都是Rod Johnson的经典名著,Java架构师的必读书籍。在所推荐的这些书籍当中,是看过的最仔细,最认真的书,当时读这本书几乎是废寝忘食的一气读完的, 有小时候挑灯夜读金庸武侠小说的劲头,书中所讲内容和自己的经验知识一一印证,又被无比精辟的总结出来,读完这本书以后,有种被打通经脉,功力爆增的感 觉。
      但是后来看过一些其他人的评价,似乎阅读体验并没有那么high,也许是因为每个人的知识积累和经验不同导致的。那个时候刚好是经验知识积累已经足够丰富,但是还没有系统的整理成型,让这本书一梳理,立刻形成完整的知识体系了。
    3、《企业应用架构模式》
    Martin的又一本名著,但这本书只是泛泛的看了一遍,并没有仔细看。这本书 似乎更适合做框架的人去看,例如如果打算自己写一个ORM的话,这本书是一定要看的。但是做应用的人,不看貌似也无所谓,但是如果有空,还是推荐认真看 看,会让知道框架为什么要这样设计,这样的层次可以晋升到框架设计者的角度去思考问题。Martin的书向来都是推崇,但是从来都没有像Rod Johnson的书那样非常认真去看。
    4、《敏捷软件开发原则、模式与实践》
      Uncle Bob的名著,敏捷的经典名著,这本书比较特别,与其说是讲软件开发过程的书,不如说讲软件架构的书,本书用了很大篇幅讲各种面向对象软件开发的各种模式,个人以为看了这本书,就不必看GoF的《设计模式》了。
    四、软件开发过程
      了解软件开发过程不单纯是提高程序员个人的良好编程习惯,也是增强团队协作的基础。
    1、《UML精粹》
    UML其实和软件开发过程没有什么必然联系,却是软件团队协作沟通,撰写软件文档需要的工具。但是UML真正实用的图不多,看看这本书已经足够了,完全没有必要去啃《UML用户指南》之类的东西。要提醒大家的是,这本书的中译本翻译的非常之烂,建议有条件的看英文原版。
    2、《解析极限编程 拥抱变化》XP
      这是Kent Beck名著的第二版,中英文对照。没什么好说的,必读书籍。
    3、《统一软件开发过程》UP
      其实UP和敏捷并不一定冲突,UP也非常强调迭代,测试,但是UP强调的文档和过程驱动却是敏捷所不取的。不管怎么说,UP值得去读,毕竟在中国真正接受敏捷的企业很少,还是需要用UP来武装一下自己的,哪怕是披着UP的XP。
    4、《敏捷建模》AM
    Scott Ambler的名著,这本书非常的progmatic,告诉怎么既 敏捷又UP,把敏捷和UP统一起来了,又提出了很多progmatic的建议和做法。可以把《解析极限编程拥抱变化》、《统一软件开发过程》和《敏捷建 模》这三本书放在一起读,看XP和UP的不同点,再看AM是怎么统一XP和UP的,把这三种理论融为一炉,形成自己的理论体系,那么也可以去写书了。
    五、软件项目管理

      如果突然被领导提拔为项目经理,而完全没有项目管理经验,肯定会心里没底;如果觉得自己管理项目不善,很想改善项目管理能力,那么去考PMP肯定是远水不解近渴的。
    1、《快速软件开发》
      这也是一本名著。可以这样说,有本书在手,就有了一个项目管理的高级参谋给 你出谋划策,再也不必担心自己不能胜任的问题了。这本书不是讲管理的理论的,在实际的项目管理中,讲这些理论是不解决问题的,这本书有点类似于“软件项目 点子大全”之类的东西,列举了种种软件项目当中面临的各种问题,以及应该如何解决问题的点子,只需要稍加变通,找方抓药就行了。
    六、总结
      在这份推荐阅读书籍的名单中,没有列举流行的软件框架类学习书籍,例如Struts,Hibernate,Spring之类,也没有列举AJAX方面的书籍。是因为这类书籍容易过时,而上述的大半书籍的生命周期都足够长,值得去购买和收藏。
    【二.Java书籍Top 10】
    下面是Java Inside上推荐的十本不错的Java书籍。
    1)Java Language Specification, Third Edition (by James Gosling)
    本书由Java技术的发明者编写,是Java TM编程语言的权威性技术指南。如果你想知道语言之构造的精确含义,本书是最好的资源。

    2)Effective Java , Second Edition (by Joshua Bloch)
    本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。.
    本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。…

    3)Java Concurrency in Practice (by Brian Goetz)
    随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序取得了显著的进步,提高了Java虚拟机的性能,提高了并发类的可伸缩性,并加入了丰富的新并发构建块。在本书中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用,同时,还阐释了创造它们的原因,及其背后的设计模式。 本书既能够成为读者的理论支持,又可以作为构建可靠的,可伸缩的,可维护的并发程序的技术支持。本书并不仅仅提供并发API的清单及其机制,本书还提供了设计原则,模式和思想模型,使我们能够更好地构建正确的,性能良好的并发程序。
    本书的读者是那些具有一定Java编程经验的程序员、希望了解Java SE 5,6在线程技术上的改进和新特性的程序员,以及Java和并发编程的爱好者。

    4)Java Puzzles: Traps, Pitfalls and Corner Cases (by Joshua Bloch)
    Java教父的又一经典名著–Java Puzzlers,Amazon五星图书。认为你到底有多了解Java?你是一个代码神探吗?你是否曾经花费过数天时间去追踪一个由Java或其类库的陷阱和缺陷而导致的bug?你喜欢智力测验吗?那么这本书正好适合你!

    5)Thinking in Java (by Bruce Eckel)
    本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。
    从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。


    6)Better, faster, lighter Java (by Justin Gehtland, Bruce A. Tate)
    Java的开发者正深陷于复杂性的泥沼中而无法自拔。我们的经验和能力正接近极限,程序员为了编写支持所选框架的程序所花的时间比解决真正问题的时间要多得多。我们不禁要问,有必要把Java搞得这么复杂吗?.
    答案是否定的。本书给你指引了一条出路。无论是维护应用程序,还是从头开始设计,你都能够超越成规,并大幅精简基本框架、开发过程和最终代码。你能重新掌握一度失控的J2EE应用程序。..
    在本书中,原作者Bruce A.Tate与Justin Gehtland将循序渐进、娓娓道来。首先,他们列出了五项基本法则。他们展示了如何构建简单、解耦的代码,并告诉你如何选择技术。他们还对两种被广泛运用的开源程序如何迎合这些概念进行了剖析。最后,作者还将利用这些基本概念构建一个简单但内涵丰富的应用程序来解决现实世界中所遇到的问题。

    7)Core Java (vol. 1, 2) (by Cay S. Horstmann, Gary Cornell)
    《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了Java SE 6的新特性。全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。.
    全书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。

    8) The Java Virtual Machine Specification (by Tim Linholm, Frank Yellin)
    如果你需要了解Java虚拟机的byte code,或者是一些编译方面的东西,这本书绝对让你得偿所愿。其不但包含了机器码的规范说明,同时它也是Java编译器和运行环境的规格说明书。


    9)Robust Java: Exception Handling, Testing, and Debugging (by Stephen Stelting)
    处理异常涉及开发、设计和体系结构等方面的知识。本书共分3个部分。
      第Ⅰ部分介绍Java异常的产生机理和用法,介绍一些最佳实践,讲述各类异常处理使用的一般API和技术。
      第Ⅱ部分阐述可测试性设计,介绍故障模式分析,讨论常见API的异常及起因,分析J2EE体系结构和分布式API的异常模式。
      第Ⅲ部分讨论在软件开发周期执行异常和错误处理,分析软件体系结构、设计模式、测试和调试,列举成熟的设计模式,介绍处理策略对系统体系结构的影响,讲述如何构建健壮系统。

    10)Java Code Convention
    最后一本当然是Java编码规范,这是由Sun公司官方出品的。这也是每个程序员为了得供程序的易读性,可维护性需要知道的。

    【三.Java 专业人士必备的书籍】
    每个程序员都会有一些由于经常被当作专业资料参阅而磨坏的书。下列书籍应该是 Java 语言程序员的书架上必备的。书很贵,所以我有意将这份列表弄得很短,仅限于重要书籍。
    Thinking in Java (Bruce Eckel)
    Thinking in Java, 3rd edition (Bruce Eckel; Prentice Hall PTR,2002 年)
    Java 编程思想:第3版 (陈昊鹏 等译; 机械工业出版社,2005 年)
    Eckel 的书对于学习如何在 Java 语言环境中使用好面向对象技术极其实用。书中大量的代码样例解释了他所介绍的概念。文字出自一个并不认为 Java 技术总是正确答案的人,所以相当地实用。Eckel 具有多种语言的大量经验,还有用面向对象方式进行思考的扎实技能。本书将这些技能放到实用的 Java 语言环境中。他还在写一本新书,名为 Thinking in Enterprise Java
    Effective Java (Joshua Bloch)
    Effective Java: Programming Language Guide(Joshua Bloch; Addison-Wesley,2001 年)
    Effective Java 中文版 (潘爱民 译; 机械工业出版社,2003 年)
    本书是理解优秀 Java 程序设计原则的最佳书籍。大多数材料从其他的 “学习 Java ” 的书中根本找不到。例如,Bloch 书中关于覆盖equals() 这一章是我读过的最好的参考资料之一。他也在书中包括了很实用的建议:用接口替代抽象类和灵活使用异常。Bloch 是 Sun 公司 Java 平台库的架构师,所以他透彻地了解这门语言。事实上,他编写了该语言中大量有用的库。本书必读!
    The Java Programming Language (Ken Arnold, James Gosling, David Holmes)
    The Java Programming Language(Ken Arnold,James Gosling,David Holmes; Addison-Wesley,2000 年)
    Java 编程语言(第 3 版) (虞万荣 等译,中国电力出版社,2003 年)
    这也许是能弄到的最好的 Java 入门读物。它并不是一个标准规范,而是一本介绍每门语言特性的可读书籍。这本书在严谨性和教育性方面权衡得很好,能够让懂编程的人迅速被 Java 语言(和其丰富的类库)所吸引。
    Concurrent Programming in Java: Design Principles and Patterns (Doug Lea)
    Concurrent Programming in Java: Design Principles and Patterns, 2nd edition(Doug Lea; Addison-Wesley,1999 年)
    Java 并发编程—设计原则与模式(第二版) (赵涌 等译,中国电力出版社,2004 年)
    不是每个开发人员都需要如此细致地了解并发性,也不是每个工程师都能达到本书的水准,但却没有比本书更好的关于并发性编程的概述了。如果您对此感兴趣,请从这里开始。Lea 是 SUNY 的一名专业程序员,他的和并发性有关的作品和想法都包含在了 JDK 5.0 规范(引自 JSR166)中,所以您大可放心,他所说的关于有效使用 Java 语言的建议是值得一听的。他是一个很善于沟通的人。
    Expert One-On-One J2EE Design and Development (Rod Johnson)
    Expert One-On-One J2EE Design and Development(Rod Johnson)
    WROX: J2EE 设计开发编程指南 (魏海萍 译,电子工业出版社,2003 年)
    对于刚接触 J2EE 的人来说,这是唯一的一本如实反映这项技术的书。本书收录了多年的成功经验和失败经验,不同于其他许多作者,Johnson 乐于将失败的经验公诸于众。J2EE 常常都被过度使用。Johnson 的书能帮您避免这一点。
    Refactoring (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts)
    Refactoring: Improving the Design of Existing Code(Martin Fowler,Kent Beck,John Brant,William Opdyke,Don Roberts; Addison-Wesley,1999 年)
    重构:改善既有代码的设计(中文版) (侯捷 等译,中国电力出版社 ,2003 年)
    Fowler 写了几本现已出版的最流行的编程书,包括 Analysis Patterns。他的关于重构 的书是这一主题的基本书籍。重构代码是被程序员忽略的训练,但却是程序员最直观的想法。重构是在不改变代码结果的前提下改进现有代码的设计。这是保持代码整洁的最佳方式,用这种方法设计的代码总是很容易修改。什么时候进行重构呢?当代码“散发出味道”时。Fowler 的书里满是 Java 语言代码的例子。许多 Java 语言集成开发环境(IDE)(包括了 IBM 的 Eclipse)都将 Fowler 的重构包含了进去,每一个都使用他的重构名命名,所以熟悉如extract method 等重构方法还是很值得的。
    Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)
    Design Patterns: Elements of Reusable Object Oriented Software(Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides; Addison-Wesley,1997 年)
    设计模式:可复用面向对象软件的基础 (李英军 等译,机械工业出版社 ,2005 年)
    这是一本在专业程序员圈子里更为有名的书,基于作者共同的绰号,这本书被认为是 “四人帮(GOF)之书”。模式是思考和解决普通编程问题时可以重用的方式。学习模式是一门学科。使用好模式(或知道什么时候 使用模式)是一项技能。忽略模式则是错误的。书中所有的例子都以 C++ 表示,但 Java 语言是从那里诞生的,让 Java 语言程序员由此联系到如何在 Java 语言中实现这些模式相对简单一些。熟悉模式并了解如何使用好模式使编程更加简单。这使得和其他程序员交流也更简单,因为在针对通用问题的通用解决方案中,模式是描述解决方案中彼此协作的大量相关编程概念的快捷方式。一些更为通用的方式,如工厂方法 则是普便存在的,甚至存在于 Java 语言本身。关于明智使用模式的这个主题,也可以阅读 Joshua Kerievsky 的 Refactoring to Patterns,该书称可以让代码来告诉您何时实现模式。
    Patterns of Enterprise Application Architecture (Martin Fowler)
    Patterns of Enterprise Application Architecture(Martin Fowler; Addison-Wesley,2002 年)
    企业应用架构模式 (王怀民 等译,机械工业出版社 ,2004 年)
    比起小型、一次性项目来说,企业开发当然代表了更大的挑战。那并不意味着企业开发带来的所有挑战都是新挑战。事实上有些时候,这项开发已经 是以前完成过的了。Fowler 做了很多个这样的项目。他的书提到了一些通用解决方案,并提供了关于使用、折中和可选方案的指导。Fowler 在书中包含了一些熟悉的模式,如模型视图控制器(MVC),他也提供了一些您也许不了解的模式,如处理 Web 站点上特定页面请求或行为请求的 Page Controller 模式。正如您对待大多数模式一样,一旦您读过许多模式,您就会认为 “我已经知道那个模式了” 。也许是这样,但有一个用来引用模式的通用表达方式还是很有帮助的。在有多个组件(由不同人开发)的大型项目中,该类引用是一项很好的帮助。
    UML Distilled (Martin Fowler)
    UML Distilled: A Brief Guide to the Standard Object Modeling Language(Martin Fowler; Addison-Wesley 2003 年)
    UML精粹:标准对象语言简明指南(第3版) (徐家福 译,清华大学出版社 ,2005 年)
    对于专业的程序员来说,UML 是一门很重要的通用可视化沟通语言,但是它被过度使用和草率地滥用了。您无需对使用 UML 沟通了解太多。Martin 对 UML 的提炼为您提供了最核心的东西。事实上,前后的封页提供了常规基础上可能使用到的所有东西。该书中 UML 例子的代码都是 Java 代码。
    Test-Driven Development: By Example (Kent Beck)
    Test-Driven Development: By Example(Kent Beck; Addison-Wesley 2002 年)
    测试驱动开发(中文版) (崔凯 译,中国电力出版社 ,2004 年)
    测试优先编程将使编程发生革命性变化,能助您成为更好的程序员。在写代码之前编写测试开始很难,但却是一项威力强大的技能。通过优先编写测试,可使代码更加简单,并确保从一开始它就能工作(Beck 实践着他提倡的测试优先,与人合写了 JUnit,这是 Java 语言最流行的测试框架)。Beck 的书是权威的参考资料,扩展了的 Money 例子也用 Java 语言写成。Beck 详述了如何用测试优先进行 思考(这也许是许多程序员首先遇到的障碍)。
    The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and Dave Thomas)
    The Pragmatic Programmer: From Journeyman to Master(Andrew Hunt 和 David Thomas; Addison-Wesley 1999 年)
    程序员修炼之道——从小工到专家 (马维达 译,电子工业出版社 ,2004 年)
    做一个纯粹的面向对象开发人员有其优势所在。在当今复杂的社会中,作为 Java 语言开发人员,为完成任务常要妥协。Hunt 和 Thomas 探讨了如何不将真正重要的东西妥协掉而完成任务。这不是一本关于 Java 语言的书,而是 Java 语言开发人员重要的思想读物。例如,我认为没从“要解决问题,而不是推卸责任”这句忠言中受益的程序员,不能像个自豪的艺术家一样在他的杰作上签上大名。
    Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister)
    Peopleware: Productive Projects and Teams(Tom DeMarco,Timothy Lister; Dorset House,1999 年)
    人件(第2版) (UMLChina 翻译组 译,清华大学出版社 ,2003 年)
    这份列表中的其他所有书籍都至少和技术有些相关。这本书却不是。在所有技术行话和首字母缩略词的海洋中,有时软件开发人员和经理们会忘记:是 制造了软件。DeMarco 和 Lister 向我们提醒了这一事实,也向我们提醒了形成这一区别的原因。这不是一本关于一门特定编程语言的书籍,但却是每个 Java 语言程序员都应该读的书。关于 “累死程序员如何让经理们适得其反” 还有许多其他的好书,但这是最好的一本。
    【四.推荐给初级Java程序员的3本进阶书 】
    原作者在这篇文章中介绍3本不错的技术书籍。作者认为这些书籍对新手或者学生而言尤其有帮助。通过一些基础性的教程入门后,我们可以使用Java做基础性的编程。然而,当我们需要从初级提升更高的一个层次时,大多数的人却不知道从何入手。一些好的书籍在这个阶段可以很好地帮助初级开发人员。
    《Head First设计模式》
    这本书介绍 GoF 常用设计模式的方式引人入胜。如果只看封面很难看出来这是一本技术书籍,更不用说这本技术书籍介绍的还是面向对象编程的一些很有用的技巧。这本书采用 Kathy Sierra 式编写风格:虽然她的博客已经关了,但是还是能从前面这个链接看到一些她的文章,建议读一读。如果你周围有人认为设计模式没有什么用处,这本书倒是能够让他们改变看法。个人而言,我认为经典的 GoF 手册是一个很好的参考,但它并不是专为新手准备的。因此强烈推荐在校生(包括那些不清楚组合模式是什么的程序员们)阅读此书。
    书中介绍的设计模式是程序开发中比较基本的编程模式,也是面向对象编程的程序员应该了解和掌握的。接下来要介绍的这本书则更偏向于Java语言本身,这也是我日常使用的编程语言。
    《Effective Java中文版》第二版
    每个Java程序员的书桌上都应该放有这本书。让我们先了解下作者:
    Joshua Bloch是Google公司的首席Java设计师,并且也是一位Jolt 奖获得者。他之前是Sun的一位杰出工程师(distinguished engineer),也是Transarc公司的一个资深系统设计师。Bloch主导了众多基于Java平台的软件系统的设计和实现,包括JDK5.0的功能加强以及获得过奖项的Java集合框架的设计实现。他同时也参与编写了《Java解惑 | Java Puzzlers》 和《Java并发编程实战 | Java Concurrency in Practice》这两本技术书。
    就凭“Java集合框架开发者”这个称号,我们就应该认真听取这位值得尊敬的程序员的建议。这些建议在这本书中组织成78个点:读者可以按照自己的速度进行阅读。

     

    • 在复写equals和hashcode方法时,我们应该遵循什么规则?
    • 不可变类(immutable class)是什么?
    • 在特定的情况下,应当选用哪种最相关的异常类型?运行时异常(Runtime exception)还是可捕获异常(checked exception)?
    • 对于一个托管语言(managed language,详细请参考 wiki介绍),如何在混淆编译时保留(preserve)类的成员?

    上面所有的问题(也包括其他74个)都有实用主义者Joshua Bloch的详细解释。读完这本书,程序员应该能意识到使用Findbugs、Checkstyle这些工具的必要性了。
    《Java并发编程实战》
    一年前我正努力在做 UI 开发工作时(在Eclipse 插件中使用SWT/JFace,其他一些项目则使用Swing ),就看了这本书。那时,我想了解如何实现一个快速响应的UI,从而能给用户更好的使用体验。我知道自己写线程安全的代码是非常复杂的,尽管运行时间长的操作通常是一个独立的线程。UI开发和多核系统应用开发是学习如何开发线程安全的软件系统的一个很好的理由。
    这本书的作者如下:Brian Goetz,Joshua Bloch(又出现这位大牛了,我们刚提到过,还记得吗?), Doug Lea(java.util.concurrent包的开发者), David Holmes,Tim Peierls 和Joseph Bowbeer

     

     

    这本书的风格非常直接,有的代码在非线程安全的环境下表现不错,可一旦到了线程安全的环境下就变得十分的危险。接着,这本书介绍了基本的保证线程安全的机制:同步机制,volatile关键字等。本书还有对java.util.concurrent接口的介绍,你可以根据自己的需要来选择适合的并发集合类。这本书也介绍了程序运行时的错误管理,以及如何测试代码是否是线程安全的。而且书中还提供了说明性的注释(Annotation)(下载),这些注释通过了FindBugs的检查! 

     

    展开全文
  • part 1Java基础核心技术总结 万事都离不开根基,Java基础对于一些老鸟来说可能已经很熟悉了,但是对于很多开发5年以下的朋友掌握的或许不是很牢固,因此这份笔记更适合温故而知新。 Part 2并发编程(架构师筑基...

    part 1Java基础核心技术总结

    万事都离不开根基,Java基础对于一些老鸟来说可能已经很熟悉了,但是对于很多开发5年以下的朋友掌握的或许不是很牢固,因此这份笔记更适合温故而知新。

    Part 2并发编程(架构师筑基必备)

    并发编程都掌握不好,你凭什么写出优质的代码?

    大厂必问并发编程技术栈,都在这张图上了:

    Part 3JVM(架构师筑基必备)

    JVM和并发编程都是Java语言中非常重要的技术点,同时也是带有一定难度的基础内容,在面试过程中JVM也是常问的面试内容。

    P8大佬自编笔记——深入了解性能优化:

    P8大佬自编笔记——JVM执行子系统:

    P8大佬自编笔记——JVM内存整理以及GC调优:

    P8大佬自编笔记——JVM内存区域划分:

    JVM学习笔记总结:

    • 线程
    • JVM内存区域
    • JVM运行内存
    • 垃圾回收与算法
    • Java四种引用类型
    • GC分代收集算法 VS 分区收集算法
    • GC垃圾收集器
    • JAVA IO/NIO
    • JVM类加载机制

    大厂必问JVM技术栈,都在这张图上:

    Part 4Netty与RPC

    网络编程我愿意称Netty为王,Netty的底层就是NIO网络编程+线程池组,很多消息中间件的底层就是Netty,因此如果你的项目里用到了Netty,面试官一定是会问到的。

    Netty的学习主要从以下几点入手,如果想面试类似于P7岗,你所要掌握的内容应该是一些底层原理和源码,比如说Linux内核源码,Linux服务器通信模型之类的,这些我们就不过深入研究了。

    你所要掌握的技术:

    • Netty原理
    • Netty高性能(多路复用通讯方式;异步通讯NIO;零拷贝;内存池等)
    • Netty RPC实现
    • RMI实现方式
    • Protoclol Buffer
    • Thrift

    Part 5MySQL深度进阶

    MySQL作为一款仅次于Oracle的免费开源项目,也是国内绝大多数公司都在用的,什么B+Tree、主从复制等等这些面试同样也是经常被问到。

    深入浅出MySQL,从0开始教你一步步熟练使用MySQL:

    Part 6Tomcat架构解析

    Tomcat应该是Java程序员必须会用的一个软件吧,基本上你能搞懂下面我列出来的这些就完全没问题了

    Part 7面试必问算法与数据结构

    在国内字节等大型公司的推动下,现在Java程序员都能感受到面试对于算法的面试基本上就是必问的了,因为算法面试其实是相对高效、准确且公平的筛选机制。

    面试必问的一些内容我也整理出来了,大家可以自行参考:

    数据结构与算法宝典,分为以下五个章节,每个章节都有细化内容:

    • 第一章、必读系列(必读书籍,动态规划、回溯算法、二分查找等解题套路框架及答疑
    • 第二章、动态规划系列(最长递增子序列,背包/完全背包/子集背包问题,编辑距离,正则表达,贪心算法,高楼扔鸡蛋等等
    • 第三章、数据结构系列(算法学习之路,二叉堆详解实现优先级队列,LRU算法详解,二叉搜索树操作集锦,如何计算完全二叉树的节点数,特殊数据结构:单调栈/单调队列,设计Twitter等等
    • 第四章、算法思维系列(回溯算法团灭子集、排列、组合问题,回溯算法最佳实践:解数独,递归详解,洗牌算法等等
    • 第五章、高频面试系列(如何高效寻找素数,如何运用二分查找算法,如何去除有序数组的重复元素,如何同时寻找缺失和重复的元素等等

    Part 8SSM框架学习

    SSM框架有70%多的企业都在使用,但是有90%的程序员只是会用,因此如果你想拿高薪,这个技术栈是必须攻破的。

    Spring源码解读:

    Spring MVC源代码分析与实战:

    MyBatis源码解读:

    Part 9Zookeeper+Nginx+RocketMQ+Kafka

    这些分布式消息中间件等技术能直线提升架构技术

    Zookpeer分布式过程技术分析:

    Nginx从入门到精通:

    RocketMQ技术内幕:

    Kafka笔记:

    Part 9微服务(Spring Boot+cloud Alibaba)

    微服务在一些大型项目里经常会用到,微服务也是进阶高阶程序员必须要掌握的内容,我们主要讲讲Spring Boot和Spring Cloud Alibaba这两个微服务项目

    Spring Boot核心笔记:

    Spring Cloud Alibaba笔记:

    Spring Cloud微服务实战内容:

    最后

    作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料,如果**‘你’确定好自己未来的道路或者想学习提升自己技术栈、技术知识的小伙伴们可以点击这里来获取免费学习资料提升自己(全套面试文档、PDF、进阶架构视频)**


    可以点击这里来获取免费学习资料提升自己(全套面试文档、PDF、进阶架构视频)*

    [外链图片转存中…(img-oLMYAisg-1626758772525)]
    [外链图片转存中…(img-PvQZm4om-1626758772526)]

    展开全文
  • part 1Java基础核心技术总结 万事都离不开根基,Java基础对于一些老鸟来说可能已经很熟悉了,但是对于很多开发5年以下的朋友掌握的或许不是很牢固,因此这份笔记更适合温故而知新。 Part 2并发编程(架构师筑基...

    part 1Java基础核心技术总结

    万事都离不开根基,Java基础对于一些老鸟来说可能已经很熟悉了,但是对于很多开发5年以下的朋友掌握的或许不是很牢固,因此这份笔记更适合温故而知新。

    Part 2并发编程(架构师筑基必备)

    并发编程都掌握不好,你凭什么写出优质的代码?

    大厂必问并发编程技术栈,都在这张图上了:

    Part 3JVM(架构师筑基必备)

    JVM和并发编程都是Java语言中非常重要的技术点,同时也是带有一定难度的基础内容,在面试过程中JVM也是常问的面试内容。

    P8大佬自编笔记——深入了解性能优化:

    P8大佬自编笔记——JVM执行子系统:

    P8大佬自编笔记——JVM内存整理以及GC调优:

    P8大佬自编笔记——JVM内存区域划分:

    JVM学习笔记总结:

    • 线程
    • JVM内存区域
    • JVM运行内存
    • 垃圾回收与算法
    • Java四种引用类型
    • GC分代收集算法 VS 分区收集算法
    • GC垃圾收集器
    • JAVA IO/NIO
    • JVM类加载机制

    大厂必问JVM技术栈,都在这张图上:

    Part 4Netty与RPC

    网络编程我愿意称Netty为王,Netty的底层就是NIO网络编程+线程池组,很多消息中间件的底层就是Netty,因此如果你的项目里用到了Netty,面试官一定是会问到的。

    Netty的学习主要从以下几点入手,如果想面试类似于P7岗,你所要掌握的内容应该是一些底层原理和源码,比如说Linux内核源码,Linux服务器通信模型之类的,这些我们就不过深入研究了。

    你所要掌握的技术:

    • Netty原理
    • Netty高性能(多路复用通讯方式;异步通讯NIO;零拷贝;内存池等)
    • Netty RPC实现
    • RMI实现方式
    • Protoclol Buffer
    • Thrift

    Part 5MySQL深度进阶

    MySQL作为一款仅次于Oracle的免费开源项目,也是国内绝大多数公司都在用的,什么B+Tree、主从复制等等这些面试同样也是经常被问到。

    深入浅出MySQL,从0开始教你一步步熟练使用MySQL:

    Part 6Tomcat架构解析

    Tomcat应该是Java程序员必须会用的一个软件吧,基本上你能搞懂下面我列出来的这些就完全没问题了

    Part 7面试必问算法与数据结构

    在国内字节等大型公司的推动下,现在Java程序员都能感受到面试对于算法的面试基本上就是必问的了,因为算法面试其实是相对高效、准确且公平的筛选机制。

    面试必问的一些内容我也整理出来了,大家可以自行参考:

    数据结构与算法宝典,分为以下五个章节,每个章节都有细化内容:

    • 第一章、必读系列(必读书籍,动态规划、回溯算法、二分查找等解题套路框架及答疑
    • 第二章、动态规划系列(最长递增子序列,背包/完全背包/子集背包问题,编辑距离,正则表达,贪心算法,高楼扔鸡蛋等等
    • 第三章、数据结构系列(算法学习之路,二叉堆详解实现优先级队列,LRU算法详解,二叉搜索树操作集锦,如何计算完全二叉树的节点数,特殊数据结构:单调栈/单调队列,设计Twitter等等
    • 第四章、算法思维系列(回溯算法团灭子集、排列、组合问题,回溯算法最佳实践:解数独,递归详解,洗牌算法等等
    • 第五章、高频面试系列(如何高效寻找素数,如何运用二分查找算法,如何去除有序数组的重复元素,如何同时寻找缺失和重复的元素等等

    Part 8SSM框架学习

    SSM框架有70%多的企业都在使用,但是有90%的程序员只是会用,因此如果你想拿高薪,这个技术栈是必须攻破的。

    Spring源码解读:

    Spring MVC源代码分析与实战:

    MyBatis源码解读:

    Part 9Zookeeper+Nginx+RocketMQ+Kafka

    这些分布式消息中间件等技术能直线提升架构技术

    Zookpeer分布式过程技术分析:

    Nginx从入门到精通:

    RocketMQ技术内幕:

    Kafka笔记:

    Part 9微服务(Spring Boot+cloud Alibaba)

    微服务在一些大型项目里经常会用到,微服务也是进阶高阶程序员必须要掌握的内容,我们主要讲讲Spring Boot和Spring Cloud Alibaba这两个微服务项目

    Spring Boot核心笔记:

    Spring Cloud Alibaba笔记:

    Spring Cloud微服务实战内容:

    最后

    作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料,如果**‘你’确定好自己未来的道路或者想学习提升自己技术栈、技术知识的小伙伴们可以点击这里来获取免费学习资料提升自己(全套面试文档、PDF、进阶架构视频)**


    来获取免费学习资料](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)提升自己(全套面试文档、PDF、进阶架构视频)**

    [外链图片转存中…(img-JzGk9tof-1625659201012)]
    [外链图片转存中…(img-cyoVQOXP-1625659201012)]

    展开全文
  • 2019 Java 全栈工程师进阶路线图,一定要收藏

    千次阅读 多人点赞 2019-07-15 08:57:10
    我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,我相信这也是很多初学者经常面临的问题。​我当时经常胡子眉毛一把抓,那会学习资料倒是不缺,学校图书馆啥都有,就是无从下手,后来有高人...
  • JVM的内存结构规定Java程序在执行时内存的申请、划分、使用、回收的管理策略,通说来说JVM的内存管理指运行时数据区这一大块的管理。 2、线程运行 JVM中一个应用是可以有多个线程并行执行,线程被一对一映射为服务...
  • ·大数据相关,MapReduce ·Docker的原理 文末java面试题,进阶技术大纲,架构资料分享 我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档,有兴趣的朋友们可以点击这里即可...
  • Java初级进阶

    2021-04-07 17:35:02
    Java初级进阶初级篇Spring、SpringMVC、SpringBootMySQLHibernate和MybatisMavenGit和GitHub(之前了解...作为一名刚入职的新手java工程师,为了使自己没那么小白,准备趁工作之余系统的再熟悉学习一下Java工程师的必
  • Java程序员进阶书籍 ,看这11本书就够了

    万次阅读 多人点赞 2018-05-16 15:04:42
    《深入理解Java虚拟机:JVM高级特性与最佳实践》作者是周志明,这本书可以说是国内写得最好的有关Java虚拟机的书籍,近半年,前前后后这本书我起码看了有5遍。国内写虚拟机的书除了这本,其实还有一些其他的,我也买...
  • 什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。 普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界...在单机多线程的java程序中,我们可
  • 我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,我相信这也是很多初学者经常面临的问题。我当时经常胡子眉毛一把抓,那会学习资料倒是不缺,学校图书馆啥都有,就是无从下手,后来有高人...
  • JAVA进阶书籍

    2016-05-30 16:09:50
    全力以赴001 ...java进阶书籍推荐 第一部分: Java语言篇  1 《Java编程规范》   星级:   适合对象:初级,中级   介绍:作者James Gosling(Java之父),所以这本书我觉得你
  • 技术更新日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点松哥是深有体会的。我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,...
  • Java进阶书籍推荐

    千次阅读 2017-08-07 15:59:39
    Java进阶书籍推荐 船长 2 小时前 学习Java,书籍是必不可少的学习工具之一,尤其是对于自学者而言。废话不多说,下边就给大家推荐一些Java进阶的好书。 第一部分:Java语言篇 1.《Java编程规范》 适合对象...
  • 以下是我推荐给Java开发者们的一些值得一看的好书,从java基础开始到高级,以及从高级进阶到架构等的书单。 基本都是经典之作,可以利用工作闲暇的时间,系统阅读。 本文作者,优知学院创始人 陈睿 优知...
  • 史上最全的Java进阶书籍推荐

    万次阅读 多人点赞 2018-06-21 17:07:02
    废话不多说,下边就给大家推荐一些Java进阶的好书。第一部分:Java语言篇1.《Java编程规范》 适合对象:初级、中级介绍:这本书的作者是被誉为Java之父的James Gosling,入门者推荐阅读,对基础...
  • 1、Java se基础 2、android UI编程 3、android网络编程与数据存储 三、进阶之路(初级->中级->高级) 一、前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉...
  • 前端工程师进阶

    2017-10-11 16:08:33
    《前端工程师进阶》  HTML先看《HTML & CSS: Design and Build Websites》1-9章,然后《HTML5: The Missing Manual》1-4章。  CSS先看《CSS: The Missing Manual》,然后《CSS权威指南》  javascript先看...
  • Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术 【附】架构书籍赠送 BAT面试的20道高频数据库问题解析 Java面试宝典 Netty实战 算法 BATJ面试要点及Java架构师进阶资料 Java...
  • 程序员进阶必看!Java进阶书籍推荐

    千次阅读 2016-08-13 21:07:34
    第一部分:Java语言篇 1.《Java编程规范》 适合对象:初级、中级 介绍:这本书的作者是被誉为Java之父的James Gosling,入门者推荐阅读,对基础的讲解很不错。 2.《Java编程思想》 适合对象:初级、中级 介绍:...
  • 关乎于程序员,除了做项目来提高自身的技术,还有一种提升...在下面这 13 本书籍中小编还是要建议大家可以先去关注英文原版,毕竟翻译的书籍中都有一定的语法错误。 入门 《SSM企业级框架实战》 作者: 肖睿/丁

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,383
精华内容 3,353
关键字:

java工程师进阶书籍

java 订阅