[Java] How Java engineers develop their minds
I. Basics 1.1 JVM1.1.1. Java memory model, Java memory management, Java heap and stack, and garbage collection
 
 
 Http://www.jcp.org/en/jsr/detail? Id = 133
Http://ifeve.com/jmm-faq/
 
1.1.2. Learn about JVM parameters and tuning 1.1.3. Learn how to use Java tools. 
 
 Jps, jstack, jmap, 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. Learning Java diagnostic tools 
 
 Http://www.eclipse.org/mat/
Http://visualvm.java.net/oqlhelp.html
 
1.1.5. Write various outofmemory and stackoverflow programs by yourself 
 
 HeapOutOfMemory
Young OutOfMemory
MethodArea OutOfMemory
ConstantPool OutOfMemory
DirectMemory OutOfMemory
Stack OutOfMemory
Stack OverFlow
 
1.1.6. Use the tool to solve the following problems and write down the summary 
 
 How to find problems when a Java program responds slowly
How to solve the problem when a Java program frequently FullGC and view the garbage collection log
How to solve OutOfMemory in a Java application? The solutions for the young generation, the old generation, and the permanent generation are different, and the causes are different.
 
1.1.7. References 
 
 Http://docs.oracle.com/javase/specs/jvms/se7/html/
Http://www.cs.umd.edu /~ API/java/memoryModel/
Http://gee.cs.oswego.edu/dl/jmm/cookbook.html
 
1.2. Java basics 1.2.1. Read Source Code 
 
 Java. lang. String
Java. lang. Integer
Java. lang. Long
Java. lang. Enum
Java. math. BigDecimal
Java. lang. ThreadLocal
Java. lang. ClassLoader & java.net. URLClassLoader
Java. util. ArrayList & java. util. Collections list
Java. util. HashMap & java. util. LinkedHashMap & java. util. TreeMap
Java. util. HashSet & java. util. javashashset & java. util. TreeSet
 
1.2.2. familiar with Java variable types 1.2.3. familiar with the use of Java String, familiar with various String functions 1.2.4. familiar with various Java keywords 1.2.5. learn how to use List, Map, Stack, Queue, Set 
 
 Traversal of the above data structure
Use Cases of the above data structure
Sort Array/List in Java
Java. uti. Arrays. sort ()
Java. util. Collections. sort ()
Java implements List deduplication
Java implements de-duplicating the List and retains the original order of appearance of data.
Java implements the least recently used cache and uses javashashmap
 
1.2.6. Java IO & Java NIO, and learn to use 
 
 Java. io .*
Java. nio .*
Nio and reactor design modes
File encoding, Character Set
 
1.2.7. Java reflection and javassist 
 
 Reflection and factory Model
Java. lang. reflect .*
 
1.2.8. Java serialization 
 
 Java. io. Serializable
What is serialization and why serialization?
Serialization and Singleton Mode
Google serialize protobuf
 
1.2.9. Virtual references, weak references, and soft references 
 
 Java. lang. ref .*
Experiment recycling of these references
 
1.2.10. Familiar with Java System attributes 
 
 Java. util. Properties
 
1.2.11. Familiar with Annotation usage 
 
 Java. lang. annotation .*
 
1.2.12. JMS 
 
 Javax. jms .*
 
1.2.13. JMX 
 
 Java. lang. management .*
Javax. management .*
 
1.2.14. Generic and inheritance, generic and erasure 1.2.15. Automatic binning and bytecode 1.2.16. Callback1.2.17. java. lang. Void class using 1.2.18. Java Agent, premain Function 
 
 Java. lang. instrument
 
1.2.19. Unit Test 
 
 Http://junit.org, Junit/
Jmockit https://code.google.com/p/jmockit/
DjUnit, http://works.dgic.co.jp/djunit/
 
1.2.20. Java uses regular expressions to extract emails from a text segment and replace @ with # output 
 
 Java. lang. util. regex .*
 
1.2.21. Learn to use common Java tool Libraries 
 
 Commons. lang, commons .*...
Guava-libraries
Netty
 
1.2.22. What is API & SPI 
 
 Http://en.wikipedia.org/wiki/Application_programming_interface
Http://en.wikipedia.org/wiki/Service_provider_interface
 
1.2.23. References 
 
 JDK src.zip source code
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 concurrent programming 1.3.1. Read the source code and learn how to use it 
 
 Java. lang. Thread
Java. lang. Runnable
Java. util. concurrent. Callable
Java. util. concurrent. locks. ReentrantLock
Java. util. concurrent. locks. ReentrantReadWriteLock
Java. util. concurrent. atomic. Atomic *
Java. util. concurrent. Semaphore
Java. util. concurrent. CountDownLatch
Java. util. concurrent. javasicbarrier
Java. util. concurrent. ConcurrentHashMap
Java. util. concurrent. Executors
 
1.3.2. Learn how to use the thread pool. What should I pay attention to when designing the thread pool? 1.3.3. Lock 
 
 What are locks, what are the types of locks, what are the characteristics of each lock, and what are the applicable scenarios?
What is the significance of lock in concurrent programming?
 
1.3.4. what is the role of synchronized? synchronized and lock1.3.5. sleep and wait1.3.6. wait and policy1.3.7. write a deadlock program 1.3.8. what is a daemon thread? What is the difference between a daemon thread and a non-daemon thread? usage 1.3.9. understanding of volatile keywords 
 
 C ++ volatile and Java volatile keywords
Happens-before Semantics
Compiler instruction shuffling and CPU instruction shuffling
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. Is the following code thread-safe? Why? Can thread security be achieved by adding volatile to count? What do you think is thread-safe? 
public class Sample {  private static int count = 0;  public static void increment() {    count++;  }}
1.3.11. Explain the differences between the two sections of code in the pipeline. 
// Code 1 public class Sample {private static int count = 0; synchronized public static void increment () {count ++ ;}} // Code 2 public class Sample {private static AtomicInteger count = new AtomicInteger (0); public static void increment () {count. getAndIncrement ();}}
1.3.12. References 
 
 Http://book.douban.com/subject/10484692/
Http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
 
Ii. Advanced Article 2.1. Java underlying knowledge 2.1.1. Learn about bytecode and class file formats 
 
 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 /~ CHBA/javassist/
Http://asm.ow2.org/
 
2.1.2. Writing a program requires the implementation of javap functions (manually completed, without the use of tools such as ASM) 
For example, Java source code:
 
  public static void main(String[] args) {    int i = 0;    i += 1;    i *= 1;    System.out.println(i);  }
 
After compilation, read the class file and output the following code:
 
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 cache, L1, L2, L3, and pseudo-sharing 
 
 Http://duartes.org/gustavo/blog/post/intel-cpu-caches/
Http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html
 
2.1.4. What is tail recursion 2.1.5. Familiar with bitwise operations 
 
 Bitwise operations are used to implement addition, subtraction, multiplication, division, and remainder operations.
 
2.1.6. References 
 
 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. Design Pattern 2.2.1. Implement AOP 
 
 Difference between CGLIB and InvocationHandler
Http://cglib.sourceforge.net/
Dynamic proxy Mode
Javassist implements AOP
Http://www.csg.ci. I .u-tokyo.ac.jp /~ CHBA/javassist/
Implement AOP Using ASM
Http://asm.ow2.org/
 
2.2.2. Use the template method design mode and policy design mode to achieve IOC2.2.3. use the thread-safe Singleton mode 2.2.4. nio and reactor design modes 2.2.5 without the need for synchronized and lock. References 
 
 Http://asm.ow2.org/
Http://cglib.sourceforge.net/
Http://www.javassist.org/
 
2.3. network programming knowledge 2.3.1. Java RMI, Socket, HttpClient2.3.2. use Java to write an HTTP server for a simple static file 
 
 The Client Cache function can return 304
Allows concurrent download of an object
Use a thread pool to process client requests
Use nio to process client requests
Supports Simple rewrite Rules
The above functions must meet the "open and closed principle" during implementation"
 
2.3.3. Understand the features of nginx and apache servers and build a corresponding server 
 
 Http://nginx.org/
Http://httpd.apache.org/
 
2.3.4. Use Java to implement FTP and SMTP protocols 2.3.5. What is CDN? If yes? What is the role of DNS? 
 
 Build a DNS server
Build a Squid or Apache Traffic Server
Http://www.squid-cache.org/
Http://trafficserver.apache.org/
Http://en.wikipedia.org/wiki/Domain_Name_System
 
2.3.6. References 
 
 Http://www.ietf.org/rfc/rfc2616.txt
Http://tools.ietf.org/rfc/rfc5321.txt
Http://en.wikipedia.org/wiki/Open/closed_principle
 
2.4. Framework knowledge 
 
 Spring and spring mvc. Read the main source code.
Ibatis, read the main source code
Use spring and ibatis to build a java server
 
2.5. Application Server knowledge 
 
 Familiar with jboss, https://www.jboss.org/overview/
Familiar with using tomcat, http://tomcat.apache.org/
Familiar with jetty and http://www.eclipse.org/jetty/
 
Iii. Advanced Article 3.1. Compiler Principles knowledge 3.1.1. Use Java to parse the following expressions and return results (the syntax is similar to the select sysdate-1 in Oracle from dual) 
 sysdate sysdate - 1 sysdate - 1/24 sysdate - 1/(12*2)
3.1.2. Filter a List by DSL 
  QList
  
   > mapList = new QList
   
    >;  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%'");
   
  
 
The matching objects in the list, that is, the last two objects, must be returned;
3.1.3. Use Java to implement the following programs (syntax and variable scope processing are similar to JavaScript ): 
Code:
 
var a = 1;var b = 2;var c = function() {  var a = 3;  println(a);  println(b);};c();println(a);println(b);
 
Output:
 
3212
3.1.4. References 
 
 Http://en.wikipedia.org/wiki/Abstract_syntax_tree
Https://javacc.java.net/
Http://www.antlr.org/
 
3.2. Operating System Knowledge 
 
 Ubuntu
Centos
Familiar with shell scripts in linux
 
3.3. Data Storage knowledge 3.3.1. Relational Database 
 
 MySQL
View execution plan
How to Build MySQL Master/Slave
What is binlog?
Derby, H2, PostgreSQL
SQLite
 
3.3.2. NoSQL 
 
 Cache
Redis
Memcached
Leveldb
Bigtable
HBase
Cassandra
Mongodb
Graph database
Neo4j
 
3.3.3. References 
 
 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. Big Data knowledge 3.4.1. Zookeeper, deploying zk3.4.2. Solr, Lucene, ElasticSearch on linux 
 
 Deploy solr, solrcloud, and add, delete, and query indexes on linux.
 
3.4.3. Storm, stream computing, understanding Spark and S4 
 
 Deploy storm on linux, use zookeeper for coordination, and run storm hello world, local and remote modes to run and debug storm topology.
 
3.4.4. Hadoop, offline computing 
 
 Hdfs: deploy NameNode, SecondaryNameNode, DataNode, upload files, open files, change files, delete files
MapReduce: deploy JobTracker, TaskTracker, and write mr Jobs.
Hive: deploy hive, write hive SQL, and obtain the result.
Presto: hive class, but faster than hive, it is worth learning
 
3.4.5. Distributed log collection flume, kafka, logstash3.4.6. data mining, mahout3.4.7. references 
 
 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. network security knowledge 3.5.1. what is DES, AES3.5.2. what is RSA, DSA3.5.3. what is MD5, sha13.5.4. What is SSL and TLS? Why is HTTPS relatively secure? 3.5.5. what is man-in-the-middle attack? 3.5.6. what are DOS, DDOS, and CC attacks 3.5.7. what is a CSRF attack 3.5.8. what is a CSS attack 3.5.9. what is SQL Injection Attack 3.5.10. what is a Hash collision Denial of Service Attack 3.5.11. learn about the following security enhancement technologies. 
 
 Http://www.openauthentication.org/
HOTP http://www.ietf.org/rfc/rfc4226.txt
TOTP http://tools.ietf.org/rfc/rfc6238.txt
Http://tools.ietf.org/rfc/rfc6287.txt OCRA
1) http://en.wikipedia.org/wiki/Salt_ (cryptography)
 
3.5.12. Use openssl to sign a certificate and deploy it to apache or nginx3.5.13. references 
 
 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/
 
Iv. Expansion article 4.1. Related Knowledge 4.1.1. cloud computing, distributed, high availability, scalability 4.1.2. Virtualization 
 
 Https://linuxcontainers.org/
Http://www.linux-kvm.org/page/Main_Page
Http://www.xenproject.org/
Https://www.docker.io/
 
4.1.3. Monitoring 
 
 Http://www.nagios.org/
Http://ganglia.info/
 
4.1.4. Server Load balancer 
 
 Http://www.linuxvirtualserver.org/
 
4.1.5. Learn how to use git 
 
 Https://github.com/
Https://git.oschina.net/
 
4.1.6. Learn how to use maven 
 
 Http://maven.apache.org/
 
4.1.7. Learn to use gradle 
 
 Http://www.gradle.org/
 
4.1.8. Learn a small language 
 
 Groovy
Scala
LISP, Common LISP, Schema, Clojure
R
Julia
Lua
Ruby
 
4.1.9. Try to understand the nature of Encoding 
 
 Understand the following concepts
ASCII, ISO-8859-1
GB2312, GBK, GB18030
Unicode, UTF-8
Do not use String. getBytes () or other tool classes/functions to complete the following functions
 
 
Public static void main (String [] args) throws IOException {String str = "Hello, we are Chinese. "; Byte [] utf8Bytes = toUTF8Bytes (str); FileOutputStream fos = new FileOutputStream (" f.txt "); fos. write (utf8Bytes); fos. close ();} public static byte [] toUTF8Bytes (String str) {return null; // TODO}
 
 
 Can the above program write a code for converting to GBK?
Write a program to automatically determine the encoding of a file
 
4.1.10. Try to understand the nature of time 
 
 Time zone & winter time, Daylight Saving Time
Http://en.wikipedia.org/wiki/Time_zone
Ftp://ftp.iana.org/tz/data/asia
Http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9C%8B%E6%99%82%E5%8D%80
Leap year
Http://en.wikipedia.org/wiki/Leap_year
Leap Second
Ftp://ftp.iana.org/tz/data/leapseconds
What is the time returned by System. currentTimeMillis ()?
 
4.1.11. References 
 
 Http://git-scm.com/
Http://en.wikipedia.org/wiki/UTF-8
Http://www.iana.org/time-zones
 
4.2. extended learning 4.2.1. JavaScript knowledge 4.2.1.1. What is prototype? 
 
 Modify the code so that the program outputs "1 3 5 ":
Http://jsfiddle.net/Ts7Fk/
 
4.2.1.2. What is a closure? 
 
 Let's take a look at This code and explain why "This is button: 1" is not output by alert when you press Button1. How to modify it:
Http://jsfiddle.net/FDPj3/1/
 
4.2.1.3. understand and learn about a JS framework 
 
 JQuery
ExtJS
ArgularJS
 
4.2.1.4. Write a Greasemonkey plug-in 
http://en.wikipedia.org/wiki/Greasemonkey
4.2.1.5. Learn node. js 
 
 Http://nodejs.org/
 
4.2.2. Learn html5 
 
 ArgularJS, https://docs.angularjs.org/api
 
4.2.3. References 
 
 Http://www.ecmascript.org/
Http://jsfiddle.net/
Http://jsbin.com/
Http://runjs.cn/
Http://userscripts.org/
 
5. Recommended books 
 
 Deep Java Virtual Machine
Deep understanding of Java Virtual Machine
Tive Java
Seven weeks and seven languages
Seven weeks and seven data
Hadoop technology insider
Hbase In Action
Mahout In Action
This is the search engine
Solr In Action
In-depth analysis of Java Web Technology
Technical Architecture of large websites
High-performance MySQL
Introduction to Algorithms
Computer Programming Art
Code Daquan
JavaScript authoritative guide