How Java engineers develop their minds
I have a good summary of the JAVA learning points. My friends can see which one they will not and learn in a targeted manner.
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
When a Java program responds slowly, how does one find the problem? How does one solve the problem when a Java program frequently FullGC? How does one check the garbage collection log? How does one solve the problem when a Java application occurs OutOfMemory, the solutions for the young generation, the old generation, and the permanent generation are different, and the causes are also 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.LinkedList`` java.util.HashMap & java.util.LinkedHashMap & java.util.TreeMap
java.util.HashSet & java.util.LinkedHashSet & 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
The above data structure traversal the use scenario of the above data structure Java ImplementationArray
/List
Sortjava.uti.Arrays.sort()
java.util.Collections.sort()
Java implements List deduplication, and the original sequence of data must be retained. Java implements the least recently used cacheLinkedHashMap
1.2.6. Java IO & Java NIO, and learn to use
java.io.*
java.nio.*
Nio and reactor design mode file encoding, Character Set
1.2.7. Java reflection and javassist
Reflection and factory Modeljava.lang.reflect.*
1.2.8. Java serialization
java.io. Serializable
What is serialization, why 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.CyclicBarrier
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 meanings of locks 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 keywords and Java volatile keywords happens-before semantic 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 pattern Javassist implement AOP http://www.csg.ci. I .u-tokyo.ac.jp /~ CHBA/javassist/
ASM implement AOP 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
Implement the Client Cache function, support returning 304 for concurrent downloading of a file using the thread pool to process client requests using nio for client requests support simple rewrite rules. The above features 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, spring mvc, read the main source code ibatis, read the main source code build java server with spring and ibatis
2.5. Application Server knowledge
Familiar with jboss, https://www.jboss.org/overview/ familiar with tomcat, http://tomcat.apache.org/familiar with jetty, 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/
3.2. Operating System Knowledge
Ubuntu Centos uses linux and is familiar with shell scripts
3.3. Data Storage knowledge 3.3.1. Relational Database
How does MySQL view the execution plan and how to build MySQL Master/Slave 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 does not use other tool classes/functions such as String. getBytes () 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 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 http://en.wikipedia.org/wiki/Leap_year
Leap ftp://ftp.iana.org/tz/data/leapseconds
System.currentTimeMillis()
What is the returned time?
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 at Button1, how to modify: 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