[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